Tibber-Livestream lokal auslesen

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

Vorheriges Thema - Nächstes Thema

gvzdus

Verstehe ich auch so: Vermutlich ist ja die Tibber Bridge bei ihm (Dir) schon auf "Dauer-HTTP-Server" eingestellt. Also einfach beim 2. Block aus Beitrag #1 weitermachen - dem Test - und fertig.
Irgendein Zusatzmodul im Docker-Container brauchst Du nicht, das macht das OBIS-Modul gleich mit.

dennisk

Hallo @xerion,@gvzdus,

danke für eure Rückmeldungen. Ihr habt natürlich recht, es geht auch mittels des vorgeschlagenen Pollings. Mich stört daran nur, dass das eigentlich für diese Zwecke vorgesehene Messaging-Protokoll MQTT dann nicht verwendet wird und ich den Tibber noch zusätzlich mit einem Polling belaste. Theoretisch ließe sich der Webserver auf dem verbauten ESP32 dann auch wieder abschalten bzw. wieder so einstellen, dass er eben nur gestartet wird, wenn die Tibber Bridge im AP-Modus hochfährt. Und ich könnte mir vorstellen, dass der Use Case auch für die diversen ESP-Selbstbau-Leseköpfe mit Tasmota eine Alternative sein könnte, d.h. ich kann die SML-Auswertung dem OBIS-Modul überlassen und benötige kein entsprechendes Skript mehr für die Tasmota-basierte Auswertung. Ich hoffe, das macht es ein wenig klarer?

gvzdus

Ja, jetzt verstanden :-)
Du hast also die Variante "MQTT-Proxy-Server" gewählt, und lässt die Bridge den MQTT-Stream nicht direkt in die AWS schicken, sondern über einen lokalen Proxy? Bei der Möglichkeit hätte ich persönlich als Tibber viel mehr dagegen als gegen einen HTTP-Server, weil es die Option zur Datenmanipulation quasi vorbereitet. Aber sei es drum.

Ich habe mal schnell was gebastelt (siehe Anhang), dass Du mit "set <obisdevice> data <sml in hex>" Daten einfüttern kannst. Anbei die Variante. Also:
defmod ot OBIS noneund dann jeweils Hex so einkippen:
set ot OBIS data 1b1b1b1b....1b1b1b1b1a.....
Hilft das? Wie sehen denn die MQTT-Nachrichten aus? Hex oder Binär?

gvzdus

P.S. Kann sein, dass ich mich jetzt völlig verhaue mit der Sichtbarkeit von Modul-Funktionen außerhalb ("Perl-Basics"). ABER:

Du musst eigentlich nur OBIS_Parse mit Hash und den binären Inputdaten aufrufen, dann wird geparsed und in das Device dekodiert. Also nehmen wir mein Beispiel mit einem OBIS-Device "ot". Dann solltest Du in einem Notify, dass auf ein MQTT-Topic triggert, so etwas schreiben können (auch mit dem bestehenden Modul):

define smlprocess notify <MQTT-Device>:<smltopic> { OBIS_Parse (%defs{"ot"}, $EVTPART1) }
oder - bei HEX -

define smlprocess notify <MQTT-Device>:<smltopic> { OBIS_Parse (%defs{"ot"}, (pack 'H*', $EVTPART1) ) }
Vielleicht einen Versuch wert - hier aber ungetestet.

dennisk

Zitat von: gvzdus am 01 Juni 2023, 22:20:47P.S. Kann sein, dass ich mich jetzt völlig verhaue mit der Sichtbarkeit von Modul-Funktionen außerhalb ("Perl-Basics"). ABER:

Vielen Dank für den Vorschlag, hab ich ausprobiert:
defmod obis OBIS none
defmod obis_smlprocess notify MQTT2_TIBBERPULSE:SML:.* { OBIS_Parse (%defs{"obis"}, (pack 'H*', $EVENT) ) }
Hinter SML musste ich noch :.* ergänzen, sonst hat das notify erst gar nicht ausgelöst. Leider erhalte ich damit aber keine Readings im OBIS device, sondern diesen Fehler:
PERL WARNING: %defs{"obis"} in scalar context better written as $defs{"obis"} at (eval 1540542) line 1.
2023.06.02 17:31:04 3: eval: my $EVENT=  $evalSpecials->{'%EVENT'};my $EVTPART0=  $evalSpecials->{'%EVTPART0'};my $EVTPART1=  $evalSpecials->{'%EVTPART1'};my $EVTPART10=  $evalSpecials->{'%EVTPART10'};my $EVTPART11=  $evalSpecials->{'%EVTPART11'};my $EVTPART12=  $evalSpecials->{'%EVTPART12'};my $EVTPART13=  $evalSpecials->{'%EVTPART13'};my $EVTPART14=  $evalSpecials->{'%EVTPART14'};my $EVTPART15=  $evalSpecials->{'%EVTPART15'};my $EVTPART16=  $evalSpecials->{'%EVTPART16'};my $EVTPART17=  $evalSpecials->{'%EVTPART17'};my $EVTPART18=  $evalSpecials->{'%EVTPART18'};my $EVTPART19=  $evalSpecials->{'%EVTPART19'};my $EVTPART2=  $evalSpecials->{'%EVTPART2'};my $EVTPART20=  $evalSpecials->{'%EVTPART20'};my $EVTPART3=  $evalSpecials->{'%EVTPART3'};my $EVTPART4=  $evalSpecials->{'%EVTPART4'};my $EVTPART5=  $evalSpecials->{'%EVTPART5'};my $EVTPART6=  $evalSpecials->{'%EVTPART6'};my $EVTPART7=  $evalSpecials->{'%EVTPART7'};my $EVTPART8=  $evalSpecials->{'%EVTPART8'};my $EVTPART9=  $evalSpecials->{'%EVTPART9'};my $NAME=  $evalSpecials->{'%NAME'};my $SELF=  $evalSpecials->{'%SELF'};my $TYPE=  $evalSpecials->{'%TYPE'};{ OBIS_Parse (%defs{"obis"}, (pack 'H*', $EVENT) ) }
Wenn ich das Prozentzeichen durch ein Dollar-Zeichen ersetze, dann erhalte ich nur diese Ausgabe:
2023.06.02 17:31:04 3: obis_smlprocess return value: obis

Hab ich für diesen Ansatz noch irgendwas vergessen oder falsch gemacht, oder hängt es tatsächlich mit der Sichtbarkeit der Methode OBIS_Parse, d.h. aus dem notify heraus kann diese gar nicht aufgerufen werden?
Deinen ersten Vorschlag mit der angehängten angepassten Modul-Datei konnte ich noch nicht testen.

dennisk

Zitat von: dennisk am 03 Juni 2023, 10:48:46Deinen ersten Vorschlag mit der angehängten angepassten Modul-Datei konnte ich noch nicht testen.
Jetzt konnte ich auch diesen Ansatz testen. Funktioniert soweit! Vielen Dank auf jeden Fall! Könntest Du Dir vorstellen, das vielleicht ins Modul aufzunehmen, ggf. auch weiter überarbeitet - war ja erstmal nur der schnelle Wurf. Ich teste auch gerne, wenn ich bestimmte Dinge ausprobieren soll.

gvzdus

#21
Moin, ein Denkfehler von mir beim "Perl trocken schreiben":
Es muss $defs{"obis"} heißen, nicht %defs{"obis"}.

Aber das hast Du ja getestet. Wie kommen die MQTT-Daten denn jetzt an? HEX oder Binär? Welche Variante musstest Du mit dem angepassten Modul nehmen?

dennisk

Zitat von: gvzdus am 04 Juni 2023, 11:31:37Aber das hast Du ja getestet. Wie kommen die MQTT-Daten denn jetzt an? HEX oder Binär? Welche Variante musstest Du mit dem angepassten Modul nehmen?
Sorry, die Frage hatte ich überlesen. Die Daten kommen vom Tibber wohl binär. Bevor diese dann in ein entsprechendes Reading des MQTT2-Devices geschrieben werden, wandle ich diese in Hex um:
tibber-pulse/sml:.* { return {SML=>join(' ', unpack("(H2)*", $EVENT))} }

xerion

Ich habe seit gestern Probleme die Daten Lokal auszulesen. Webserver ist noch erreichbar aber es können keine Daten ausgewertet werden:
2023.06.08 00:17:44 1:  OBIS (Tibber_Pulse) - Error connect to http://192.168.178.158:80 timed out

Hat sonst noch jemand Probleme?
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

xerion

Zitat von: xerion am 08 Juni 2023, 12:25:45Ich habe seit gestern Probleme die Daten Lokal auszulesen. Webserver ist noch erreichbar aber es können keine Daten ausgewertet werden:
2023.06.08 00:17:44 1:  OBIS (Tibber_Pulse) - Error connect to http://192.168.178.158:80 timed out

Hat sonst noch jemand Probleme?


Hat sich schon erledigt. Ist doch nicht immer die Software der Übeltäter. Wenn der Kleber vom Pulse nicht hält und dann herunterfällt dann kann ja auch nichts gelesen werden. :'(
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

dennisk

Zitat von: dennisk am 04 Juni 2023, 11:13:30Könntest Du Dir vorstellen, das vielleicht ins Modul aufzunehmen, ggf. auch weiter überarbeitet - war ja erstmal nur der schnelle Wurf. Ich teste auch gerne, wenn ich bestimmte Dinge ausprobieren soll.
Mal als Zwischenstand: Bisher läuft das Ganze sehr zuverlässig. Wäre wirklich klasse, wenn diese Möglichkeit so oder ähnlich ins Modul aufgenommen werden könnte.

dennisk

Zitat von: dennisk am 08 Juni 2023, 23:52:50Mal als Zwischenstand: Bisher läuft das Ganze sehr zuverlässig. Wäre wirklich klasse, wenn diese Möglichkeit so oder ähnlich ins Modul aufgenommen werden könnte.

@gvzdus Könntest Du Dir vorstellen, das aufzunehmen? Es funktioniert wie gesagt schon einige Zeit ohne Probleme. Ich wäre Dir jedenfalls sehr dankbar!

gvzdus

Moin, ist morgen im offiziellen Tree drin. Keine Änderungen ggü. der Version oben.

dennisk

Super, herzlichen Dank für die pragmatische Unterstützung!

haneub

Hallo,
herzlichen Dank für die Beschreibung
Ich habs versucht nach Anleitung, bekomme aber vom beim curl kein 1B1B sondern:
  % Total    % Received % Xferd  Average Speed  Time    Time    Time  Current
                                Dload  Upload  Total  Spent    Left  Speed
100    18  100    18    0    0    165      0 --:--:-- --:--:-- --:--:--  168
0000000 6142 2064 6572 7571 7365 2074 7973 746e
0000010 7861
0000012
Webserver kann ich auch über die von der Fritzbox statisch verwendete ip ansprechen, auf den pulse Webserver zugreifen (und da steht der auch auf "true")
in fhem gibts das device, aber da tut sich halt nix
Wie finde ich den Fehler?
Ein update hab ich gemacht
Herzlichen Dank, Harald