Bisher hatte ich den Poweropti über die Cloud von Powerfox per HTTPMOD ausgelesen. Das klappt zur Dokumentation vom Zählerstand etc. recht gut.
Aber für eine Liveansicht, oder um auf bestimmte Verbräuche direkt zu reagieren müsste ein Abfrage-Intervall wesentlich kürzer sein.
Seit dem 01.10. gibt es nun eine lokale Api für den Poweropti von Powerfox (man muss dafür aber leider die kostenpflichtige Abo-Version nehmen ...).
Allerdings bekomme ich über HTTPMOD diese Anbindung nicht wirklich hin...
Per Curl läuft die Abfrage so:
curl -H "X-API-KEY: 10112347185f0" http://192.168.123.187/value
Wobei der Api-Key die Seriennummer vom Lesekopf ist.
Das Ergebnis kommt dann als JSON:
{
"timestamp": 1759851569,
"values": [
{ "obis": "1.7.0", "value": 2 },
{ "obis": "1.8.0", "value": 6167439 },
{ "obis": "1.8.1", "value": 0 },
{ "obis": "1.8.2", "value": 0 },
{ "obis": "2.8.0", "value": 28112318 }
]
Hat jemand einen Tipp für mich, wie ich das vernünftig einbinden kann? Getested habe ich aktuell HTTPMOD, aber bekomme kein wirkliches Ergebnis. Kenne mich auch leider mit den ganzen Syntax Attributen, die man ggfs. braucht nicht aus.
Oder wäre ein anderes fhem Modul besser geeignet dafür?
Aktuell sieht mein Device so aus :
defmod poweropti_local HTTPMOD http://192.168.123.187/local 60 =>> (URL enthält einen Fehler, siehe übernächsten Beitrag...)
attr poweropti_local enableControlSet 1
attr poweropti_local enableCookies 0
attr poweropti_local extractAllJSON 1
attr poweropti_local requestHeader X-API-KEY: 10112347185f0
attr poweropti_local room Geraete
attr poweropti_local showBody 0
attr poweropti_local timeout 10
Aber funktioniert halt nicht...
In der Anlage die Doku zur lokalen API.
Versuche doch mal alternativ JsonMod. Ist vielleicht einfacher zu konfigurieren.
Gruß Ralf
Danke für den Tipp.
Habe ich gerade mal probiert.
defmod poweropti_jsonmod JsonMod http://192.168.123.187/local 30 =>> (URL enthält einen Fehler, siehe unten ...)
attr poweropti_jsonmod httpHeader X-API-KEY: 10112347185f0
attr poweropti_jsonmod httpTimeout 10
attr poweropti_jsonmod readingList complete()
attr poweropti_jsonmod room Geraete
bekomme hier kein Ergebnis und bei den Internals als Source dann die Meldung:
http://192.168.123.187/local 30 (404) ==> also 404 http Fehler
sowie API_LAST_MSG - invalid server response
Also irgendwie klappt momentan weder mit HTTPMOD noch JSONMOD überhaupt erstmal die korrekt Verbindung.
Somit kommt natürlich auch gar kein Ergebnis zurück.
----
Edit: Es klappt nun!!
Problem ist oben zu erkennen, wer es sieht :D
in der URL steht oben /local .... muss aber /value heissen...
Damit klappt es nun mit JSONMOD und mit HTTPMOD !!
So sehen die Devices nun aus:
defmod poweropti_local HTTPMOD http://192.168.123.187/value 30
attr poweropti_local enableControlSet 1
attr poweropti_local enableCookies 0
attr poweropti_local extractAllJSON 1
attr poweropti_local requestHeader1 X-API-KEY: 10112347185f0
attr poweropti_local requestHeader2 Content-Type: application/json
attr poweropti_local requestHeader3 Accept: */*
attr poweropti_local room Geraete
attr poweropti_local showBody 0
attr poweropti_local timeout 10
defmod poweropti_jsonmod JsonMod http://192.168.123.187/value 30
attr poweropti_jsonmod httpHeader X-API-KEY: 10112347185f0
attr poweropti_jsonmod httpTimeout 10
attr poweropti_jsonmod readingList complete()
attr poweropti_jsonmod room Geraete
Readings bei beiden nun vorhanden:
setstate poweropti_local 2025-10-07 18:33:07 timestamp 1759854786
setstate poweropti_local 2025-10-07 18:33:07 values_01_obis 1.7.0
setstate poweropti_local 2025-10-07 18:33:07 values_01_value 826
setstate poweropti_local 2025-10-07 18:33:07 values_02_obis 1.8.0
setstate poweropti_local 2025-10-07 18:33:07 values_02_value 6167886
setstate poweropti_local 2025-10-07 18:33:07 values_03_obis 1.8.1
setstate poweropti_local 2025-10-07 18:33:07 values_03_value 0
setstate poweropti_local 2025-10-07 18:33:07 values_04_obis 1.8.2
setstate poweropti_local 2025-10-07 18:33:07 values_04_value 0
setstate poweropti_local 2025-10-07 18:33:07 values_05_obis 2.8.0
setstate poweropti_local 2025-10-07 18:33:07 values_05_value 28112325
Die Namen der Readings sind noch nicht schön, aber das kann ich jetzt versuchen zu ändern.
Wichtig war erstmal die korrekte Verbindung und Rückantwort!
Hier nun das HTTPMOD Device zur localen Abfrage vom PowerOpti von Powerfox mit entsprechend benannten Readings als UserReadings und einem StatusFormat:
defmod poweropti_local HTTPMOD http://192.168.123.187/value 15
attr poweropti_local devStateStyle style="text-align:right"
attr poweropti_local enableControlSet 1
attr poweropti_local enableCookies 0
attr poweropti_local extractAllJSON 1
attr poweropti_local group Stromzaehler
attr poweropti_local icon measure_power_meter
attr poweropti_local requestHeader1 X-API-KEY: 10112347185f0
attr poweropti_local requestHeader2 Content-Type: application/json
attr poweropti_local requestHeader3 Accept: */*
attr poweropti_local room Geraete
attr poweropti_local showBody 0
attr poweropti_local stateFormat {return "Aktuell Bezug: ".sprintf("%.0f",ReadingsVal($name,"powerBezug",0))." Watt<br>\\
Aktuell Einspeisung: ".sprintf("%.0f",ReadingsVal($name,"powerEinspeisung",0))." Watt<br>\\
Bezug Zählerstand: ".sprintf("%.3f",ReadingsVal($name,"ZaehlerBezug_kWh",0))." kWh<br>\\
Einspeisung Zählerstand: ".sprintf("%.3f",ReadingsVal($name,"ZaehlerEinspeisung_kWh",0))." kWh";;;;}\
attr poweropti_local timeout 10
attr poweropti_local userReadings ZaehlerBezug_kWh {sprintf('%.3F', ReadingsVal($name,"values_02_value",0)/1000)},\
ZaehlerEinspeisung_kWh {sprintf('%.3F', ReadingsVal($name,"values_05_value",0)/1000)},\
powerEinspeisung:values_01_value.* {sprintf('%.0F', ReadingsVal($name,"values_01_value","0")<0?ReadingsVal($name,"values_01_value","0")*-1:0)},\
powerEinspeisungMinus:values_01_value.* {sprintf('%.0F', ReadingsVal($name,"values_01_value","0")<0?ReadingsVal($name,"values_01_value","0"):0)},\
powerBezug:values_01_value.* {sprintf('%.0F', ReadingsVal($name,"values_01_value","0")>0?ReadingsVal($name,"values_01_value","0"):0)},\
powerEinspeisung_kWh {sprintf('%.3F', ReadingsVal($name,"powerEinspeisung",0)/1000)},\
powerBezug_kWh {sprintf('%.3F', ReadingsVal($name,"powerBezug",0)/1000)},