HTTPMOD: Stündlich Strompreis bei Tibber auslesen

Begonnen von Reinhard.M, 13 Februar 2023, 09:41:16

Vorheriges Thema - Nächstes Thema

Reinhard.M

Liebe Community,
HTTPMOD ist bekanntlich ein wenig sperrig und nicht unbedingt intuitive. Ich habe mich jetzt eine ganze Weile im Forum gesucht und mich damit beschäftigt um den stündlich sich ändernden Stromtarif von Tibber auszulesen. Mein Ergebnis möchte ich gerne mit euch als Beispiel (einfach kopieren, ist sofort lauffähig) teilen. Der im Beispiel verwendetet Token ist der Tibber Demo Token und kann von jedem für Testzwecke verwendet werden. Für euren eigenen Token bitte das Attribut "replacement1Value" entsprechend anpassen. Das stündliche Auslesen wird über die '3600' im DEF erreicht und auf 1 Minute nach jeder vollen Stunde ausgerichtet (Attribut 'alignTime'). Die Home_ID habe ich nicht verwendet da ich nur einen Zähler besitze. Der wird in den "readingXJSON" über "homes_01" adressiert. Feedback würde mich freuen, viel Erfolg beim Testen :)

Gruß Reinhard

defmod ti2r HTTPMOD https://api.tibber.com/v1-beta/gql 3600
attr ti2r alignTime 00:01
attr ti2r reading1JSON data_viewer_homes_01_currentSubscription_priceInfo_current_total
attr ti2r reading1Name Strompreis
attr ti2r reading1OExpr $val*100
attr ti2r reading2-1Name Datum
attr ti2r reading2-2Name Uhrzeit
attr ti2r reading2JSON data_viewer_homes_01_currentSubscription_priceInfo_current_startsAt
attr ti2r reading2Regex startsAt":"([\d+-]+)T(\d\d:\d\d)
attr ti2r replacement1Mode text
attr ti2r replacement1Regex %%Token%%
attr ti2r replacement1Value 5K4MVS-OjfWhK_4yrjOlFe1F6kJXPVf7eQYggo8ebAE
attr ti2r requestData { "query": "{viewer {homes {currentSubscription {priceInfo {current {total startsAt}}}}}}" }
attr ti2r requestHeader1 Content-Type: application/json
attr ti2r requestHeader2 Authorization: Bearer %%Token%%
attr ti2r room Zentrale
attr ti2r showBody 1
attr ti2r showError 1
attr ti2r stateFormat {sprintf("Kosten ab %s Uhr => %.2f ct/kWh", ReadingsVal($name,"Uhrzeit",0),ReadingsVal($name,"Strompreis",0))}

setstate ti2r Kosten ab 09:00 Uhr => 95.52 ct/kWh
setstate ti2r 2023-02-13 09:12:01 Datum 2023-02-13
setstate ti2r 2023-02-13 09:12:01 Strompreis 95.52
setstate ti2r 2023-02-13 09:12:01 Uhrzeit 09:00


FHEM-User22

Hallo Reinhard,
ist sehr interessant. Aber zur Zeit ein Strompreis von 166,11 ct pro kWh also 1,66 Euro? Ist da irgendwo ein Fehler?

Beste Grüße
FHEM auf Raspberry Pi und Proxmox und... und.... und....

xerion

Da das ein Demo token ist der verwendet wird  sind das schwedische Krone und keine Eurocent. Wenn du einen eigen Token hast dann wird es richtig angezeigt.
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

Reinhard.M

Ganz richtig, der Demo Account arbeitet mit "SEK", also Schwedische Kronen. Kann man sich recht einfach über den API-Explorer von Tibber anschauen.

Gruß Reinhard

FHEM-User22

Moin,
ok, dankeschön.
Ich wollte es erstmal eine Weile beobachten ehe ich mich zu einem Wechsel entschließe.

Beste Grüße
FHEM auf Raspberry Pi und Proxmox und... und.... und....

lynckmeister

cool, die Kronen kann ich mir ja leicht in € umrechnen... ich nehme an ein eigenes Token bekommt man nur wenn man Kunde ist und zu Tibber gewechselt ist?

Reinhard.M

Ich bin tatsächlich Kunde bei Tibber, kann es also aus der "Nichtkunde" Perspektive gerade nicht beantworten. Man kann sich aber jederzeit einen Account anlegen, auch ohne Kunde zu sein. Mal testen?
Ganz nebenbei, ich habe dazu außerdem ein kleines DOIF geschrieben das mir auf Basis der Preisinformation die großen Haushaltsgeräte (Trockner, Waschmaschine, Spülmaschine) startet. Die Preise werden ein Tag im Voraus bekannt gegeben, auf der Basis bereiten wir dann die entsprechenden Geräte vor, der Rest läuft automatisch.

xerion

Zitat von: lynckmeister am 14 Februar 2023, 17:22:57
cool, die Kronen kann ich mir ja leicht in € umrechnen... ich nehme an ein eigenes Token bekommt man nur wenn man Kunde ist und zu Tibber gewechselt ist?

Ja genau so ist es. Grob kannst du das damit erstmal beobachten, aber das wird nicht ganz deinem Preis entsprechen. Denn die zusätzlichen Kosten wie z.B. Netznutzungs- und Messstellengebühren usw. hängen vom Standort ab. Wie hoch die sind kannst du aber grob sehen, wenn du deine PLZ bei Tibber eingibst und eine Prognose erstellst.

Falls du dich entscheidest nach Tibber zu wechseln, würde ich mich freuen, wenn du meinen Einladungscode aus der Signatur nutzen würdest. Dann bekommen wir beide jeder 50 Euro. So habe ich z.B. meinen Tibber Pulse nur nur 50 Euro gekauft anstelle der 100.
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: Reinhard.M am 14 Februar 2023, 18:03:40
Ich bin tatsächlich Kunde bei Tibber, kann es also aus der "Nichtkunde" Perspektive gerade nicht beantworten. Man kann sich aber jederzeit einen Account anlegen, auch ohne Kunde zu sein. Mal testen?
Ganz nebenbei, ich habe dazu außerdem ein kleines DOIF geschrieben das mir auf Basis der Preisinformation die großen Haushaltsgeräte (Trockner, Waschmaschine, Spülmaschine) startet. Die Preise werden ein Tag im Voraus bekannt gegeben, auf der Basis bereiten wir dann die entsprechenden Geräte vor, der Rest läuft automatisch.

Genauso machen wir das auch. Ist schon cool wenn man durch Smarte Logiken, die man selber erstellen kann auch noch Strom spart.
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

lynckmeister

ok nur um sicher zu stellen, dass ich hier keinen Fehler drin habe: Der augenblickliche Strompreis ist ca 14,7 €/ct (ab 21 Uhr) ??

xerion

Zitat von: lynckmeister am 14 Februar 2023, 21:11:27
ok nur um sicher zu stellen, dass ich hier keinen Fehler drin habe: Der augenblickliche Strompreis ist ca 14,7 €/ct (ab 21 Uhr) ??

Nein das ist wohl der grob Börsenpreis ohne Steuern/Abgaben. Laut Tibber App ist der Börsenpreis aktuell von 21:00-22:00 bei 16 Cent
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

Reinhard.M

Aktuell sind es 16ct ohne und 33,5ct mit allen Angaben

xerion

Zitat von: Reinhard.M am 14 Februar 2023, 21:19:31
Aktuell sind es 16ct ohne und 33,5ct mit allen Angaben

Bei mir sind es 31 Cent mit Abgabe. Das ist das was ich meinte, das die Abgaben lokal abhängig sind.
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

lynckmeister

ok immer noch besser als meine 50 und bald halt 40 ct ... ich schreibe das jetzt mal ne zeitlang in ein Filelog ...
am lohnt es sich einen 14,4 kWh DIY akku nachts damit voll zu laden ;))

xerion

Zitat von: lynckmeister am 14 Februar 2023, 21:44:44
ok immer noch besser als meine 50 und bald halt 40 ct ... ich schreibe das jetzt mal ne zeitlang in ein Filelog ...
am lohnt es sich einen 14,4 kWh DIY akku nachts damit voll zu laden ;))

Ja stimmt. Ich bin seit Januar bei Tibber und mein Durchschnittspreis mit allen Gebühren (Steuern, Zähler usw.) lag im Januar bei 0,28 Euro bei einem Verbrauch von über 700 kWh.
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

Damian

Da der Status vom HTTPMOD-Beispiel so langweilig mit den Fragezeichen aussah, dachte ich mir da könnte man paar Informationen unterbringen ;)

Ergebnis seit gestern Abend, siehe Anhang.

siehe auch: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#card_im_Status_des_Originaldevices
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

betateilchen

Zitat von: Reinhard.M am 14 Februar 2023, 18:03:40
auf Basis der Preisinformation die großen Haushaltsgeräte (Trockner, Waschmaschine, Spülmaschine)

Popcornmaschinen...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Reinhard.M

Zitat von: Damian am 15 Februar 2023, 10:20:51
Da der Status vom HTTPMOD-Beispiel so langweilig mit den Fragezeichen aussah, dachte ich mir da könnte man paar Informationen unterbringen ;)

Ergebnis seit gestern Abend, siehe Anhang.

siehe auch: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#card_im_Status_des_Originaldevices

Das gefällt mir, schaue ich mir bei nächster Gelegenheit an  :D
Bin gerade dabei meinen neuen Rechner aufzusetzen und hatte noch keine Zeit, komme ich mit deinem Beispiel schnell zu diesem Ergebnis? Mein Auge liebt Popcorn ;)

Damian

Zitat von: Reinhard.M am 15 Februar 2023, 21:09:11
Das gefällt mir, schaue ich mir bei nächster Gelegenheit an  :D
Bin gerade dabei meinen neuen Rechner aufzusetzen und hatte noch keine Zeit, komme ich mit deinem Beispiel schnell zu diesem Ergebnis? Mein Auge liebt Popcorn ;)

Es kommt darauf an. Es sind mehr oder weniger zwei Zeilen. Wenn du nicht selber drauf kommst, dann musst du dich hier noch mal melden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Hallo Ihr Spezialisten,
darf ich mal die unqualifizierte Frage stellen, warum Ihr nicht den Umrechnungsfaktor der Schwedischen Kronen in Euro als "irgendwas" in das Demo einbaut?
Ich habe natürlich keine Ahnung ob das einfach so geht. Aber da die Netzstrompreise überhaupt keinen Spass mehr machen, wäre die Ebnung des Weges vielleicht für viele ein Anreiz zum wechseln des Stromanbieter.
Die Möglichkeiten die hier immer wieder zu sehen sind begeistern mich immer wieder, was da für ein Können dahinter steckt.
Schöne Grüße
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

Reinhard.M

#20
Zitat von: NewRasPi am 10 März 2023, 10:42:22
Hallo Ihr Spezialisten,
darf ich mal die unqualifizierte Frage stellen, warum Ihr nicht den Umrechnungsfaktor der Schwedischen Kronen in Euro als "irgendwas" in das Demo einbaut?
Na ja,
ich denke mal das macht nicht wirklich Sinn da der schwedische Strommarkt sich sicherlich anders darstellt als der deutsche. Wie weiter oben schon erwähnt machen ja bereits die örtlichen Zulagen in Deutschland einen beträchtlichen Unterschied. Wenn ich mich recht erinnere kann man bei Tibber auch einen Account anlegen wenn man kein Kunde ist. Oder "noch nicht". Ich konnte jedenfalls schon Daten auslesen bevor mein Zähler umgestellt wurde. Ausprobieren :)

Gruß Reinhard

Edit:
Ich habe mal die letzten 100 Stundenwerte miteinander verglichen. Bei meinen "total" Werten geht die Spanne für SEK/€ von etwa 3,5 bis 7, müsste aber aktuell über 11 sein. Du kannst aber den aktuellen €/SEK Wert von 0,088 gerne selber einbauen:
attr ti2r reading1OExpr $val*0.088*100

Reinhard.M

Zitat von: Damian am 15 Februar 2023, 21:13:35
Es kommt darauf an. Es sind mehr oder weniger zwei Zeilen. Wenn du nicht selber drauf kommst, dann musst du dich hier noch mal melden.

Guten Morgen Damian,
ich bin gerade dabei mich in uiTable und allem was dazu gehört einzuarbeiten. Aktuell plane ich meine Visualisierung darauf umzustellen. Sieht einfach cooler aus und lässt sich im Gesatz zu f18 viel besser konfigurieren (zumindest entsprechend dem was ich bislang gelesen und ausprobiert habe :)).
Ich bin allerdings dabei über einen Fehler in dem zugehörigen "DOIF/uiTable" Wicki gestolpert:
Zitat
## Die Tabelle wird im Raum info ausgeblendet\

$SHOWNOUITABLE = "^info$";;\

In dieser Form führt $ immer zu Fehlern (bei mir). Ich muss entweder '^info$' oder "^info\$" verwenden. Anscheinend wird das $-Zeichen in deinem Fall als Beginn einer Variable interpretiert. Ich habe aber im Grunde kaum bis keine Ahnung von Perl, das weißt du sicherlich viel besser.

Nur mal so als Feedback, da wird sicherlich der ein oder andere Anfänger wie ich auch drüber stolpern.

Schönen Tag
Reinhard

Damian

Danke für den Tipp. Ich habe es korrigiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: Reinhard.M am 12 März 2023, 09:00:00
ich bin gerade dabei mich in uiTable und allem was dazu gehört einzuarbeiten. Aktuell plane ich meine Visualisierung darauf umzustellen. Sieht einfach cooler aus und lässt sich im Gesatz zu f18 viel besser konfigurieren (zumindest entsprechend dem was ich bislang gelesen und ausprobiert habe :)).

Naja, ich benutze auch f18. Das eine schließt das andere nicht aus - im Gegenteil, das eine baut auf dem anderen auf. Man kann sagen, uiTable benutzt das Standard-FHEMWEB und dazu gehört insb. f18.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Reinhard.M

Zitat von: Damian am 12 März 2023, 12:09:31
Naja, ich benutze auch f18. Das eine schließt das andere nicht aus - im Gegenteil, das eine baut auf dem anderen auf. Man kann sagen, uiTable benutzt das Standard-FHEMWEB und dazu gehört insb. f18.
Da bin ich ja komplett bei dir. Allerdings zerlegt es einem gerne mal die Anordnung in Räumen, insbesondere wenn man diese mit Gruppen befüllt. Oder neue Elemente hinzufügt. Dann geht erst einmal das manuelle Aufräumen los. Und da gehen einem auch schon mal die Header flöten die man zum Verschieben braucht. Ich will da versuchen Bedienung von Setting zu trennen und für die Bedienung uiTable & Co verwenden. Mal sehen ob es so klappt wie ich es mir vorstelle.
Ich habe auch (gerade eben erst wieder) "flex" ausprobiert. Hat in vielen Bereichen Vorteile, in einigen aber auch gravierende Nachteile. Und der Maintainer hat gerade wichtigeres zu tun: Familie :) Das geht für mich ganz klar vor. Ich freue mich aber über eure Basisarbeit und weiß diese auch sehr zu schätzen. Ohne euer Engagement wäre ich komplett verloren. CSS, HTML, Perl fange ich gerade erst an zu lernen.

TimoD

Zitat von: Damian am 15 Februar 2023, 21:13:35
Zitat von: Reinhard.M am 15 Februar 2023, 21:09:11Das gefällt mir, schaue ich mir bei nächster Gelegenheit an  :D
Bin gerade dabei meinen neuen Rechner aufzusetzen und hatte noch keine Zeit, komme ich mit deinem Beispiel schnell zu diesem Ergebnis? Mein Auge liebt Popcorn ;)

Es kommt darauf an. Es sind mehr oder weniger zwei Zeilen. Wenn du nicht selber drauf kommst, dann musst du dich hier noch mal melden.

Kannst du deinen Code mal sparen, wie du die Anzeige des Strompreises hinbekommen hast. Stehe auf dem Schlauch, bzw. habe dies noch nie mit "cards" gemacht :-(

Habe Tibber über die Hilfe von ch.eick konfiguriert:
https://forum.fhem.de/index.php?topic=130407.0

Danke :-)

Damian

Zitat von: TimoD am 27 März 2023, 16:24:41
Zitat von: Damian am 15 Februar 2023, 21:13:35
Zitat von: Reinhard.M am 15 Februar 2023, 21:09:11Das gefällt mir, schaue ich mir bei nächster Gelegenheit an  :D
Bin gerade dabei meinen neuen Rechner aufzusetzen und hatte noch keine Zeit, komme ich mit deinem Beispiel schnell zu diesem Ergebnis? Mein Auge liebt Popcorn ;)

Es kommt darauf an. Es sind mehr oder weniger zwei Zeilen. Wenn du nicht selber drauf kommst, dann musst du dich hier noch mal melden.

Kannst du deinen Code mal sparen, wie du die Anzeige des Strompreises hinbekommen hast. Stehe auf dem Schlauch, bzw. habe dies noch nie mit "cards" gemacht :-(

Habe Tibber über die Hilfe von ch.eick konfiguriert:
https://forum.fhem.de/index.php?topic=130407.0

Danke :-)


defmod ti2r HTTPMOD https://api.tibber.com/v1-beta/gql 3600
attr ti2r devStateIcon {ui_Table::card(ReadingsVal("di_collect","Strompreis",""),undef,"",0,200,90,0,"SEK",undef,"1",",fixedscaling,,,,halfring")}\
...


defmod di_collect DOIF ##
attr di_collect event_Readings Strompreis:[ti2r:Strompreis:bar2day]

Der Preis steht bei mit im Reading Strompreis des Devices ti2r.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

TimoD

Zitat von: Damian am 27 März 2023, 17:53:53
Zitat von: TimoD am 27 März 2023, 16:24:41
Zitat von: Damian am 15 Februar 2023, 21:13:35
Zitat von: Reinhard.M am 15 Februar 2023, 21:09:11Das gefällt mir, schaue ich mir bei nächster Gelegenheit an  :D
Bin gerade dabei meinen neuen Rechner aufzusetzen und hatte noch keine Zeit, komme ich mit deinem Beispiel schnell zu diesem Ergebnis? Mein Auge liebt Popcorn ;)

Es kommt darauf an. Es sind mehr oder weniger zwei Zeilen. Wenn du nicht selber drauf kommst, dann musst du dich hier noch mal melden.

Kannst du deinen Code mal sparen, wie du die Anzeige des Strompreises hinbekommen hast. Stehe auf dem Schlauch, bzw. habe dies noch nie mit "cards" gemacht :-(

Habe Tibber über die Hilfe von ch.eick konfiguriert:
https://forum.fhem.de/index.php?topic=130407.0

Danke :-)


defmod ti2r HTTPMOD https://api.tibber.com/v1-beta/gql 3600
attr ti2r devStateIcon {ui_Table::card(ReadingsVal("di_collect","Strompreis",""),undef,"",0,200,90,0,"SEK",undef,"1",",fixedscaling,,,,halfring")}\
...


defmod di_collect DOIF ##
attr di_collect event_Readings Strompreis:[ti2r:Strompreis:bar2day]

Der Preis steht bei mit im Reading Strompreis des Devices ti2r.

Vielen Dank für deine schnelle Antwort, wo es bei mir noch hackt, ist wie die Werte Strompreis-1, Strompreis-2,... zerlegt werden. Könntest du vielleicht deine komplette Definition deines Tibber Devices posten - vielleicht bekomme ich es dann per reverseengieering gebacken :-)

DANKE

TimoD

Ich sehe gerade, deine Werte zeigen ja auch nur die Vergangenheit an. Hast du eine Möglichkeit gefunden auch die Veränderung des Strompreises in der Zukunft zu plotten?

Grüße Timo

Damian

Zitat von: TimoD am 27 März 2023, 19:53:38Ich sehe gerade, deine Werte zeigen ja auch nur die Vergangenheit an. Hast du eine Möglichkeit gefunden auch die Veränderung des Strompreises in der Zukunft zu plotten?

Grüße Timo

Zukunft mit bar ist nicht vorgesehen. Man kann zwar ein Reading in die Zukunft verschieben, aber wenn du am Ende des Tages bist, dann wirst du den Wert in der Zukunft nicht mehr sehen. Die Darstellung orientiert sich immer am aktuellen Zeitpunkt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Das Beispiel aus dem ersten Post liest den aktuellen Strompreis der Stunde aus. Kann man über die HTTPMOD-Schnittstelle auch den voraussichtlichen Strompreis der Stunde von morgen auslesen?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Reinhard.M

Ja, gewöhnlich werden um ca. 13:00 Uhr die Stundenpreise des Folgetages veröffentlicht. Wenn man die Werte um 13:300 abruft dürften sie sicher da sein. Werde ich auch noch aufsetzen, bin aber noch nicht dazu gekommen.

Damian

Ich habe etwas rumexperimentiert. Man kann jetzt eine tägliche Prognose in die Zukunft bis zum Ende des Tages darstellen (neue DOIF-Version wurde eingecheckt).

Dazu habe ich diese Definition genommen: https://forum.fhem.de/index.php?topic=130407.msg1264625#msg1264625

Und in einem DOIF um Mitternacht die prognostizierten Werte (total) des Tages ausgelesen und ins Diagramm geschoben:

   
defmod di_collect DOIF { [00:01];;\
my $out;;\
for (my $i=0;;$i<=23;;$i++){\
  $out.=ReadingsVal("EVU_Tibber",sprintf("fc0_%02d_startsAt",$i),"")." ".ReadingsVal("EVU_Tibber",sprintf("fc0_%02d_total",$i),"")."\n";;\
}\
::DOIF_modify_card_data ("di_collect","EVU_Tibber","total","bar1day",0,$out);;\
}
attr di_collect event_Readings total:[EVU_Tibber:total:bar1day]

und mit

devStateIcon {ui_Table::card(ReadingsVal("di_collect","total",""),undef,undef,0,2,90,0,"SEK",undef,"3",",fixedscaling,,,,")}
in Device EVU_Tibber visualisiert - siehe Anhang.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

xerion

Hallo Damian,

ich bekomme beim ausführen des Blocks folgenden Fehler.
FHEM Update ist aktuelle von heute (16.04.23)

block_01


condition c01: Can't use string ("") as a HASH ref while "strict refs" in use at ./FHEM/98_DOIF.pm line 1489.
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

Damian

Zitat von: xerion am 16 April 2023, 21:01:49Hallo Damian,

ich bekomme beim ausführen des Blocks folgenden Fehler.
FHEM Update ist aktuelle von heute (16.04.23)

block_01


condition c01: Can't use string ("") as a HASH ref while "strict refs" in use at ./FHEM/98_DOIF.pm line 1489.


Vermutlich, weil das Reading total in EVU_Tibber nicht existiert. Setz einfach setreading EVU_Tibber total 0 und schaue, ob im di_collect unter total ein Hash angezeigt wird.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

#35
Moin,
ich bekomme auch den HASH Fehler.    <<< Updates sind weiter unten im Post

Beide readings sind vorhanden.
fc0_00_startsAt 2023-04-17 00:00:00
fc0_00_total 0.2873
fc0_01_startsAt 2023-04-17 01:00:00
fc0_01_total 0.283

{ [00:01];
my $out;
for (my $i=0;$i<=23;$i++){
  $out.=ReadingsVal("EVU_Tibber",sprintf("fc0_%02d_startsAt",$i),"")." ".ReadingsVal("EVU_Tibber",sprintf("fc0_%02d_total",$i),"")."\n";
  print($out."\n");    <<< das habe ich mal eingefügt
}
::DOIF_modify_card_data ("EVU_Tibber_ctl","EVU_Tibber","total","bar1day",0,$out);
}

Im Log baut sich dann das $out langsam auf:
2023-04-17 00:00:00 0.2873

2023-04-17 00:00:00 0.2873
2023-04-17 01:00:00 0.283

2023-04-17 00:00:00 0.2873
2023-04-17 01:00:00 0.283
2023-04-17 02:00:00 0.2804

bis dann alle Einträge für das Diagramm da sind.

UPDATE 20230417 08:45
Nach dem "setreading EVU_Tibber total 0" kommt dann
condition c01: Argument "23:00:00" isn't numeric in addition (+) at ./FHEM/98_DOIF.pm line 1723.
UPDATE 20230417 09:33
Das Problem lag an TIMESTAMP, der wegen MySQL ohne "_" gespeichert wurde.
Es muss für das Diagramm "2023-04-17_09:00:00" geschrieben werden.
{ [00:01];
my $out;
my $timestamp;

for (my $i=0;$i<=23;$i++){
  $timestamp = ReadingsVal("EVU_Tibber",sprintf("fc0_%02d_startsAt",$i),"");
  $timestamp =~ s/ /_/g;
  $out.=$timestamp." ".ReadingsVal("EVU_Tibber",sprintf("fc0_%02d_total",$i),"")."\n";
}
::DOIF_modify_card_data("EVU_Tibber_ctl","EVU_Tibber","total","bar1day",0,$out);
}

Für meine Anwendung habe ich das DevstateIcon ins DOIF geschrieben. Dort kommen dann auch noch andere Schedulings und Steuerungen für das EVU_Tibber mit rein. Fortsetzung folgt...

Nun bleiben für mich noch zwei Fragen:

1. Kann ich das DevStateIcon mit meiner uiTable Status Tabelle kombinieren?
2. Bei mir bekomme ich das Diagramm nur bis zur aktuell laufenden Stunde angezeigt, kann ich den ganzen tag im voraus darstellen lassen?


VG Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

#36
Da EVU_Tibber sich nicht alleine aktualisiert, könnte man noch im Block nach der Zeitangabe get EVU_Tibber 02_priceAll aufrufen, damit die Preise aktuell sind.

Auch das fehlende Reading könnte man mit setreading EVU_Tibber total 0 im Block erzeugen.

Ich habe ja zwei verschiedene Tibber-Darstellunge hier im Forum dargestellt, die erste bezieht sich auf den aktuellen Strompreis, dort werden die Balken bis zum aktuellen Zeitpunkt dargestellt aufgrund der Events vom Strompreis, der stündlich aktualisiert wurde.

Die Prognose baut dagegen auf deiner ursprünglichen Definition zum Auslesen der Prognosedaten auf, hier gibt es keine Events, deswegen das einmalige Auslesen der Definition um Mitternacht für den ganzen Tag.

Bei mir hat bisher alles funktioniert. Mit bar2day hat man auch den Vergleich zum Vortag.

Was bisher noch nicht geht, ist die Prognose von morgen, dazu müsste ich noch das DOIF anpassen, um weiter in die Zukunft zu schauen.

Im Anhang die Daten von gestern und von heute.
 
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

Zitat von: Damian am 17 April 2023, 11:09:05Da EVU_Tibber sich nicht alleine aktualisiert, könnte man noch im Block nach der Zeitangabe get EVU_Tibber 02_priceAll aufrufen, damit die Preise aktuell sind.

Auch das fehlende Reading könnte man mit setreading EVU_Tibber total 0 im Block erzeugen.

Ich habe ja zwei verschiedene Tibber-Darstellunge hier im Forum dargestellt, die erste bezieht sich auf den aktuellen Strompreis, dort werden die Balken bis zum aktuellen Zeitpunkt dargestellt aufgrund der Events vom Strompreis, der stündlich aktualisiert wurde.

Die Prognose baut dagegen auf deiner ursprünglichen Definition zum Auslesen der Prognosedaten auf, hier gibt es keine Events, deswegen das einmalige Auslesen der Definition um Mitternacht für den ganzen Tag.

Bei mir hat bisher alles funktioniert. Mit bar2day hat man auch den Vergleich zum Vortag.

Was bisher noch nicht geht, ist die Prognose von morgen, dazu müsste ich noch das DOIF anpassen, um weiter in die Zukunft zu schauen.

Im Anhang die Daten von gestern und von heute.
 

Ich werde auch das DOIF für die Visualisierung direkt verwenden und auch das Scheduling dort machen.
Das EVU_Tibber dient dann nur noch dem Datensammeln.

Momentan verzweifle ich leider an dem Diagramm und verstehe auch nicht das reading total 0. Wofür wird das verwendet oder ist das der HASH mit der Liste?

Die Prognose von morgen würde ich einfach als zweites Diagramm haben wollen. Da würde ich dann in einer zweiten For Schleife durch fc[0|1] laufen. Da ich aber noch nicht verstanden habe, wie die daten ins card kommen und was dort das reading mit den Daten ist, klappt das noch nicht.

Über/unter den Diagrammen möchte ich dann mein stateFormat als uiTable haben.
Da sollen dann die Diagramme auch größer sein, was ich auch noch nicht im Wiki bei den Beispielen gefunden habe.

Es ist noch viel zu lernen :-)
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hier mal ein erster Entwurf für mein EVU_Tibber_Status Device mit DOIF

Die stateFormat Tabelle transferiere ich noch ins uiTable.
Dort möchte ich dann das Diagramm einbinden.

Das EVU_Tibber Scheduling ist bereits ein eigener Block.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

Du kannst statt dem Attribut uiTable das DOIF-Attribut uiState nehmen, wenn du die Tabelle im Status statt darunter im DOIF-Device haben willst. Die Syntax ist identisch.

Zum Thema Reading total:

Der Card-Aufruf erfolgt normalerweise innerhalb der uiTable mit der Triggerangabe des Readings [<device>:<reading>:<collect-Angaben>]. Damit weiß das DOIF-Device welches Reading in welchem Diagramm dargestellt werden soll und sammelt bei jedem Event des Reading intern die darzustellenden Daten und visualisiert diese.

Bei zukünftigen Daten zu einem Reading gibt es keine Events zum Sammeln. Daher habe ich die card_data-Funktion "missbraucht" (mit einer DOIF-Anpassung) Daten der Zukunft ins Diagramm zu laden.

Das DOIF braucht aber immer ein Reading, weil es eigentlich selbstständig Daten des Readings für die Darstellung sammeln will.

Man könnte auch das Reading Strompreis statt total nehmen, dann würde man um Mitternacht die Daten zum Strompreis laden statt zu total. Im Laufe des Tages würden sie falls es Events zum Reading Strompreis gibt (HTTMPOD mit Intervall, wie im Beispiel von Reinhard im ersten Post) überschrieben werden. Wenn die Prognose des Tages und die tatsächlichen Daten übereinstimmen, dann merkt man keinen Unterschied - nur das Reading "Strompreis" wäre auf jeden Fall da. 
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

#40
Momentan sieht es dann jetzt schon mal so aus...

In dem Pull Down kann man auf den FHEMWEB einzelne Blöcke direkt manuell ausführen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

#41
So sieht bei mir eine reine DOIF-Definition mit uiTable aus, angesetzt auf das Device EVU_Tibber:

defmod di_tibber DOIF { [00:01];;\
my $out;;\
fhem("get EVU_Tibber 02_priceAll");;\
for (my $i=0;;$i<=23;;$i++){\
  $out.=ReadingsVal("EVU_Tibber",sprintf("fc0_%02d_startsAt",$i),"")." ".(ReadingsVal("EVU_Tibber",sprintf("fc0_%02d_total",$i),"")*100*0.088)."\n";;\
}\
::DOIF_modify_card_data ("$SELF","EVU_Tibber","Strompreis","bar2day",0,$out);;\
}\
{[:01];\
fhem("get EVU_Tibber 01_priceInfo");\
}
attr di_tibber uiTable {package ui_Table;;}\
card([EVU_Tibber:Strompreis:bar2day],undef,"",0,40,90,0,"Cent",undef,"1",",fixedscaling,,,,halfring")


Ich habe den total-Preis auf Cent umgerechnet. Allerdings fand ich eine stündliche Aktualisierung des Strompreises per Intervall im HTTPMOD, wie bei Reinhard, besser. In deiner Definition von EVU_Tipper muss man es wohl, wie ich es sehe, extern per get anstoßen.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF