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

  • gertm
  • Registratie: september 2010
  • Laatst online: 23-08 14:27
Op 6 augustus werd bij ons een SolarEdge SE4000HD geïnstalleerd, op 8 augustus vond ik deze draad...
Ik dacht even dat ik het toestel zou moeten openschroeven om het secret te bemachtigen - maar ik heb 'geluk'... Het toestel heeft ondertussen al de geest gegeven, en ik krijg maandag een nieuwe omvormer...
Nu moet ik alleen nog uitvissen wat de beste logging optie is voor mij. Wat ik zeker wil is de opbrengst per paneel (dus niet alleen de totale opbrengst van de omvormer). Ik zie momenteel 3 mogelijkheden:
  1. Het scriptje van Jerrythafast
  2. Met solaredge-local (uiteraard is het een toestel zonder display, met SetApp)
  3. via de SE-monitoring site (lijkt mogelijk te zijn om daar de dagelijkse opbrengst per optimizer op te vragen - op voorwaarde dat je 'layout' publiek staat)

gertm wijzigde deze reactie 09-08-2019 11:23 (3%)


  • René Janssen
  • Registratie: juli 2019
  • Laatst online: 02-11 19:01
gertm schreef op vrijdag 9 augustus 2019 @ 11:22:
Op 6 augustus werd bij ons een SolarEdge SE4000HD geïnstalleerd, op 8 augustus vond ik deze draad...
Ik dacht even dat ik het toestel zou moeten openschroeven om het secret te bemachtigen - maar ik heb 'geluk'... Het toestel heeft ondertussen al de geest gegeven, en ik krijg maandag een nieuwe omvormer...
Nu moet ik alleen nog uitvissen wat de beste logging optie is voor mij. Wat ik zeker wil is de opbrengst per paneel (dus niet alleen de totale opbrengst van de omvormer). Ik zie momenteel 3 mogelijkheden:
  1. Het scriptje van Jerrythafast
  2. Met solaredge-local (uiteraard is het een toestel zonder display, met SetApp)
  3. via de SE-monitoring site (lijkt mogelijk te zijn om daar de dagelijkse opbrengst per optimizer op te vragen - op voorwaarde dat je 'layout' publiek staat)
Hoi,
Optie 1 is het beste, maar werkt helaas alleen voor omvormers met display
Optie 2 blijft dan over als beste keus, hiermee kun je ook de optimizers mee uitlezen, zei het met beperkingen (geen cijfers achter de komma maar gehele getallen), dit heb ik overigens prima opgelost door een klein truucje uit te halen zodat je toch een redelijk beeld krijgt ( werk trouwens alleen als er geen schaduw op 1 of meerdere panelen valt).
Optie 3 is de slechtste, je krijgt nl een api key om de SE website uit te lezen, maar geen paneel info dus, bovendien is de update ook vaak bar slecht. oh ja en hij hoeft echt niet publiek te staan.

grts.

  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-11 23:12

Aegle

"hier" = Schiedam, ZH...

René Janssen schreef op vrijdag 9 augustus 2019 @ 19:34:
[...]


Hoi,
Optie 1 is het beste, maar werkt helaas alleen voor omvormers met display
Optie 2 blijft dan over als beste keus, hiermee kun je ook de optimizers mee uitlezen, zei het met beperkingen (geen cijfers achter de komma maar gehele getallen), dit heb ik overigens prima opgelost door een klein truucje uit te halen zodat je toch een redelijk beeld krijgt ( werk trouwens alleen als er geen schaduw op 1 of meerdere panelen valt).
Optie 3 is de slechtste, je krijgt nl een api key om de SE website uit te lezen, maar geen paneel info dus, bovendien is de update ook vaak bar slecht. oh ja en hij hoeft echt niet publiek te staan.

grts.
In de SE-portal zie je met optie 3 wel degelijk de “actuele” opbrengst per paneel. Die informatie is bijna net zo actueel als de informatie uit optie 1.

Het grootste verschil is dat met optie 1 ook de temperatuur van de individuele optimizers wordt gelogd. Die info zie je niet in de SE-portal.

Optie 2 ken ik niet. Ik heb nog een good old omvormer met display :).

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


  • René Janssen
  • Registratie: juli 2019
  • Laatst online: 02-11 19:01
Aegle schreef op zaterdag 10 augustus 2019 @ 07:51:
[...]


In de SE-portal zie je met optie 3 wel degelijk de “actuele” opbrengst per paneel. Die informatie is bijna net zo actueel als de informatie uit optie 1.

Het grootste verschil is dat met optie 1 ook de temperatuur van de individuele optimizers wordt gelogd. Die info zie je niet in de SE-portal.

Optie 2 ken ik niet. Ik heb nog een good old omvormer met display :).
Optie 3 kun je inderdaad de info per paneel zien maar je kunt t niet uitlezen. Dat is wat ik bedoelde.

  • Aegle
  • Registratie: november 2013
  • Laatst online: 15-11 23:12

Aegle

"hier" = Schiedam, ZH...

@Rene Jansen: ah, nu lees ik ook dat je spreekt over de API van SE.
Lokaal uitlezen via de RS485 bus lijkt me nog de mooiste oplossing. Echt realtime.

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


  • gertm
  • Registratie: september 2010
  • Laatst online: 23-08 14:27
René Janssen schreef op zaterdag 10 augustus 2019 @ 10:18:
Optie 3 kun je inderdaad de info per paneel zien maar je kunt t niet uitlezen. Dat is wat ik bedoelde.
Ik weet dat je via de API de gegevens per paneel niet kunt uitlezen. Via de SE portal kun je wel de gegevens per paneel zien - en ik zag dat je via een request naar https://monitoring.solare.../<site-id>/layout/logical een JSON kunt bemachtigen waar een hoop nuttige informatie in staat. Alleen - ik moet ingelogd zijn om aan die URL aan te kunnen, niet zo handig als je iets automatisch wilt maken :P . Ik vermoed dat er wel iets mogelijk is als die layout publiek staat, maar voorlopig ga ik daar niet verder naar kijken. Temperatuur zie ik er ook niet bij staan, en updates om de 15 minuten.

Ik ga dus verder met optie 2, op basis van solaredge-local en de scriptjes die René hier gepost heeft - waarvoor dank :)

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 18-11 21:29
gertm schreef op zaterdag 10 augustus 2019 @ 15:10:
Alleen - ik moet ingelogd zijn om aan die URL aan te kunnen, niet zo handig als je iets automatisch wilt maken :P
Dat zou zo eenvoudig kunnen zijn als een cookie meesturen... de vraag is alleen waar je die cookie dan vandaan moet halen want op de loginpagina zit een captcha. Misschien kun je handmatig inloggen in je browser en dan de cookies die je ontvangt opslaan en die gebruiken om te pollen.

Jerrythafast wijzigde deze reactie 10-08-2019 17:10 (13%)

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


  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Aegle schreef op zaterdag 10 augustus 2019 @ 11:14:
Lokaal uitlezen via de RS485 bus lijkt me nog de mooiste oplossing. Echt realtime.
Helaas zit daar geen informatie per optimizer in (volgens de documentatie van SolarEdge althans; ik zal er eens naar kijken als mijn omvormer is geleverd). Het mooiste zou zijn als SolarEdge een Sunspec vendor extension zou definiëren voor de optimizers zodat ze die informatie ook via Modbus (RS485 of TCP) kunnen aanbieden. Dan heb je tenminste een behoorlijke zekerheid dat het ook in de toekomst blijft werken.

"There is no Engineering like Reverse Engineering"


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 18-11 21:29
ZwarteIJsvogel schreef op woensdag 14 augustus 2019 @ 07:20:
[...]

Helaas zit daar geen informatie per optimizer in (volgens de documentatie van SolarEdge althans; ik zal er eens naar kijken als mijn omvormer is geleverd). Het mooiste zou zijn als SolarEdge een Sunspec vendor extension zou definiëren voor de optimizers zodat ze die informatie ook via Modbus (RS485 of TCP) kunnen aanbieden. Dan heb je tenminste een behoorlijke zekerheid dat het ook in de toekomst blijft werken.
De optimizers laten normaliter maar eens in de zoveel minuten (ongeveer 5 maar dit fluctueert nogal) van zich horen. Dus zelfs als je de omvormer per seconde kunt uitlezen (schijnt dat niet te kunnen met de SetApp omvormers trouwens?) zal de data van de optimizers veel minder snel veranderen. Er was wel ooit, ruim vóór het SetApp tijdperk, een SolarEdge PLC (powerline commando) gevonden waarmee "waarschijnlijk" de frequentie van de telemetrie van de optimizers kon worden ingesteld. Maar niemand heeft ooit de ballen gehad om dat eens uit te proberen >:)


@andrerij Je hebt een Pull Request op GitHub ;)

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


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
Jerrythafast schreef op woensdag 14 augustus 2019 @ 09:30:
[...]


@andrerij Je hebt een Pull Request op GitHub ;)
Er staat geen Pull Request op GitHub.


Als je hem hebt geplaatst zal ik het bekijken.

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 18-11 21:29
andrerij schreef op woensdag 14 augustus 2019 @ 10:59:
[...]


Er staat geen Pull Request op GitHub.
[Afbeelding]

Als je hem hebt geplaatst zal ik het bekijken.
Typisch, ik zou toch zweren dat ik op 'Create Pull Request' had gedrukt 8)7 Zal wel nog niet wakker geweest zijn vanmorgen :9 Hij staat open!
https://github.com/amrij/zonnepanelen/pull/66

Ah, ik zie het al, ik heb blijkbaar vanmorgen in het commit message mijn pull request verhaaltje getikt. Kreeg wel netjes een across-fork compare te zien, maar hij zette niet direct de PR open na committen. Dat had ik daarna nog handmatig moeten doen.

Jerrythafast wijzigde deze reactie 14-08-2019 11:34 (20%)

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


  • wopper
  • Registratie: juli 2001
  • Laatst online: 17:42
Jerrythafast schreef op zondag 2 juli 2017 @ 22:12:
Als je geen donateur bent van PVOutput zou het ook nog kunnen zijn dat het script meer data tegelijk probeert te uploaden dan door PVOutput wordt toegestaan. Om dat op te lossen kun je in het script de regel waar 'LIMIT 100' staat veranderen naar 'LIMIT 30'.
Als je stopt met doneren is het aanpassen van deze waarde dan voldoende? Kan de crontab op 5min blijven staan?

PVoutput 4020WP Z-ZW en Z-ZO


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 18-11 21:29
wopper schreef op woensdag 14 augustus 2019 @ 13:27:
[...]


Als je stopt met doneren is het aanpassen van deze waarde dan voldoende? Kan de crontab op 5min blijven staan?
Ja hoor, normaal mag je 60 API requests per uur sturen, dus gemiddeld 1x per minuut. Als donateur 300, dus gemiddeld 1x per 12 seconden. Default staat hij met se-logger op 1x per 2 minuten dus dat zal nooit problemen kunnen opleveren.

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


  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
andrerij schreef op woensdag 24 juli 2019 @ 22:42:
[...]


Ik ben pas later met het programma van Jerry begonnen dus ik had hetzelfde probleem.
Hiervoor heb ik het volgende script (semonitoring.php) geschreven voor mijn 3fase inverter:

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
<?php
$date1 = strtotime(sprintf("%s 00:00:00",$_GET["date1"]));    // Unix timestamps in seconds begin dag
$date2 = strtotime(sprintf("%s 00:00:00",$_GET["date2"]));  // Unix timestamps in seconds eind dag

$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
$mysqli = new mysqli($host, $user, $passwd, $db, $port);
$query = sprintf("SELECT e_total FROM telemetry_inverter_3phase WHERE timestamp > '%s' and timestamp < '%s' ORDER BY timestamp DESC LIMIT 1", $date1-86400, $date1);
$result = $mysqli->query($query);
$row = mysqli_fetch_assoc($result);
$e_total = $row['e_total'];

$date = $date1;
while($date <= $date2){
    echo date("Y-m-d", $date) . "<br>";
    $datum_1 = date('Y-m-d%20H:i:s',$date);
    $datum_2 = date('Y-m-d%20H:i:s',$date+86400);
    $de_day = 0;
    $e_day = 0;
    $file = sprintf('https://monitoringapi.solaredge.com/equipment/<siteID>/<inverterID>/data.json?startTime=%s&endTime=%s&api_key=<apiKey>', $datum_1, $datum_2); //  eigen siteid, inverterid en apikey invullen
    $str = file_get_contents($file);
    $json = json_decode($str, true);
    $count = $json['data']['count'];
    $i=0;
    while($i < $count){
        if ($json['data']['telemetries'][$i]['totalEnergy'] > 0){
            $de_day = $json['data']['telemetries'][$i]['totalEnergy'] - $e_total;
            $e_day += $de_day;
            $e_total = $json['data']['telemetries'][$i]['totalEnergy'];     
            //  '1 OFF, 2 SLEEPING, 3 STARTING, 4 MPPT, 5 THROTTLED, 6 SHUTTING_DOWN, 8 STANDBY'
            $modeasc= $json['data']['telemetries'][$i]['inverterMode'];
            $mode = 1;
            if ( $modeasc == 'OFF' ) { $mode=1;}
            if ( $modeasc == 'SLEEPING' ) { $mode=2;}
            if ( $modeasc == 'STARTING' ) { $mode=3;}
            if ( $modeasc == 'MPPT' ) { $mode=4;}
            if ( $modeasc == 'THROTTLED' ) { $mode=5;}
            if ( $modeasc == 'SHUTTING_DOWN' ) { $mode=6;}
            if ( $modeasc == 'STANDBY' ) { $mode=8;}
            
            $query = sprintf("INSERT INTO telemetry_inverter_3phase (inv_id, timestamp, temperature, e_day, de_day, v_ac1, v_ac2, v_ac3, i_ac1, i_ac2, i_ac3, frequency1, frequency2, frequency3, v_dc, e_total, i_rcd, mode, v_1to2, v_2to3, v_3to1, p_active1, p_active2, p_active3, p_apparent1, p_apparent2, p_apparent3, p_reactive1, p_reactive2, p_reactive3 )values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", '2115627495', strtotime($json['data']['telemetries'][$i]['date']),$json['data']['telemetries'][$i]['temperature'], $e_day, $de_day, $json['data']['telemetries'][$i]['L1Data']['acVoltage'],  
                            $json['data']['telemetries'][$i]['L2Data']['acVoltage'], $json['data']['telemetries'][$i]['L3Data']['acVoltage'], $json['data']['telemetries'][$i]['L1Data']['acCurrent'], $json['data']['telemetries'][$i]['L2Data']['acCurrent'], $json['data']['telemetries'][$i]['L3Data']['acCurrent'], $json['data']['telemetries'][$i]['L1Data']['acFrequency'], $json['data']['telemetries'][$i]['L2Data']['acFrequency'], $json['data']['telemetries'][$i]['L3Data']['acFrequency'], $json['data']['telemetries'][$i]['dcVoltage'], $json['data']['telemetries'][$i]['totalEnergy'], '0.004', $mode, $json['data']['telemetries'][$i]['vL1To2'], $json['data']['telemetries'][$i]['vL2To3'], $json['data']['telemetries'][$i]['vL3To1'],
                            $json['data']['telemetries'][$i]['L1Data']['activePower'], $json['data']['telemetries'][$i]['L2Data']['activePower'], $json['data']['telemetries'][$i]['L3Data']['activePower'], $json['data']['telemetries'][$i]['L1Data']['apparentPower'], $json['data']['telemetries'][$i]['L2Data']['apparentPower'], $json['data']['telemetries'][$i]['L3Data']['apparentPower'], $json['data']['telemetries'][$i]['L1Data']['reactivePower'], $json['data']['telemetries'][$i]['L2Data']['reactivePower'], $json['data']['telemetries'][$i]['L3Data']['reactivePower']);
            $result = $mysqli->query($query);   
        }
        $i +=1;
    }
    $date += 86400;
}
$thread_id = $mysqli->thread_id;
$mysqli->kill($thread_id);
$mysqli->close();
?>



Het kan worden aangeroepen met (voor bijvoorbeeld 1 juli 2019 tot en met 2 juli 2019)

code:
1
http://.../semonitoring.php?date1=2019-07-01&date2=2019-07-02



De INSERT INTO moet wel aangepast worden voor een enkel fase inverter.

Het aantal dagen moet beperkt blijven tot ongeveer 7 dagen per keer om geen foutmelding te krijgen door een time-out van PHP.
Hoi @andrerij ,

Super werk allemaal, ik heb eindelijk weer eens tijd om data te gaan importeren.

Wat moet er precies aangepast worden om dit ook werkend te krijgen voor een 1 fase inverter?

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op donderdag 15 augustus 2019 @ 13:32:
[...]


Hoi @andrerij ,

Super werk allemaal, ik heb eindelijk weer eens tijd om data te gaan importeren.

Wat moet er precies aangepast worden om dit ook werkend te krijgen voor een 1 fase inverter?
In de config.php

code:
1
2
// gegevens van het zonnepanelensysteem
$inverter = '3'; // 1 voor enkel fase en 3 voor 3 fase inverter



moet $inverter = '1' gezet worden.

Wat er aangpast moet worden staat in deze post.

Indien je de script bedoelt zie https://www.solaredge.com...les/se_monitoring_api.pdf op bladzijde 35 en verder.
Ik kan dit niet uittesten omdat ik niet over een 1 fase inverter beschik.

Er zullen een aantal parameters vervallen en mogelijk een aantal namen veranderen.

met het handmatig invoeren van de internetpagina:

code:
1
https://monitoringapi.solaredge.com/equipment/<site>/<inverter>/data.json?startTime=2019-07-14%2000:00:00&endTime=2019-07-14%2007:00:00&api_key=<api-key>


krijg ik het volgende resultaat:

code:
1
{"data":{"count":2,"telemetries":[{"date":"2019-07-14 06:54:11","totalActivePower":128.0,"dcVoltage":747.562,"groundFaultResistance":6900.03,"powerLimit":100.0,"totalEnergy":2.05802E7,"temperature":23.9001,"inverterMode":"MPPT","vL1To2":401.562,"vL2To3":403.719,"vL3To1":402.969,"L1Data":{"acCurrent":0.0889532,"acVoltage":231.797,"acFrequency":50.035,"apparentPower":161.0,"activePower":20.0,"reactivePower":159.0,"cosPhi":1.0},"L2Data":{"acCurrent":0.212303,"acVoltage":233.562,"acFrequency":50.0348,"apparentPower":151.0,"activePower":48.0,"reactivePower":143.0,"cosPhi":1.0},"L3Data":{"acCurrent":0.264992,"acVoltage":234.203,"acFrequency":50.0351,"apparentPower":184.0,"activePower":60.0,"reactivePower":173.0,"cosPhi":1.0}},{"date":"2019-07-14 06:59:11","totalActivePower":127.0,"dcVoltage":747.0,"groundFaultResistance":6900.03,"powerLimit":100.0,"totalEnergy":2.05802E7,"temperature":25.88,"inverterMode":"MPPT","vL1To2":401.688,"vL2To3":403.438,"vL3To1":403.125,"L1Data":{"acCurrent":0.0973326,"acVoltage":232.359,"acFrequency":50.033,"apparentPower":160.0,"activePower":22.0,"reactivePower":158.0,"cosPhi":1.0},"L2Data":{"acCurrent":0.226228,"acVoltage":233.703,"acFrequency":50.0337,"apparentPower":156.0,"activePower":51.0,"reactivePower":147.0,"cosPhi":1.0},"L3Data":{"acCurrent":0.238503,"acVoltage":234.641,"acFrequency":50.0325,"apparentPower":184.0,"activePower":54.0,"reactivePower":175.0,"cosPhi":1.0}}]}}



Met de gegevens van het resultaat kun je het script aanpassen.

Indien je het resultaat naar mij e-mailt kan ik het script ook voor je aanpassen.

andrerij wijzigde deze reactie 15-08-2019 16:40 (67%)


  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
andrerij schreef op donderdag 15 augustus 2019 @ 15:50:
[...]


In de config.php

code:
1
2
// gegevens van het zonnepanelensysteem
$inverter = '3'; // 1 voor enkel fase en 3 voor 3 fase inverter



moet $inverter = '1' gezet worden.

Wat er aangpast moet worden staat in deze post.

Indien je de script bedoelt zie https://www.solaredge.com...les/se_monitoring_api.pdf op bladzijde 35 en verder.
Ik kan dit niet uittesten omdat ik niet over een 1 fase inverter beschik.

Er zullen een aantal parameters vervallen en mogelijk een aantal namen veranderen.

met het handmatig invoeren van de internetpagina:

code:
1
https://monitoringapi.solaredge.com/equipment/<site>/<inverter>/data.json?startTime=2019-07-14%2000:00:00&endTime=2019-07-14%2007:00:00&api_key=<api-key>


krijg ik het volgende resultaat:

code:
1
{"data":{"count":2,"telemetries":[{"date":"2019-07-14 06:54:11","totalActivePower":128.0,"dcVoltage":747.562,"groundFaultResistance":6900.03,"powerLimit":100.0,"totalEnergy":2.05802E7,"temperature":23.9001,"inverterMode":"MPPT","vL1To2":401.562,"vL2To3":403.719,"vL3To1":402.969,"L1Data":{"acCurrent":0.0889532,"acVoltage":231.797,"acFrequency":50.035,"apparentPower":161.0,"activePower":20.0,"reactivePower":159.0,"cosPhi":1.0},"L2Data":{"acCurrent":0.212303,"acVoltage":233.562,"acFrequency":50.0348,"apparentPower":151.0,"activePower":48.0,"reactivePower":143.0,"cosPhi":1.0},"L3Data":{"acCurrent":0.264992,"acVoltage":234.203,"acFrequency":50.0351,"apparentPower":184.0,"activePower":60.0,"reactivePower":173.0,"cosPhi":1.0}},{"date":"2019-07-14 06:59:11","totalActivePower":127.0,"dcVoltage":747.0,"groundFaultResistance":6900.03,"powerLimit":100.0,"totalEnergy":2.05802E7,"temperature":25.88,"inverterMode":"MPPT","vL1To2":401.688,"vL2To3":403.438,"vL3To1":403.125,"L1Data":{"acCurrent":0.0973326,"acVoltage":232.359,"acFrequency":50.033,"apparentPower":160.0,"activePower":22.0,"reactivePower":158.0,"cosPhi":1.0},"L2Data":{"acCurrent":0.226228,"acVoltage":233.703,"acFrequency":50.0337,"apparentPower":156.0,"activePower":51.0,"reactivePower":147.0,"cosPhi":1.0},"L3Data":{"acCurrent":0.238503,"acVoltage":234.641,"acFrequency":50.0325,"apparentPower":184.0,"activePower":54.0,"reactivePower":175.0,"cosPhi":1.0}}]}}



Met de gegevens van het resultaat kun je het script aanpassen.

Indien je het resultaat naar mij e-mailt kan ik het script ook voor je aanpassen.
Het ging inderdaad om het script waarmee de data die niet in de pcaps gekomen is weer geimporteerd kon worden.


code:
1
{"data":{"count":20,"telemetries":[{"date":"2019-07-14 05:24:45","totalActivePower":0.0,"dcVoltage":17.7602,"powerLimit":0.0,"totalEnergy":2798940.0,"temperature":26.0221,"inverterMode":"STARTING","operationMode":0,"L1Data":{"acCurrent":0.0,"acVoltage":233.042,"acFrequency":50.016,"apparentPower":0.0,"activePower":0.0,"reactivePower":0.0,"cosPhi":1.0}},{"date":"2019-07-14 05:29:45","totalActivePower":0.0,"dcVoltage":21.8942,"powerLimit":0.0,"totalEnergy":2798940.0,"temperature":26.465,"inverterMode":"STARTING","operationMode":0,"L1Data":{"acCurrent":0.0,"acVoltage":233.842,"acFrequency":50.0136,"apparentPower":0.0,"activePower":0.0,"reactivePower":0.0,"cosPhi":1.0}},{"date":"2019-07-14 05:34:45","totalActivePower":0.0,"dcVoltage":26.2317,"powerLimit":0.0,"totalEnergy":2798940.0,"temperature":26.5989,"inverterMode":"STARTING","operationMode":0,"L1Data":{"acCurrent":0.0,"acVoltage":234.97,"acFrequency":50.0014,"apparentPower":0.0,"activePower":0.0,"reactivePower":0.0,"cosPhi":1.0}},{"date":"2019-07-14 05:39:44","totalActivePower":0.0,"dcVoltage":82.0418,"powerLimit":0.0,"totalEnergy":2798940.0,"temperature":26.6814,"inverterMode":"STARTING","operationMode":0,"L1Data":{"acCurrent":0.0,"acVoltage":234.38,"acFrequency":50.0169,"apparentPower":0.0,"activePower":0.0,"reactivePower":0.0,"cosPhi":1.0}},{"date":"2019-07-14 05:44:44","totalActivePower":0.0,"dcVoltage":271.867,"powerLimit":0.0,"totalEnergy":2798940.0,"temperature":26.769,"inverterMode":"STARTING","operationMode":0,"L1Data":{"acCurrent":0.0,"acVoltage":233.375,"acFrequency":50.0031,"apparentPower":0.0,"activePower":0.0,"reactivePower":0.0,"cosPhi":1.0}},{"date":"2019-07-14 05:49:44","totalActivePower":0.0,"dcVoltage":375.129,"powerLimit":100.0,"totalEnergy":2798940.0,"temperature":27.7364,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.0,"acVoltage":235.956,"acFrequency":50.0166,"apparentPower":0.0,"activePower":0.0,"reactivePower":0.0,"cosPhi":1.0}},{"date":"2019-07-14 05:54:44","totalActivePower":7.79987,"dcVoltage":375.074,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798940.0,"temperature":29.7565,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.916186,"acVoltage":235.541,"acFrequency":49.9925,"apparentPower":215.838,"activePower":7.79987,"reactivePower":215.697,"cosPhi":1.0}},{"date":"2019-07-14 05:59:44","totalActivePower":0.0,"dcVoltage":375.089,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798940.0,"temperature":30.1585,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.956467,"acVoltage":235.635,"acFrequency":50.0206,"apparentPower":225.291,"activePower":0.0,"reactivePower":225.258,"cosPhi":1.0}},{"date":"2019-07-14 06:04:44","totalActivePower":9.52809,"dcVoltage":374.49,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798940.0,"temperature":30.4118,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.913231,"acVoltage":235.053,"acFrequency":49.9947,"apparentPower":214.719,"activePower":9.52809,"reactivePower":214.507,"cosPhi":1.0}},{"date":"2019-07-14 06:09:44","totalActivePower":19.7563,"dcVoltage":373.92,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798940.0,"temperature":30.433,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.898146,"acVoltage":234.795,"acFrequency":50.0226,"apparentPower":210.831,"activePower":19.7563,"reactivePower":209.903,"cosPhi":1.0}},{"date":"2019-07-14 06:14:44","totalActivePower":46.6633,"dcVoltage":372.789,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798940.0,"temperature":30.9216,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.843027,"acVoltage":233.413,"acFrequency":49.9956,"apparentPower":196.876,"activePower":46.6633,"reactivePower":191.266,"cosPhi":1.0}},{"date":"2019-07-14 06:19:43","totalActivePower":81.585,"dcVoltage":372.543,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798950.0,"temperature":31.2073,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.800468,"acVoltage":233.528,"acFrequency":49.9873,"apparentPower":186.983,"activePower":81.585,"reactivePower":168.246,"cosPhi":1.0}},{"date":"2019-07-14 06:24:43","totalActivePower":92.4254,"dcVoltage":373.353,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798950.0,"temperature":31.4406,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.828516,"acVoltage":233.99,"acFrequency":49.9856,"apparentPower":193.809,"activePower":92.4254,"reactivePower":170.351,"cosPhi":1.0}},{"date":"2019-07-14 06:29:43","totalActivePower":103.735,"dcVoltage":374.189,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798960.0,"temperature":31.6604,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.828549,"acVoltage":234.45,"acFrequency":49.9878,"apparentPower":194.338,"activePower":103.735,"reactivePower":164.336,"cosPhi":1.0}},{"date":"2019-07-14 06:34:43","totalActivePower":68.1629,"dcVoltage":372.543,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798970.0,"temperature":31.8344,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.833719,"acVoltage":233.284,"acFrequency":49.988,"apparentPower":194.543,"activePower":68.1629,"reactivePower":182.211,"cosPhi":1.0}},{"date":"2019-07-14 06:39:43","totalActivePower":90.7734,"dcVoltage":372.704,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798980.0,"temperature":32.0088,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.80618,"acVoltage":233.637,"acFrequency":49.9995,"apparentPower":188.399,"activePower":90.7734,"reactivePower":165.089,"cosPhi":1.0}},{"date":"2019-07-14 06:44:43","totalActivePower":156.527,"dcVoltage":372.724,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2798990.0,"temperature":32.1818,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.859426,"acVoltage":233.787,"acFrequency":50.0055,"apparentPower":200.875,"activePower":156.527,"reactivePower":125.897,"cosPhi":1.0}},{"date":"2019-07-14 06:49:43","totalActivePower":234.47,"dcVoltage":373.083,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2799000.0,"temperature":32.3718,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":1.09423,"acVoltage":233.83,"acFrequency":50.0005,"apparentPower":255.935,"activePower":234.47,"reactivePower":102.601,"cosPhi":1.0}},{"date":"2019-07-14 06:54:42","totalActivePower":209.204,"dcVoltage":371.159,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2799020.0,"temperature":32.5002,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":0.997586,"acVoltage":232.682,"acFrequency":50.0169,"apparentPower":232.016,"activePower":209.204,"reactivePower":100.325,"cosPhi":1.0}},{"date":"2019-07-14 06:59:42","totalActivePower":275.65,"dcVoltage":374.384,"groundFaultResistance":11000.0,"powerLimit":100.0,"totalEnergy":2799040.0,"temperature":32.6853,"inverterMode":"MPPT","operationMode":0,"L1Data":{"acCurrent":1.25928,"acVoltage":234.69,"acFrequency":50.0279,"apparentPower":295.511,"activePower":275.65,"reactivePower":106.508,"cosPhi":1.0}}]}}

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op donderdag 15 augustus 2019 @ 22:13:
[...]


Het ging inderdaad om het script waarmee de data die niet in de pcaps gekomen is weer geimporteerd kon worden.
Ik ben al een eind verder, maar is heb van deze gegevens ook enkele (3 tijdstippen) data nodig die in de database zijn opgeslagen.

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
andrerij schreef op donderdag 15 augustus 2019 @ 22:59:
[...]


Ik ben al een eind verder, maar is heb van deze gegevens ook enkele (3 tijdstippen) data nodig die in de database zijn opgeslagen.
Heb je daarvan de PCAP nodig, is dat het makkelijkste?
Anders hoor ik graag hoe ik het er voor je uit moet halen.


Ik kreeg gisteren met het importeren van oude PCAP bestanden zoveel fout meldingen en tables die kwijt raakte en noem het maar op.
Hele database maar weer weg gegooid en alles op nieuw ingeladen, wat een werk!

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op vrijdag 16 augustus 2019 @ 16:11:
[...]


Heb je daarvan de PCAP nodig, is dat het makkelijkste?
Anders hoor ik graag hoe ik het er voor je uit moet halen.


Ik kreeg gisteren met het importeren van oude PCAP bestanden zoveel fout meldingen en tables die kwijt raakte en noem het maar op.
Hele database maar weer weg gegooid en alles op nieuw ingeladen, wat een werk!
Je kunt de data in phpMyAdmin opvragen met

code:
1
Select * from telemetry_inverter where timestamp between 1563073200 and 1563080400



Dan krijg je de data die bij de gegevens horen die je van de solaredge site hebt gekregen.

  • stefxx
  • Registratie: februari 2016
  • Laatst online: 17-11 08:09
Jerrythafast schreef op woensdag 7 augustus 2019 @ 12:16:
[...]

Lijkt erop dat je inderdaad een update hebt gehad en je omvormer meer of andere data is gaan sturen. Heb je een recente pcap voor me? Dan kan ik even kijken wat er veranderd is.
Sorry voor het late antwoord. Ik heb het weer aan de praat gekregen door te testen op lengte 186 (ipv 180).

Ik zal je een recente pcap file sturen in een PM.

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
andrerij schreef op vrijdag 16 augustus 2019 @ 17:24:
[...]

Je kunt de data in phpMyAdmin opvragen met

code:
1
Select * from telemetry_inverter where timestamp between 1563073200 and 1563080400



Dan krijg je de data die bij de gegevens horen die je van de solaredge site hebt gekregen.
Eens even kijken waar ik dat in moet gooien..! Laat het je zsm weten.

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 18-11 21:29
Als je meer van de command prompt bent kun je het natuurlijk ook gewoon rechtstreeks in mysql tikken ;)

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


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op vrijdag 16 augustus 2019 @ 22:26:
[...]


Eens even kijken waar ik dat in moet gooien..! Laat het je zsm weten.
Je kunt ook het volgende script gebruiken.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
include('config.php');
//open MySQL database
$mysqli = new mysqli($host, $user, $passwd, $db, $port);
// enkel of drie fase inverter
$table   = $inverter == 1 ? 'telemetry_inverter' : 'telemetry_inverter_3phase';
// haal de gegevens van de inverter op
$query = 'SELECT * ' .
        ' FROM ' . $table .
        ' where timestamp between 1563073200 and 1563080400';
$result = $mysqli->query($query);
// print gegevens       
while ($row = mysqli_fetch_assoc($result)) {
    print_r ($row);
    print "<br>";
}
?>



Het kan bijvoorbeeld data.php genoemd worden en het moet in dezelfde directory als de config.php file staan.

  • hugodegraaf
  • Registratie: november 2012
  • Laatst online: 01-09 23:19
Ik heb "(in (124, 174, 180)" verandert in "(in (124, 174, 186)". Nu werkt het wel!
Ik krijg ook pakketten met type=34 en lengte=58. Weet (nog) niet wat die betekenen.

  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 18-11 21:29
Ik heb een nieuwe versie van se-logger op GitHub gezet. Nieuw in deze versie is ook dat de instellingen die voorheen in liveupdate.py stonden, in een apart bestand config.py moeten worden gezet. (Dat is nu nog één keer vervelend met updaten, maar in het vervolg heb je er met nieuwe updates geen omkijken meer naar.)

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


  • gertm
  • Registratie: september 2010
  • Laatst online: 23-08 14:27
Ik heb mijn code ook op GitHub (https://github.com/debrigand/Solaredge-monitoring) gezet. Ik heb gebruik gemaakt van solaredge-local - en dus werkt de code uitsluitend voor omvormers met SetApp. Voorlopig(?) ook alleen voor enkelfasige omvormer. En de data wordt in een databank opgeslagen, maar er wordt nog niets naar PVoutput gestuurd. Er is dus nog wel wat werk aan de winkel, maar ik zie alvast een hoop cijfertjes in MariaDB binnenstromen.

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
andrerij schreef op zaterdag 17 augustus 2019 @ 09:39:
[...]

Je kunt ook het volgende script gebruiken.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
include('config.php');
//open MySQL database
$mysqli = new mysqli($host, $user, $passwd, $db, $port);
// enkel of drie fase inverter
$table   = $inverter == 1 ? 'telemetry_inverter' : 'telemetry_inverter_3phase';
// haal de gegevens van de inverter op
$query = 'SELECT * ' .
        ' FROM ' . $table .
        ' where timestamp between 1563073200 and 1563080400';
$result = $mysqli->query($query);
// print gegevens       
while ($row = mysqli_fetch_assoc($result)) {
    print_r ($row);
    print "<br>";
}
?>



Het kan bijvoorbeeld data.php genoemd worden en het moet in dezelfde directory als de config.php file staan.
Van de datum in jou link had ik geen data.... maar goed heb het even aangepast naar gisteren.
Het is nogal een lap tekst, waar kan ik het evt. naar toe mailen?

De data.php file zoals je hem had deed niks? Maar goed, misschien doe ik iets fout?

MaikelK. wijzigde deze reactie 19-08-2019 18:49 (4%)

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • Rufan
  • Registratie: juni 2019
  • Laatst online: 01-09 09:41
Heren ik heb een probleempje, ik krijg geen juiste data in de PCAP, dus ook niet in de database.

Info van de opstelling:
SolarEdge SE5K 3~fase met Display omvormer (IP: 192.168.1.57/24)
Raspberry Pi (ubuntu met se-logger en amrij website) (IP: 192.168.1.58/24)
Bijde devices zijn verbonden met een Mikrotik RB4011iGS+5HacQ2HnD-IN Router.
Port mirroring, mirror source: SolarEdge , target source: RPi

Instellingen:
se-logger-service.sh
/usr/bin/stdbuf -i0 -o0 -e0 /usr/sbin/tcpdump -i $INTERFACE -U -w - -n host 192.168.1.57 2>>{CAPTDIR}tcpdump.log | \

Logs:
tcpdump.log
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

Liveupdate.log
Reading from –

PCAP:
Over een dag genomen groeit de pcap maar 9kb.
Onderstaande patroon kan ik ook niet terug vinden in de .pcap
12 34 56 79 xx xx xx xx xx xx xx xx xx xx xx xx xx xx 3d 00

Is er iets wat jullie opvalt wat ik wellicht fout doe.
Wat zou ik nog meer kunnen aanpassen/ testen om het probleem beter te kunnen analyseren en oplossen.


PS. Ik heb het opgelost, foutje gemaakt in settings van port mirroring.

Rufan wijzigde deze reactie 20-08-2019 06:33 (5%)


  • Rufan
  • Registratie: juni 2019
  • Laatst online: 01-09 09:41
Heeft er niemand al ervaring met data van P1MON (P1 monitor) naar de website van amrij te krijgen?
Hoe zou ik dit moeten aanpakken. Een voorzetje zou mooi zijn.

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
andrerij schreef op donderdag 25 juli 2019 @ 20:37:
[...]

Naar aanleiding van de opmerk van @Jerrythafast hierbij het aangepaste script.

In plaats van voor elk paneel 4 grafieken worden het nu 4 grafieken per dag:
Energie (E) (1e omvormer, 1e string, x paneel aangeduid als P1.1.x E)
Optimizer spanning (O) (1e omvormer, x string, 1e paneel aangeduid als OP1.1.x V)
Paneel spanning (M) (1e omvormer, 1e string, x paneel aangeduid als P1.1.x V)
Stroom (C) (1e omvormer, 1e string, x paneel aangeduid als P1.1.x I)
Er komen dus 4 .csv files per dag in de directory namelijk: E.csv, O.csv, M.csv en C.csv.

De file voor E.csv ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
Time,P1.1.1 E (Wh),P1.1.2 E (Wh),P1.1.3 E (Wh),P1.1.4 E (Wh),P1.1.5 E (Wh),P1.1.6 E (Wh),P1.1.7 E (Wh),P1.1.8 E (Wh),P1.1.9 E (Wh),P1.1.10 E (Wh),P1.1.11 E (Wh),P1.1.12 E (Wh),P1.1.13 E (Wh),P1.1.14 E (Wh),P1.1.15 E (Wh),P1.1.16 E (Wh),P1.1.17 E (Wh),P1.1.18 E (Wh),P1.1.19 E (Wh),P1.1.20 E (Wh),P1.1.21 E (Wh),P1.1.22 E (Wh),P1.1.23 E (Wh),P1.1.24 E (Wh)
02-02-2016 8:00,"","","","0.5","0","","","","","","","","1.25","","","","0.25","","","","","","",""
02-02-2016 9:00,"10.5","10","10.75","11.5","8.75","10.75","10.25","8.75","10.5","10.25","9.5","9.5","11.5","12","8.25","8.5","9.75","9.5","10","8.5","7.5","10","10","9.75"
02-02-2016 10:00,"22.25","19.75","22.5","22.5","18.5","22.25","20","19","22.25","21","19.5","21.75","22.75","24","21.75","19.5","20.75","19.25","21","20.25","23","20","20.75","20.75"
02-02-2016 11:00,"12","12.5","13.25","12","11.25","13.75","12","10.5","12","10.75","11","12.25","12.5","13.75","12.25","9.25","10.5","9.75","10.25","10.75","13.25","12","10.75","11.75"
02-02-2016 12:00,"16","13.75","15.5","16.25","12","14.75","15.25","12.75","15.25","14","13.25","15","18","17.5","15","14.25","14.25","14","15.75","13.5","16.75","15","14.5","14"
02-02-2016 13:00,"14.25","12.5","14.75","13.75","11","15.75","12.25","11.75","13","13.5","11.5","13.75","14.75","16","13","12","13.25","12.25","13.25","11.5","15","13","13.5","13.25"
02-02-2016 14:00,"5.5","4.25","6","7","5.5","5.25","4.75","2.75","7","4.5","2.5","6.75","7","7.25","4.75","3","1.75","1.5","7","6","5.5","4.25","3.5","4.75"
02-02-2016 15:00,"28.25","29.25","30.25","26","20.75","28.25","24.5","28.5","26.5","25.5","26.25","21.5","26","24.75","27","26.25","27.5","24","30","25","22.5","23.5","29.25","33.25"
02-02-2016 16:00,"10.25","8.25","12.5","11.5","7.5","10.25","8.5","7.75","8.75","7.25","7.25","8.75","10","11.75","9.75","8.25","9.5","8.25","10.75","9.75","12.5","9.5","11.5","12.25"
02-02-2016 17:00,"0.75","0.5","0.5","0.75","0.25","1.25","0.25","0","0.75","0.25","0.25","0.5","0.25","0.75","0.75","0.25","0","0.5","0.75","0.25","0.75","0","","0.5"



De data kan met de volgende script in de database 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
$datum = $_GET['datum'];

include('config.php');

$mysqli = new mysqli($host, $user, $passwd, $db, $port);

$f[0] = "M";
$f[1] = "O";
$f[2] = "C";
$f[3] = "E";
$g[0][0] = "P1.1.";
$g[0][1] = " V (V)";
$g[1][0] = "OP1.1.";
$g[1][1] = " V (V)";
$g[2][0] = "P1.1.";
$g[2][1] = " I (A)";
$g[3][0] = "P1.1.";
$g[3][1] = " E (Wh)";

$fout = 0;
for ($j=1; $j<=$aantal; $j++){
    for ($k=0; $k<=3; $k++) {
        $file = $file = "./p/" . $datum ."/" . $f[$k] . ".csv";
        if (($handle = fopen($file, "r")) !== FALSE) {
            $data1 = fgetcsv($handle, 1000, ",");
            $data = fgetcsv($handle, 1000, ",");
            $num = count($data);
            if ( $g[$k][0].$j.$g[$k][1] == $data1[$j]) {
                if ($datum <> gmdate("Y-m-d",(new DateTime(sprintf("today %s",date("Y-m-d H:i:s", strtotime($data[0])))))->getTimestamp())) {
                    echo $file . ": datum klopt niet <br>";
                    $fout = 1;
                }
            }else{
                echo $file . " " . $g[$k][0].$j.$g[$k][1] . ": " . $data1[1] . ": serie klopt niet <br>";
                $fout = 1;
            }
            fclose($handle);
        } else {
            echo $file . ": is niet aanwezig <br>";
            $fout = 1;
        }
    }
}

echo "eind check <br>";

if ($fout == 0){
    for ($j=1; $j<=$aantal; $j++){
        $uptime = 10;
        $paneel = array();
        for ($k=0; $k<=2; $k++) {
            $file = "./p/" . $datum ."/" . $f[$k] . ".csv";
            $handle = fopen($file, "r");
            $row = 0;
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                if ($row > 0) {
                    if ($k == 0 and $data[$j] != "") {$paneel[$row-1][0] = strtotime($data[0]);}
                    if ($data[$j] != "") {$paneel[$row-1][$k+1] = $data[$j];}
                }
                if ($data[$j] != "") {$row++;}
            }
            fclose($handle);
        }
        $k = 3;
        $file = "./p/" . $datum . "/" . $f[$k] . ".csv";
        $handle = fopen($file, "r");
        $row1 = 0;
        $e=0;
        $totaal[0] = 0;
        $tataal[1] = 0;
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            if ($data[$j] != "") {
                if ($row1 == 1) {$tijdb = strtotime($data[0]); $Eb = $data[$j];}
                if ($row1 > 1) {
                    $tijde = strtotime($data[0]);
                    $Ee = $data[$j];
                    $m = 0;
                    for ($l=$e; $l<$row-1; $l++){
                        if ( $paneel[$l][0] > $tijdb && $paneel[$l][0] <= $tijde) { 
                            $m++;
                        } else {
                            if ($m > 0){
                                for ($n=$l-$m; $n < $l; $n++){
                                    if ($totaal[1] > $totaal[0] ) {
                                        $paneel[$n][4] += intval($Eb*4/$m);
                                        $totaal[0] += $Eb*4/$m;
                                        $totaal[1] += intval($Eb*4/$m);
                                        $paneel[$n][4] = intval($totaal[0]);
                                    }else{
                                        $totaal[0] += $Eb*4/$m;
                                        $totaal[1] += round($Eb*4/$m,0);
                                        $paneel[$n][4] = intval($totaal[0]);
                                    }
                                }
                                $e = $l;
                                $Eb = $Ee;
                                $m = 0;
                            }
                        }
                    }
                }
                $row1++;
            }
        }
        for ($n=$e; $n <= $row-1; $n++){
            $totaal[0] += round($Eb*4/($row-1-$e),0);
            $paneel[$n][4] = intval($totaal[0]);
        }
        fclose($handle);
        for ($o=0; $o < $row-1; $o++) {
            $query = sprintf("insert into telemetry_optimizers (`op_id`, `timestamp`, `uptime`, `v_in`, `v_out`, `i_in`, `e_day`, `temperature`) 
                        values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
                        hexdec($op_id[$j][0]), $paneel[$o][0], $uptime , $paneel[$o][1]*8, $paneel[$o][2]*8, $paneel[$o][3]*160, $paneel[$o][4], 0);
                $result = $mysqli->query($query);   
            if (!$result) {
                echo 'Error 2-1 insert data to the database: '.$mysqli->error;
            }
                $uptime += 10;
        }
        echo "Totaal paneel " . $j  . ": " . $totaal[0] . ", " . $totaal[1] . "<br>";
    }
}
$thread_id = $mysqli->thread_id;
$mysqli->kill($thread_id);
$mysqli->close();

echo "einde <br>";

?>

@andrerij ben op dit moment bezig om bovenstaande uit te voeren.
Heb de string opbouw aangepast naar P1.0. etc.

Op dit moment geeft hij volgende foutmelding: ./p//M.csv: datum klopt niet

Dit staat er in M.csv:

code:
1
2
Time,P1.0.1 V (V),P1.0.2 V (V),P1.0.3 V (V),P1.0.4 V (V),P1.0.5 V (V),P1.0.6 V (V),P1.0.7 V (V),P1.0.8 V (V),P1.0.9 V (V),P1.0.10 V (V),P1.0.11 V (V),P1.0.12 V (V)
14-06-2019 5:20,"","","","","","25.5","","","","","",""

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op dinsdag 20 augustus 2019 @ 22:18:
[...]


@andrerij ben op dit moment bezig om bovenstaande uit te voeren.
Heb de string opbouw aangepast naar P1.0. etc.

Op dit moment geeft hij volgende foutmelding: ./p//M.csv: datum klopt niet

Dit staat er in M.csv:

code:
1
2
Time,P1.0.1 V (V),P1.0.2 V (V),P1.0.3 V (V),P1.0.4 V (V),P1.0.5 V (V),P1.0.6 V (V),P1.0.7 V (V),P1.0.8 V (V),P1.0.9 V (V),P1.0.10 V (V),P1.0.11 V (V),P1.0.12 V (V)
14-06-2019 5:20,"","","","","","25.5","","","","","",""

De directory moet niet ./p//M.csv zijn maar moet in dit geval ./p/2019-06-14/M.csv zijn.
De script controleert de datum in de file met de datum van de directory.
Dit omdat er gemakkelijk fouten worden gemaakt.
Bij mij ziet het er als volgt uit.
./p/2017-03-31/M.csv

code:
1
2
3
Time,P1.1.1 V (V),P1.1.2 V (V),P1.1.3 V (V),P1.1.4 V (V),P1.1.5 V (V),P1.1.6 V (V),P1.1.7 V (V),P1.1.8 V (V),P1.1.9 V (V),P1.1.10 V (V),P1.1.11 V (V),P1.1.12 V (V),P1.1.13 V (V),P1.1.14 V (V),P1.1.15 V (V),P1.1.16 V (V),P1.1.17 V (V),P1.1.18 V (V),P1.1.19 V (V),P1.1.20 V (V),P1.1.21 V (V),P1.1.22 V (V),P1.1.23 V (V),P1.1.24 V (V)
31-03-2017 7:19,"","","","","31.625","","","","","","","","","","","","","","","","","","",""
31-03-2017 7:20,"","","","31.5","","","","","","","","","","","","","","","","","","","",""


  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
andrerij schreef op dinsdag 20 augustus 2019 @ 23:25:
[...]


De directory moet niet ./p//M.csv zijn maar moet in dit geval ./p/2019-06-14/M.csv zijn.
De script controleert de datum in de file met de datum van de directory.
Dit omdat er gemakkelijk fouten worden gemaakt.
Bij mij ziet het er als volgt uit.
./p/2017-03-31/M.csv

code:
1
2
3
Time,P1.1.1 V (V),P1.1.2 V (V),P1.1.3 V (V),P1.1.4 V (V),P1.1.5 V (V),P1.1.6 V (V),P1.1.7 V (V),P1.1.8 V (V),P1.1.9 V (V),P1.1.10 V (V),P1.1.11 V (V),P1.1.12 V (V),P1.1.13 V (V),P1.1.14 V (V),P1.1.15 V (V),P1.1.16 V (V),P1.1.17 V (V),P1.1.18 V (V),P1.1.19 V (V),P1.1.20 V (V),P1.1.21 V (V),P1.1.22 V (V),P1.1.23 V (V),P1.1.24 V (V)
31-03-2017 7:19,"","","","","31.625","","","","","","","","","","","","","","","","","","",""
31-03-2017 7:20,"","","","31.5","","","","","","","","","","","","","","","","","","","",""

Folder aangemaakt, geeft geen verandering?

code:
1
./p//M.csv: is niet aanwezig


Bestanden staan in volgende map:
/var/www/html/se/p/2019-06-14

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • jvdzande
  • Registratie: november 2015
  • Laatst online: 17-11 16:47
Rufan schreef op dinsdag 20 augustus 2019 @ 21:49:
Heeft er niemand al ervaring met data van P1MON (P1 monitor) naar de website van amrij te krijgen?
Hoe zou ik dit moeten aanpakken. Een voorzetje zou mooi zijn.
Er zijn een aantal opties:
Je kunt de data zelf ophalen en in de P1_Meter tabel zetten nadat die is aangemaakt in de SolarEdge Database. De details voor deze tabel staan in de top van het live-server-data-electra-p1_meter_table.php script en zal zelf een process moeten maken deze tabel te vullen.
.. of je haalt de gegevens op vanuit een Domotica systems als Domoticz indien je die al in gebruik hebt.
Op dit moment zijn er standaard scripts aanwezig voor het ophalen uit Domoticz en DSMR.

Het is dus belangrijk dat de data ergens bewaard is/wordt zodat de zonnepanelen.php website die gegevens kan ophalen.

Laat maar weten als je verder nog vragen hebt of hulp nodig hebt.

Jos

jvdzande wijzigde deze reactie 21-08-2019 10:04 (6%)


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op woensdag 21 augustus 2019 @ 00:00:
[...]


Folder aangemaakt, geeft geen verandering?

code:
1
./p//M.csv: is niet aanwezig


Bestanden staan in volgende map:
/var/www/html/se/p/2019-06-14
Indien de script paneeldate.php in de directory se staat moet het als volgt worden aangeroepen

code:
1
http://<ipaders>/se/paneeldata.php?datum=2019-06-14



Je moet wel het script uit deze post gebruiken

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
andrerij schreef op woensdag 21 augustus 2019 @ 20:11:
[...]

Indien de script paneeldate.php in de directory se staat moet het als volgt worden aangeroepen

code:
1
http://<ipaders>/se/paneeldata.php?datum=2019-06-14



Je moet wel het script uit deze post gebruiken
Ach so, ik had geen datum achter de .php staan... dat was me niet geheel duidelijk!

@andrerij het werkt nu inderdaad!

MaikelK. wijzigde deze reactie 22-08-2019 08:51 (3%)

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
Ik heb het importscript aangepast voor zowel 1 fase als 3 fase inverters.
Het haal de data van Solar-Edge api site en plaatst het in de solaredge database.

Onderstaand het aangepaste script.

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
<?php
$date1 = strtotime(sprintf("%s 00:00:00",$_GET["date1"]));    // Unix timestamps in seconds begin dag
$date2 = strtotime(sprintf("%s 00:00:00",$_GET["date2"]));  // Unix timestamps in seconds eind dag

include('config.php');

function flush_buffers($echo){
    echo $echo;
    ob_end_flush(); 
    ob_flush(); 
    flush(); 
    ob_start(); 
} 

//  eigen siteID, inverterID en apiKey invullen
$siteID = '<siteID>';
$inverterID = '<inverterID>';
$apiKey = '<apiKey>';
$table = $inverter == 1 ? "telemetry_inverter" : "telemetry_inverter_3phase";

$mysqli = new mysqli($host, $user, $passwd, $db, $port);
$query = sprintf("SELECT e_total FROM %s WHERE timestamp > '%s' and timestamp < '%s' ORDER BY timestamp DESC LIMIT 1", $table, $date1-86400, $date1);
$result = $mysqli->query($query);
$row = mysqli_fetch_assoc($result);
$e_total = $row['e_total'];

flush_buffers('Begin ...<br />');

$date = $date1;
while($date <= $date2){
    flush_buffers(date("Y-m-d H:i:s", $date) . "<br>");
    $datum_1 = date('Y-m-d%20H:i:s',$date);
    $datum_2 = date('Y-m-d%20H:i:s',$date+86400);
    $de_day = 0;
    $e_day = 0;
    $file = sprintf('https://monitoringapi.solaredge.com/equipment/%s/%s/data.json?startTime=%s&endTime=%s&api_key=%s',$siteID, $inverterID, $datum_1, $datum_2, $apiKey); 
    $str = file_get_contents($file);
    $json = json_decode($str, true);
    $count = $json['data']['count'];
    flush_buffers('Aantal records: ' . $count . '<br>');
    $i=0;
    while($i < $count){
        if ($json['data']['telemetries'][$i]['totalEnergy'] > 0){
            $de_day = $json['data']['telemetries'][$i]['totalEnergy'] - $e_total;
            $e_day += $de_day;
            $e_total = $json['data']['telemetries'][$i]['totalEnergy'];     
            //  '1 OFF, 2 SLEEPING, 3 STARTING, 4 MPPT, 5 THROTTLED, 6 SHUTTING_DOWN, 8 STANDBY'
            $modeasc= $json['data']['telemetries'][$i]['inverterMode'];
            $mode = 1;
            if ( $modeasc == 'OFF' ) { $mode=1;}
            if ( $modeasc == 'SLEEPING' ) { $mode=2;}
            if ( $modeasc == 'STARTING' ) { $mode=3;}
            if ( $modeasc == 'MPPT' ) { $mode=4;}
            if ( $modeasc == 'THROTTLED' ) { $mode=5;}
            if ( $modeasc == 'SHUTTING_DOWN' ) { $mode=6;}
            if ( $modeasc == 'STANDBY' ) { $mode=8;}

            if ( $inverter == 1 ){
                $query = sprintf("INSERT INTO telemetry_inverter (inv_id, timestamp, temperature, e_day, de_day, v_ac, i_ac, frequency, v_dc, e_total, i_rcd, mode, p_active, p_apparent, p_reactive)values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", 
                                $inverterID, strtotime($json['data']['telemetries'][$i]['date']), $json['data']['telemetries'][$i]['temperature'], $e_day, $de_day, $json['data']['telemetries'][$i]['L1Data']['acVoltage'],  
                                $json['data']['telemetries'][$i]['L1Data']['acCurrent'], $json['data']['telemetries'][$i]['L1Data']['acFrequency'], $json['data']['telemetries'][$i]['dcVoltage'], $json['data']['telemetries'][$i]['totalEnergy'], '0.004', $mode,  
                                $json['data']['telemetries'][$i]['L1Data']['activePower'], $json['data']['telemetries'][$i]['L1Data']['apparentPower'], $json['data']['telemetries'][$i]['L1Data']['reactivePower']);
            } else {
                $query = sprintf("INSERT INTO telemetry_inverter_3phase (inv_id, timestamp, temperature, e_day, de_day, v_ac1, v_ac2, v_ac3, i_ac1, i_ac2, i_ac3, frequency1, frequency2, frequency3, v_dc, e_total, i_rcd, mode, v_1to2, v_2to3, v_3to1, p_active1, p_active2, p_active3, p_apparent1, p_apparent2, p_apparent3, p_reactive1, p_reactive2, p_reactive3 )values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", 
                                $inverterID, strtotime($json['data']['telemetries'][$i]['date']),$json['data']['telemetries'][$i]['temperature'], $e_day, $de_day, $json['data']['telemetries'][$i]['L1Data']['acVoltage'],  
                                $json['data']['telemetries'][$i]['L2Data']['acVoltage'], $json['data']['telemetries'][$i]['L3Data']['acVoltage'], $json['data']['telemetries'][$i]['L1Data']['acCurrent'], $json['data']['telemetries'][$i]['L2Data']['acCurrent'], $json['data']['telemetries'][$i]['L3Data']['acCurrent'], $json['data']['telemetries'][$i]['L1Data']['acFrequency'], $json['data']['telemetries'][$i]['L2Data']['acFrequency'], $json['data']['telemetries'][$i]['L3Data']['acFrequency'], $json['data']['telemetries'][$i]['dcVoltage'], $json['data']['telemetries'][$i]['totalEnergy'], '0.004', $mode, $json['data']['telemetries'][$i]['vL1To2'], $json['data']['telemetries'][$i]['vL2To3'], $json['data']['telemetries'][$i]['vL3To1'],
                                $json['data']['telemetries'][$i]['L1Data']['activePower'], $json['data']['telemetries'][$i]['L2Data']['activePower'], $json['data']['telemetries'][$i]['L3Data']['activePower'], $json['data']['telemetries'][$i]['L1Data']['apparentPower'], $json['data']['telemetries'][$i]['L2Data']['apparentPower'], $json['data']['telemetries'][$i]['L3Data']['apparentPower'], $json['data']['telemetries'][$i]['L1Data']['reactivePower'], $json['data']['telemetries'][$i]['L2Data']['reactivePower'], $json['data']['telemetries'][$i]['L3Data']['reactivePower']);
            }
            $result = $mysqli->query($query);   
        }
        $i +=1;
    }
    $date += 86400;
}

flush_buffers('... End<br />');

$thread_id = $mysqli->thread_id;
$mysqli->kill($thread_id);
$mysqli->close();
?>



Het moet in dezelfde directory waarin ook config.php staat gezet worden.
Het kan als volgt worden aangeroepen indien het programma import_inverter_data.php wordt genoemd:


code:
1
..../import_inverter_data.php?date1=2019-08-21&date2=2019-08-23



De bovenstaande aanroep geeft de inverter data voor 21-8-2019 t/m 23-8-2019

Om timeout fouten te voorkomen is het aan te bevelen om niet meer dan 7 dagen tegelijkertijd op te halen.

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
@andrerij bovenstaande is getest en werkt als een trein.

Heb zelfs drie weken achter elkaar geprobeerd en dit werkt ook perfect. Maar het zou inderdaad zo kunnen zijn dat het een time-out gaat geven. Wie niet waagt wie niet wint 😉👍🏻

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • Rufan
  • Registratie: juni 2019
  • Laatst online: 01-09 09:41
jvdzande schreef op woensdag 21 augustus 2019 @ 09:49:
[...]

Er zijn een aantal opties:
Je kunt de data zelf ophalen en in de P1_Meter tabel zetten nadat die is aangemaakt in de SolarEdge Database. De details voor deze tabel staan in de top van het live-server-data-electra-p1_meter_table.php script en zal zelf een process moeten maken deze tabel te vullen.
.. of je haalt de gegevens op vanuit een Domotica systems als Domoticz indien je die al in gebruik hebt.
Op dit moment zijn er standaard scripts aanwezig voor het ophalen uit Domoticz en DSMR.

Het is dus belangrijk dat de data ergens bewaard is/wordt zodat de zonnepanelen.php website die gegevens kan ophalen.

Laat maar weten als je verder nog vragen hebt of hulp nodig hebt.

Jos
Heren,

Ik gebruik de software van ztaz P1 monitor op een Raspberry. https://www.ztatz.nl/category/slimme-meter/
Deze stuurt iedere 10sec een JSON UDP broadcast op poort 40721.

Dit moet ik dan gaan afvangen en opslaan in de database.

Heeft er iemand toevallig al een script hiervoor geschreven?

Bedankt alvast.

  • René Janssen
  • Registratie: juli 2019
  • Laatst online: 02-11 19:01
@Rufan
Ik gebruik hiervoor een simpel php scriptje dat de meter inleest en opslaat in een database. Grts René

  • jvdzande
  • Registratie: november 2015
  • Laatst online: 17-11 16:47
Rufan schreef op zaterdag 24 augustus 2019 @ 13:49:
[...]
Dit moet ik dan gaan afvangen en opslaan in de database.
Ik kan niet echt veel info vinden over deze software, maar er wordt toch gesproken over een database en API's, dus is het niet zo dat de data al in een database wordt opgeslagen die je dan kunt ophalen met een API call?
Als dat zo is kunnen we een apart script maken, zoals we ook voor DSMR en Domoticz hebben gedaan, die de benodigde informatie ophaalt uit die al beschikbare database.

Ik heb het gevonden en er wordt een sqlite database gebruikt en er is een beperkte API beschikbaar volgens deze pagina: https://www.ztatz.nl/p1-monitor/ , dus kan je een script maken die deze gegevens opvraagt en ook met een bepaalde interval in de P1_Meter database wegschrijft als beschreven in het script.

Jos

jvdzande wijzigde deze reactie 24-08-2019 18:12 (44%)


  • Jerrythafast
  • Registratie: september 2012
  • Laatst online: 18-11 21:29
@Rufan ik heb eventueel ook nog een slimme meter uitlees script, het mijne is geschreven in Python en schrijft naar een mysql database. Gegevens worden per 5 minuten permanent opgeslagen en van de laatste 3 dagen wordt de data per seconde in RAM (memory tabel) bewaard zodat de meest recente informatie in realtime te plotten is.

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


  • Rufan
  • Registratie: juni 2019
  • Laatst online: 01-09 09:41
Mijn omvormer en se-logger zitten niet in de meterkast bij de energie meter maar 30m verderop in de schuur.

Is het een idee om "live-server-data-electra-p1_meter_table.php". aan te passen om die JSON te kunnen inlezen?

Rufan wijzigde deze reactie 25-08-2019 08:42 (31%)


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
Rufan schreef op zondag 25 augustus 2019 @ 08:34:
Mijn omvormer en se-logger zitten niet in de meterkast bij de energie meter maar 30m verderop in de schuur.

Is het een idee om "live-server-data-electra-p1_meter_table.php". aan te passen om die JSON te kunnen inlezen?
Indien je de api codes doorgeeft zal ik de live-server-data-electra-p1_meter_table.php aanpassen.
[Een voorbeeld van de api aanroep = http://..../api/v1/smartmeter?limit=10&sort=asc&json=object&starttime=2019-07-23 10:00:00”]
Naast "starttime=2019-07-23 10:00:00" moet in ieder geval ook het commando voor de eindtijd hebben om het om te kunnen zetten.
Je moet het daarna zelf testen.

  • Rufan
  • Registratie: juni 2019
  • Laatst online: 01-09 09:41
@andrerij

Dit zou super zijn, ik zal het zeker testen. Als het goed naar behoren werkt is het mooi als andere leden dit ook kunnen gebruiken mits nodig.

Link is: http://............/api/v1/smartmeter

Hierbij de API description.


{
"api_description": "The standardised and verified data that the smart meter can deliver. The number of entries returned is optional. The data is added with a frequency of 10 seconds data is ordered on timestamp.",
"api_options": "limit {default all, >0 } number of entries returned, sort (on timestamp) {default desc, asc} sort on timestamp, json {default array, object} json output options see https://www.json.org/, round (default off, on} round to the nearest integer, no fractions in the output, starttime (default now, YYYY-MM-DD HH:MM:SS } from which moment in time data should retrieved",
"api_status": "test",
"api_usage": "<ip>/api/v1/smartmeter/?limit=10&sort=asc&json=object&round=on&starttime=2018-01-03 12:03:55, <ip>/api/v1/smartmeter, <ip>/api/v1/smartmeter/help",
"api_version": 1,
"fields": [
{
"description": "Time in format yyyy-mm-dd hh:mm:ss",
"name": "TIMESTAMP_lOCAL",
"type": "string"
},
{
"description": "UTC timestamp",
"name": "TIMESTAMP_UTC",
"type": "integer"
},
{
"description": "Record is processed into the database. 1 is done, 0 is to do.",
"name": "RECORD_IS_PROCESSED",
"type": "integer"
},
{
"description": "Consumption of KWH during low (dal) period. Meter code 181.",
"name": "CONSUMPTION_KWH_LOW",
"type": "number or integer depending on the format specifier used."
},
{
"description": "Consumption of KWH during high (piek) period. Meter code 182.",
"name": "CONSUMPTION_KWH_HIGH",
"type": "number or integer depending on the format specifier used."
},
{
"description": "Production of KWH during low (dal) period. Meter code 281.",
"name": "PRODUCTION_KWH_LOW",
"type": "number or integer depending on the format specifier used."
},
{
"description": "Production of KWH during high (piek) period. Meter code 282.",
"name": "PRODUCTION_KWH_HIGH",
"type": "number or integer depending on the format specifier used."
},
{
"description": "High or low period for production of consumption of kWh. Low = D, High = P",
"name": "TARIFCODE",
"type": "string"
},
{
"description": "The consumption in Watt at this moment.",
"name": "CONSUMPTION_W",
"type": "number or integer depending on the format specifier used."
},
{
"description": "The production in Watt at this moment.",
"name": "PRODUCTION_W",
"type": "number or integer depending on the format specifier used."
},
{
"description": "Consumption of gas in M3.",
"name": "CONSUMPTION_GAS_M3",
"type": "number or integer depending on the format specifier used."
}
]
}

  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
Rufan schreef op zondag 25 augustus 2019 @ 20:38:
@andrerij

Dit zou super zijn, ik zal het zeker testen. Als het goed naar behoren werkt is het mooi als andere leden dit ook kunnen gebruiken mits nodig.

Link is: http://............/api/v1/smartmeter
Ik zal het oppakken.

  • Wiley99
  • Registratie: juni 2014
  • Laatst online: 16:58
Pommi schreef op zaterdag 4 mei 2019 @ 14:43:
[...]


Ik ben hier toevallig vandaag mee aan de slag gegaan. Het restultaat staat hier: https://gitlab.com/snippets/1853864 Elke minuut wordt de status uitgelezen en weggeschreven in InfluxDB. :)
Hey Pommi,

ik heb je scriptje draaien. Wat is het voordeel van venv3 en hoe draai ik dat zonder ingelogd te zijn?
Een ander script voor Domoticz draai ik

code:
1
2
3
#! /bin/bash
nohup python3 SE2Dom.py & 
disown %1


en jouw script doet het ook zo. Maar het lijkt dan sneller vast te lopen :?

Update: ook in env loopt hij na een tijdje vast met:

code:
1
2
3
4
5
6
Traceback (most recent call last):
  File "./solaredge_to_influxdb.py", line 57, in <module>
    se_measurements = construct_measurements(se_status_data)
  File "./solaredge_to_influxdb.py", line 35, in construct_measurements
    "energy_total": data["energy"]["total"],
KeyError: 'energy'




P.S. nog niemand van wie ik hetzelfde script maar dan voor de Youless kan 'jatten'? _/-\o_

Wiley99 wijzigde deze reactie 27-08-2019 15:35 (27%)

A polar bear is a rectangular bear after a coordinate transform


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
Er is een P1-monitor interface voor zonnepanelen.php beschikbaar.
Deze is op GitHub geplaatst.

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
@andrerij zou het mogelijk zijn om een soort script te maken die aangeeft op welke dagen er geen optimizer data beschikbaar is?

Ik heb nu alle inverterdata geimporteerd met jou script, dus ik zie nu niet meer welke dagen er niet bekend waren. Misschien had ik dat beter eerst op kunnen schrijven.

Dus een soort script waarin je een de unix timestamp ingeeft vanaf waar je wilt zoeken tot de unix timestamp die je in geeft.

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op woensdag 28 augustus 2019 @ 20:07:
@andrerij zou het mogelijk zijn om een soort script te maken die aangeeft op welke dagen er geen optimizer data beschikbaar is?

Ik heb nu alle inverterdata geimporteerd met jou script, dus ik zie nu niet meer welke dagen er niet bekend waren. Misschien had ik dat beter eerst op kunnen schrijven.

Dus een soort script waarin je een de unix timestamp ingeeft vanaf waar je wilt zoeken tot de unix timestamp die je in geeft.
Hierbij een testscript.

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
<?php
$date1 = strtotime(sprintf("%s 00:00:00",$_GET["date1"]));    // Unix timestamps in seconds begin dag
$date2 = strtotime(sprintf("%s 00:00:00",$_GET["date2"]));  // Unix timestamps in seconds eind dag

if ($date1 > $date2 ) {$tel = $date1; $date1 = $date2; $date2 = $tel;}

include('config.php');

$mysqli = new mysqli($host, $user, $passwd, $db, $port);
$table = $inverter == 1 ? "telemetry_inverter" : "telemetry_inverter_3phase";

$date = $date1;

function flush_buffers($echo){
    echo $echo;
    ob_end_flush(); 
    ob_flush(); 
    flush(); 
    ob_start(); 
} 

flush_buffers("Begin..........<br>");

while($date <= $date2){
    $query = sprintf("SELECT e_total FROM %s WHERE timestamp > '%s' and timestamp < '%s' LIMIT 1", $table, $date, $date+68400);
    $result = $mysqli->query($query);
    flush_buffers(date("Y-m-d",$date). "<br>");
    if (!mysqli_fetch_assoc($result)) { echo "missing: ". date("Y-m-d",$date) . "<br>";}
    $date += 86400;
}

flush_buffers("Eind..........<br>");

$thread_id = $mysqli->thread_id;
$mysqli->kill($thread_id);
$mysqli->close();
?>


Het kan worden geactiveerd, indien het script test_tel.php wordt genoemd, met:

code:
1
http://<ipaders>/test_tel.php?date1=2015-12-10&date2=2017-01-01


Het script moet in dezelfde directory staan waarin ook config.php staat.

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
@andrerij Even gauw geprobeerd:


code:
1
2
3
4
5
6
7
Begin..........
2019-07-30
2019-07-31
2019-08-01
2019-08-02
2019-08-03
Eind..........



Deze dagen bevatten geen optimizer data, wel inverter data.

MaikelK. wijzigde deze reactie 28-08-2019 23:38 (3%)

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op woensdag 28 augustus 2019 @ 23:38:
@andrerij Even gauw geprobeerd:


code:
1
2
3
4
5
6
7
Begin..........
2019-07-30
2019-07-31
2019-08-01
2019-08-02
2019-08-03
Eind..........



Deze dagen bevatten geen optimizer data, wel inverter data.
Hierbij een versie die beide data test.

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
<?php
$date1 = strtotime(sprintf("%s 00:00:00",$_GET["date1"]));    // Unix timestamps in seconds begin dag
$date2 = strtotime(sprintf("%s 00:00:00",$_GET["date2"]));  // Unix timestamps in seconds eind dag

if ($date1 > $date2 ) {$tel = $date1; $date1 = $date2; $date2 = $tel;}

include('config.php');

$mysqli = new mysqli($host, $user, $passwd, $db, $port);
$table = $inverter == 1 ? "telemetry_inverter" : "telemetry_inverter_3phase";

$date = $date1;

function flush_buffers($echo){
    echo $echo;
    ob_end_flush(); 
    ob_flush(); 
    flush(); 
    ob_start(); 
} 

flush_buffers("Begin..........<br>");

while($date <= $date2){
    flush_buffers(date("Y-m-d",$date). "<br>");
    $query = sprintf("SELECT e_total FROM %s WHERE timestamp > '%s' and timestamp < '%s' LIMIT 1", $table, $date, $date+68400);
    $result = $mysqli->query($query);
    if (!mysqli_fetch_assoc($result)) { echo "missing inverter data: ". date("Y-m-d",$date) . "<br>";}
    $query = sprintf("SELECT e_day FROM telemetry_optimizers WHERE timestamp > '%s' and timestamp < '%s' LIMIT 1", $date, $date+68400);
    $result = $mysqli->query($query);
    if (!mysqli_fetch_assoc($result)) { echo "missing optimizer data: ". date("Y-m-d",$date) . "<br>";}
    $date += 86400;
}

flush_buffers("Eind..........<br>");

$thread_id = $mysqli->thread_id;
$mysqli->kill($thread_id);
$mysqli->close();


  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
@andrerij
2019-03-21
missing inverter data: 2019-03-21
missing optimizer data: 2019-03-21
2019-03-22
[/code]

Het enige wat je ziet is dat hij de datum eerst weer geeft en daarna missing optimizer/inverter data met nog een keer die datum. Dat ziet wat rommelig.
En misschien alleen de datums weer geven waar optimizer/inverter data van mist?
En als er niks mist een boodschap dat er nergens data mist.

Heb deze datum even gecontroleerd, maar daarop heb ik wel data? De 22ste mis ik wel data, zit daar misschien nog een foutje in?

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op donderdag 29 augustus 2019 @ 08:27:
@andrerij
2019-03-21
missing inverter data: 2019-03-21
missing optimizer data: 2019-03-21
2019-03-22
[/code]

Het enige wat je ziet is dat hij de datum eerst weer geeft en daarna missing optimizer/inverter data met nog een keer die datum. Dat ziet wat rommelig.
En misschien alleen de datums weer geven waar optimizer/inverter data van mist?
En als er niks mist een boodschap dat er nergens data mist.

Heb deze datum even gecontroleerd, maar daarop heb ik wel data? De 22ste mis ik wel data, zit daar misschien nog een foutje in?
Het script vraagt van een bepaalde datum de gegevens op. Indien er niets aanwezig is dan geeft hij die datum aan.
Het is voor eenmalig gebruik, dus de lay-out mag rommelig zijn.

  • Flipje1955
  • Registratie: augustus 2011
  • Laatst online: 28-09 10:14
hallo allemaal....ergens in deze stream raak ik spoor kwijt of wat hier besproken wordt aansluit bij wat ik zoek, te weten: kan ik uit een bestaande SolarEdge installatie (17 Qcells-325pW met S-E Power Optimizers) méér data halen dan ik kan zien via de generieke S-E Portal. Zoals bijv. de temperatuur van een P-O.

met dank !

  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
Flipje1955 schreef op donderdag 29 augustus 2019 @ 14:39:
hallo allemaal....ergens in deze stream raak ik spoor kwijt of wat hier besproken wordt aansluit bij wat ik zoek, te weten: kan ik uit een bestaande SolarEdge installatie (17 Qcells-325pW met S-E Power Optimizers) méér data halen dan ik kan zien via de generieke S-E Portal. Zoals bijv. de temperatuur van een P-O.

met dank !
Je kunt onderaan in deze post zien welke data er getoond/opgeslagen wordt. Door op het plaatje te klikken wordt het leesbaar.

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
andrerij schreef op donderdag 29 augustus 2019 @ 12:48:
[...]

Het script vraagt van een bepaalde datum de gegevens op. Indien er niets aanwezig is dan geeft hij die datum aan.
Het is voor eenmalig gebruik, dus de lay-out mag rommelig zijn.
Is ook weer zo, daar heb je gelijk in. Alleen zag ik dat hij aan gaf dat op:

missing inverter data: 2019-03-21
missing optimizer data: 2019-03-21

Maar dit moet de 22ste zijn zag ik in de website.
Heb je enig idee hoe dat kan?

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
MaikelK. schreef op donderdag 29 augustus 2019 @ 20:25:
[...]


Is ook weer zo, daar heb je gelijk in. Alleen zag ik dat hij aan gaf dat op:

missing inverter data: 2019-03-21
missing optimizer data: 2019-03-21

Maar dit moet de 22ste zijn zag ik in de website.
Heb je enig idee hoe dat kan?
Er moet toch iets fout gaan in je database. Bij mij wordt het wel goed aangegeven.
Ik heb het script aangepast zodat het aantal dataregels wordt aangegeven.

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
<?php
$date1 = strtotime(sprintf("%s 00:00:00",$_GET["date1"]));    // Unix timestamps in seconds begin dag
$date2 = strtotime(sprintf("%s 00:00:00",$_GET["date2"]));  // Unix timestamps in seconds eind dag

if ($date1 > $date2 ) {$tel = $date1; $date1 = $date2; $date2 = $tel;}

include('config.php');

$mysqli = new mysqli($host, $user, $passwd, $db, $port);
$table = $inverter == 1 ? "telemetry_inverter" : "telemetry_inverter_3phase";

$date = $date1;

function flush_buffers($echo){
    echo $echo;
    ob_end_flush(); 
    ob_flush(); 
    flush(); 
    ob_start(); 
} 

flush_buffers("Begin..........<br>");

while($date <= $date2){
    $query = sprintf("SELECT * FROM %s WHERE timestamp > '%s' and timestamp < '%s'", $table, $date, $date+68400);
    $result = $mysqli->query($query);
    ob_start();
    var_dump($result, true);
    $str = ob_get_clean();
    $i = str_replace(")","",substr($str,137,3));
    $query = sprintf("SELECT * FROM telemetry_optimizers WHERE timestamp > '%s' and timestamp < '%s'", $date, $date+68400);
    $result1 = $mysqli->query($query);
    ob_start();
    var_dump($result1, true);
    $str = ob_get_clean();
    $j = str_replace(")","",substr($str,136,4));
    if ($j == 0) { flush_buffers( "missing optimizer data: ". date("Y-m-d",$date) . "<br>");}
    if ($i == 0) { flush_buffers( "missing inverter data: ". date("Y-m-d",$date) . "<br>");}
    if ($i > 0 or $j > 0) { flush_buffers( date("Y-m-d",$date) ." inverter data: ". $i . " optimizer: ".$j. "<br>");}
    $date += 86400;
}

flush_buffers("Eind..........<br>");

$thread_id = $mysqli->thread_id;
$mysqli->kill($thread_id);
$mysqli->close();
?>



Dit is de laatste keer dat ik het aanpas, anders ben ik langer bezig dan dat jij via de website door de data scrolt.

  • MaikelK.
  • Registratie: maart 2013
  • Laatst online: 14-11 20:18
MaikelK. schreef op vrijdag 2 augustus 2019 @ 23:16:
[...]


Oke, dan ben ik toch erg benieuwd naar je scripts, dit zou ik ook graag willen doen!
@rjhilbrink Ben je inmiddels in de gelegenheid om je scripts te delen?

SolarEdge SE3500HD met 12x LG320N1K-A5 waarvan 6x ZO en 6x NW


  • andrerij
  • Registratie: april 2017
  • Laatst online: 16-11 17:03
Bij het maken van de P1-monitor interface bleek dat voor de elektra modules sql_mode=ONLY_FULL_GROUP_BY, indien deze aanstaat, uitgezet moet 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]

Het is ook aangepast in deze post .

  • DanTm
  • Registratie: juni 2002
  • Niet online
als iemand nog de SetApp data uit wil lezen in C#, had het in 5 minuten werkende.

Installeer protobuf-net.

Maak wat data classes

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ProtoContract]
  public class SolaredgeResponse
  {
    [ProtoMember(3)]
    public float Power { get; set; }
    [ProtoMember(15)]
    public EnergyStatistics EnergyStatistics { get; set; }
  }

  [ProtoContract]
  public class EnergyStatistics
  {
    [ProtoMember(4)]
    public float Energy { get; set; }
  }


de juiste protobuf id's zijn wel te vinden op: https://github.com/drobtr...essage_types/status.proto

data ophalen kan dan als volgt:

code:
1
2
3
4
5
6
7
8
      using (var client = new HttpClient())
      {
        var solaredgeData = await client.GetByteArrayAsync("http://1.2.3.4/web/v1/status");
        using (var ms = new MemoryStream(solaredgeData))
        {
          var solaredge = Serializer.Deserialize<SolaredgeResponse>(ms);
        }
      }

pvoutput 3600wp


  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
Als jullie via de browser naar het ip gaan van d solaredge inverter met set-app (display-loos) krijgen jullie dan een bepaalde pagina?

Ik krijg een internal server error... ): (SE4000H, Solaredge HD inverter met set-app, 08-2019) Geeft wel info door via officiele webportal & bijbehorende API

Ik heb hem al eens gereboot door de schakelaar in meterkast om te zetten, maar zelfde resultaat. Vermoedelijk hierdoor krijg ik ook de local-api op basis van protocol buffers niet werkende..? (https://www.home-assistant.io/components/solaredge_local/)

Iemand ideeën?

  • Luc S
  • Registratie: april 2015
  • Laatst online: 15:40
@lolle1212 Als ik dat doe kom ik inderdaad op een pagina uit. Beetje zoals dit (kon zo snel geen voorbeeld vinden maar zo ziet het er uit op mobile):

https://camo.githubuserco...d2f4d726742786b412e6a7067

6930Wp Oost-West PV_Output


  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
oei, dat wordt toch even een solaredge install acount maken en hopen dat ik iets van firmware kan updaten ofzo.. en anders maar SolarEdge bellen o.i.d. Denk niet dat mijn installateur (GreenGuys via Solar-bouwmarkt) begrijpen waar ik het over heb namelijk..

  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
Inmiddels met installer account met de SetApp een connectie gemaakt, hij ging gelijk een 'verplichte firmware upgrade' starten. Helaas veranderde dit niks...

Als ik naar z'n ip ga krijg ik nog altijd internal server error..

cpu-versie is 4.6.24
dsp1 is 1.0.756
en dsp 2 is 2.0.704

Iemand een idee? specifieke firmware versie waarbij die local api werkt?

Edit: Factory reset hielp ook niet en support van SolarEdge ziet het in ieder geval niet als een probleem. :/

(Uberhaupt wel raar dat bij de schermloze inverters bij wifi wijziging formeel een installateur moet langskomen)

lolle1212 wijzigde deze reactie 13-09-2019 09:41 (23%)


  • Luc S
  • Registratie: april 2015
  • Laatst online: 15:40
@lolle1212 Ik heb niet alles gezien van wat de installateur bij mij heeft gedaan maar wat ik van hem heb begrepen en lees in de manual kun je met de setapp en de schakelaar onderaan de omvormer in positie links, een nieuwe wifi verbinding maken/instellen. Ik ben er verder vanaf gebleven want de mijne zit met kabel verbonden.

Zou wel vreemd zijn als dit alleen kan met een installer account.

Misschien voor de driedubbel check even in je router kijken of het IP adres wat je gebruikt echt klopt?

Wellicht heb je hier nog iets aan, kwam ik tegen toen ik de officiële manual aan het zoeken was en niet gevonden lijk te krijgen (!?):
https://solarnrg.nl/downl...ge-hd-wave-no-display.pdf

6930Wp Oost-West PV_Output


  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
Luc S schreef op vrijdag 13 september 2019 @ 11:58:
@lolle1212 Ik heb niet alles gezien van wat de installateur bij mij heeft gedaan maar wat ik van hem heb begrepen en lees in de manual kun je met de setapp en de schakelaar onderaan de omvormer in positie links, een nieuwe wifi verbinding maken/instellen. Ik ben er verder vanaf gebleven want de mijne zit met kabel verbonden.

Zou wel vreemd zijn als dit alleen kan met een installer account.

Misschien voor de driedubbel check even in je router kijken of het IP adres wat je gebruikt echt klopt?

Wellicht heb je hier nog iets aan, kwam ik tegen toen ik de officiële manual aan het zoeken was en niet gevonden lijk te krijgen (!?):
https://solarnrg.nl/downl...ge-hd-wave-no-display.pdf
Voor de SetApp heb je intallateurs account nodig, je kunt wel 'read-only' gebruiken zonder inlog, maar zoals de naam al doet vermoeden kun je dan niks aanpassen, ook niet wifi.

Ik heb overigens wel een install acount en kan er dus bij.. maar voor de 'reguliere' klant zonder install account zie ik niet hoe het zou moeten. (Anders dan naar het ip navigeren, wat bij mij dus niet werkt.)

Je kunt dus wel zoals in die handleiding die je linkt naar het ip navigeren van de inverter als deze een hotspot aan heeft staan.. (Wist ik niet, dankje. Dat werkt bij mij wel) Maar dit is een onofficiele methode die de support niet erkend, want dit hoort via de SetApp te gebeuren... (die volgens mij gewoon dat ip adres laad en als enige extra de firmware update)


Bij mij werkt dat op ip dus alleen op zijn eigen hotspot, misschien kan ik iets knutselen om mijn wifi en de hotspot van solaredge te bridgen zodat ik de hotspot kan benaderen vanaf mijn home assistant welke in mijn normale netwerk hangt.. (Zodat ik Solaredge local kan gebruiken)

Mijn inverter is via wifi aangesloten, ik geef het een hele lage kans, maar misschien dat het bedraad wel werkt.. (ga ik binnenkort even proberen met een wifi>Lan kastje)

Wat betreft ip, ja ik weet wel zeker dat ik de juiste gebruik, gecheckt op MAC adress in router + als ik de inverter uitschakel is het 'pagina niet gevonden' met inverter aan is het 500 internal server error'.

Zowel Rob van Greenguys als solaredge support hebben geen weet van een pagina op het ip adres van de inverters.. en hebben het uitsluitend over SetApp (Helaas)

  • Rob Z
  • Registratie: mei 2004
  • Laatst online: 11:44
lolle1212 schreef op donderdag 12 september 2019 @ 12:52:
Als jullie via de browser naar het ip gaan van d solaredge inverter met set-app (display-loos) krijgen jullie dan een bepaalde pagina?
...
Ja, via bedraad netwerk
(RS485 krijg ik nog niet aan de praat)

  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
Rob Z schreef op vrijdag 13 september 2019 @ 13:40:
[...]

Ja, via bedraad netwerk
(RS485 krijg ik nog niet aan de praat)
Hmm hier net even een oude Sitecom WL330 ingesteld zodat mijn wifi op zolder wordt omgezet in ethernet connectie voor de solaredge. (En via SetApp de server van wlan naar ethernet gezet) Zelfde gedrag, zijn (nieuwe) ip adres in browser resulteert in "internal server error".

SolarEdge monitoring site werkt wel gewoon, ook via de ethernet>wifi constructie. SetApp geeft ook netjes S-ok..


Toch kijken of ik de hotspot van solaredge kan verbinden met mijn reguliere netwerk zodat ik via die route local API kan gebruiken. Vreemd dat dit op sommige omvormers of firmware versies anders werkt.

  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Probeer het eens met een / aan het einde van de URL (dus http://<inverter-ip>/).

"There is no Engineering like Reverse Engineering"


  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
ZwarteIJsvogel schreef op vrijdag 13 september 2019 @ 17:38:
Probeer het eens met een / aan het einde van de URL (dus http://<inverter-ip>/).
Dat maakt helaas geen verschil, net als /#/comissioning zoals de SetApp laadt op de hotspot.

Ook nog even gepoogd met bedraad via powerline adapters.. maar zelfde resultaat. (Internal server error


Ik vermoed dat in de recentere firmware versies een constructie zit die zorgt dat het alleen werkt via de 'on demand hotspot voor SetApp'.

De vraag is hoe dit geregeld is, het zou plaats van op interface niveau (meest logische) ook nog kunnen op IP-ranges.(?)

Ik zou in ieder geval iedereen ten sterkste afraden de firmware te updaten, zeer grote kans dat dan je locale api kunt vergeten zoals ik.


De hotspot integreren is nog niet zo makkelijk blijkt, want als je even niks aan de inverter vraagt verdwijnt de hotspot en er kan maar 1 apparaat mee verbonden zijn.

Enige andere wat ik kan bedenken is een firmware downgrade (Via usb kun je bepaalde firmwares laden)
Lastige daarvan is dat ik nergens oudere firmware versies voor de SetApp inverters kan vinden.

lolle1212 wijzigde deze reactie 14-09-2019 13:50 (43%)


  • scheric
  • Registratie: juni 2018
  • Laatst online: 17-11 12:50
lolle1212 schreef op zaterdag 14 september 2019 @ 09:54:

Ik vermoed dat in de recentere firmware versies een constructie zit die zorgt dat het alleen werkt via de 'on demand hotspot voor SetApp'.
Ik verwacht ook dat het inderdaad een software versie probleem is.
Ik heb een andere versie. Bij mij werkt het nog.
cpu-versie is 4.5.41
dsp1 is 1.0.751
en dsp 2 is 2.0.608
lolle1212 schreef op zaterdag 14 september 2019 @ 09:54:
Enige andere wat ik kan bedenken is een firmware downgrade (Via usb kun je bepaalde firmwares laden)
Lastige daarvan is dat ik nergens oudere firmware versies voor de SetApp inverters kan vinden.
Dat zou inderdaad een oplossing kunnen zijn denk ik. De software is denk ik moeilijk te verkrijgen maar het kan wel: https://github.com/jbuehl...24#issuecomment-524640990

  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
lolle1212 schreef op zaterdag 14 september 2019 @ 09:54:
Dat maakt helaas geen verschil, net als /#/comissioning zoals de SetApp laadt op de hotspot.
Cruciale vraag: werkt solaredge-local wel nog? Zo nee, dan blijft voor lokaal monitoren alleen modbus over. Dat zou heel vervelend zijn.

Edit: mijn SolarEdge wordt binnenkort geleverd en zonder de lokale interface vallen mijn plannen in duigen.
Ik vermoed dat in de recentere firmware versies een constructie zit die zorgt dat het alleen werkt via de 'on demand hotspot voor SetApp'.
De vraag is hoe dit geregeld is, het zou plaats van op interface niveau (meest logische) ook nog kunnen op IP-ranges.(?)
Dat zou ik kunnen onderzoeken als ik het firmware image had. Heb je de upgrade gedaan met een Android telefoon? Dan is dat image (vermoedelijk genaamd Version_4_6_24.spff) er wellicht nog op te vinden via adb. iOS is te zeer dichtgetimmerd.
Enige andere wat ik kan bedenken is een firmware downgrade (Via usb kun je bepaalde firmwares laden) Lastige daarvan is dat ik nergens oudere firmware versies voor de SetApp inverters kan vinden.
In SetApp v1.x zat de firmware in de app (tegenwoordige downloadt SetApp de firmware). De laatste versie met de firmware aan boord was SetApp v1.4.1 met daarin 4.2.46 en 4.4.67. Je kunt oude versies voor Android downloaden via Apkpure.com.

ZwarteIJsvogel wijzigde deze reactie 15-09-2019 07:40 (4%)

"There is no Engineering like Reverse Engineering"


  • ocaj
  • Registratie: juli 2011
  • Niet online
Hmmm, jammer dat hier geen download-knop bij staat:
https://www.solaredge.com/setapp-inverters-firmware

Voor de omvormers met display kun je wel gewoon de firmware downloaden...
https://www.solaredge.com/service/firmware

  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Ik heb 4.4.67 eens op de snijtafel gelegd. Als ik e.e.a. goed interpreteer zouden er 2 HTTP-servers in de SE moeten draaien:
  • Een server op poort 80 implementeert een REST API voor communicatie via protocol buffers die door SetApp wordt gebruikt (en dus ook door solaredge-local).
  • Een server op poort 8080 implementeert een simpele Web UI.
De server op poort 80 stuurt verder voor de root URL (/) een 2,6 MB obfuscated JavaScript file naar de browser met een Web SetApp. Deze functie past qua architectuur niet in een REST API. Ik kan mij voorstellen dat SolarEdge ze daarom in 4.6.24 heeft verwijderd en dat dat de oorzaak is van de Internal Server Error.

Vraag is of er in 4.6.24 een Web UI zit op poort 8080 (en wat je daar dan mee kunt). Over 3 weken zou ik het antwoord zelf kunnen geven.

Maar ongeacht wat er wel of niet in zo'n SolarEdge zit, het blijven ongedocumenteerde interfaces die zonder aankondiging kunnen wijzigen of zelfs verdwijnen.

"There is no Engineering like Reverse Engineering"


  • theblindman
  • Registratie: september 2009
  • Laatst online: 15:55
lolle1212 schreef op zaterdag 14 september 2019 @ 09:54:
[...]


Dat maakt helaas geen verschil, net als /#/comissioning zoals de SetApp laadt op de hotspot.

Ook nog even gepoogd met bedraad via powerline adapters.. maar zelfde resultaat. (Internal server error


Ik vermoed dat in de recentere firmware versies een constructie zit die zorgt dat het alleen werkt via de 'on demand hotspot voor SetApp'.

De vraag is hoe dit geregeld is, het zou plaats van op interface niveau (meest logische) ook nog kunnen op IP-ranges.(?)

Ik zou in ieder geval iedereen ten sterkste afraden de firmware te updaten, zeer grote kans dat dan je locale api kunt vergeten zoals ik.


De hotspot integreren is nog niet zo makkelijk blijkt, want als je even niks aan de inverter vraagt verdwijnt de hotspot en er kan maar 1 apparaat mee verbonden zijn.

Enige andere wat ik kan bedenken is een firmware downgrade (Via usb kun je bepaalde firmwares laden)
Lastige daarvan is dat ik nergens oudere firmware versies voor de SetApp inverters kan vinden.
Kun je http://<inverter>/web/v1/status nog wel opvragen?

  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
[quote]ZwarteIJsvogel schreef op zondag 15 september 2019 @ 06:05:
[...]

Cruciale vraag: werkt solaredge-local wel nog? Zo nee, dan blijft voor lokaal monitoren alleen modbus over. Dat zou heel vervelend zijn.

Edit: mijn SolarEdge wordt binnenkort geleverd en zonder de lokale interface vallen mijn plannen in duigen.


Nee solaredge-local werkt niet. (Dat is ook mijn hele 'probleem'.) Ik vermoed dat dit samenvalt met de internal server error pagina. Het zal liggen aan de firmware versie, dus misschien heb je geluk. Ik had in ieder geval pech..

  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
ZwarteIJsvogel schreef op zondag 15 september 2019 @ 10:59:
Ik heb 4.4.67 eens op de snijtafel gelegd. Als ik e.e.a. goed interpreteer zouden er 2 HTTP-servers in de SE moeten draaien:
  • Een server op poort 80 implementeert een REST API voor communicatie via protocol buffers die door SetApp wordt gebruikt (en dus ook door solaredge-local).
  • Een server op poort 8080 implementeert een simpele Web UI.
De server op poort 80 stuurt verder voor de root URL (/) een 2,6 MB obfuscated JavaScript file naar de browser met een Web SetApp. Deze functie past qua architectuur niet in een REST API. Ik kan mij voorstellen dat SolarEdge ze daarom in 4.6.24 heeft verwijderd en dat dat de oorzaak is van de Internal Server Error.

Vraag is of er in 4.6.24 een Web UI zit op poort 8080 (en wat je daar dan mee kunt). Over 3 weken zou ik het antwoord zelf kunnen geven.

Maar ongeacht wat er wel of niet in zo'n SolarEdge zit, het blijven ongedocumenteerde interfaces die zonder aankondiging kunnen wijzigen of zelfs verdwijnen.
Verbinding op poort 80 levert dezelfde internal server error, verbinden op 8080 geeft time out op laden pagina. (pagina niet gevonden)

  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
theblindman schreef op zondag 15 september 2019 @ 12:02:
[...]

Kun je http://<inverter>/web/v1/status nog wel opvragen?
Nee dit levert de befaamde Internal server error op...

  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
ZwarteIJsvogel schreef op zondag 15 september 2019 @ 10:59:
Ik heb 4.4.67 eens op de snijtafel gelegd. Als ik e.e.a. goed interpreteer zouden er 2 HTTP-servers in de SE moeten draaien:
  • Een server op poort 80 implementeert een REST API voor communicatie via protocol buffers die door SetApp wordt gebruikt (en dus ook door solaredge-local).
  • Een server op poort 8080 implementeert een simpele Web UI.
De server op poort 80 stuurt verder voor de root URL (/) een 2,6 MB obfuscated JavaScript file naar de browser met een Web SetApp. Deze functie past qua architectuur niet in een REST API. Ik kan mij voorstellen dat SolarEdge ze daarom in 4.6.24 heeft verwijderd en dat dat de oorzaak is van de Internal Server Error.

Vraag is of er in 4.6.24 een Web UI zit op poort 8080 (en wat je daar dan mee kunt). Over 3 weken zou ik het antwoord zelf kunnen geven.

Maar ongeacht wat er wel of niet in zo'n SolarEdge zit, het blijven ongedocumenteerde interfaces die zonder aankondiging kunnen wijzigen of zelfs verdwijnen.
Heb jij ergens die 4.4.67 firmware file? En is die geschikt voor de SE4000H? Dan zou ik is kunnen kijken of ik kan downgraden naar 4.4.67. (Liefst zo recent mogelijk werkende natuurlijk, maar ik zie online alleen maar hele oude 4.0.x firmware files

  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Zie de laatste paragraaf van mijn bericht van 06:05 vanochtend.

"There is no Engineering like Reverse Engineering"


  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
ZwarteIJsvogel schreef op zondag 15 september 2019 @ 15:53:
Zie de laatste paragraaf van mijn bericht van 06:05 vanochtend.
Check, ik zal binnenkort is kijken of ik adb aan de praat krijg met mn Oppo find x.


Heb volgens mij ook nog ergens een geroote android liggen, denk dat ik daar is op inlog in de setapp. (die begint dan namelijk direct de firmware te downloaden.. (heb je geen inverter voor nodig)


Misschien is het gekoppeld aan de app, dan zou ik bij wijze van met een oude app firmware versie 4.5 kunnen downloaden. (Geen idee of dit werkt, wel interessant.)

  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
@ZwarteIJsvogel Ik heb met 2.2.2 (ipv huidige 2.3.2) ingelogd op een oude telefoon.

https://www.dropbox.com/s...Ap2.2.2Firmwares.zip?dl=0

Zie hier de firmware files. (De app download voor alle solaredge inverters firmware)

Voor mijn omvormer (SE4000H uit NL) zie ik de volgende 3 .spff files

SE4000H-NL000BGN4.ECO-13835.SW-PN-00706
SE4000H-NL000BNN4.ECO-13835.SW-PN-00690
SE4000H-NL000BWN4.ECO-13835.SW-PN-00710


De vraag is natuurlijk of dit 3 verschillende firmware versies zijn, of dat ze bedoelt zijn voor verschillende varianten van de SE4000H.. (Verder lijken me het extreem kleine files voor firmware?)

ik heb PN-00690 gepoogd te laden met een USB stick, maar dat doet niks. (EDIT: ik zie wel dat er op de usb een lege spff folder is aangemaakt en dat er een in de root naast de geplaatste .spff een gelijkname .state is gemaakt. (0bytes, lege file)

EDIT2:

Met de firmware file van version4.4.67.spff is downgrade wel succesvol naar 4.67 en werkt vervolgens de local API!

Weet iemand wat de changelog is sinds 4.4.67? Mis ik iets belangrijks? Liefst ga ik natuurlijk naar 4.5.x waar local api ook nog werkte maar ik weet niet hoe. (mIJN dsp versies zijn niet gedowngrade, alleen CPU is nu 4.4.67, DSP1 is nog steeds 1.0.756 en dsp2 is nog steeds 2.0.704. WSA versie was 1.2.9 en wordt nu niet weergegeven.

lolle1212 wijzigde deze reactie 15-09-2019 21:46 (40%)
Reden: toevoeging over kleine files


  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Dank voor het goede werk! Die kleine bestandjes hebben voor zover ik weet iets te maken met het activeren van een omvormer. Ze zijn zoals je kunt zien modelspecifiek. De firmware files voor het besturingsbord waar de UI op draait (genaamd Portia), staan er inderdaad niet bij. De naam zou Version_X_Y_Z.spff moeten zijn en de grootte ca. 23 MB. Ik zie wel de andere bestanden (voor bv. DSP1 en DSP2). Vreemd. Ik zou overigens voorzichtig zijn met het posten van zo'n dropboxlink.

"There is no Engineering like Reverse Engineering"


  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
ZwarteIJsvogel schreef op maandag 16 september 2019 @ 06:55:
Dank voor het goede werk! Die kleine bestandjes hebben voor zover ik weet iets te maken met het activeren van een omvormer. Ze zijn zoals je kunt zien modelspecifiek. De firmware files voor het besturingsbord waar de UI op draait (genaamd Portia), staan er inderdaad niet bij. De naam zou Version_X_Y_Z.spff moeten zijn en de grootte ca. 23 MB. Ik zie wel de andere bestanden (voor bv. DSP1 en DSP2). Vreemd. Ik zou overigens voorzichtig zijn met het posten van zo'n dropboxlink.
Ik heb de firmeware file (+-25mb) gevonden: EDIT: Linkjes heb ik verwijderd, op verzoek (PM) kan ik wel linkjes leveren voor 4.16.24/.27 of 4.7.17. De linkjes zelf a.u.b. niet verder verspreiden.

Dit is dus de recente firmware waarin localAPI gesloopt is.

(Wat voor file share raad je dan aan? tweakers ondersteunt geen bijlage voor zover ik kan zien)

Maar het punt is dus dat de SetApp altijd de laatste versie download, want deze file is gedownload met 2.2.2 maar bevat dus de firmware zoals je die ook met 2.3.2 zou laden. (Oudere app ook geprobeerd maar die doet het niet meer, zegt dat de app te oud is. (2.2.2 is nog geeft melding dat binnen 14 dagen de app moet zijn geupdate dus wss binnenkort hetzelfde.)

Verder is dit de changelog van 4.5.41 (versie hierna is de huidige 4.6.24 met als verbetering (ability to connect the inverter's Wi-Fi station to SetApp and wireless router simultaneously.)

New Features & Enhancements 4.5.41

Improved inverter's Wi-Fi connection stability and reliability for both SetApp and connection to the monitoring platform (For Europe, Australia, Africa, and Asia):
Improved time to connect inverter to server (s_OK)
Improved compatibility to routers from various manufacturers
Ability to connect to iOS smartphone access point (hot spot)
Accepting all SSID and password format including special characters
New View Only SetApp mode that provides inspectors a fast and easy access to view all required inverter’s statuses and settings without requiring app credentials. No changes to the inverter configuration can be made in this mode.
Support systems with StorEdge interface and LG Chem high-voltage batteries (not including battery self-test feature); for Europe, Australia, and Africa.
Smart Energy products connection including devices prioritization
Improved support for latest RFG regulation for VDE 4105, VDE 4110 for Europe
The serial number of a SolarEdge meter (including RGM) is now displayed in the SetApp Status screen and can be easily accessed for the inspection process.
New Languages support:
Traditional Chinese
Korean
Added new country codes to inverter country codes list:
Hong Kong Electric (175)
Uruguay (176)
Italy A68 (177)

Lijkt dus niet heel schokkend wat je mist met 4.4.67 interessante is ook dat je wel de DSP1 & 2 versies behoudt van de recentste firmware. (En dus miss ook een deel van de changes..?) Alleen WSA versie kon je bij de oudere niet zien en wordt dus niet getoond. (Geen idee wat het is)

lolle1212 wijzigde deze reactie 21-09-2019 18:14 (46%)


  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
lolle1212 schreef op maandag 16 september 2019 @ 08:17:
Ik heb de firmeware file (+-25mb) gevonden.
Hebbes. Ik ga ermee aan de slag.
(Wat voor file share raad je dan aan? tweakers ondersteunt geen bijlage voor zover ik kan zien)
Het gaat niet om de gebruikte service, maar om het publiek posten van iets dat niet publiek te downloaden is. Een PM zou in dit geval hebben volstaan.
Maar het punt is dus dat de SetApp altijd de laatste versie download, want deze file is gedownload met 2.2.2 maar bevat dus de firmware zoals je die ook met 2.3.2 zou laden.
Inderdaad.

"There is no Engineering like Reverse Engineering"


  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Een snelle blik leert dat SolarEdge in 4.6.24 de toegang tot de HTTP-services heeft beperkt. Dit is niet verwonderlijk, en eerlijk gezegd ook wenselijk, aangezien er geen enkele authenticatie op die services zit (dat was nota bene één van mijn zorgpunten).

Voorlopige resulaten:
  • De Web UI op poort 8080 is alleen toegankelijk op IP-adres 172.16.0.1 (het IP-adres van de omvormer op het ingebouwde WiFi AP).
  • De REST-api en de Web SetApp Javascript UI op poort 80 zijn alleen toegankelijk vanaf 172.16.0/24 IP-adressen (daarom werkt SetApp wel via het ingebouwde WiFi AP).
  • Genoemde restricties gelden niet als de omvormer in debug mode draait. Voor debug mode is een speciaal SPFF-bestandje nodig dat maar 24 uur geldig is. Zo'n bestandje is niet zelf te maken aangezien er een digitale handtekening op zit. De debug mode zelf lijkt ook maar tijdelijk.
De enige route die ik nog zie om toch weer toegang te krijgen tot de HTTP-services is te proberen om de SolarEdge op je LAN via DHCP een 172.16.0/24 IP-adres te geven. Ik kan niet direct iets vinden wat dat verhindert. Het levert uiteraard wel een conflict op met het ingebouwde WiFi AP, maar wellicht werkt het als dat AP uit staat (wat vanzelf gebeurt na 5 minuten inactiviteit). Uiteraard is het, als het al werkt, geen frisse oplossing.

Het is goed om te weten dat een downgrade naar 4.4.67 straffeloos mogelijk is (of liever nog 4.5.41 als iemand daar de hand op weet te leggen).

Het moge duidelijk zijn dat al deze fratsen niet nodig zouden zijn als SolarEdge de optimizer data ook via modbus beschikbaar zou maken. Dan was er voor een goede lokale monitoring alles aan boord wat je nodig hebt.

Edit: Ik laat het hier even bij. Zodra mijn SolarEdge up and running is, ga ik eens kijken wat via modbus mogelijk is (het is een kleine kans, maar misschien zijn er aan dat front positieve ontwikkelingen).

ZwarteIJsvogel wijzigde deze reactie 16-09-2019 11:03 (5%)

"There is no Engineering like Reverse Engineering"


  • Mich
  • Registratie: december 2000
  • Laatst online: 18-11 09:44
ZwarteIJsvogel schreef op maandag 16 september 2019 @ 10:34:
[...]

Een snelle blik leert dat SolarEdge in 4.6.24 de toegang tot de HTTP-services heeft beperkt. Dit is niet verwonderlijk, en eerlijk gezegd ook wenselijk, aangezien er geen enkele authenticatie op die services zit (dat was nota bene één van mijn zorgpunten).

Voorlopige resulaten:
  • De Web UI op poort 8080 is alleen toegankelijk op IP-adres 172.16.0.1 (het IP-adres van de omvormer op het ingebouwde WiFi AP).
  • De REST-api en de Web SetApp Javascript UI op poort 80 zijn alleen toegankelijk vanaf 172.16.0/24 IP-adressen (daarom werkt SetApp wel via het ingebouwde WiFi AP).
  • Genoemde restricties gelden niet als de omvormer in debug mode draait. Voor debug mode is een speciaal SPFF-bestandje nodig dat maar 24 uur geldig is. Zo'n bestandje is niet zelf te maken aangezien er een digitale handtekening op zit. De debug mode zelf lijkt ook maar tijdelijk.
De enige route die ik nog zie om toch weer toegang te krijgen tot de HTTP-services is te proberen om de SolarEdge op je LAN via DHCP een 172.16.0/24 IP-adres te geven. Ik kan niet direct iets vinden wat dat verhindert. Het levert uiteraard wel een conflict op met het ingebouwde WiFi AP, maar wellicht werkt het als dat AP uit staat (wat vanzelf gebeurt na 5 minuten inactiviteit). Uiteraard is het, als het al werkt, geen frisse oplossing.

Het is goed om te weten dat een downgrade naar 4.4.67 straffeloos mogelijk is (of liever nog 4.5.41 als iemand daar de hand op weet te leggen).

Het moge duidelijk zijn dat al deze fratsen niet nodig zouden zijn als SolarEdge de optimizer data ook via modbus beschikbaar zou maken. Dan was er voor een goede lokale monitoring alles aan boord wat je nodig hebt.

Edit: Ik laat het hier even bij. Zodra mijn SolarEdge up and running is, ga ik eens kijken wat via modbus mogelijk is (het is een kleine kans, maar misschien zijn er aan dat front positieve ontwikkelingen).
Top dat je dit allemaal kan uitzoeken.

Vanuit SolarEdge snap ik het wel een beetje dat ze dit dicht gooien. Het is alleen heel erg jammer voor de doe het zelfers.

Ik heb even naar modbus gekeken en dit zijn alle adressen die je uit kan lezen

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


Even wat verder gezocht.
In dit document staat wat de adressen zijn:

https://www.solaredge.com...tation-technical-note.pdf

Het komt er op neer dat je alles van je status scherm via modbus kan binnenhalen. Dus niet de info per omvormer wat met de proton files wel kon. Het voordeel is wel dat je elke 1 seconde een update hebt met ook echt nieuwe waardes voor bijvoorbeeld vermogen en stroom.

[edit]
Als de lokale api echt verdwijnt kan ik de modbus adressen in node-red uitlezen en doorgeven aan home-assistant. Wel erg jammer dan dat ik de monitoring per paneel niet meer lokaal heb ;w

Mich wijzigde deze reactie 16-09-2019 19:44 (12%)


  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Mich schreef op maandag 16 september 2019 @ 19:14:
Top dat je dit allemaal kan uitzoeken.
De code is grotendeels python. Dat maakt het vrij gemakkelijk, al kost het wel even om een gevoel te krijgen waar je tegenaan kijkt.
Ik heb even naar modbus gekeken en dit zijn alle adressen die je uit kan lezen

[Afbeelding]
Zo te zien zit er nog steeds geen informatie in over de optimizers :( Maar voor basale lokale monitoring is het voldoende. En het is gedocumenteerd en verdwijnt dus niet zomaar.
Even wat verder gezocht.
In dit document staat wat de adressen zijn:

https://www.solaredge.com...tation-technical-note.pdf

Het komt er op neer dat je alles van je status scherm via modbus kan binnenhalen. Dus niet de info per omvormer wat met de proton files wel kon. Het voordeel is wel dat je elke 1 seconde een update hebt met ook echt nieuwe waardes voor bijvoorbeeld vermogen en stroom.
SolarEdge heeft een aantal SunSpec modellen geïmplementeerd (1/3-faseinverter, meter). Voor DC-DC converters (optimizers!) is er ook een SunSpec model, maar dat heeft SolarEdge helaas niet geimplementeerd (moet toch niet moeilijk zijn).

De basisdocumenten van SunSpec zijn gratis (wel account vereist). Ik vind het overigens wel frappant dat een grote jongen als SolarEdge geen contributing member is van de SunSpec Alliance, maar dit terzijde.

"There is no Engineering like Reverse Engineering"


  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
Mich schreef op maandag 16 september 2019 @ 19:14:
[...]


Top dat je dit allemaal kan uitzoeken.

Vanuit SolarEdge snap ik het wel een beetje dat ze dit dicht gooien. Het is alleen heel erg jammer voor de doe het zelfers.

Ik heb even naar modbus gekeken en dit zijn alle adressen die je uit kan lezen

[Afbeelding]


Even wat verder gezocht.
In dit document staat wat de adressen zijn:

https://www.solaredge.com...tation-technical-note.pdf

Het komt er op neer dat je alles van je status scherm via modbus kan binnenhalen. Dus niet de info per omvormer wat met de proton files wel kon. Het voordeel is wel dat je elke 1 seconde een update hebt met ook echt nieuwe waardes voor bijvoorbeeld vermogen en stroom.

[edit]
Als de lokale api echt verdwijnt kan ik de modbus adressen in node-red uitlezen en doorgeven aan home-assistant. Wel erg jammer dan dat ik de monitoring per paneel niet meer lokaal heb ;w
Voor zover ik weet 'verdwijnt' hij niet zomaar, omdat SolarEdge de firmware updates overlaat aan de installateur, die hiervoor moet langskomen met de SetApp.. (Als je met een setapp inlogt en verbinding maakt met de inverter, gaat hij wel direct, automatisch updaten als je versie te ver achter loopt(!))

In de praktijk wordt er dus nooit een firmware update uitgevoerd zo lijkt, meeste verbeteringen zitten in wifi connectiviteit.. voor ethernet gebruikers dus ook niet erg spannend..

Ofwel lange leve de localAPI, alleen jammer dat de Home Assistant ondersteuning voor LocalAPI maar een paar gegevens mapped. (Niks over optimizers bijvoorbeeld.)

  • Kees-Jan
  • Registratie: december 2007
  • Laatst online: 11-10 09:51
Ik krijg op poort 8080 van mijn SolarEdge SE3500-HD (zonder display; geleverd 14 juni)
https://pasteboard.co/IxQztkE.png
en ik krijg op poort 80 nog steeds de SolarEdge local interface.
https://pasteboard.co/IxQAh50.png

Ik lees de omvormer uit met https://pypi.org/project/solaredge-setapp/

tot nu toe gaat dat probleemloos (het uitlezen dan...)

Ik heb wel dat om de 2 dagen de opwek-counters ge-reset worden. Iemand anders dat soms ook? Dit is al vanaf het begin dat ik déze omvormer heb (de 1e was na 48 dagen al goed defect)

Kees-Jan wijzigde deze reactie 17-09-2019 18:19 (21%)


  • lolle1212
  • Registratie: juni 2011
  • Laatst online: 14:03
Kees-Jan schreef op dinsdag 17 september 2019 @ 18:09:
Ik krijg op poort 8080 van mijn SolarEdge SE3500-HD (zonder display; geleverd 14 juni)
https://pasteboard.co/IxQztkE.png
en ik krijg op poort 80 nog steeds de SolarEdge local interface.
https://pasteboard.co/IxQAh50.png

Ik lees de omvormer uit met https://pypi.org/project/solaredge-setapp/

tot nu toe gaat dat probleemloos (het uitlezen dan...)

Ik heb wel dat om de 2 dagen de opwek-counters ge-reset worden. Iemand anders dat soms ook? Dit is al vanaf het begin dat ik déze omvormer heb (de 1e was na 48 dagen al goed defect)
Interessant, dus als je op die pagina van port 80 onderaan op status drukt zie je de cpu/firmware versie van 4.6.24?

Bij mij werkte uitlezen niet met 4.6.24 wat ook logisch blijkt a.d.h.v. firmware anlyse van @ZwarteIJsvogel

Wat betreft resettende counters, nee bij mij zijn ze 1x gereset omdat ik de omvormer factory reset had gegeven. verder blijven ze normaal oplopen.

  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Kees-Jan schreef op dinsdag 17 september 2019 @ 18:09:
Ik krijg op poort 8080 van mijn SolarEdge SE3500-HD (zonder display; geleverd 14 juni)
https://pasteboard.co/IxQztkE.png
en ik krijg op poort 80 nog steeds de SolarEdge local interface.
https://pasteboard.co/IxQAh50.png
Interessant. Voor zover ik kan zien, kan dit alleen als
  • het IP-adres van de SolarEdge 172.16.0.1 is en dat van de browser 172.16.0.x; of
  • de SolarEdge om de een of andere reden in debug mode draait.
Ik heb wel dat om de 2 dagen de opwek-counters ge-reset worden. Iemand anders dat soms ook? Dit is al vanaf het begin dat ik déze omvormer heb (de 1e was na 48 dagen al goed defect)
Dat zou een side effect kunnen zijn van debug mode, al kan ik daar zo snel geen bewijs voor vinden.

Edit: Het lijkt erop dat debug mode de default is bij een fabrieksschone SolarEdge (om er bij de installatie geen last van te hebben?), maar het is onduidelijk waardoor debug mode wordt beëindigd. Mogelijk doet SetApp dat bij de commissioning.

ZwarteIJsvogel wijzigde deze reactie 18-09-2019 09:12 (12%)

"There is no Engineering like Reverse Engineering"


  • Kees-Jan
  • Registratie: december 2007
  • Laatst online: 11-10 09:51
lolle1212 schreef op dinsdag 17 september 2019 @ 20:12:
[...]


Interessant, dus als je op die pagina van port 80 onderaan op status drukt zie je de cpu/firmware versie van 4.6.24?

Bij mij werkte uitlezen niet met 4.6.24 wat ook logisch blijkt a.d.h.v. firmware anlyse van @ZwarteIJsvogel

Wat betreft resettende counters, nee bij mij zijn ze 1x gereset omdat ik de omvormer factory reset had gegeven. verder blijven ze normaal oplopen.
Kijk maar:
https://pasteboard.co/Iy0RTCx.png

Het IPadres van de omvormer is 10.0.0.153 en deze staat niet in debug mode.

Ik kan gewoon de counters uitlezen via python(3) en wegschrijven in een bestand. Evenzo voor de maintenance info waar de optimizers info inzit.

file output python:
pi@domoticz:~ $ cd /tmp
pi@domoticz:/tmp $ ls -n
total 16
-rw-r--r-- 1 1000 1000 3498 Sep 18 20:19 SolarEdgeMaintenance
-rw-r--r-- 1 1000 1000 709 Sep 18 20:19 SolarEdgeStatusContinue
output in SolarEdgeMaintenance:
{"timestamp": 1568830808, "system": "73190A10-A6", "ntp_server": "nl.pool.ntp.org", "utc_offset": 2, "inverters": [{"optimizers": [{"module_voltage": 32, "online": true, "timestamp": 1568828371, "module_current": 0, "po_voltage": 27, "po_power": 0.0, "temperature": 24, "serial": "11E45600-4B"}, {"module_voltage": 27, "online": true, "timestamp": 1568828261, "module_current": 0, "po_voltage": 25, "po_power": 0.0, "temperature": 16, "serial": "11E463BF-17"}, {"module_voltage": 32, "online": true, "timestamp": 1568828170, "module_current": 0, "po_voltage": 17, "po_power": 0.0, "temperature": 18, "serial": "11E115B4-BB"}, {"module_voltage": 29, "online": true, "timestamp": 1568827960, "module_current": 0, "po_voltage": 15, "po_power": 0.0, "temperature": 16, "serial": "11E45B8A-DA"}, {"module_voltage": 28, "online": true, "timestamp": 1568827938, "module_current": 0, "po_voltage": 15, "po_power": 0.0, "temperature": 16, "serial": "11E11249-4D"}, {"module_voltage": 33, "online": true, "timestamp": 1568828439, "module_current": 0, "po_voltage": 60, "po_power": 0.0, "temperature": 16, "serial": "11E11585-8C"}, {"module_voltage": 32, "online": true, "timestamp": 1568828178, "module_current": 0, "po_voltage": 27, "po_power": 0.0, "temperature": 18, "serial": "11E46372-CA"}, {"module_voltage": 28, "online": true, "timestamp": 1568828084, "module_current": 0, "po_voltage": 25, "po_power": 0.0, "temperature": 16, "serial": "11E11E77-87"}, {"module_voltage": 23, "online": true, "timestamp": 1568827967, "module_current": 0, "po_voltage": 12, "po_power": 0.0, "temperature": 16, "serial": "11E11C14-22"}, {"module_voltage": 32, "online": true, "timestamp": 1568828408, "module_current": 0, "po_voltage": 38, "po_power": 0.0, "temperature": 18, "serial": "11E359E1-2E"}, {"module_voltage": 24, "online": true, "timestamp": 1568827759, "module_current": 0, "po_voltage": 12, "po_power": 0.0, "temperature": 18, "serial": "11E11875-7F"}, {"module_voltage": 28, "online": true, "timestamp": 1568828423, "module_current": 0, "po_voltage": 52, "po_power": 0.0, "temperature": 18, "serial": "11E461E0-36"}, {"module_voltage": 28, "online": true, "timestamp": 1568828015, "module_current": 0, "po_voltage": 19, "po_power": 0.0, "temperature": 16, "serial": "11E446C5-00"}, {"module_voltage": 28, "online": true, "timestamp": 1568827923, "module_current": 0, "po_voltage": 15, "po_power": 0.0, "temperature": 16, "serial": "11E547FD-3A"}, {"module_voltage": 23, "online": true, "timestamp": 1568827999, "module_current": 0, "po_voltage": 12, "po_power": 0.0, "temperature": 16, "serial": "11E12061-73"}, {"module_voltage": 29, "online": true, "timestamp": 1568827740, "module_current": 0, "po_voltage": 28, "po_power": 0.0, "temperature": 16, "serial": "11E44E9D-E0"}, {"module_voltage": 30, "online": true, "timestamp": 1568828486, "module_current": 0, "po_voltage": 60, "po_power": 0.0, "temperature": 16, "serial": "11E45F4C-A0"}, {"module_voltage": 27, "online": true, "timestamp": 1568828117, "module_current": 0, "po_voltage": 29, "po_power": 0.0, "temperature": 18, "serial": "11E11B15-22"}], "optimizers_status": {"online": 18, "total": 18}, "isolation": {"fault_location": 0, "isolation": 0}, "serial": "73190A10-A6"}, {"optimizers": [], "optimizers_status": {"online": 0, "total": 0}, "isolation": {"fault_location": 0, "isolation": 0}, "serial": ""}, {"optimizers": [], "optimizers_status": {"online": 0, "total": 0}, "isolation": {"fault_location": 0, "isolation": 0}, "serial": ""}]}
en output in SolarEdgeStatusContinue:
{"monitoring": true, "portia_subsystem_id": 768, "frequency": 50.025787353515625, "optimizers": {"total": 18, "online": 18}, "voltage_ac": 230.44178771972656, "country": "Netherlands", "portia_error": "0", "country_id": 19, "serial": "73190A10-A6", "power_ac_limit": 0, "energy": {"day": 10821.599609375, "total": 10822.0, "month": 10821.607421875, "year": 10821.607421875}, "cosphi": 0.0, "status": "Night Mode", "power_ac": 0.0, "switch": true, "inverters": [{"bad_position": "", "subsystem_id": 6144, "temperature": {"value": 30, "unit": {"fahrenheit": false, "celsius": true}}, "optimizers": {"total": 18, "online": 18}, "fan": 0, "voltage_dc": -0.11503873020410538, "error": "", "serial": "73190A10-A6"}]}
In domoticz lees ik deze files als JSON in waarna ik de waardes kan gebruiken, op deze manier:
local file = assert(io.popen('tail -n 1 --retry --quiet /tmp/SolarEdgeStatusContinue', 'r'))
local resultString = assert(file:read('*a'))
file:close()

local sD = domoticz.utils.fromJSON(resultString)

energyNow = domoticz.utils.round(sD.power_ac, 0)
energyToday = domoticz.utils.round(sD.energy.day,0)
energyMonth = domoticz.utils.round(sD.energy.month,0)
energyYear = domoticz.utils.round(sD.energy.year,0)
energyTotal = domoticz.utils.round(sD.energy.total,0)
De SolarEdgeStatusContinue file laat ik door python continue genereren, zodat ik altijd de laatste waardes inlees.

In Domoticz heb ik een dzVents aan de SlimmeMeter gekoppeld die iedere 10 seconden een update geeft:
return {
on = {
devices = {
'Power'
}
},
execute = function(domoticz, device)

function FileExists(file)
local file_found=io.open(file, "r")
if file_found==nil then return false else return true end
end


EnergyuseLow = domoticz.devices('Power').usage1
EnergyuseHigh = domoticz.devices('Power').usage2
EnergysolarLow = domoticz.devices('Power').return1
EnergysolarHigh = domoticz.devices('Power').return2
EnergyuseActual = domoticz.devices('Power').usage
EnergysolarActual = domoticz.devices('Power').usageDelivered

domoticz.devices('Energy use Low').updateCounter(EnergyuseLow)
domoticz.devices('Energy use High').updateCounter(EnergyuseHigh)
domoticz.devices('Energy solar Low').updateCounter(EnergysolarLow)
domoticz.devices('Energy solar High').updateCounter(EnergysolarHigh)
domoticz.devices('Energy use Actual').updateEnergy(EnergyuseActual)
domoticz.devices('Energy solar Actual').updateEnergy(EnergysolarActual)
...
...
waarin ik ook de bovenstaande SolarEdge counters update waardoor ik iedere 10 seconden een up2date stand in domoticz heb...

Kees-Jan wijzigde deze reactie 18-09-2019 20:30 (86%)


  • Mich
  • Registratie: december 2000
  • Laatst online: 18-11 09:44
lolle1212 schreef op dinsdag 17 september 2019 @ 13:01:
[...]


Voor zover ik weet 'verdwijnt' hij niet zomaar, omdat SolarEdge de firmware updates overlaat aan de installateur, die hiervoor moet langskomen met de SetApp.. (Als je met een setapp inlogt en verbinding maakt met de inverter, gaat hij wel direct, automatisch updaten als je versie te ver achter loopt(!))

In de praktijk wordt er dus nooit een firmware update uitgevoerd zo lijkt, meeste verbeteringen zitten in wifi connectiviteit.. voor ethernet gebruikers dus ook niet erg spannend..

Ofwel lange leve de localAPI, alleen jammer dat de Home Assistant ondersteuning voor LocalAPI maar een paar gegevens mapped. (Niks over optimizers bijvoorbeeld.)
Ik dacht dat die firmwares ook gewoon via internet binnen zouden komen maar dan heb ik mij daarin vergist.

De localAPI in HA maakt niet gebruik van de proton files en daarom kan je alleen een paar waardes maar uitlezen.

  • Kees-Jan
  • Registratie: december 2007
  • Laatst online: 11-10 09:51
De localAPI in HA maakt niet gebruik van de proton files en daarom kan je alleen een paar waardes maar uitlezen.
Kijk eens naar https://pypi.org/project/solaredge-setapp/ ;)

en ik denk dat de local API gewoon blijft omdat die Android en iPhone App daar gebruik van maken.

Je kan in de LAN SETAPP namelijk precies hetzelfde doen... :P

Kees-Jan wijzigde deze reactie 18-09-2019 20:33 (30%)


  • Mich
  • Registratie: december 2000
  • Laatst online: 18-11 09:44
Kees-Jan schreef op woensdag 18 september 2019 @ 20:31:
[...]

Kijk eens naar https://pypi.org/project/solaredge-setapp/ ;)

en ik denk dat de local API gewoon blijft omdat die Android en iPhone App daar gebruik van maken.

Je kan in de LAN SETAPP namelijk precies hetzelfde doen... :P
Ik weet niet wat dat script precies doet maar ik heb die proton files gebruikt om alle info in Node-Red uit te lezen en vervolgens via MQTT door te geven aan home assistant. Zie deze post:

Mich in "[SolarEdge] Omvormers en optimizers zelf monitoren"

https://www.home-assistant.io/components/solaredge_local/

De solaredge local integratie in home assistant doet toch echt maar 4 of 5 sensoren aanmaken met de opgewekte vermogens (nu, dag, maand, jaar).

  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Kees-Jan schreef op woensdag 18 september 2019 @ 20:15:
... en deze staat niet in debug mode.
Hoe heb je dat vastgesteld? Voor zover ik weet kun je namelijk nergens zien of de SolarEdge in debug mode draait. Maar ik vergis mij op dit punt graag.

"There is no Engineering like Reverse Engineering"


  • Kees-Jan
  • Registratie: december 2007
  • Laatst online: 11-10 09:51
ZwarteIJsvogel schreef op woensdag 18 september 2019 @ 21:30:
[...]

Hoe heb je dat vastgesteld? Voor zover ik weet kun je namelijk nergens zien of de SolarEdge in debug mode draait. Maar ik vergis mij op dit punt graag.
Zondagavond een factory reset gedaan.

Maar, vertel eens hoe ik zo'n SolarEdge in debug mode krijg? En hoe kan ik dat überhaupt zien? Niet dat ik die debug mode wil... :N

  • ZwarteIJsvogel
  • Registratie: juni 2008
  • Laatst online: 16-11 15:25
Kees-Jan schreef op woensdag 18 september 2019 @ 21:49:
Zondagavond een factory reset gedaan.
Debug mode lijkt de default te zijn voor een fabrieksschoon systeem (wat de toestand zou moeten zijn na een factory reset), dus dat zou zomaar de reden kunnen zijn.
Maar, vertel eens hoe ik zo'n SolarEdge in debug mode krijg?
Behalve wellicht een factory reset, kan ik mij voorstellen dat SE service engineers een speciale app hebben waar je meer mee kunt dan met de standaard SetApp. Verder geen idee (behalve dat voor debug mode een speciaal SPFF-bestandje nodig lijkt te zijn).
En hoe kan ik dat überhaupt zien?
Geen idee. Maar omdat jij er zeker van leek te zijn dat jouw SE niet in debug mode draait, dacht ik dat jij ergens iets had gezien :)
Niet dat ik die debug mode wil... :N
Mee eens. Die debug mode lijkt veel meer in het systeem te raken dan alleen de toegang tot de local API.

"There is no Engineering like Reverse Engineering"


  • Kees-Jan
  • Registratie: december 2007
  • Laatst online: 11-10 09:51
Het enige wat ik kan bedenken is dat het zéér onlogisch is om een consumenten product ná een factory reset in (een soort van) debug mode te zetten...
Je kan na de factory reset zowel via LAN als via WiFi (nadat je de omvormer in setapp mode hebt gezet) configureren.
Grid en taal kiezen, daarna de pairing met de poweroptimizers en de omvormer zou moeten werken.

Als dat de debug mode is, zoals jij het noemt: prima. Maar ik zou het eerder config mode willen noemen. Omdat de omvormer niets doet zonder die 1e config. Of dat nou via LAN of WiFi gebeurd...
Pagina: 1 ... 16 17 18 Laatste


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 Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True