Tibber Pulse Power Daten (Real Time Subscription) über Victron VenusOS auslesen und per HTTPS zur Verfügung stellen

Hallo.

Diesem Faden folgend, zu dem unser Forenmitglied @mdkell maßgeblichen Beitrag geleistet hat, hier noch einmal zusammenfassend in der Wiki erklärt, wie man sich die Live-Daten des Tibber Pulse mittels VenusOS auslesen und im eigenen Netzwerk zur Verfügung stellen kann. Unten im Text finden sich auch noch Alternativen zu diesem Ansatz.

Hier also ein Node-Red-Ansatz, der das Ganze so anfängerfreundlich wie möglich erklären soll.

- Was ist VenusOS?

VenusOS, ist das von Victron bereitgestellte OS, dass man sich auf einem RaspberryPi installieren kann. Auch die fertigen Hardwareversionen des Cerbox laufen mit VenusOS. Alles weitere dazu kann man sich mal auf Youtube anschauen oder mittels Google erlesen. Minimalanforderung ist ein RaspberryPi 2. Mit dem Pi Zero 2 habe ich eher negative Erfahrungen gemacht. Es lässt sich installieren, dabei scheint der Prozessor aber am Anschlag zu sein. Probiert's aber gerne aus, falls Ihr noch einen herumfliegen habt. Vielleicht reicht es für diese Anwendung.

- Was ist Node-red?

Node Red ist eine grafisch basierte Programmierumgebung, für die man in der Regel auch ohne Programmierkenntnisse auskommt. In der "Large" des VenosOS Version ist Node-Red enthalten. Solltet Ihr bereits VenusOS installiert haben, seid aber auch der "Normal" Version: kein Problem. Einfach in der Konsole unter Einstellungen -> Firmware umstellen auf "Large", und dann die Firmware aktualisieren. Treiber wie z.B. für das Daly BMS sollten dabei erhalten bleiben. Bei mir (Ursprungssystem 2.93) war es so.

Los geht's!

-Tibber-Nodes

Sobald VenusOS Large installiert ist, rufen wir die im Browser die Node-Red Oberfläche auf mit

https://venus.local:1881/

Anstelle von venus.local können wir natürlich auch die IP den VenusOS Gerätes angeben.

Zunächst müssen wir die Tibber Nodes hinzufügen. Das geht folgendermaßen: einfach auf die drei Striche (Einstellungen) oben rechts klicken und dann auf "Palette verwalten" klicken.

Dort wählen wir den Reiter "Installation" und suchen nach

node-red-contrib-tibber-api

Das installieren wir.

Das Ganze kann man sich in diesem Video auch noch einmal genau erklären lassen:

- Flow importieren

Hier gehen wir im Feld oben rechts auf die drei Striche (Einstellungen) und klicken auf Import.

Dort fügen wir mittels copy/paste den folgenden Text ein, der dann im Node-Red zwei fertige Flows erzeugt:

[
{
"id": "f7057bc3c95c55fe",
"type": "tibber-feed",
"z": "96cffcb4cb06b139",
"name": "Tibber-Live",
"active": true,
"apiEndpointRef": "5e8af9f09e4a2d66",
"homeId": "",
"timestamp": "1",
"power": "1",
"lastMeterConsumption": false,
"accumulatedConsumption": false,
"accumulatedProduction": false,
"accumulatedConsumptionLastHour": false,
"accumulatedProductionLastHour": false,
"accumulatedCost": false,
"accumulatedReward": false,
"currency": false,
"minPower": false,
"averagePower": false,
"maxPower": false,
"powerProduction": false,
"minPowerProduction": false,
"maxPowerProduction": false,
"lastMeterProduction": false,
"powerFactor": false,
"voltagePhase1": false,
"voltagePhase2": false,
"voltagePhase3": false,
"currentL1": "1",
"currentL2": "1",
"currentL3": "1",
"signalStrength": false,
"x": 200,
"y": 2500,
"wires": [
[
"88cc0f4960d02fde"
]
],
"icon": "node-red/feed.svg"
},
{
"id": "88cc0f4960d02fde",
"type": "function",
"z": "96cffcb4cb06b139",
"name": "extractpower",
"func": "var newmsg = {payload: msg.payload.power};\nglobal.set(\"tibber.power\",newmsg);\nreturn newmsg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 410,
"y": 2500,
"wires": [
[
"25aa143c52267d04"
]
]
},
{
"id": "25aa143c52267d04",
"type": "debug",
"z": "96cffcb4cb06b139",
"name": "debug 3",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 660,
"y": 2500,
"wires": []
},
{
"id": "edeb5b596a7cec77",
"type": "http in",
"z": "96cffcb4cb06b139",
"name": "",
"url": "/api",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 200,
"y": 2680,
"wires": [
[
"7bf4ca40c5400086"
]
]
},
{
"id": "7bf4ca40c5400086",
"type": "function",
"z": "96cffcb4cb06b139",
"name": "json",
"func": "msg.payload = {gridpower: global.get('tibber.power')};\nmsg.headers = {};\nmsg.headers['content-type'] = 'application/json';\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 350,
"y": 2680,
"wires": [
[
"7883d17ca80f0090"
]
]
},
{
"id": "7883d17ca80f0090",
"type": "http response",
"z": "96cffcb4cb06b139",
"name": "http Response",
"statusCode": "",
"headers": {},
"x": 560,
"y": 2680,
"wires": []
},
{
"id": "5e8af9f09e4a2d66",
"type": "tibber-api-endpoint",
"queryUrl": "https://api.tibber.com/v1-beta/gql",
"feedConnectionTimeout": "30",
"feedTimeout": "60",
"queryRequestTimeout": "30",
"name": "TibberData"
}
]

Dann sollte es in der Node Red Oberfläche so aussehen:

Der erste Flow holt sich selbstständig die Tibberdaten und gibt sie an eine globale Variable.

Der zweite Flow stellt die globale Variable in Form eines Json-Formates über https zur Verfügung.

- Flow konfigurieren

Nun klicken wir einmal auf den blauen Tibber Node und fügen unsere HomeID ein. An diese kommen wir, wenn wir auf die Seite

https://developer.tibber.com/explorer

gehen.

Dort müssen wir uns mit unseren Logindaten anmelden. Dann klicken wir dort auf Api Explorer und wählen im Pulldown Menü ganz rechts die RealTimeSubscription.

Hier sehen wir etwas wie

subscription{
liveMeasurement(homeId:"abc123"){
timestamp
power
accumulatedConsumption
accumulatedCost
currency
minPower
averagePower
maxPower
}
}

Dort, wo hier abc123 steht, findet Ihr bei Euch die Home-ID. Den Token brauchen wir hier übrigens nicht. Den brauchen wir für die anderen Abfragen wie Energiepreise etc. Der Token gilt eher generell für uns. Da wir aber als Tibber-Kunde auch mehr als einen Zähler haben können, also mehr als ein "Zuhause", brauchen wir in diesem Falle die spezielle Home-ID.

Diese kopieren wir uns und fügen sie in das Feld "HomeID" ein, nachdem wir den blauen Tibber-Node angeklickt haben.

Dann auf "Fertig" drücken. Anschließend müssen wir die Änderungen noch "speichern". Das machen mir mit dem roten Button "Übernahme / deploy". Der ist immer dann rot, wenn es Änderungen gibt.

- Daten auslesen

Jetzt sollten wir die aktuelle Tibber Pulse Daten im Debug Fenster eintrudeln sehen. Dazu klicken wir auf den grünen Debug-Node und lassen und die Debug-Nachrichten ausgeben, indem wir den Debug-Reiter anklicken:

Hier sehen wir die extrahierten Power-Werte durchrauschen. Diese kommen so alle 2 bis 3 Sekunden. Unter dem blauen Tibber Node sollte übrigens "connected" stehen. Wenn dort längere Zeit "connecting" steht, könnte es einen Fehler mit der Verbindung zu Tibber geben. Dazu vielleicht mal in die App schauen, ob im Tibber Pulse Power-Up auch die aktuellen Werte zu sehen sind.

- Abfrage im Browser

Um die aktuellen Werte nun im Netz zu sehen, geben wir im Browser als URL ein:

https://venus.local:1881/api

Das Ganze geht seit einiger Zeit ausschließlich mit https. D.h. wir müssen dem Browser eine Ausnahmegenehmigung erteilen und ggf. die Sicherheitsanfragen unter "Erweitert" ignorieren.

Dann sollten wir das folgende sehen:

{"gridpower":{"payload":139.8,"_msgid":"defa1591d322729f"}}

oder wie im Firefox:

- Abfrage mit Python

Wer sich die Werte mit Python ziehen möchte, der kann das mit diesem kleinen Skript mal ausprobieren:

import requests
import json
requests.packages.urllib3.disable_warnings()
#### Tibber Pulse über Node-Red ########################################################
try:
url = "https://venus.local:1881/api"
TP = requests.get(url, verify=False, timeout=2)
TP1 = TP.text
TP2  = json.loads(TP1)
TibberPower = TP2['gridpower']['payload']
except:
print("No Tibber Data")
print("Tibber Pulse:")
print(str(TibberPower)) 

Fragen hierzu gerne im eingangs erwähnten Faden stellen. Hilfreiche Informationen füge ich dann hier gerne nach.

- Alternativen

Im eingangs schon erwähnten Ursprungsfaden hat unser Forenmitglied @luchtbewohner auch gleich zwei Alternativen entwickelt.

  • Zum einen ein Python-Skript, das sich im Hintergrund die Daten direkt holt und der Umgebung zur Verfügung stellt. Das Problem das ich damit hatte war, das insbesondere bei einem Abbruch und Neustart der Routine die Fehlermeldung "Too man connections" auftrat und sich das entweder erst nach Längerem selbst wieder gab, oder durch einen Start der Real Time Subscription im API Explorer beheben ließ.

Hier der Link zur Github Page.

  • Die zweite Alternative ist ein Docker-Ansatz den ich noch nicht selbst ausprobiert habe. Sieht aber auch vielversprechend aus. Hier auch der Link zur entsprechenden Github Page.

Viel Spaß...

2 „Gefällt mir“

Ich verstehe das nicht richtig ich brauche noch ein 2 pi um das Venus os zu installieren und da bei Achten das man nodered mit bei hat die Daten einpflegen und diese Daten an mein Host Raspi schicken oder wie soll ich es verstehen ich will ja die soll werte dan als 0watt über nodered an mein d1 mini schicken der wiederum mein Soyosorce sagt was er einspeisen soll