NEWS
InfluxDB auslesen (Enpal)
-
@ktsalti sagte in InfluxDB auslesen (Enpal):
Welche Möglichkeit gibt es eine "fremde" InfluxDB anzuzapfen um die Daten in iobroker zu verwenden?
Ich habe den Link nur überflogen, ist es so, dass du im Moment die Daten mit NodeRed von der Website ausliest und das jetzt durch eine lokale Lösung ersetzen möchtest? Läuft die Influxdb lokal?
Wenn du sowieso schon Node Red im Einsatz hast, könntest du die Influx-Nodes verwenden, um die DB abzufragen und die Werte nach ioBroker zu schieben.
Nachteil der Lösung wird aber bleiben, dass du die Werte nicht in Echtzeit siehst, sondern in regelmäßigen Abständen abfragst. Ich könnte mir vorstellen, dass da keine zu kurzen Intervalle zulässig sind. -
Hi,
@berndsolar13
Bezüglich Enpal - der Preis war im Mittefeld und mittlerweile biete Sie die Anlagen als "Kauf auf raten" anstatt der Miete an. Das war für uns schon sehr attraktiv. Außerdem war die Anlage in 7 Wochen auf dem Dach und im Netz.Der Wechselrichter ist im Netzwerk und eine eine Stromzange wurde auch verbaut. Diese Daten sehe ich auch über Enpal-App oder auch die Lokale Website welche ich aktuell über NodeRed abfrage.
@Marc-Berg
Ja, die Influxdb läuft lokal in meinen Netzwerk auf der "Enpal-Box". Node Red habe ich auch erst seit 14 Tagen im Einsatz und fuchse mich langsam rein. Danke für den Hinweis mit den Influx-Nodes. Ich werde mich mal in der Richtung einlesen
Cool wäre natürlich ein fertiger AdapterViele Grüße
Marcus -
@ktsalti sagte in InfluxDB auslesen (Enpal):
Danke für den Hinweis mit den Influx-Nodes. Ich werde mich mal in der Richtung einlesen
Im einfachsten Fall reicht so ein Mini-Flow für einen Wert.
Wenn es mehr Werte werden, könnte man diesen Duplizieren oder alternativ mit einer globaleren Abfrage und ein wenig Aufbereitungslogik arbeiten.
Cool wäre natürlich ein fertiger Adapter
Den wirst du programmieren müssen ...
-
@ktsalti sagte in InfluxDB auslesen (Enpal):
Der Wechselrichter ist im Netzwerk und eine eine Stromzange wurde auch verbaut.
wenn du den Wechselrichter kennst, brauchst ja nur drauf schauen, und deren IP Adresse hast, siehst du ja in der Fritzbox, dann hast du doch "normal" alles was du brauchst.
Jetzt musst du nur noch schauen, ob es dafür einen Adapter gibt, oder eine andere Lösung.
Als erstes würde ich die IP Adresse des Wechselrichters aufrufen.
Falls Enpal das Standard Passwort nicht geändert hat, solltest du so lokal die Daten abfragen können. Denn irgendwie kommen die ja von deinem Gerät auch zum Enpal Server.Also Wechselrichter + IP raus finden, und aufrufen, und dann nach einer Möglichkeit suchen, die Daten in den Iobroker zu bekommen. Lokal ist immer besser, wie der Umweg über die Cloud..
-
Vielen Dank!
Ich werde es so probieren und wenn alles auch klappt den Eintrag duplizieren. So ist es ja auch bei der aktuellen Abfrage der internen Website. Find es halt nur besser, wenn ich die DB abfrage anstatt eine Website auszulesen. Brauch dafür nur mal ein paar ruhige Stunden ohne Frau im Haus.@berndsolar13
Die DB ist lokal im Netzwerk und ich gehe nicht über die Cloud. Da ich in der DB noch mehr Daten habe (Akku, Wallbox, Wechselrichter, Stromverbrauch) möchte ich gar nicht weiter versuchen direkt auf die Wallbox zu gehen. Außerdem hat Enpal auch das Passwort geändert
Trotzdem Danke für die Idee - manchmal sieht man ja den Wald vor lauter Bäumen nicht -
Vielen Dank nochmal - hat ne ganze Weile gedauert eh ich dahinter gestiegen bin, aber es hat jetzt geklappt!
Ich habe die ersten 2x Werte aus der influxdb in iobroker und der Rest ist nurnoch Fleißarbeit. Ich muss nur mal sehen, welche Werte ich wirklich brauche, bzw. wie sie in der DB heißen -
@ktsalti hey erstmal ich bin auf deinen Post gestoßen und bin auch vor dem selben Problem, kannst du mir evtl. Sagen wie man die influxdb anspricht über ioBroker?
Über eine kleine Hilfestellung wäre ich echt dankbar
-
Ich habe mein Node-Red-Script einmal exportiert. Schau mal ob du damit klar kommst.
Bin da selber kein Profi - aber es funktioniert -
Vielen Dank
Werde wahrscheinlich auch die Erweiterung für node installieren müssen oder? Da er bei mir den influx Befehl nicht kennt
Aber ich denke ich komme klar damit ansonsten Frage ich noch ein paar Mal doof
Vielen dank
-
@conector777
Ja, ich glaub die haben ich damals auch installiert.
Wenn man das nur einmal macht und jetzt läuft es einfach so, vergisst man das es wieder -
@conector777 Falls Du noch nicht weiter bist, hätte ich noch ein paar Tipps. Ich war jetzt erfolgreich beim Zugriff auf die Influxdb in der Enpal Box.
Als erstes habe ich den Influxdb Adapter installiert und für den Zugriff auf Enpal konfiguriert. Alle notwendigen Parameter findet man auf der Webseite Seiner Enpal Box.
Als nächstes habe ich ein Javascript mit Blockly gebastelt, um gezielt einzelne Werte zu holen und diese als Iobroker Objekt abzulegen(userdata.0). Dieses Script läuft z.B. alle 3 Minuten und schreibt immer den aktuellen Wert ins Objekt.var result, test1, test2; schedule("*/3 * * * *", async () => { result = 'Anfang'; sendTo('influxdb.0', 'query', 'from(bucket: "solar") |> range(start: -1m) |> filter(fn: (r) => r["_field"] == "Energy.Battery.Charge.Level")', async (result) => { test1 = (await jsonataExpression(result,'*[0]._value ')); }); setStateDelayed('0_userdata.0.Enpal.BatteryLevel', Math.round(test1 * 100) / 100, true, parseInt(((0) || '').toString(), 10), false); result = !''.length; sendTo('influxdb.0', 'query', 'from(bucket: "solar") |> range(start: -1m) |> filter(fn: (r) => r["_field"] == "Power.Consumption.Total")', async (result) => { test2 = (await jsonataExpression(result,'*[0]._value ')); }); console.info("influxdb.0: " + ""); setStateDelayed('0_userdata.0.Enpal.PowerConsumptionTotal', test2, true, parseInt(((0) || '').toString(), 10), false); });
Um jetzt noch eine anständige Historie zu erhalten, habe ich ein zweites Script gemacht, welches einen Trigger auf Wertänderung des Objekts setzt und bei Änderung das Ganze in eine beliebige Historien Anwendung übernimmt. In meinem Fall eine CCU.
on({ id: [].concat(['0_userdata.0.Enpal.BatteryLevel']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setStateDelayed('hm-rega.0.13211', getState('0_userdata.0.Enpal.BatteryLevel').val, false, parseInt(((0) || '').toString(), 10), false); });
Happy Coding.