NEWS
[Projekt] ioBroker Solarlog Adapter
-
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 -
Hallo hmanfred.
Ich machs auch nur mit googeln, abschreiben und trial&error. Mit ausprobieren lernt man einiges - alles was funktioniert wurde mal ausprobiert!
Also wenn du gerne Blockly - Scripts machst, könntest du ja die 14 Variablen definieren (Monats-%, installierte Leistung und kWh/kWp) und daraus dann für jeden beliebigen Tag /Monat/Jahr, gestützt auf das jeweilige aktuelle Datum die gültigen Soll-Werte errechnen.
Wenn du das hast, drückst du oben rechts den Knopf und aus deinem Blockly wird ein js-Script, dass ich +/- in den Adapter einbauen kann.
Was meinst du dazu? -
@forelleblau sagte in [Projekt] ioBroker Solarlog Adapter:
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 eintragenUnd wie starte ich das Script dann?
Mit Blockly würde ich eine HM-Taste oder Cron als Trigger einbauen. Aber direkt in JS?
Edit:
hab's hinbekommen.Weiteres per PN.Edit2: bin wohl zu doof, hier im Forum die Funktion für PN zu finden.
-
Beim PN-Suchen habe ich auch nur eine Chat-Funktion gefunden. Wenn du im ioBroker auf die Adapter-Seite gehst und beim solarlog-Adapter mit dem ? die Readme aufrufts da den Lizenz-Tab öffnest, steht da sonst meine Mailadresse - wär auch PN.
Gruss forelleblau -
Hallo, hab den Adapter gestern installiert und konnte diverse Werte von meinem Solarlog abgreifen. Die Werte werden in wh ausgegeben. Kann man das für VIS in kWh umrechnen?
Gruß -
-
so wie man g in kg oder mm in m umrechnet.
Außerdem gibt es Widgets, die das direkt machen. Basic Numbers z.b. wenn ich mich nicht irre.
-
@hmanfred sagte in [Projekt] ioBroker Solarlog Adapter:
so wie man g in kg oder mm in m umrechnet.
Außerdem gibt es Widgets, die das direkt machen. Basic Numbers z.b. wenn ich mich nicht irre.
Mit 0,001 multiplizieren ist schon klar. Dass das in manchen Widgets geht, weiß ich auch. Habe ich aber bislang nicht gefunden. Ich nutze das Basic-String Widget.
EDIT:
Jupp beim number geht es. Hab's hinbekommen. THX -
@Stoni
Gern geschehen.
Mit Strings lässt sich schlecht rechnen. Mit Zahlen geht's einfacher. -
Hallo alle
Ich habe eine Anfrage für die Integration von Batteriespeicherwerten in den Adapter. Da ich selber keinen Speicher habe, ist es für mich schwierig, unter dein vielen Nullen in den Datensätzen die richtigen zu finden .
Hat jemand einen Batteriespeicher am Solarlog? Weisst du welche Werte (Datensatznummer/JSON-String) abgefragt werden müssen? Oder wärst du bereit, das mit dem Google-Entwicklertool zu suchen (so hab ich auch alle anderen Werte identifiziert, könnte dabei unterstützen.)?Herzliche Grüsse
forelleblau -
Neue Version!
Auf Github liegt Version 0.1.6 zum Testen bereit.
Neu werden auch die wichtigsten Werte von am Solarlog angeschlossen Batterien angelegt und abgefragt. -
Hallo forelleblau,
erstmal vielen Dank für den Adapter.
Ich habe einen Solar-Log 1200 mit einem Varta Akku, einem Heizstab und die Adapter Version 0.1.6.Der Adapter liefert folgende Werte:
- Im Channel BATT kommen die Werte für BattLevel, ChargePower und DischargePower richtig
- Im Channel INV gibt es die Channel für
o ECO Heizstab PAC, daysum, status – Werte sind richtig
o Eigenverbrauch PAC daysum, status – Werte sind richtig
o Solar Edge PAC, daysum, status – Werte sind richtig
o Varta Element PAC und daysum werden nicht befüllt, Status wird richtig befüllt. Dies war auch schon vor 0.1.6 so
Herzliche Grüße
Gepe000 -
Hallo Gepe000.
Danke für das positive und interessante Feedback. Ich hab das Update zusammen mit Philoxio entwickelt, der einen Solarlog 50 mit Batterie hat. Ich selber habe leider noch keine Batterie.
Bei philoxio wurde die Batterie nicht im Inv-Channel dargestellt. Das scheint offensichtlich modellabhängig zu sein.
Darf ich dir paar Fragen stellen resp. dich um paar Inputs zur Weiterentwicklung des Adapters bitten. Mein Ziel wäre es im Moment, dass in beiden Channels die selben Werte angezeigt werden und dass bei den Batteriewerten noch die Spannung angezeigt werden kann.Herzliche Grüsse
Forelleblau -
Hallo forelleblau,
klar gern doch. Wie kann ich weiterhelfen?Herzliche Grüsse
Gepe000 -
@Gepe000
Als erstes wäre ich froh für ein Debug-Log von einem Adapter Neustart inkl. Der ersten Datenabfrage.
Ev. kann ich damit bereits sehen, ob das INV-Objekt, dass deine Varta abbildet, als Batterie zu erkennen ist.
Sonst werden wir dann etwas tiefer graben müssen.Kannst du mir zudem sagen, ob du in deinen Diagnose-Menüs ein solches für die Batterie hast:
https://user-images.githubusercontent.com/44144152/65462243-a72f6b80-de55-11e9-98ce-471bcceb4457.pngUnd ob dort die Spannung deiner Batterie angezeigt wird.
Danke und Grüsse
Forelleblau
-
Log: siehe Anhang
Diagnose-Menü: das gibt es, jedoch ohne Anzeige der Batteriespannung:
LOG.txtGrüsse
Gepe000