Tibber-Livestream lokal auslesen

Begonnen von gvzdus, 26 April 2023, 23:45:29

Vorheriges Thema - Nächstes Thema

gvzdus

Manche (wie ich) taten sich ja schwer, zum Tibber Pulse zu wechseln, weil es mit dem OBIS-Modul und z.B. einem IR-Lesekopf schon so sauber und stabil läuft. Für diese Nutzer habe ich jetzt den ersten Wurf einer Lösung fertig. Ich hoffe, dass Tibber diese Möglichkeit nicht "zu macht", ansonsten wird sie nämlich schön und ohne Cloud parallel zur "normalen" Tibber-Nutzung funktionieren.

Die Bridge des Tibber Pulse kann nämlich so konfiguriert werden, dass der initial nur zur Konfiguration verwendete Webserver in der Bridge dauerhaft an bleibt. Und hier lassen sich unter einer URL dann die jüngsten, binären SML-Daten des Lesekopfes auslesen. Das OBIS-Modul habe ich so angepasst, dass es nicht nur über "plain"-TCP oder einen Serial-Port abfragen kann, sondern auch per HTTP.

Folgende Schritte sind nötig:

Webserver auf Tibber-Bridge dauerhaft aktivieren
  • Das Passwort auf der Bridge notieren (steht beim QR-Code), z.B. ABCD-AA11
  • Die Bridge rausziehen, vielleicht 1 Sekunde einstecken, wieder herausziehen und einstecken
  • Nun sollte der Ring grün leuchten, wie am Anfang (nein, Ihr habt damit keine Settings verloren!)
  • Am Laptop/Handy das WLAN "TibberBridge" suchen, WPA-Key ist das oben genannte Passwort
  • Nach erfolgter Verbindung http://10.133.70.1/params/ aufrufen
  • Username "admin", Passwort wie oben angeben
  • Ganz unten das Attribut "webserver_force_enable" auf "true" setzen (eintippen!) und "Store params to flash"
  • Nochmal aus und einstecken, jetzt sollte die Pulse-Bridge wieder "normal" hochkommen


Testen
  • Die IP der Pulse-Bridge im LAN identifizieren, "IP" im Folgenden
  • Auf einer Kommandozeile testen:

curl -u admin:PASSWORT http://IP/data.json?node_id=1 | hexdumpDas Kommando sollte klappen, und im Hexdump etwas mit "1b1b1b1b" am Anfang erscheinen.

In FHEM aktivieren
  • define zaehlername OBIS http://ip/data.json?node_id=1
  • Das Attribut "httpAuthorization" auf "admin:PASSWORT" setzen
  • Das Attribut "pollingMode" auf "on", das Attribut "interval" z.B. auf 1 für sekündlich setzen
  • Seite ggf. neu laden, Freude? Wenn nein, FHEM-Log kontrollieren und hier meckern.

Erst einmal checke ich das Modul noch NICHT ein, dafür ist es erst ein paar wenige Minuten alt, die Doku fehlt noch, ich hätte gerne 1-2 positive Rückmeldungen, u.s.w.
Daher bitte per Hand das u.a. Modul einspielen!

Das Modul sollte ab morgen, 28.4., per Update verfügbar sein, bis dahin siehe Anhang.

Credits: https://blog.wyraz.de/allgemein/a-brief-analysis-of-the-tibber-pulse-bridge/ und an Sonicmaster, der mich darauf hinwies

xerion

Einrichtung hat nach der Beschreibung Super funktioniert. Ich Teste weite und berichte.
Ich würde mich  freuen, wenn du meinen Einladungscode für Tibber, der Stromanbieter, der dir hilft, deinen Stromverbrauch zu verstehen und zu reduzieren, nutzt: https://invite.tibber.com/5fc08jbs. So bekommen wir beide 50 Euro und 100 % Ökostrom / https://geld-fuer-eauto.de/ref/334561880

octek0815

Funktioniert ohne Problem.

Vielen Dank!

xerion

Bei mir läuft es eigentlich auch sehr gut. Habe nur ein paar Logeinträge gefunden wo es immer mal wieder timeouts gibt.
Ich nutze allerdings aktuell beim Test 1 Sekunde fürs Polling.

2023.05.01 14:49:02 1:  OBIS (Tibber_Pulse) - Error read from http://192.168.178.158:80 timed out
2023.05.01 14:49:04 1:  OBIS (Tibber_Pulse) - Error connect to http://192.168.178.158:80 timed out
Ich würde mich  freuen, wenn du meinen Einladungscode für Tibber, der Stromanbieter, der dir hilft, deinen Stromverbrauch zu verstehen und zu reduzieren, nutzt: https://invite.tibber.com/5fc08jbs. So bekommen wir beide 50 Euro und 100 % Ökostrom / https://geld-fuer-eauto.de/ref/334561880

MarkusN

Bei mir läuft es auch. Ich wundere mich nur über die Formatierung von total_consumption und total_consumption, angezeigt wird beispielsweise "10441738.7", wohingegen der richtige Zählerstand "10441.738" beträgt.

gvzdus

Ja, die gängige Einheit sind Wh, nicht kWh bei SML. Oder es war halt im OBIS-Modul schon immer so :-)

mivola

#6
Zitat von: gvzdus am 26 April 2023, 23:45:29Die Bridge des Tibber Pulse kann nämlich so konfiguriert werden, dass der initial nur zur Konfiguration verwendete Webserver in der Bridge dauerhaft an bleibt. Und hier lassen sich unter einer URL dann die jüngsten, binären SML-Daten des Lesekopfes auslesen. Das OBIS-Modul habe ich so angepasst, dass es nicht nur über "plain"-TCP oder einen Serial-Port abfragen kann, sondern auch per HTTP.

Folgende Schritte sind nötig:

Webserver auf Tibber-Bridge dauerhaft aktivieren
  • Das Passwort auf der Bridge notieren (steht beim QR-Code), z.B. ABCD-AA11
  • Die Bridge rausziehen, vielleicht 1 Sekunde einstecken, wieder herausziehen und einstecken
  • Nun sollte der Ring grün leuchten, wie am Anfang (nein, Ihr habt damit keine Settings verloren!)
  • Am Laptop/Handy das WLAN "TibberBridge" suchen, WPA-Key ist das oben genannte Passwort
  • Nach erfolgter Verbindung http://10.133.70.1/params/ aufrufen
  • Username "admin", Passwort wie oben angeben
  • Ganz unten das Attribut "webserver_force_enable" auf "true" setzen (eintippen!) und "Store params to flash"
  • Nochmal aus und einstecken, jetzt sollte die Pulse-Bridge wieder "normal" hochkommen


Testen
  • Die IP der Pulse-Bridge im LAN identifizieren, "IP" im Folgenden
  • Auf einer Kommandozeile testen:

curl -u admin:PASSWORT http://IP/data.json?node_id=1 | hexdumpDas Kommando sollte klappen, und im Hexdump etwas mit "1b1b1b1b" am Anfang erscheinen.


Danke für die Beschreibung! Das Auslesen der binären SML-Daten hat gut geklappt!
Jetzt wird es evtl etwas offtopic: ich nutze kein FHEM sondern NodeRed - kennt jmd eine Möglichkeit die Daten dort auszulesen? Evtl helfen mir schon die Sourcen des FHEM OBIS Moduls?

EDIT: als Alternative habe ich jetzt https://github.com/micw/tibber-pulse-reader#running--docker am Laufen und lasse mir die Daten als MQTT-Nachricht schicken. Das scheint erstmal ganz gut zu funktionieren ...

Danke und VG
Micha

Torxgewinde

Vielen Dank für das OBIS SML Modul. Es klappt soweit ganz gut, allerdings:

Im Log taucht bei mir sehr häufig "2nd TL-byte != 0, reserved according spec". Bin ich der Einzige damit?

gvzdus

Es wird sehr wahrscheinlich an Deinem Zähler und weniger wahrscheinlich am Pulse liegen.

Torxgewinde

#9
Ok, ich kann also mit halbwegs gutem Gewissen "attr Stromzaehler verbose 2" setzen? Sollte man an dem CRC Error noch was machen, oder ist das egal?

Die mir wichtigsten Werte "total_consumption", "total_feed" und "power" sind vorhanden, der Rest sieht hier so aus:
Internals:
   CFGFN     
   CRC_Errors 6
   DEF        http://TIBBER_IP/data.json?node_id=1
   DeviceName http://TIBBER_IP/data.json?node_id=1
   FUUID      123...5678
   MeterType  SML
   NAME       Stromzaehler
   NEXT       2023-05-05 18:39:00
   NR         591
   STATE      -5 W
   TYPE       OBIS
   eventCount 184
   READINGS:
     2023-05-05 18:38:00   1.0.0.2.0.0     1.03
     2023-05-05 18:38:00   1.0.14.7.0.255  49.9 Hz
     2023-05-05 18:38:00   1.0.81.7.1.255  123 var
     2023-05-05 18:38:00   1.0.81.7.15.255 189 var
     2023-05-05 18:38:00   1.0.81.7.2.255  242 var
     2023-05-05 18:38:00   1.0.81.7.26.255 352 var
     2023-05-05 18:38:00   1.0.81.7.4.255  210 var
     2023-05-05 18:38:00   1.0.96.1.0.255  ABCDE
     2023-05-05 18:38:00   1.0.96.90.2.1   ABCD
     2023-05-05 18:38:00   ManufID2        P1.01.02
     2023-05-05 18:38:00   current_L1      1.56 A
     2023-05-05 18:38:00   current_L2      1.52 A
     2023-05-05 18:38:00   current_L3      1.6 A
     2023-05-05 18:38:00   power           -5 W
     2023-05-05 18:38:00   power_L1        -299 W
     2023-05-05 18:38:00   power_L2        -345 W
     2023-05-05 18:38:00   power_L3        638 W
     2023-05-05 18:38:00   total_consumption 333543.6 Wh
     2023-05-05 18:38:00   total_feed      1542369.9 Wh
     2023-05-05 18:38:00   voltage_L1      229.8 V
     2023-05-05 18:38:00   voltage_L2      230.8 V
     2023-05-05 18:38:00   voltage_L3      229 V
   helper:
     BUFFER     
     DIRECTIONSUM <
     EoM        1
     HTTPAUTH   Authorization: Basic BLABLABLA

     LASTDATA   ...BINÄRE DATEN...
     LastPacketTime 1683304680.16297
     NETDEV     0
     SPEED      5
     TRIGGERTIME 1683304740
     Channels:
     DEVICES:
       
       60
       
     RULECACHE:
       1-0:0.2.0*0 unknown
       1-0:1.8.0*255 Counter
       1-0:14.7.0*255 Channels
       1-0:16.7.0*255 Channels
       1-0:2.8.0*255 Counter
       1-0:31.7.0*255 Channels
       1-0:32.7.0*255 Channels
       1-0:36.7.0*255 Channels
       1-0:51.7.0*255 Channels
       1-0:52.7.0*255 Channels
       1-0:56.7.0*255 Channels
       1-0:71.7.0*255 Channels
       1-0:72.7.0*255 Channels
       1-0:76.7.0*255 Channels
       1-0:81.7.1*255 Channels
       1-0:81.7.15*255 Channels
       1-0:81.7.2*255 Channels
       1-0:81.7.26*255 Channels
       1-0:81.7.4*255 Channels
       1-0:96.1.0*255 unknown
       1-0:96.50.1*1 ManufID2
       1-0:96.50.1*4 ManufID2
       1-0:96.90.2*1 unknown
       1-0:97.97.0*0 unknown
       255-255:255.255.255*255 unknown
     directions:
Attributes:
   alignTime  00:00
   event-on-change-reading .*
   group      Strom
   httpAuthorization admin:BLABLABLA
   interval   60
   pollingMode on
   stateFormat power
   unitReadings on
   verbose    2

gvzdus

Mir fallen auch viele CRC-Fehler auf, seit ich nicht mehr "OBIS-IR-Lesekopf direkt", sondern den Pulse auswerte. Ich bin nach 8 Tagen auf 577 CRC-Fehlern: Das entspricht etwa 0,1% der gelesenen Pakete. Ich vermute, dass da einfach die Hardware Schönheitsfehler hat, z.B. mal ein Byte verliert. Da die Fehler aber mit 1:65536 Wahrscheinlichkeit erkannt werden (und im Zufallsfall vermutlich das Paket trotzdem nicht ausgewertet werden würde), mache ich mir deswegen keine Gedanken.

Loglevel 2 kannst Du problemlos setzen. Übrigens sehr verbose, Dein Zähler :-).

Torxgewinde

#11
Topp, danke!

Ich habe mir noch einige UserReadings dazu erstellt (noch in Erprobung):
Leistung_Stromnetz_Mittelwert:power.* { ## Bezug/Einspeisung in das Netz
    sprintf("%.1f", movingAverageT("$NAME", "power", 600));
},
ImportZaehler:total_consumption.* {
    round(ReadingsNum($NAME, "total_consumption", 0) / 1000, 0);
},
Energie_Import_heute {
    ReadingsNum($NAME, "total_consumption", 0) - ReadingsNum($NAME, "offset_import", 0);
},
Energie_Import_gestern {
    my $LastUpdateDay = strftime("%d", localtime(time_str2num(ReadingsTimestamp($NAME, "Energie_Import_gestern", undef))));
    my $NowDay = strftime("%d", localtime());

    if ($LastUpdateDay ne $NowDay) {
        return ReadingsNum($NAME, "Energie_Import_heute", 0);
    }
   
    return;
},
ExportZaehler:total_feed.* {
    round(ReadingsNum($NAME, "total_feed", 0) / 1000, 0);
},
Energie_Export_heute {
    ReadingsNum($NAME, "total_feed", 0) - ReadingsNum($NAME, "offset_export", 0);
},
Energie_Export_gestern {
    my $LastUpdateDay = strftime("%d", localtime(time_str2num(ReadingsTimestamp($NAME, "Energie_Export_gestern", undef))));
    my $NowDay = strftime("%d", localtime());

    if ($LastUpdateDay ne $NowDay) {
        return ReadingsNum($NAME, "Energie_Export_heute", 0);
    }
   
    return;
},
offset_export {
    my $LastUpdateDay = strftime("%d", localtime(time_str2num(ReadingsTimestamp($NAME, "offset_export", undef))));
    my $NowDay = strftime("%d", localtime());

    if ($LastUpdateDay ne $NowDay) {
        return ReadingsNum("$name", "total_feed", undef);
    }
   
    return;
},
offset_import {
    my $LastUpdateDay = strftime("%d", localtime(time_str2num(ReadingsTimestamp($NAME, "offset_import", undef))));
    my $NowDay = strftime("%d", localtime());

    if ($LastUpdateDay ne $NowDay) {
        return ReadingsNum("$name", "total_consumption", undef);
    }
   
    return;
}

Ich warte jetzt auf Mitternacht um morgen dann zu schauen, ob das auch so korrekt mit dem Werten zum Tageswechsel übernommen wird.

sk1

Gerade in 5 min Pulse + fhem eingerichtet...einfach nur super.

@gvzdus Herzlichen Dank für das Modul.
Hier ein Einladungscode für Tibber, der Stromanbieter, der dir hilft, deinen Stromverbrauch zu verstehen und zu reduzieren: https://invite.tibber.com/ah279una. Du erhältst 100% Ökostrom und hast eine Kündigungsfrist von 2 Wochen. Probiere es aus und wir erhalten beide 50 € Bonus für den Tibber-Store

dennisk

Hallo zusammen,

ich würde auch gerne den Tibber Pulse mit FHEM verwenden. Ich habe diesen so eingerichtet, dass die Tibber Bridge die vom IR-Kopf gelesenen Werte an meinen eigenen MQTT-Server (in diesem Fall MQTT2-Server in FHEM) überträgt. Damit erhalte ich aber als Message Body die SML-Nachricht im HEX-Format. Nun würde ich die Nachricht gerne vom OBIS v2 Modul verarbeiten lassen. Bisher habe ich aber keine Idee, wie ich das anstellen könnte. Gibt es vielleicht schon eine eingebaute Möglichkeit, dass OBIS v2 auf die MQTT-Nachrichten reagiert und diese auswertet? Oder müsste die notwendige Funktionalität erst noch eingebaut werden? Oder gibt es vielleicht einen Umweg?
Aktuell gehe ich den Umweg über das schon genannte Projekt https://github.com/micw/tibber-pulse-reader#running--docker. Wenn OBIS v2 das direkt könnte, würde der zusätzliche Docker-Container wieder wegfallen.

Mir fehlt leider aktuell die Zeit, mich selbst reinzuarbeiten. Ich wüsste auch gar nicht, wo ich ansetzen müsste, eher in OBIS v2 oder vielleicht sogar an anderer Stelle in FHEM, vielleicht DevIO?

Danke auf jeden Fall für die bisherige Umsetzung für den Tibber Pulse und ich würde mich über Ideen und/oder sogar die Umsetzung freuen.

xerion

Zitat von: dennisk am 30 Mai 2023, 18:18:12Hallo zusammen,

ich würde auch gerne den Tibber Pulse mit FHEM verwenden. Ich habe diesen so eingerichtet, dass die Tibber Bridge die vom IR-Kopf gelesenen Werte an meinen eigenen MQTT-Server (in diesem Fall MQTT2-Server in FHEM) überträgt. Damit erhalte ich aber als Message Body die SML-Nachricht im HEX-Format. Nun würde ich die Nachricht gerne vom OBIS v2 Modul verarbeiten lassen. Bisher habe ich aber keine Idee, wie ich das anstellen könnte. Gibt es vielleicht schon eine eingebaute Möglichkeit, dass OBIS v2 auf die MQTT-Nachrichten reagiert und diese auswertet? Oder müsste die notwendige Funktionalität erst noch eingebaut werden? Oder gibt es vielleicht einen Umweg?
Aktuell gehe ich den Umweg über das schon genannte Projekt https://github.com/micw/tibber-pulse-reader#running--docker. Wenn OBIS v2 das direkt könnte, würde der zusätzliche Docker-Container wieder wegfallen.

Mir fehlt leider aktuell die Zeit, mich selbst reinzuarbeiten. Ich wüsste auch gar nicht, wo ich ansetzen müsste, eher in OBIS v2 oder vielleicht sogar an anderer Stelle in FHEM, vielleicht DevIO?

Danke auf jeden Fall für die bisherige Umsetzung für den Tibber Pulse und ich würde mich über Ideen und/oder sogar die Umsetzung freuen.

Hallo ich habe noch nicht ganz verstanden, warum du den Weg von der Tibber Bridge über MQTT nach FHEM eingeschlagen hast und es nicht so machst wie in diesem Beitrag #1 geschrieben. Lokal auslesen und direkt im OBIS Modul die Tibber Bridge einstellen. Dann hast du doch das was du willst oder?
Ich würde mich  freuen, wenn du meinen Einladungscode für Tibber, der Stromanbieter, der dir hilft, deinen Stromverbrauch zu verstehen und zu reduzieren, nutzt: https://invite.tibber.com/5fc08jbs. So bekommen wir beide 50 Euro und 100 % Ökostrom / https://geld-fuer-eauto.de/ref/334561880