Tibber & Tibber Pulse

Begonnen von hyper2910, 20 November 2022, 10:27:31

Vorheriges Thema - Nächstes Thema

Sidey

Hi, 

Vielleicht ein bisschen OT:

Das mit Tibber klingt irgendwie zu gut denke ich.

Wenn ich das mit meinem jetzigen Anbieter vergleiche, dann ist Tibber zu jeder Uhrzeit günstiger.

Und mit der Strompreisbremse gibt es es auch kein Risiko oder?


Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Damian

Zitat von: Sidey am 28 Mai 2023, 22:05:42Hi, 

Vielleicht ein bisschen OT:

Das mit Tibber klingt irgendwie zu gut denke ich.

Wenn ich das mit meinem jetzigen Anbieter vergleiche, dann ist Tibber zu jeder Uhrzeit günstiger.

Und mit der Strompreisbremse gibt es es auch kein Risiko oder?


Grüße Sidey

Erstmal nicht, du musst nur beim bisherigen Versorger rauskommen und bevor du wechselt lass dich für 50 Euro einladen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

Bei mir ist das leider nicht so
- Die Grundkosten sind bei meiner PLZ höher
- Ich zahle nur 26 ct/kWh beim Grundversorger
- Im Winter war es nur recht selten wirklich günstiger, dass es sich gelohnt hätte den Hausspeicher zu laden
- Das E-Auto hätte die Situation etwas verbessert
- Trotz E-Auto und WP komme ich nur auf 2600 kWh aus dem Netz und davon könnte ich nur einen kleinen Teil günstiger bekommen, was jedoch den höheren Grundpreis nur sehr knapp decken würde.

Es ist also sehr individuell zu betrachten.

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

ja, das muss jeder für sich durchrechnen.

Heute und gestern hätte man (auch ohne PV) kurz nach dem Mittag fast umsonst sein Auto laden können.

Im Anhang meine Daten des Monats. Die Grundgebühr von ca. 10 Euro muss man noch dazu rechnen. Natürlich relativiert zu sehen, da wir PV haben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

xerion

Ja da kann ich nur zustimmen. Man kann es eben nicht pauschal sagen ob es sich Lohnt. Das hängt von vielen Faktoren ab wie z.B. die lokalen Kosten wie Netznutzungsgebühr, Messstellengebühr und der Stromverbrauch mit oder ohne PV. Bei uns war z.B. gestern und heute negative Preise (inklusive Steuern). Das fühlt sich zwar gut an aber wie schon von den anderen erwähnt, im Sommer hilft das eher denen, die keine PV haben. Trotzdem war es bei uns im Winter mit zwei E-Autos doch lukrativer als beim  örtlichen Versorger und ich finde das Konzept sehr gut und dadurch unterstütze ich es auch gerne.
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

ich denke, wenn man keine PV Anlage hat, dann profitiert man noch mehr, weil der Stundenpreis an der Börse dann günstig sind, wenn insb. PV ohnehin Strom produziert hätte.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Torxgewinde

#111
Da ich mit den Tibber-Werten ein wenig weiterrechnen wollte, habe ich ein Hash erzeugt, das die Werte in einer "vorberechneten" Form vorhält. In der Hoffnung, dass es auch für jemanden von euch nützlich ist:

defmod Tibber.device HTTPMOD https://api.tibber.com/v1-beta/gql 300
attr Tibber.device alias Tibber
attr Tibber.device alignTime 00:00:10
attr Tibber.device disable 0
attr Tibber.device enableControlSet 1
attr Tibber.device get01-1Name current_currency
attr Tibber.device get01-2Name current_level
attr Tibber.device get01-3Name current_date
attr Tibber.device get01-3OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get01-4Name current_price
attr Tibber.device get01-4OExpr $val *100
attr Tibber.device get01Data { "query": "{viewer {home(id:\"%%homeID%%\") {currentSubscription {priceInfo {current {total startsAt currency level}}}}}}" }
attr Tibber.device get01Header01 Content-Type: application/json
attr Tibber.device get01Header02 Authorization: Bearer %%token%%
attr Tibber.device get01JSON data_viewer_home_currentSubscription_priceInfo_current
attr Tibber.device get01Name 01_priceInfo
attr Tibber.device get01Poll 1
attr Tibber.device get01URL https://api.tibber.com/v1-beta/gql
attr Tibber.device get02-10Name fc0_03_total
attr Tibber.device get02-11Name fc0_04_startsAt
attr Tibber.device get02-11OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-12Name fc0_04_total
attr Tibber.device get02-13Name fc0_05_startsAt
attr Tibber.device get02-13OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-14Name fc0_05_total
attr Tibber.device get02-15Name fc0_06_startsAt
attr Tibber.device get02-15OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-16Name fc0_06_total
attr Tibber.device get02-17Name fc0_07_startsAt
attr Tibber.device get02-17OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-18Name fc0_07_total
attr Tibber.device get02-19Name fc0_08_startsAt
attr Tibber.device get02-19OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-1Name current_date
attr Tibber.device get02-1OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-20Name fc0_08_total
attr Tibber.device get02-21Name fc0_09_startsAt
attr Tibber.device get02-21OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-22Name fc0_09_total
attr Tibber.device get02-23Name fc0_10_startsAt
attr Tibber.device get02-23OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-24Name fc0_10_total
attr Tibber.device get02-25Name fc0_11_startsAt
attr Tibber.device get02-25OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-26Name fc0_11_total
attr Tibber.device get02-27Name fc0_12_startsAt
attr Tibber.device get02-27OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-28Name fc0_12_total
attr Tibber.device get02-29Name fc0_13_startsAt
attr Tibber.device get02-29OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-2Name current_price
attr Tibber.device get02-2OExpr $val *100
attr Tibber.device get02-30Name fc0_13_total
attr Tibber.device get02-31Name fc0_14_startsAt
attr Tibber.device get02-31OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-32Name fc0_14_total
attr Tibber.device get02-33Name fc0_15_startsAt
attr Tibber.device get02-33OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-34Name fc0_15_total
attr Tibber.device get02-35Name fc0_16_startsAt
attr Tibber.device get02-35OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-36Name fc0_16_total
attr Tibber.device get02-37Name fc0_17_startsAt
attr Tibber.device get02-37OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-38Name fc0_17_total
attr Tibber.device get02-39Name fc0_18_startsAt
attr Tibber.device get02-39OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-3Name fc0_00_startsAt
attr Tibber.device get02-3OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-40Name fc0_18_total
attr Tibber.device get02-41Name fc0_19_startsAt
attr Tibber.device get02-41OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-42Name fc0_19_total
attr Tibber.device get02-43Name fc0_20_startsAt
attr Tibber.device get02-43OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-44Name fc0_20_total
attr Tibber.device get02-45Name fc0_21_startsAt
attr Tibber.device get02-45OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-46Name fc0_21_total
attr Tibber.device get02-47Name fc0_22_startsAt
attr Tibber.device get02-47OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-48Name fc0_22_total
attr Tibber.device get02-49Name fc0_23_startsAt
attr Tibber.device get02-49OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-4Name fc0_00_total
attr Tibber.device get02-50Name fc0_23_total
attr Tibber.device get02-51MaxAge {12*60*60}
attr Tibber.device get02-51MaxAgeReplacementMode delete
attr Tibber.device get02-51Name fc1_00_startsAt
attr Tibber.device get02-51OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-52MaxAge {12*60*60}
attr Tibber.device get02-52MaxAgeReplacementMode delete
attr Tibber.device get02-52Name fc1_00_total
attr Tibber.device get02-53Name fc1_01_startsAt
attr Tibber.device get02-53OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-54Name fc1_01_total
attr Tibber.device get02-55Name fc1_02_startsAt
attr Tibber.device get02-55OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-56Name fc1_02_total
attr Tibber.device get02-57Name fc1_03_startsAt
attr Tibber.device get02-57OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-58Name fc1_03_total
attr Tibber.device get02-59Name fc1_04_startsAt
attr Tibber.device get02-59OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-5Name fc0_01_startsAt
attr Tibber.device get02-5OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-60Name fc1_04_total
attr Tibber.device get02-61Name fc1_05_startsAt
attr Tibber.device get02-61OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-62Name fc1_05_total
attr Tibber.device get02-63Name fc1_06_startsAt
attr Tibber.device get02-63OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-64Name fc1_06_total
attr Tibber.device get02-65Name fc1_07_startsAt
attr Tibber.device get02-65OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-66Name fc1_07_total
attr Tibber.device get02-67Name fc1_08_startsAt
attr Tibber.device get02-67OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-68Name fc1_08_total
attr Tibber.device get02-69Name fc1_09_startsAt
attr Tibber.device get02-69OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-6Name fc0_01_total
attr Tibber.device get02-70Name fc1_09_total
attr Tibber.device get02-71Name fc1_10_startsAt
attr Tibber.device get02-71OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-72Name fc1_10_total
attr Tibber.device get02-73Name fc1_11_startsAt
attr Tibber.device get02-73OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-74Name fc1_11_total
attr Tibber.device get02-75Name fc1_12_startsAt
attr Tibber.device get02-75OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-76Name fc1_12_total
attr Tibber.device get02-77Name fc1_13_startsAt
attr Tibber.device get02-77OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-78Name fc1_13_total
attr Tibber.device get02-79Name fc1_14_startsAt
attr Tibber.device get02-79OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-7Name fc0_02_startsAt
attr Tibber.device get02-7OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-80Name fc1_14_total
attr Tibber.device get02-81Name fc1_15_startsAt
attr Tibber.device get02-81OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-82Name fc1_15_total
attr Tibber.device get02-83Name fc1_16_startsAt
attr Tibber.device get02-83OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-84Name fc1_16_total
attr Tibber.device get02-85Name fc1_17_startsAt
attr Tibber.device get02-85OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-86Name fc1_17_total
attr Tibber.device get02-87Name fc1_18_startsAt
attr Tibber.device get02-87OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-88Name fc1_18_total
attr Tibber.device get02-89Name fc1_19_startsAt
attr Tibber.device get02-89OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-8Name fc0_02_total
attr Tibber.device get02-90Name fc1_19_total
attr Tibber.device get02-91Name fc1_20_startsAt
attr Tibber.device get02-91OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-92Name fc1_20_total
attr Tibber.device get02-93Name fc1_21_startsAt
attr Tibber.device get02-93OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-94Name fc1_21_total
attr Tibber.device get02-95Name fc1_22_startsAt
attr Tibber.device get02-95OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-96Name fc1_22_total
attr Tibber.device get02-97Name fc1_23_startsAt
attr Tibber.device get02-97OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02-98Name fc1_23_total
attr Tibber.device get02-9Name fc0_03_startsAt
attr Tibber.device get02-9OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get02Data { "query": "{viewer {home(id:\"%%homeID%%\") {currentSubscription {priceInfo {current {total startsAt} today {total startsAt} tomorrow {total startsAt}}}}}}" }
attr Tibber.device get02Header01 Content-Type: application/json
attr Tibber.device get02Header02 Authorization: Bearer %%token%%
attr Tibber.device get02JSON data_viewer_home_currentSubscription_priceInfo
attr Tibber.device get02Name 02_priceAll
attr Tibber.device get02Poll 1
attr Tibber.device get02URL https://api.tibber.com/v1-beta/gql
attr Tibber.device get03-1Name nodes_00_00_from
attr Tibber.device get03-1OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get03-2Name nodes_00_00_cost
attr Tibber.device get03-2OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get03-3Name nodes_00_00_consumption
attr Tibber.device get03-4Name nodes_00_01_from
attr Tibber.device get03-4OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get03-50Name nodes_00_01_cost
attr Tibber.device get03-50OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get03-5Name nodes_00_01_cost
attr Tibber.device get03-5OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get03-6Name nodes_00_01_consumption
attr Tibber.device get03-7Name nodes_00_02_from
attr Tibber.device get03-7OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get03-8Name nodes_00_02_cost
attr Tibber.device get03-8OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get03-9Name nodes_00_02_consumption
attr Tibber.device get03Data { "query": "{viewer {home(id:\"%%homeID%%\") {consumption(resolution: HOURLY, last: 3) {nodes {from cost consumption }}}}}"}
attr Tibber.device get03Header01 Content-Type: application/json
attr Tibber.device get03Header02 Authorization: Bearer %%token%%
attr Tibber.device get03Name 03_consumption_hour
attr Tibber.device get03RegOpt g
attr Tibber.device get03Regex \{"from":"([\d+-]+T[\d+:]+\.000[+-][\d+:]+)","cost":(null|\d+\.\d+|0),"consumption":(null|\d+\.\d+|0)\}
attr Tibber.device get03URL https://api.tibber.com/v1-beta/gql
attr Tibber.device get04-10Name nodes_24_03_from
attr Tibber.device get04-10OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-11Name nodes_24_03_cost
attr Tibber.device get04-11OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-12Name nodes_24_03_consumption
attr Tibber.device get04-13Name nodes_24_04_from
attr Tibber.device get04-13OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-14Name nodes_24_04_cost
attr Tibber.device get04-14OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-15Name nodes_24_04_consumption
attr Tibber.device get04-16Name nodes_24_05_from
attr Tibber.device get04-16OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-17Name nodes_24_05_cost
attr Tibber.device get04-17OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-18Name nodes_24_05_consumption
attr Tibber.device get04-19Name nodes_24_06_from
attr Tibber.device get04-19OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-1Name nodes_24_00_from
attr Tibber.device get04-1OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-20Name nodes_24_06_cost
attr Tibber.device get04-20OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-21Name nodes_24_06_consumption
attr Tibber.device get04-22Name nodes_24_07_from
attr Tibber.device get04-22OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-23Name nodes_24_07_cost
attr Tibber.device get04-23OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-24Name nodes_24_07_consumption
attr Tibber.device get04-25Name nodes_24_08_from
attr Tibber.device get04-25OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-26Name nodes_24_08_cost
attr Tibber.device get04-26OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-27Name nodes_24_08_consumption
attr Tibber.device get04-28Name nodes_24_09_from
attr Tibber.device get04-28OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-29Name nodes_24_09_cost
attr Tibber.device get04-29OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-2Name nodes_24_00_cost
attr Tibber.device get04-2OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-30Name nodes_24_09_consumption
attr Tibber.device get04-31Name nodes_24_10_from
attr Tibber.device get04-31OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-32Name nodes_24_10_cost
attr Tibber.device get04-32OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-33Name nodes_24_10_consumption
attr Tibber.device get04-34Name nodes_24_11_from
attr Tibber.device get04-34OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-35Name nodes_24_11_cost
attr Tibber.device get04-35OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-36Name nodes_24_11_consumption
attr Tibber.device get04-37Name nodes_24_12_from
attr Tibber.device get04-37OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-38Name nodes_24_12_cost
attr Tibber.device get04-38OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-39Name nodes_24_12_consumption
attr Tibber.device get04-3Name nodes_24_00_consumption
attr Tibber.device get04-40Name nodes_24_13_from
attr Tibber.device get04-40OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-41Name nodes_24_13_cost
attr Tibber.device get04-41OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-42Name nodes_24_13_consumption
attr Tibber.device get04-43Name nodes_24_14_from
attr Tibber.device get04-43OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-44Name nodes_24_14_cost
attr Tibber.device get04-44OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-45Name nodes_24_14_consumption
attr Tibber.device get04-46Name nodes_24_15_from
attr Tibber.device get04-46OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-47Name nodes_24_15_cost
attr Tibber.device get04-47OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-48Name nodes_24_15_consumption
attr Tibber.device get04-49Name nodes_24_16_from
attr Tibber.device get04-49OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-4Name nodes_24_01_from
attr Tibber.device get04-4OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-50Name nodes_24_16_cost
attr Tibber.device get04-50OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-51Name nodes_24_16_consumption
attr Tibber.device get04-52Name nodes_24_17_from
attr Tibber.device get04-52OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-53Name nodes_24_17_cost
attr Tibber.device get04-53OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-54Name nodes_24_17_consumption
attr Tibber.device get04-55Name nodes_24_18_from
attr Tibber.device get04-55OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-56Name nodes_24_18_cost
attr Tibber.device get04-56OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-57Name nodes_24_18_consumption
attr Tibber.device get04-58Name nodes_24_19_from
attr Tibber.device get04-58OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-59Name nodes_24_19_cost
attr Tibber.device get04-59OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-5Name nodes_24_01_cost
attr Tibber.device get04-5OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-60Name nodes_24_19_consumption
attr Tibber.device get04-61Name nodes_24_20_from
attr Tibber.device get04-61OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-62Name nodes_24_20_cost
attr Tibber.device get04-62OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-63Name nodes_24_20_consumption
attr Tibber.device get04-64Name nodes_24_21_from
attr Tibber.device get04-64OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-65Name nodes_24_21_cost
attr Tibber.device get04-65OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-66Name nodes_24_21_consumption
attr Tibber.device get04-67Name nodes_24_22_from
attr Tibber.device get04-67OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-68Name nodes_24_22_cost
attr Tibber.device get04-68OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-69Name nodes_24_22_consumption
attr Tibber.device get04-6Name nodes_24_01_consumption
attr Tibber.device get04-70Name nodes_24_23_from
attr Tibber.device get04-70OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-71Name nodes_24_23_cost
attr Tibber.device get04-71OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-72Name nodes_24_23_consumption
attr Tibber.device get04-7Name nodes_24_02_from
attr Tibber.device get04-7OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get04-8Name nodes_24_02_cost
attr Tibber.device get04-8OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get04-9Name nodes_24_02_consumption
attr Tibber.device get04Data { "query": "{viewer {home(id:\"%%homeID%%\") {consumption(resolution: HOURLY, last: 24) {nodes {from cost consumption}}}}}"}
attr Tibber.device get04Header01 Content-Type: application/json
attr Tibber.device get04Header02 Authorization: Bearer %%token%%
attr Tibber.device get04Name 04_consumption_hour_24
attr Tibber.device get04RegOpt g
attr Tibber.device get04Regex \{"from":"([\d+-]+T[\d+:]+\.000[+-][\d+:]+)","cost":(null|\d+\.\d+|0),"consumption":(null|\d+\.\d+|0)\}
attr Tibber.device get04URL https://api.tibber.com/v1-beta/gql
attr Tibber.device get05-10Name Adresse_01_Nachname
attr Tibber.device get05-1Name Adresse_03_Strasse
attr Tibber.device get05-2Name Adresse_05_Ort
attr Tibber.device get05-3Name Adresse_06_Land
attr Tibber.device get05-4Name Adresse_09_latitude
attr Tibber.device get05-5Name Adresse_10_longitude
attr Tibber.device get05-6Name Adresse_04_Plz
attr Tibber.device get05-7Name Adresse_08_eMail
attr Tibber.device get05-8Name Adresse_07_Telefon
attr Tibber.device get05-9Name Adresse_02_Vorname
attr Tibber.device get05Data { "query": "{viewer {home(id:\"%%homeID%%\") {consumption(resolution: HOURLY, last: 100) {nodes {from to cost unitPrice unitPriceVAT consumption consumptionUnit}}}}}"}
attr Tibber.device get05Header01 Content-Type: application/json
attr Tibber.device get05Header02 Authorization: Bearer %%token%%
attr Tibber.device get05JSON data_viewer_home
attr Tibber.device get05Name 05_consumption_hourly_100
attr Tibber.device get05URL https://api.tibber.com/v1-beta/gql
attr Tibber.device get06-10Name Adresse_01_Nachname
attr Tibber.device get06-1Name Adresse_03_Strasse
attr Tibber.device get06-2Name Adresse_05_Ort
attr Tibber.device get06-3Name Adresse_06_Land
attr Tibber.device get06-4Name Adresse_09_latitude
attr Tibber.device get06-5Name Adresse_10_longitude
attr Tibber.device get06-6Name Adresse_04_Plz
attr Tibber.device get06-7Name Adresse_08_eMail
attr Tibber.device get06-8Name Adresse_07_Telefon
attr Tibber.device get06-9Name Adresse_02_Vorname
attr Tibber.device get06Data { "query": "{viewer {home(id:\"%%homeID%%\") {address {address1 address2 address3 postalCode city country latitude longitude} owner {firstName lastName contactInfo {email mobile}}}}}" }
attr Tibber.device get06Header01 Content-Type: application/json
attr Tibber.device get06Header02 Authorization: Bearer %%token%%
attr Tibber.device get06JSON data_viewer_home
attr Tibber.device get06Name 06_address
attr Tibber.device get06URL https://api.tibber.com/v1-beta/gql
attr Tibber.device get07-10Name nodes_24_03_from
attr Tibber.device get07-10OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-11Name nodes_24_03_cost
attr Tibber.device get07-11OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-12Name nodes_24_03_consumption
attr Tibber.device get07-13Name nodes_24_04_from
attr Tibber.device get07-13OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-14Name nodes_24_04_cost
attr Tibber.device get07-14OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-15Name nodes_24_04_consumption
attr Tibber.device get07-16Name nodes_24_05_from
attr Tibber.device get07-16OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-17Name nodes_24_05_cost
attr Tibber.device get07-17OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-18Name nodes_24_05_consumption
attr Tibber.device get07-19Name nodes_24_06_from
attr Tibber.device get07-19OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-1Name features_realTimeConsumptionEnabled
attr Tibber.device get07-1OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-20Name nodes_24_06_cost
attr Tibber.device get07-20OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-21Name nodes_24_06_consumption
attr Tibber.device get07-22Name nodes_24_07_from
attr Tibber.device get07-22OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-23Name nodes_24_07_cost
attr Tibber.device get07-23OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-24Name nodes_24_07_consumption
attr Tibber.device get07-25Name nodes_24_08_from
attr Tibber.device get07-25OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-26Name nodes_24_08_cost
attr Tibber.device get07-26OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-27Name nodes_24_08_consumption
attr Tibber.device get07-28Name nodes_24_09_from
attr Tibber.device get07-28OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-29Name nodes_24_09_cost
attr Tibber.device get07-29OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-2Name features_id
attr Tibber.device get07-2OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-30Name nodes_24_09_consumption
attr Tibber.device get07-31Name nodes_24_10_from
attr Tibber.device get07-31OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-32Name nodes_24_10_cost
attr Tibber.device get07-32OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-33Name nodes_24_10_consumption
attr Tibber.device get07-34Name nodes_24_11_from
attr Tibber.device get07-34OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-35Name nodes_24_11_cost
attr Tibber.device get07-35OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-36Name nodes_24_11_consumption
attr Tibber.device get07-37Name nodes_24_12_from
attr Tibber.device get07-37OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-38Name nodes_24_12_cost
attr Tibber.device get07-38OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-39Name nodes_24_12_consumption
attr Tibber.device get07-3Name nodes_24_00_consumption
attr Tibber.device get07-40Name nodes_24_13_from
attr Tibber.device get07-40OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-41Name nodes_24_13_cost
attr Tibber.device get07-41OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-42Name nodes_24_13_consumption
attr Tibber.device get07-43Name nodes_24_14_from
attr Tibber.device get07-43OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-44Name nodes_24_14_cost
attr Tibber.device get07-44OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-45Name nodes_24_14_consumption
attr Tibber.device get07-46Name nodes_24_15_from
attr Tibber.device get07-46OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-47Name nodes_24_15_cost
attr Tibber.device get07-47OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-48Name nodes_24_15_consumption
attr Tibber.device get07-49Name nodes_24_16_from
attr Tibber.device get07-49OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-4Name nodes_24_01_from
attr Tibber.device get07-4OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-50Name nodes_24_16_cost
attr Tibber.device get07-50OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-51Name nodes_24_16_consumption
attr Tibber.device get07-52Name nodes_24_17_from
attr Tibber.device get07-52OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-53Name nodes_24_17_cost
attr Tibber.device get07-53OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-54Name nodes_24_17_consumption
attr Tibber.device get07-55Name nodes_24_18_from
attr Tibber.device get07-55OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-56Name nodes_24_18_cost
attr Tibber.device get07-56OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-57Name nodes_24_18_consumption
attr Tibber.device get07-58Name nodes_24_19_from
attr Tibber.device get07-58OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-59Name nodes_24_19_cost
attr Tibber.device get07-59OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-5Name nodes_24_01_cost
attr Tibber.device get07-5OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-60Name nodes_24_19_consumption
attr Tibber.device get07-61Name nodes_24_20_from
attr Tibber.device get07-61OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-62Name nodes_24_20_cost
attr Tibber.device get07-62OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-63Name nodes_24_20_consumption
attr Tibber.device get07-64Name nodes_24_21_from
attr Tibber.device get07-64OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-65Name nodes_24_21_cost
attr Tibber.device get07-65OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-66Name nodes_24_21_consumption
attr Tibber.device get07-67Name nodes_24_22_from
attr Tibber.device get07-67OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-68Name nodes_24_22_cost
attr Tibber.device get07-68OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-69Name nodes_24_22_consumption
attr Tibber.device get07-6Name nodes_24_01_consumption
attr Tibber.device get07-70Name nodes_24_23_from
attr Tibber.device get07-70OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-71Name nodes_24_23_cost
attr Tibber.device get07-71OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-72Name nodes_24_23_consumption
attr Tibber.device get07-7Name nodes_24_02_from
attr Tibber.device get07-7OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Tibber.device get07-8Name nodes_24_02_cost
attr Tibber.device get07-8OExpr ($val ne "0" and $val ne "null")? round($val,4) : $val
attr Tibber.device get07-9Name nodes_24_02_consumption
attr Tibber.device get07Data { "query": "{viewer {home(id:\"%%homeID%%\") {id features{realTimeConsumptionEnabled} } } }" }
attr Tibber.device get07Header01 Content-Type: application/json
attr Tibber.device get07Header02 Authorization: Bearer %%token%%
attr Tibber.device get07JSON data_viewer_home
attr Tibber.device get07Name 07_realTimeConsumptionEnabled
attr Tibber.device get07RegOpt g
attr Tibber.device get07Regex \{"from":"([\d+-]+T[\d+:]+\.000[+-][\d+:]+)","cost":(null|\d+\.\d+|0),"consumption":(null|\d+\.\d+|0)\}
attr Tibber.device get07URL https://api.tibber.com/v1-beta/gql
attr Tibber.device group Strom
attr Tibber.device icon stromzaehler_icon
attr Tibber.device replacement01Mode reading
attr Tibber.device replacement01Regex %%token%%
attr Tibber.device replacement01Value token
attr Tibber.device replacement02Mode reading
attr Tibber.device replacement02Regex %%homeID%%
attr Tibber.device replacement02Value homeID
attr Tibber.device requestData { "query": "{viewer {home(id:\"%%homeID%%\") {currentSubscription {priceInfo {current {total energy tax startsAt }}}}}}" }
attr Tibber.device requestHeader1 Content-Type: application/json
attr Tibber.device requestHeader2 Authorization: Bearer %%token%%
attr Tibber.device room Photovoltaik
attr Tibber.device showBody 0
attr Tibber.device showError 1
attr Tibber.device stateFormat current_price cent/kWh (=current_level)
attr Tibber.device userReadings ProcessValues {\
my $result = "";;\
\
#get forecast cost as array\
my @fc_cost = sort\
              grep { $_ =~ /^fc(?:0|1)_[0-9]{1,2}_total$/ }\
              keys %{$defs{$NAME}{READINGS}};;\
\
#get forecast time as array\
my @fc_startsAt = sort\
                  grep { $_ =~ /^fc(?:0|1)_[0-9]{1,2}_startsAt$/ }\
                  keys %{$defs{$NAME}{READINGS}};;\
\
#$result .= "Found ".scalar(@fc_cost)." cost entries\n";;\
#$result .= "Found ".scalar(@fc_startsAt)." startsAt entries\n";;\
#$result .= join("\n", map { $fc_cost[$_].", ".$fc_startsAt[$_] } 0 .. $#fc_cost );;\
\
#add entries for each hour, build datastructure\
my %seen;;\
map {\
      my $startsAt = ReadingsVal($NAME, $fc_startsAt[$_], '');;\
      my ($year, $month, $day, $hour, $min, $sec) = $startsAt =~ /(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})/;;\
      my $epoch_time = timelocal($sec, $min, $hour, $day, $month-1, $year);;\
\
      ${$defs{$NAME}{"TibberValues"}}[$_] =\
      {\
  'Basename' => ($fc_cost[$_] =~ /(fc(?:0|1)_[0-9]{1,2}_)/) ? $1 : '???', #keep the name prefix\
        'Cost'     => ReadingsVal($NAME, $fc_cost[$_], 0), #the total cost for this hour\
'Outdated' => ( $epoch_time <= time() ) ? 1 : 0, #is the entry in the past?\
'Unique'   => ( $seen{"$startsAt"}++ ) ? 0 : 1, #is the entries start-time unique?\
'StartsAt' => "$startsAt" #keep the start-time\
      }\
    } 0 .. $#fc_cost;; #iterate over this index, should be consistent\
\
#define the variable $hash for convenience\
my $hash = $defs{$NAME}{"TibberValues"};;\
\
#filter out non-unique items:\
@{$hash} =  grep { $_->{'Unique'} == 1 } @{$hash};;\
\
#check if it is a local minimum\
#my $hash = $defs{$NAME}{"TibberValues"};;\
#map {\
#    $hash->[$_]{'isLocalMin'} = ( $hash->[$_-1]{'Cost'} >= $hash->[$_]{'Cost'} && $hash->[$_]{'Cost'} <= $hash->[$_+1]{'Cost'}) ? 1 : 0\
#  } 1 .. ($#fc_cost-1);;\
#special handling for first and last item:\
#$hash->[0]{'isLocalMin'} = ( $hash->[0]{'Cost'} <= $hash->[1]{'Cost'}) ? 1 : 0;;\
#$hash->[-1]{'isLocalMin'} = ( $hash->[-1]{'Cost'} <= $hash->[-2]{'Cost'}) ? 1 : 0;;\
\
my $length = scalar @{$hash};;\
$result .= "Length: $length\n";;\
\
# Check if each item is a local minimum or local maximum\
for my $index (1 .. ($length - 2)) {\
    #check local minimum\
    $hash->[$index]{'isLocalMin'} = (\
        $hash->[$index - 1]{'Cost'} >= $hash->[$index]{'Cost'} &&\
        $hash->[$index]{'Cost'} <= $hash->[$index + 1]{'Cost'}\
    ) ? 1 : 0;;\
#check local maximum\
$hash->[$index]{'isLocalMax'} = (\
        $hash->[$index - 1]{'Cost'} <= $hash->[$index]{'Cost'} &&\
        $hash->[$index]{'Cost'} >= $hash->[$index + 1]{'Cost'}\
    ) ? 1 : 0;;\
}\
\
# Special handling for the first and last items where there is only one adjacent value:\
$hash->[0]{'isLocalMin'} = ($hash->[0]{'Cost'} <= $hash->[1]{'Cost'}) ? 1 : 0;;\
$hash->[-1]{'isLocalMin'} = ($hash->[-1]{'Cost'} <= $hash->[-2]{'Cost'}) ? 1 : 0;;\
$hash->[0]{'isLocalMax'} = ($hash->[0]{'Cost'} >= $hash->[1]{'Cost'}) ? 1 : 0;;\
$hash->[-1]{'isLocalMax'} = ($hash->[-1]{'Cost'} >= $hash->[-2]{'Cost'}) ? 1 : 0;;\
\
#Average cost for ALL values, might differ from Tibber-App because it uses all available values\
my $average_cost = 0;;\
map { $average_cost += $_->{Cost}/$length } @{$hash};;\
for my $item (@$hash) {\
    $item->{'AboveAverage'} = ($item->{'Cost'} > $average_cost) ? 1 : 0;;\
}\
\
$result .= Data::Dumper::Dumper($defs{$NAME}{"TibberValues"});;\
\
return $result;;\
},\
AveragePriceToday {\
my @fc = grep { $_ =~ /fc0.*total/ } # filtere gegen den RegEx\
keys %{$defs{$NAME}{READINGS}};; # erstelle ein Array der Keys von den Readings\
\
my $sum = 0;;\
map { $sum += ReadingsNum($NAME, "$_", 0) / (scalar @fc) } @fc;;\
\
return $sum;;\
},\
Overview {\
my @arr = @{$defs{$NAME}{"TibberValues"}};;\
my $result = "";;\
\
my @columns = ("B", "O", "M", "StartsAt", "Cost");;\
my @column_widths = (3, 3, 3, 22, 10);;\
for my $col (0 .. $#columns) {\
    $result .= sprintf("%-*s", $column_widths[$col], $columns[$col]);;\
}\
$result .= "\n";;\
\
for my $item (@arr) {\
    $result .= sprintf("%-*s", $column_widths[0], ($item->{'AboveAverage'})?".":"B");;\
$result .= sprintf("%-*s", $column_widths[1], ($item->{'Outdated'})?"x":".");;\
$result .= sprintf("%-*s", $column_widths[2], ($item->{'isLocalMin'})?"*":".");;\
$result .= sprintf("%-*s", $column_widths[3], $item->{'StartsAt'});;\
$result .= sprintf("%-*s", $column_widths[4], $item->{'Cost'});;\
$result .= "\n";;\
}\
\
return $result;;\
},\
NextMinAt { ##find the closest minimum price\
my @arr = @{$defs{$NAME}{"TibberValues"}};;\
\
@arr = grep { $_->{'isLocalMin'} == 1 } #keep minima\
       grep { $_->{'Outdated'} == 0 } #filter out outdated items\
   @arr;;\
\
#just return the first match\
(scalar @arr) ? return $arr[0]->{'StartsAt'} : return "???";;\
}
attr Tibber.device widgetOverride userReadings:textField-long,87

Praktisch sind die dazugebauten UserReadings:
"NextMinAt", das ist der nächstgelegene Zeitpunkt, wann der Strom wieder günstig wird.
"Overview", ist eine Tabelle des Hash, Spalte B ist "Below Average" oder auch "Buy" wenn man Strom kaufen muss, "O" wie outdated, "M" wie Minima

Im UserReading "ProcessValues" werden die Werte vorbereitet. Zur Zeit enthält das Array dann solche Werte:
$VAR1 = [
          {
            'AboveAverage' => 1,
            'Outdated' => 1,
            'Unique' => 1,
            'isLocalMin' => 0,
            'Cost' => '0.252',
            'StartsAt' => '2023-06-02 00:00:00',
            'isLocalMax' => 1,
            'Basename' => 'fc0_00_'
          },
          {
            'isLocalMax' => 0,
            'Basename' => 'fc0_01_',
            'AboveAverage' => 1,
            'Outdated' => 1,
            'Unique' => 1,
            'isLocalMin' => 1,
            'Cost' => '0.247',
            'StartsAt' => '2023-06-02 01:00:00'
          },
          {
            'Cost' => '0.2475',
            'isLocalMin' => 0,
            'StartsAt' => '2023-06-02 02:00:00',
            'Unique' => 1,
            'Outdated' => 1,
            'AboveAverage' => 1,
            'isLocalMax' => 1,
            'Basename' => 'fc0_02_'
          },...

und der Überblick sieht dann so als Beispiel aus:
B  O  M  StartsAt              Cost     
.  x  .  2023-06-02 00:00:00   0.252    
.  x  *  2023-06-02 01:00:00   0.247    
.  x  .  2023-06-02 02:00:00   0.2475   
.  x  *  2023-06-02 03:00:00   0.2446   
.  x  .  2023-06-02 04:00:00   0.249    
.  x  .  2023-06-02 05:00:00   0.2606   
.  x  .  2023-06-02 06:00:00   0.2941   
.  x  .  2023-06-02 07:00:00   0.3019   
.  x  .  2023-06-02 08:00:00   0.267    
.  x  .  2023-06-02 09:00:00   0.2529   
B  x  .  2023-06-02 10:00:00   0.2383   
B  x  .  2023-06-02 11:00:00   0.2276   
B  x  .  2023-06-02 12:00:00   0.2192   
B  x  .  2023-06-02 13:00:00   0.2032   
B  x  *  2023-06-02 14:00:00   0.1963   
B  x  .  2023-06-02 15:00:00   0.2059   
B  x  .  2023-06-02 16:00:00   0.2218   
.  x  .  2023-06-02 17:00:00   0.2437   
.  x  .  2023-06-02 18:00:00   0.2548   
.  x  .  2023-06-02 19:00:00   0.2728   
.  x  .  2023-06-02 20:00:00   0.284    
.  x  .  2023-06-02 21:00:00   0.2731   
.  .  .  2023-06-02 22:00:00   0.2626   
.  .  .  2023-06-02 23:00:00   0.2537   
.  .  .  2023-06-03 00:00:00   0.2536   
.  .  .  2023-06-03 01:00:00   0.2481   
.  .  .  2023-06-03 02:00:00   0.2451   
.  .  *  2023-06-03 03:00:00   0.242    
.  .  .  2023-06-03 04:00:00   0.2485   
.  .  .  2023-06-03 05:00:00   0.2461   
.  .  .  2023-06-03 06:00:00   0.245    

Damian

Die erste Rechnung ist bei mir eingetrudelt. Es ist genau der Betrag, der in der App berechnet wurde. Die Grundgebühr von ca. 10 Euro wurde, wie schon von mir erwähnt, bereits auf die Stunden verteilt:

ZitatKosten Stromverbrauch 16. Mai 2023 - 31. Mai 2023
58,20 kWh mit einem Durchschnittspreis von 22,18 ct/kWh
12,91 €
Kosten Grundgebühr 16. Mai 2023 - 31. Mai 2023
Einzelheiten findest du auf den nächsten Seiten.
4,27 €
MwSt 19% 3,29 €
Fälliger Betrag
20,47 €

Mit 22,18 ct/kWh kann ich mich nicht beschweren :)

Ohne PV dürfte die Kilowattstunde noch günstiger sein.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

Zitat von: Damian am 13 Juni 2023, 17:51:46Die erste Rechnung ist bei mir eingetrudelt. Es ist genau der Betrag, der in der App berechnet wurde. Die Grundgebühr von ca. 10 Euro wurde, wie schon von mir erwähnt, bereits auf die Stunden verteilt:

Zitat< snip >

Mit 22,18 ct/kWh kann ich mich nicht beschweren :)

Ohne PV dürfte die Kilowattstunde noch günstiger sein.
Moin,
könntest Du mal eine Auswertung mit Unterscheidung zwischen Tag/Nacht machen? Am besten direkt auf Stunden Basis und nicht im Durchschnitt, dann hätte man mal eine reelle Auswertung, wann man wirklich die niedrigsten Preise abgreifen kann.

- Bei mir wäre von 6-21 Uhr zu 100% PV-Leistung.
- In der Nacht hätte ich den Speicher zu 100%, aber es hat ja nicht jeder einen Speichen.

Somit könnte man im Sommer nur in der Nacht günstiger beziehen und da hatte ich leider nur die hohen Preise bei Tibber gesehen.

Spannend wird da erst der Winter, wenn man auch tagsüber seinen Bedarf nicht decken kann.

Welche Geräte könntest Du denn zur Optimierung verwenden, die man im Verbrauch verschieben kann?

- WP für WW und HZG
- Klima Geräte für Kühlung / Heizung
- Pool / Wirlpool
- BEV
- Waschmaschine
- Spülmaschine
- Teichheizung


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

Das kann man leider nicht pauschal sagen.

Am Wochenende sieht es anders aus als unter der Woche. In der Mittagszeit halbiert sich der Preis am Wochenende. Im Winter werden die stündlichen Preise vermutlich anders aussehen, weil dann weniger PV-Energie insgesamt produziert wird.

Für eine Bewertung fehlen mir noch die Daten des gesamten Jahres.

Ich denke, dass man sagen kann, dass die Stundenpreise morgens 7-8 Uhr und abends 20-21 Uhr immer höher sein werden, weil in dieser Zeit der Strombedarf bundesweit am höchsten ist. Und umgekehrt, die Stundenpreise am Wochenende im Sommer (ggf. auch im Winter) mittags am niedrigsten sind, weil der Strombedarf dort am niedrigsten ist.

Für die Berechnung benötigt man nur die offiziellen Stundenpreise von Tibber und das eigene Benutzerprofil und dann kann jeder für sich berechnen, was er für sein Verhalten bezahlen würde.

Da wir unser Verhalten weitgehend an PV optimiert haben - Stromfresser (Waschmaschine/Spülmaschine/Trockner) laufen, wenn die Sonne scheint, der Rest ist weitgehend fix, lohnt sich die Rechnerei für mich nicht so sehr, ob ich nun Tibber habe oder nicht.

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

ch.eick

Zitat von: Damian am 14 Juni 2023, 09:36:28Das kann man leider nicht pauschal sagen.

Am Wochenende sieht es anders aus als unter der Woche. In der Mittagszeit halbiert sich der Preis am Wochenende. Im Winter werden die stündlichen Preise vermutlich anders aussehen, weil dann weniger PV-Energie insgesamt produziert wird.

Für eine Bewertung fehlen mir noch die Daten des gesamten Jahres.

Ich denke, dass man sagen kann, dass die Stundenpreise morgens 7-8 Uhr und abends 20-21 Uhr immer höher sein werden, weil in dieser Zeit der Strombedarf bundesweit am höchsten ist. Und umgekehrt, die Stundenpreise am Wochenende im Sommer (ggf. auch im Winter) mittags am niedrigsten sind, weil der Strombedarf dort am niedrigsten ist.

Für die Berechnung benötigt man nur die offiziellen Stundenpreise von Tibber und das eigene Benutzerprofil und dann kann jeder für sich berechnen, was er für sein Verhalten bezahlen würde.

Da wir unser Verhalten weitgehend an PV optimiert haben - Stromfresser (Waschmaschine/Spülmaschine/Trockner) laufen, wenn die Sonne scheint, der Rest ist weitgehend fix, lohnt sich die Rechnerei für mich nicht so sehr. Ob ich nun Tibber habe oder nicht.


Ich stelle mir eine MySQL SELECT Auswertung vor, bei der die PV Werte und die Tibber Werte zusammen geführt werden und nur der Teil aus dem Netzbezug in die Berechnung eingeht.

Optimieren kannst Du ja nur, wenn Du bei einer PV-Anlage nicht genug Leistung hast.
Bei mir wäre das im Winter, wenn ich den Speicher nicht voll bekomme. Dann könnte ich z.B. das WP WW in die Tibber 0 € Zeit legen. Dann wäre die Chance den Speicher am Tag doch voll zu bekommen. Wenn er leer wäre könnte man ihn auch in der 0 € Zeit laden. Das BEV könnte ebenfalls zu Tibber Zeiten geladen werden.

Bei Dir könntest Du die Starkverbraucher auch im Winter auf Tibber optimieren, falls Du einen PV-Speicher hast, um den richtig zu füllen. Das könnte man an den Verbrauchskurven erkennen. Hast Du die Starrkverbraucher separat gemessen? Bei mir verwende ich einen Shelly 1, wegen des Anlaufstroms der WAMA.
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

ZitatBei Dir könntest Du die Starkverbraucher auch im Winter auf Tibber optimieren, falls Du einen PV-Speicher hast, um den richtig zu füllen.

Das wird vermutlich die Mittagszeit sein, verstärkt am Wochenende - würde bei uns am Verhalten nicht viel ändern, da es ohnehin die Zeit ist, wo wir auch heute diese Verbraucher laufen lassen und man kann nicht immer bis zum Wochenende warten. Wir haben keinen Speicher und kein E-Auto.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

Zitat von: Damian am 14 Juni 2023, 10:05:37
ZitatBei Dir könntest Du die Starkverbraucher auch im Winter auf Tibber optimieren, falls Du einen PV-Speicher hast, um den richtig zu füllen.

Das wird vermutlich die Mittagszeit sein, verstärkt am Wochenende - würde bei uns am Verhalten nicht viel ändern, da es ohnehin die Zeit ist, wo wir auch heute diese Verbraucher laufen lassen und man kann nicht immer bis zum Wochenende warten. Wir haben keinen Speicher und kein E-Auto.

Ich hatte im Winter durch starken Wind auch häufiger nachts günstige Preise gesehen ;-) Da wäre WAMA und SPÜMA gut zu starten.
Wenn es im Winter mit Deiner PV natürlich tagsüber auch passt wäre das natürlich als Direktverbrauch auch gut, außer Tibber macht negative Preise.
Es ist somit nicht so richtig einfach die Balance zu finden, da man in bestimmten Fällen eventuell mehr für die Einspeisung bekommt.
Fallen bei den 0 € Preisen die Grundkosten/kWh auch an? Also die Netzkosten und das ganze andere Zeugs.
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

Daher warte ich mal die Entwicklung der Stundenpreise ab.

Die pauschalen Fixkosten pro Monat von ca. 10 € je nach Region hast du immer. Die kannst du außen vor lassen oder gleich auf die Anzahl der Stunden des Monats aufteilen, wie Tibber das in der App macht. Die sind ja für die Optimierung des Verbrauchs nicht relevant.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

Zitat von: Damian am 14 Juni 2023, 11:08:23Daher warte ich mal die Entwicklung der Stundenpreise ab.

Die pauschalen Fixkosten pro Monat von ca. 10 € je nach Region hast du immer. Die kannst du außen vor lassen oder gleich auf die Anzahl der Stunden des Monats aufteilen, wie Tibber das in der App macht. Die sind ja für die Optimierung des Verbrauchs nicht relevant.
Ich meinte die Durchleitungskosten, wenn Tibber < 0 € als Preis angibt.
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