Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09

1. Inleiding

Omvormers van SolarEdge hebben de speciale eigenschap dat alle panelen van bijbehorende optimizers worden voorzien. Dit brengt de mogelijkheid met zich mee de opbrengst per paneel bij te houden. SolarEdge biedt haar eigen monitoring portaal om de opbrengst bij te houden. Hierop is de actuele situatie per paneel, per string en per omvormer in te zien. Bovendien zijn er grafieken beschikbaar van spanning, stroom, energie en vermogen van de omvormer en de panelen. Voor programmeurs is er de Monitoring API, waarmee de data van de omvormer (maar niet van de panelen) programmatisch ter beschikking wordt gesteld. De Monitoring API maakt het ook mogelijk om de data van de SolarEdge website rechtstreeks naar PVOutput.org te laten doorsturen.

Er zijn een aantal beperkingen aan de SolarEdge website, de Monitoring API en de koppeling met PVOutput. Zo is informatie per paneel in het geheel niet beschikbaar via de Monitoring API. Op de monitoring website kun je wel gedetailleerde informatie over de panelen krijgen, maar alleen op de grafiekenpagina die niet werkt op smartphones en tablets (en die naar mijn mening sowieso maar matig van kwaliteit is). De koppeling met PVOutput laat ook te wensen over, deze heeft last van herhaaldelijk afronden en het verkeerd toepassen van de 'active power' waarde van de omvormer, waardoor de cijfers op PVOutput behoorlijk afwijken van wat op de SolarEdge monitoring website wordt vermeld.

Om deze beperkingen en tekortkomingen te overwinnen wil de echte Tweaker natuurlijk best de handen uit de mouwen steken en een eigen logging database en website opzetten. Maar dat blijkt met SolarEdge omvormers nog niet zo eenvoudig. Daarom is dit topic er nu! :>


Tᴡᴇᴇ ʙᴇʟᴀɴɢʀɪᴊᴋᴇ ᴏᴘᴍᴇʀᴋɪɴɢᴇɴ!
:)F Het stappenplan in deze post is van toepassing op omvormers met display en zonder SetApp.
:)F Als je binnenkort een SolarEdge omvormer (met display en zonder SetApp dus) in gebruik neemt en deze met de in dit topic besproken methodes wilt loggen, lees de startpost van dit topic dan goed door voordat je de omvormer aan het internet hangt. Al lezende wordt wel duidelijk waarom. Trek die netwerkkabel er snel even uit!


1.1 Wat kan ik hiermee?
Met dit project (in de staat waarin het zich nu bevindt) kun je het volgende:
  • Telemetriedata (van de omvormer en de optimizers) die een SolarEdge omvormer naar de monitoring portal stuurt onderscheppen en opslaan in een MySQL database
  • De data van de omvormer automatisch laten uploaden naar PVOutput
Om de data mooi inzichtelijk te maken zou je een leuke website of app kunnen bouwen die uit deze database kan putten, maar dat is een afzonderlijk vervolgproject. @andrerij heeft in deze post zijn monitoring website ter beschikking gesteld. Zelf heb ik intussen ook wat in elkaar gezet, maar dit is nog niet rijp genoeg om te delen. Maar vanwege bovenstaande waarschuwing is het belangrijk dat je op tijd de logging software hebt ingesteld: je kunt het beste vóórdat de omvormer het internet op gaat al met dit project begonnen zijn. Laat je dus niet afschrikken door het gebrek aan een mooie website of app: deze komt wel, zorg nu eerst maar dat je die omvormer kunt afluisteren!


2. Afluisteren versus uitlezen

Er zijn grofweg twee manieren waarmee SolarEdge omvormers hun data beschikbaar kunnen stellen: via een seriële verbinding (RS-232 of RS-485) of via het internet. De keuze hiertussen kan gemaakt worden in het instellingenmenu van de omvormer. Het moge duidelijk zijn dat de meeste SolarEdge omvormers aan het internet worden gehangen, zodat gebruik gemaakt kan worden van de SolarEdge monitoring portal. De in dit topic beschreven methode is bedoeld voor omvormers die op het internet worden aangesloten. De omvormer blijft gewoon met de monitoring portal verbonden, maar de verbinding tussen de omvormer en de servers van SolarEdge zal worden afgeluisterd. De data die de omvormer (elke 5 minuten) verzendt naar de monitoring website kan zo worden onderschept en opgeslagen zodat het in een eigen monitoring website getoond en naar hartenlust geanalyseerd kan worden. Als bonus krijg je zelfs data die op de monitoring website niet te vinden is, zoals de temperatuur van de optimizers!

De verbinding met de servers van SolarEdge is sinds december 2015 beveiligd met AES-128 encryptie. Deze versleuteling is (voor zover bekend) onkraakbaar, dus een met AES-128 beveiligde verbinding kan alleen afgeluisterd worden als je de gebruikte beveiligingssleutel weet. SolarEdge heeft de versleuteling van de verbinding toegevoegd aan recente firmware (vermoedelijk vanaf CPU versie 3.x), maar deze staat bij nieuw geïnstalleerde omvormers standaard uit. Ergens in de eerste 48 uur dat de omvormer contact heeft met de servers van SolarEdge wordt de beveiligingssleutel uitgewisseld en direct daarna wordt de versleuteling aangezet. Het is dus belangrijk dat de verbinding al afgeluisterd wordt wanneer de versleuteling nog niet aan staat!

In het geval dat je de beveiligingssleutel niet hebt weten te onderscheppen (bijvoorbeeld omdat je omvormer er al een tijdje hangt) is het nog mogelijk om deze met een RS-232 verbinding uit te lezen. Hiervoor zul je wel de kap van de omvormer moeten openen, niet iedereen ziet dat zitten. Doe dit alleen als je weet waar je mee bezig bent en zorg voor je eigen veiligheid dat de DC schakelaar aan de onderkant op OFF staat. Als alternatief kun je een 'factory reset' van de omvormer (een optie in het service menu) uitvoeren om de encryptie weer uit te zetten. Let wel: na een factory reset staat de productieteller weer op nul en moet de omvormer opnieuw gepaird worden met de optimizers.

Wellicht dat dit topic in de toekomst wordt uitgebreid met informatie voor het rechtstreeks uitlezen van de omvormer via RS-232 (eventueel over USB) of RS-485. Het voordeel van uitlezen via een seriële verbinding is dat de uitleesfrequentie kan worden verhoogd en er geen gedoe is met encryptie. Het nadeel is dat je de monitoring website niet meer kunt gebruiken en je dus volledig zelf verantwoordelijk bent voor de monitoring.


3. Benodigdheden

Om de verbinding tussen de omvormer en de servers van SolarEdge te kunnen afluisteren en de data op te slaan heb je wel wat spullen nodig. Vooral de opzet van het netwerk is van belang: als je je omvormer en je computer aansluit op een normale switch of router neemt het verkeer gewoon de kortste weg naar buiten en kan de computer de omvormer dus niet afluisteren. Zorg dat je het volgende in huis hebt:
  • Een computer die altijd aan staat (mag een server, nas of Raspberry Pi zijn) en waar je MySQL, tcpdump en Python2 scripts op kunt draaien. Als je nog geen spul 24/7 hebt draaien kan ik een pricewatch: Raspberry Pi 3 Model B 1GB aanbevelen. Vanaf nu heet deze computer de logger.
  • Een domme ouderwetse ethernet hub (dus géén switch of router) óf een switch met 'port mirroring' functie óf een tweede netwerkaansluiting op je logger. Veel mensen hebben geen van de drie opties in huis. Als je ook nog geen logger had is dit een extra reden voor de Raspberry Pi 3 Model B: die heeft een ethernetpoort én WiFi (dus twee netwerkverbindingen). Als je al een logger hebt kun je eenvoudig een tweede netwerkpoort toevoegen met een USB-naar-Ethernet dongle.
Ik ga er in dit geheel even van uit dat de logger op een Linux distributie draait die systemd gebruikt (ik heb het zelf op Ubuntu 16.04 draaien). Als iemand het op Windows wil installeren moeten we daar gaandeweg een handleiding voor schrijven, wat dan weer hier aan de topicstart kan worden toegevoegd. Waarschijnlijk is het ook mogelijk om het op sommige NAS'en te installeren, maar ook dit zal eerst maatwerk worden voordat we het in de topicstart kunnen zetten.


4. Het netwerk instellen

Het installeren van de logger komt in de volgende sectie aan bod. Eerst moeten we het netwerk op orde krijgen. Ik raad je aan om het eerst te proberen met een andere computer in de plaats van de omvormer zodat je zonder dataverlies kunt checken of de verbinding werkt en of je met tcpdump op de logger het verkeer van de computer kunt zien. Sluit i.v.m. de encryptie de omvormer pas aan op het internet als je zeker weet dat de logger kan meeluisteren!
  • Met een domme ethernet hub: Sluit drie netwerkkabels op de hub aan, één naar de omvormer, één naar de logger en één naar de rest van je netwerk voor de internettoegang. De omvormer en de logger ontvangen nu elkaars verkeer. Zo kan de logger dus meeluisteren met de communicatie van de omvormer.
  • Met een switch met 'port mirroring' functie: Sluit de logger aan op de 'mirror port' (andere termen: 'analysis port', 'monitoring port'). Op de 'gewone' netwerkpoorten sluit je de kabel naar de omvormer en de kabel naar de rest van het netwerk aan. Stel de switch zo in dat de data op de poort waar de omvormer aan hangt wordt gemirrord naar de mirror port.
  • Met twee netwerkpoorten op de logger: Sluit de omvormer aan op de ene netwerkpoort en verbind de andere met de rest van je netwerk. Stel een netwerkbrug in tussen de twee netwerkpoorten (zie sectie 4.1). De omvormer maakt dan verbinding met het netwerk via de logger, wat de logger natuurlijk in staat stelt om hem af te luisteren.
  • Met WiFi en een netwerkpoort op de logger: Bijvoorbeeld in het geval van de Raspberry Pi 3 Model B heb je te maken met één ethernetpoort en een WiFi-verbinding, wat de configuratie wat complexer maakt. Als je omvormer een WiFi-module heeft kun je het beste sectie 4.1 volgen. Als je omvormer geen WiFi heeft ga je naar sectie 4.2.

4.1 Omvormer ━┫ kabel of WiFi ┣━ Logger ━┫ kabel ┣━ Internet
Een logger met twee netwerkverbindingen die bekabeld aan het internet hangt is redelijk eenvoudig op te zetten. Met de volgende netwerkconfiguratie kun je twee ethernetpoorten (eth0 en eth1) bridgen. Hiervoor moet bridge-utils geïnstalleerd zijn. Sla deze code op in /etc/network/interfaces. Na een reboot wordt de configuratie actief.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
## /etc/network/interfaces
auto lo br0
iface lo inet loopback
iface eth0 inet manual
iface eth1 inet manual

iface br0 inet static
    bridge_ports eth0 eth1
        address 192.168.178.2
        broadcast 192.168.178.255
        netmask 255.255.255.0
        gateway 192.168.178.1
        dns-nameservers 8.8.8.8 8.8.4.4


Pas de IP-adressen in dit voorbeeld eventueel aan zodat ze op jouw netwerk zijn afgestemd. In het voorbeeld is 192.168.178.2 het adres van de logger en 192.168.178.1 het adres van het modem.

Heb je een omvormer met WiFi-module en je logger heeft ook WiFi, dan kun je met 'hostapd' de logger een WiFi-netwerk laten uitzenden. Die kun je dan op dezelfde manier bridgen (verander 'eth1' in 'wlan0' in de code hierboven). Het WiFi netwerk waar de omvormer mee verbindt wordt gebridged met de netwerkpoort die de verbinding naar buiten levert. Op die manier stel je de logger in feite in als draadloos toegangspunt (AP).

Om de logger te testen sluit je even een computer/laptop aan in plaats van de omvormer en draai je het volgende commando op de logger (verander 'eth1' naar 'wlan0' als de testcomputer via WiFi verbinding maakt):
user@logger$  sudo tcpdump -c 25 -i eth1 tcp

Op de testcomputer open je dan een website, waarna je op de logger output moet zien verschijnen. Als dat is gelukt kun je verder bij Sectie 5.


4.2 Omvormer ━┫ kabel ┣━ Logger ━┫ WiFi ┣━ Internet
De meeste mensen zullen geen WiFi module bij hun SolarEdge omvormer hebben. Met een logger met WiFi zoals de Raspberry Pi 3 Model B kom je dan hier op uit: we gebruiken de WiFi om de logger met het internet te verbinden, zodat de omvormer met de netwerkkabel aan de logger kan worden gehangen. We kunnen dan geen netwerkbrug maken zoals bij sectie 4.1; in plaats daarvan stellen we de logger in als router. Dat gaat als volgt.

Installeer 'wpasupplicant' als je WiFi-netwerk met WPA Personal is beveiligd (99% kans...). Je moet je WiFi-wachtwoord omzetten in een 'PSK' (Pre-Shared Key) met het volgende commando:
user@logger$  wpa_passphrase Naam-Van-Jouw-WiFi-Netwerk JouwWachtwoordHier123!

Je krijgt dan als output o.a. een regel die begint met 'psk=' gevolgd door een reeks letters en cijfers. Die letters en cijfers heb je nodig in de volgende stap.

Sla de volgende code op in /etc/network/interfaces en vul hierin de naam van jouw WiFi-netwerk en je PSK in. Zorg ook dat de IP-adressen die onder 'wlan0' staan genoemd kloppen. 192.168.178.2 is in dit voorbeeld het IP-adres van de logger, 192.168.178.1 het IP-adres van je modem.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
## /etc/network/interfaces
auto lo
iface lo inet loopback

# Instellingen voor de Wi-Fi verbinding:
auto wlan0
iface wlan0 inet static
    address 192.168.178.2
    broadcast 192.168.178.255
    netmask 255.255.255.0
    gateway 192.168.178.1
    dns-nameservers 8.8.8.8 8.8.4.4
    wpa-ssid Naam-Van-Jouw-WiFi-Netwerk
    wpa-psk a897a679b6b987a665a765c786a8769f876a7856754765f67097d0987a96787d

# Instellingen voor de bedrade verbinding naar de omvormer (deze hoeven niet veranderd te worden):
auto eth0
iface eth0 inet static
    address 192.168.179.1
    network 192.168.179.0
    broadcast 192.168.179.255
    netmask 255.255.255.0



Om de omvormer een IP-adres te geven moeten we een DHCP-server instellen. Installeer 'isc-dhcp-server' om te beginnen. Open dan het bestand /etc/dhcp/dhcpd.conf en zet het volgende erin:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
## /etc/dhcp/dhcpd.conf
option domain-name "example.com";
option domain-name-servers 8.8.8.8, 8.8.4.4;

default-lease-time 600;
max-lease-time 7200;

option subnet-mask 255.255.255.0;
option broadcast-address 192.168.179.255;
option routers 192.168.179.1;

subnet 192.168.179.0 netmask 255.255.255.0 {
  range 192.168.179.10 192.168.179.100;
}



Met alleen een IP-adres ben je er nog niet, de omvormer moet ook verbinding kunnen maken met het internet. Hiervoor is Network Address Translation (NAT) nodig, wat we instellen met 'iptables'. We stellen hiermee de logger in als router. Sla het onderstaande script op als /opt/scripts/se-nat.sh:

Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
## /opt/scripts/se-nat.sh
echo -e "\n\nLoading simple rc.firewall-iptables version $FWVER..\n"
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe

EXTIF="wlan0"
INTIF="eth0"
echo "   External Interface:  $EXTIF"
echo "   Internal Interface:  $INTIF"

#======================================================================
#== No editing beyond this line is required for initial MASQ testing ==
echo -en "   loading modules: "
echo "  - Verifying that all kernel modules are ok"
$DEPMOD -a
echo "----------------------------------------------------------------------"
echo -en "ip_tables, "
$MODPROBE ip_tables
echo -en "nf_conntrack, "
$MODPROBE nf_conntrack
echo -en "nf_conntrack_ftp, "
$MODPROBE nf_conntrack_ftp
echo -en "nf_conntrack_irc, "
$MODPROBE nf_conntrack_irc
echo -en "iptable_nat, "
$MODPROBE iptable_nat
echo -en "nf_nat_ftp, "
$MODPROBE nf_nat_ftp
echo "----------------------------------------------------------------------"
echo -e "   Done loading modules.\n"
echo "   Enabling forwarding.."
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "   Enabling DynamicAddr.."
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "   Clearing any existing rules and setting default policy.."

iptables-restore <<-EOF
*nat
-A POSTROUTING -o "$EXTIF" -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i "$EXTIF" -o "$INTIF" -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i "$INTIF" -o "$EXTIF" -j ACCEPT
-A FORWARD -j LOG
COMMIT
EOF

echo -e "\nrc.firewall-iptables v$FWVER done.\n"


Maak het script uitvoerbaar en test het ook even:
user@logger$  chmod a+x se-nat.sh
user@logger$  sudo sh se-nat.sh

Als hier geen errors uit naar voren komen werkt het.

Dit script moet automatisch worden uitgevoerd bij het opstarten van de logger. Dit kan door het bestand /etc/systemd/system/se-nat.service te maken, met de volgende inhoud:

code:
1
2
3
4
5
6
7
8
9
10
11
12
## /etc/systemd/system/se-nat.service
[Unit]
Description=This service sets up NAT for the SE side
After=network.target

[Service]
ExecStart=/bin/bash /opt/scripts/se-nat.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target


Vervolgens activeer je de service met het volgende commando:
user@logger$  sudo systemctl enable se-nat.service
user@logger$  sudo systemctl start se-nat.service

Om de logger te testen sluit je even een computer/laptop aan in plaats van de omvormer en draai je het volgende commando op de logger:
user@logger$  sudo tcpdump -c 25 -i eth0 tcp

Op de testcomputer open je dan een website, waarna je op de logger output moet zien verschijnen.


5. De logging software instellen

Nu het netwerk zo is ingesteld dat de omvormer kan worden afgeluisterd, kan begonnen worden met het instellen van de logging software. Hiervoor zijn grofweg drie opties: het project van user jbuehl op GitHub, mijn eigen solaredge-logger project, of het maken van een eigen brouwsel. Vanzelfsprekend zal ik hier de installatie van solaredge-logger bespreken, omdat ik daar het meest bekend mee ben.

Solaredge-logger is als volgt opgebouwd:
  • Met behulp van 'tcpdump' wordt de netwerkverbinding van de omvormer afgeluisterd, alle TCP communicatie wordt opgeslagen in PCAP bestanden. De solaredge-logger service wordt elke nacht herstart, zodat er van elke dag een apart PCAP bestand wordt gemaakt.
  • Het PCAP bestand wordt tegelijkertijd meegelezen door een script dat de gewenste data hieruit destilleert en opslaat in een eenvoudige MySQL database met een tabel voor omvormer data en een tabel voor optimizer data.
  • Een stand-alone PHP script dat de data van de omvormer-tabel uploadt naar PVOutput, wordt d.m.v. een cronjob elke 2 minuten uitgevoerd.
  • Los hiervan worden er twee scripts meegeleverd waarmee de beveiligingssleutel van de omvormer verkregen kan worden.
Volg onderstaande stappen om solaredge-logger te installeren:
  1. Om te beginnen kan de laatste versie gedownload worden van jerweb.nl/downloads/solaredge-logger. Het project staat ook op GitHub.
  2. Zorg dat de volgende pakketten zijn geïnstalleerd: mysql-server, python-mysqldb, python-crypto. Als je ook naar PVOutput wilt uploaden, komen daar nog bij: php-cli, php-mysql, php-curl. (Mocht je de melding krijgen dat deze php-pakketten niet bestaan, probeer dan php7- of php5- als prefix.)
  3. Maak een MySQL database aan met behulp van de SQL statements in 'database.txt'.
  4. Maak de directory '/opt/se-logger' en zet de bestanden 'liveupdate.py', 'pvo-upload.php' en 'se-logger-service.sh' erin.
  5. Open 'liveupdate.py' en vul de gebruikersnaam en het wachtwoord van de MySQL database in in het SETTINGS gedeelte bovenaan. Je vindt hier ook de plaats waar de beveiligingssleutel van de omvormer ingevuld moet worden. Als je omvormer nog niet aan het internet is verbonden, of CPU versie lager dan 3.x heeft, heb je de sleutel nog niet nodig. In sectie 6.1 staat meer informatie over hoe je deze kunt achterhalen wanneer je merkt dat er opeens geen data meer de database in gaat. Heeft je omvormer CPU versie 3.x of hoger én hangt hij al langer dan een paar uurtjes aan het internet? Kijk dan even naar sectie 6.2.
  6. (Optioneel, voor PVOutput updates) Open 'pvo-upload.php' en vul ook hierin de gebruikersnaam en het wachtwoord van de MySQL database in in het SETTINGS gedeelte bovenaan. Verder vul je hier ook de PVOutput API key en het System ID in, welke je kunt vinden op de Account Settings pagina van PVOutput. (Let op: Als je niet aan PVOutput hebt gedoneerd is de hoeveelheid status updates die tegelijk verzonden kunnen worden gelimiteerd tot 30. In dat geval moet je in pvo-upload.php de 'LIMIT 100' aanpassen naar 'LIMIT 30' om problemen te voorkomen.)
  7. Open 'se-logger-service.sh' en zorg dat in het SETTINGS gedeelte 'interface' verwijst naar de netwerkpoort waarop de omvormer is aangesloten. Als je sectie 4.1 hebt gevolgd is het waarschijnlijk 'eth1' of 'wlan0'; als je sectie 4.2 hebt gevolgd is het 'eth0'.
  8. Zet het bestand 'se-logger.service' in de '/etc/systemd/system' directory. Draai je Raspbian? Dan moet je de 'KillMode=' regel aanpassen naar 'KillMode=control-group'. Als je sectie 4.2 had gevolgd (logger via WiFi verbonden met het internet) is het aan te raden om /etc/systemd/system/se-nat.service aan te passen en de 'After=' regel te veranderen naar 'After=network.target se-logger.service'. Dit zorgt ervoor dat de omvormer pas toegang krijgt tot internet als de logger service draait.
  9. Vervolgens activeer je de service met het volgende commando:
    user@logger$  sudo systemctl enable se-logger.service
    user@logger$  sudo systemctl start se-logger.service
    
  10. We stellen cronjobs in die de service elke nacht herstarten en elke 2 minuten een update sturen naar PVOutput. Geef hiervoor het commando 'sudo crontab -e' en kopieer dan de inhoud van 'crontab.txt' welke bij de se-logger download inbegrepen was naar jouw crontab. (Als je geen PVOutput uploads wilt, moet je de regel waar 'pvo-upload.php' in staat weglaten.)
Geef de logger eventueel even een reboot. Hierna zou de logging software moeten draaien. Dit is te controleren door te kijken in /opt/se-logger. Hierin vind je de volgende output bestanden:
  • tcpdump.log: bevat de 'error' output van tcpdump. Hier hoort één regel in te staan met iets dat lijkt op: "tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes". Als er meer in staat is er mogelijk iets mis, of is de se-logger service gestopt.
  • liveupdate.log: bevat de 'error' output van liveupdate.py (het belangrijkste script van se-logger). Wat je hier NIET in wilt lezen is "End of file. Shutting down.", wat betekent dat de service is gestopt. Als je hier veel "Warning! Skipping (getal) mysterious bytes!" in tegen komt betekent dit vrijwel zeker dat je omvormer encryptie gebruikt en dat in het SETTINGS gedeelte van liveupdate.py niet de juiste sleutel is ingevuld. Kijk dan even in sectie 6.1.
  • solarege-20160924003000.pcap: bevat alle onderschepte communicatie van de omvormer. De getallen in de bestandsnaam geven de datum en tijd (jaar, maand, dag, uur, minuut, seconde) waarop de se-logger service werd gestart. Doordat de service elke nacht wordt herstart krijg je voor elke dag een aparte capture file. Je kunt deze bestanden openen in een programma als Wireshark. Tip: bewaar deze bestanden als back-up! Hierin zit alle data. Zelfs als je je database verliest kun je hem met deze bestanden weer helemaal vullen.
Wanneer je met een testcomputer in de plaats van de omvormer probeert op het internet te surfen zou je de 'solaredge-xxxx.pcap' file moeten zien groeien. Als dit werkt kun je (eindelijk!) de omvormer aansluiten.


6. De encryptiesleutel achterhalen

Bij solaredge-logger worden twee kleine Python scripts meegeleverd die helpen de encryptiesleutel te achterhalen. Net zoals solaredge-logger zelf, werken deze scripts met Python 2 en dus niet met Python 3.

6.1 De encryptiesleutel achterhalen uit PCAP capture bestanden
Zoals in sectie 2 al is uitgelegd, staat bij nieuw geïnstalleerde omvormers de encryptie standaard uit. Ergens in de eerste 48 uur dat de omvormer contact heeft met de servers van SolarEdge wordt de beveiligingssleutel uitgewisseld en direct daarna wordt de versleuteling aangezet. Als je solaredge-logger hebt opgezet vóórdat de encryptie werd aangezet, zit je encryptiesleutel ergens in de 'solaredge-xxx.pcap' bestanden in de /opt/se-logger directory verscholen. Bij solaredge-logger wordt een script 'find-key-in-pcap.py' meegeleverd, welke je kunt gebruiken om de sleutel op te zoeken in de PCAP bestanden die de se-logger service maakt. Dit kan met het commando:
user@logger$  python find-key-in-pcap.py /opt/se-logger/*.pcap

Als het script met succes je beveiligingssleutel weet te vinden wordt hij netjes getoond zodat je hem in liveupdate.py kunt zetten. Ga daarna te werk volgens sectie 6.3.

Als de sleutel niet kan worden gevonden, zul je waarschijnlijk via RS-232 de sleutel van de omvormer moeten opvragen (sectie 6.2). Ook kun je een 'factory reset' van de omvormer (een optie in het service menu) uitvoeren om de encryptie weer uit te zetten (dank @xces voor het proberen). Let wel: na een factory reset staat de productieteller weer op nul en moet de omvormer opnieuw gepaird worden met de optimizers.


6.2 De encryptiesleutel achterhalen via RS-232
Als je omvormer al encryptie gebruikte voordat je se-logger had ingesteld, of als om wat voor reden dan ook de encryptiesleutel toch niet in je PCAP bestanden terecht is gekomen, blijft er altijd nog een plan B. Bij solaredge-logger zit ook een script 'get-key-by-rs232.py', waarmee de sleutel rechtstreeks uit de omvormer uitgelezen kan worden. Hiervoor moet je een computer (dit hoeft niet per se de logger te zijn en kan ook prima op Windows) op de RS-232- of USB-aansluiting die aan de binnenkant van de omvormer zit aansluiten. In het SETTINGS gedeelte bovenaan het script vul je de naam van de seriële poort en (de eerste 8 tekens van) het serienummer van je omvormer in. Vervolgens voer je het script uit (met Python 2) en vertelt het je de encryptiesleutel. De werking van dit script is praktisch gegarandeerd (het is echt een heel simpel script), maar het aansluiten van de omvormer vereist wat extra kennis en bovendien moet hiervoor de kap van de omvormer verwijderd worden, wat sommigen als 'over de grens' kunnen ervaren. Probeer deze situatie dan liever te mijden als het nog niet te laat is!


6.3 De database bijwerken nadat je de encryptiesleutel hebt ingevoerd
Als de solaredge-logger service heeft staan draaien zonder dat je een encryptiesleutel had ingevuld in het SETTINGS gedeelte van 'liveupdate.py' terwijl de omvormer versleutelde gegevens verstuurde, is de versleutelde data niet in de MySQL database terecht gekomen. Met het volgende eenvoudige stappenplan kun je de database weer op orde maken.
  • Trek de netwerkkabel van de omvormer eruit om dataverlies te voorkomen
  • Stop de se-logger service met het commando:
    user@logger$  sudo service se-logger stop
  • Je kunt nu de database bijwerken met de versleutelde gegevens door het commando:
    user@logger$  python /opt/se-logger/liveupdate.py /opt/se-logger/*.pcap
    Dit kan in het begin heel wat 'duplicate key' warnings geven. Als het goed is eindigt dat met een bericht "Setting new 0503 key" waarna het script in relatieve stilte verder gaat. Er moet in ieder geval geen "Warning! Skipping (getal) mysterious bytes!" meer komen.
  • Als je PVOutput uploads had aan staan kun je maximaal 2 minuten later zien of de aanpassing is gelukt. Anders kun je eventueel in de database kijken of de data van vandaag er nu in staat.
  • Wanneer je hebt geconcludeerd dat dat goed is gegaan, start je de se-logger service weer met het commando:
    user@logger$  sudo service se-logger start

7. Tot slot

Zoals je waarschijnlijk wel hebt kunnen merken is het niet zo eenvoudig om een SolarEdge omvormer te loggen. Voel je vrij om in dit topic om hulp te vragen. Er zullen vast delen van deze startpost zijn die duidelijker moeten. Zeker voor mensen zonder ervaring met Linux zal het pittig zijn, maar samen kunnen we vast wel een mooi overzicht van leesvoer maken om de in de startpost gebruikte Linuxdingen toe te lichten. Wat dat betreft is dit topic net zo "under construction" als het project zelf!

Met dank aan Tweaker Aegle voor het meetesten van deze software en GitHub-gebruikers jbuehl en Whizkidzz voor hun onmisbare werk om het SolarEdge protocol te ontcijferen.

Jerrythafast wijzigde deze reactie 10-08-2019 09:56 (200%)

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


Acties:
  • +1Henk 'm!
  • Pinned

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09

Je eigen monitoring website

@andrerij heeft op basis van het solaredge-logger project een monitoring website gebouwd. Hij heeft zijn project gedeeld in deze post, inclusief instructies voor hoe je het voor je eigen SolarEdge systeem kunt installeren.




Heb jij ook een monitoring website gebouwd die je hier wilt delen? Post 'm gerust in dit topic!

Jerrythafast wijzigde deze reactie 11-03-2018 08:24 (113%)

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
JeroenTheStig schreef op maandag 26 september 2016 @ 22:15:
Complimenten voor de TS! Ik zal binnenkort kijken of ik met bovenstaande omschrijving de key kan achterhalen. Dit kan ook een leuk subproject worden van mijn domoticaproject, wat zich momenteel nog in de orienterende fase bevindt :)

Ik heb vorig jaar overigens nog wat geprutst met de destijds onversleutelde data, echter was op dat moment het protocol nog niet helemaal ontcijferd. Ik begrijp dat dit inmiddels geheel onder controle is?
De werking van het protocol is inmiddels volledig ontcijferd. Er zitten wel nog wat vraagtekens in de data zelf, en niet van alle commando's is exact bekend wat ze nou doen.

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • ocaj
  • Registratie: juli 2011
  • Niet online
@Jerrythafast: Mooie openingspost, uitleg ziet er prima uit!
quote:
Wellicht dat dit topic in de toekomst wordt uitgebreid met informatie voor het rechtstreeks uitlezen van de omvormer via RS-232 (eventueel over USB) of RS-485. Het voordeel van uitlezen via een seriële verbinding is dat de uitleesfrequentie kan worden verhoogd en er geen gedoe is met encryptie. Het nadeel is dat je de monitoring website niet meer kunt gebruiken en je dus volledig zelf verantwoordelijk bent voor de monitoring.
Zelf heb ik er voor gekozen om mijn omvormers niet aan de solaredge-portal te koppelen, maar voor een volledige stand-alone oplossing te gaan. Voor mij was dat geen nadeel, maar een feature :)

Ik heb mijn omvormers (2 stuks) via RS485 aangesloten die middels een RS485-USB converter aan een Raspberry Pi ("logger") hangen. Daarop heb ik de scripts van jbuehl draaien.
De (json)-output die daaruit komt schrijf ik ook in een database.

Mochten mensen over een dergelijke opstelling vragen hebben dan wil ik die met alle plezier in dit topic beantwoorden.

Om gelijk wat toe te lichten: Je geeft als voordeel aan dat de uitleesfrequentie omhoog kan bij serieel uitlezen. Mogelijk kan dat via RS232, maar via RS485 heb je daar niet veel over te zeggen. RS485 werkt volgens een bus-principe waarop er 1 apparaat zich als "Master" gedraagt en de rest is "Slave". Op RS485 mag maar 1 apparaat tegelijk communiceren, dat wordt geregeld door de Master.

Je configureert dan alle omvormers als Slave en de logger gedraagt zich als Master. De Master geeft bij toerbeurt elke omvormer de kans om wat te zeggen, maar heel vaak zegt de omvormer alleen terug dat hij niks te melden heeft. De omvormer zegt pas wat terug als hij zelf weer nieuwe data heeft.

Omvormer-data komt precies elke 5 minuten.
Optimizer-data komt op minder vaste tijdstippen. Ik heb er nog geen patroon in kunnen ontdekken, maar soms komt die vaker, soms ook minder vaak dan 5 minuten. Ik vermoed (heb het nog niet naast elkaar bekeken) dat zodra je de data op het telemetry-schermpje van de omvormer langs ziet komen, dat de omvormer hem vervolgens ook via RS485 ontsluit. Ook op het telemtry-schermpje zie je sommige optimizers zich vaker melden dan andere, mogelijk afhankelijk van de schommelingen in de productie (varieert grofweg tussen de 80 en 140 entries per optimizer per dag).

Omdat de omvormer - net als bij ethernet - zelf bijhoudt welke data al gerapporteerd zijn aan de portal kan hij maar naar 1 apparaat loggen, dus OF ethernet, OF RS485. Je kunt dat instellen in het menu van de omvormer.
Als hij op beide zou kunnen loggen zou hij ook per data moeten bijhouden wat er al gerapporteerd is, dat is blijkbaar te ingewikkeld.

Overigens blijft de omvormer dezelfde data rapporteren totdat hij een bevestiging ontvangen heeft dat het bericht goed aangekomen is. Dat is zowel over ethernet als over RS485 zo. Wel fijn dus dat er op applicatie-niveau een acknowledge is ingebouwd, zodat de kans dat je data kwijt raakt erg klein is.

De omvormer heeft een geheugen van max. 30 dagen, alhoewel ik over de eerste maand veel minder optimizer-data heb dan over latere dagen, dus mogelijk dat de omvormer nog detail-data van meer dan een paar dagen oud weggooit of samenvoegt om ruimte te besparen. Inmiddels lopen mijn scripts 24/7 (nou ja, eigenlijk van 5:00-22:00), dus als het eenmaal draait, dan is de opslagcapaciteit van de omvormer geen issue meer.

  • rense
  • Registratie: mei 2003
  • Laatst online: 02-09 16:34
Ja. Zie ook de uitgebreide conversatie (waar Jerrythafast dezelfde vraag stelde) op
https://github.com/jbuehl/solaredge/issues/8

Als ik de inverter via USB aan m'n Windows-laptop plug, krijg ik er een COM-poort bij (COM12 in mijn geval), net als wanneer je een USB-naar-Seriëel kabeltje in de USB-poort steekt. De SE-conf-tool begint altijd met een selectiemenuutje waar je vervolgens de juiste COM-poort selecteert.

  • rense
  • Registratie: mei 2003
  • Laatst online: 02-09 16:34
De commando's die je moet sturen zijn in byte-vorm bekend. Als je je eigen seriële communicatie wilt ontwerpen, dan lijkt mij de makkelijkste methode het project van jbuehl te reverse-engineeren. In zijn code wordt steevast gesproken over de 'Datafile', maar onder linux zijn alle poorten (USB/seriëel) ook te beschouwen als files. De code maakt (voor zover ik het zag) verder dan ook geen onderscheid in file/RS485/ethernet en RS232, op wel of niet encryptie na.
De commando's staan in seCommands.py, en het berichten naar de omvormer stuurt hij met de functie sendMsg in de file seMsg.py. Elke message wordt vooraf gegaan door de 'magic' sequence "\x12\x34\x56\x79", wat in Telnet of Hyperterm eruit zou zien als (http://ascii.cl/) <DC2>"Vy. Ook niet echt leesbaar ;-)

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
rense schreef op maandag 07 november 2016 @ 21:55:
:) Haha, mooi. Ik vind het geen probleem proefkonijn te spelen.

Ik heb meteen nog wel een vraag. Gisteravond en vandaag vulde de optimimertabel zich meteen en prima, maar de inverter-tabel blijft tot nog toe leeg. Enig idee of dit normaal is of duidt op een foutje ergens?
Heb je toevallig een 3-fasen omvormer? If not, wat is je CPU version? Ik vermoed dat je een omvormer of versie hebt die net iets meer data meestuurt dan die ik tot nu toe heb gezien. Als dat zo is zou je me kunnen helpen jou te helpen door een PCAP file (liefst een unencrypted exemplaar) toe te sturen. Dan heb ik snel genoeg een nieuwe versie van solaredge-logger paraat die er wat mee kan :)

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • rense
  • Registratie: mei 2003
  • Laatst online: 02-09 16:34
quote:
Jerrythafast schreef op dinsdag 08 november 2016 @ 19:42:
[...]

Heb je toevallig een 3-fasen omvormer? If not, wat is je CPU version?
Het is een 1-fasen omvormer. CPU version 3.1818. Ik denk dat dit nog een unencrypted file is:

pcap-file

Ik ben benieuwd wat er nog meer te vinden is. Of verwacht jouw code op dit moment een vast rijtje met gegevens van de inverter en wanneer dit langer is geworden, skipt hij het?

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
rense schreef op dinsdag 08 november 2016 @ 21:00:
[...]


Het is een 1-fasen omvormer. CPU version 3.1818. Ik denk dat dit nog een unencrypted file is:

pcap-file

Ik ben benieuwd wat er nog meer te vinden is. Of verwacht jouw code op dit moment een vast rijtje met gegevens van de inverter en wanneer dit langer is geworden, skipt hij het?
Hij verwacht nu 124 of 174 bytes aan 1-fase-omvormer-data. Als het meer of minder is, of geen 1-fase omvormer, negeert hij het. Dit heb ik zo gedaan om te voorkomen dat er random crap in je database komt.

De PCAP file die je deelde bevat trouwens ook de switch waarbij encryptie werd ingeschakeld. :9 Ik ga even kijken wat jouw omvormer nog meer te vertellen heeft. Hij stuurt inderdaad een paar bytes extra.

Als ik de nieuwe versie klaar heb kun je daarmee trouwens gewoon de PCAP files van de afgelopen dagen opnieuw laten parsen om de data in je database te krijgen ;)


EDIT:
solaredge-logger v0.0.6
Het gedeelte van de data wat ik had ontcijferd en in de database bewaar is hetzelfde bij jouw versie, hij zendt alleen nog wat meer. Simpele fix was dus gewoon om de langere data te accepteren :)

Update instructie: volg paragraaf 6.3 van de OP. Nadat je de service hebt gestopt kun je liveupdate.py van versie 0.0.6 overnemen en daarmee de database aanvullen (vergeet je settings niet aan te passen in het script :9 )

Jerrythafast wijzigde deze reactie 08-11-2016 21:59 (19%)

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • rense
  • Registratie: mei 2003
  • Laatst online: 02-09 16:34
quote:
Jerrythafast schreef op donderdag 10 november 2016 @ 20:24:
[...]

De modification time wordt door mijn scripts niet aangepast. Op het laagste niveau (se-logger-service.sh) is het PCAP bestand het output argument van het programma 'tee'. Dat programma past de modification time aan als er nieuwe data in wordt geschreven. Daarna zou de modification time niet meer moeten veranderen. Als dit wel het geval is is er een ander programma dat er blijkbaar aan zit te morrelen.
Hmm, ik moet mijn services dan maar eens bij langs welke er stiekem nog steeds draaien na allerhande experimenteren.

Jouw andere key-scriptje was ik idd vergeten, maar ik had hem dan ook niet nodig gehad. Mooi compleet pakket heb je gemaakt. _/-\o_

Ik kan binnenkort mijn SE-omvormer vs. slimme meter output gaan vergelijken, want daar stroomt sinds gisteren ook de data uit. Had er een tijd mee zitten klooien, maar een ander merk USB-seriëelconverter loste alles op.

rense wijzigde deze reactie 11-11-2016 08:57 (12%)


  • Yoki1985
  • Registratie: augustus 2007
  • Laatst online: 14-09 21:12
quote:
Jerrythafast schreef op donderdag 10 november 2016 @ 20:24:
[...]

Het is nog steeds mogelijk hoor. Je zult alleen je omvormer open moeten schroeven en even via USB of RS-232 aan een computer moeten hangen om de encryptie sleutel uit te lezen. Zie paragraaf 6.2: 'De encryptiesleutel achterhalen via RS-232'.

Hiervoor heb je het project van jbuehl dat rense hierboven linkt helemaal niet nodig. Bij solaredge-logger zit een heel simpel scriptje dat je hiervoor kunt gebruiken. Dit werkt zelfs nog op Windows. Je moet in het script even het serienummer van je omvormer en de naam van de seriële poort (COM-poort op Windows) invullen in het SETTINGS gedeelte en dan is het simpelweg:
python get-key-by-rs232.py

Het script roept dan "Your key is: '....'". Die key vul je in in liveupdate.py en klaar is Kees :)
Goh zalig, ga ik zeker eens proberen. Ik hou jullie op de hoogte!

  • Corn
  • Registratie: november 2001
  • Laatst online: 09-09 08:09

Corn

Raar jongetje

quote:
Jerrythafast schreef op zondag 20 november 2016 @ 10:17:
[...]

Erm, ik vrees van niet eerlijk gezegd, jij hebt de primeur ;) Ik weet dat de 3-fase omvormers meer data versturen (diverse zaken aan de AC-kant zijn dan immers in drievoud) dus er zal sowieso iets voor moeten worden aangepast. Ik denk dat ik ook even een 3-fase inverter_telemetry database tabel moet bijmaken.

Zou ik van jou een PCAP capture bestandje mogen hebben (die is gemaakt met licht op de panelen) en de sleutel waarmee je omvormer zijn data scramblet? Dan kan ik even kijken wat voor telemetrie we eruit kunnen halen ;)
Cool! Ondertussen is er optimizer data gelogged, dat lijkt in ieder geval goed te werken.

Misschien interessant voor andere tweakerts die Jerry's systeem gaan gebruiken, ik heb gekozen voor een andere 'aansluitmethode'. Ik heb een ESXi box waar gevirtualiseerd alles in draait, ook m'n router (pfSense). Ik heb ik een VM met se-logger gestart en aangesloten op het VLAN waar ook de SolarEdge inverter op zit. Vervolgens voor dat VLAN promiscuous mode enabled, zodat de se-logger VM deze data rechtstreeks op kan pikken.



Omdat er wat meer IoT devices op zitten die ook allemaal hun data uitspuigen op hetzelfde VLAN, heb ik een kleine aanpassing in se-logger-service gemaakt:
code:
1
/usr/bin/stdbuf -i0 -o0 -e0 /usr/sbin/tcpdump -i $INTERFACE -U -w - -n host 10.0.15.8 2>> ${CAPTDIR}tcpdump.log | \

IP van m'n omvormer is 10.0.15.8 in dit geval. (Je zou 't ook mooi configurable kunnen maken met een variabele, maar ik ben onwijs lui.)

Hierdoor wordt alleen de relevante data opgeslagen in de PCAP, en loopt ie niet vol met MQTT-onzin van m'n wifi temperatuur loggers e.d.

Wie weet heeft iemand er wat aan ;)

Ik PM je zo met de pcap en key!

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
Corn schreef op zondag 20 november 2016 @ 11:01:
[...]


Cool! Ondertussen is er optimizer data gelogged, dat lijkt in ieder geval goed te werken.

Misschien interessant voor andere tweakerts die Jerry's systeem gaan gebruiken, ik heb gekozen voor een andere 'aansluitmethode'. Ik heb een ESXi box waar gevirtualiseerd alles in draait, ook m'n router (pfSense). Ik heb ik een VM met se-logger gestart en aangesloten op het VLAN waar ook de SolarEdge inverter op zit. Vervolgens voor dat VLAN promiscuous mode enabled, zodat de se-logger VM deze data rechtstreeks op kan pikken.

[afbeelding]

Omdat er wat meer IoT devices op zitten die ook allemaal hun data uitspuigen op hetzelfde VLAN, heb ik een kleine aanpassing in se-logger-service gemaakt:
code:
1
/usr/bin/stdbuf -i0 -o0 -e0 /usr/sbin/tcpdump -i $INTERFACE -U -w - -n host 10.0.15.8 2>> ${CAPTDIR}tcpdump.log | \

IP van m'n omvormer is 10.0.15.8 in dit geval. (Je zou 't ook mooi configurable kunnen maken met een variabele, maar ik ben onwijs lui.)

Hierdoor wordt alleen de relevante data opgeslagen in de PCAP, en loopt ie niet vol met MQTT-onzin van m'n wifi temperatuur loggers e.d.

Wie weet heeft iemand er wat aan ;)

Ik PM je zo met de pcap en key!
Wauw, gave set-up! Je had ook je FILTER variabele in se-logger-service.sh op '-n host 10.0.15.8.2 tcp' kunnen zetten ;)

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • Corn
  • Registratie: november 2001
  • Laatst online: 09-09 08:09

Corn

Raar jongetje

Jerrythafast heeft zijn naam eer aan gedaan en in een bliksemtempo support voor 3-phase SE omvormers toegevoegd! Hulde!

  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

Hij is inderdaad snel is ook mijn ervaring _/-\o_ .
Heb je hem al eens een e-mail gestuurd? Hij is ook nog eens de beste... _O- _O- _O- d:)b .

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


  • Quinie
  • Registratie: juli 2001
  • Laatst online: 03-09 15:04
Bedankt voor dit topic. Er hang net vandaag een systeem 3 fases hier te draaien. Nog 30 dagen dus om de pi af te configureren ;)

....
Give me my marker show me my line... surely this is it... the edge?
http://www.Quinie.nl
http://soundcloud.com/quinie


  • Corn
  • Registratie: november 2001
  • Laatst online: 09-09 08:09

Corn

Raar jongetje

It verks! Stats:

https://tweakers.net/ext/f/DQKvsX7gqhkTwKfJZH2TpHCa/thumb.png

Toegegeven; dit zou ook gewerkt hebben met de standaard API. Maar deze grafiekjes zijn geproduceerd zonder tussenkomst van de portal!

  • Corn
  • Registratie: november 2001
  • Laatst online: 09-09 08:09

Corn

Raar jongetje

quote:
Aegle schreef op donderdag 24 november 2016 @ 22:48:
@Corn: hoe heb je die grafiek gegenereerd? komt dat uit een slimme meter of zo? inderdaad gaaf!
Moet er eens een projectpaginatje van maken; het is een intens domme draaischijfmeter met twee reflectiesensoren. Deze zitten weer op een chinese fake-duino, en die zit weer op een ESP8266.

Door gebruik te maken van 2 sensoren en een simpele state-machine kan de arduino vaststellen welke kant de meter op draait. Verder zitten er wat trucjes in om de drempelwaarden voor de comparator bij te stellen, maar verder doet ie niet veel. Iedere rotatie en richting worden via een NodeMCU scriptje op de MQTT queue gegooid, en een PHP scriptje aan de andere kant haalt deze er weer af. Het scriptje houdt via een sql-db de kWh-meters bij, en deze worden weer door een RRD scriptje achter een cronjob uitgelezen.

Daarnaast timed ie de passage van de 'zwarte streep', zodat ie redelijke nauwkeurigheid het gebruik op dit moment kan weergeven.

De zwarte lijn is actueel metering gebaseerd op de tijd tussen het passeren van de zwarte streep. Ik heb een beetje onhandige kWh meter hiervoor, want hij heeft 'slechts' 120 rotaties per kWh. Hierdoor verlies ik samples rond de 0-lijn, en treedt er aliasing op.

De milka-kleurige balken is het actuele gebruik, op basis van de SQL-kWh meter die iedere 5 minuten gesampled wordt. De 5-minuten samples van de inverter via Jerry's scripts worden hier vanaf getrokken, zodat je altijd actueel gebruik kunt aflezen.

Als ik ooit eens tijd heb zal ik eens een guide schrijven :)

Wat sfeerfotos:
https://tweakers.net/ext/f/WiBozzJyww6WNQNPmXTjlnel/thumb.jpghttps://tweakers.net/ext/f/tlpfoR4VTaDHpV2LLWu4Tyk0/thumb.jpghttps://tweakers.net/ext/f/gqXygCPXX30gF0cs3XVhz2nh/thumb.jpghttps://tweakers.net/ext/f/LUWD3cgOyXJW0G62j5W2l5dF/thumb.jpghttps://tweakers.net/ext/f/nLoIJ7XW4FWr8pS4wqPNZ4m4/thumb.jpg

  • tinka
  • Registratie: juli 2006
  • Laatst online: 14-09 12:05
quote:
Jerrythafast schreef op donderdag 24 november 2016 @ 22:27:
[...]
Dank voor je aanvulling. Ben er zelf nooit tegenaan gelopen dat solaredge-logger startte vóór mysqld. Als dit inderdaad een issue is kun je het beste de .service file aanpassen zodat de service niet start zonder mysqld.
[...]
Probleem was dat ik niet de weet of het bv mysqld.service is of iets anders. Met 'systemctl list-unit-files' kwam ik sql niet tegen. Linux is niet dagelijkse kost voor mij dus daarom maar op deze alternatieve manier.

PVOutput - Lichtvangers - SolarEdge 5.510kW


  • Quinie
  • Registratie: juli 2001
  • Laatst online: 03-09 15:04
Ga ik zo even doen. Dat is inderdaad de melding die ik krijg.
Maar het moet vandaag even tussen de bedrijven door testen. Ik laat het je weten.

....
Give me my marker show me my line... surely this is it... the edge?
http://www.Quinie.nl
http://soundcloud.com/quinie


  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

Ik heb een tijdje terug een .php scriptje geschreven (met dank aan Jerry) om, heel redumentair, de waarden via een web pagina weer te geven. De SQL-data heb ik volgens onderstaande regels ontsloten:
code:
1
2
3
4
5
6
........
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT HEX(op_id), FROM_UNIXTIME(timestamp), v_in/8, i_in/160, v_in*i_in/1280, v_out/8, e_day/4, temperature*2 FROM telemetry_optimizers ORDER BY op_id DESC, timestamp DESC LIMIT 250");
........

Zoals je ziet is de temperatuur maal 2.

EDIT: tot nu toe geen meldingen in de errorlogs van mysql. Toch moest ik vanmorgen weer de logger stoppen en herstarten. Vanmorgen meteen maar de nieuwste versie van liveupdate.py geïnstalleerd. Als het goed is mag het stoppen van mysql nu niet meer voor komen. we gaan het morgen meemaken :) .

Aegle wijzigde deze reactie 12-12-2016 22:31 (18%)

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

Mooi. De melding neem ik verder voor lief en beschouw dat puur als melding en niet als error.
Nogmaals, in de mysql logs zie ik niets vreemds.

Ik ga mee met de naam "SolarEdge-logger" :) .

Nu weer verder sleutelen aan de grafieken en gauges... :+ .

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


  • tjanssen
  • Registratie: augustus 2012
  • Niet online
Gaan we daar binnenkort achter komen dan. Heb de keus om deze nieuwe omvormer te laten hangen namelijk. Heb de logger klaar staan. :)

tjanssen wijzigde deze reactie 17-12-2016 07:52 (15%)


  • tjanssen
  • Registratie: augustus 2012
  • Niet online
De SE3680H is geinstalleerd, en hangt aan de logger. :D

Ik zie een paar regels in de tabel telemetry_inverter, maar de tabel telemetry_optimizers blijft leeg. Dit zal wel normaal zijn omdat het donker is? Ik zie de pcap wel iedere 5 minuten groeien.

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
tsjoender schreef op donderdag 22 december 2016 @ 19:58:
[...]


Voordat je je familie uit gaat leggen dat je deze kerst niet komt, moet ik bekennen dat ik nog niet precies weet hoe ik jouw project in ga zetten. Uiteindelijk wil ik alleen realtime weten hoeveel Watt er geproduceerd wordt en hoeveel Wh er al geproduceerd is. Zodoende kan ik het werkelijke stroomverbruik berekenen door die gegevens met de gegevens van de slimme meter te combineren en mooie staatjes te maken voor dag/week/maand/jaaropbrengst en -verbruik. Upload naar pvoutput zal dan vast ook komen. Via de portal van SolarEdge kan ik dan wel de optimiser data bekijken (en ook weer staatjes voor opbengst). Ik begreep dat de data bij de SolarEdge portal altijd iets "verouderd" is en de slimme meter nagenoeg realtime, dus dat het niet eerlijk rekenen is als ik die gegevens van de portal haal voor dit doel.

Qua opstelling heb ik nu de situatie van optie 1. Ik had me niet gerealiseerd dat optie 2 ook een mogelijkheid is. Dat zou ik eigenlijk ook wel prima vinden om het zo aan te sluiten als dat het meeluisteren eenvoudiger maakt.
Optie 2 is wel iets minder storingsgevoelig voor solaredge-logger. Bij optie 1 bestaat er een hele kleine kans dat de twee omvormers tegelijk 'praten' en er een bericht van de ene omvormer midden in het bericht van de andere omvormer terecht komt. (Voorwaarde hiervoor is wel dat het bericht van die andere omvormer zo lang is dat het over meerdere TCP segments wordt verdeeld). In dit geval zul je met de huidige versie wat data in je database kunnen missen. Maar het lijkt me niet nodig om de set-up hiervoor om te bouwen.

De data die je met solaredge-logger krijgt is exact de data die naar de SolarEdge portal wordt gestuurd. Deze data is dus ook niet 100% live, over het algemeen krijg je elke 5 minuten de actuele data van elk onderdeel in het systeem (omvormer, optimizer).

Er is wel een hypothetische mogelijkheid dat je je omvormers rechtstreeks via RS485 uitleest en hierbij de frequentie van de telemetrie kunt verhogen; er lijkt een commando te bestaan waarmee je die interval van 5 minuten op elk gewenst aantal seconden kunt instellen... Je mist dan alleen wel de SolarEdge portal.
quote:
tjanssen schreef op donderdag 22 december 2016 @ 20:28:
Ik neem aan dat de logger niet afhankelijk is van het ip adres van de omvormer? Wat gebeurt er als deze tijdens het loggen anders wordt?
De logger is inderdaad niet afhankelijk van het IP-adres van de omvormer. Het IP-adres wordt zelfs volledig genegeerd. In feite wordt al het opgevangen TCP verkeer dat afkomstig is van SolarEdge netwerkkaarten (dit is te zien aan het MAC adres) geanalyseerd en samengevoegd tot één datastroom waarin SolarEdge datapakketjes worden opgespoord en verwerkt.

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • tsjoender
  • Registratie: april 2005
  • Laatst online: 08:28
quote:
Jerrythafast schreef op vrijdag 23 december 2016 @ 11:40:
[...]
Hmm, misschien heeft hij nog wel een USB-poort aan de binnenkant zitten? Of ze zeggen er gewoon niks over in de handleiding omdat het voor 99,999% van de mensen toch niet interessant is.
Die kap gaat er bij mij vast nog wel een keer af een dezer dagen, dus ik kan dan wel eens kijken of ik ergens een USB aansluiting tegenkom.

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
tinka schreef op vrijdag 23 december 2016 @ 22:24:
Nope, geen verschil.

root@es-logger:/opt/se-logger# nano pvo-upload.php

...
$c = curl_init("http://pvoutput.org/service/r2/addbatchstatus.jsp");
curl_setopt_array($c, [
CURLOPT_RETURNTRANSFER => false,
CURLOPT_FAILONERROR => true,
...

root@es-logger:/opt/se-logger# /usr/bin/php pvo-upload.php
cURL error, exiting: The requested URL returned error: 400 Bad Request
root@es-logger:/opt/se-logger#
Ah stom, dat had ik kunnen verwachten 8)7 Behalve RETURNTRANSFER op false, moet je ook FAILONERROR even op false zetten. En even de $db query aan het einde weg //commenten. Dan zou je wél duidelijkere output moeten krijgen.

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • tsjoender
  • Registratie: april 2005
  • Laatst online: 08:28
quote:
Jerrythafast schreef op vrijdag 23 december 2016 @ 19:08:
[...]

Dat zou inderdaad een handige optie zijn, ik weet alleen niet precies hoe het moet. Er moet dan iets van een system-wide instelling zijn die zegt: als proces X niet bestaat, mag interface Y niet gebruikt worden. Als iemand weet of dit mogelijk is laat ik me graag voorlichten over hoe dit moet ;)
Waarschijnlijk kun je Monit gebruiken hiervoor. Die kun je allerhande zaken laten controleren en daar weer acties aan koppelen als de status veranderd.

Omgekeerd zou volgens mij ook kunnen als de interface exclusief gebruikt wordt om met de omvormer te verbinden. Je zou dan een script toe kunnen voegen aan /etc/network/if-up.d en / of /etc/network/if-down.d. Daarbij zou je dan niet tcpdump herstarten, maar de interface down brengen (en via een if-down script tcpdump stoppen) en de interface weer up brengen (en een tcpdump starten op die interface).

https://wiki.ubuntu.com/OnNetworkConnectionRunScript

  • tinka
  • Registratie: juli 2006
  • Laatst online: 14-09 12:05
quote:
Mooi! :) Nu willen we natuurlijk wel een PVOutput linkje om het resultaat te aanschouwen O-)
bij deze http://pvoutput.org/intraday.jsp?id=53302&sid=49539.

Het is nu alleen wachten op mooier weer.

PVOutput - Lichtvangers - SolarEdge 5.510kW


  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

gefeliciteerd!

Als we zo doorgaan kunnen we straks een eigen team aanmaken bij PVoutput :) .

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


  • Pietjebel10
  • Registratie: augustus 2010
  • Laatst online: 12:23
quote:
tsjoender schreef op zaterdag 24 december 2016 @ 14:08:
Vandaag de kap van de SE3000H gehad en er is inderdaad een micro-USB aansluiting net naast de ethernet aansluiting. Als ik daar een laptop aankoppel, dan wordt er een serial-USB device aangemaakt (FTDI). Het lukte me alleen niet om de key op te vragen met het get-key-by-rs232-verbose.py script. Bij het invullen van het serienummer worden alleen Hex waarden geaccepteerd en bij mij is het serienummer niet volledig Hex. Als ik de niet Hex letters weglaat werkt het ook niet. Moet de omvormer ook ingesteld worden op RS232 communicatie voordat ik de key opvraag? Waren de serienummers van de voorgaande omvormers helemaal in Hex of klopt het dat je alleen het tweede blok invult (die is wel volledig Hex bij mij).
Ik heb het met de get key by rs232 gedaan op de SE3000

Bij aansluiten zie je welke com wordt aangemaakt, dit invullen in file + inverter_id

serial_port ="com9"
inverter_id = 0x7xxxxxxx

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
tsjoender schreef op zaterdag 24 december 2016 @ 14:08:
Vandaag de kap van de SE3000H gehad en er is inderdaad een micro-USB aansluiting net naast de ethernet aansluiting. Als ik daar een laptop aankoppel, dan wordt er een serial-USB device aangemaakt (FTDI). Het lukte me alleen niet om de key op te vragen met het get-key-by-rs232-verbose.py script. Bij het invullen van het serienummer worden alleen Hex waarden geaccepteerd en bij mij is het serienummer niet volledig Hex. Als ik de niet Hex letters weglaat werkt het ook niet. Moet de omvormer ook ingesteld worden op RS232 communicatie voordat ik de key opvraag? Waren de serienummers van de voorgaande omvormers helemaal in Hex of klopt het dat je alleen het tweede blok invult (die is wel volledig Hex bij mij).
Het serienummer van je omvormer is iets dat lijkt op "7F10269C-A9". Mogelijk staat er op de sticker nog een stukje voor, dit kun je weglaten. De twee tekens en het streepje aan het einde kun je ook weglaten. In het script zet je dan 0x7F10269C.

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
tjanssen schreef op dinsdag 27 december 2016 @ 19:18:
[...]


Dit heeft zeker geholpen! Middels een directe link waren ook de dagen te benaderen die niet in het lijstje van outputs stonden. Hier stond allemaal rare (verschoven) data in. Na op deze manier echt alles verwijderd te hebben heeft de import wel gewerkt! :)

Sturen jullie inverters trouwens midden in de nacht ook data? Heb ongeveer 1 keer per nacht een mode 2 bericht. Tijdstip hiervan lijkt willekeurig te zijn. Heb het vermoeden dat het hier ergens fout gegaan is.
Hier is dat alleen 2x voorgekomen doordat ik de omvormer 's avonds laat een reset had gegeven (powercycle). Normaal gesproken blijft hij stil in de nacht.
quote:
tsjoender schreef op dinsdag 27 december 2016 @ 19:52:
Vandaag geprobeerd om de verzamelde pcap data uit te lezen en in MySQL op te slaan. Dankzij de goede uitleg in de topicstart had ik dat snel voorelkaar (eerst voor een omvormer). Nu leek het mij handig als meteen na het updaten van de data in MySQL ook een http call gedaan wordt naar mijn Domoticz instance vanuit liveupdate.py. Hier blijkt alleen dat mijn programmeer skills tekort schieten, dus graag wat hulp.

Ik heb al uitgevonden hoe ik met urllib2 een http call kan doen naar Domoticz toe en daar zie ik dan een device bijgewerkt worden. Maar voor mij werkt dit alleen als ik steeds eenzelfde URL gebruik. Als ik variabelen wil gebruiken in de URL dan krijg ik allemaal foutmeldingen over de verkeerde syntax, verkeerde type (string, list, tuple etc). Ik begrijp dat de waarden welke naar MySQL geschreven worden een tuple is, maar hoe kan ik daar een aantal waarden uit destileren? Dat wordt me niet duidelijk. Het eerste deel van de URL is altijd gelijk en het laatste deel bevat de waarden welke variabel zijn. Ik zie voorbeelden dat ik zo'n URL dan samen kan stellen:
code:
1
2
3
        url_data = <lijstje variabelen met puntcomma gescheiden>
        url = "http://<hostname>:8080/json.htm?type=command&param=udevice&idx=123&nvalue=0&svalue=" + url_data
        urllib2.urlopen(url)

Maar ik krijg het maar niet voorelkaar om uit die lijst met waarden een paar specifieke te pakken en als string te presenteren met de naam url_data. Wie kan mij op weg helpen? Het gaat voor nu specifiek om p_active en e_total waarmee de uiteindelijke totale URL er zo ongeveer uit zou komen te zien:
code:
1
http://<hostname>:8080/json.htm?type=command&param=udevice&idx=123&nvalue=0&svalue=123.456;2345


Python:
1
url = "http://<hostname>:8080/json.htm?type=command&param=udevice&idx=123&nvalue=0&svalue=%(p_active)s;%(e_total)s" % telem

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • tsjoender
  • Registratie: april 2005
  • Laatst online: 08:28
quote:
Jerrythafast schreef op dinsdag 27 december 2016 @ 20:16:
[...]
Python:
1
url = "http://<hostname>:8080/json.htm?type=command&param=udevice&idx=123&nvalue=0&svalue=%(p_active)s;%(e_total)s" % telem

Thanks! Nu werkt het. Voor het makkelijker upgraden is het inderdaad beter om het los toe te voegen, maar op deze manier heb ik de data vrijwel meteen als het beschikbaar komt uit de omvormer en hoef ik niet te pollen voor updates. Bovendien zitten er toch al een paar customizations in dat liveupdate.py script (gebruikersnaam, wachtwoord, key) waarmee ik bij een upgrade toch wat dingen over moet nemen en dan is twee regels code ook te overzien. Voor nu is eerst de focus op iets werkends opleveren. Straks komen de puntjes op de i.

UPDATE: Logging naar Domoticz werkt prima. Het systemd start stop script lijkt niet op Ubuntu 14.04 te werken, dus daar moet ik nog een alternatief voor maken, maar daar kom ik wel uit. Ik heb voor beide omvormers een kopie van de se-logger-service.sh en liveupdate.py scripts met daarin de specifieke details voor die omvormer (encryptie key en prefix bijvoorbeeld). Als tcpdump filter gebruik ik "ether host 00:27:02:11:22:33" zodat ik alleen pakketten specifiek van dat MAC adres pak. Het draait op mijn NAS dus als ik grote files heen en weer kopieer, hoeft dat niet allemaal terug te vinden te zijn in een pcap file :)

Nu nog iets vinden om die mist op te doen trekken en de zon weer zijn werk te laten doen, want de opbrengst is op dit moment karig:

https://tweakers.net/ext/f/m0Q5yGRrB5CIzgzrbtkOgM4i/full.jpg

tsjoender wijzigde deze reactie 29-12-2016 10:43 (35%)


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
tinka schreef op donderdag 5 januari 2017 @ 18:05:
@Jerrythafast, had jij nog plannen om je export to web pagina te delen?
(voor dat ik als totale leek zelf aan de slag ga.)
Ik zou je kunnen sturen wat ik op http://jerweb.nl/pv/ heb draaien, maar wel met een dikke disclaimer dat het echt work in progress is. Zitten ook een aantal dingen hardcoded in (o.a. dagtarget, panelen). Stuur even een DM als je ermee wilt klooien.

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
Yoki1985 schreef op maandag 9 januari 2017 @ 10:21:
@Jerrythafast: Ik heb jouw SeLogger draaien bij mij nu. Ik krijg data te zien in mijn mysql-database.
Echter als ik de query in het php bestand uitvoer dan krijg ik 0 rijen terug, hierdoor wordt er dus ook niets gestuurd naar pvoutput.

Ik heb het probleem kunnen traceren tot het volgende stuk:
MySQL:
1
SELECT UNIX_TIMESTAMP(FROM_UNIXTIME(pvo_last_live, "%Y%m%d")) FROM live_update

deze retourneerd "NULL". Dit komt omdat pvo_last_live altijd op 0 blijft staan volgens mij.
[afbeelding]

Enig idee wat er mis is?
Thanks! Is jouw tijdzone toevallig ingesteld op iets ten westen van GMT?

Here's the fix:
MySQL:
1
SELECT IFNULL(UNIX_TIMESTAMP(FROM_UNIXTIME(pvo_last_live, "%Y%m%d")), 0) FROM live_update

Wat betreft de logging pagina, ik overweeg om hem op GitHub te gooien. Dan kunnen we er met zijn allen aan rommelen ;) Het enige nare is dat mijn panelen en maandtarget er hardcoded in staan, maar daar valt wel een tijdelijke oplossing voor te bedenken in de vorm van een kleine config file.

Jerrythafast wijzigde deze reactie 09-01-2017 21:06 (14%)

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • ocaj
  • Registratie: juli 2011
  • Niet online
1 grote omvormer was oorspronkelijk ook het plan, maar ik had zoveel gedoe om Stedin mijn aansluiting van 1x25A naar 1x35A te laten verhogen dat ik uiteindelijk ervoor gekozen heb om 2 kleinere ipv 1 grote omvormer te gebruiken. Elk van die omvormers blijft nu selectief t.o.v. de 25A hoofdzekering en het totaal komt nooit boven de 25A uit.
(Ze hangen er sinds juni, max export die ik gezien heb is 22A, met 12x 335Wp Op Oost en 4x 335Wp op West, allemaal op 45 graden, het lijkt precies te passen op 1x 25A hoofdaansluiting)

Maar inderdaad, nu in de wintermaanden zie je regelmatig dat allebei de omvormers zo'n 3-400 Watt produceren. Qua effiiciëntie zitten ze dan allebei ongunstig terwijl het totaal op 1 grote omvormer wel een betere efficiëntie zou hebben gehad. En ik heb op 1 van de omvormers bij hele lage zon af en toe een situatie dat er maar 2 of 3 van de 8 in de zon liggen en de rest in de schaduw. Dat krijgen de optimizers dan ook niet voor elkaar om alles eruit te halen.

(Stedin wilde mijn hele tuin open graven om de aansluiting naar de straat te vervangen, waarbij ik dan zelf nog mantelbuizen door mijn kruipruimte naar de meterkast moest aanleggen. Vandaar dat ik maar voor de iets mindere efficiëntie in de winter gekozen heb...)

  • Bob-B190
  • Registratie: december 2003
  • Laatst online: 07:28
Kwam er zelf overigens vrij snel achter dat mijn nieuwe Netgear GS308 gigabit switch(unmanaged) rare dingen uithaalde. TCP connectie deed het slecht of niet en DHCP IP adres uitgifte (ACK) liep ook waardeloos erover. Gevolg, SE omvormer kon zijn data nergens kwijt en zodra ik de omvormer opnieuw opstartte, spuugde hij al zijn data het internet op, om na een uur weer niets te kunnen.

Netgear eruit, Linksys erin en heb nergens meer last van, wellicht handig om in het achterhoofd te houden.

Bob-B190 wijzigde deze reactie 31-01-2017 09:11 (1%)
Reden: lelijke fout

Memento mori


  • NL1PSR
  • Registratie: augustus 2001
  • Laatst online: 30-08 21:02
Het is inmiddels opgelost met dank aan Jerrythafast. De oorzaak was dat de omvormer nieuw is en gebruik maakt van nieuwe wifi kaartjes. Deze nieuwe wifi module heeft een ander merk en dus een andere macadres reeks. Na dit te hebben aangepast in de scripting word alles nu netjes verwerkt naar mysql. Nu nog een web interface schrijven.

Weet je nog die keer samen in de trein. Ik stak me kont uit het raam en jij je hoofd. En iedereen dacht dat we een tweeling waren.


  • tjanssen
  • Registratie: augustus 2012
  • Niet online
quote:
Jerrythafast schreef op woensdag 1 februari 2017 @ 21:17:
[...]

Nope, dat laat ik dan aan jou over ;) Ik draai immers slechts MySQL op mijn Pi.
Thanks.. Keep you posted. :)

  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

Ik vermoed dat de onnauwkeurigheid aan de meter lag. Een jaar of anderhalf geleden heb ik deze meter vervangen door een MID-gekeurde meter. deze meet maar één kant op. Het standby verbruik zie ik nu niet meer.

Overigens geeft deze meter naar mijn idee een veel reëlere waarde dan de oude. De meting komt veel beter overeen met de meting die de omvormer geeft. de oude meter was veel optimistischer.

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


  • EarlAlnot
  • Registratie: januari 2013
  • Laatst online: 13-09 05:12
Recent een PV systeem aangeschaft. Al langer klungel ik met Arduino's en arduino-achtige stuur- en monitoringssystemen om mijn dataverslaving te stillen en had al de benodigde DSM120's aangeschaft. Raspberry Pi's/Linux leek me een stap te ver/breed of niet van toepassing voor de projecten die ik nu draai. Twintig jaar geleden wel eens mee begonnen (op de PC).

Na het lezen van dit mooie topic en brede gebruikersplatform toch erg enthousiast geworden. Dit in combinatie met de wat teleurstellende SE monitoring omgeving kon ik toch de drang naar meer en vooral beter inzichtelijke data uit die omvormer niet weerstaan en heb een Raspberry Pi 3 Model B 1G gekocht. Deze komt morgen binnen.

Geluk bij een ongeluk is dat de omvormer te krap bemeten was (AC kant) en deze wordt volgende week door de installateur vervangen. De installateur kwam er zelf mee, en hij wordt netjes omgeruild voor een SE3680H. Dus als het systeem dan draait zal die encryptiesleutel niet zo'n probleem zijn.

Ik hoop op wat assistentie bij de eerste schreden op het linux gebied mocht dat nodig zijn.

EarlAlnot wijzigde deze reactie 02-04-2017 16:04 (25%)


Acties:
  • +1Henk 'm!

  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

Ik log m'n SE3000 omvormer op vier manieren:
1. standaard via de SE-portal.
2. via de methode van Jerry,
3. via een S0-kwh meter (MED) elektrisch gekoppeld aan een Youless
4. dezelfde kWh-meter gekoppeld aan een Netduino met DAL-software

Tevens worden alle vier gelogd naar PVoutput.

De laatste geeft realtime data op een klein cheap Windows tabletje in de huiskamer. Zie foto.
De database van Jerry wordt met Highcharts uitgelezen. Dit met de bezielende hulp van @Pietjebel10. Zie tweede foto.
Hier moet nog wel een hoop aan aangepast worden. Zo is de tijd die in de hoover schermpjes verschijnt nog in UTC. Tevens is de tijd in de X-as van de individuele optimizers ook in UTC. De volgorde van de panelen is ook nog niet correct.
Maar het is een begin :) .

Display in huiskamer:


Voorlopige website:

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


Acties:
  • +1Henk 'm!

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
@EarlAlnot wanneer je de encryptiesleutel niet hebt zal encrypted verkeer inderdaad zorgen voor 'mystery bytes' meldingen in liveupdate.log. Veel daarvan zouden berichten van 22 bytes moeten zijn.

Wat betreft de monitoring website: mijn eigen implementatie gebruikt Vega (versie 2.6) voor de grafieken. Ik ben tegen wat problemen aan gelopen om dit verder uit te bouwen (bugjes in Vega). Ik ben hem nu aan het porten naar Vega 3.0. Afhankelijk van of ik daar geen problemen meer mee heb en de performance ook wat beter is zal ik die versie op GitHub gooien. Anders denk ik erover om opnieuw te beginnen met Highcharts, iedereen schijnt dat tegenwoordig te gebruiken en dat heeft vast een goede reden :9

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


Acties:
  • +2Henk 'm!

  • ocaj
  • Registratie: juli 2011
  • Niet online
quote:
Aegle schreef op woensdag 5 april 2017 @ 13:38:
Hier moet nog wel een hoop aan aangepast worden. Zo is de tijd die in de hoover schermpjes verschijnt nog in UTC. Tevens is de tijd in de X-as van de individuele optimizers ook in UTC.
Daar heb ik in mijn Highcharts-grafieken ook even op zitten puzzelen. Oplossing:
code:
1
2
3
4
5
        Highcharts.setOptions({
            global: {
                useUTC: false
            }
        });

Wat heb je op de y-as staan van je "optimizers vandaag'? Lijkt me geen vermogen toch?

Ziet er verder goed uit, ik ben nog niet verder dan een heleboel losse html-pagina's, ik heb nog geen dashboard, maar wel spannende dingen als een live-pagina met (per seconde...) productie, verbruik en netto en ook een heatmap met productie per kwartier:


Overigens doe ik veel van mijn grafieken in een 2-traps actie: Ik maak elke nacht een serie .csv-bestanden en die lees ik in in Highcharts, maar rechtstreeks uit een database halen kan natuurlijk ook.

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
EarlAlnot schreef op dinsdag 11 april 2017 @ 22:05:
Na drie dagen had ik met een test account echter hetzelfde. Ook als ik via de prompt het php script draait. Zag dat er wel heel veel data in 1x verstuurd werd. Zag in de PVOutput help dat de batching alleen 30 statussen per keer accepteert. Heb limit aangepast van 100 naar 30 in php bestand. Als ik nu in de prompt het php script draai, gaat het goed en worden er (logischerwijs) 30 regels per keer toegevoegd. Paar keer herhaald en alles staat er nu in. PVo_last_live krijgt nu ook de timestamp.
Ai, dat is inderdaad een goede dat wat duidelijker gedocumenteerd moet worden. Ik ga dit even duidelijk in de startpost van het topic zetten. Het limiet wordt van 30 naar 100 verhoogd wanneer je een donatie aan PVOutput doet. Niet-donateurs moeten daar dus 30 invullen.

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


Acties:
  • +1Henk 'm!

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
Ik heb zojuist versie 0.0.9 van solaredge-logger online gezet. Drie fixes hierin:
- Af en toe kreeg je in liveupdate.py de melding 'Data loss: 0 bytes'. Dat sloeg natuurlijk nergens op.
- Het issue dat Yoki1985 had met pvo-upload.php vanwege de tijdzone op het westelijk halfrond is opgelost.
- Deze versie werkt ook met de firmware van de 3-fasenomvormer van andrerij.

Ik ben de afgelopen dagen ook weer bezig geweest met de monitoring website. Ik hoop deze maand een wat meer toekomstgerichte versie te hebben die op GitHub kan zodat we er samen aan verder kunnen klussen. Ik denk erover om in navolging van @ocaj ook de historische data apart te verzamelen (in aparte database tabellen of in losse bestandjes, daar twijfel ik nog over). Dan hoef je geen 'moeilijke' queries op de database te doen om de data van een bepaalde dag eruit te vissen. Of erger: de totalen van elke dag.

Jerrythafast wijzigde deze reactie 17-04-2017 22:44 (21%)

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • 3ssen
  • Registratie: augustus 2005
  • Laatst online: 11:48
Key uit de pcap file halen is uiteindelijk niet goed gegaan. Had na enkele uren een gedeeltelijke sleutel gevonden. Daarna was ik zo slim om de pi te herstarten en een nieuwe tcpdump te starten. Eerste gedeelte van de tcpdump werd dus overschreven.

Nu dan de optie geprobeerd om via usb aan te sluiten en dan de sleutel op te vragen. Hierbij heb ik de volgende uitdaging (of een nieuwe bril nodig). Ik kan namelijk nergens de usb aansluiting vinden. Begreep van een post van @tsjoender dat deze naast de ethernet aansluiting zou zitten bij de 3000H. Maar kan hem dus niet vinden.

Heb wel enkele foto's gemaakt van de binnenkant. Dus als iemand zo lief zou willen zijn om hem aan te wijzen hoor ik dat graag.

http://www.rick-annelies.nl/nieuwbouw/se/SE3000H_1.jpg
http://www.rick-annelies.nl/nieuwbouw/se/SE3000H_2.jpg
http://www.rick-annelies.nl/nieuwbouw/se/SE3000H_3.jpg
http://www.rick-annelies.nl/nieuwbouw/se/SE3000H_4.jpg
http://www.rick-annelies.nl/nieuwbouw/se/SE3000H_5.jpg
http://www.rick-annelies.nl/nieuwbouw/se/SE3000H_6.jpg

  • tsjoender
  • Registratie: april 2005
  • Laatst online: 08:28
Ik kan die connector zo ook niet vinden. Het lijkt erop dat er een andere revisie van dat communicatieboard is waarop de micro USB connector weggelaten is (en misschien nog wel wat USB-serieel onderdelen). Hier jouw foto nog een keer met daarop omcirkeld waar die volgens mij had moeten zitten:


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
Ai, dat is niet zo mooi -O- Al lijkt het erop dat je er wel zo een terminal op zou kunnen solderen :+

Ik zie wel nog RS-485 aanduidingen op het PCB. Ik zou even de handleiding erbij moeten zoeken om te kijken hoe de installateur RS-485 zou moeten aansluiten op deze omvormer. Het moet toch sowieso kunnen zonder al te veel gerommel.....

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

Bedank weer voor je onvolprezen programmeer kunst _/-\o_ .
precies wat ik bedoelde. Op deze wijze was ik er nooit uitgekomen.. :? .

Overigens doet ie er op mijn RPi2 er "slechts" 5,87 seconden over ;) :

+-----------+-------------+
| optimizer | energy      |
+-----------+-------------+
| 101BXXXX  | 12653709    |
| 101BXXXX  | 12453177    |
| 101CXXXX  | 12399313.75 |
| 101CXXXX  | 12435376    |
| 101CXXXX  | 12462475.75 |
| 101CXXXX  | 12622279.25 |
| 101CXXXX  | 12089904    |
| 101CXXXX  | 11971700    |
| 101CXXXX  | 12319516.5  |
| 101CXXXX  | 12444420.75 |
+-----------+-------------+
10 rows in set (5.87 sec)

Aegle wijzigde deze reactie 22-04-2017 23:20 (52%)

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
Aan de mensen met een HD Wave omvormer, @NL1PSR bijvoorbeeld, zouden jullie eens kunnen kijken naar de omvormertemperatuur? Is die de afgelopen dagen/weken erg hoog (zeg meer dan 45 °C) geweest? Deze vraag naar aanleiding van de post van @Rouske in Elektriciteit opwekken met zonnepanelen (PV) Deel 5...

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • tjanssen
  • Registratie: augustus 2012
  • Niet online
Mijn ervaring met temperaturen meten op PCBs is dat je meting doet op een plek waar je een mogelijke correlatie kunt leggen. Dit hoeft niet persé de hotspot op het PCB te zijn, maar kan ook de temperatuur van een ander kritisch component zijn. De temperaturen vergelijken van verschillende producten heeft als je het mij vraagt ook niet zoveel zin. Vergelijken tussen HD waves onderling zou wel iets kunnen zeggen.

Acties:
  • +1Henk 'm!

  • andrerij
  • Registratie: april 2017
  • Laatst online: 15-09 19:15
quote:
Jerrythafast schreef op vrijdag 12 mei 2017 @ 23:33:
@andrerij
Probeer in se-logger.service eens 'KillMode=control-group' in te stellen. Er was hier eerder iemand met hetzelfde probleem die het daarmee wist op te lossen. Ik moet nog eens uitzoeken waarom dat bij mijn Ubuntu installatie niet werkt.

Als dit het voor jou oplost, dan graag even een bevestiging. Dan zet ik deze informatie ook even in de startpost.
@Jerrythafast
Ik heb de se-logger.service aangepast en nu werkt het wel goed.

Acties:
  • +1Henk 'm!

  • Rouske
  • Registratie: juli 2007
  • Nu online
@Vinales zelf heb ik geen ervaring met SE wifi, maar op de SolarEdge download pagina zijn meerdere guides te vinden over wifi. https://www.solaredge.com/downloads#/?cb=495

3924Wp ZO(131°) 45°dak @ SE3680H PVoutput


  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

@Atomic2005: Volgens mij alleen als de eigenaar of installateur een public account heeft aangemaakt in de portal.

EDIT: zie screenshot hieronder. In Admin -> Site Toegang -> Toegangsbeheer vindt je de mogelijkheid om een installatie publiekelijk zichtbaar te maken:

Aegle wijzigde deze reactie 16-06-2017 15:06 (51%)

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


Acties:
  • +1Henk 'm!

  • CubicQ
  • Registratie: september 1999
  • Laatst online: 13-09 23:23
Vorige week zijn bij ons zonnepanelen geplaatst, SE omvormer, dus week ervoor m'n HP Microserver met Ubuntu 16.4 LTS met 2 netwerkpoorten in bridge gezet.

Paar 'problemen' gehad:
- Doordat ik ook een eigen DNS draaide (pihole) op die machine werkte die niet meer omdat de interface van eno1 naar br0 ging - aanpassing van pihole config (binding interface aanpassen) had geen effect. Daardoor werkte tcpdump ook niet lekker: die probeert standaard een DNS lookup te doen, en dat timede de hele tijd uit. Oplossing: pihole uitzetten, en DNS in DHCP server weer terug naar de oude waaren zetten...
- Om een of andere reden werkt de statische configuratie van de br0 niet... ip adres blijft heen en weer gekoppeld worden aan br0 en aan eno1 - terwil eno1 in config op manual staat. Uiteindelijk omgezet naar DHCP, toen werkte opeens alles wel (?). Nog vreemder: na een herstart staat de configuratie op DHCP, maar heeft br0 het oude statische ip adres (wat buiten de DHCP range ligt, en wat dus nergens in de configuratie staat...)
Al met al: volgens mij klopt er nog iets niet in de netwerkconfiguratie :) Maar het werkt iig wel ;)

Monitoring software werkte in helemaal perfect (draait nu nog onder root... - ook nog een keer aanpassen...). Moest wel 'KillMode=control-group' gebruiken. Toen de omvormer aangesloten werd werd de database netjes gevuld.

Wat wel bijzonder is: inmiddels draait het meer dan week, maar het verkeer is nog steeds niet encrypted...

Jerrythafast, bedankt!

Acties:
  • +1Henk 'm!

  • CubicQ
  • Registratie: september 1999
  • Laatst online: 13-09 23:23
Een SolarEdge 3000 HD: https://pvoutput.org/list.jsp?userid=59167

Het idee was om even te wachten met het klooien aan m'n software (als eigen user draaien, bestanden meenemen in geautomatiseerde backup, en toch nog eens kijken naar de netwerksettings), tot ik iig de encryptiekey heb kunnen bemachtigen... maar het duurt zo wel heel lang ;)

Edit:
Op dit moment backup is de bestanden helemaal niet :X De Microserver is ook NAS, die ik op twee manieren beckup: 1x via een snapshot mechanisme naar een lokale schijf (a la timemachine - om bestanden terug te krijgen), 1x via rclone naar b2 (huidige snapshot, retentie van oude versies op 180d via b2 - als disaster recovery). Eigenlijk moet ik gewoon met rsync de /opt/se-logger directory kopieren naar een directory die ik backup, en dan ben ik klaar.... kost minder tijd dan het editen van deze post...

snapshot mechanisme:
code:
1
2
3
4
5
#!/bin/sh
date=`date "+%Y%m%d%H%M%S"`
rsync -aP --link-dest=/backup/data/snapshot-current /data /backup/data/snapshot-$date
rm -f /backup/data/snapshot-current
ln -s /backup/data/snapshot-$date /backup/data/snapshot-current

backup:
code:
1
2
3
4
5
6
7
8
9
10
root@microserver:~# cd /data/shared/
root@microserver:/data/shared# mkdir se-logger
root@microserver:/data/shared# chown back:users se-logger/
root@microserver:/data/shared# chmod 775 se-logger
back@microserver:/data/shared/se-logger$ crontab -l
...
# m h  dom mon dow   command
10 16 * * * rsync /opt/se-logger /data/shared/se-logger
15 16 * * * /home/back/make-snapshot.sh
34 19 * * 2 /usr/sbin/rclone sync --log-file /home/back/b2.log /data remote-b2:<naam>

CubicQ wijzigde deze reactie 18-06-2017 18:32 (65%)


Acties:
  • +1Henk 'm!

  • Atomic2005
  • Registratie: oktober 2009
  • Laatst online: 10:00

Atomic2005

Abundat dulcibus vitiis

@Jerrythafast @Aegle
Het was bedoeld om een inschatting te maken van de jaaropbrengst van die omvormer.Heb verder geen contact met de eigenaar. Maar dank voor info.

4000Wp - Zuid Live PVoutput & 7560Wp - Oost/West/btjeZuid - Live PVoutput & Atlantic 200L


Acties:
  • +1Henk 'm!

  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

@ocaj: bedankt voor je reactie. Eindelijk weer eens wat tijd om te "pielen".

Die host had ik al toegevoegd in de connect-string, maar voordat ik met de webpagina aan de gang wilde gaan, wilde ik met MySQL op de RPi3 de database kunnen benaderen. Pas toen dat lukte ben ik verder gegaan met het "migreren" (... ) van de webpagina naar de RPi3.

Ik bleef maar error 2003 (can't connect to database) krijgen. Het probleem was simpel: Om voor mij onduidelijke reden was in my.cnf bind-address = 127.0.0.1 niet uit ge-comment. Ik was er van overtuigd dat dat wel zo was :? 8)7

De website draait nu via de RPi3 d:)b .

Storm in een glas water dus... :+ .

Toch bedankt voor het meedenken _/-\o_ .

EDIT: Ontopic maar weer... ;)

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


Acties:
  • +1Henk 'm!

  • lemonade
  • Registratie: mei 2005
  • Laatst online: 07-08 22:24
Zo, we zijn live! :*)

Monitoring werkte in een keer, zie linkje in m'n footer :)

@Jerrythafast als je hulp nodig hebt bij de monitoring UI hoor ik het graag, ook geïnteresseerd!

PVOutput 15125 Wp op SE15k


Acties:
  • +1Henk 'm!

  • RTB
  • Registratie: mei 2002
  • Niet online
quote:
Jerrythafast schreef op zondag 18 juni 2017 @ 20:08:
[...]

Bedankt voor het gestelde vertrouwen -O- :+

Maar wel interessant dat encryptie bij jullie zo lang op zich laat wachten. Ik ben heel benieuwd of het nog gaat komen (en in welke vorm dan...)
Bijna een maand later, maar de encryptie is nu dan toch nog geactiveerd. De SE5000H is 6 Juni online gegaan en vanochtend was het updaten van PVOutput gestopt.
Stappen zoals beschreven in het begin van het topic zijn nog steeds van toepassing. Het feit dat het zo lang heeft geduurd was dus niet omdat SE een heel ander encryptiemechanisme aan het voorbereiden was.

Het get-encryption-key script van Jerry werkt dus nog gewoon, had ik natuurlijk ook niet aan mogen twijfelen ;-)

Acties:
  • +1Henk 'm!

  • lemonade
  • Registratie: mei 2005
  • Laatst online: 07-08 22:24
@Jerrythafast Kleine note voor de OP: ik heb de cron onder de root user gezet ipv de default ubuntu user aangezien ik anders geen rechten had om de se-logger service te herstarten.
code:
1
sudo crontab -u root -e

in plaats van
code:
1
crontab -e

PVOutput 15125 Wp op SE15k


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
@lemonade dit laat zich niet heel makkelijk uitleggen, want het steekt redelijk complex in elkaar. Het komt er op neer dat de sleutel die je in liveupdate.py hebt moeten invullen niet direct wordt gebruikt om de communicatie mee te versleutelen.

In plaats daarvan wordt er bij elke nieuwe verbinding een nieuwe, tijdelijke encryptie-sleutel gegenereerd die wordt gecombineerd met de 'vaste' sleutel. Het mengsel van die twee sleutels samen geeft de sleutel die daadwerkelijk wordt gebruikt bij de encryptie van de communicatie. Die tijdelijke sleutel wordt verzonden met commando nummer 0503. Dus daarom heb ik het de '0503 key' genoemd.

Het 0503 commando is het eerste commando dat wordt verstuurd wanneer de omvormer 's ochtends uit Night Mode ontwaakt en ook het eerste commando dat wordt verstuurd wanneer de netwerkverbinding eruit heeft gelegen. Als se-logger het 0503 commando niet heeft gezien, mislukt de decryptie en krijg je van die errors in je log. De netwerkkabel van de omvormer er even een paar minuten uit trekken is genoeg om een nieuwe 0503 key te krijgen, waarmee se-logger als het goed is weer verder kan. (Het opnieuw inlezen van de pcap files was vooral in de hoop dat de gemiste 0503 key wel in de pcap file terecht was gekomen.)

Als je precies wilt weten hoe het werkt (en Python code snapt) moet je even naar class SEDecrypt kijken in liveupdate.py. De vaste sleutel en de 0503 key worden samen gebruikt om een SEDecrypt object te maken, dat vervolgens encrypted communcatie (commando nummer 003d) kan ontsleutelen.

Jerrythafast wijzigde deze reactie 06-08-2017 11:20 (24%)

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • Corn
  • Registratie: november 2001
  • Laatst online: 09-09 08:09

Corn

Raar jongetje

Even wat in elkaar gezet, als testje. Volgende stap is in database, RRD database of op MQTT zetten. Ik denk alleen niet dat meneer SolarEdge dit zo bedoeld heeft, dus ik kan me voorstellen dat ze je gaan rate-limiten als je 't heel de dag gebruikt. Het is sowieso niet super reliable.

Je moet username, password, siteID en reporterID invullen, en dan kun je 'm in console draaien.
PHP: getPower.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php

$user = "EDITME";
$password = "EDITME";

$siteID = "EDITME";
$reporterID = "EDITME";

$min_values = 6;
$min_same = 5;

$power_arr = array();

$ch = curl_init();

if(!login($user, $password)){
        curl_close($ch);
        echo "Login failed.\n";
        exec("rm SEcookie.txt");
        die();
}

wakeDisplay($siteID,$reporterID);
sleep(2);


while(1){
        if(count($power_arr)>=$min_values){
                $check = array_slice($power_arr,-$min_same);
                if(count(array_count_values($check))==1){
                        echo "Display asleep, it seems. Wakey wakey!\n";
                        if(!wakeDisplay($siteID,$reporterID)){
                                curl_close($ch);
                                echo "Wakeup failed.\n";
                                exec("rm SEcookie.txt");
                                die();
                        }
                        $power_arr=array();
                        sleep(4);
                };
        }
        fetchDisplay($siteID,$reporterID);
        sleep(2);
}

function login($user, $pass){
        global $ch;
        $arr['password']=$pass;
        $arr['username']=$user;
        $arr['remember']='on';
        $arr['cmd']='login';
        $arr['demo']='false';
        curl_setopt($ch, CURLOPT_URL,"https://monitoring.solaredge.com/solaredge-web/p/submitLogin");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$arr);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_COOKIEJAR, "SEcookie.txt");
        $server_output = curl_exec ($ch);
        $json = json_decode($server_output);
        if(isset($json->success)){
                return $json->success;
        } else {
                return false;
        }
}


function wakeDisplay($siteID, $reporterID){
        global $ch;
        curl_setopt($ch, CURLOPT_URL,"https://monitoring.solaredge.com/solaredge-web/p/remoteLcd/switchDisplay/".$siteID."/".$reporterID);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,"");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_COOKIEFILE, "SEcookie.txt");
        $server_output = curl_exec ($ch);
        $json = json_decode($server_output);
        if(isset($json->success)){
                return $json->success;
        } else {
                return false;
        }
}



function fetchDisplay($siteID,$reporterID){
        global $ch,$power_arr;
        curl_setopt($ch, CURLOPT_URL,"https://monitoring.solaredge.com/solaredge-web/p/remoteLcd/fetchDisplay/".$siteID."/".$reporterID);
        curl_setopt($ch, CURLOPT_POST, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_COOKIEFILE, "SEcookie.txt");
        $server_output = curl_exec ($ch);
        $json =  json_decode($server_output);
        list($line0,$line1,$line2,$line3) = explode("\n",$json->lcdDisplay);
        if(((strstr($line2,"P_OK"))&&(strstr($line2,"<S_OK>")))||(strstr($line2,"Fac[Hz] OPs_Ok Temp"))){
                list($vac,$vdc,$pac) = preg_split('/\s+/', $line1);
                $power_arr[] = $vac.$vdc.$pac;
                echo "VAC = $vac, VDC = $vdc, PAC = $pac\n";
        } else {
                if(!wakeDisplay($siteID,$reporterID)){
                        curl_close($ch);
                        echo "Wakeup failed.\n";
                        exec("rm SEcookie.txt");
                        die();
                } else {
                        echo "Flipping to the right page\n";
                }
                $power_arr=array();
                sleep(5);
        }
}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
root@Utility:~/solaredge# php getPower.php
VAC = 231.0, VDC = 747.3, PAC = 1214.7
VAC = 230.9, VDC = 747.4, PAC = 1217.6
VAC = 231.3, VDC = 747.5, PAC = 1218.5
VAC = 231.3, VDC = 747.5, PAC = 1224.6
VAC = 231.4, VDC = 747.5, PAC = 1229.1
VAC = 231.3, VDC = 747.4, PAC = 1226.6
VAC = 231.3, VDC = 747.3, PAC = 1229.6
VAC = 231.4, VDC = 747.5, PAC = 1234.0
VAC = 231.3, VDC = 747.4, PAC = 1235.6
VAC = 231.3, VDC = 747.4, PAC = 1235.6
VAC = 231.4, VDC = 747.5, PAC = 1245.1
VAC = 231.2, VDC = 747.3, PAC = 1244.8
VAC = 231.2, VDC = 747.0, PAC = 1246.6
VAC = 231.2, VDC = 747.0, PAC = 1249.6
VAC = 231.0, VDC = 747.0, PAC = 1254.4
VAC = 231.0, VDC = 746.9, PAC = 1257.7
VAC = 230.8, VDC = 746.9, PAC = 1260.7
VAC = 231.0, VDC = 747.0, PAC = 1261.7
VAC = 231.0, VDC = 747.0, PAC = 1261.7
VAC = 231.0, VDC = 747.0, PAC = 1261.7
VAC = 230.8, VDC = 747.0, PAC = 1269.2
VAC = 230.9, VDC = 747.0, PAC = 1273.7
VAC = 230.8, VDC = 747.0, PAC = 1274.7
VAC = 230.8, VDC = 747.0, PAC = 1274.7
VAC = 230.7, VDC = 747.0, PAC = 1275.2
VAC = 230.7, VDC = 747.0, PAC = 1275.2
VAC = 230.7, VDC = 747.0, PAC = 1275.2
VAC = 230.7, VDC = 747.0, PAC = 1275.2
VAC = 230.7, VDC = 747.0, PAC = 1275.2
Display asleep, it seems. Wakey wakey!
VAC = 230.9, VDC = 746.9, PAC = 1304.9
VAC = 230.9, VDC = 746.9, PAC = 1304.9
VAC = 231.0, VDC = 747.0, PAC = 1311.1
VAC = 231.0, VDC = 746.9, PAC = 1314.2
VAC = 231.0, VDC = 746.9, PAC = 1317.9


  • MDKlapwijk
  • Registratie: maart 2003
  • Laatst online: 12:49

MDKlapwijk

Kubiekdriehoekje

@Jerrythafast bedankt hiervoor.

Gistermiddag is de SE6000H bij ons geplaatst.

Gisteravond het netwerk en de RPi met Domoticz aangepast, zodat deze op eth0 gevoed wordt met een Ubiquiti mirror port van de omvormer.

De se-logger gestart en vanochtend de key uit de pcap's gehaald, de data ingelezen en pvoutput.org ingesteld.

Kijk uit: ben gek op achteruitkijkglimmertjes, zowel linker als rechter...


  • Rouske
  • Registratie: juli 2007
  • Nu online
Ik heb nog een oude foto gevonden van 1 juni nadat de omvormer uit was gegaan.
Year staat daar op 1006 kWh en Total op 1005 kWh.
Huidige stand Year is 2768 en Total 2790.
Ik ga SolarEdge wel even mailen of zij een verklaring hebben.

3924Wp ZO(131°) 45°dak @ SE3680H PVoutput


  • storeman
  • Registratie: april 2004
  • Laatst online: 09-09 15:34
@Aegle Ik kan je best even helpen met je query, maar ik kan de databasestructuur niet helemaal ontleden.

Ik kom tot de volgende conclusies:
- Je moet de tijdkolom weglaten
- Geef de kolommen logische namen
- Je maakt een som omp je piekvermogen (peakpower), dus niet je totale opbrengst

Ik kom tot de volgende query, al ken ik MySQL niet zo goed en je database structuur ook niet:
SQL:
1
2
3
4
5
6
7
8
9
10
11
SELECT 
 YEAR(FROM_UNIXTIME(timestamp)) AS `year`,
 MONTH(FROM_UNIXTIME(timestamp)) AS `month` ,
 FROM_UNIXTIME( timestamp, '%M' ) AS `pretty_month` ,
 ROUND(SUM(e_day),2) AS `energy`
 FROM `telemetry_inverter`
 GROUP BY 
    YEAR(FROM_UNIXTIME(timestamp)), 
    MONTH(FROM_UNIXTIME(timestamp)), 
    FROM_UNIXTIME( timestamp, '%M' )
ORDER BY `year` DESC, `month` DESC

storeman wijzigde deze reactie 24-09-2017 18:24 (3%)
Reden: Query voorzien van order by

"Chaos kan niet uit de hand lopen"


  • david_p
  • Registratie: september 2006
  • Laatst online: 15-09 21:42
quote:
MDKlapwijk schreef op donderdag 28 september 2017 @ 11:40:
@david_p, als de pcap files gevuld raken, dan is er toch verkeer vanaf de omvormer naar SolarEdge? Je luistert het verkeer immers af toch?
Het komt wel langs in de Raspberry Pi ja, maar ik vroeg me af of het misschien niet de buitenwereld bereikt. Maar dat kan ik natuurlijk testen door een ander device aan de Lan poort van de Pi te verbinden.

Update:
@MDKlapwijk : Het werkt! De key is zojuist gevonden in één van de pcap files. Heel tof dat het allemaal werkt :-)

david_p wijzigde deze reactie 28-09-2017 22:52 (12%)


  • MDKlapwijk
  • Registratie: maart 2003
  • Laatst online: 12:49

MDKlapwijk

Kubiekdriehoekje

quote:
Rouske schreef op donderdag 28 september 2017 @ 18:05:
@MDKlapwijk kan je dan ook zelf je kWh tarief aanpassen met jouw rechten?
Ja, ik heb 'm gewoon naar de 2 tariefgroepen kunnen aanpassen (of toe kunnen voegen en de oude weggehaald). Je geeft dan ook op vanaf wanneer dat die tarieven in zijn gegaan...
quote:
No Hands schreef op donderdag 28 september 2017 @ 19:13:
[...]


Waarop is dit afgezekerd? Want die SE6000H is enkel fase toch?
De woning op 1x 35A, de automaat die in de kast bijgeplaatst is een Emat EA16-32 (aardlek + 30A?)...

Kijk uit: ben gek op achteruitkijkglimmertjes, zowel linker als rechter...


  • Rouske
  • Registratie: juli 2007
  • Nu online
quote:
Rouske schreef op woensdag 20 september 2017 @ 22:38:
Ik heb nog een oude foto gevonden van 1 juni nadat de omvormer uit was gegaan.
Year staat daar op 1006 kWh en Total op 1005 kWh.
Huidige stand Year is 2768 en Total 2790.
Ik ga SolarEdge wel even mailen of zij een verklaring hebben.
Solaredge is met een verklaring gekomen en heeft het gecorrigeerd op de omvormer :*) .
Er is waarschijnlijk ooit een AC reset uitgevoerd waardoor de dagwaarde van die dag niet meer is meegenomen in de tellerstand op de omvormer.
De data is dan wel al verzonden naar onze server waardoor ik deze correctie kan uitvoeren.


En nu bedenk ik me dat er op 27 Augustus wel een stroomstoring was rond 22:00 en die dag staat met 22,270kWh in PVOutput.
Blijft wel apart dat als die teller gedurende de dag oploopt en dat het dan bij een stroomstoring in ene weer er vanaf is. 8)7

3924Wp ZO(131°) 45°dak @ SE3680H PVoutput


  • MDKlapwijk
  • Registratie: maart 2003
  • Laatst online: 12:49

MDKlapwijk

Kubiekdriehoekje

quote:
Jerrythafast schreef op vrijdag 6 oktober 2017 @ 22:40:
Dat de dagteller bij een stroomstoring (of gewoon wanneer je de omvormer uit en weer aan zet) opnieuw begint kan ik beamen. De jaarteller is hier in ieder geval nog nooit zomaar gereset.

Ik heb hier trouwens na ruim 1,5 jaar afgelopen weekend de eerste Raspberry Pi crash doorgemaakt. Hij bootte niet meer, vermoedelijk doordat de boot partitie van de SD-kaart corrupt was geraakt (data was gelukkig nog gewoon uit te lezen op de laptop), dus heb hem nu opnieuw geïnstalleerd op een degelijker exemplaar. Hoop dat hij het nu weer een paar jaar volhoudt. Er zat na de herinstallatie blijkbaar nog iets mis in de configuratie waardoor de Pi dinsdagochtend compleet vast was gelopen. De data van SolarEdge is er nog tot een uur of 1 in de middag doorheen gekomen, maar de 'tee' naar het pcap bestand was blijkbaar al eerder gestopt. Ik heb nu voor het eerst sinds de plaatsing van de zonnepanelen een ochtend waarvan ik de SE data niet in een pcap file heb kunnen vangen... -O-
Vervang ook gelijk je voeding van je RPi, slechte voeding is funest voor bestanden op het sd-kaartje...

Ik gebruik zelf op de bedrijfskritische RPi's een UPS PIco om er zeker van te zijn dat er geen corruptie optreedt:
- http://pimodules.com/_pdf/_pico/UPS_PIco_BL_FSSD_V1.0.pdf

Kijk uit: ben gek op achteruitkijkglimmertjes, zowel linker als rechter...


  • Yoki1985
  • Registratie: augustus 2007
  • Laatst online: 14-09 21:12
@Jerrythafast merci voor je reply maar bovenstaande heb ik al allemaal geprobeerd dus ik vrees dat die data dan weg is

  • KiefDelicious
  • Registratie: januari 2009
  • Laatst online: 13-09 08:20
quote:
Jerrythafast schreef op maandag 23 oktober 2017 @ 19:12:
[...]

Misschien is hier een systemctl deamon-reload voor nodig om de wijziging te activeren.
Zou mooi zijn, maar had ik al geprobeerd ;)

  • zonnigekarel
  • Registratie: oktober 2017
  • Laatst online: 04-12-2017
quote:
Jerrythafast schreef op dinsdag 25 april 2017 @ 19:58:
[...]

Die drie bytes komen mij bekend voor! Heb jij toevallig een SolarEdge WiFi module in je omvormer zitten? If so, dan ben je de tweede die ik tref met deze 3 bytes als begin van het MAC-adres en zal ik deze inderdaad maar 's officieel gaan laten herkennen als SolarEdge-related netwerk spul.
Allereest: Wat een geweldig project, kudo's voor iedereen die er een bijdrage aan geleverd heeft en met name Jerrythafast. Het duurde even voordat ik e.e.a. aan de praat het, en dat kwam omdat ik een SE3000 met wifi heb. Ik kan bevestigen dat het MAC adres van de wifi interface begint met 00:40:9d, en dat dus inliveupdate.py de regel met etherhdr[6:9] aangepast moet worden.

  • KiefDelicious
  • Registratie: januari 2009
  • Laatst online: 13-09 08:20
quote:
Niek_ schreef op woensdag 1 november 2017 @ 19:42:
Bezig met de tutorial op de Raspberry. Bij stap 5 aangekomen waar de loggingsoftware ingesteld wordt. In het 3e deel wordt een MySQL database aangemaakt met de code uit het bestand database.txt. Ik krijg echter een foutmelding op regel 76 die volgens mij naar regel 62 verwijst. Iemand een idee wat hier mis gaat? Of verwijst het wellicht naar regel 61 en moet daar achter NOT NULL nog een komma geplaatst worden?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
mysql> CREATE DATABASE solaredge;
Query OK, 1 row affected (0.02 sec)

mysql> USE solaredge;
Database changed
mysql> 
mysql> CREATE TABLE telemetry_optimizers (
    -> op_id       INT      UNSIGNED NOT NULL,
    -> timestamp   INT      UNSIGNED NOT NULL,
    -> uptime      SMALLINT UNSIGNED NOT NULL,
    -> v_in        SMALLINT UNSIGNED NOT NULL COMMENT '10bit steps of 0.125 V',
    -> v_out       SMALLINT UNSIGNED NOT NULL COMMENT '10bit steps of 0.125 V',
    -> i_in        SMALLINT UNSIGNED NOT NULL COMMENT '12bit steps of 0.00625 A',
    -> e_day       SMALLINT UNSIGNED NOT NULL COMMENT '16bit steps of 0.25 Wh',
    -> temperature TINYINT           NOT NULL COMMENT '8bit steps of 2 deg C',
    -> PRIMARY KEY (timestamp, op_id),
    -> INDEX       (op_id, timestamp)
    -> );
Query OK, 0 rows affected (0.13 sec)

mysql> 
mysql> CREATE TABLE telemetry_inverter (
    -> inv_id      INT      UNSIGNED NOT NULL,
    -> timestamp   INT      UNSIGNED NOT NULL,
    -> temperature FLOAT             NOT NULL,
    -> e_day       FLOAT             NOT NULL,
    -> de_day      FLOAT             NOT NULL,
    -> v_ac        FLOAT             NOT NULL,
    -> i_ac        FLOAT             NOT NULL,
    -> frequency   FLOAT             NOT NULL,
    -> v_dc        FLOAT             NOT NULL COMMENT 'steps of 0.0625 V',
    -> e_total     INT      UNSIGNED NOT NULL,
    -> i_rcd       FLOAT             NOT NULL,
    -> mode        TINYINT  UNSIGNED NOT NULL COMMENT '1 OFF, 2 SLEEPING, 3 STARTING, 4 MPPT, 5 THROTTLED, 6 SHUTTING_DOWN, 8 STANDBY',
    -> p_active    FLOAT             NOT NULL,
    -> p_apparent  FLOAT             NOT NULL,
    -> p_reactive  FLOAT             NOT NULL,
    -> PRIMARY KEY (timestamp, inv_id)
    -> );
Query OK, 0 rows affected (0.83 sec)

mysql> 
mysql> CREATE TABLE telemetry_inverter_3phase (
    -> inv_id      INT      UNSIGNED NOT NULL,
    -> timestamp   INT      UNSIGNED NOT NULL,
    -> temperature FLOAT             NOT NULL,
    -> e_day       FLOAT             NOT NULL,
    -> de_day      FLOAT             NOT NULL,
    -> v_ac1       FLOAT             NOT NULL,
    -> v_ac2       FLOAT             NOT NULL,
    -> v_ac3       FLOAT             NOT NULL,
    -> i_ac1       FLOAT             NOT NULL,
    -> i_ac2       FLOAT             NOT NULL,
    -> i_ac3       FLOAT             NOT NULL,
    -> frequency1  FLOAT             NOT NULL,
    -> frequency2  FLOAT             NOT NULL,
    -> frequency3  FLOAT             NOT NULL,
    -> v_dc        FLOAT             NOT NULL COMMENT 'steps of 0.0625 V',
    -> e_total     INT      UNSIGNED NOT NULL,
    -> i_rcd       FLOAT             NOT NULL,
    -> mode        TINYINT  UNSIGNED NOT NULL COMMENT '1 OFF, 2 SLEEPING, 3 STARTING, 4 MPPT, 5 THROTTLED, 6 SHUTTING_DOWN, 8 STANDBY',
    -> v_1to2FLOAT             NOT NULL,
    -> v_2to3FLOAT             NOT NULL,
    -> v_3to1FLOAT             NOT NULL,
    -> p_active1   FLOAT             NOT NULL,
    -> p_active2   FLOAT             NOT NULL,
    -> p_active3   FLOAT             NOT NULL,
    -> p_apparent1 FLOAT             NOT NULL,
    -> p_apparent2 FLOAT             NOT NULL,
    -> p_apparent3 FLOAT             NOT NULL,
    -> p_reactive1 FLOAT             NOT NULL,
    -> p_reactive2 FLOAT             NOT NULL,
    -> p_reactive3 FLOAT             NOT NULL,
    -> PRIMARY KEY (timestamp, inv_id)
    -> );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL,
v_2to3FLOAT             NOT NULL,
v_3to1FLOAT             NOT NULL,
p_' at line 20
mysql> 
mysql> CREATE TABLE live_update (
    -> pvo_last_live INT UNSIGNED NOT NULL,
    -> last_0503     BINARY(34)   NOT NULL,
    -> last_telemetry INT UNSIGNED NOT NULL
    -> );
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO live_update (pvo_last_live, last_0503, last_telemetry) VALUES (0, "\0", 0);
Query OK, 1 row affected (0.02 sec)

mysql>

Dat had ik ook ;)

regel 62,63,64 staat een tab niet goed tussen v_1to2FLOAT v_2to3FLOAT & v_3to1FLOAT

dat moet zijn:
code:
1
2
3
    v_1to2      FLOAT             NOT NULL,
    v_2to3      FLOAT             NOT NULL,
    v_3to1      FLOAT             NOT NULL,

ten minste dat was het bij mij :)

  • xces
  • Registratie: juli 2001
  • Laatst online: 06-08 15:48

xces

To got or not to got..

Hallo allemaal, eergisteren is mijn SolarEdge installatie opgeleverd. Ik kwam dit topic gisterochtend tegen en heb bij thuiskomst de netwerk stekker van mijn SE meteen eruit getrokken. Toen kwam ik erachter dat mijn omvormer nog in night mode stond (midden op de dag) waardoor ik het bedrijf heb gebeld. Bij inspectie gaf de DC lijn 2V aan en hadden ze zelf een foutje gemaakt door de plus en min van een ring verkeerd aan te sluiten -O-.

Gelukkig gaf dit geen schade aan mijn installatie en het is jammer dat ik een dagje zon heb gemist maar het voordeel is dan ook dat er nog niets werd gelogd richting SE, waardoor ik dit topic eens goed kon nalezen.

Gisteren heb ik mijn 2e Raspberry Pi 3 gekocht (P1 slimme meter uitvoering) waar natuurlijk Raspbian Jessie op stond met desktop etc. Deze heb ik direct overschreven met Debian Stretch Lite en hieronder de stappen gedocumenteerd voor diegene die een Raspberry Pi snel willen configureren. Een en ander werkt namelijk anders tegenwoordig dan in de TS staat vandaar de tutorial (die voor mij werkte).

Stappenplan:
  1. Verse install Debian Stretch Lite (September 2017)
  2. Via raspi-config e.e.a. goed zetten zoals keyboard (taal US, en layout "with euro on 5"), WiFi country op NL zetten, SSH aanzetten, timezone op Europe/Amsterdam.
  3. sudo raspi-config afsluiten, maar nog niet rebooten
  4. Eerst je wachtwoord wijzigen met passwd
  5. Vervolgens WiFi configureren, ik heb bewust NIET gekozen voor een vast IP, want dat deelt mijn router thuis uit op basis van MAC adressen
  6. Reboot, je moet nu internet hebben.
  7. sudo apt-get update && sudo apt-get upgrade uitvoeren zodat alles up to date is.
  8. Vervolgens heb ik NTP geinstalleerd, ook al weet ik dat dit deprecated is.
  9. Vervolgens stap 4.2 uitvoeren van de TS, waarbij de opmerking gemaakt moet worden dat wlan0 bij mij geen statisch IP heeft, en de configuratie van eth0 in een file gezet moet worden;
    sudo nano /etc/network/interfaces.d/eth0
    De file /etc/networking bevat alleen de include instructie voor die directory. WiFi gebeurd door wpa_supplicant.conf zoals hierboven bij stap 5 is beschreven.
    De stap om isc-dhcp-server te installeren en te configureren, alsmede het iptables script en service in te stellen blijft hetzelfde.
  10. apt-get install tcpdump, dit staat er standaard niet op in mijn gebruikte image.
  11. Dan kun je, als je Pi inmiddels een WiFi signaal heeft, je computer aan je Pi hangen en vrolijk door internetten.
  12. Op je Pi zou je dan met het volgende tcpdump commando 25 pakketjes verkeer moeten zien:
    sudo tcpdump -c 25 -i eth0 tcp
  13. Als laatste heb ik /tmp en /var/tmp toegevoegd in /etc/fstab, aan de hand van deze guide:
    code:
    1
    2
    
    tmpfs    /tmp    tmpfs    defaults,noatime,nosuid,size=100m    0 0
    tmpfs    /var/tmp    tmpfs    defaults,noatime,nosuid,size=30m    0 0
Ik ga straks verder met stap 5, en zal mijn data opslaan in een MySql database. Verder ga ik daar nog niets mee doen, puur 'harvesten' en zorgen dat SE de data gaat ontvangen. In de toekomst wil ik een detectie bouwen dat wanneer de lus uitvalt (diefstal?) dat mijn home automation systeem getriggerd gaat worden. Hoe, daar ben ik nog niet over uit maar het zal vast met de data mogelijk zijn.

Wat ik wel ga doen is de P1 kabel aansluiten aan mijn slimme meter en dmv MQTT deze data doorsturen naar Domoticz, dat draait (bedraad) op een andere Raspberry Pi en dat bevalt me te prima om dat ook op deze Pi in de meterkast te gaan draaien.

edit:
Na het lezen van dit topic ga ik toch maar de optie gebruiken die hierboven is gegeven om de eth0 en de WiFi te bridgen, want dat vind ik wat cleaner. Ik had nog een backup van de originele dhcpcd.conf staan dus die kon ik vrij makkelijk terugzetten.

Stappenplan:
code:
1
2
3
4
5
6
7
8
9
10
sudo systemctl stop isc-dhcp-server
sudo apt-get remove --auto-remove isc-dhcp-server
sudo apt-get purge --auto-remove isc-dhcp-server
sudo cp /etc/dhcpcd.conf.bak /etc/dhcpcd.conf
sudo rm /etc/dhcpcd.conf.bak
sudo systemctl stop se-nat
sudo rm /etc/systemd/system/se-nat.service
sudo systemctl daemon-reload
sudo rm /opt/scripts/se-nat.sh
sudo reboot

De reboot is belangrijk want dat zet je iptables configuratie weer terug!

Er vanuit gaande dat je WiFi al hebt draaien, komt het dan nog neer op de volgende stappen:
code:
1
2
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install rpi-update dnsmasq -y
sudo rpi-update

Eerst de eth0 configureren via: sudo nano /etc/network/interfaces.d/eth0:
code:
1
2
3
4
5
6
7
iface eth0 inet manual
allow-hotplug eth0  
iface eth0 inet static  
    address 172.24.1.1
    netmask 255.255.255.0
    network 172.24.1.0
    broadcast 172.24.1.255

Vervolgens dnsmasq configureren via sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig && sudo nano /etc/dnsmasq.conf:
code:
1
2
3
4
5
6
7
interface=eth0      # Use interface eth0  
listen-address=172.24.1.1 # Explicitly specify the address to listen on  
bind-interfaces      # Bind to the interface to make sure we aren't sending things elsewhere  
server=8.8.8.8       # Forward DNS requests to Google DNS  
domain-needed        # Don't forward short names  
bogus-priv           # Never forward addresses in the non-routed address spaces.  
dhcp-range=172.24.1.50,172.24.1.150,12h # Assign IP addresses between 172.24.1.50 and 172.24.1.150 with a 12 hour lease time

IPv4 forwarding aanzetten dmv sudo nano /etc/sysctl.conf, haal het hekje weg voor de volgende regel:
code:
1
net.ipv4.ip_forward=1

IPTables configureren en opslaan:
code:
1
2
3
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE 
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
sudo echo 'iptables-restore < /etc/iptables.ipv4.nat' > /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat

Vervolgens gaan we de Pi instellen dat de DHCP-server pas start nadat de se-logger.service is gestart via sudo nano /lib/systemd/system/dnsmasq.service. Voeg "After=se-logger.service" toe, gevolgd door een sudo systemctl daemon-reload en een sudo reboot om te testen.

xces wijzigde deze reactie 02-11-2017 15:05 (29%)

Canon EOS 1D mk4 | Canon 580EXII | Canon 17-40 f/4 L | Canon 50 f/1.8 | Canon 100 f/2.8 macro | Canon 70-200 f/2.8 IS L (II) | Canon 2x extender (III)


  • ocaj
  • Registratie: juli 2011
  • Niet online
@Svrooij86 Zoals Jerrythafast al zegt levert het Sunspec-protocol niet alle data.
De enige manier om via RS485 alle data uit de omvormer te krijgen is door gebruik te maken van het Solaredge-protocol dat ook gebruikt wordt als je meerdere omvormers hebt. Dan wijs je 1 omvormer als master aan (die communiceert dan met de portal) en de rest als slave. Deze setup staat ook in de application note beschreven waar je naar verwijst en is bedoeld om te voorkomen dat je al je omvormers aan het netwerk moet hangen (voor particulieren niet zo'n issue denk ik, maar bedrijfsmatig kun je best een flink aantal omvormers hebben)

Met de scripts van jbuehl kun je een raspberry pi of vergelijkbaar de rol van master over laten nemen. Je omvormer denkt dan dat hij alle data aan een andere solaredge omvormer doorgeeft die het vervolgens naar de portal stuurt.
Onder water gebruikt het solaredge-protocol ook modbus/RS485, alleen kun je daar niks aan instellen. Het draait altijd op 115000 baud en het werkt ook niet over TCP. In die zin zit je dan dus toch vast aan serieel (alhoewel het misschien ook wel werkt met een RS485-TCP converter).

Als je voor een dergelijke oplossing gaat raak je overigens wel de mogelijkheid kwijt van de solaredge-portal en dan heb je dus een echte stand-alone oplossing.
(zie verder mijn toelichting op de eerste pagina over mijn opstelling, mocht je vragen hebben dan laat maar weten)

  • KiefDelicious
  • Registratie: januari 2009
  • Laatst online: 13-09 08:20
quote:
Niek_ schreef op vrijdag 3 november 2017 @ 14:19:
Gloeiende, gloeiende... ik doe iets verkeerd, maar wat? Gisteravond een uurtje of 2 aan het klooien geweest en nu net weer een uurtje maar het lukt mij niet om vanaf de Mac de 3 bestanden ('liveupdate.py','pvo-upload.php', and 'se-logger-service.sh') naar de map '/opt/se-logger' te kopiëren. In 1e instantie had ik het pad op de Mac niet goed en kreeg ik de melding dat het bestand of de directory niet bestond. Dat nu (eindelijk ;)) opgelost maar nu krijg ik de melding Permission denied.

Yes, toch gelukt. In plaats van het bestand direct in de juiste map op de Raspberry te plaatsen deze in de hoofdmap van de Raspberry geplaatst. Daar geen permission denied. Nu nog even intern Raspberry verplaatsen :)

Ook bij een interne verplaatsing met het move (mv) commando de melding Permission denied. Nu even uitzoeken hoe ik de schrijfrechten van de map /opt/se-logger kan aanpassen.
We komen er uiteindelijk wel :)

Ook goedemorgen.... met het 'sudo' commando werkt het verplaatsen wel... |:( :) en doooooor met de volgende stap.

Ach ja...natuurlijk lopen we tegen het volgende aan :):
code:
1
2
pi@raspberrypi:/$ sudo systemctl enable se-logger
Failed to execute operation: No such file or directory

Het bestand staat wel in de juiste map voor zover ik kan nagaan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pi@raspberrypi:/etc/systemd/system$ ls -l
total 52
-rw-r--r-- 1 root root 1551 Sep 18  2015 autologin@.service
drwxr-xr-x 2 root root 4096 Feb 26  2016 bluetooth.target.wants
lrwxrwxrwx 1 root root   37 Feb 26  2016 dbus-org.bluez.service -> /lib/systemd/system/bluetooth.service
lrwxrwxrwx 1 root root   40 Feb 26  2016 dbus-org.freedesktop.Avahi.service -> /lib/systemd/system/avahi-daemon.service
lrwxrwxrwx 1 root root   34 Feb 26  2016 dhcpcd5 -> /lib/systemd/system/dhcpcd.service
drwxr-xr-x 2 root root 4096 Feb 26  2016 dhcpcd.service.d
drwxr-xr-x 2 root root 4096 Feb 26  2016 getty.target.wants
drwxr-xr-x 2 root root 4096 Feb 26  2016 getty@tty1.service.d
drwxr-xr-x 2 root root 4096 Oct 16  2016 halt.target.wants
drwxr-xr-x 2 root root 4096 Nov  1 18:38 multi-user.target.wants
drwxr-xr-x 2 root root 4096 Oct 16  2016 poweroff.target.wants
drwxr-xr-x 2 root root 4096 Feb 26  2016 rc-local.service.d
drwxr-xr-x 2 root root 4096 Oct 16  2016 reboot.target.wants
-rwxr-xr-x 1 pi   pi    526 Nov  3 14:48 se-logger-service.sh
drwxr-xr-x 2 root root 4096 Feb 26  2016 sockets.target.wants
lrwxrwxrwx 1 root root   31 Feb 26  2016 sshd.service -> /lib/systemd/system/ssh.service
drwxr-xr-x 2 root root 4096 Feb 26  2016 sysinit.target.wants
lrwxrwxrwx 1 root root   35 Feb 26  2016 syslog.service -> /lib/systemd/system/rsyslog.service

Zie alleen wel dat het bestand als enige geen root root heeft staan maar pi pi. Mogelijk dat dit de oorzaak van de foutmelding is? Ik ga ondertussen zoeken naar een oplossing hiervoor, maar mocht iemand de oplossing weten dan hoor ik het natuurlijk graag!
Probeer eens root de eigenaar;groep te maken door in de directory:
sudo chown root:root se-logger-service.sh

En de rechten dan ook
sudo chmod 755 se-logger-service.sh

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
quote:
xces schreef op vrijdag 3 november 2017 @ 15:02:
[...]

Hoe weet ik dat? d.w.z. ik kan via de pi internetten, dus het routen zou goed moeten zijn..
In liveupdate.log zou je dan heel veel 'Mysterious bytes' berichten moeten krijgen.
quote:
Niek_ schreef op vrijdag 3 november 2017 @ 16:07:
Dat moment dat je er bijna bent :)
Lijkt erop dat alles draait.
tcpdump.log bevat 1 regel die er hetzelfde uitziet als het voorbeeld
liveupdate.log ziet er echter niet goed uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Warning: Could not connect to database: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)"); retrying...
Warning: Could not connect to database: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)"); retrying...
Warning: Could not connect to database: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)"); retrying...
Warning: Could not connect to database: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)"); retrying...
Traceback (most recent call last):
  File "/opt/se-logger/liveupdate.py", line 477, in <module>
    db = DBManager(db_user, db_pass, db_name, db_host)
  File "/opt/se-logger/liveupdate.py", line 356, in __init__
    self.conn = MySQLdb.connect(user=user, passwd=passwd, db=db, host=host)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

Lijkt erop dat de mysql db niet bereikt kan worden.

Als ik onderstaande lees dan zijn de tabellen aanwezig
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
mysql> CREATE DATABASE solaredge;
ERROR 1007 (HY000): Can't create database 'solaredge'; database exists
mysql> USE solaredge;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 
mysql> CREATE TABLE telemetry_optimizers (
    -> op_id       INT      UNSIGNED NOT NULL,
    -> timestamp   INT      UNSIGNED NOT NULL,
    -> uptime      SMALLINT UNSIGNED NOT NULL,
    -> v_in        SMALLINT UNSIGNED NOT NULL COMMENT '10bit steps of 0.125 V',
    -> v_out       SMALLINT UNSIGNED NOT NULL COMMENT '10bit steps of 0.125 V',
    -> i_in        SMALLINT UNSIGNED NOT NULL COMMENT '12bit steps of 0.00625 A',
    -> e_day       SMALLINT UNSIGNED NOT NULL COMMENT '16bit steps of 0.25 Wh',
    -> temperature TINYINT           NOT NULL COMMENT '8bit steps of 2 deg C',
    -> PRIMARY KEY (timestamp, op_id),
    -> INDEX       (op_id, timestamp)
    -> );
ERROR 1050 (42S01): Table 'telemetry_optimizers' already exists
mysql> 
mysql> CREATE TABLE telemetry_inverter (
    -> inv_id      INT      UNSIGNED NOT NULL,
    -> timestamp   INT      UNSIGNED NOT NULL,
    -> temperature FLOAT             NOT NULL,
    -> e_day       FLOAT             NOT NULL,
    -> de_day      FLOAT             NOT NULL,
    -> v_ac        FLOAT             NOT NULL,
    -> i_ac        FLOAT             NOT NULL,
    -> frequency   FLOAT             NOT NULL,
    -> v_dc        FLOAT             NOT NULL COMMENT 'steps of 0.0625 V',
    -> e_total     INT      UNSIGNED NOT NULL,
    -> i_rcd       FLOAT             NOT NULL,
    -> mode        TINYINT  UNSIGNED NOT NULL COMMENT '1 OFF, 2 SLEEPING, 3 STARTING, 4 MPPT, 5 THROTTLED, 6 SHUTTING_DOWN, 8 STANDBY',
    -> p_active    FLOAT             NOT NULL,
    -> p_apparent  FLOAT             NOT NULL,
    -> p_reactive  FLOAT             NOT NULL,
    -> PRIMARY KEY (timestamp, inv_id)
    -> );
ERROR 1050 (42S01): Table 'telemetry_inverter' already exists
mysql> 
mysql> CREATE TABLE telemetry_inverter_3phase (
    -> inv_id      INT      UNSIGNED NOT NULL,
    -> timestamp   INT      UNSIGNED NOT NULL,
    -> temperature FLOAT             NOT NULL,
    -> e_day       FLOAT             NOT NULL,
    -> de_day      FLOAT             NOT NULL,
    -> v_ac1       FLOAT             NOT NULL,
    -> v_ac2       FLOAT             NOT NULL,
    -> v_ac3       FLOAT             NOT NULL,
    -> i_ac1       FLOAT             NOT NULL,
    -> i_ac2       FLOAT             NOT NULL,
    -> i_ac3       FLOAT             NOT NULL,
    -> frequency1  FLOAT             NOT NULL,
    -> frequency2  FLOAT             NOT NULL,
    -> frequency3  FLOAT             NOT NULL,
    -> v_dc        FLOAT             NOT NULL COMMENT 'steps of 0.0625 V',
    -> e_total     INT      UNSIGNED NOT NULL,
    -> i_rcd       FLOAT             NOT NULL,
    -> mode        TINYINT  UNSIGNED NOT NULL COMMENT '1 OFF, 2 SLEEPING, 3 STARTING, 4 MPPT, 5 THROTTLED, 6 SHUTTING_DOWN, 8 STANDBY',
    -> v_1to2      FLOAT             NOT NULL,
    -> v_2to3      FLOAT             NOT NULL,
    -> v_3to1      FLOAT             NOT NULL,
    -> p_active1   FLOAT             NOT NULL,
    -> p_active2   FLOAT             NOT NULL,
    -> p_active3   FLOAT             NOT NULL,
    -> p_apparent1 FLOAT             NOT NULL,
    -> p_apparent2 FLOAT             NOT NULL,
    -> p_apparent3 FLOAT             NOT NULL,
    -> p_reactive1 FLOAT             NOT NULL,
    -> p_reactive2 FLOAT             NOT NULL,
    -> p_reactive3 FLOAT             NOT NULL,
    -> PRIMARY KEY (timestamp, inv_id)
    -> );
ERROR 1050 (42S01): Table 'telemetry_inverter_3phase' already exists
mysql> 
mysql> CREATE TABLE live_update (
    -> pvo_last_live INT UNSIGNED NOT NULL,
    -> last_0503     BINARY(34)   NOT NULL,
    -> last_telemetry INT UNSIGNED NOT NULL
    -> );
ERROR 1050 (42S01): Table 'live_update' already exists
mysql> INSERT INTO live_update (pvo_last_live, last_0503, last_telemetry) VALUES (0, "\0", 0);
Query OK, 1 row affected (0.02 sec)

mysql>

Dan zou het dus in de toegang tot de mysql db moeten zitten.

mysql draait goed:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.57, for debian-linux-gnu (armv7l) using readline 6.3

Connection id:      40
Current database:   solaredge
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.57-0+deb8u1 (Raspbian)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         9 min 5 sec

Threads: 1  Questions: 133  Slow queries: 0  Opens: 53  Flush tables: 1  Open tables: 46  Queries per second avg: 0.244
--------------

mysql>

Als ik de instellingen samenvat die ik in de bestanden moet plaatsen dan krijg ik onderstaande:
Open 'liveupdate.py' en vul de gebruikersnaam en het wachtwoord van de MySQL database in in het SETTINGS gedeelte bovenaan.
Open 'pvo-upload.php' en vul ook hierin de gebruikersnaam en het wachtwoord van de MySQL database in in het SETTINGS gedeelte bovenaan.
Gebruikersnaam is in mijn geval 'root', het wachtwoord is bekend en goed want ik kan de MySQL database openen.

Is er dan mogelijk toch iets niet in orde met de wijze waarop er verbinding gemaakt wordt met de MySQL db? Gezien de melding: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Zie overigens het bestand solaredge-xxxx.pcap wel groeien op het moment dat ik m'n telefoon met het wifinetwerk verbind en een aantal websites bezoek. Dat werkt dan in ieder geval wel. Nu die MySQL db nog (of interpreteer ik de informatie verkeerd en werkt het gewoon?).
Zo te zien werkt het inloggen op je MySQL database inderdaad niet vanuit liveupdate.py. Een paar snelle checks:
1. Draait MySQL op dezelfde Pi als waarop je se-logger hebt draaien? Zo niet, dan moet je behalve je username en password natuurlijk ook de hostname van de MySQL server invullen in de scripts ;)
2. Heb je de se-logger service al eens geprobeerd te herstarten nadat je je gegevens in liveupdate.py hebt ingevuld?
3. Werkt pvo-upload.php wel goed, of krijg je daar ook de "Can't connect" error?

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
@Niek_ Als de data in het pcap bestand wordt opgeslagen, kun je hem inderdaad verbinden. Zo heb ik het de eerste twee maanden laten draaien, van begin februari tot en met eind maart 2016. Ik had van de eerste twee dagen leesbare data, daarna ging de encryptie erop. Pas eind maart lukte het de encryptie te breken. In de tussentijd heb ik gewoon de pcap files laten vullen. Toen de encryptie-puzzel was opgelost kon ik alle vergaarde data alsnog ontsleutelen.

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • MDKlapwijk
  • Registratie: maart 2003
  • Laatst online: 12:49

MDKlapwijk

Kubiekdriehoekje

@Niek_, de PID is de process id, dus die veranderd met elke herstart van het process. Liveupdate draait ook als root, dus die zou wat rechten betreft goed moeten zijn. Verder ziet alles er normaal uit....

Kijk uit: ben gek op achteruitkijkglimmertjes, zowel linker als rechter...


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
@Niek_ aan je liveupdate.log te zien is het probleem opgelost?

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

@Jerrythafast:

Bij mij ziet het er zo uit. Het is wel een oude versie: 0.0.7...

root@rpi2-solarlogger:/opt/se-logger# cat /etc/systemd/system/se-logger.service
[Unit]
Description=This service captures TCP traffic from SolarEdge inverters
After=network.target

[Service]
ExecStart=/bin/bash /opt/se-logger/se-logger-service.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=always

[Install]
WantedBy=multi-user.target
root@rpi2-solarlogger:/opt/se-logger#

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


  • Niek_
  • Registratie: februari 2002
  • Laatst online: 07:34
@Jerrythafast
en hier zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
pi@raspberrypi:~$ cat /etc/systemd/system/se-logger.service
[Unit]
Description=This service captures TCP traffic from SolarEdge inverters
After=network.target

[Service]
ExecStart=/bin/bash /opt/se-logger/se-logger-service.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=always

[Install]
WantedBy=multi-user.target

Zie naast het stukje achter 'After=' ook nog wat verschillen onder [Service]
Ondertussen lekker verder aan het prutsen met MySQL, dit gaat een keer goedkomen.

Niek_ wijzigde deze reactie 08-11-2017 20:29 (8%)

ZZP'er in zonnepanelen en laadpalen. 8,16kWp PV, Alfen ICU EVe Mini laadpaal en Panasonic WP.


  • tsjoender
  • Registratie: april 2005
  • Laatst online: 08:28
Hier de versie welke bij 0.0.8 zat:

[Unit]
Description=This service captures TCP traffic from SolarEdge inverters
After=network.target

[Service]
ExecStart=/bin/bash /opt/se-logger/se-logger-service.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target

tsjoender wijzigde deze reactie 08-11-2017 20:48 (32%)


  • Niek_
  • Registratie: februari 2002
  • Laatst online: 07:34
@Jerrythafast
Top! Encryptiesleutel zojuist gevonden door middel van het draaien van het script. Super!

Nu nog verder hobbyen met de database, moet toch een keer lukken :)

ZZP'er in zonnepanelen en laadpalen. 8,16kWp PV, Alfen ICU EVe Mini laadpaal en Panasonic WP.


  • andrerij
  • Registratie: april 2017
  • Laatst online: 15-09 19:15
@jerrythafast bij mij ziet de service er zo uit:

pi@raspberry-2:~$ cat /etc/systemd/system/se-logger.service
[Unit]
Description=This service captures TCP traffic from SolarEdge inverters
After=

[Service]
ExecStart=/bin/bash /home/pi/opt/se-logger/se-logger-service.sh
ExecReload=bin/kill -HUP $MAINPID
KillMode=control-group
Restart=always

[Install]
WantedBy=multi-user.target


Met "sudo raspi-config" heb ik "wait for network by boot" aangezet.

Ik heb nu ook een crach gehad 8)7 en heb daarom een usb-drive aan mij RPI gehangen.
Hier wordt de data van de MySql-server op gezet zodat de SD-kaart minder wordt gebruikt.

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
@gideon19, als je port mirroring op je switch gebruikt, heb je geen speciale instellingen op je Pi nodig. gewoon aansluiten op de mirror poort met een LAN-kabel zou voldoende moeten zijn.

Om het te testen, kun je je switch zo instellen dat hij het verkeer van een aangesloten PC mirrort naar de mirror poort. Op de Pi draai je dan het commando
user@logger$  sudo tcpdump -c 25 -i eth0 tcp


Wanneer je nu op de PC een website opent zou je op de Pi een aantal regels output te zien moeten krijgen. Als dat werkt is het alleen nog een kwestie van se-logger instellen (hoofdstuk 5) en de PC vervangen door de omvormer.

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 11:09
@gideon19 Ziehier is-pcap-encrypted.py:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env python
"""
Use this script to quickly check whether captured data is encrypted.
"""
import sys, glob

def iglob(pathname):
  success = False
  for result in glob.iglob(pathname):
    success = True
    yield result
  if not success:
    yield pathname


if len(sys.argv) < 2:
  print("%s\n\nTry running: python %s *.pcap" %
    (__doc__.strip("\r\n").replace("\r", "").replace("\n", " "), sys.argv[0]))
  sys.exit(1)

packets = 0
encrypted = 0

for filename in (x for x in sys.argv[1:] for x in iglob(x)):
  print("Reading from %s" % filename)
  f = sys.stdin if filename == "-" else open(filename, "rb")
  data = f.read()
  f.close()

  pos = -1
  while True:
    pos = data.find("\x12\x34\x56\x79", pos + 1)
    if pos == -1 or pos > len(data) - 20:
      break
    packets += 1
    if ord(data[pos+18]) + (ord(data[pos+19]) << 8) in (0x0503, 0x003d):
      encrypted += 1

if not packets:
  print("No SolarEdge data found in input.")
elif not encrypted:
  print("None of the SolarEdge data found appears to be encrypted.")
elif packets == encrypted:
  print("All SolarEdge data found is encrypted.")
else:
  print("%.1f%% of SolarEdge data found is encrypted." %
      (100. * encrypted / packets))

user@logger$  python is-pcap-encrypted.py test.pcap
Reading from test.pcap
68.8% of SolarEdge data found is encrypted.

Jerrythafast wijzigde deze reactie 19-11-2017 21:30 (11%)
Reden: Elif/else toegevoegd; logic error gefixt.

2925 Wp op SE3000 live op PVOutput en Jerweb.nl || Nu ook De Triangel 3020 Wp (live logging in aanbouw)


  • d1965
  • Registratie: januari 2013
  • Laatst online: 23-08 15:28
Binnenkort ook hier zonnepanelen met een Solaredge omvormer. Op zoek naar een 'in-house' manier om Solaredge-data (en met name de optimizer-data) te loggen kwam ik in dit topic terecht. Heel interessant! @Jerrythafast, bedankt voor de geweldige uitleg! Heb veel geleerd. Het was even uitzoeken, maar ik heb het voor elkaar.

Daar waar de omvormer komt had ik al een ethernetkabel liggen. Op het patchpanel waar die kabel uitkomt zijn nog een aantal rj45 jacks vrij. Van vier daarvan heb ik een passieve netwerk tap gemaakt (hier afgekeken). Heb alleen de tx en rx aangesloten.

Op de Raspberry Pi3 heb ik de selogger files geïnstalleerd en met een kabel aangesloten op de tap-poort. Via de tap was de Pi niet bereikbaar voor ssh. Daarvoor gebruik ik wifi. Dat lukt eerst niet, maar na lang zoeken kon ik met de parameter metric aangeven dat wlan0 de voorkeur heeft boven eth0. Nu kan ik tijdens het loggen via eth0 ook met ssh connecten via wlan0.

Heb getest door mijn eigen pc via de tap-poorten te laten lopen. De pcap files heb ik bekeken met Wireshark. Werkt perfect.

So far so good. De solaredge verbinding laat ik straks via de tap-poorten lopen en hopelijk kan ik dan de key en de data mooi opvangen en verwerken naar MySql. Daarna zien we wel verder.

Nogmaals dank, @Jerrythafast!

d1965 wijzigde deze reactie 24-11-2017 12:41 (0%)
Reden: @ toegevoegd


  • jacovn
  • Registratie: augustus 2001
  • Laatst online: 11:27
heb toch maar een pidrive gekocht..

250 gb drive, kabel, square behuizing en 3A voeding. 38.88 euro inclusief gratis opsturen.

Was in een aanbieding via WD zelf, wordt afgehandeld door digital river in Ierland.
De drive alleen kost in NL bij een webshop al meer, maar goed ik ga het zien.

https://www.wdc.com/nl-nl...e-foundation-edition.html

jacovn wijzigde deze reactie 24-11-2017 10:55 (13%)


  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-09 19:12

Aegle

"hier" = Schiedam, ZH...

@Jerrythafast en @ocaj, inderdaad geeft mijn omvormer (nog steeds!) 0000000 als key :? .
Uit de oude (juni 2016) dm's met Jerry kwam ik het onderstaande resultaat tegen:
code:
1
2
3
4
5
6
7
8
9
10
.    |  BARKER   | LEN |LEN_I| SEQ |  SOURCE   |   DEST    | CMD |DATA
SEND: 12 34 56 79 02 00 fd ff 01 00 fd ff ff ff 42 4b 00 7f 12 00 39 02 8e a0
RECV: 12 34 56 79 06 00 f9 ff 01 00 42 4b 00 7f fd ff ff ff 90 00 00 00 00 00 00 00 36 5d
SEND: 12 34 56 79 02 00 fd ff 02 00 fd ff ff ff 42 4b 00 7f 12 00 3a 02 8b 93
RECV: 12 34 56 79 06 00 f9 ff 02 00 42 4b 00 7f fd ff ff ff 90 00 00 00 00 00 00 00 c6 ad
SEND: 12 34 56 79 02 00 fd ff 03 00 fd ff ff ff 42 4b 00 7f 12 00 3b 02 88 82
RECV: 12 34 56 79 06 00 f9 ff 03 00 42 4b 00 7f fd ff ff ff 90 00 00 00 00 00 00 00 97 3d
SEND: 12 34 56 79 02 00 fd ff 04 00 fd ff ff ff 42 4b 00 7f 12 00 3c 02 81 f5
RECV: 12 34 56 79 06 00 f9 ff 04 00 42 4b 00 7f fd ff ff ff 90 00 00 00 00 00 00 00 25 0c
Your key is '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

(het script was wat uitgebreid i.v.m. wat debugging). Je ziet, het resultaat is 000000...

Nu is mijn SE3000 omvormer al wel wat ouder (begin 2014). Misschien dat dat er iets mee te maken heeft?software versies:
SE3000
CPU: 0002.1049
DSP1: 1.0210
DSP2: 1.0034

Hopelijk kun je er wat mee.

10 x Yingli YL260C-30b @ 10 x OP300 SolarEdge optimizers en SE3000 op 158º. Live: PVoutput , SolarEdge


  • ocaj
  • Registratie: juli 2011
  • Niet online
De mijne zijn iets nieuwer (juni 2016):
DSP1: 1.0210
DSP2: 2.0052
CPU 3.1651

Zal het aan mijn wat lange bekabeling liggen. Ik gebruik via RS485 het solaredge-protocol, daar kun je geen baudrate etc. van instellen, dus misschien is de 115200 baud gewoon wat te veel voor mijn kabel van een meter of 10?
Maar als ik jouw resultaten zie, dan lijkt het script van @Jerrythafast gewoon te werken over RS485.
En daar ging het om toch om daar achter te komen?

  • Niek_
  • Registratie: februari 2002
  • Laatst online: 07:34
quote:
Jerrythafast schreef op woensdag 29 november 2017 @ 20:33:
@Niek_ dat ziet er inderdaad niet helemaal gezond uit :? Heb je van die dagen wel gewoon data in je database? Ik zie meerdere rare dingen. Het ziet er een beetje naar uit alsof er een file write buffer tussen zit die niet wordt geflusht bij het restarten van de service, want de laatste 3 waar wél wat in zit hebben "toevallig" een bestandsgrootte die deelbaar is door 4096. Daarnaast lijkt het er ook op dat de service 's nachts niet goed wordt gestopt bij de herstart, want de datum+tijd van laatste wijziging ligt soms twee dagen na het aanmaken van het bestand i.p.v. de te verwachten 24 uur. Bovendien zijn jouw pcap bestanden veel groter dan die van hier (wij hebben 11 panelen liggen, dat produceert zo'n 500 kB per novemberdag). Je zou eens kunnen kijken hoeveel tcpdump en liveupdate.py processen je nu hebt draaien (en het bijbehorende 'tee' proces dat het bestand vult).
Ik denk dat ik maar eens voor een volledig schone installatie ga. Nu teveel geprutst links/rechts. De key in ieder geval veilig gesteld.

ZZP'er in zonnepanelen en laadpalen. 8,16kWp PV, Alfen ICU EVe Mini laadpaal en Panasonic WP.


  • xces
  • Registratie: juli 2001
  • Laatst online: 06-08 15:48

xces

To got or not to got..

@Jerrythafast ik kan nu bevestigen dat een factory reset ervoor zorgt dat: (1) je weer unencrypted data gaat versturen en (2) dat je na verloop van tijd (duurde bij mij echt lang) je weer een nieuwe key krijgt.
code:
1
2
3
4
5
6
7
8
9
root@EnergyMonitor:/opt/se-logger/0.10/get-encryption-key# python find-key-in-pcap.py /tmp/*.pcap
Reading from /tmp/solaredge-20171201121716.pcap
Reading from /tmp/solaredge-20171201233002.pcap
Reading from /tmp/solaredge-20171202233002.pcap
Reading from /tmp/solaredge-20171203233002.pcap
Reading from /tmp/solaredge-20171204233001.pcap
Reading from /tmp/solaredge-20171205233002.pcap
Reading from /tmp/solaredge-20171206233002.pcap
Found it! Your key is '...'

Mijn factory reset was 24 november, en dus pas op 6 december de key gekregen.

Canon EOS 1D mk4 | Canon 580EXII | Canon 17-40 f/4 L | Canon 50 f/1.8 | Canon 100 f/2.8 macro | Canon 70-200 f/2.8 IS L (II) | Canon 2x extender (III)


  • Joeyen
  • Registratie: december 2017
  • Laatst online: 02-01-2018
Probleem opgelost. rechten probleem en de se-logger service aangepast.
[Unit]
Description=This service captures TCP traffic from SolarEdge inverters
After=network.target mysql.service

[Service]
ExecStart=/bin/bash /opt/se-logger/se-logger-service.sh
KillMode=control-group
KillSignal=SIGHUP
SendSIGKILL=no
Restart=always

[Install]
WantedBy=multi-user.target

  • andrerij
  • Registratie: april 2017
  • Laatst online: 15-09 19:15
quote:
jacovn schreef op vrijdag 24 november 2017 @ 10:49:
heb toch maar een pidrive gekocht..

250 gb drive, kabel, square behuizing en 3A voeding. 38.88 euro inclusief gratis opsturen.

Was in een aanbieding via WD zelf, wordt afgehandeld door digital river in Ierland.
De drive alleen kost in NL bij een webshop al meer, maar goed ik ga het zien.

https://www.wdc.com/nl-nl...e-foundation-edition.html
@jacovn Ik heb nu ook een 250 GB Pidrive gekocht. Ik kreeg hem de volgende dag vanuit Utrecht. Het werkt prima. Bedankt voor de tip.

  • andrerij
  • Registratie: april 2017
  • Laatst online: 15-09 19:15
quote:
jacovn schreef op zaterdag 9 december 2017 @ 15:29:
[...]

Boot je van de hdd met de bijgeleverde boot manager of van de sd kaart ?

Ik ga ook wel eens proberen met de boot van de hhd, maar die zal wel net zo corrupt gaan bij een harde boot zonder shutdown wellicht. Het is geen windows natuurlijk..
@jacovn Ik heb bij de installatie de eerste optie gekozen (alleen Debian op hdd) en ik boot van hdd.
Het sd kaartje met de bijgeleverde boot manager moet wel in de pi zitten om aan te geven dat hij van hdd moet starten, maar alle files staan op de hdd.
Ik heb per ongeluk, bij het op de definitieve plek zetten van de pi, de stroom afgesloten zonder een shutdown. Hij starte daarna gewoon weer op.

  • d1965
  • Registratie: januari 2013
  • Laatst online: 23-08 15:28
Als ik het goed begrijp wordt binnen de eerste 48 uur nadat de SolarEdge-omvormer contact heeft met het monitoring platform een beveiligingssleutel uitgewisseld. De mijne hangt al bijna 4 weken aan het internet, maar er is nog steeds geen versleuteling. Kan dus kennelijk ook langer dan 48 uur zijn...

Update: Vandaag (maandag 22-1) weer gechecked. Het script find-key-in-pcap.py vindt nu de beveiligingskey in de pcap van 18-1.

d1965 wijzigde deze reactie 22-01-2018 17:15 (18%)

Pagina: 1 2 3


Apple iPhone 11 Nintendo Switch Lite LG OLED C9 Google Pixel 4 FIFA 20 Samsung Galaxy S10 Sony PlayStation 5 Games

'14 '15 '16 '17 2018

Tweakers vormt samen met Tweakers Elect, Hardware Info, Autotrack, Nationale Vacaturebank, Intermediair en Independer de Persgroep Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True