NEWS
[Projekt] ioBroker Solarlog Adapter
-
Hallo Marcel,
leider funktioniert das nicht anbei ein Auszug aus dem Log:
ERROR ReqDataStandard: getaddrinfo ENOTFOUND 134.19.XX.XX:5000 134.19.XX.XX:5000:80
Es wird immer der Port 80 nochmals hinten angehangen. Der Port ist definitiv offen!
Besten Gruß
Werner
-
Hallo Werner
Ich habe die Port - Wahlmöglichkeit einmal in Code umgesetzt. Die Version 0.1.0 steht auf Github für dich zur Verfügung. Kannst du es von da einmal bei dir im ioBroker installieren. Bei mir funktioniert es, egal ob ich Port 80 eintrage oder nicht.
Danke und Gruss
Marcel
-
Hallo Marcel,
ich bekomme schon mal einen "connect" hin und der Adapter ist grün und es werden die DP angelegt.! Leider keine Werte. Ich hänge mal das Debug Log an:
! solarlog.0 2019-01-18 11:21:32.621 warn ERROR ReqDataStandard: connect EHOSTUNREACH 134.19.xx.xx:80
! solarlog.0 2019-01-18 11:21:32.581 debug Data to request body: {"801":{"170":null}}
! solarlog.0 2019-01-18 11:21:17.598 warn ERROR ReqDataStandard: connect EHOSTUNREACH 134.19.xx.xx:80
! solarlog.0 2019-01-18 11:21:17.565 debug Data to request body: {"801":{"170":null}}
! solarlog.0 2019-01-18 11:21:02.606 warn ERROR ReqDataStandard: connect EHOSTUNREACH 134.19.xx.xx:80
! solarlog.0 2019-01-18 11:21:02.572 debug Data to request body: {"801":{"170":null}}
! solarlog.0 2019-01-18 11:20:47.583 warn ERROR ReqDataStandard: connect EHOSTUNREACH 134.19.xx.xx:80
! solarlog.0 2019-01-18 11:20:47.549 debug Data to request body: {"801":{"170":null}}
! solarlog.0 2019-01-18 11:20:47.548 debug WR nicht Importieren
! solarlog.0 2019-01-18 11:20:47.548 debug uzimp: false
! solarlog.0 2019-01-18 11:20:47.548 debug Data: "{"609":null}"
! solarlog.0 2019-01-18 11:20:47.548 debug Options: {"host":"134.19.xx.xx","port":"5000","path":"/getjp","method":"POST","headers":{"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57
! solarlog.0 2019-01-18 11:20:47.548 debug [START] Started Adapter with: 134.19.xx.xx
! solarlog.0 2019-01-18 11:20:47.548 debug [INFO] Configured polling interval: 15000
! solarlog.0 2019-01-18 11:20:47.548 debug uzimp: false
! solarlog.0 2019-01-18 11:20:47.548 debug InvImp: false
! solarlog.0 2019-01-18 11:20:47.548 info [START] Starting solarlog adapter
! solarlog.0 2019-01-18 11:20:47.547 info starting. Version 0.1.0 in /opt/iobroker/node_modules/iobroker.solarlog, node: v8.15.0
! solarlog.0 2019-01-18 11:20:47.400 debug statesDB connected
! solarlog.0 2019-01-18 11:20:47.387 debug objectDB connectedDanke für deine Mühe.
Besten Gruß
Werner
-
Hallo Werner
Danke fürs testen! Konnte eine wahrscheinliche Fehlerquelle schon mal eliminieren. Jetzt sollte es klappen - was man ja aber eigentlich immer denkt. Kannst du den Adapter nochmals neu von Github installieren bitte.
Lieber Gruss und danke.
Marcel
-
Hallo Marcel,
großes Lob, Klasse! Es funktioniert, vielen Dank.
Besten Gruß und ein schönes Wochenende
Werner
-
Ich habe einen SolarLog 400 verbunden:
Der Datenpunkt info.connection ist true. info.numinv zeigt -1. Alle anderen Datenpunkte bleiben leer.
Debug-Log sieht so aus:
! ````
2019-01-20 14:42:51.093 - debug: solarlog.0 objectDB connected
2019-01-20 14:42:51.143 - debug: solarlog.0 statesDB connected
2019-01-20 14:42:51.327 - info: solarlog.0 starting. Version 0.1.0 in /opt/iobroker/node_modules/iobroker.solarlog, node: v8.12.0
2019-01-20 14:42:51.331 - info: solarlog.0 [START] Starting solarlog adapter
2019-01-20 14:42:51.333 - debug: solarlog.0 InvImp: false
2019-01-20 14:42:51.333 - debug: solarlog.0 uzimp: false
2019-01-20 14:42:51.334 - debug: solarlog.0 [INFO] Configured polling interval: 300000
2019-01-20 14:42:51.334 - debug: solarlog.0 [START] Started Adapter with: 192.168.1.31
2019-01-20 14:42:51.334 - debug: solarlog.0 Options: {"host":"192.168.1.31","port":"80","path":"/getjp","method":"POST","headers":{"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36","Content-Type":"application/json","Accept":"applciation/json","Content-Length":12}}
2019-01-20 14:42:51.334 - debug: solarlog.0 Data: "{"609":null}"
2019-01-20 14:42:51.334 - debug: solarlog.0 uzimp: false
2019-01-20 14:42:51.334 - debug: solarlog.0 WR nicht Importieren
2019-01-20 14:42:51.337 - debug: solarlog.0 Data to request body: {"801":{"170":null}}
2019-01-20 14:42:51.360 - debug: solarlog.0 http Status: 405
2019-01-20 14:42:51.361 - debug: solarlog.0 HEADERS: {}
2019-01-20 14:42:51.367 - debug: solarlog.0 no more date in response
2019-01-20 14:42:51.380 - warn: solarlog.0 JSON-parse-Fehler DataStandard: Unexpected token E in JSON at position 0
2019-01-20 14:42:51.381 - debug: solarlog.0 InvImp= false
2019-01-20 14:42:53.465 - debug: solarlog.0 system.adapter.admin.0: logging true
2019-01-20 14:43:00.003 - info: javascript.0 script.js.common.Stoerungen.Fehler_kritisch_test: hm-rpc.2.info.connection: trueWir der SolarLog 400 nicht unterstützt oder mache ich was falsch?
-
Hallo
Offensichtlich kommt die Verbindung zum Solarlog zustande, dieser ist aber nicht bereit, die angeforderte Antwort zu schicken.
Ich bin weder mit dem 400e noch mit der genannten Firmware vertraut, hab auch kein Handbuch dazu googeln können.
Bedingung für das Funktionieren des Adapters wären solarlogseitig:
-
das Vorhandensein der JSON-Schnittstelle wie sie in den aktuellen Handbüchern beschrieben ist
-
dass die Schnittstelle freigegeben ist (muss im Konfigurationsmenu eingestellt werden)
-
Wenn du noch den Unterzähler-Import nutzen möchtest (was du gemäss Log im Moment noch nicht aktiviert hast) müsstest du auch das Benutzerpasswort deaktivieren.
Das einzige was ich dir von hier aus raten kann, ist die obigen Punkte zu prüfen und mit allenfalls in der Konfiguration deines Solarlogs einzustellenden Berechtigungen zu "spielen", diese also mal zu deaktivieren.
Herzliche Grüsse
Marcel
-
-
Es sieht wohl so aus, dass der SolarLog 400 keine JSON-Schnittstelle hat. Zumindest ist im Datenblatt und im Handbuch nichts davon zu finden.
Zugriff gibt es offensichtlich von außen nur über das Webinterface oder nach außen über einen zyklischen FTP-Export der aktuellen Daten.
Schade.
-
Noch nen kleinen Fehler gefunden:
Wenn der Wechselrichter einen Fehler zeigt (Schnee), entscheidet der Adapter das dieser und alle weiteren Unterverbraucher wohl nicht da sind und ignoriert sie bis auf weiteres
-
Herzlichen Dank für den Hinweis, JackWolfskind.
Ich hab im solarlogschen JSON - Dschungel gewühlt und nun hoffentlich einen zuverlässigeren Geräteindikator gefunden.
Falls du lieber Updates installierst als Schnee von deiner PV-Anlage wischst, steht die neue Version 0.1.2 mit verbesserter Geräteerkennung - hoffentlich schneesicher - auf Github und npm ab sofort zur Verfügung, schon bald wohl auch direkt im ioBroker.
Viel Spass beim testen, hoffentlich funktionierts bei dir auch.
Herzliche Grüsse
forelleblau
-
Vielen Dank für deinen Einsatz!
Ich warte dann mal ob es nochmal schneit
-
Ich habe meinen alten Solarlog 400 nun gegen einen 300er getauscht. Der Adapter funktioniert prime - danke für die Arbeit!
Es gibt jedoch einige Datenpunkte, die ich vermisse - vielleicht gibt sie die JSON Schnittstelle ja auch gar nicht her (Priorität in angegebener Reihenfolge):
- Sollwerte Tag/Monat/Jahr
- Erreichter aktueller Prozentwert vom jeweiligen Soll
- historische Werte, wobei die dann nicht die Tageswerte beinhalten müssten.
Was mein alter 400er noch angezeigt hat, ich aber im 300er gar nicht finde: Prognose in kWh und Prozent bis Ende des Zeitabschnittes (Tag / Monat / Jahr).
Danke und Gruß
Manfred -
Hallo hmanfred
Danke für die Rückmeldung, es freut mich wenn der Adapter auch bei dir funktioniert.
Die Sollwerte habe ich bisher noch nicht ausgelesen, da ich sie aber angezeigt erhalte (SL 1200), sollte ich sie eigentlich auch finden können. Werde mal noch etwas rumwühlen. Die Tages/Monats/Jahreswerte sind auch da.
Die historischen Werte sind wohl greifbar, mir ist aber nicht ganz klar, wie man das darstellen könnte. So etwas wie "die letzten 12 Monate" oder "die letzten 3 Jahre" wär wohl möglich. Oder hast du eine konkrete Vorstellung?Lieber Gruss
forelleblau -
Hallo forelleblau,
danke für die Rückmeldung. Freut mich, dass alle Werte prinzipiell verfügbar sind. Wäre schon, wenn wenigstens die Sollwerte als Datenpunkt eingebaut würden.
Was die historischen Werte betrifft, wäre vielleicht eine solche Struktur denkbar:
HISTORICAL
2019
year
jan
feb
mar
apr
...
2018
year
jan
feb
...HISTORICAL und die Jahreszahlen wären dann Ordner, die klein geschriebenen Begriffe Datenpunkte.
Ich bin jetzt leider nicht Programmiercrack und kenne auch die Datenstruktur nicht, die über die JSON Schnittstelle rüberkommt. Aber die Benennungen könnte man ja evtl. aus den dort enthaltenen Bezeichnungen extrahieren.
Kann ich das bei mir irgendwie mit einfachen Mitteln auslesen?Gruß
Manfred -
Hallo hmanfred
Hab paar Sachen gefunden:
Sollwerte: Was ich abrufen kann, sind die Vorgabewerte aus der Prognose-Konfiguration. Also Anlagegrösse, Jahressoll (kWh/kWp) und die Prozentwerte für die Aufteilung auf die Monate. Daraus können dann die Sollwerte errechnet werden. Also, die Grundlagen sind da, mir ist einfach noch nicht grad augenfällig klar, wie ich das programmieren soll. Musst wohl etwas Geduld haben.Jahrestotal pro Zähler : Diese Werte kann ich auch abrufen, da ist auch die Umsetzung klar.
Monatstotal: Da kann ich zwar ganz viel abrufen, aber ich werde aus der Zusammenstellung des JSON-Objekts nicht schlau. Da sind x-Mal die selben Monats-Total-Werte drin:
MonatsdatenSolarlog.txt
Findest du da die Logik? Ich müsste wissen, welches, der 254 Elemente ich dann auslesen sollte.
Ich kann dir sonst ein js-script zur Verfügung stellen, dass dir diese Werte ebenfalls ausliest und in das ioBroker logfile schreibt.
Interessiert?
Herzliche Grüsse forelleblau -
Guten Abend
Was die Jahressummen pro Zähler betrifft wäre jetzt auf github/npm eine Version 0.1.5 verfügbar die Historic.Jahr.yieldyear.Zählernahme - Objekte anlegt und mit Werten befüllt, bei mir hat's bis ins Installationsjahr der Anlage zurück funktioniert.
https://github.com/forelleblau/ioBroker.solarlogDa die Abfrage beim solarlog relativ lange dauert und die Werte ja nicht jeden Tag ändern (ausser das laufende Jahr) werden die Werte im Moment nur beim Start des Adapters abgefragt. Fürs aktualisieren als Adapter/Instanz neu starten.
War sowas gefragt?
Gruss forelleblau
-
Hallo forelleblau,
hab gerade die neue Version installiert. Ist ja schon mal ein guter Anfang.
Die historischen Werte sind nun bei mir auch seit Installation der Anlage (2009) drin.
Die Textdatei mit den Monatsdaten schau ich mir mal an. Ich musste mich beim Umstieg vom alten 400er auf den neuen 300er ein wenig mit der Datenstruktur beider Exportdateien beschäftigen. Die waren zueinander nicht kompatibel.
Kannst du mir sagen, wie ich die JSON-Objekte aus meinem System herausbekomme? So könnte ich bessere Vergleiche anstellen, da Inhalt der JSON-Objekte mit den realen Live-Werten aus meinem System korrelieren würden.
Was die Prognosewerte betrifft: Jahressoll und Prozentwerte je Monat würden die Möglichkeit bieten, daraus Monatswerte und Tageswerte (=Monatswert / AnzahlMonatstage) zu errechnen. Entweder macht das der Adapter oder ich baue mir ein Script und schreibe die Werte in neue Objekte.
Gruß
Manfred -
Hallo hmanfred
Die Werte kriegst du mit folgendem Skript aus dem Solarlog raus:
var https = require('http'); //Hier die IP deines Solarlog eintragen var deviceIpAdress = "192.168.1.XXX"; var cmd = "/getjp"; // Kommandos in der URL nach der Host-Adresse var dataraw = null; //das sind die verschiednen Datenobjeke zur Abfrage, können auch ergänzt werden var dataofficial = '{"801":{"170":null}}'; var datayear = '{"854":null}'; var datamonth = '{"779":null}'; //hier das gewünschhte Datenobjekt eintragen var data = dataofficial; var options = { host: deviceIpAdress, path: cmd, method: 'POST', headers: { 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 'Content-Type': 'application/json', 'Accept': 'applciation/json', 'Content-Length': data.length } }; var req = https.request(options, function(res) { console.log("http Status: " + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 200 ? "warn" : "info")); // Header (Rückmeldung vom Webserver) var bodyChunks = []; var chunkLine = 0; res.on('data', function(chunk) { chunkLine = chunkLine + 1; // Hier können die einzelnen Zeilen verarbeitet werden... bodyChunks.push(chunk); }).on('end', function() { var body = Buffer.concat(bodyChunks); console.log("body: " + body); var dataJ = JSON.parse(body); //Hier könnten jetzt die Daten verarbeitet werden. console.log("END"); //console.log("Rückgabe: " + JSON.parse(req)); }); }); req.on('error', function(e) { // Fehler abfangen console.log('ERROR: ' + e.message,"warn"); }); console.log("Data to request body: " + data); // write data to request body (data ? req.write(data) : console.log("Daten: keine Daten im Body angegeben angegeben")); req.end();
Du musst nur die IP deines Solarlogs eintragen dann kannst du damit die aufgeführten Objekte abfragen. Einfach das gewünschte hinter var data= schreiben und einmal laufenlassen, dann hast du das Resultat im Log.
EDIT: Was die möglichen Datanobjekte im Solarlog betrifft,
werde ich noch eine List mit den mir bekannten aufarbeiten.s. https://github.com/forelleblau/ioBroker.solarlog/blob/master/docs/solarlog_dataobjects.mdBezüglich der Sollwerte: Ja, so wär das Machbar. Was ich aber gemerkt habe, dass die Sollwerte pro Anlageteile angelegt werden. Da ich nur 1 Anlage/Anlageteil habe, weiss ich nicht, wie das dann mit mehreren aussehen würde - nur so könnte ich den Adapter sauber programmieren.
Wenn du die Berechnung programmieren möchtest könnten wir es ja so machen, dass du die Berechnung schreibst und ich baue sie dann in den Adapter ein? Ich würde die die Übergabeparameter geben und du mir dann daraus die Tages-/Monats/ oder Jahressollwerte.Lieber Gruss
forelleblau -
Hmm...
ich vermute du siehst in mir einen (zumindest halbwegs) versierten Programmierer.
Der bin ich leider nicht. Ich bin recht fit was IT-Fragen betrifft. Programmieren beschränkt sich aber auf das WebUi der CCU sowie Blockly-Scripts im JS-Adapter.
Textorientierte Scripts kann ich allenfalls auf Basis von Vorgaben modifizieren.
Damit stellt sich schon mal die erste Frage: das obige Script ist ein
ShellBash-Script? Falls ja - das kriege ich zum laufen.Was meine Anmerkung zum Berechnen der Sollwerte betrifft: ich hätte mir da ein Blockly-Script geschrieben und die Ergebnisse in Objekten abgelegt, die ich in der Objektstruktur des ioBroker anlegen würde.
Voraussetzung wäre natürlich, dass Gesamt- und Prozentwerte als Objekte im Solarlog-Adapter verfügbar wären.Sorry, aber mein Horizont ist da wohl etwas beschränkter, als du vermutest.
Gruß
Manfred -
Hallo
Nur zum Script. Das ist für den js Adapter, ein js Script. Nur dort reinkopieren, ip setzen und bei var Data = den gewünschten Datensatz eintragen