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: 18-09 20:10

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: 18-09 20:10

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)


Acties:
  • 0Henk 'm!
  • Pinned

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 18-09 20:10
In deze post zal ik vragen uit dit topic die regelmatig terugkomen proberen te verzamelen, zodat de antwoorden in het vervolg gemakkelijker terug te vinden zijn.


Veelgestelde vragen

De waarde voor 'e_day' in de database klopt niet
Dat klopt, dit is een bugje in de firmware van SolarEdge. Je kunt de correcte waarde zelf berekenen door alle 'de_day' waardes van die dag tot op dat moment bij elkaar op te tellen. De monitoring website van SolarEdge lijkt het ook op die manier te doen.

Het stoppen/herstarten van se-logger gaat niet goed; het oude .pcap bestand blijft groeien
In het bestand '/etc/systemd/system/se-logger.service' kun je proberen de 'KillMode=' regel aan te passen naar 'KillMode=control-group'. Dit is in ieder geval nodig op Raspbian; als je een ander OS draait op jouw logger kan het misschien ook helpen. In dat geval wordt het gewaardeerd als je even een bericht in dit topic plaatst met welk OS je draait en of het probleem hiermee is opgelost of niet O-)

Ik kan de encryptiesleutel niet uitlezen met get-key-by-rs232.py
Krijg je de foutmelding "TypeError: ord() expected string of length 1, but int found"? Dan draai je het script met de verkeerde Python-versie: je moet het runnen met Python 2, niet Python 3.

Mijn database heeft er even uit gelegen en nu mis ik data in de database
Je kunt de stappen in sectie 6.3 in de openingspost volgen om ervoor te zorgen dat alle data die in .pcap bestanden ligt opgeslagen in de database wordt geplaatst. Dus zolang je van de bewuste tijdspanne nog wel de .pcap bestanden hebt, kun je altijd de database weer compleet maken. Vanwege de gebruikte encryptie is het soms nodig om het .pcap bestand van de dag ervoor ook mee te nemen (de benodigde encryptiesleutel kan in dat bestand staan). Ook vanwege de encryptie kan het nodig zijn om de omvormer pas na een kwartier weer met de netwerkkabel te verbinden (hij zal dan een nieuwe sleutel beginnen gebruiken die se-logger gelijk oppikt).
Als je de PVOutput upload gebruikt, kijk dan ook even naar het volgende...

Er mist data op PVOutput die wel in mijn database staat
Heb je (al dan niet per ongeluk) data van PVOutput verwijderd, of is er door een andere oorzaak een gat in de gegevens ontstaan, dan kun je het PVOutput upload script een stukje terug in de tijd zetten om deze data opnieuw te uploaden (mits het wel in je database staat natuurlijk). Log hiervoor in op de database en draai de volgende SQL-query (waarbij je het tijdstip liefst iets vóór het gat in de data zet, bijvoorbeeld het begin van de betreffende dag):

MySQL:
1
UPDATE live_update SET pvo_last_live = UNIX_TIMESTAMP("2019-04-29 04:00:00");


Hierna gaat het upload script vanzelf verder vanaf het aangegeven tijdstip.

Jerrythafast wijzigde deze reactie 01-05-2019 10:22 (177%)

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


Acties:
  • +8Henk 'm!
  • Pinned

  • andrerij
  • Registratie: april 2017
  • Laatst online: 18-09 13:17

1. Inleiding

@Jerrythafast heeft een heel goed werkend programma gemaakt voor het vastleggen van de gegevens van SolarEdge omvormers. Het blijkt dat het weergeven van de data op een website voor niet iedereen even eenvoudig is. Daarom heb ik mijn zeer uitgebreide website vereenvoudigd, modulair gemaakt, en geschikt voor enkel- en 3fase omvormers gemaakt. @jvdzande heeft een toevoeging voor het uitlezen van de meterstanden toegevoegd. Deze zijn nu in deze post opgenomen.


1.1 Hoe werkt het?
De website is gebaseerd op de database van dit topic. Om de website te configureren moeten config.php en css/zonnepanelen.css worden aangepast. Daarna kan de website gestart worden met zonnepanelen.php.
Om de slimme meterstanden te kunnen tonen zullen de waarden in de database moeten worden opgenoen of uitgelezen worden uit een externe database. Op dit moment is er een koppeling met Domoticz server en met DSMR server.


2. Aanpassen config.php

in config.php is het volgende vastgelegd:
  • gegevens voor de toegang tot de database;
  • de latitude en longitude van de plaats waar de panelen staan;
  • naam van de achtergrond image;
  • indicatie power op de panelen;
  • type van de inverter (1 of 3 fase);
  • de naam van de inverter (typenummer);
  • het aantal panelen;
  • de optimizer id en nummer, richting, serienummer en het piek vermogen in pW van het paneel;
  • Extra information for p1:
  • indicatie voor het tonen van de P1waarden;
  • P1-script dat moet worden gebruikt om de informatie op te halen;
  • Leverancier elektriciteit;
  • Aantal dagen en maanden dat in de P1-grafieken moet worden weergegeven;
  • PVGis informatie wanneer u dat wilt hebben opgenomen in de grafieken.
De config.php ziet er volgt uit.

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
92
93
94
95
96
97
98
99
100
101
102
103
<?php
//
// Copyright (C) 2019 André Rijkeboer
//
// This file is part of zonnepanelen, which shows telemetry data from
// the TCP traffic of SolarEdge PV inverters.
//
// zonnepanelen is free software: you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation, either version 3 of the License, or (at
// your option) any later version.
//
// zonnepanelen is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with zonnepanelen.  If not, see <http://www.gnu.org/licenses/>.
//
// versie: 1.27
// auteur: André Rijkeboer
// datum:  22-04-2019
// omschrijving: configuratie bestand

// gegevens voor het openen van de database
$host = '192.168.1.81'; // IP adres waar de database staat (standaard localhost of 127.0.0.1)
$port = '3306'; // poort database (standaard 3306)
$user = 'gebruiker'; // gebruiker
$passwd = 'password'; // paswoord gebruiker
$db = 'solaredge'; // database naam

// gegeven van de plaats waar de zonnepanelen staan
$lat = 51.9515885; //Latitude North
$long = 6.0045953; //Longitude East

// Achtergrond image (in de img directory)
$zonnesysteem = "zonnesysteem.gif";

//#### Toegevoegd voor P1 ElectriciteitsMeter informatie van Domoticz
//** P1 waarden aangeven 
$P1 = 0; // 0 = nee, 1 = ja

//** Algemene velden
$ElecLeverancier = "Engie";                            // naam electra leverancier
$ElecDagGraph = '60';                                   // aantal dagen in grafiek
$ElecMaandGraph = '13';                                 // aantal maanden in grafiek
$zonnesysteem_electra = "zonnesysteem-electra.gif";

//** velden die worden gebruikt om de PVGis schatting in de website te laten zien. Wordt alleen getoond als ze invult zijn.
$PVGtxt = "PVGis";                                  // Tekst waar de schatting vandaan komt bv: "PVGis"
$PVGis = [0,0,0,0,0,0,0,0,0,0,0,0];                 // schatting opbrengst iedere maand voor de installatie

//** velden voor ophalen P1 info van Domoticz server
$domohost = '192.168.0.??:8080';                    // ip:poort van domoticz
$domoidx = "123";                                   // device IDX voor de Electriciteits P1 meter
$DataURL = 'live-server-data-electra-domoticz.php'; // URL voor ophalen p1&Converter data tbv zonnepanelen-electra.php

//** velden voor Electra info van DSMR server(verwijder // om te activeren)
// $dsmr_url='http://host-ip:8888';                     // URL voor DSMR inclusief
// $dsmr_apikey='IDkdjqljwdlkqjwdoiiqjdpockskskdxpF';   // APIKEY voor DSMR
// $DataURL = 'live-server-data-electra-dsmr.php';      // URL voor ophalen p1&Converter data tbv zonnepanelen-electra.php

//** velden voor Electra info van eigen database server(verwijder // om te activeren)
// $DataURL = 'live-server-data-electra-p1_meter_table.php';     // URL voor ophalen electra&Converter data

//#### einde aanpassing

// aangeven vermogen op het paneel
$vermogen = 1; // 0 = nee, 1 = ja

// gegevens van het zonnepanelensysteem
$inverter = 3; // 1 voor enkel fase en 3 voor 3 fase inverter
$naam = "SolarEdge SE7k"; //naam van de inverter
//optimizer id en positie paneel, de richting van de panelen Vertikaal = 0, Horizontaal = 1
// het serienummer en het vermogen van het paneel
//$op_id[id optimizer][inverter.string.paneelnummer][richting][id paneel][vermogen paneel]
$op_id[1] = ['2020B2E3','1.1.1',1,'SL220M1509EE0155kX',265];
$op_id[2] = ['2020B18C', '1.1.2',1,'SL220M1509EE0149Qv',265];
$op_id[3] = ['2020B1B2', '1.1.3',1,'SL220M1509EE0059tX',265];
$op_id[4] = ['2020B353', '1.1.4',1,'SL220M1509EE0162Od',265];
$op_id[5] = ['2020B202', '1.1.5',1,'SL220M1509EE0060Qd',265];
$op_id[6] = ['2020B1FE', '1.1.6',1,'SL220M1509EE0158tX',265];
$op_id[7] = ['2020B2A5', '1.1.7',1,'SL220M1509EE0156mX',265];
$op_id[8] = ['2020B1B0', '1.1.8',1,'SL220M1509EE01538X',265];
$op_id[9] = ['2020B25B', '1.1.9',1,'DM5511502050664',265];
$op_id[10] = ['2020B14E', '1.1.10',1,'DM5511502050260',265];
$op_id[11] = ['2020B2CB', '1.1.11',1,'DM5511503231463',265];
$op_id[12] = ['2020B1ED', '1.1.12',1,'DM5511503230750',265];
$op_id[13] = ['2020B369', '1.1.13',1,'DM5511503230845',265];
$op_id[14] = ['2020B34F', '1.1.14',1,'DM5511503230749',265];
$op_id[15] = ['2020B22F', '1.1.15',1,'DM5511503231553',265];
$op_id[16] = ['2020B161', '1.1.16',1,'DM5511502050094',265];
$op_id[17] = ['2020B3A4', '1.1.17',1,'DM5511503231269',265];
$op_id[18] = ['2020B25F', '1.1.18',1,'DM5511503231231',265];
$op_id[19] = ['2020B387', '1.1.19',1,'DM5511503231278',265];
$op_id[20] = ['2020B362', '1.1.20',1,'DM5511503231165',265];
$op_id[21] = ['20212017', '1.1.21',1,'DM5511503231557',265];
$op_id[22] = ['20212166', '1.1.22',1,'DM5511503231281',265];
$op_id[23] = ['20211F32', '1.1.23',1,'DM5511503231176',265];
$op_id[24] = ['20211FD6', '1.1.24',1,'DM5511503231339',265];
$aantal = count($op_id); // aantal zonnepanelen dat in database is opgenomen
?>



3. Aanpassen css/zonnepanelen.css

in css/zonnepanelen.css is het volgende vastgelegd:
  • div.box_Zonnepanelen : plaats, afmetingen en eventuele rotatie;
  • div.box_Zonnepaneel_x: plaats en afmetingen in % van de afmetingen van div.box_Zonnepanelen
Een gedeelte van css/zonnepanelen.css ziet er volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
div.box_Zonnepanelen {
    
    left: 25px; 
    top: 40px;
    width: 202px;
    height: 599px;
    position: absolute;
    -webkit-transform:rotate(0deg); 
    transform:rotate(0deg); 

}

div.box_Zonnepaneel_1 {
    left: 75%;
    top: 0%;
    width: 23.70%;
    height: 12.02%;
    position: absolute;
    z-index: -90;
    
}



Indien de rotatie aangepast moet worden zullen -webkit-transform:rotate(0deg) en transform:rotate(0deg) met de zelfde waarde aangepast moeten worden.
left: 25px en top: 40px geven de plaats van de linker bovenhoek aan en width: 202px en height: 599px de breedte en de hoogte.
Er zijn 4 panelen in de breedte aanwezig en 8 in de hoogte. Paneel 1 bevindt zich op plaats 4 in de breedte en plaats 1 in de hoogte. De breedte van het paneel is 1/4 minus een kleine tussenruimte. De hoogte van het paneel is 1/8 minus een kleine tussenruimte.

Er moeten net zo veel div.box_Zonnepaneel_X {} worden aangemaakt als in config.php zijn opgenomen.

4. Aanpassen MySql database

Indien sql_mode=ONLY_FULL_GROUP_BY aanstaat moet dit uitgezet worden.

Oplossing 1: verwijder ONLY_FULL_GROUP_BY in de MySQL-console:

code:
1
mysql> SET GLOBAL sql_mode = (SELECT REPLACE (@@ sql_mode, 'ONLY_FULL_GROUP_BY', ''));


Oplossing 2: verwijder ONLY_FULL_GROUP_BY in phpmyadmin:

Open phpmyadmin.
Klik op het menu Variabelen & scrol omlaag tot sql-modus
Klik op de knop Wijzigen om de waarden te wijzigen en verwijder ONLY_FULL_GROUP_BY & klik op opslaan. Zie onderstaand.

[klik op het figuur om het te vergroten]


5. Gebruik

Als zonnepanelen.php wordt opgestart bij het gebruik van 24 panelen en in config.php staat $P1 = 0 dan zal het scherm er als volgt uitzien.



Als zonnepanelen.php wordt opgestart met in config.php $P1 = 1 dan zal het scherm er als volgt uitzien.



6. Download software

De laatste versie kan gedownload worden van GitHub..

andrerij wijzigde deze reactie 02-09-2019 20:38 (51%)

Pagina: 1


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

'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