Hi,
Auf der Suche nach einer guten Lösung zur graphischen Aufbereitung bin ich über dein Projekt gestolpert.
InfluxDB und Grafana gefielen mir schon bei einem kleinen rpi Monitoring Projekt.
Da mein PIKO 17 leider nur über die Modbus Schnittstelle integriert ist, möchte ich gerne ein Plugin für die Solaranzeige schreiben, welches die json Daten der Webschnittstelle verarbeitet, damit ich keine zusätzliche Hardware benötige bzw. Beim Standort des raspi nicht eingeschränkt bin.
Die "Doku" der Schnittstelle habe ich aus dem fhem Forum, der fhem ist aber für das reine logging in meinen Augen ein LKW zum Brötchen holen und mein fhem raspi möchte ich für die PV Visualisierung nicht überlasten.
https://forum.fhem.de/index.php?action= ... tach=59831
https://forum.fhem.de/index.php/topic,2 ... msg1040239
Gibt es eine Beschreibung des Datenbank Schemas und der Funktionsweise für Solaranzeige Plugins?
Dann würde ich mich Mal daran versuchen, wenn du einverstanden bist.
Danke und Grüße
Jonas
Plugin zum Auslesen der Kostal PIKO 17 Webschnitstelle
Moderator: Ulrich
- Ulrich
- Administrator
- Beiträge: 6286
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 160 Mal
- Danksagung erhalten: 936 Mal
Re: Plugin zum Auslesen der Kostal PIKO 17 Webschnitstelle
Hallo Jonas,
das Projekt hat vor 3 1/2 Jahren mit nur einem Laderegler angefangen. Damals war überhaupt nicht abzusehen, was daraus einmal werden würde. Deshalb ist das Projekt auch nicht modular aufgebaut und für diese Größe durchdacht. Schnittstellen für Plugin's gibt es nicht und jede Datenbank für die einzelnen Geräte hat eine andere Strucktur. Ich versuche natürlich in der Zukunft immer mehr Struktur in das Projekt hinein zu bekommen, dass ist aber noch ein langer Weg.
Bitte sehe dir den Script "kostal_pico.php" an. Den musst Du verändern. Dort findest Du auch alle Hinweise, wo man die Datenbank Struktur finden könnte. (in funktionen.inc.php)
das Projekt hat vor 3 1/2 Jahren mit nur einem Laderegler angefangen. Damals war überhaupt nicht abzusehen, was daraus einmal werden würde. Deshalb ist das Projekt auch nicht modular aufgebaut und für diese Größe durchdacht. Schnittstellen für Plugin's gibt es nicht und jede Datenbank für die einzelnen Geräte hat eine andere Strucktur. Ich versuche natürlich in der Zukunft immer mehr Struktur in das Projekt hinein zu bekommen, dass ist aber noch ein langer Weg.
Bitte sehe dir den Script "kostal_pico.php" an. Den musst Du verändern. Dort findest Du auch alle Hinweise, wo man die Datenbank Struktur finden könnte. (in funktionen.inc.php)
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
Re: Plugin zum Auslesen der Kostal PIKO 17 Webschnitstelle
Anonsten hier mal schauen, wie man mit node-red das Web-UI vom Kostal Pico auslesen kann. Lässt sich adaptieren.
Zugegeben - von hinten durch die Brust ins Auge, aber es funktioniert:
[{"id":"4ad0e46.7796d1c","type":"function","z":"298e6055.ffac3","name":"parse http","func":"acPowerCurrent = parseInt(msg.payload[14].replace(/([^a-z0-9]+)/gi, ''));\ntotalEnergy = parseInt(msg.payload[17].replace(/([^A-Z0-9]+)/gi, ''));\ndailyEnergy = parseInt(msg.payload[26].replace(/([^a-z0-9]+)/gi, ''))/100;\nstring1voltage = parseInt(msg.payload[56].replace(/([^a-z0-9]+)/gi, ''));\nstring1current = parseInt(msg.payload[65].replace(/([^a-z0-9]+)/gi, ''))/100;\nstring2voltage = parseInt(msg.payload[82].replace(/([^a-z0-9]+)/gi, ''));\nstring2current = parseInt(msg.payload[91].replace(/([^a-z0-9]+)/gi, ''))/100;\nline1voltage = parseInt(msg.payload[59].replace(/([^a-z0-9]+)/gi, ''));\nline1power = parseInt(msg.payload[68].replace(/([^a-z0-9]+)/gi, ''));\nline2voltage = parseInt(msg.payload[85].replace(/([^a-z0-9]+)/gi, ''));\nline2power = parseInt(msg.payload[94].replace(/([^a-z0-9]+)/gi, ''));\nline3voltage = parseInt(msg.payload[111].replace(/([^a-z0-9]+)/gi, ''));\nline3power = parseInt(msg.payload[120].replace(/([^a-z0-9]+)/gi, ''));\nstatus = msg.payload[32].replace(/\\r?\\n|\\r/g, '').replace(/\\s/g, \"\");\n\n\nif (Number.isNaN(acPowerCurrent) === true){\n acPowerCurrent = 0;\n}\nif (Number.isNaN(totalEnergy) === true){\n totalEnergy = -1;\n}\nif (Number.isNaN(dailyEnergy) === true){\n dailyEnergy = 0;\n}\nif (Number.isNaN(string1voltage) === true){\n string1voltage = 0;\n}\nif (Number.isNaN(string1current) === true){\n string1current = 0;\n}\nif (Number.isNaN(string2voltage) === true){\n string2voltage = 0;\n}\nif (Number.isNaN(string2current) === true){\n string2current = 0;\n}\nif (Number.isNaN(line1voltage) === true){\n line1voltage = 0;\n}\nif (Number.isNaN(line1power) === true){\n line1power = 0;\n}\nif (Number.isNaN(line2voltage) === true){\n line2voltage = 0;\n}\nif (Number.isNaN(line2power) === true){\n line2power = 0;\n}\nif (Number.isNaN(line3voltage) === true){\n line3voltage = 0;\n}\nif (Number.isNaN(line3power) === true){\n line3power = 0;\n}\n\nmsg.payload = {\n \"acPowerCurrent\" : acPowerCurrent,\n \"totalEnergy\" : totalEnergy,\n \"dailyEnergy\" : dailyEnergy,\n \"status\" : status,\n \"string1voltage\" : string1voltage,\n \"string1current\" : string1current,\n \"string2voltage\" : string2voltage,\n \"string2current\" : string2current,\n \"line1voltage\" : line1voltage,\n \"line1power\" : line1power,\n \"line2voltage\" : line2voltage,\n \"line2power\" : line2power,\n \"line3voltage\" : line3voltage,\n \"line3power\" : line3power\n}\n\nglobal.set(\"kostal\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"x":860,"y":70,"wires":[["c4a0537.01675b"]]},{"id":"fd1711f2.7e7b4","type":"http request","z":"298e6055.ffac3","name":"kostal","method":"GET","ret":"txt","paytoqs":false,"url":"http://192.168.1.99/index.fhtml","tls": ... :70,"wires":[["3f445786.6a93b8"]]},{"id":"3f445786.6a93b8","type":"html","z":"298e6055.ffac3","name":"","property":"payload","outproperty":"payload","tag":"td","ret":"text","as":"single","x":700,"y":70,"wires":[["4ad0e46.7796d1c"]]},{"id":"b32e7821.c1dc78","type":"inject","z":"298e6055.ffac3","name":"5 sec","topic":"","payload":"","payloadType":"date","repeat":"5","crontab":"","once":false,"onceDelay":0.1,"x":400,"y":70,"wires":[["fd1711f2.7e7b4"]]}]
Quelle (es ist NICHT von mir) : https://flows.nodered.org/flow/2d3bf12a ... 20d16f754d
Zugegeben - von hinten durch die Brust ins Auge, aber es funktioniert:
[{"id":"4ad0e46.7796d1c","type":"function","z":"298e6055.ffac3","name":"parse http","func":"acPowerCurrent = parseInt(msg.payload[14].replace(/([^a-z0-9]+)/gi, ''));\ntotalEnergy = parseInt(msg.payload[17].replace(/([^A-Z0-9]+)/gi, ''));\ndailyEnergy = parseInt(msg.payload[26].replace(/([^a-z0-9]+)/gi, ''))/100;\nstring1voltage = parseInt(msg.payload[56].replace(/([^a-z0-9]+)/gi, ''));\nstring1current = parseInt(msg.payload[65].replace(/([^a-z0-9]+)/gi, ''))/100;\nstring2voltage = parseInt(msg.payload[82].replace(/([^a-z0-9]+)/gi, ''));\nstring2current = parseInt(msg.payload[91].replace(/([^a-z0-9]+)/gi, ''))/100;\nline1voltage = parseInt(msg.payload[59].replace(/([^a-z0-9]+)/gi, ''));\nline1power = parseInt(msg.payload[68].replace(/([^a-z0-9]+)/gi, ''));\nline2voltage = parseInt(msg.payload[85].replace(/([^a-z0-9]+)/gi, ''));\nline2power = parseInt(msg.payload[94].replace(/([^a-z0-9]+)/gi, ''));\nline3voltage = parseInt(msg.payload[111].replace(/([^a-z0-9]+)/gi, ''));\nline3power = parseInt(msg.payload[120].replace(/([^a-z0-9]+)/gi, ''));\nstatus = msg.payload[32].replace(/\\r?\\n|\\r/g, '').replace(/\\s/g, \"\");\n\n\nif (Number.isNaN(acPowerCurrent) === true){\n acPowerCurrent = 0;\n}\nif (Number.isNaN(totalEnergy) === true){\n totalEnergy = -1;\n}\nif (Number.isNaN(dailyEnergy) === true){\n dailyEnergy = 0;\n}\nif (Number.isNaN(string1voltage) === true){\n string1voltage = 0;\n}\nif (Number.isNaN(string1current) === true){\n string1current = 0;\n}\nif (Number.isNaN(string2voltage) === true){\n string2voltage = 0;\n}\nif (Number.isNaN(string2current) === true){\n string2current = 0;\n}\nif (Number.isNaN(line1voltage) === true){\n line1voltage = 0;\n}\nif (Number.isNaN(line1power) === true){\n line1power = 0;\n}\nif (Number.isNaN(line2voltage) === true){\n line2voltage = 0;\n}\nif (Number.isNaN(line2power) === true){\n line2power = 0;\n}\nif (Number.isNaN(line3voltage) === true){\n line3voltage = 0;\n}\nif (Number.isNaN(line3power) === true){\n line3power = 0;\n}\n\nmsg.payload = {\n \"acPowerCurrent\" : acPowerCurrent,\n \"totalEnergy\" : totalEnergy,\n \"dailyEnergy\" : dailyEnergy,\n \"status\" : status,\n \"string1voltage\" : string1voltage,\n \"string1current\" : string1current,\n \"string2voltage\" : string2voltage,\n \"string2current\" : string2current,\n \"line1voltage\" : line1voltage,\n \"line1power\" : line1power,\n \"line2voltage\" : line2voltage,\n \"line2power\" : line2power,\n \"line3voltage\" : line3voltage,\n \"line3power\" : line3power\n}\n\nglobal.set(\"kostal\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"x":860,"y":70,"wires":[["c4a0537.01675b"]]},{"id":"fd1711f2.7e7b4","type":"http request","z":"298e6055.ffac3","name":"kostal","method":"GET","ret":"txt","paytoqs":false,"url":"http://192.168.1.99/index.fhtml","tls": ... :70,"wires":[["3f445786.6a93b8"]]},{"id":"3f445786.6a93b8","type":"html","z":"298e6055.ffac3","name":"","property":"payload","outproperty":"payload","tag":"td","ret":"text","as":"single","x":700,"y":70,"wires":[["4ad0e46.7796d1c"]]},{"id":"b32e7821.c1dc78","type":"inject","z":"298e6055.ffac3","name":"5 sec","topic":"","payload":"","payloadType":"date","repeat":"5","crontab":"","once":false,"onceDelay":0.1,"x":400,"y":70,"wires":[["fd1711f2.7e7b4"]]}]
Quelle (es ist NICHT von mir) : https://flows.nodered.org/flow/2d3bf12a ... 20d16f754d
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste