defmod Stromboerse_connect HTTPMOD none 0
attr Stromboerse_connect userattr conf_EVU_Tibber_Grundgebuehr_EUR_Jahr conf_EVU_Tibber_Korrektur conf_EVU_Tibber_Zuschlag_ct_kWh conf_EVU_aWATTar_Grundgebuehr_EUR_Jahr conf_EVU_aWATTar_Zuschlag_ct_kWh conf_Netz_Jahresverbrauch_kWh conf_Netz_Zaehler conf_Netz_Zaehler_Reading  conf_Speicher_Ladepreisdifferenz conf_VAT conf_VNB conf_VNB_Arbeitspreis_ct_kWh conf_VNB_KWKG_ct_kWh conf_VNB_Konzession_ct_kWh conf_VNB_Leistungspreis_EUR_Jahr conf_VNB_MSB_iMSys_EUR_Jahr conf_VNB_MSB_mME_EUR_Jahr conf_VNB_Messstelle conf_VNB_Netzentgelt_ct_kWh conf_VNB_Paragraph_19_Umlage_ct_kWh conf_VNB_Stromsteuer_ct_kWh ws_homeId ws_minInterval ws_myId ws_token ws_websocketURL
attr Stromboerse_connect DbLogExclude .*
attr Stromboerse_connect DbLogInclude total_cost_.*,fc._trigger.*
attr Stromboerse_connect DbLogValueFn {\
  if ($READING =~ /fc0_trigger/) {\
    my ($sec, $min, $hour, $mday, $mon, $year) = localtime(time_str2num($TIMESTAMP));;\
   $year += 1900;;\
   $mon  += 1;;\
   my $quarter = int($min / 15) * 15;;  # Minuten auf 0, 15, 30 oder 45 abrunden\
\
   $TIMESTAMP = sprintf("%04d-%02d-%02d %02d:%02d:00", $year, $mon, $mday, $hour, $quarter);;\
  }\
}
attr Stromboerse_connect comment Version: 20260129 18:00\\
\
https://api.energy-charts.info\
https://api.energy-charts.info/price?bzn=DE-LU&start=2025-06-25&end=2025-06-25\
\
https://api.energy-charts.info/price?bzn=DE-LU 3600\
\
\
Tibber Formel mit Kosten für 64560 bei e-Netz Südhessen\
\
Rechnung (alle Werte in ct/kWh)\
  Spotpreis: S = 13.3 (Beispiel)\
\
  Tibber-Zuschlag: P = 2.15\
  Grundgebühr: G = 5.99 Brutto\
           G ct_pro_kWh    = 5.03 × 100 / 425 ≈ 1.1835 ct_pro_kWh\
\
  Netzentgelt (Arbeit): N = 8.00\
  KWKG = 0.277\
  Konzessionsabgabe: Konz = 1.59\
  Arbeitspreis (Netznutzung): A = 2.14 ct/kWh\
  moderne Messeinrichtungen (mME): 25.00 € / Jahr brutto  => 21.01 € / Jahr Netto\
\
\
Tibber_Live\
\
https://developer.tibber.com/explorer\
\
In der FHEM Kommandozeile könnt Ihr das token und die homeID im KeyStore ablegen.\
Bitte lest dazu das Thema KeyStore im Wiki und legt die Funktion in Eure 99_myUtils.\
\
{KeyValue("store","EVU_Tibber_connect_token","5K4MVS-OjfWhK_4yrjOlFe1F6kJXPVf7eQYggo8ebAE")}\
{KeyValue("store","EVU_Tibber_connect_homeID","96a14971-525a-4420-aae9-e5aedaa129ff")}\
\
Hierduch kann man einen wirtschaftlicheren trigger_price berechnen lassen:\
setreading EVU_Tibber compensation_grid <Eure Einspeisevergütung>\
\
# Berechnung eines Default Schwellwertes als täglicher Niedrigpreis\
    (fc_avg - fc_min)  /2 + fc_min\
\
# Abschätzung von Wirtschaftlichkeit beim Speicher Laden, falls Tibber zu teuer wird\
# compensation_grid kann auch auf einen für Euch passenden Wert gesetzt werden\
    (fc_avg - compensation_grid) *0.85\

attr Stromboerse_connect conf_EVU_Tibber_Grundgebuehr_EUR_Jahr 57.84
attr Stromboerse_connect conf_EVU_Tibber_Korrektur 0.755
attr Stromboerse_connect conf_EVU_Tibber_Zuschlag_ct_kWh 2.15
attr Stromboerse_connect conf_EVU_aWATTar_Grundgebuehr_EUR_Jahr 46.20
attr Stromboerse_connect conf_EVU_aWATTar_Zuschlag_ct_kWh 0
attr Stromboerse_connect conf_Netz_Jahresverbrauch_kWh 3500
attr Stromboerse_connect conf_Netz_Zaehler WR_0_KSEM
attr Stromboerse_connect conf_Netz_Zaehler_Reading Active_energy+
attr Stromboerse_connect conf_Speicher_Ladepreisdifferenz 20
attr Stromboerse_connect conf_VAT 1.19
attr Stromboerse_connect conf_VNB Mainzer Netze GmbH (64560)
attr Stromboerse_connect conf_VNB_Arbeitspreis_ct_kWh 7.54
attr Stromboerse_connect conf_VNB_KWKG_ct_kWh 0.446
attr Stromboerse_connect conf_VNB_Konzession_ct_kWh 1.32
attr Stromboerse_connect conf_VNB_MSB_iMSys_EUR_Jahr 120
attr Stromboerse_connect conf_VNB_MSB_mME_EUR_Jahr 16.81
attr Stromboerse_connect conf_VNB_Messstelle mME
attr Stromboerse_connect conf_VNB_Netzentgelt_ct_kWh 6.72
attr Stromboerse_connect conf_VNB_Paragraph_19_Umlage_ct_kWh 1.559
attr Stromboerse_connect conf_VNB_Stromsteuer_ct_kWh 2.05
attr Stromboerse_connect disable 0
attr Stromboerse_connect get01-100Name fc1_0045_total
attr Stromboerse_connect get01-100OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-101Name fc1_0100_total
attr Stromboerse_connect get01-101OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-102Name fc1_0115_total
attr Stromboerse_connect get01-102OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-103Name fc1_0130_total
attr Stromboerse_connect get01-103OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-104Name fc1_0145_total
attr Stromboerse_connect get01-104OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-105Name fc1_0200_total
attr Stromboerse_connect get01-105OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-106Name fc1_0215_total
attr Stromboerse_connect get01-106OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-107Name fc1_0230_total
attr Stromboerse_connect get01-107OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-108Name fc1_0245_total
attr Stromboerse_connect get01-108OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-109Name fc1_0300_total
attr Stromboerse_connect get01-109OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-10Name fc0_0215_total
attr Stromboerse_connect get01-10OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-110Name fc1_0315_total
attr Stromboerse_connect get01-110OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-111Name fc1_0330_total
attr Stromboerse_connect get01-111OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-112Name fc1_0345_total
attr Stromboerse_connect get01-112OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-113Name fc1_0400_total
attr Stromboerse_connect get01-113OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-114Name fc1_0415_total
attr Stromboerse_connect get01-114OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-115Name fc1_0430_total
attr Stromboerse_connect get01-115OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-116Name fc1_0445_total
attr Stromboerse_connect get01-116OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-117Name fc1_0500_total
attr Stromboerse_connect get01-117OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-118Name fc1_0515_total
attr Stromboerse_connect get01-118OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-119Name fc1_0530_total
attr Stromboerse_connect get01-119OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-11Name fc0_0230_total
attr Stromboerse_connect get01-11OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-120Name fc1_0545_total
attr Stromboerse_connect get01-120OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-121Name fc1_0600_total
attr Stromboerse_connect get01-121OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-122Name fc1_0615_total
attr Stromboerse_connect get01-122OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-123Name fc1_0630_total
attr Stromboerse_connect get01-123OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-124Name fc1_0645_total
attr Stromboerse_connect get01-124OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-125Name fc1_0700_total
attr Stromboerse_connect get01-125OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-126Name fc1_0715_total
attr Stromboerse_connect get01-126OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-127Name fc1_0730_total
attr Stromboerse_connect get01-127OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-128Name fc1_0745_total
attr Stromboerse_connect get01-128OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-129Name fc1_0800_total
attr Stromboerse_connect get01-129OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-12Name fc0_0245_total
attr Stromboerse_connect get01-12OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-130Name fc1_0815_total
attr Stromboerse_connect get01-130OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-131Name fc1_0830_total
attr Stromboerse_connect get01-131OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-132Name fc1_0845_total
attr Stromboerse_connect get01-132OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-133Name fc1_0900_total
attr Stromboerse_connect get01-133OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-134Name fc1_0915_total
attr Stromboerse_connect get01-134OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-135Name fc1_0930_total
attr Stromboerse_connect get01-135OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-136Name fc1_0945_total
attr Stromboerse_connect get01-136OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-137Name fc1_1000_total
attr Stromboerse_connect get01-137OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-138Name fc1_1015_total
attr Stromboerse_connect get01-138OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-139Name fc1_1030_total
attr Stromboerse_connect get01-139OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-13Name fc0_0300_total
attr Stromboerse_connect get01-13OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-140Name fc1_1045_total
attr Stromboerse_connect get01-140OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-141Name fc1_1100_total
attr Stromboerse_connect get01-141OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-142Name fc1_1115_total
attr Stromboerse_connect get01-142OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-143Name fc1_1130_total
attr Stromboerse_connect get01-143OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-144Name fc1_1145_total
attr Stromboerse_connect get01-144OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-145Name fc1_1200_total
attr Stromboerse_connect get01-145OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-146Name fc1_1215_total
attr Stromboerse_connect get01-146OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-147Name fc1_1230_total
attr Stromboerse_connect get01-147OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-148Name fc1_1245_total
attr Stromboerse_connect get01-148OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-149Name fc1_1300_total
attr Stromboerse_connect get01-149OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-14Name fc0_0315_total
attr Stromboerse_connect get01-14OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-150Name fc1_1315_total
attr Stromboerse_connect get01-150OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-151Name fc1_1330_total
attr Stromboerse_connect get01-151OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-152Name fc1_1345_total
attr Stromboerse_connect get01-152OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-153Name fc1_1400_total
attr Stromboerse_connect get01-153OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-154Name fc1_1415_total
attr Stromboerse_connect get01-154OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-155Name fc1_1430_total
attr Stromboerse_connect get01-155OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-156Name fc1_1445_total
attr Stromboerse_connect get01-156OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-157Name fc1_1500_total
attr Stromboerse_connect get01-157OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-158Name fc1_1515_total
attr Stromboerse_connect get01-158OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-159Name fc1_1530_total
attr Stromboerse_connect get01-159OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-15Name fc0_0330_total
attr Stromboerse_connect get01-15OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-160Name fc1_1545_total
attr Stromboerse_connect get01-160OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-161Name fc1_1600_total
attr Stromboerse_connect get01-161OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-162Name fc1_1615_total
attr Stromboerse_connect get01-162OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-163Name fc1_1630_total
attr Stromboerse_connect get01-163OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-164Name fc1_1645_total
attr Stromboerse_connect get01-164OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-165Name fc1_1700_total
attr Stromboerse_connect get01-165OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-166Name fc1_1715_total
attr Stromboerse_connect get01-166OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-167Name fc1_1730_total
attr Stromboerse_connect get01-167OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-168Name fc1_1745_total
attr Stromboerse_connect get01-168OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-169Name fc1_1800_total
attr Stromboerse_connect get01-169OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-16Name fc0_0345_total
attr Stromboerse_connect get01-16OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-170Name fc1_1815_total
attr Stromboerse_connect get01-170OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-171Name fc1_1830_total
attr Stromboerse_connect get01-171OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-172Name fc1_1845_total
attr Stromboerse_connect get01-172OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-173Name fc1_1900_total
attr Stromboerse_connect get01-173OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-174Name fc1_1915_total
attr Stromboerse_connect get01-174OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-175Name fc1_1930_total
attr Stromboerse_connect get01-175OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-176Name fc1_1945_total
attr Stromboerse_connect get01-176OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-177Name fc1_2000_total
attr Stromboerse_connect get01-177OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-178Name fc1_2015_total
attr Stromboerse_connect get01-178OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-179Name fc1_2030_total
attr Stromboerse_connect get01-179OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-17Name fc0_0400_total
attr Stromboerse_connect get01-17OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-180Name fc1_2045_total
attr Stromboerse_connect get01-180OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-181Name fc1_2100_total
attr Stromboerse_connect get01-181OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-182Name fc1_2115_total
attr Stromboerse_connect get01-182OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-183Name fc1_2130_total
attr Stromboerse_connect get01-183OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-184Name fc1_2145_total
attr Stromboerse_connect get01-184OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-185Name fc1_2200_total
attr Stromboerse_connect get01-185OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-186Name fc1_2215_total
attr Stromboerse_connect get01-186OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-187Name fc1_2230_total
attr Stromboerse_connect get01-187OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-188Name fc1_2245_total
attr Stromboerse_connect get01-188OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-189Name fc1_2300_total
attr Stromboerse_connect get01-189OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-18Name fc0_0415_total
attr Stromboerse_connect get01-18OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-190Name fc1_2315_total
attr Stromboerse_connect get01-190OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-191Name fc1_2330_total
attr Stromboerse_connect get01-191OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-192Name fc1_2345_total
attr Stromboerse_connect get01-192OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-19Name fc0_0430_total
attr Stromboerse_connect get01-19OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-1Name fc0_0000_total
attr Stromboerse_connect get01-1OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-20Name fc0_0445_total
attr Stromboerse_connect get01-20OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-21Name fc0_0500_total
attr Stromboerse_connect get01-21OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-22Name fc0_0515_total
attr Stromboerse_connect get01-22OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-23Name fc0_0530_total
attr Stromboerse_connect get01-23OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-24Name fc0_0545_total
attr Stromboerse_connect get01-24OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-25Name fc0_0600_total
attr Stromboerse_connect get01-25OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-26Name fc0_0615_total
attr Stromboerse_connect get01-26OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-27Name fc0_0630_total
attr Stromboerse_connect get01-27OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-28Name fc0_0645_total
attr Stromboerse_connect get01-28OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-29Name fc0_0700_total
attr Stromboerse_connect get01-29OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-2Name fc0_0015_total
attr Stromboerse_connect get01-2OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-30Name fc0_0715_total
attr Stromboerse_connect get01-30OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-31Name fc0_0730_total
attr Stromboerse_connect get01-31OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-32Name fc0_0745_total
attr Stromboerse_connect get01-32OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-33Name fc0_0800_total
attr Stromboerse_connect get01-33OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-34Name fc0_0815_total
attr Stromboerse_connect get01-34OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-35Name fc0_0830_total
attr Stromboerse_connect get01-35OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-36Name fc0_0845_total
attr Stromboerse_connect get01-36OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-37Name fc0_0900_total
attr Stromboerse_connect get01-37OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-38Name fc0_0915_total
attr Stromboerse_connect get01-38OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-39Name fc0_0930_total
attr Stromboerse_connect get01-39OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-3Name fc0_0030_total
attr Stromboerse_connect get01-3OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-40Name fc0_0945_total
attr Stromboerse_connect get01-40OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-41Name fc0_1000_total
attr Stromboerse_connect get01-41OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-42Name fc0_1015_total
attr Stromboerse_connect get01-42OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-43Name fc0_1030_total
attr Stromboerse_connect get01-43OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-44Name fc0_1045_total
attr Stromboerse_connect get01-44OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-45Name fc0_1100_total
attr Stromboerse_connect get01-45OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-46Name fc0_1115_total
attr Stromboerse_connect get01-46OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-47Name fc0_1130_total
attr Stromboerse_connect get01-47OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-48Name fc0_1145_total
attr Stromboerse_connect get01-48OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-49Name fc0_1200_total
attr Stromboerse_connect get01-49OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-4Name fc0_0045_total
attr Stromboerse_connect get01-4OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-50Name fc0_1215_total
attr Stromboerse_connect get01-50OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-51Name fc0_1230_total
attr Stromboerse_connect get01-51OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-52Name fc0_1245_total
attr Stromboerse_connect get01-52OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-53Name fc0_1300_total
attr Stromboerse_connect get01-53OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-54Name fc0_1315_total
attr Stromboerse_connect get01-54OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-55Name fc0_1330_total
attr Stromboerse_connect get01-55OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-56Name fc0_1345_total
attr Stromboerse_connect get01-56OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-57Name fc0_1400_total
attr Stromboerse_connect get01-57OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-58Name fc0_1415_total
attr Stromboerse_connect get01-58OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-59Name fc0_1430_total
attr Stromboerse_connect get01-59OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-5Name fc0_0100_total
attr Stromboerse_connect get01-5OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-60Name fc0_1445_total
attr Stromboerse_connect get01-60OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-61Name fc0_1500_total
attr Stromboerse_connect get01-61OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-62Name fc0_1515_total
attr Stromboerse_connect get01-62OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-63Name fc0_1530_total
attr Stromboerse_connect get01-63OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-64Name fc0_1545_total
attr Stromboerse_connect get01-64OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-65Name fc0_1600_total
attr Stromboerse_connect get01-65OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-66Name fc0_1615_total
attr Stromboerse_connect get01-66OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-67Name fc0_1630_total
attr Stromboerse_connect get01-67OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-68Name fc0_1645_total
attr Stromboerse_connect get01-68OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-69Name fc0_1700_total
attr Stromboerse_connect get01-69OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-6Name fc0_0115_total
attr Stromboerse_connect get01-6OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-70Name fc0_1715_total
attr Stromboerse_connect get01-70OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-71Name fc0_1730_total
attr Stromboerse_connect get01-71OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-72Name fc0_1745_total
attr Stromboerse_connect get01-72OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-73Name fc0_1800_total
attr Stromboerse_connect get01-73OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-74Name fc0_1815_total
attr Stromboerse_connect get01-74OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-75Name fc0_1830_total
attr Stromboerse_connect get01-75OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-76Name fc0_1845_total
attr Stromboerse_connect get01-76OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-77Name fc0_1900_total
attr Stromboerse_connect get01-77OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-78Name fc0_1915_total
attr Stromboerse_connect get01-78OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-79Name fc0_1930_total
attr Stromboerse_connect get01-79OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-7Name fc0_0130_total
attr Stromboerse_connect get01-7OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-80Name fc0_1945_total
attr Stromboerse_connect get01-80OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-81Name fc0_2000_total
attr Stromboerse_connect get01-81OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-82Name fc0_2015_total
attr Stromboerse_connect get01-82OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-83Name fc0_2030_total
attr Stromboerse_connect get01-83OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-84Name fc0_2045_total
attr Stromboerse_connect get01-84OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-85Name fc0_2100_total
attr Stromboerse_connect get01-85OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-86Name fc0_2115_total
attr Stromboerse_connect get01-86OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-87Name fc0_2130_total
attr Stromboerse_connect get01-87OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-88Name fc0_2145_total
attr Stromboerse_connect get01-88OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-89Name fc0_2200_total
attr Stromboerse_connect get01-89OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-8Name fc0_0145_total
attr Stromboerse_connect get01-8OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-90Name fc0_2215_total
attr Stromboerse_connect get01-90OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-91Name fc0_2230_total
attr Stromboerse_connect get01-91OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-92Name fc0_2245_total
attr Stromboerse_connect get01-92OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-93Name fc0_2300_total
attr Stromboerse_connect get01-93OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-94Name fc0_2315_total
attr Stromboerse_connect get01-94OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-95Name fc0_2330_total
attr Stromboerse_connect get01-95OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-96Name fc0_2345_total
attr Stromboerse_connect get01-96OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-97Name fc1_0000_total
attr Stromboerse_connect get01-97OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-98Name fc1_0015_total
attr Stromboerse_connect get01-98OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-99Name fc1_0030_total
attr Stromboerse_connect get01-99OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01-9Name fc0_0200_total
attr Stromboerse_connect get01-9OExpr round( (ReadingsVal($name,"conf_EVU","null") eq "EPEX_Spot" ? $val/10 : ReadingsVal($name,"conf_EVU","null") eq "Tibber" ? ($val/10 + ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0)) : $val/10+0.03*abs($val/10)+ ReadingsVal($name,"conf_EVU_Summe_ct_kWh",0) ) * AttrVal($name,"conf_VAT",0) ,4)
attr Stromboerse_connect get01DeleteIfUnmatched 1
attr Stromboerse_connect get01Name 01_Preis_Info_EPEX_Spot
attr Stromboerse_connect get01RegOpt g
attr Stromboerse_connect get01Regex [price":\[|,](-?\d+\.\d+)
attr Stromboerse_connect get01URL https://api.energy-charts.info/price?bzn=DE-LU&start=%%start_today%%&end=%%start_tomorrow%%
attr Stromboerse_connect get02-101Name fc0_0545_total
attr Stromboerse_connect get02-101OExpr $val * 100
attr Stromboerse_connect get02-105Name fc0_0600_total
attr Stromboerse_connect get02-105OExpr $val * 100
attr Stromboerse_connect get02-109Name fc0_0615_total
attr Stromboerse_connect get02-109OExpr $val * 100
attr Stromboerse_connect get02-113Name fc0_0630_total
attr Stromboerse_connect get02-113OExpr $val * 100
attr Stromboerse_connect get02-117Name fc0_0645_total
attr Stromboerse_connect get02-117OExpr $val * 100
attr Stromboerse_connect get02-11Name fc0_0000_total
attr Stromboerse_connect get02-11OExpr $val * 100
attr Stromboerse_connect get02-121Name fc0_0700_total
attr Stromboerse_connect get02-121OExpr $val * 100
attr Stromboerse_connect get02-125Name fc0_0715_total
attr Stromboerse_connect get02-125OExpr $val * 100
attr Stromboerse_connect get02-129Name fc0_0730_total
attr Stromboerse_connect get02-129OExpr $val * 100
attr Stromboerse_connect get02-12Name fc0_0000_startsAt
attr Stromboerse_connect get02-12OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get02-133Name fc0_0745_total
attr Stromboerse_connect get02-133OExpr $val * 100
attr Stromboerse_connect get02-137Name fc0_0800_total
attr Stromboerse_connect get02-137OExpr $val * 100
attr Stromboerse_connect get02-13Name fc0_0015_total
attr Stromboerse_connect get02-13OExpr $val * 100
attr Stromboerse_connect get02-141Name fc0_0815_total
attr Stromboerse_connect get02-141OExpr $val * 100
attr Stromboerse_connect get02-145Name fc0_0830_total
attr Stromboerse_connect get02-145OExpr $val * 100
attr Stromboerse_connect get02-149Name fc0_0845_total
attr Stromboerse_connect get02-149OExpr $val * 100
attr Stromboerse_connect get02-153Name fc0_0900_total
attr Stromboerse_connect get02-153OExpr $val * 100
attr Stromboerse_connect get02-157Name fc0_0915_total
attr Stromboerse_connect get02-157OExpr $val * 100
attr Stromboerse_connect get02-161Name fc0_0930_total
attr Stromboerse_connect get02-161OExpr $val * 100
attr Stromboerse_connect get02-165Name fc0_0945_total
attr Stromboerse_connect get02-165OExpr $val * 100
attr Stromboerse_connect get02-169Name fc0_1000_total
attr Stromboerse_connect get02-169OExpr $val * 100
attr Stromboerse_connect get02-173Name fc0_1015_total
attr Stromboerse_connect get02-173OExpr $val * 100
attr Stromboerse_connect get02-177Name fc0_1030_total
attr Stromboerse_connect get02-177OExpr $val * 100
attr Stromboerse_connect get02-17Name fc0_0030_total
attr Stromboerse_connect get02-17OExpr $val * 100
attr Stromboerse_connect get02-181Name fc0_1045_total
attr Stromboerse_connect get02-181OExpr $val * 100
attr Stromboerse_connect get02-185Name fc0_1100_total
attr Stromboerse_connect get02-185OExpr $val * 100
attr Stromboerse_connect get02-189Name fc0_1115_total
attr Stromboerse_connect get02-189OExpr $val * 100
attr Stromboerse_connect get02-193Name fc0_1130_total
attr Stromboerse_connect get02-193OExpr $val * 100
attr Stromboerse_connect get02-197Name fc0_1145_total
attr Stromboerse_connect get02-197OExpr $val * 100
attr Stromboerse_connect get02-1Name current_price
attr Stromboerse_connect get02-201Name fc0_1200_total
attr Stromboerse_connect get02-201OExpr $val * 100
attr Stromboerse_connect get02-205Name fc0_1215_total
attr Stromboerse_connect get02-205OExpr $val * 100
attr Stromboerse_connect get02-209Name fc0_1230_total
attr Stromboerse_connect get02-209OExpr $val * 100
attr Stromboerse_connect get02-213Name fc0_1245_total
attr Stromboerse_connect get02-213OExpr $val * 100
attr Stromboerse_connect get02-217Name fc0_1300_total
attr Stromboerse_connect get02-217OExpr $val * 100
attr Stromboerse_connect get02-21Name fc0_0045_total
attr Stromboerse_connect get02-21OExpr $val * 100
attr Stromboerse_connect get02-221Name fc0_1315_total
attr Stromboerse_connect get02-221OExpr $val * 100
attr Stromboerse_connect get02-225Name fc0_1330_total
attr Stromboerse_connect get02-225OExpr $val * 100
attr Stromboerse_connect get02-229Name fc0_1345_total
attr Stromboerse_connect get02-229OExpr $val * 100
attr Stromboerse_connect get02-233Name fc0_1400_total
attr Stromboerse_connect get02-233OExpr $val * 100
attr Stromboerse_connect get02-237Name fc0_1415_total
attr Stromboerse_connect get02-237OExpr $val * 100
attr Stromboerse_connect get02-241Name fc0_1430_total
attr Stromboerse_connect get02-241OExpr $val * 100
attr Stromboerse_connect get02-245Name fc0_1445_total
attr Stromboerse_connect get02-245OExpr $val * 100
attr Stromboerse_connect get02-249Name fc0_1500_total
attr Stromboerse_connect get02-249OExpr $val * 100
attr Stromboerse_connect get02-253Name fc0_1515_total
attr Stromboerse_connect get02-253OExpr $val * 100
attr Stromboerse_connect get02-257Name fc0_1530_total
attr Stromboerse_connect get02-257OExpr $val * 100
attr Stromboerse_connect get02-25Name fc0_0100_total
attr Stromboerse_connect get02-25OExpr $val * 100
attr Stromboerse_connect get02-261Name fc0_1545_total
attr Stromboerse_connect get02-261OExpr $val * 100
attr Stromboerse_connect get02-265Name fc0_1600_total
attr Stromboerse_connect get02-265OExpr $val * 100
attr Stromboerse_connect get02-269Name fc0_1615_total
attr Stromboerse_connect get02-269OExpr $val * 100
attr Stromboerse_connect get02-273Name fc0_1630_total
attr Stromboerse_connect get02-273OExpr $val * 100
attr Stromboerse_connect get02-277Name fc0_1645_total
attr Stromboerse_connect get02-277OExpr $val * 100
attr Stromboerse_connect get02-281Name fc0_1700_total
attr Stromboerse_connect get02-281OExpr $val * 100
attr Stromboerse_connect get02-285Name fc0_1715_total
attr Stromboerse_connect get02-285OExpr $val * 100
attr Stromboerse_connect get02-289Name fc0_1730_total
attr Stromboerse_connect get02-289OExpr $val * 100
attr Stromboerse_connect get02-293Name fc0_1745_total
attr Stromboerse_connect get02-293OExpr $val * 100
attr Stromboerse_connect get02-297Name fc0_1800_total
attr Stromboerse_connect get02-297OExpr $val * 100
attr Stromboerse_connect get02-29Name fc0_0115_total
attr Stromboerse_connect get02-29OExpr $val * 100
attr Stromboerse_connect get02-301Name fc0_1815_total
attr Stromboerse_connect get02-301OExpr $val * 100
attr Stromboerse_connect get02-305Name fc0_1830_total
attr Stromboerse_connect get02-305OExpr $val * 100
attr Stromboerse_connect get02-309Name fc0_1845_total
attr Stromboerse_connect get02-309OExpr $val * 100
attr Stromboerse_connect get02-313Name fc0_1900_total
attr Stromboerse_connect get02-313OExpr $val * 100
attr Stromboerse_connect get02-317Name fc0_1915_total
attr Stromboerse_connect get02-317OExpr $val * 100
attr Stromboerse_connect get02-321Name fc0_1930_total
attr Stromboerse_connect get02-321OExpr $val * 100
attr Stromboerse_connect get02-325Name fc0_1945_total
attr Stromboerse_connect get02-325OExpr $val * 100
attr Stromboerse_connect get02-329Name fc0_2000_total
attr Stromboerse_connect get02-329OExpr $val * 100
attr Stromboerse_connect get02-333Name fc0_2015_total
attr Stromboerse_connect get02-333OExpr $val * 100
attr Stromboerse_connect get02-337Name fc0_2030_total
attr Stromboerse_connect get02-337OExpr $val * 100
attr Stromboerse_connect get02-33Name fc0_0130_total
attr Stromboerse_connect get02-33OExpr $val * 100
attr Stromboerse_connect get02-341Name fc0_2045_total
attr Stromboerse_connect get02-341OExpr $val * 100
attr Stromboerse_connect get02-345Name fc0_2100_total
attr Stromboerse_connect get02-345OExpr $val * 100
attr Stromboerse_connect get02-349Name fc0_2115_total
attr Stromboerse_connect get02-349OExpr $val * 100
attr Stromboerse_connect get02-353Name fc0_2130_total
attr Stromboerse_connect get02-353OExpr $val * 100
attr Stromboerse_connect get02-357Name fc0_2145_total
attr Stromboerse_connect get02-357OExpr $val * 100
attr Stromboerse_connect get02-361Name fc0_2200_total
attr Stromboerse_connect get02-361OExpr $val * 100
attr Stromboerse_connect get02-365Name fc0_2215_total
attr Stromboerse_connect get02-365OExpr $val * 100
attr Stromboerse_connect get02-369Name fc0_2230_total
attr Stromboerse_connect get02-369OExpr $val * 100
attr Stromboerse_connect get02-373Name fc0_2245_total
attr Stromboerse_connect get02-373OExpr $val * 100
attr Stromboerse_connect get02-377Name fc0_2300_total
attr Stromboerse_connect get02-377OExpr $val * 100
attr Stromboerse_connect get02-37Name fc0_0145_total
attr Stromboerse_connect get02-37OExpr $val * 100
attr Stromboerse_connect get02-381Name fc0_2315_total
attr Stromboerse_connect get02-381OExpr $val * 100
attr Stromboerse_connect get02-385Name fc0_2330_total
attr Stromboerse_connect get02-385OExpr $val * 100
attr Stromboerse_connect get02-389Name fc0_2345_total
attr Stromboerse_connect get02-389OExpr $val * 100
attr Stromboerse_connect get02-395Name fc1_0000_total
attr Stromboerse_connect get02-395OExpr $val * 100
attr Stromboerse_connect get02-396Name fc1_0000_startsAt
attr Stromboerse_connect get02-396OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get02-397Name fc1_0015_total
attr Stromboerse_connect get02-397OExpr $val * 100
attr Stromboerse_connect get02-401Name fc1_0030_total
attr Stromboerse_connect get02-401OExpr $val * 100
attr Stromboerse_connect get02-405Name fc1_0045_total
attr Stromboerse_connect get02-405OExpr $val * 100
attr Stromboerse_connect get02-409Name fc1_0100_total
attr Stromboerse_connect get02-409OExpr $val * 100
attr Stromboerse_connect get02-413Name fc1_0115_total
attr Stromboerse_connect get02-413OExpr $val * 100
attr Stromboerse_connect get02-417Name fc1_0130_total
attr Stromboerse_connect get02-417OExpr $val * 100
attr Stromboerse_connect get02-41Name fc0_0200_total
attr Stromboerse_connect get02-41OExpr $val * 100
attr Stromboerse_connect get02-421Name fc1_0145_total
attr Stromboerse_connect get02-421OExpr $val * 100
attr Stromboerse_connect get02-425Name fc1_0200_total
attr Stromboerse_connect get02-425OExpr $val * 100
attr Stromboerse_connect get02-429Name fc1_0215_total
attr Stromboerse_connect get02-429OExpr $val * 100
attr Stromboerse_connect get02-433Name fc1_0230_total
attr Stromboerse_connect get02-433OExpr $val * 100
attr Stromboerse_connect get02-437Name fc1_0245_total
attr Stromboerse_connect get02-437OExpr $val * 100
attr Stromboerse_connect get02-441Name fc1_0300_total
attr Stromboerse_connect get02-441OExpr $val * 100
attr Stromboerse_connect get02-445Name fc1_0315_total
attr Stromboerse_connect get02-445OExpr $val * 100
attr Stromboerse_connect get02-449Name fc1_0330_total
attr Stromboerse_connect get02-449OExpr $val * 100
attr Stromboerse_connect get02-453Name fc1_0345_total
attr Stromboerse_connect get02-453OExpr $val * 100
attr Stromboerse_connect get02-457Name fc1_0400_total
attr Stromboerse_connect get02-457OExpr $val * 100
attr Stromboerse_connect get02-45Name fc0_0215_total
attr Stromboerse_connect get02-45OExpr $val * 100
attr Stromboerse_connect get02-461Name fc1_0415_total
attr Stromboerse_connect get02-461OExpr $val * 100
attr Stromboerse_connect get02-465Name fc1_0430_total
attr Stromboerse_connect get02-465OExpr $val * 100
attr Stromboerse_connect get02-469Name fc1_0445_total
attr Stromboerse_connect get02-469OExpr $val * 100
attr Stromboerse_connect get02-473Name fc1_0500_total
attr Stromboerse_connect get02-473OExpr $val * 100
attr Stromboerse_connect get02-477Name fc1_0515_total
attr Stromboerse_connect get02-477OExpr $val * 100
attr Stromboerse_connect get02-481Name fc1_0530_total
attr Stromboerse_connect get02-481OExpr $val * 100
attr Stromboerse_connect get02-485Name fc1_0545_total
attr Stromboerse_connect get02-485OExpr $val * 100
attr Stromboerse_connect get02-489Name fc1_0600_total
attr Stromboerse_connect get02-489OExpr $val * 100
attr Stromboerse_connect get02-493Name fc1_0615_total
attr Stromboerse_connect get02-493OExpr $val * 100
attr Stromboerse_connect get02-497Name fc1_0630_total
attr Stromboerse_connect get02-497OExpr $val * 100
attr Stromboerse_connect get02-49Name fc0_0230_total
attr Stromboerse_connect get02-49OExpr $val * 100
attr Stromboerse_connect get02-501Name fc1_0645_total
attr Stromboerse_connect get02-501OExpr $val * 100
attr Stromboerse_connect get02-505Name fc1_0700_total
attr Stromboerse_connect get02-505OExpr $val * 100
attr Stromboerse_connect get02-509Name fc1_0715_total
attr Stromboerse_connect get02-509OExpr $val * 100
attr Stromboerse_connect get02-513Name fc1_0730_total
attr Stromboerse_connect get02-513OExpr $val * 100
attr Stromboerse_connect get02-517Name fc1_0745_total
attr Stromboerse_connect get02-517OExpr $val * 100
attr Stromboerse_connect get02-521Name fc1_0800_total
attr Stromboerse_connect get02-521OExpr $val * 100
attr Stromboerse_connect get02-525Name fc1_0815_total
attr Stromboerse_connect get02-525OExpr $val * 100
attr Stromboerse_connect get02-529Name fc1_0830_total
attr Stromboerse_connect get02-529OExpr $val * 100
attr Stromboerse_connect get02-533Name fc1_0845_total
attr Stromboerse_connect get02-533OExpr $val * 100
attr Stromboerse_connect get02-537Name fc1_0900_total
attr Stromboerse_connect get02-537OExpr $val * 100
attr Stromboerse_connect get02-53Name fc0_0245_total
attr Stromboerse_connect get02-53OExpr $val * 100
attr Stromboerse_connect get02-541Name fc1_0915_total
attr Stromboerse_connect get02-541OExpr $val * 100
attr Stromboerse_connect get02-545Name fc1_0930_total
attr Stromboerse_connect get02-545OExpr $val * 100
attr Stromboerse_connect get02-549Name fc1_0945_total
attr Stromboerse_connect get02-549OExpr $val * 100
attr Stromboerse_connect get02-553Name fc1_1000_total
attr Stromboerse_connect get02-553OExpr $val * 100
attr Stromboerse_connect get02-557Name fc1_1015_total
attr Stromboerse_connect get02-557OExpr $val * 100
attr Stromboerse_connect get02-561Name fc1_1030_total
attr Stromboerse_connect get02-561OExpr $val * 100
attr Stromboerse_connect get02-565Name fc1_1045_total
attr Stromboerse_connect get02-565OExpr $val * 100
attr Stromboerse_connect get02-569Name fc1_1100_total
attr Stromboerse_connect get02-569OExpr $val * 100
attr Stromboerse_connect get02-573Name fc1_1115_total
attr Stromboerse_connect get02-573OExpr $val * 100
attr Stromboerse_connect get02-577Name fc1_1130_total
attr Stromboerse_connect get02-577OExpr $val * 100
attr Stromboerse_connect get02-57Name fc0_0300_total
attr Stromboerse_connect get02-57OExpr $val * 100
attr Stromboerse_connect get02-581Name fc1_1145_total
attr Stromboerse_connect get02-581OExpr $val * 100
attr Stromboerse_connect get02-585Name fc1_1200_total
attr Stromboerse_connect get02-585OExpr $val * 100
attr Stromboerse_connect get02-589Name fc1_1215_total
attr Stromboerse_connect get02-589OExpr $val * 100
attr Stromboerse_connect get02-593Name fc1_1230_total
attr Stromboerse_connect get02-593OExpr $val * 100
attr Stromboerse_connect get02-597Name fc1_1245_total
attr Stromboerse_connect get02-597OExpr $val * 100
attr Stromboerse_connect get02-601Name fc1_1300_total
attr Stromboerse_connect get02-601OExpr $val * 100
attr Stromboerse_connect get02-605Name fc1_1315_total
attr Stromboerse_connect get02-605OExpr $val * 100
attr Stromboerse_connect get02-609Name fc1_1330_total
attr Stromboerse_connect get02-609OExpr $val * 100
attr Stromboerse_connect get02-613Name fc1_1345_total
attr Stromboerse_connect get02-613OExpr $val * 100
attr Stromboerse_connect get02-617Name fc1_1400_total
attr Stromboerse_connect get02-617OExpr $val * 100
attr Stromboerse_connect get02-61Name fc0_0315_total
attr Stromboerse_connect get02-61OExpr $val * 100
attr Stromboerse_connect get02-621Name fc1_1415_total
attr Stromboerse_connect get02-621OExpr $val * 100
attr Stromboerse_connect get02-625Name fc1_1430_total
attr Stromboerse_connect get02-625OExpr $val * 100
attr Stromboerse_connect get02-629Name fc1_1445_total
attr Stromboerse_connect get02-629OExpr $val * 100
attr Stromboerse_connect get02-633Name fc1_1500_total
attr Stromboerse_connect get02-633OExpr $val * 100
attr Stromboerse_connect get02-637Name fc1_1515_total
attr Stromboerse_connect get02-637OExpr $val * 100
attr Stromboerse_connect get02-641Name fc1_1530_total
attr Stromboerse_connect get02-641OExpr $val * 100
attr Stromboerse_connect get02-645Name fc1_1545_total
attr Stromboerse_connect get02-645OExpr $val * 100
attr Stromboerse_connect get02-649Name fc1_1600_total
attr Stromboerse_connect get02-649OExpr $val * 100
attr Stromboerse_connect get02-653Name fc1_1615_total
attr Stromboerse_connect get02-653OExpr $val * 100
attr Stromboerse_connect get02-657Name fc1_1630_total
attr Stromboerse_connect get02-657OExpr $val * 100
attr Stromboerse_connect get02-65Name fc0_0330_total
attr Stromboerse_connect get02-65OExpr $val * 100
attr Stromboerse_connect get02-661Name fc1_1645_total
attr Stromboerse_connect get02-661OExpr $val * 100
attr Stromboerse_connect get02-665Name fc1_1700_total
attr Stromboerse_connect get02-665OExpr $val * 100
attr Stromboerse_connect get02-669Name fc1_1715_total
attr Stromboerse_connect get02-669OExpr $val * 100
attr Stromboerse_connect get02-673Name fc1_1730_total
attr Stromboerse_connect get02-673OExpr $val * 100
attr Stromboerse_connect get02-677Name fc1_1745_total
attr Stromboerse_connect get02-677OExpr $val * 100
attr Stromboerse_connect get02-681Name fc1_1800_total
attr Stromboerse_connect get02-681OExpr $val * 100
attr Stromboerse_connect get02-685Name fc1_1815_total
attr Stromboerse_connect get02-685OExpr $val * 100
attr Stromboerse_connect get02-689Name fc1_1830_total
attr Stromboerse_connect get02-689OExpr $val * 100
attr Stromboerse_connect get02-693Name fc1_1845_total
attr Stromboerse_connect get02-693OExpr $val * 100
attr Stromboerse_connect get02-697Name fc1_1900_total
attr Stromboerse_connect get02-697OExpr $val * 100
attr Stromboerse_connect get02-69Name fc0_0345_total
attr Stromboerse_connect get02-69OExpr $val * 100
attr Stromboerse_connect get02-6Name current_date
attr Stromboerse_connect get02-6OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get02-701Name fc1_1915_total
attr Stromboerse_connect get02-701OExpr $val * 100
attr Stromboerse_connect get02-705Name fc1_1930_total
attr Stromboerse_connect get02-705OExpr $val * 100
attr Stromboerse_connect get02-709Name fc1_1945_total
attr Stromboerse_connect get02-709OExpr $val * 100
attr Stromboerse_connect get02-713Name fc1_2000_total
attr Stromboerse_connect get02-713OExpr $val * 100
attr Stromboerse_connect get02-717Name fc1_2015_total
attr Stromboerse_connect get02-717OExpr $val * 100
attr Stromboerse_connect get02-721Name fc1_2030_total
attr Stromboerse_connect get02-721OExpr $val * 100
attr Stromboerse_connect get02-725Name fc1_2045_total
attr Stromboerse_connect get02-725OExpr $val * 100
attr Stromboerse_connect get02-729Name fc1_2100_total
attr Stromboerse_connect get02-729OExpr $val * 100
attr Stromboerse_connect get02-733Name fc1_2115_total
attr Stromboerse_connect get02-733OExpr $val * 100
attr Stromboerse_connect get02-737Name fc1_2130_total
attr Stromboerse_connect get02-737OExpr $val * 100
attr Stromboerse_connect get02-73Name fc0_0400_total
attr Stromboerse_connect get02-73OExpr $val * 100
attr Stromboerse_connect get02-741Name fc1_2145_total
attr Stromboerse_connect get02-741OExpr $val * 100
attr Stromboerse_connect get02-745Name fc1_2200_total
attr Stromboerse_connect get02-745OExpr $val * 100
attr Stromboerse_connect get02-749Name fc1_2215_total
attr Stromboerse_connect get02-749OExpr $val * 100
attr Stromboerse_connect get02-753Name fc1_2230_total
attr Stromboerse_connect get02-753OExpr $val * 100
attr Stromboerse_connect get02-757Name fc1_2245_total
attr Stromboerse_connect get02-757OExpr $val * 100
attr Stromboerse_connect get02-761Name fc1_2300_total
attr Stromboerse_connect get02-761OExpr $val * 100
attr Stromboerse_connect get02-765Name fc1_2315_total
attr Stromboerse_connect get02-765OExpr $val * 100
attr Stromboerse_connect get02-769Name fc1_2330_total
attr Stromboerse_connect get02-769OExpr $val * 100
attr Stromboerse_connect get02-773Name fc1_2345_total
attr Stromboerse_connect get02-773OExpr $val * 100
attr Stromboerse_connect get02-77Name fc0_0415_total
attr Stromboerse_connect get02-77OExpr $val * 100
attr Stromboerse_connect get02-81Name fc0_0430_total
attr Stromboerse_connect get02-81OExpr $val * 100
attr Stromboerse_connect get02-85Name fc0_0445_total
attr Stromboerse_connect get02-85OExpr $val * 100
attr Stromboerse_connect get02-89Name fc0_0500_total
attr Stromboerse_connect get02-89OExpr $val * 100
attr Stromboerse_connect get02-93Name fc0_0515_total
attr Stromboerse_connect get02-93OExpr $val * 100
attr Stromboerse_connect get02-97Name fc0_0530_total
attr Stromboerse_connect get02-97OExpr $val * 100
attr Stromboerse_connect get02Data { "query": "{viewer {home(id:\"%%homeID%%\") {currentSubscription {priceInfo (resolution: QUARTER_HOURLY)  {current {total startsAt} today {total startsAt} tomorrow {total startsAt}}}}}}" }
attr Stromboerse_connect get02DeleteIfUnmatched 1
attr Stromboerse_connect get02Header01 Content-Type: application/json
attr Stromboerse_connect get02Header02 Authorization: Bearer %%token%%
attr Stromboerse_connect get02Name 02_Preis_Info_Tibber_Live
attr Stromboerse_connect get02RegOpt g
attr Stromboerse_connect get02Regex "total":(-*\d+.\d+)|"startsAt":"(\d+-\d+-\d+T\d+:\d+:\d+).*(?="today")|\[\{"total":(-*\d+.\d+),"startsAt":"(\d+-\d+-\d+T\d+:\d+:\d+)
attr Stromboerse_connect get02URL https://api.tibber.com/v1-beta/gql
attr Stromboerse_connect get03-1Name nodes_00_00_from
attr Stromboerse_connect get03-1OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get03-2Name nodes_00_00_cost
attr Stromboerse_connect get03-2OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get03-3Name nodes_00_00_consumption
attr Stromboerse_connect get03-4Name nodes_00_01_from
attr Stromboerse_connect get03-4OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get03-50OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get03-5Name nodes_00_01_cost
attr Stromboerse_connect get03-5OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get03-6Name nodes_00_01_consumption
attr Stromboerse_connect get03-7Name nodes_00_02_from
attr Stromboerse_connect get03-7OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get03-8Name nodes_00_02_cost
attr Stromboerse_connect get03-8OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get03-9Name nodes_00_02_consumption
attr Stromboerse_connect get03Data { "query": "{viewer {home(id:\"%%homeID%%\") {consumption(resolution: HOURLY, last: 3) {nodes {from cost consumption }}}}}"}
attr Stromboerse_connect get03Header01 Content-Type: application/json
attr Stromboerse_connect get03Header02 Authorization: Bearer %%token%%
attr Stromboerse_connect get03Name 03_consumption_hour
attr Stromboerse_connect get03RegOpt g
attr Stromboerse_connect get03Regex \{"from":"([\d+-]+T[\d+:]+\.000[+-][\d+:]+)","cost":(null|-*\d+\.\d+|0),"consumption":(null|\d+\.\d+|0)\}
attr Stromboerse_connect get03URL https://api.tibber.com/v1-beta/gql
attr Stromboerse_connect get04-10Name nodes_24_03_from
attr Stromboerse_connect get04-10OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-11Name nodes_24_03_cost
attr Stromboerse_connect get04-11OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-12Name nodes_24_03_consumption
attr Stromboerse_connect get04-13Name nodes_24_04_from
attr Stromboerse_connect get04-13OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-14Name nodes_24_04_cost
attr Stromboerse_connect get04-14OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-15Name nodes_24_04_consumption
attr Stromboerse_connect get04-16Name nodes_24_05_from
attr Stromboerse_connect get04-16OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-17Name nodes_24_05_cost
attr Stromboerse_connect get04-17OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-18Name nodes_24_05_consumption
attr Stromboerse_connect get04-19Name nodes_24_06_from
attr Stromboerse_connect get04-19OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-1Name nodes_24_00_from
attr Stromboerse_connect get04-1OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-20Name nodes_24_06_cost
attr Stromboerse_connect get04-20OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-21Name nodes_24_06_consumption
attr Stromboerse_connect get04-22Name nodes_24_07_from
attr Stromboerse_connect get04-22OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-23Name nodes_24_07_cost
attr Stromboerse_connect get04-23OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-24Name nodes_24_07_consumption
attr Stromboerse_connect get04-25Name nodes_24_08_from
attr Stromboerse_connect get04-25OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-26Name nodes_24_08_cost
attr Stromboerse_connect get04-26OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-27Name nodes_24_08_consumption
attr Stromboerse_connect get04-28Name nodes_24_09_from
attr Stromboerse_connect get04-28OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-29Name nodes_24_09_cost
attr Stromboerse_connect get04-29OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-2Name nodes_24_00_cost
attr Stromboerse_connect get04-2OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-30Name nodes_24_09_consumption
attr Stromboerse_connect get04-31Name nodes_24_10_from
attr Stromboerse_connect get04-31OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-32Name nodes_24_10_cost
attr Stromboerse_connect get04-32OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-33Name nodes_24_10_consumption
attr Stromboerse_connect get04-34Name nodes_24_11_from
attr Stromboerse_connect get04-34OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-35Name nodes_24_11_cost
attr Stromboerse_connect get04-35OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-36Name nodes_24_11_consumption
attr Stromboerse_connect get04-37Name nodes_24_12_from
attr Stromboerse_connect get04-37OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-38Name nodes_24_12_cost
attr Stromboerse_connect get04-38OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-39Name nodes_24_12_consumption
attr Stromboerse_connect get04-3Name nodes_24_00_consumption
attr Stromboerse_connect get04-40Name nodes_24_13_from
attr Stromboerse_connect get04-40OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-41Name nodes_24_13_cost
attr Stromboerse_connect get04-41OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-42Name nodes_24_13_consumption
attr Stromboerse_connect get04-43Name nodes_24_14_from
attr Stromboerse_connect get04-43OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-44Name nodes_24_14_cost
attr Stromboerse_connect get04-44OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-45Name nodes_24_14_consumption
attr Stromboerse_connect get04-46Name nodes_24_15_from
attr Stromboerse_connect get04-46OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-47Name nodes_24_15_cost
attr Stromboerse_connect get04-47OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-48Name nodes_24_15_consumption
attr Stromboerse_connect get04-49Name nodes_24_16_from
attr Stromboerse_connect get04-49OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-4Name nodes_24_01_from
attr Stromboerse_connect get04-4OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-50Name nodes_24_16_cost
attr Stromboerse_connect get04-50OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-51Name nodes_24_16_consumption
attr Stromboerse_connect get04-52Name nodes_24_17_from
attr Stromboerse_connect get04-52OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-53Name nodes_24_17_cost
attr Stromboerse_connect get04-53OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-54Name nodes_24_17_consumption
attr Stromboerse_connect get04-55Name nodes_24_18_from
attr Stromboerse_connect get04-55OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-56Name nodes_24_18_cost
attr Stromboerse_connect get04-56OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-57Name nodes_24_18_consumption
attr Stromboerse_connect get04-58Name nodes_24_19_from
attr Stromboerse_connect get04-58OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-59Name nodes_24_19_cost
attr Stromboerse_connect get04-59OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-5Name nodes_24_01_cost
attr Stromboerse_connect get04-5OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-60Name nodes_24_19_consumption
attr Stromboerse_connect get04-61Name nodes_24_20_from
attr Stromboerse_connect get04-61OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-62Name nodes_24_20_cost
attr Stromboerse_connect get04-62OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-63Name nodes_24_20_consumption
attr Stromboerse_connect get04-64Name nodes_24_21_from
attr Stromboerse_connect get04-64OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-65Name nodes_24_21_cost
attr Stromboerse_connect get04-65OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-66Name nodes_24_21_consumption
attr Stromboerse_connect get04-67Name nodes_24_22_from
attr Stromboerse_connect get04-67OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-68Name nodes_24_22_cost
attr Stromboerse_connect get04-68OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-69Name nodes_24_22_consumption
attr Stromboerse_connect get04-6Name nodes_24_01_consumption
attr Stromboerse_connect get04-70Name nodes_24_23_from
attr Stromboerse_connect get04-70OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-71Name nodes_24_23_cost
attr Stromboerse_connect get04-71OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-72Name nodes_24_23_consumption
attr Stromboerse_connect get04-7Name nodes_24_02_from
attr Stromboerse_connect get04-7OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get04-8Name nodes_24_02_cost
attr Stromboerse_connect get04-8OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get04-9Name nodes_24_02_consumption
attr Stromboerse_connect get04Data { "query": "{viewer {home(id:\"%%homeID%%\") {consumption(resolution: HOURLY, last: 24) {nodes {from cost consumption}}}}}"}
attr Stromboerse_connect get04Header01 Content-Type: application/json
attr Stromboerse_connect get04Header02 Authorization: Bearer %%token%%
attr Stromboerse_connect get04Name 04_consumption_hour_24
attr Stromboerse_connect get04RegOpt g
attr Stromboerse_connect get04Regex \{"from":"([\d+-]+T[\d+:]+\.000[+-][\d+:]+)","cost":(null|-*\d+\.\d+|0),"consumption":(null|\d+\.\d+|0)\}
attr Stromboerse_connect get04URL https://api.tibber.com/v1-beta/gql
attr Stromboerse_connect get05AutoNumLen 4
attr Stromboerse_connect get05Data { "query": "{viewer {home(id:\"%%homeID%%\") {consumption(resolution: HOURLY, last: 100) {nodes {from cost consumption}}}}}"}
attr Stromboerse_connect get05Header01 Content-Type: application/json
attr Stromboerse_connect get05Header02 Authorization: Bearer %%token%%
attr Stromboerse_connect get05JSON data_viewer_home
attr Stromboerse_connect get05Name 05_consumption_hourly_100
attr Stromboerse_connect get05URL https://api.tibber.com/v1-beta/gql
attr Stromboerse_connect get06-10Name Adresse_07_Telefon
attr Stromboerse_connect get06-11Name Adresse_01_Vorname
attr Stromboerse_connect get06-12Name Adresse_02_Nachname
attr Stromboerse_connect get06-1Name Adresse_03_Strasse
attr Stromboerse_connect get06-2Name Adresse_05_Ort
attr Stromboerse_connect get06-3Name Adresse_06_Land
attr Stromboerse_connect get06-4Name Adresse_05_Ort
attr Stromboerse_connect get06-5Name Adresse_06_Land
attr Stromboerse_connect get06-6Name Adresse_09_latitude
attr Stromboerse_connect get06-7Name Adresse_10_longitude
attr Stromboerse_connect get06-8Name Adresse_04_Plz
attr Stromboerse_connect get06-9Name Adresse_08_eMail
attr Stromboerse_connect get06Data { "query": "{viewer {home(id:\"%%homeID%%\") {address {address1 address2 address3 postalCode city country latitude longitude} owner {firstName lastName contactInfo {email mobile}}}}}" }
attr Stromboerse_connect get06Header01 Content-Type: application/json
attr Stromboerse_connect get06Header02 Authorization: Bearer %%token%%
attr Stromboerse_connect get06JSON data_viewer_home
attr Stromboerse_connect get06Name 06_address
attr Stromboerse_connect get06URL https://api.tibber.com/v1-beta/gql
attr Stromboerse_connect get07-10Name nodes_24_03_from
attr Stromboerse_connect get07-10OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-11Name nodes_24_03_cost
attr Stromboerse_connect get07-11OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-12Name nodes_24_03_consumption
attr Stromboerse_connect get07-13Name nodes_24_04_from
attr Stromboerse_connect get07-13OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-14Name nodes_24_04_cost
attr Stromboerse_connect get07-14OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-15Name nodes_24_04_consumption
attr Stromboerse_connect get07-16Name nodes_24_05_from
attr Stromboerse_connect get07-16OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-17Name nodes_24_05_cost
attr Stromboerse_connect get07-17OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-18Name nodes_24_05_consumption
attr Stromboerse_connect get07-19Name nodes_24_06_from
attr Stromboerse_connect get07-19OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-1Name features_realTimeConsumptionEnabled
attr Stromboerse_connect get07-1OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-20Name nodes_24_06_cost
attr Stromboerse_connect get07-20OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-21Name nodes_24_06_consumption
attr Stromboerse_connect get07-22Name nodes_24_07_from
attr Stromboerse_connect get07-22OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-23Name nodes_24_07_cost
attr Stromboerse_connect get07-23OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-24Name nodes_24_07_consumption
attr Stromboerse_connect get07-25Name nodes_24_08_from
attr Stromboerse_connect get07-25OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-26Name nodes_24_08_cost
attr Stromboerse_connect get07-26OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-27Name nodes_24_08_consumption
attr Stromboerse_connect get07-28Name nodes_24_09_from
attr Stromboerse_connect get07-28OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-29Name nodes_24_09_cost
attr Stromboerse_connect get07-29OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-2Name features_id
attr Stromboerse_connect get07-2OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-30Name nodes_24_09_consumption
attr Stromboerse_connect get07-31Name nodes_24_10_from
attr Stromboerse_connect get07-31OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-32Name nodes_24_10_cost
attr Stromboerse_connect get07-32OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-33Name nodes_24_10_consumption
attr Stromboerse_connect get07-34Name nodes_24_11_from
attr Stromboerse_connect get07-34OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-35Name nodes_24_11_cost
attr Stromboerse_connect get07-35OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-36Name nodes_24_11_consumption
attr Stromboerse_connect get07-37Name nodes_24_12_from
attr Stromboerse_connect get07-37OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-38Name nodes_24_12_cost
attr Stromboerse_connect get07-38OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-39Name nodes_24_12_consumption
attr Stromboerse_connect get07-3Name nodes_24_00_consumption
attr Stromboerse_connect get07-40Name nodes_24_13_from
attr Stromboerse_connect get07-40OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-41Name nodes_24_13_cost
attr Stromboerse_connect get07-41OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-42Name nodes_24_13_consumption
attr Stromboerse_connect get07-43Name nodes_24_14_from
attr Stromboerse_connect get07-43OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-44Name nodes_24_14_cost
attr Stromboerse_connect get07-44OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-45Name nodes_24_14_consumption
attr Stromboerse_connect get07-46Name nodes_24_15_from
attr Stromboerse_connect get07-46OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-47Name nodes_24_15_cost
attr Stromboerse_connect get07-47OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-48Name nodes_24_15_consumption
attr Stromboerse_connect get07-49Name nodes_24_16_from
attr Stromboerse_connect get07-49OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-4Name nodes_24_01_from
attr Stromboerse_connect get07-4OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-50Name nodes_24_16_cost
attr Stromboerse_connect get07-50OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-51Name nodes_24_16_consumption
attr Stromboerse_connect get07-52Name nodes_24_17_from
attr Stromboerse_connect get07-52OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-53Name nodes_24_17_cost
attr Stromboerse_connect get07-53OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-54Name nodes_24_17_consumption
attr Stromboerse_connect get07-55Name nodes_24_18_from
attr Stromboerse_connect get07-55OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-56Name nodes_24_18_cost
attr Stromboerse_connect get07-56OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-57Name nodes_24_18_consumption
attr Stromboerse_connect get07-58Name nodes_24_19_from
attr Stromboerse_connect get07-58OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-59Name nodes_24_19_cost
attr Stromboerse_connect get07-59OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-5Name nodes_24_01_cost
attr Stromboerse_connect get07-5OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-60Name nodes_24_19_consumption
attr Stromboerse_connect get07-61Name nodes_24_20_from
attr Stromboerse_connect get07-61OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-62Name nodes_24_20_cost
attr Stromboerse_connect get07-62OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-63Name nodes_24_20_consumption
attr Stromboerse_connect get07-64Name nodes_24_21_from
attr Stromboerse_connect get07-64OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-65Name nodes_24_21_cost
attr Stromboerse_connect get07-65OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-66Name nodes_24_21_consumption
attr Stromboerse_connect get07-67Name nodes_24_22_from
attr Stromboerse_connect get07-67OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-68Name nodes_24_22_cost
attr Stromboerse_connect get07-68OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-69Name nodes_24_22_consumption
attr Stromboerse_connect get07-6Name nodes_24_01_consumption
attr Stromboerse_connect get07-70Name nodes_24_23_from
attr Stromboerse_connect get07-70OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-71Name nodes_24_23_cost
attr Stromboerse_connect get07-71OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-72Name nodes_24_23_consumption
attr Stromboerse_connect get07-7Name nodes_24_02_from
attr Stromboerse_connect get07-7OExpr $val =~ s/T/ /g ;; substr($val,0,19)
attr Stromboerse_connect get07-8Name nodes_24_02_cost
attr Stromboerse_connect get07-8OExpr ($val ne "0" and $val ne "null")? round($val*AttrVal($name,"conf_VAT",0),4) : $val
attr Stromboerse_connect get07-9Name nodes_24_02_consumption
attr Stromboerse_connect get07Data { "query": "{viewer {home(id:\"%%homeID%%\") {id features{realTimeConsumptionEnabled} } } }" }
attr Stromboerse_connect get07Header01 Content-Type: application/json
attr Stromboerse_connect get07Header02 Authorization: Bearer %%token%%
attr Stromboerse_connect get07JSON data_viewer_home
attr Stromboerse_connect get07Name 07_realTimeConsumptionEnabled
attr Stromboerse_connect get07RegOpt g
attr Stromboerse_connect get07Regex \{"from":"([\d+-]+T[\d+:]+\.000[+-][\d+:]+)","cost":(null|-*\d+\.\d+|0),"consumption":(null|\d+\.\d+|0)\}
attr Stromboerse_connect get07URL https://api.tibber.com/v1-beta/gql
attr Stromboerse_connect group PV Steuerung EVU
attr Stromboerse_connect icon stromzaehler_icon
attr Stromboerse_connect replacement01Mode expression
attr Stromboerse_connect replacement01Regex %%start_today%%
attr Stromboerse_connect replacement01Value strftime("%Y-%m-%d",localtime(time))
attr Stromboerse_connect replacement02Mode expression
attr Stromboerse_connect replacement02Regex %%start_tomorrow%%
attr Stromboerse_connect replacement02Value strftime("%Y-%m-%d",localtime(time()+86400))
attr Stromboerse_connect replacement03Mode expression
attr Stromboerse_connect replacement03Regex %%token%%
attr Stromboerse_connect replacement03Value {KeyValue("read","EVU_Tibber_connect_token")}
attr Stromboerse_connect replacement04Mode expression
attr Stromboerse_connect replacement04Regex %%homeID%%
attr Stromboerse_connect replacement04Value {KeyValue("read","EVU_Tibber_connect_homeID")}
attr Stromboerse_connect room Strom->Boerse
attr Stromboerse_connect showBody 0
attr Stromboerse_connect showError 1
attr Stromboerse_connect sortby 413
attr Stromboerse_connect timeout 15
attr Stromboerse_connect userReadings ws_connect:ws_cmd:.connect {\
  my $hash = $defs{$name};;\
  my $devState = DevIo_IsOpen($hash);;\
  return "Device already open" if ($devState);;\
\
  # establish connection to websocket\
  # format must also include portnumber if a path is to be specified\
  $hash->{DeviceName} = AttrVal($name, "ws_websocketURL", "wss:echo.websocket.org:443");;\
\
  # special headers needed for Tibber, see also Developer Tools in Browser\
  $hash->{header}{'Sec-WebSocket-Protocol'} = 'graphql-transport-ws';;\
  $hash->{header}{'Host'}                   = 'websocket-api.tibber.com';;\
  $hash->{header}{'Origin'}                 = 'https://developer.tibber.com';;\
\
  # callback function when "select()" signals data for us\
  # websocket Ping/Pongs are treated in DevIo but still call this function\
  $hash->{directReadFn} = sub () {\
    my $hash = $defs{$name};;\
\
    # we can read without closing the DevIo, because select() signalled data\
    my $buf = DevIo_SimpleRead($hash);;\
\
    # if read fails, close device\
    if(!$buf) {\
      DevIo_CloseDev($hash);;\
      $buf = "not_connected";;\
    }\
    Log3($name,4,sprintf("%-20s ws_01 : ", $name)."websocket data: >>>$buf<<<");;\
\
    # only update our reading if buffer is not empty and if last update is older than minInterval\
    if ($buf ne "") {\
      my $websocketDataAge = ReadingsAge($name, "ws_live_Data", 3600);;\
      my $minInterval      = AttrVal($name, "ws_minInterval", 0);;\
      my $isNext           = ($buf =~ /.*id.*type.*next.*payload.*data.*liveMeasurement.*/s);;\
\
      readingsBeginUpdate($hash);;\
      readingsBulkUpdate($hash, "ws_live_Data", "$buf") if ($isNext && $websocketDataAge > $minInterval);;\
      readingsBulkUpdate($hash, "ws_live_Data", "$buf") if (!$isNext);;\
      readingsEndUpdate($hash, 1);;\
      Log3($name,4,sprintf("%-20s ws_01 : ", $name)."websocket data written to reading");;\
    }\
  };;\
\
  # open DevIo websocket\
  DevIo_OpenDev($hash, 0, undef, sub(){\
    my ($hash, $error) = @_;;\
    return "$error" if ($error);;\
\
    my $token = AttrVal($name, "ws_token", "???");;\
       $token = KeyValue("read","EVU_Tibber_connect_token") if ($token eq "???");;\
\
    DevIo_SimpleWrite($hash, '{"type":"connection_init","payload":{"token":"'.$token.'"}}', 2);;\
  });;\
\
  readingsSingleUpdate($hash, "ws_live_Data", "", 1);;\
  Log3($name,4,sprintf("%-20s ws_01 : ", $name)."websocket data cleared in reading");;\
\
  readingsBeginUpdate($hash);;\
  return POSIX::strftime("%H:%M:%S",localtime(time()));;\
},\
\
ws_disconnect:ws_cmd:.disconnect {\
  my $hash = $defs{$name};;\
  RemoveInternalTimer($hash);;\
  DevIo_SimpleRead($hash);;\
  DevIo_CloseDev($hash);;\
  Log3($name,4,sprintf("%-20s ws_02 : ", $name)."websocket disconnect");;\
\
  readingsBeginUpdate($hash);;\
  return POSIX::strftime("%H:%M:%S",localtime(time()));;\
},\
\
ws_onDisconnect {\
  my ($myState,$myData);;\
  my $hash = $defs{$name};;\
  $myData  = ReadingsVal($name, "ws_live_Data", undef);;\
\
  if ( ReadingsVal($name, "conf_EVU", "???") eq "Tibber_Live" ) {\
    $myState = ReadingsVal($name, "state", undef);;\
    readingsBeginUpdate($hash);;\
    return if ($myState ne "disconnected" and $myData ne "not_connected");;\
\
    # timer callback function, called after a few seconds to initiate a reconnect\
    my $timerFunction = sub() {\
      my ($arg)    = @_;;\
      my $hash     = $defs{$name};;\
      my $devState = DevIo_IsOpen($hash);;\
\
      # only re-connect if device is not connected\
      readingsSingleUpdate($hash, "ws_cmd", "connect", 1) if (!$devState);;\
    };; # end sub\
\
    RemoveInternalTimer($name.$reading.'Timer');;\
\
    # wait a random time before reconnect (exponential backoff TBD):\
    my $rwait = int(rand(200)) + 30;;\
    InternalTimer(gettimeofday() + $rwait, $timerFunction, $name.$reading.'Timer');;\
\
    # set cmd to a new value, informs user and allows to retrigger when timer expires\
    readingsSingleUpdate($hash, "ws_cmd", "reconnect attempt in $rwait seconds", 1);;\
    Log3($name,4,sprintf("%-20s ws_03 : ", $name)."reconnect attempt in $rwait seconds");;\
    readingsBeginUpdate($hash);;\
    return POSIX::strftime("%H:%M:%S",localtime(time()));;\
  } else {\
    if ($myData) {\
      Log3($name,3,sprintf("%-20s ws_03 : ", $name)."delete old Tibber_Live readings");;\
      fhem("deletereading Stromboerse_connect ^ws_.*|^Adresse_.*|^nodes_.*|total_cost_");;\
      readingsBeginUpdate($hash);;\
      readingsBulkUpdate($hash, "ws_Tibber_Live","not configured");;\
      readingsEndUpdate($hash, 0);;                              # 0 = KEIN Event\
    }\
  }\
    return;;\
},\
\
ws_onTimeout:ws_live_Data:.* {\
  # re-establish websocket connection if no data received in the past ten minutes\
  # but only if our reading "ws_cmd" was not set to the value "disconnect"\
\
  Log3($name,4,sprintf("%-20s ws_04 : ", $name)."websocket data triggert ws_onTimeout");;\
\
  # timeout in seconds when the connection is considered dead\
  my $timeoutTime = 600;;\
\
  # function to execute when timeout expired\
  # defining the function here in the userReading, allows us to insert variables directly\
  my $timerFunction = sub() {\
    my ($arg) = @_;;\
    my $hash  = $defs{$name};;\
    my $rCmd  = ReadingsVal($name, "ws_cmd", "???");;\
    my $age   = ReadingsAge($name, "ws_live_Data", 0);;\
\
    Log3($name,4,sprintf("%-20s ws_04 : ", $name)."onTimeoutTimer triggered >>$arg<<");;\
\
    # do not do anything further if disconnect is on purpose\
    if ( $rCmd eq "disconnect" ) {\
      Log3($name,4,sprintf("%-20s ws_04 : ", $name)."ws_cmd was set to disconnect");;\
      return;;\
    }\
\
    # for whatever reason, we triggered to soon (80%)\
    if ( $age < $timeoutTime*0.8 ) {\
      Log3($name,4,sprintf("%-20s ws_04 : ", $name)."ws_live_Data is not outdated");;\
      return;;\
    }\
\
    DevIo_CloseDev($hash);;\
    Log3($name,4,sprintf("%-20s ws_04 : ", $name)."onTimeoutTimer closed DevIo...");;\
\
    readingsSingleUpdate($hash, "ws_cmd", "connect", 1);;\
    Log3($name,4,sprintf("%-20s ws_04 : ", $name)."onTimeoutTimer set ws_cmd to value 'connect'");;\
  };;\
\
  Log3($name,4,sprintf("%-20s ws_04 : ", $name)."onTimeout function defined");;\
\
  # remove/cancel previous timers, because we got fresh data and countdown starts again\
  RemoveInternalTimer($name.$reading.'Timer');;\
\
  # set timer to expire and execute function defined above, give special arg as identifier\
  InternalTimer(gettimeofday() + $timeoutTime, $timerFunction, $name.$reading.'Timer');;\
\
  return POSIX::strftime("%H:%M:%S",localtime(time()));;\
},\
\
ws_onConnectionAck:ws_live_Data:.*connection_ack.* {\
  # ws_live_Data contains the string "connection_ack"\
  Log3($name,4,sprintf("%-20s ws_05 : ", $name)."got connection ack");;\
\
  # do not proceed if connection is lost\
  my $hash = $defs{$name};;\
  my $devState = DevIo_IsOpen($hash);;\
  return "Device not open" if (!$devState);;\
\
  readingsSingleUpdate($hash, "ws_cmd", "got connection ack", 1);;\
\
  my $homeId = AttrVal($name, "ws_homeId", "???");;\
     $homeId = KeyValue("read","EVU_Tibber_connect_homeID") if ($homeId eq "???");;\
\
  my $myId = AttrVal($name, "ws_myId", "???");;\
     $myId = KeyValue("read","EVU_Tibber_connect_homeID") if ($myId eq "???");;\
\
  # build the query, do it in pieces, the comma at the end caused perl errors\
  # so we put it together in this not very elegant way\
  my $json = '{ "id":"'. $myId .'", "type":"subscribe"'.", ";;\
  $json .= '"payload":{';;\
  $json .= '"variables":{}'.", ";;\
  $json .= '"extensions":{}'.", ";;\
  $json .= '"query":"subscription { liveMeasurement( homeId: \"'.$homeId.'\" ) ';;\
#  $json .= '{ timestamp power accumulatedConsumption accumulatedCost currency minPower averagePower maxPower signalStrength }}"';;\
  $json .= '{ timestamp power lastMeterConsumption accumulatedConsumption accumulatedProduction ';;\
  $json .= 'accumulatedProductionLastHour accumulatedCost accumulatedReward currency minPower averagePower maxPower ';;\
  $json .= 'powerProduction powerReactive powerProductionReactive minPowerProduction maxPowerProduction lastMeterProduction ';;\
  $json .= 'powerFactor voltagePhase1 voltagePhase2 voltagePhase3 signalStrength }}"';;\
  $json .= '}}';;\
\
  #send the string via websocket as ASCII\
  Log3($name,4,sprintf("%-20s ws_05 : ", $name)."$reading: sending JSON: >>>$json<<<");;\
  DevIo_SimpleWrite($hash, $json, 2);;\
\
  readingsBeginUpdate($hash);;\
  return POSIX::strftime("%H:%M:%S",localtime(time()));;\
},\
\
ws_onNextLiveMeasurement:ws_live_Data:.*next.*payload.*data.*liveMeasurement.* {\
  my $hash = $defs{$name};;\
  readingsBeginUpdate($hash);;\
  # ws_live_Data contains next-live-measurement-data\
  my $val = ReadingsVal($name, "ws_live_Data", "{}");;\
  my %res = %{json2nameValue($val, undef, undef, "payload_data_liveMeasurement.*")};;\
\
  my $ret = "got values for:\n";;\
  foreach my $k (sort keys %res) {\
    # Key umbenennen: payload_data_liveMeasurement_ → ws_live_\
    my $newKey = $k;;\
    $newKey =~ s/^payload_data_liveMeasurement_/ws_live_/;;\
\
    $ret .= "$newKey\n";;\
    readingsBulkUpdate($hash, makeReadingName($newKey), $res{$k});;\
  }\
  Log3($name,4,sprintf("%-20s ws_06 : ", $name)."got values for payload_data_liveMeasurement_ → ws_live_");;\
  return $ret;;\
\
####################################### Ende Tibber_Live ###################################\
},\
\
\
conf_EVU_Summe_ct_kWh:conf_EVU.* {\
## Berechnung des Zuschlages pro kWh, alle Kosten müssen als Nettopreis angegeben werden\
\
  my $conf_EVU = ReadingsVal($name,"conf_EVU","EPEX_Spot") ;;\
  my $Summe_ct_kWh = 0;;\
  if ( $conf_EVU eq "Tibber" ) {                                               # Es wurde ein EVU ausgewählt\
    $Summe_ct_kWh =\
          AttrVal($name,"conf_EVU_".$conf_EVU."_Zuschlag_ct_kWh",0)\
       + AttrVal($name,"conf_EVU_".$conf_EVU."_Grundgebuehr_EUR_Jahr",0) *100 / AttrVal($name,"conf_Netz_Jahresverbrauch_kWh",0)\
       + AttrVal($name,"conf_VNB_Arbeitspreis_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_KWKG_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_Konzession_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_Netzentgelt_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_MSB_".AttrVal($name,"conf_VNB_Messstelle","mME")."_EUR_Jahr",0) *100 / AttrVal($name,"conf_Netz_Jahresverbrauch_kWh",0)\
       + AttrVal($name,"conf_VNB_Paragraph_19_Umlage_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_Stromsteuer_ct_kWh",0);;\
\
    $Summe_ct_kWh *= AttrVal($name,"conf_EVU_".$conf_EVU."_Korrektur",1);;\
\
    Log3($name,3,sprintf("%-20s ur_01 : Zuschlag von %.4f ct/kWh für %s berechnet", $name, $Summe_ct_kWh, $conf_EVU));;\
  } # end if\
\
  if ( $conf_EVU eq "aWATTar" ) {                                              # Es wurde ein EVU ausgewählt\
    $Summe_ct_kWh =\
          AttrVal($name,"conf_EVU_".$conf_EVU."_Grundgebuehr_EUR_Jahr",0) *100 / AttrVal($name,"conf_Netz_Jahresverbrauch_kWh",0)\
       + AttrVal($name,"conf_VNB_Arbeitspreis_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_KWKG_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_Konzession_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_Netzentgelt_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_MSB_".AttrVal($name,"conf_VNB_Messstelle","mME")."_EUR_Jahr",0) *100 / AttrVal($name,"conf_Netz_Jahresverbrauch_kWh",0)\
       + AttrVal($name,"conf_VNB_Paragraph_19_Umlage_ct_kWh",0)\
       + AttrVal($name,"conf_VNB_Stromsteuer_ct_kWh",0);;\
\
    $Summe_ct_kWh *= AttrVal($name,"conf_EVU_".$conf_EVU."_Korrektur",1);;\
    $Summe_ct_kWh  = round($Summe_ct_kWh ,4);;                    # Netto Aufschlag pro kWh\
    Log3($name,3,sprintf("%-20s ur_01 : Zuschlag von $Summe_ct_kWh für %s berechnet", $name, $conf_EVU));;\
    Log3($name,3,sprintf("%-20s ur_01 : Zusätzlich erfolgt bei $conf_EVU ein dynamischer Zuschlag von val+0.03*abs(val) pro kWh", $name));;\
  } # end if\
\
  if ( $conf_EVU eq "EPEX_Spot" ) {\
    Log3($name,3,sprintf("%-20s ur_01 : Zuschlag von 0 für $conf_EVU", $name));;\
  } # end if\
\
  if ( $conf_EVU ne "Tibber_Live" ) {\
   fhem("get $name 01_Preis_Info_EPEX_Spot");;\
  } else {\
   fhem("get $name 02_Preis_Info_Tibber_Live");;\
  }\
\
  Log3($name,3,sprintf("%-20s ur_01 : Daten für $conf_EVU aktualisiert", $name));;\
\
  return $Summe_ct_kWh;;\
},\
\
current_level:fc._0000_total.* {\
## Aktueller Preis\
  my $hash = $defs{$name};;\
  my ($sec, $min, $hour, $mday, $mon, $year) = localtime();;$year += 1900;;$mon  += 1;;\
\
  # --- Readings setzen ---\
  readingsBeginUpdate($hash);;\
  readingsBulkUpdate($hash,"current_price",ReadingsVal($name,sprintf("fc0_%02d%02d_total",$hour, int($min/15)*15),0) );;\
  readingsBulkUpdate($hash,"current_date",sprintf("%d-%02d-%02d %02d:%02d:00", $year, $mon, $mday, $hour, int($min/15)*15) );;\
  Log3($name,3,sprintf("%-20s ur_02 : fc  Current Werte gesetzt", $name));;\
  readingsBulkUpdate($hash,"fc0_0000_startsAt",sprintf("%d-%02d-%02d 00:00:00", $year, $mon, $mday) );;\
  Log3($name,3,sprintf("%-20s ur_02 : fc0 Startzeit der Daten gesetzt", $name));;\
\
  if (      ReadingsVal($name,"fc1_0000_total","null") eq "null"             ## Der nächste Tag ist noch nicht da\
      and ReadingsVal($name,"fc1_0000_startsAt","9999-99-99 00:00:00") ge sprintf("%d-%02d-%02d 00:00:00", $year, $mon, $mday))\
  {\
    fhem("deletereading ".$name." fc1_0000_startsAt");;\
    Log3($name,3,sprintf("%-20s ur_02 : fc1 Daten sind noch nicht da", $name));;\
  } else {\
    readingsBulkUpdate($hash,"fc1_0000_startsAt",strftime("%Y-%m-%d 00:00:00",localtime(time+86400)) );;\
    Log3($name,3,sprintf("%-20s ur_02 : fc1 Startzeit der Daten gesetzt", $name));;\
  } # end if\
},\
\
fc_avg:current_price.* {\
## Berechnung des durchschnitt Wertes über alle Werte von fc0 und fc1\
  my ($sec,$min,$hour) = localtime(time);;\
\
  my $fc_tmp = 0;;\
\
  my $stop_fc = (ReadingsVal($name,"fc1_0000_startsAt","null") ne "null") ? 1 : 0;;\
  my $start_quarter = int($min / 15);;\
  for (my $loop_fc = 0;; $loop_fc <= $stop_fc;; $loop_fc++) {\
    my $start_hour = ($loop_fc == 0) ? $hour : 0;;\
    for (my $loop_hour = $start_hour;; $loop_hour <= 23;; $loop_hour++) {\
      my $start_quarter = ($loop_fc == 0 && $loop_hour == $hour) ? $start_quarter : 0;;\
      for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_tmp += ReadingsVal($name,sprintf("fc%d_%02d%02d_total", $loop_fc, $loop_hour, $loop_quarter*15),0);;\
        Log3($name,4,sprintf("%-20s ur_03 :  fc%d %02d:%02d fc_sum %.2f", $name, $loop_fc, $loop_hour, $loop_quarter*15, $fc_tmp));;\
      } # end $loop_quarter\
    } # end $loop_hour\
  } # end $loop_fc\
\
  $fc_tmp = round($fc_tmp / ( (96 - $hour*4) + (96 *$stop_fc) ),2);;        # Durchschnitt berechnen\
  Log3($name,3,sprintf("%-20s ur_03 : berechne Durchschnittspreis %.2f", $name, $fc_tmp));;\
  return $fc_tmp;;\
},\
\
fc_med:current_price.* {\
## Berechnung des median Wertes\
  my $fc_tmp = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
           SELECT\
             cast( (   (SUBSTRING_INDEX(SUBSTRING_INDEX(group_concat(VALUE order by VALUE), ',', floor(1+((count(VALUE)-1) / 2)))  , ',', -1))\
                       + (SUBSTRING_INDEX(SUBSTRING_INDEX(group_concat(VALUE order by VALUE), ',', ceiling(1+((count(VALUE)-1) / 2))), ',', -1))\
                     )/2\
             AS DECIMAL(4,2))\
           FROM history\
           WHERE DEVICE='".$name."'\
             AND (   READING='fc0_total' AND TIMESTAMP >= DATE_FORMAT(NOW(), '%Y-%m-%d 00:00:00')\
                     OR READING='fc1_total' AND TIMESTAMP >= DATE_FORMAT(NOW() + INTERVAL 1 DAY, '%Y-%m-%d 00:00:00') ) ;;") ;;\
  Log3($name,3,sprintf("%-20s ur_04 : berechne Medianwert         %.2f", $name, $fc_tmp));;\
  return $fc_tmp;;\
},\
\
fc_min:current_price.* {\
##  Ermittlung des minimal Wertes\
  my ($sec,$min,$hour) = localtime(time);;\
\
  my $fc_min = 0;;\
  my $fc_tmp = 0;;\
\
  my $stop_fc      = (ReadingsVal($name,"fc1_0000_startsAt","null") ne "null") ? 1 : 0;;\
  my $start_quarter = int($min / 15);;\
  for (my $loop_fc = 0;; $loop_fc <= $stop_fc;; $loop_fc++) {\
    my $start_hour = ($loop_fc == 0) ? $hour : 0;;\
    for (my $loop_hour = $start_hour;; $loop_hour <= 23;; $loop_hour++) {\
      my $start_quarter = ($loop_fc == 0 && $loop_hour == $hour) ? $start_quarter : 0;;\
      for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_tmp = ReadingsVal($name,sprintf("fc%d_%02d%02d_total", $loop_fc, $loop_hour, $loop_quarter*15),0);;\
        if (($fc_tmp < $fc_min) || ($loop_fc == 0 && $loop_hour == $hour && $loop_quarter == $start_quarter)) {\
          $fc_min = $fc_tmp;;\
          Log3($name,4,sprintf("%-20s ur_05 :  fc%d %02d:%02d fc_min %.2f", $name, $loop_fc, $loop_hour, $loop_quarter*15, $fc_min));;\
        } # end if min\
      } # end $loop_quarter\
    } # end $loop_hour\
  } # end $loop_fc\
\
  $fc_min = round($fc_min ,2);;\
  Log3($name,3,sprintf("%-20s ur_05 : berechne Minimalpreis       %.2f", $name, $fc_min));;\
  return $fc_min;;                                                       # Min Wert gerundet in Cent ausgeben\
},\
\
fc_max1:current_price.* {\
##  Ermittlung des maximal Wertes\
  my $hash = $defs{$name};;\
  readingsBeginUpdate($hash);;\
\
  my ($sec,$min,$hour) = localtime(time);;\
\
  my $fc_max1 = 0;;\
  my $fc_max2 = 0;;\
  my $fc_tmp  = 0;;\
\
  my $stop_fc      = (ReadingsVal($name,"fc1_0000_startsAt","null") ne "null") ? 1 : 0;;\
  my $start_quarter = int($min / 15);;\
  for (my $loop_fc = 0;; $loop_fc <= $stop_fc;; $loop_fc++) {\
    my $start_hour = ($loop_fc == 0) ? $hour : 0;;\
    for (my $loop_hour = $start_hour;; $loop_hour <= 23;; $loop_hour++) {\
      my $start_quarter = ($loop_fc == 0 && $loop_hour == $hour) ? $start_quarter : 0;;\
      for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_tmp = ReadingsVal($name,sprintf("fc%d_%02d%02d_total", $loop_fc, $loop_hour, $loop_quarter*15),0);;\
        if (($fc_tmp > $fc_max1) || ($loop_fc == 0 && $loop_hour == 0 && $loop_quarter == 0)) {\
          if ( $fc_tmp > $fc_max2 ) {\
            $fc_max2 = $fc_max1;;\
          }\
          $fc_max1  = $fc_tmp;;\
          Log3($name,3,sprintf("%-20s ur_06 :  fc%d %02d:%02d fc_max1: %.2f fc_max2: %.2f", $name, $loop_fc, $loop_hour, $loop_quarter*15, $fc_max1, $fc_max2));;\
        } # end if max\
      } # end $loop_quarter\
    } # end $loop_hour\
  } # end $loop_fc\
  # Max Wert gerundet in Cent ausgeben\
  $fc_max1 = round($fc_max1 ,2);;\
  $fc_max2 = round($fc_max2 ,2);;\
  Log3($name,3,sprintf("%-20s ur_06 : berechne Maximalpreis       %.2f %.2f", $name, $fc_max1, $fc_max2));;\
  readingsBulkUpdate($hash, "fc_max1", $fc_max1);;\
  readingsBulkUpdate($hash, "fc_max2", $fc_max2);;\
  readingsEndUpdate($hash,1);;   # 1 = Event erzwingen\
  return;;\
},\
\
current_level:fc_max1.* {\
##  Einstufung des Preisniveaus\
  my $current = ReadingsVal($name,"current_price",0);;\
  my $fc_avg  = ReadingsVal($name,"fc_avg",0);;\
  my $fc_min  = ReadingsVal($name,"fc_min",0);;\
  my $fc_max  = ReadingsVal($name,"fc_max1",0);;\
  my $range   = $fc_max - $fc_min;;\
\
## Aufteilung 25% / 50% / 25%\
  my $class =\
    $current <= $fc_min + $range *0.25 ? "GÜNSTG" :\
    $current >= $fc_min + $range *0.75 ? "NORMAL"  :\
                                        "TEUER";;\
\
## Aufteilung in Drittel\
#  my $low   = $fc_min + $range / 3;;\
#  my $high  = $fc_min + 2 * $range / 3;;\
#\
#  my $class =\
#    $fc_avg <= $low  ? "GÜNSTG" :\
#    $fc_avg >= $high ? "NORMAL"  :\
#                       "TEUER";;\
\
  Log3($name,3,sprintf("%-20s ur_07 : berechne current_level Einteilung", $name));;\
  Log3($name,4,sprintf("%-20s ur_07 :  avg: %.2f min: %.2f max: %.2f range: %.2f current_price: %.2f current_level: %s", $name, $fc_avg, $fc_min, $fc_max, $range, $current, $class));;\
  return $class;;\
},\
\
fc_trigger_net_price:fc_avg.* {\
## fc_trigger_net_price:[fc_avg|compensation_grid].* {\
  my $hash = $defs{$name};;\
  readingsBeginUpdate($hash);;\
\
  my $fc_avg = ReadingsVal($name,"fc_avg",0);;\
  my $fc_min = ReadingsVal($name,"fc_min",0);;\
\
  # Berechnung eines Default Schwellwertes als täglicher Niedrigpreis\
  my $fc_trigger_net_price= round( ($fc_avg - $fc_min)/2 + $fc_min , 2);;\
\
  # Abschätzung von Wirtschaftlichkeit beim Speicher Laden, falls die Börse zu teuer wird\
  my $fc_trigger_bat_price = round( ReadingsVal($name,"fc_max1",0) *(1-(AttrVal($name,"conf_Speicher_Ladepreisdifferenz",0)/100)), 2);;\
  readingsBulkUpdate($hash, "fc_trigger_bat_price", $fc_trigger_bat_price);;\
\
  Log3($name,3,sprintf("%-20s ur_07 : berechne Triggerpreis  net: %.2f bat: %.2f ", $name, $fc_trigger_net_price, $fc_trigger_bat_price));;\
  return $fc_trigger_net_price;;\
},\
\
fc0_trigger_net_start:fc_trigger_net_price.* {\
  my $hash = $defs{$name};;\
  readingsBeginUpdate($hash);;\
\
  my $fc = 0;;\
  my ($sec,$min,$hour) = localtime(time);;\
  # Nur in der ersten Viertelstunde neu berechnen\
  if ($min >= 15) {\
    Log3($name,3,sprintf("%-20s ur_07 : Neuberechnung von fc%d_trigger_net_start gesperrt (Minute %02d)", $name, $fc, $min));;\
    # vorhandenen Wert holen\
    readingsBulkUpdate($hash,"fc0_trigger_net_dauer",ReadingsVal($name,"fc0_trigger_net_dauer","null"));;\
    readingsBulkUpdate($hash,"fc0_trigger_bat_dauer",ReadingsVal($name,"fc0_trigger_bat_dauer","null"));;\
    readingsEndUpdate($hash,1);;   # 1 = Event erzwingen\
\
    return;;\
  }\
\
  my $fc_trigger_net_price = ReadingsVal($name,"fc_trigger_net_price",0);;\
  my $fc_trigger_bat_price = ReadingsVal($name,"fc_trigger_bat_price",0);;\
\
  # Falls sich die Trigger Fenster geändert haben vorher die Datenbank bereinigen\
  my $sql = "DELETE FROM history AS h1\
        WHERE DEVICE = '$name'\
          AND TIMESTAMP >= CURDATE()\
          AND (\
                (    (h1.READING = 'fc0_trigger_bat_dauer' OR h1.READING = 'fc0_trigger_net_dauer')\
                 AND EXISTS (\
                     SELECT 1\
                     FROM history AS h2\
                     WHERE h2.DEVICE = h1.DEVICE\
                       AND h2.TIMESTAMP = h1.TIMESTAMP\
                       AND (h2.READING LIKE 'fc0_trigger_bat_%' OR h2.READING LIKE 'fc0_trigger_net_%')\
                       AND (h2.READING <> 'fc0_trigger_bat_dauer' AND h2.READING <> 'fc0_trigger_net_dauer')\
                       AND (    h2.VALUE = 'null' OR h2.VALUE = '23:59'\
                            OR (h2.VALUE REGEXP '^([01][0-9]|2[0-3]):[0-5][0-9]'\
                                AND STR_TO_DATE(h2.VALUE,'%H:%i') > '$hour:$min'))\
                 )\
                )\
           OR (\
                (     h1.READING LIKE 'fc0_trigger_bat_%' OR h1.READING LIKE 'fc0_trigger_net_%')\
                 AND (h1.READING <> 'fc0_trigger_bat_dauer' OR h1.READING <> 'fc0_trigger_net_dauer')\
                 AND (h1.VALUE = 'null' OR h1.VALUE = '23:59'\
                      OR (h1.VALUE REGEXP '^([01][0-9]|2[0-3]):[0-5][0-9]'\
                          AND STR_TO_DATE(h1.VALUE,'%H:%i') > '$hour:$min')\
                )\
              )\
           OR h1.READING LIKE 'fc1_trigger_bat_%' OR h1.READING LIKE 'fc1_trigger_net_%'\
          );;";;\
  Log3($name,4,sprintf("%-20s ur_07 : Löschen von zeitlich überholten Datenbankeinträgen\n%s", $name, ($sql =~ s/\),\s*\(/\),\n\(/gr) ));;   # für die Anzeige lesbar umformatieren\
##  ::CommandGet(undef,"LogDBRep_${name}_SQL sqlCmdBlocking $sql");;\
\
  # Ermitteln des nächsten Trigger Fensters\
  my $fc_total = 0;;\
  my $fc_total_net_found;;\
  my $fc_total_bat_found;;\
  my $fc_total_next;;\
  my $fc_trigger_start_quarter = int($min / 15);;\
\
  for (my $loop_hour = $hour;; $loop_hour <= 23;; $loop_hour++) {\
    my $start_quarter = ($loop_hour == $hour) ? $fc_trigger_start_quarter : 0;;\
    for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
      $fc_total = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour , $loop_quarter*15),0);;\
      Log3($name,4,sprintf("%-20s ur_07 :  fc%d Start     %02d:%02d total: %.2f net: %.2f bat: %.2f", $name, $fc, $loop_hour, $loop_quarter*15, $fc_total, $fc_trigger_net_price, $fc_trigger_bat_price));;\
      if ( $fc_total < $fc_trigger_net_price  and !$fc_total_net_found) {\
        $fc_total_net_found = sprintf("%02d:%02d", $loop_hour, $loop_quarter*15);;\
        if ( $loop_quarter+1 <= 3 ) {\
          $fc_total_next = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour, ($loop_quarter+1)*15),0);;\
          Log3($name,4,sprintf("%-20s ur_07 :  fc%d Next net  %02d:%02d  next: %.2f", $name, $fc, $loop_hour, ($loop_quarter+1)*15, $fc_total_next));;\
        } else {\
          if ( $loop_hour+1 <= 23 ) {\
            $fc_total_next = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour+1, 0),0);;\
            Log3($name,4,sprintf("%-20s ur_07 :  fc%d Next net  %02d:%02d  next: %.2f", $name, $fc, $loop_hour+1, 0, $fc_total_next));;\
          } else {\
            $fc_total_next = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc+1, 0, 0),0);;\
            Log3($name,4,sprintf("%-20s ur_07 :  fc%d Next net  %02d:%02d  next: %.2f", $name, $fc+1, 0, 0, $fc_total_next));;\
          } # end if loop_hour+1\
        } # end if quarter+1\
        if ( $fc_total_next > $fc_trigger_net_price ) {\
          $fc_total_net_found = undef;;\
          Log3($name,3,sprintf("%-20s ur_07 : fc%d Next net  Trigger ist zu kurz", $name, $fc));;\
        } # end if\
        Log3($name,3,sprintf("%-20s ur_07 : fc%d_trigger_net_start       %02d:%02d", $name, $fc, $loop_hour, $loop_quarter*15));;\
      } # end if $fc_total_net_found\
\
      if ( $fc_total < $fc_trigger_bat_price and !$fc_total_bat_found ) {\
        $fc_total_bat_found = sprintf("%02d:%02d", $loop_hour, $loop_quarter*15);;\
        if ( $loop_quarter+1 <= 3 ) {\
          $fc_total_next = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour, ($loop_quarter+1)*15),0);;\
          Log3($name,4,sprintf("%-20s ur_07 :  fc%d Next bat  %02d:%02d  next: %.2f", $name, $fc, $loop_hour, ($loop_quarter+1)*15, $fc_total_next));;\
        } else {\
          if ( $loop_hour+1 <= 23 ) {\
            $fc_total_next = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour+1, 0),0);;\
            Log3($name,4,sprintf("%-20s ur_07 :  fc%d Next bat  %02d:%02d  next: %.2f", $name, $fc, $loop_hour+1, 0, $fc_total_next));;\
          } else {\
            $fc_total_next = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc+1, 0, 0),0);;\
            Log3($name,4,sprintf("%-20s ur_07 :  fc%d Next bat  %02d:%02d  next: %.2f", $name, $fc+1, 0, 0, $fc_total_next));;\
          } # end if loop_hour+1\
        } # end if quarter+1\
        if ( $fc_total_next > $fc_trigger_bat_price ) {\
          $fc_total_bat_found = undef;;\
          Log3($name,3,sprintf("%-20s ur_07 : fc%d Next bat  Trigger ist zu kurz", $name, $fc));;\
        } # end if\
        Log3($name,3,sprintf("%-20s ur_07 : fc%d_trigger_bat_start       %02d:%02d", $name, $fc, $loop_hour, $loop_quarter*15));;\
      } # end if $fc_total_bat_found\
#####################\
        # wenn es 23:45 is wechsel zum nächsten Tag\
        if ($loop_hour == 23 and $fc == 0 and $loop_quarter == 3) {\
          if ( !$fc_total_net_found ) {\
            $fc_total_net_found = "null";;\
            Log3($name,3,sprintf("%-20s ur_08 : fc%d_trigger_net_start       null", $name, $fc));;\
          }\
          if ( !$fc_total_bat_found ) {\
            $fc_total_bat_found = "null" if ( !$fc_total_bat_found );;\
            Log3($name,3,sprintf("%-20s ur_08 : fc%d_trigger_bat_start       null", $name, $fc));;\
          }\
        } # end if\
#####################\
      last if ( $fc_total_net_found and $fc_total_bat_found );;\
    } # end for $loop_quarter\
   last  if ( $fc_total_net_found and $fc_total_bat_found );;\
  } # end for $loop_hour\
\
  if ( $fc_total_bat_found ) {\
    readingsBulkUpdate($hash, "fc0_trigger_bat_start", $fc_total_bat_found);;\
  } else {\
    readingsBulkUpdate($hash, "fc0_trigger_bat_start", "null");;\
    Log3($name,3,sprintf("%-20s ur_07 : fc%d_trigger_bat_start       null", $name, $fc));;\
  } #end if $fc_total_bat_found\
\
  $fc_total_net_found = "null" if ( !$fc_total_net_found );;\
  return $fc_total_net_found;;\
},\
\
fc0_trigger_net_stop:fc0_trigger_net_start.* {\
  my $hash = $defs{$name};;\
  readingsBeginUpdate($hash);;\
\
  my $fc = 0;;\
  my $loop_hour = 0;;\
  my $fc_trigger_net_price = ReadingsVal($name,"fc_trigger_net_price",0);;\
  my $fc_trigger_bat_price = ReadingsVal($name,"fc_trigger_bat_price",0);;\
\
  # Ermitteln des nächsten Trigger Fensters\
  my $fc_trigger_start = ReadingsVal($name,"fc0_trigger_net_start","null");;\
  my $fc_trigger_stop  = $fc_trigger_start;;\
\
  my ($fc_trigger_start_hour, $fc_trigger_start_quarter, $fc_total_net_found, $fc_total_bat_found);;\
\
  if ( $fc_trigger_start ne "null" ) {\
    my ($fc_trigger_start_hour,$fc_trigger_start_quarter) = split(":", $fc_trigger_start);;\
    $fc_trigger_start_quarter /= 15;;\
\
    my $fc_total = 0;;\
\
    for ($loop_hour = $fc_trigger_start_hour;; $loop_hour <= 23;; $loop_hour++) {\
      my $start_quarter = ($loop_hour == $fc_trigger_start_hour) ? $fc_trigger_start_quarter : 0;;\
      for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_total = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour, $loop_quarter*15),0);;\
        Log3($name,4,sprintf("%-20s ur_08 :  fc%d Stop      %02d:%02d total: %.2f net: %.2f", $name, $fc, $loop_hour, $loop_quarter*15, $fc_total, $fc_trigger_net_price));;\
\
        if ( $fc_total > $fc_trigger_net_price  and !$fc_total_net_found) {\
          if ( $loop_quarter > 0 ) {\
            $fc_total_net_found = sprintf("%02d:%02d", $loop_hour, ($loop_quarter-1)*15);;\
            Log3($name,3,sprintf("%-20s ur_08 : fc%d_trigger_net_stop        %02d:%02d", $name, $fc, $loop_hour, ($loop_quarter-1)*15));;\
          } else {\
            $fc_total_net_found = sprintf("%02d:%02d", $loop_hour-1, 3*15);;\
            Log3($name,3,sprintf("%-20s ur_08 : fc%d_trigger_net_stop        %02d:%02d", $name, $fc, $loop_hour-1, 3*15));;\
          }\
        } # end if\
\
        # wenn es 23:45 is wechsel zum nächsten Tag\
        if ($loop_hour == 23 and $fc == 0 and $loop_quarter == 3) {\
          if (ReadingsVal($name,"fc1_0000_total","null") ne "null") {       # Der nächste Tag ist bereits da\
            $fc = 1;;\
            $loop_hour = -1;;                                                 # beginne wieder bei 00:00\
          } else {\
            $fc_total_net_found = "23:59";;\
            Log3($name,3,sprintf("%-20s ur_08 : fc%d_trigger_net_stop        %s", $name, $fc, $fc_total_net_found));;\
          } # end if fc1_0000_total\
        } # end if\
       last if ( $fc_total_net_found );;\
      } # end $loop_quarter\
    $fc_total_net_found = "23:59" if ( $fc_total_net_found && $fc_total_net_found eq "00:00" && $fc == 1);;\
    last if ( $fc_total_net_found );;\
    } # end for loop_hour\
  }\
\
  $fc = 0;;\
\
  $fc_trigger_start = ReadingsVal($name,"fc0_trigger_bat_start","null");;\
  $fc_trigger_stop  = $fc_trigger_start;;\
\
  if ( $fc_trigger_start ne "null" ) {\
    my ($fc_trigger_start_hour,$fc_trigger_start_quarter) = split(":", $fc_trigger_start);;\
    $fc_trigger_start_quarter /= 15;;\
\
    my $fc_total = 0;;\
\
    for ($loop_hour = $fc_trigger_start_hour;; $loop_hour <= 23;; $loop_hour++) {\
      my $start_quarter = ($loop_hour == $fc_trigger_start_hour) ? $fc_trigger_start_quarter : 0;;\
      for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_total = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour, $loop_quarter*15),0);;\
        Log3($name,4,sprintf("%-20s ur_08 :  fc%d Stop  bat %02d:%02d total: %.2f bat: %.2f", $name, $fc, $loop_hour, $loop_quarter*15, $fc_total, $fc_trigger_bat_price));;\
        if ( $fc_total > $fc_trigger_bat_price and !$fc_total_bat_found ) {\
          if ( $loop_quarter > 0 ) {\
            $fc_total_bat_found = sprintf("%02d:%02d", $loop_hour, ($loop_quarter-1)*15);;\
            Log3($name,3,sprintf("%-20s ur_08 : fc%d_trigger_bat_stop        %02d:%02d", $name, $fc, $loop_hour, ($loop_quarter-1)*15));;\
          } else {\
            $fc_total_bat_found = sprintf("%02d:%02d", $loop_hour-1, 3*15);;\
            Log3($name,3,sprintf("%-20s ur_08 : fc%d_trigger_bat_stop        %02d:%02d", $name, $fc, $loop_hour-1, 3*15));;\
          }\
        } # end if\
\
        # wenn es 23:45 is wechsel zum nächsten Tag\
        if ($loop_hour == 23 and $fc == 0 and $loop_quarter == 3) {\
          if (ReadingsVal($name,"fc1_0000_total","null") ne "null") {       # Der nächste Tag ist bereits da\
            $fc = 1;;\
            $loop_hour = -1;;                                                 # beginne wieder bei 00:00\
          } else {\
            $fc_total_bat_found = "23:59";;\
            Log3($name,3,sprintf("%-20s ur_08 : fc%d_trigger_bat_stop        %s", $name, $fc, $fc_total_bat_found));;\
          } # end if fc1_0000_total\
        } # end if\
      last if ( $fc_total_bat_found );;\
      } # end for $loop_quarter\
    $fc_total_net_found = "23:59" if ( $fc_total_net_found && $fc_total_net_found eq "00:00" && $fc == 1);;\
    last if ( $fc_total_bat_found );;\
    } # end for $loop_hour\
  }\
\
  if ( $fc_total_bat_found ) {\
    readingsBulkUpdate($hash, "fc0_trigger_bat_stop", $fc_total_bat_found);;\
  } else {\
    readingsBulkUpdate($hash, "fc0_trigger_bat_stop", "null");;\
    Log3($name,3,sprintf("%-20s ur_08 : fc%d_trigger_bat_stop        null", $name, $fc));;\
  } # end if\
  $fc_total_net_found = "null" if ( !$fc_total_net_found );;\
  return $fc_total_net_found;;\
},\
\
fc0_trigger_net_dauer:fc0_trigger_net_stop.* {\
## Berechnung des Trigger Fensters in Minuten\
  my $hash = $defs{$name};;\
  readingsBeginUpdate($hash);;\
\
  my $fc = 0;;\
\
## Ermittle Dauer für bat\
  my $fc_trigger_dauer = "null";;\
  my $fc_trigger_start = ReadingsVal($name,"fc0_trigger_bat_start","null");;\
  if ( $fc_trigger_start ne "null" ) {\
    my $fc_trigger_stop = ReadingsVal($name,"fc0_trigger_bat_stop","null");;\
\
    if ( $fc_trigger_stop ne "null" ) {\
      my ($h1,$m1) = split(":", $fc_trigger_start);;\
      my ($h2,$m2) = split(":", $fc_trigger_stop);;\
\
      $h2 += 24 if ( $h2 < $h1 );;\
      $fc_trigger_dauer = ($h2*60 + $m2) - ($h1*60 + $m1);;\
      if ( $fc_trigger_dauer <= 15 ) {                           # Das Trigger Fenster ist zu klein\
        readingsBulkUpdate($hash, "fc0_trigger_bat_start", "null");;\
        readingsBulkUpdate($hash, "fc0_trigger_bat_stop", "null");;\
        $fc_trigger_dauer = "null";;\
        Log3($name,3,sprintf("%-20s ur_09 : fc%d_trigger_bat_dauer       ist zu kurz", $name, $fc));;\
      }\
    }\
  } # end if $fc_trigger_start\
  Log3($name,3,sprintf("%-20s ur_09 : fc%d_trigger_bat_dauer       %s", $name, $fc, $fc_trigger_dauer));;\
  readingsBulkUpdate($hash, "fc0_trigger_bat_dauer", $fc_trigger_dauer);;\
\
## Ermittle Dauer für net\
  $fc_trigger_dauer = "null";;\
  $fc_trigger_start = ReadingsVal($name,"fc0_trigger_net_start","null");;\
  if ( $fc_trigger_start ne "null" ) {\
    my $fc_trigger_stop = ReadingsVal($name,"fc0_trigger_net_stop","null");;\
\
    if ( $fc_trigger_stop ne "null" ) {\
      my ($h1,$m1) = split(":", $fc_trigger_start);;\
      my ($h2,$m2) = split(":", $fc_trigger_stop);;\
      $h2 += 24 if ( $h2 < $h1 );;\
\
      $fc_trigger_dauer = ($h2*60 + $m2) - ($h1*60 + $m1);;\
      if ( $fc_trigger_dauer <= 15 ) {                               # Das Trigger Fenster ist zu klein\
        readingsBeginUpdate($hash);;\
        readingsBulkUpdate($hash, "fc0_trigger_net_start", "null");;\
        readingsBulkUpdate($hash, "fc0_trigger_net_stop", "null");;\
        $fc_trigger_dauer = "null";;\
        Log3($name,3,sprintf("%-20s ur_09 : fc%d_trigger_net_dauer       ist zu kurz", $name, $fc));;\
      }\
    }\
    Log3($name,3,sprintf("%-20s ur_09 : fc%d_trigger_net_dauer       %s", $name, $fc, $fc_trigger_dauer));;\
    return($fc_trigger_dauer);;\
  }\
  return "null";;\
},\
\
fc0_trigger_net:fc0_trigger_net_dauer.* {\
## Setzen des Triggers für die aktuelle viertel Stunde\
  my $hash = $defs{$name};;\
  readingsBeginUpdate($hash);;\
\
  my $fc = 0;;\
  my ($sec,$min,$hour) = localtime(time);;\
  my $start_quarter = int($min / 15);;\
\
  my $current_price = ReadingsVal($name,"current_price",100);;\
\
  my $state = "off";;\
  if (    ReadingsVal($name,"fc0_trigger_bat_dauer","null") ne "null"\
      and sprintf("%02d:%02d",$hour,$min) ge ReadingsVal($name,"fc0_trigger_bat_start","null")\
      and $current_price  < ReadingsVal($name,"fc_trigger_bat_price",0) ) {\
    $state = "on";;\
  }\
  readingsBulkUpdate($hash, "fc0_trigger_bat", $state);;\
  Log3($name,3,sprintf("%-20s ur_10 : fc%d_trigger_bat             %s", $name, $fc, $state));;\
\
  $state = "off";;\
  if (    ReadingsVal($name,"fc0_trigger_net_dauer","null") ne "null"\
      and sprintf("%02d:%02d",$hour,$min) ge ReadingsVal($name,"fc0_trigger_net_start","null")\
      and $current_price  < ReadingsVal($name,"fc_trigger_net_price",0) ) {\
    $state = "on";;\
  }\
  readingsBulkUpdate($hash, "fc0_trigger_net", $state);;\
  Log3($name,3,sprintf("%-20s ur_10 : fc%d_trigger_net             %s", $name, $fc, $state));;\
\
  return;;\
},\
\
fc1_trigger_net_start:fc_trigger_net_price.* {\
  my ($sec,$min,$hour) = localtime(time);;\
  my $fc = 1;;\
\
  # Nur in der ersten Viertelstunde neu berechnen\
  if ($min >= 15) {\
    my $hash = $defs{$name};;\
    readingsBeginUpdate($hash);;\
    Log3($name,3,sprintf("%-20s ur_11 : Neuberechnung von fc%d_trigger_net_start gesperrt (Minute %02d)", $name, $fc, $min));;\
    readingsBulkUpdate($hash,"fc1_trigger_net_dauer",ReadingsVal($name,"fc1_trigger_net_dauer","null"));;\
    return;;\
  }\
\
  if (ReadingsVal($name,"fc1_0000_startsAt","null") ne "null") {\
    my $fc_trigger_net_price = ReadingsVal($name,"fc_trigger_net_price",0);;\
\
    # Ermitteln des nächsten Trigger Fensters\
    my $fc_total = 0;;\
\
    for (my $loop_hour = 0;; $loop_hour <= 23;; $loop_hour++) {\
      for (my $loop_quarter = 0;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_total = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour , $loop_quarter*15),0);;\
        Log3($name,4,sprintf("%-20s ur_11 :  fc%d Start %02d:%02d total: %.2f net: %.2f", $name, $fc, $loop_hour, $loop_quarter*15, $fc_total, $fc_trigger_net_price));;\
        if ( $fc_total < $fc_trigger_net_price ) {\
          Log3($name,3,sprintf("%-20s ur_11 : fc%d_trigger_net_start       %02d:%02d", $name, $fc, $loop_hour ,$loop_quarter*15));;\
          return(sprintf("%02d:%02d",$loop_hour, $loop_quarter*15)) ;;\
        }\
      } # end $loop_quarter\
    } # end  for loop_hour\
  }\
  return "null";;\
},\
\
fc1_trigger_net_stop:fc1_trigger_net_start.* {\
## Ermitteln des nächsten Trigger Fensters\
  my $fc = 1;;\
  my $loop_hour;;\
  my $fc_trigger_net_price = ReadingsVal($name,"fc_trigger_net_price",0);;\
\
  my $fc_trigger_start = ReadingsVal($name,"fc1_trigger_net_start","null");;\
  my $fc_trigger_stop = $fc_trigger_start;;\
\
  my ($fc_trigger_start_hour, $fc_trigger_start_quarter);;\
\
  if ( $fc_trigger_start ne "null" ) {\
    my ($fc_trigger_start_hour,$fc_trigger_start_quarter) = split(":", $fc_trigger_start);;\
    $fc_trigger_start_quarter /= 15;;\
\
    my $fc_total = 0;;\
\
    for ($loop_hour = $fc_trigger_start_hour;; $loop_hour <= 23;; $loop_hour++) {\
      my $start_quarter = ($loop_hour == $fc_trigger_start_hour) ? $fc_trigger_start_quarter : 0;;\
      for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_total = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour, $loop_quarter*15),0);;\
        Log3($name,4,sprintf("%-20s ur_12 :  fc%d Stop  %02d:%02d total: %.2f net: %.2f", $name, $fc, $loop_hour, $loop_quarter*15, $fc_total, $fc_trigger_net_price));;\
        if ( $fc_total < $fc_trigger_net_price ) {\
          $fc_trigger_stop = sprintf("%02d:%02d",$loop_hour, $loop_quarter*15) ;;\
        } else {\
          Log3($name,3,sprintf("%-20s ur_12 : fc%d_trigger_net_stop        %02d:%02d", $name, $fc, $loop_hour, $loop_quarter*15));;\
          return(sprintf("%02d:%02d",$loop_hour, $loop_quarter*15));;\
        }\
      } # end $loop_quarter\
    } # end for loop_hour\
  }\
  return $fc_trigger_stop;;\
},\
\
fc1_trigger_net_dauer:fc1_trigger_net_stop.* {\
## Berechnung des Trigger Fensters in Minuten\
  my $hash = $defs{$name};;\
\
  my $fc_trigger_start = ReadingsVal($name,"fc1_trigger_net_start","null");;\
  if ( $fc_trigger_start ne "null" ) {\
    my $fc_trigger_stop = ReadingsVal($name,"fc1_trigger_net_stop","null");;\
       $fc_trigger_stop = "23:59" if ( $fc_trigger_stop eq "00:00" );;\
    my ($h1,$m1) = split(":", $fc_trigger_start);;\
    my ($h2,$m2) = split(":", $fc_trigger_stop);;\
\
    my $fc_trigger_dauer = ($h2*60 + $m2) - ($h1*60 + $m1);;\
\
    if ( $fc_trigger_dauer <= 15 ) {                               # Das Trigger Fenster ist zu klein\
      readingsBeginUpdate($hash);;\
      readingsBulkUpdate($hash, "fc1_trigger_net_start", "null");;\
      readingsBulkUpdate($hash, "fc1_trigger_net_stop", "null");;\
      $fc_trigger_dauer = "null";;\
      Log3($name,3,sprintf("%-20s ur_13 : fc1_trigger_net_dauer ist zu kurz", $name));;\
    } # end if\
    Log3($name,3,sprintf("%-20s ur_13 : fc1_trigger_net_dauer       %s", $name, $fc_trigger_dauer));;\
    return $fc_trigger_dauer;;\
  } # end if\
  return "null";;\
},\
\
fc_trigger_max_price:fc_avg.* {\
  my $fc_avg = ReadingsVal($name,"fc_avg",0);;\
  my $fc_max1 = ReadingsVal($name,"fc_max1",0);;\
  my $fc_max2 = ReadingsVal($name,"fc_max2",0);;\
\
  $fc_max1 = $fc_max2 if ( $fc_max2*100/$fc_max1 < 80 );;\
    \
  # Berechnung eines Schwellwertes als täglichen Maximalpreises\
  return round( ($fc_max1 - $fc_avg)/2 + $fc_avg , 2);;\
},\
\
fc0_trigger_max_start:fc_trigger_max_price.* {\
## Ermitteln des nächsten Trigger_max Fensters\
  my ($sec,$min,$hour) = localtime(time);;\
\
  # Nur in der ersten Viertelstunde neu berechnen\
  if ($min >= 15) {\
    my $hash = $defs{$name};;\
    readingsBeginUpdate($hash);;\
    Log3($name,3,sprintf("%-20s ur_15 : Neuberechnung von fc0_trigger_max_start gesperrt (Minute %02d)", $name, $min));;\
    readingsBulkUpdate($hash,"fc0_trigger_max_dauer",ReadingsVal($name,"fc0_trigger_max_dauer","null"));;\
    return;;\
  }\
\
  my $fc = 0;;\
  my $fc_trigger_max_price = ReadingsVal($name,"fc_trigger_max_price",0);;\
\
  # Ermitteln des nächsten Trigger Fensters\
  my $fc_total = 0;;\
  my $fc_total_max_found;;\
  my $fc_total_next;;\
  my $fc_trigger_start_quarter = int($min / 15);;\
\
  for (my $loop_hour = $hour;; $loop_hour <= 23;; $loop_hour++) {\
    my $start_quarter = ($loop_hour == $hour) ? $fc_trigger_start_quarter : 0;;\
    for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
      $fc_total = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour , $loop_quarter*15),0);;\
      Log3($name,4,sprintf("%-20s ur_15 :  fc%d Start     %02d:%02d total: %.2f max: %.2f", $name, $fc, $loop_hour, $loop_quarter*15, $fc_total, $fc_trigger_max_price));;\
      if ( $fc_total > $fc_trigger_max_price  and !$fc_total_max_found) {\
        $fc_total_max_found = sprintf("%02d:%02d", $loop_hour, $loop_quarter*15);;\
        if ( $loop_quarter+1 <= 3 ) {\
          $fc_total_next = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour, ($loop_quarter+1)*15),0);;\
          Log3($name,4,sprintf("%-20s ur_15 :  fc%d Next max  %02d:%02d  next: %.2f", $name, $fc, $loop_hour, ($loop_quarter+1)*15, $fc_total_next));;\
        } else {\
          if ( $loop_hour+1 <= 23 ) {\
            $fc_total_next = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc, $loop_hour+1, 0),0);;\
            Log3($name,4,sprintf("%-20s ur_15 :  fc%d Next max  %02d:%02d  next: %.2f", $name, $fc, $loop_hour+1, 0, $fc_total_next));;\
          } else {\
            $fc_total_next = ReadingsVal($name,sprintf("fc%d_%02d%02d_total",$fc+1, 0, 0),0);;\
            Log3($name,4,sprintf("%-20s ur_15 :  fc%d Next max  %02d:%02d  next: %.2f", $name, $fc+1, 0, 0, $fc_total_next));;\
          } # end if loop_hour+1\
        } # end if quarter+1\
        if ( $fc_total_next < $fc_trigger_max_price ) {\
          $fc_total_max_found = undef;;\
          Log3($name,3,sprintf("%-20s ur_15 : fc%d Next max Trigger ist zu kurz", $name, $fc));;\
        } # end if\
        Log3($name,3,sprintf("%-20s ur_15 : fc%d_trigger_max_start       %02d:%02d", $name, $fc, $loop_hour, $loop_quarter*15));;\
      } # end if $fc_total_max_found\
#####################\
        # wenn es 23:45 is wechsel zum nächsten Tag\
        if ($loop_hour == 23 and $fc == 0 and $loop_quarter == 3) {\
          if ( !$fc_total_max_found ) {\
            $fc_total_max_found = "null";;\
            Log3($name,3,sprintf("%-20s ur_15 : fc0_trigger_max_start       null", $name));;\
          }\
        } # end if\
#####################\
      last if ( $fc_total_max_found );;\
    } # end for $loop_quarter\
   last  if ( $fc_total_max_found );;\
  } # end for $loop_hour\
\
  $fc_total_max_found = "null" if ( !$fc_total_max_found );;\
  return $fc_total_max_found;;\
},\
\
fc0_trigger_max_stop:fc0_trigger_max_start.* {\
## Ermitteln des nächsten Trigger Fensters\
  my $fc = 0;;\
  my $fc_trigger_max_price = ReadingsVal($name,"fc_trigger_max_price",0);;\
\
  my $fc_trigger_max_start = ReadingsVal($name,"fc0_trigger_max_start","null");;\
  my $fc_trigger_max_stop = $fc_trigger_max_start;;\
\
  my ($fc_trigger_max_start_hour, $fc_trigger_max_start_quarter);;\
\
  if ( $fc_trigger_max_start ne "null" ) {\
    my ($fc_trigger_max_start_hour,$fc_trigger_max_start_quarter) = split(":", $fc_trigger_max_start);;\
    $fc_trigger_max_start_quarter /= 15;;\
\
    my $fc_total = 0;;\
\
    for (my $loop_hour = $fc_trigger_max_start_hour;; $loop_hour <= 23;; $loop_hour++) {\
      my $start_quarter = ($loop_hour == $fc_trigger_max_start_hour) ? $fc_trigger_max_start_quarter : 0;;\
      for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_total = ReadingsVal($name,sprintf("fc%d_%02d%02d_total", $fc, $loop_hour, $loop_quarter*15),0);;\
        Log3($name,4,sprintf("%-20s ur_16 :  fc%d Stop  max %02d:%02d total: %.2f max: %.2f", $name, $fc, $loop_hour, $loop_quarter*15, $fc_total, $fc_trigger_max_price));;\
        if ( $fc_total > $fc_trigger_max_price ) {\
          $fc_trigger_max_stop = sprintf("%02d:%02d",$loop_hour, $loop_quarter*15) ;;\
        } else {\
          $fc_trigger_max_stop = sprintf("%02d:%02d",$loop_hour, $loop_quarter*15) ;;\
          Log3($name,3,sprintf("%-20s ur_16 : fc%d_trigger_max_stop        %s", $name, $fc, $fc_trigger_max_stop));;\
          return $fc_trigger_max_stop;;\
        } # end if\
      } # end $loop_quarter\
\
     # wechsel zum nächsten Tag\
     if ( $loop_hour == 23 and $fc == 0 ) {\
       $fc = 1;;\
       $loop_hour = -1;;\
     } # end if\
    } # end for loop_hour\
  } # end if $fc_trigger_max_start\
  Log3($name,3,sprintf("%-20s ur_16 : fc%d_trigger_max_stop        %s", $name, $fc, $fc_trigger_max_stop));;\
  return $fc_trigger_max_stop;;\
},\
\
fc0_trigger_max_dauer:fc0_trigger_max_stop.* {\
## Ermittle Dauer für max\
  my $fc_trigger_dauer = "null";;\
  my $fc_trigger_start = ReadingsVal($name,"fc0_trigger_max_start","null");;\
  if ( $fc_trigger_start ne "null" ) {\
    my $fc_trigger_stop = ReadingsVal($name,"fc0_trigger_max_stop","null");;\
\
    if ( $fc_trigger_stop ne "null" ) {\
      my ($h1,$m1) = split(":", $fc_trigger_start);;\
      my ($h2,$m2) = split(":", $fc_trigger_stop);;\
      $h2 += 24 if ( $h2 < $h1 );;\
\
      $fc_trigger_dauer = ($h2*60 + $m2) - ($h1*60 + $m1);;\
      if ( $fc_trigger_dauer <= 15 ) {                               # Das Trigger Fenster ist zu klein\
        my $hash = $defs{$name};;\
        readingsBeginUpdate($hash);;\
        readingsBulkUpdate($hash, "fc0_trigger_max_start", "null");;\
        readingsBulkUpdate($hash, "fc0_trigger_max_stop", "null");;\
        $fc_trigger_dauer = "null";;\
        Log3($name,3,sprintf("%-20s ur_17 : fc0_trigger_max_dauer       ist zu kurz", $name));;\
      }\
    }\
    Log3($name,3,sprintf("%-20s ur_17 : fc0_trigger_max_dauer       %s", $name, $fc_trigger_dauer));;\
    return($fc_trigger_dauer);;\
  }\
  return "null";;\
},\
\
fc0_trigger_max:fc0_trigger_max_dauer.* {\
## Setzen des Triggers für die aktuelle viertel Stunde\
  my ($sec,$min,$hour) = localtime(time);;\
\
  if (    ReadingsVal($name,"fc0_trigger_max_dauer","null") ne "null"\
      and sprintf("%02d:%02d",$hour,$min) ge ReadingsVal($name,"fc0_trigger_max_start","null")\
      and ReadingsVal($name,"current_price",0) >= ReadingsVal($name,"fc_trigger_max_price",0) ) {\
    Log3($name,3,sprintf("%-20s ur_18 : fc0_trigger_max             on", $name));;\
    return "on";;\
  }\
  Log3($name,3,sprintf("%-20s ur_18 : fc0_trigger_max             off", $name));;\
  return "off";;\
},\
\
fc1_trigger_max_start:fc_trigger_max_price.* {\
  my ($sec,$min,$hour) = localtime(time);;\
  my $fc = 1;;\
\
  # Nur in der ersten Viertelstunde neu berechnen\
  if ($min >= 15) {\
    Log3($name,3,sprintf("%-20s ur_19 : Neuberechnung von fc%d_trigger_max_start gesperrt (Minute %02d)", $name, $fc, $min));;\
    return;;\
  }\
\
  if (ReadingsVal($name,"fc1_0000_startsAt","null") ne "null") {\
    my $fc_trigger_max_price = ReadingsVal($name,"fc_trigger_max_price",0);;\
\
    # Ermitteln des nächsten Trigger Fensters\
    my $fc_total = 0;;\
\
    for (my $loop_hour = 0;; $loop_hour <= 23;; $loop_hour++) {\
      for (my $loop_quarter = 0;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_total = ReadingsVal($name,sprintf("fc%d_%02d%02d_total", $fc, $loop_hour , $loop_quarter*15),0);;\
        Log3($name,4,sprintf("%-20s ur_19 :  fc%d Start max  %02d:%02d total: %.2f max: %.2f", $name, $fc, $loop_hour, $loop_quarter*15, $fc_total, $fc_trigger_max_price));;\
        if ( $fc_total > $fc_trigger_max_price ) {\
          Log3($name,3,sprintf("%-20s ur_19 : fc%d_trigger_max_start       %02d:%02d", $name, $fc, $loop_hour, $loop_quarter*15));;\
          return(sprintf("%02d:%02d", $loop_hour, $loop_quarter*15));;\
        }\
      } # end for $loop_quarter\
    } # end  for $loop_hour\
  } # end if fc1_0000_startsAt\
  Log3($name,3,sprintf("%-20s ur_19 : fc%d_trigger_max_start       null", $name, $fc));;\
  return "null";;\
},\
\
fc1_trigger_max_stop:fc1_trigger_max_start.* {\
## Ermitteln des nächsten Trigger Fensters\
  my $fc = 1;;\
  my $fc_trigger_max_price = ReadingsVal("$name","fc_trigger_max_price",0);;\
\
  my $fc_trigger_max_start = ReadingsVal("$name","fc1_trigger_max_start","null");;\
  my $fc_trigger_max_stop = $fc_trigger_max_start;;\
\
  if ( $fc_trigger_max_start ne "null" ) {\
    my ($fc_trigger_max_start_hour,$fc_trigger_max_start_quarter) = split(":", $fc_trigger_max_start);;\
    $fc_trigger_max_start_quarter /= 15;;\
\
    my $fc_total = 0;;\
\
    for (my $loop_hour = $fc_trigger_max_start_hour;; $loop_hour <= 23;; $loop_hour++) {\
      my $start_quarter = ($loop_hour == $fc_trigger_max_start_hour) ? $fc_trigger_max_start_quarter : 0;;\
      for (my $loop_quarter = $start_quarter;; $loop_quarter <= 3;; $loop_quarter++) {\
        $fc_total = ReadingsVal("$name",sprintf("fc%d_%02d%02d_total", $fc, $loop_hour, $loop_quarter*15),0);;\
        Log3($name,4,sprintf("%-20s ur_20 :  fc%d Stop  max  %02d:%02d total: %.2f max: %.2f", $name, $fc, $loop_hour, $loop_quarter*15, $fc_total, $fc_trigger_max_price));;\
        if ( $fc_total > $fc_trigger_max_price ) {\
          $fc_trigger_max_stop = sprintf("%02d:%02d",$loop_hour, $loop_quarter*15) ;;\
        } else {\
          $fc_trigger_max_stop = sprintf("%02d:%02d",$loop_hour, $loop_quarter*15) ;;\
          Log3($name,3,sprintf("%-20s ur_20 : fc%d_trigger_max_stop        %s", $name, $fc, $fc_trigger_max_stop));;\
          return $fc_trigger_max_stop;;\
        } # end if\
      } # end $loop_quarter\
    } # end for loop_hour\
  } # end if $fc_trigger_max_start\
\
  Log3($name,3,sprintf("%-20s ur_20 : fc%d_trigger_max_stop        %s", $name, $fc, $fc_trigger_max_stop));;\
  return $fc_trigger_max_stop;;\
},\
\
fc1_trigger_max_dauer:fc1_trigger_max_stop.* {\
## Berechnung des Trigger Fensters in Minuten\
  my $fc_trigger_max_start = ReadingsVal("$name","fc1_trigger_max_start","null");;\
  if ( $fc_trigger_max_start ne "null" ) {\
    my $fc_trigger_max_stop = ReadingsVal("$name","fc1_trigger_max_stop","null");;\
    my ($h1,$m1) = split(":", $fc_trigger_max_start);;\
    my ($h2,$m2) = split(":", $fc_trigger_max_stop);;\
    return ($h2*60 + $m2) - ($h1*60 + $m1);;\
  }\
  return "null";;\
},\
\
fc0_next1_quarter:current_price.* {\
  my ($sec,$min,$hour) = localtime(time);;\
  my $quarter = int($min / 15);;                        # aktuelle Viertelstunde 0–3\
  my $next_quarter = ($quarter + 1) % 4;;               # nächste Viertelstunde\
  my $hour_offset = $hour;;                             # passen sich an wenn es über Mitternacht geht\
  my $fc = 0;;                                          # fc0_ = heute passen sich an wenn es über Mitternacht geht\
\
  if ($quarter == 3) {                                  # 23:45 → nächste Viertelstunde gehört zur nächsten Stunde\
    $hour_offset = ($hour_offset + 1) % 24;;\
    $fc = 1 if $hour_offset == 0;;                      # fc1_ = morgen, wenn wir Mitternacht überschreiten\
  }\
  return round(ReadingsVal($name,sprintf("fc%d_%02d%02d_total", $fc, $hour_offset, $next_quarter*15),0),2);;\
 },\
\
fc0_next1_hour:current_price.* {\
  my $j;;\
  my ($sec,$min,$hour) = localtime(time);;\
  my $quarter      = int($min / 15);;                  # aktuelle Viertelstunde 0–3\
  my $next_quarter = ($quarter + 1) % 4;;              # nächste Viertelstunde\
  my $hour_offset  = $hour;;                           # passt sich an wenn es über Mitternacht geht\
  my $fc = 0;;                                         # fc0_ = heute, passt sich an wenn es über Mitternacht geht\
\
  $hour_offset = ($hour_offset + 1) % 24;;             # 23 → nächste Stunde gehört zum nächsten Tag\
  $fc = 1 if $hour_offset == 0;;                       # fc1_ = morgen, wenn Mitternacht überschritten\
  for (my $loop_quarter = 0;; $loop_quarter <= 3;; $loop_quarter++) {\
    $j += ReadingsVal("$name",sprintf("fc%d_%02d%02d_total", $fc, $hour_offset, $loop_quarter*15),0);;\
  }\
\
  return round($j/4,2);;                               # Für die nächste Stunde wird der Durchschnitt ausgegeben\
 },\
\
nodes_TIMESTAMP:current_price.* {\
  my ($sec,$min,$hour) = localtime(time);;\
\
  # Nur in der ersten Viertelstunde neu berechnen\
  if ($min >= 15) {\
    Log3($name,3,sprintf("%-20s ur_24 : Neuberechnung der Kosten gesperrt (Minute %02d)", $name,$min));;\
    return;;\
  }\
\
  my $conf_EVU = ReadingsVal("$name","conf_EVU","EPEX_Spot");;\
  if ( $conf_EVU ne "Tibber_Live" ) {             # Tibber_Live liefert die Kosten selber\
    my $conf_Netz_Zaehler = AttrVal($name,"conf_Netz_Zaehler","null");;\
    my $conf_Netz_Zaehler_Reading = AttrVal($name,"conf_Netz_Zaehler_Reading","null");;\
    my $sql = "\
      INSERT INTO history (TIMESTAMP, DEVICE, TYPE, READING, VALUE)\
      WITH price AS (\
        SELECT\
          TIMESTAMP AS interval_start,\
          VALUE AS price_ct_per_kWh\
        FROM history\
        WHERE DEVICE = '$name'\
          AND READING = 'fc0_total'\
          AND TIMESTAMP >= CURDATE()\
          AND TIMESTAMP < CURDATE() + INTERVAL 1 DAY\
      ),\
      \
      consumption AS (\
        SELECT\
          interval_start,\
          CASE\
            WHEN interval_start = CURDATE() THEN 0\
            WHEN VALUE < LAG(VALUE) OVER (ORDER BY interval_start) THEN NULL\
            ELSE VALUE - LAG(VALUE) OVER (ORDER BY interval_start)\
          END AS kWh_15min\
        FROM (\
          SELECT\
            FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900) * 900) AS interval_start,\
            VALUE,\
            ROW_NUMBER() OVER (\
              PARTITION BY FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900)\
              ORDER BY TIMESTAMP DESC\
            ) AS rn\
          FROM history\
          WHERE DEVICE  = '$conf_Netz_Zaehler'\
            AND READING = '$conf_Netz_Zaehler_Reading'\
            AND TIMESTAMP >= CURDATE() - INTERVAL 2 DAY\
        ) t\
        WHERE rn = 1\
          AND interval_start >= CURDATE()\
          AND interval_start < CURDATE() + INTERVAL 1 DAY\
      )\
      \
      SELECT *\
      FROM (\
        SELECT\
          c.interval_start                   AS TIMESTAMP,\
          '$name'              AS DEVICE,\
          'cost'                             AS TYPE,\
          'nodes_cost'                       AS READING,\
      	ROUND(COALESCE(c.kWh_15min,0) * COALESCE(p.price_ct_per_kWh,0) / 100, 6 ) AS VALUE\
        FROM consumption c\
      LEFT JOIN price p\
             ON p.interval_start = c.interval_start\
      ) AS new\
      WHERE TIMESTAMP >= CURDATE()\
      ON DUPLICATE KEY UPDATE\
        VALUE = new.VALUE;;\
    ";;\
\
    Log3($name,4,sprintf("%-20s ur_24 : Neuberechnung der Kosten in der Datenbank\n%s", $name, ($sql =~ s/\),\s*\(/\),\n\(/gr) ));;   # für die Anzeige lesbar umformatieren\
    Log3($name,3,sprintf("%-20s ur_24 : Neuberechnung der Kosten mit Zähler %s und Reading %s", $name, $conf_Netz_Zaehler, $conf_Netz_Zaehler_Reading ));;\
    ::CommandGet(undef,"LogDBRep_${name}_SQL sqlCmdBlocking $sql");;\
\
    $sql = "\
      SELECT *\
      FROM history\
      WHERE DEVICE  = '$name'\
        AND TYPE    = 'cost'\
        AND READING = 'nodes_cost'\
        AND TIMESTAMP >= CURDATE()\
      ORDER BY TIMESTAMP;;\
    ";;\
\
    Log3($name,4,sprintf("%-20s ur_24 : Abfrage der Kosten aus der Datenbank\n%s", $name, ($sql =~ s/\),\s*\(/\),\n\(/gr) ));;   # für die Anzeige lesbar umformatieren\
    Log3($name,3,sprintf("%-20s ur_24 : Abfrage der Kosten aus der Datenbank", $name));;\
    my @rows = ::CommandGet(undef,"LogDBRep_${name}_SQL sqlCmdBlocking $sql");;\
\
    my %cost_values;;\
\
    # 1. Vorhandene DB-Werte einlesen\
    foreach my $line (@rows) {\
      next unless defined $line;;        # undef vermeiden\
      next if $line =~ /^\s*$/;;         # leere Zeilen ignorieren\
\
      chomp($line);;\
      my ($ts, undef, undef, undef, undef, $value) = split(/\|/, $line);;\
\
      my ($date, $time) = split(/\s+/, $ts);;\
      my ($hh, $mm) = split(/:/, $time);;\
\
      my $reading = sprintf("nodes_%02d%02d_cost", $hh, $mm);;\
      $cost_values{$reading} = $value;;\
    }\
\
    # 2. Alle 96 Viertelstunden des Tages erzeugen\
\
    for (my $h = 0;; $h < 24;; $h++) {\
      for (my $m = 0;; $m < 60;; $m += 15) {\
        my $reading = sprintf("nodes_%02d%02d_cost", $h, $m);;\
        # Falls nicht vorhanden mit 0 belegen\
        $cost_values{$reading} = 0\
            unless exists $cost_values{$reading};;\
      }\
    }\
\
    my $hash = $defs{$name};;\
    readingsBeginUpdate($hash);;\
\
    foreach my $reading (sort keys %cost_values) {\
      readingsBulkUpdate($hash,$reading,$cost_values{$reading});;\
    }\
  } # End if not Tibber_Live\
\
  return FmtDateTime(time());;\
},\
\
nodes_TIMESTAMP:nodes_00_00_cost.* {\
########################################### Tibber_Live ##############################################\
  my ($timestamp,$cost_value,$cons_value,$tmp);;\
  my $conf_EVU = ReadingsVal("$name","conf_EVU","EPEX_Spot");;\
\
  if ( $conf_EVU eq "Tibber_Live" ) {             # Tibber_Live liefert die Kosten und den Verbrauch selber\
    # Eintragen der Kosten und des Verbrauchs für die letzten drei Stunden\
    for (my $loop_last = 0;; $loop_last <= 2;; $loop_last++) {\
      $timestamp = ReadingsVal("$name",sprintf("nodes_00_%02d_from",$loop_last),"null");;\
      $cost_value = ReadingsVal("$name",sprintf("nodes_00_%02d_cost",$loop_last),"null");;\
      $cons_value = ReadingsVal("$name",sprintf("nodes_00_%02d_consumption",$loop_last),"null");;\
      if ( $cost_value ne "null" ) {\
        # Eintragen der Kosten und des Verbrauchs pro die Stunde\
        my $sql = "\
          INSERT INTO history (TIMESTAMP,DEVICE,TYPE,READING,VALUE) VALUES\
            ('$timestamp','$name','$conf_EVU','nodes_cost','$cost_value'),\
            ('$timestamp','$name','$conf_EVU','nodes_consumption','$cons_value')\
          ON DUPLICATE KEY UPDATE\
             VALUE = VALUES(VALUE);;\
        ";;\
        ::CommandGet(undef,"LogDBRep_${name}_SQL sqlCmdBlocking $sql");;\
      } else {\
        $tmp = "null";;\
      } # end if\
    } # end for\
  } # End if not Tibber_Live\
  $timestamp = $tmp if ($tmp eq "null");;\
  return $timestamp;;\
},\
\
nodes_TIMESTAMP:nodes_24_00_cost.* {\
  my ($timestamp,$cost_value,$cons_value,$tmp);;\
  my $conf_EVU = ReadingsVal("$name","conf_EVU","EPEX_Spot");;\
\
  if ( $conf_EVU eq "Tibber_Live" ) {             # Tibber_Live liefert die Kosten und den Verbrauch selber\
    for (my $loop_last = 0;; $loop_last <= 23;; $loop_last++) {\
      $timestamp = ReadingsVal("$name",sprintf("nodes_24_%02d_from",$loop_last),"null");;\
      $cost_value = ReadingsVal("$name",sprintf("nodes_24_%02d_cost",$loop_last),"null");;\
      $cons_value = ReadingsVal("$name",sprintf("nodes_24_%02d_consumption",$loop_last),"null");;\
\
      if ( $cost_value ne "null" ) {\
        # Eintragen der Kosten und des Verbrauchs pro die Stunde\
        my $sql = "\
          INSERT INTO history (TIMESTAMP,DEVICE,TYPE,READING,VALUE) VALUES\
            ('$timestamp','$name','$conf_EVU','nodes_cost','$cost_value'),\
            ('$timestamp','$name','$conf_EVU','nodes_consumption','$cons_value')\
          AS new\
          ON DUPLICATE KEY UPDATE\
            VALUE = new.VALUE;;\
        ";;\
        ::CommandGet(undef,"LogDBRep_${name}_SQL sqlCmdBlocking $sql");;\
      } else {\
        $tmp = "null";;\
      } # end if\
    } # end for\
  } # End if not Tibber_Live\
  $timestamp = $tmp if ($tmp eq "null");;\
  return $timestamp;;\
},\
\
nodes_TIMESTAMP:05_consumption_hourly_100-0001.* {\
\
  my $conf_EVU = ReadingsVal("$name","conf_EVU","EPEX_Spot");;\
\
  if ( $conf_EVU eq "Tibber_Live" ) {             # Tibber_Live liefert die Kosten und den Verbrauch selber\
    my $vat = AttrVal("$name","conf_VAT",1);;\
\
    my @values_sql;;        # sammelt alle VALUES(...)\
    my $last_timestamp;;\
\
    for (my $loop_last = 1;; $loop_last <= 300;; $loop_last += 3) {\
\
      # Timestamp\
      my $timestamp = ReadingsVal("$name",sprintf("05_consumption_hourly_100-%04d",$loop_last+2),"null");;\
\
      next if (!$timestamp || $timestamp eq "null");;\
\
      $timestamp =~ s/T/ /g;;\
      $timestamp = substr($timestamp,0,19);;\
      $last_timestamp = $timestamp;;\
\
      # Cost (ohne MwSt)\
      my $cost = ReadingsVal("$name",sprintf("05_consumption_hourly_100-%04d",$loop_last+1),"");;\
\
      next if ($cost eq "");;\
\
      $cost = round($cost * $vat, 4);;\
\
      push @values_sql,"('$timestamp','$name','$conf_EVU','nodes_cost','$cost')";;\
\
      # Consumption\
      my $cons = ReadingsVal("$name","05_consumption_hourly_100-".sprintf("%04d",$loop_last),"null");;\
\
      if (defined $cons && $cons ne "null") {\
        $cons = round($cons,4);;\
        push @values_sql,"('$timestamp','$name','$conf_EVU','nodes_consumption','$cons')";;\
      }\
    }\
\
    # Ein einziges INSERT wenn Daten vorhanden\
    if (@values_sql) {\
      my $sql = "\
        INSERT INTO history (TIMESTAMP,DEVICE,TYPE,READING,VALUE)\
        VALUES\
          ".join(",\n", @values_sql)."\
        AS new\
        ON DUPLICATE KEY UPDATE\
          VALUE = new.VALUE;;\
      ";;\
      ::CommandGet(undef,"LogDBRep_${name}_SQL sqlCmdBlocking $sql");;\
    }\
  } # End if not Tibber_Live\
\
  return $last_timestamp;;\
},\
\
nodes_cost_avg:nodes_TIMESTAMP.* {\
## Berechnung des Tages Wertes\
  if ( ReadingsVal("$name","nodes_TIMESTAMP","null") ne "null" ) {\
    my $nodes_cost_avg = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
           SELECT cast(avg(VALUE) AS DECIMAL(4,2)) FROM history\
           WHERE DEVICE='".$name."'\
             AND READING='nodes_cost'\
             AND TIMESTAMP >= curdate() ;;") ;;\
    return 0 if (!defined $nodes_cost_avg || $nodes_cost_avg =~ /^\s*$/);;\
    return $nodes_cost_avg;;\
  } # end if\
  return "null";;\
},\
\
nodes_cost_min:nodes_TIMESTAMP.* {\
##  Ermittlung des minimal Wertes\
  if ( ReadingsVal("$name","nodes_TIMESTAMP","null") ne "null" ) {\
    my $nodes_cost_min = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
           SELECT cast(min(VALUE) AS DECIMAL(4,2)) FROM history\
           WHERE DEVICE='".$name."'\
             AND READING='nodes_cost'\
             AND TIMESTAMP >= curdate() ;;") ;;\
    return 0 if (!defined $nodes_cost_min || $nodes_cost_min =~ /^\s*$/);;\
    return $nodes_cost_min;;\
  } # end if\
  return "null";;\
},\
\
nodes_cost_max:nodes_TIMESTAMP.* {\
## Ermittlung des maximal Wertes\
  if ( ReadingsVal("$name","nodes_TIMESTAMP","null") ne "null" ) {\
    my $nodes_cost_max = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
           SELECT cast(max(VALUE) AS DECIMAL(4,2)) FROM history\
           WHERE DEVICE='".$name."'\
             AND READING='nodes_cost'\
             AND TIMESTAMP >= curdate() ;;") ;;\
    return 0 if (!defined $nodes_cost_max || $nodes_cost_max =~ /^\s*$/);;\
    return $nodes_cost_max;;\
  } # end if\
  return "null";;\
},\
\
nodes_consumption_day:nodes_TIMESTAMP.* {\
## Berechnung des Tages Verbrauches\
  if ( ReadingsVal("$name","nodes_TIMESTAMP","null") ne "null" ) {\
    my $nodes_consumption_day = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
             SELECT cast(sum(VALUE) AS DECIMAL(10,2)) FROM history\
             WHERE DEVICE='".$name."'\
               AND READING='nodes_consumption'\
               AND date(TIMESTAMP) = curdate() ;;") ;;\
    return 0 if (!defined $nodes_consumption_day || $nodes_consumption_day =~ /^\s*$/);;\
    return $nodes_consumption_day;;\
  } # end if\
  return "null";;\
},\
\
nodes_consumption_month:nodes_TIMESTAMP.* {\
## Berechnung des Monats Verbrauches\
  if ( ReadingsVal("$name","nodes_TIMESTAMP","null") ne "null" ) {\
    my $nodes_consumption_month = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
             SELECT cast(sum(VALUE) AS DECIMAL(10,0)) FROM history\
             WHERE DEVICE='".$name."'\
               AND READING='nodes_consumption'\
               AND YEAR(TIMESTAMP)  = YEAR(curdate())\
               AND MONTH(TIMESTAMP) = MONTH(curdate()) ;;") ;;\
    return 0 if (!defined $nodes_consumption_month || $nodes_consumption_month =~ /^\s*$/);;\
    return $nodes_consumption_month;;\
  } # end if\
  return "null";;\
},\
\
nodes_consumption_year:nodes_TIMESTAMP.* {\
## Berechnung des Jahres Verbrauches\
  if ( ReadingsVal("$name","nodes_TIMESTAMP","null") ne "null" ) {\
    my $nodes_consumption_year = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
             SELECT cast(sum(VALUE) AS DECIMAL(10,0)) FROM history\
             WHERE DEVICE='".$name."'\
               AND READING='nodes_consumption'\
               AND YEAR(TIMESTAMP) = YEAR(curdate()) ;;") ;;\
    return 0 if (!defined $nodes_consumption_year || $nodes_consumption_year =~ /^\s*$/);;\
    return $nodes_consumption_year;;\
  } # end if\
  return "null";;\
},\
\
total_cost_day:nodes_TIMESTAMP.* {\
## Berechnung des Tages Wertes\
  if ( ReadingsVal("$name","nodes_TIMESTAMP","null") ne "null" ) {\
    my $total_cost_day = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
             SELECT CAST(SUM(VALUE) AS DECIMAL(8,2)) AS VALUE\
             FROM history\
             WHERE DEVICE='".$name."'\
               AND READING='nodes_cost'\
               AND date(TIMESTAMP) = curdate() ;;") ;;\
    return 0 if (!defined $total_cost_day || $total_cost_day =~ /^\s*$/);;\
    return $total_cost_day;;\
  } # end if\
  return "null";;\
},\
\
total_cost_month:nodes_TIMESTAMP.* {\
## Berechnung des monats Wertes\
  if ( ReadingsVal("$name","nodes_TIMESTAMP","null") ne "null" ) {\
    my $total_cost_month = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
             SELECT CAST(SUM(VALUE) AS DECIMAL(8,2)) AS VALUE\
             FROM history\
             WHERE DEVICE='".$name."'\
               AND READING='nodes_cost'\
               AND YEAR(TIMESTAMP) = YEAR(curdate())\
               AND MONTH(TIMESTAMP) = MONTH(curdate()) ;;") ;;\
    return 0 if (!defined $total_cost_month || $total_cost_month =~ /^\s*$/);;\
    return $total_cost_month;;\
  } # end if\
  return "null";;\
},\
\
total_cost_year:nodes_TIMESTAMP.* {\
## Berechnung des Jahres Wertes\
  if ( ReadingsVal("$name","nodes_TIMESTAMP","null") ne "null" ) {\
    my $total_cost_year = ::CommandGet(undef, "LogDBRep_${name}_SQL sqlCmdBlocking\
             SELECT CAST(SUM(VALUE) AS DECIMAL(8,2)) AS VALUE\
             FROM history\
             WHERE DEVICE='".$name."'\
               AND READING='nodes_cost'\
               AND YEAR(TIMESTAMP) = YEAR(curdate()) ;;") ;;\
    return 0 if (!defined $total_cost_year || $total_cost_year =~ /^\s*$/);;\
    return $total_cost_year;;\
  } # end if\
  return "null";;\
},\
\
fc_DbLog:fc0_0000_total.* {\
## Schreibt die readings fc*_hhmm_total als fc*_total mit passendem TIMESTAMP in die Datenbank\
  my ($timestamp,$date,$value);;\
  my $conf_EVU = ReadingsVal("$name","conf_EVU","EPEX_Spot");;\
  my @values_sql;;                                                          # Array für alle INSERT-Werte\
\
  Log3($name,3,sprintf("%-20s ur_36 : ", $name)."fc*_total Daten für $conf_EVU in die Datenbank schreiben");;\
  my $stop_fc = (ReadingsVal("$name","fc1_0000_startsAt","null") ne "null") ? 1 : 0;;\
  for (my $loop_fc = 0;; $loop_fc <= $stop_fc;; $loop_fc++) {\
    $date = ReadingsVal("$name","fc${loop_fc}_0000_startsAt","null");;\
    next if (!$date || $date eq "null");;\
    $date = (split(' ',$date))[0];;\
    Log3($name,3,sprintf("%-20s ur_36 : ", $name)."fc$loop_fc Daten vom $date für $conf_EVU gefunden");;\
    for (my $loop_hour = 0;; $loop_hour <= 23;; $loop_hour++) {\
      for (my $loop_quarter = 0;; $loop_quarter <= 3;; $loop_quarter++) {\
        $timestamp = sprintf("%s %02d:%02d:00",$date,$loop_hour,$loop_quarter*15);;\
        $value     = ReadingsVal("$name",sprintf("fc%d_%02d%02d_total",$loop_fc,$loop_hour,$loop_quarter*15),"null");;\
        Log3($name,4,sprintf("%-20s ur_36 : ", $name)."  $timestamp $name $conf_EVU fc${loop_fc}_total $value");;\
        push @values_sql,sprintf("('%s','%s','%s','%s','%s')",$timestamp,$name,$conf_EVU,"fc${loop_fc}_total",$value);;\
      } # end quarter\
    } # end loop_hour\
  } # end loop_fc\
\
  if (@values_sql) {\
    my $sql = "INSERT INTO history (TIMESTAMP,DEVICE,TYPE,READING,VALUE) VALUES " . join(", ",@values_sql) . " AS new ON DUPLICATE KEY UPDATE VALUE = new.VALUE;;";;\
    Log3($name,4,sprintf("%-20s ur_36 : Eintragen neuer Daten in die Datenbank\n%s", $name, ($sql =~ s/\),\s*\(/\),\n\(/gr) ));;   # für die Anzeige lesbar umformatieren\
    ::CommandGet(undef,"LogDBRep_${name}_SQL sqlCmdBlocking $sql");;\
  }\
\
  return ReadingsTimestamp("$name","fc0_0000_startsAt","null");;\
}\

attr Stromboerse_connect verbose 3
attr Stromboerse_connect ws_minInterval 54
attr Stromboerse_connect ws_websocketURL wss:websocket-api.tibber.com:443/v1-beta/gql/subscriptions


setstate Stromboerse_connect 2026-01-23 18:08:52 conf_EVU Tibber