AWATTar - Virtueller Stromkunde
Das relativ junge Unternehmen aWATTar (eine Tochter der durch ihre Thermostate bekannten tado GmbH) hat sich zum Ziel gesetzt, die variablen Strompreise der Leipziger Strombörse EPEX Spot DE an die Endkunden weiterzugeben. Diese werden jeweils täglich um 14:00 für den Folgetag bekannt gegeben und können - bei einem Überangebot von solarer Einspeisung oder Strom aus Windkraftanlagen - auch negativ werden.
aWATTar berechnet den Endkunden dann
Arbeitspreis €/kWh = Börsenpreis + 3% vom Absolutwert des Börsenpreises + Netzengelte/Steuern Grundpreis €/Monat = Netzentgelte/Steuer + Messstellenbetrieb + Aufschlag
Typische Werte sind
Arbeitspreis = Börsenpreis + 3% vom Absolutwert des Börsenpreises + 16,71 €/kWh Grundpreis = 10,01 €/Monat + 5,44 €/Monat + 4,58 €/Monat = 20,03 €/Monat
Für FHEM-Nutzer stellt sich damit die Frage:
Wieviel hätte es mich am heutigen Tag gekostet, aWATTar-Kunde zu sein. Diese Frage wird mit den hier vorgestellten Code beantwortet.
Strompreis holen und auswerten
Die Strompreise werden mit Hilfe einer Instanz des HTTPMOD-Moduls geholt, und zwar mit den beiden Befehlen "get <Device> today" für den Zeitraum ab der vorhergehenden Mitternacht, und "get <Device> tomorrow" für den Zeitraum ab der kommenden Mitternacht. Letzteres ist deshalb nur möglich nach 14:00 an jedem beliebigen Tag.
Wichtig ist daher, ein externes Device anzulegen (z.B. mit dem at-Modul oder mit dem YAAHM-Modul), das um kurz vor Mitternacht die neuen, ab Mitternacht gültigen Strompreise holt. Warum erst kurz vor Mitternacht? Natürlich, damit die gegenwärtig berechneten Strompreise noch korrekt sind und nicht etwa überschrieben werden.
Bei dem Device, das im Nachfolgenden den Namen aWATTar bekommt, müssen folgende Attribute gesetzt werden:
grundpreis = der insgesamt in Rechnung gestellte monatliche Grundpreis netzentgelte = der von aWATTar auf den defmod aWATTar HTTPMOD https://api.awattar.de/v1/marketdata 0 attr aWATTar userattr grundpreis netzentgelte attr aWATTar event-on-update-reading touch,state,data_start,data_end,sumD attr aWATTar extractAllJSON 0 attr aWATTar get01Name data_tomorrow attr aWATTar get01URL https://api.awattar.de/v1/marketdata?start=%%start_tomorrow%% attr aWATTar get02Name data_today attr aWATTar get02URL https://api.awattar.de/v1/marketdata?start=%%start_today%% attr aWATTar group energyCost attr aWATTar grundpreis 20.03 attr aWATTar icon measure_power attr aWATTar netzentgelte 16.71 attr aWATTar reading01JSON data_01_start_timestamp attr aWATTar reading01Name data_start attr aWATTar reading01OExpr main::aWATTts2sr($val) attr aWATTar reading02JSON data_24_end_timestamp attr aWATTar reading02Name data_end attr aWATTar reading02OExpr main::aWATTts2sr($val) attr aWATTar reading11JSON data_01_marketprice attr aWATTar reading11Name data01_price attr aWATTar reading11OExpr aWATTp2p($val) attr aWATTar reading12JSON data_02_marketprice attr aWATTar reading12Name data02_price attr aWATTar reading12OExpr aWATTp2p($val) attr aWATTar reading13JSON data_03_marketprice attr aWATTar reading13Name data03_price attr aWATTar reading13OExpr aWATTp2p($val) attr aWATTar reading14JSON data_04_marketprice attr aWATTar reading14Name data04_price attr aWATTar reading14OExpr aWATTp2p($val) attr aWATTar reading15JSON data_05_marketprice attr aWATTar reading15Name data05_price attr aWATTar reading15OExpr aWATTp2p($val) attr aWATTar reading16JSON data_06_marketprice attr aWATTar reading16Name data06_price attr aWATTar reading16OExpr aWATTp2p($val) attr aWATTar reading17JSON data_07_marketprice attr aWATTar reading17Name data07_price attr aWATTar reading17OExpr aWATTp2p($val) attr aWATTar reading18JSON data_08_marketprice attr aWATTar reading18Name data08_price attr aWATTar reading18OExpr aWATTp2p($val) attr aWATTar reading19JSON data_09_marketprice attr aWATTar reading19Name data09_price attr aWATTar reading19OExpr aWATTp2p($val) attr aWATTar reading20JSON data_10_marketprice attr aWATTar reading20Name data10_price attr aWATTar reading20OExpr aWATTp2p($val) attr aWATTar reading21JSON data_11_marketprice attr aWATTar reading21Name data11_price attr aWATTar reading21OExpr aWATTp2p($val) attr aWATTar reading22JSON data_12_marketprice attr aWATTar reading22Name data12_price attr aWATTar reading22OExpr aWATTp2p($val) attr aWATTar reading23JSON data_13_marketprice attr aWATTar reading23Name data13_price attr aWATTar reading23OExpr aWATTp2p($val) attr aWATTar reading24JSON data_14_marketprice attr aWATTar reading24Name data14_price attr aWATTar reading24OExpr aWATTp2p($val) attr aWATTar reading25JSON data_15_marketprice attr aWATTar reading25Name data15_price attr aWATTar reading25OExpr aWATTp2p($val) attr aWATTar reading26JSON data_16_marketprice attr aWATTar reading26Name data16_price attr aWATTar reading26OExpr aWATTp2p($val) attr aWATTar reading27JSON data_17_marketprice attr aWATTar reading27Name data17_price attr aWATTar reading27OExpr aWATTp2p($val) attr aWATTar reading28JSON data_18_marketprice attr aWATTar reading28Name data18_price attr aWATTar reading28OExpr aWATTp2p($val) attr aWATTar reading29JSON data_19_marketprice attr aWATTar reading29Name data19_price attr aWATTar reading29OExpr aWATTp2p($val) attr aWATTar reading30JSON data_20_marketprice attr aWATTar reading30Name data20_price attr aWATTar reading30OExpr aWATTp2p($val) attr aWATTar reading31JSON data_21_marketprice attr aWATTar reading31Name data21_price attr aWATTar reading31OExpr aWATTp2p($val) attr aWATTar reading32JSON data_22_marketprice attr aWATTar reading32Name data22_price attr aWATTar reading32OExpr aWATTp2p($val) attr aWATTar reading33JSON data_23_marketprice attr aWATTar reading33Name data23_price attr aWATTar reading33OExpr aWATTp2p($val) attr aWATTar reading34JSON data_24_marketprice attr aWATTar reading34Name data24_price attr aWATTar reading34OExpr aWATTp2p($val) attr aWATTar replacement01Mode expression attr aWATTar replacement01Regex %%start_tomorrow%% attr aWATTar replacement01Value (timelocal(localtime(time()-time()%86400+86400))-3600)."000" attr aWATTar replacement02Mode expression attr aWATTar replacement02Regex %%start_today%% attr aWATTar replacement02Value (timelocal(localtime(time()-time()%86400))-3600)."000" attr aWATTar room Energie attr aWATTar stateFormat sumD € (arbeitspreis Cent/kWh) attr aWATTar userReadings touch:none {},\ arbeitspreis:touch.* {aWATTcp()},\ basispreis:touch.* {AttrVal("$NAME","grundpreis",0)},\ sumD:none {},\ deltaE:none {},\ energy_prev:none {}