Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

BernhardB
Beiträge: 7
Registriert: 15.11.2010, 17:35
Wohnort: 91207 Lauf bei Nürnberg
Danksagung erhalten: 4 Mal
Kontaktdaten:

Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von BernhardB » 21.11.2020, 11:22

Hallo,
ELV bietet seit kurzem den Powerfox Poweropti zum auslesen von elektronischen Stromzählen an. Dieser wird mit USB Netzteil versorgt und hat eine externe WLAN Antenne mit Kabel zum ankleben außerhalb des Zählerschranks. Der Sensor haftet magnetisch vor der Schnittstellen LED am Stromzähler.
Er gibt ca. alle 2s die aktuell gemessene Leistung aus (Bei PV Zweirichtungszählern die Einspeiseleistung und Bezugsleistung) und schickt diese an die Cloud zum Zugriff über die App.

In der Beschreibung "Powerfox-Kunden-API.pdf" sind Browser URL´s aufgelistet.
Z.B.
https://backend.powerfox.energy/api/2.0/my/main/current
fragt nach Benutzername und Passwort
Dann kommt die Antwort als JSON:

Watt : -1052
Timestamp: 1605952661
A_Plus: 2791563
A_Minus: 17303393

Der negative Watt Wert ist bei mir gerade die aktuelle Einspeiseleistung. :D

Danach kann die URL in kurzen Zeitabständen zyklisch eingegeben werden und es kommt dann ohne Passwortabfrage immer der aktuelle Wert.

Meine Frage:
Meine Wallbox, go-eCharger, welche sich bereits super mit meiner Homematic CCU schalten lässt soll das eAuto PV-Überschuss optimiert laden.
Die Ladeleistungsanpassung geschieht ebenfalls über URL´s die meine CCU ins LAN>WLAN verschickt.
z.B.:
http://192.168.XXX.XX/mqtt?payload=amp=6
..schaltet die Wallbox auf 6A

Ist es möglich den Powerfox Leistungswert Zyklisch in eine Systemvariable zu schreiben um dann ebenfalls zyklisch die Amperestufen der Wallbox rauf und runter zu schalten?
Eine HomeMatic CCU3; Wallbox go-eCharger, Poweropti, Jalousie-Aktoren mit Rohrmotoren; 2 Garagentorantriebe mit 4-fach Schaltaktor; HM-Zwischenstecker für Drucker u. vieles mehr.

automation-fan
Beiträge: 20
Registriert: 25.12.2018, 15:36
Danksagung erhalten: 5 Mal

Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von automation-fan » 22.11.2020, 20:24

Hallo

habe den Powerfox opti seit einigen Tagen im Einsatz und das kleine Ding funktioniert echt super.

Über den Aio Creator neo kann man Werte einfach anzeigen.

Bin nun auch auf der Suche nach einen passenden Script welches die Werte der HTTPS Abfrage in eine Systemvariable schreiben.

Mit den Einspeise und Verbrauchswerten lassen sich dann ja viele nützliche Verknüpfungen erstellen ( E-Auto laden, Pool Pumpe, Wärmepumpe usw)

Wer kann so ein Script schreiben? Solle für den Könner mit wenigen Zeilen erledigt sein

Ich könnte es mit meiner HW testen. Bin leider völliger Script Anfänger

Den Rest hat BerhardB ja schon beschrieben.

Gruß
Automation-Fan

Benutzeravatar
audi2010
Beiträge: 223
Registriert: 18.05.2015, 09:36
Wohnort: Friedberg(Hessen)
Hat sich bedankt: 171 Mal
Danksagung erhalten: 11 Mal

Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von audi2010 » 23.11.2020, 10:13

Ich nutze Poweropti über meinen örtlichen Stromversorger "OVAG" seit Januar 2020 und lass die nachfolgende Abfrage alle 5 Minuten laufen. Leider sind da auch Ausreiser dabei, deshalb die if-Einschränkung. Ich hatte auch 0-Werte dabei, die ich nachträglich per Script gelöscht habe. Das dürfte ja für die Zukunft ab IPS 5.5 mit dem neuen Archiv Geschichte sein.
Ändern:
<id poweropti> Seriennummer des Poweropti
user
Passwort
und natürlich die 3 Variablen

Code: Alles auswählen

<?php
//***Download der aktuellen Werte***********************************************
$input = Sys_GetURLContentEx("https://backend.powerfox.energy/api/2.0/my/<id poweropti>/current", Array("Timeout"=> 20000, "AuthUser"=> "user", "AuthPass"=> "Passwort"));
$werte = array(json_decode($input,"r"),true)['0'];
//var_dump($werte);
//echo "Aktuelle Werte :  " . strftime ('%Y%m%d %H:%M:%S',$werte['Timestamp']) . "  " .  $werte['Watt'] . " Watt  ". $werte['Timestamp']  . "\n";
//echo "Zählerstand    :  " . "                " . $werte['A_Plus'] . " Watt\n";
if ($werte['A_Plus'] > 400000) {
    SetValue(49903, $werte['A_Plus']/1000);
    SetValue(57380, $werte['Timestamp']);
    SetValue(58618, $werte['Watt']);
    //echo $werte['A_Plus'];        //zum Testen
}
Edit:
Ich habe bei der Verfassung des Beitrages gepennt.
Das vermerkte Script ist für den Einsatz in meinem IP-Symcon System gedacht, werde es aber trotzdem zur allgemeinen Info hier stehen lassen.
Viele Grüße
Rainer

BernhardB
Beiträge: 7
Registriert: 15.11.2010, 17:35
Wohnort: 91207 Lauf bei Nürnberg
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von BernhardB » 23.11.2020, 13:31

Hallo ihr Beide,
das liest sich doch schon sehr vielversprechend. Denke Dein IP-Symcon Schript würde sich (leicht verändet) auch in ein CCU Programm einbauen lassen.
Das mit der User und Passworteingabe verstehe ich auch nicht richtig.
Wenn ich zum Test:
https://backend.powerfox.energy/api/2.0 ... ti/current", Array("Timeout"=> 20000, "AuthUser"=> "user", "AuthPass"=> "Passwort")
mit meinen drei Angaben gefüllt id+User+Passwort zwischen den Hochkommas in meinen Browser eintrage, kommt:
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

Wenn ich:
https://backend.powerfox.energy/api/2.0 ... XX/current
eintrage, werde ich einzeln nach meinem User+Passwort gefragt. Dann kommen die Zählerwerte als JSON.

Ein erster Schritt währe schon mal eine URL in der einzeilig die Authentifizierung mit drin ist und dann die JSON Antwort im Browser kommt.
Wie müsste die Aussehen?

Vielen Dank vorerst schon mal :)
Eine HomeMatic CCU3; Wallbox go-eCharger, Poweropti, Jalousie-Aktoren mit Rohrmotoren; 2 Garagentorantriebe mit 4-fach Schaltaktor; HM-Zwischenstecker für Drucker u. vieles mehr.

automation-fan
Beiträge: 20
Registriert: 25.12.2018, 15:36
Danksagung erhalten: 5 Mal

Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von automation-fan » 23.11.2020, 22:52

Hi

das müsste dann etwa so aussehen

https://backend.powerfox.energy/api/2.0 ... tion=Basic "Zugangsdaten"}

wobei "Zugangsdaten" =powerfoxlogin:passwort mit Base64 codiert ist , wäre hier dann cG93ZXJmb3hsb2dpbjpwYXNzd29ydA==

gleiches verwendet der AIO Creator und auch bei openhab wird das verwendet.

also
https://backend.powerfox.energy/api/2.0 ... tion=Basic cG93ZXJmb3hsb2dpbjpwYXNzd29ydA==}

irgendwas passt noch mit der Syntax nicht .. knoble weiter mit try and error hab 0 Ahnunung von Scripten bzw HTTP request :-(

Benutzeravatar
audi2010
Beiträge: 223
Registriert: 18.05.2015, 09:36
Wohnort: Friedberg(Hessen)
Hat sich bedankt: 171 Mal
Danksagung erhalten: 11 Mal

Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von audi2010 » 24.11.2020, 10:53

BernhardB hat geschrieben:
23.11.2020, 13:31
Wenn ich zum Test:
https://backend.powerfox.energy/api/2.0 ... ti/current", Array("Timeout"=> 20000, "AuthUser"=> "user", "AuthPass"=> "Passwort")
mit meinen drei Angaben gefüllt id+User+Passwort zwischen den Hochkommas in meinen Browser eintrage, kommt:
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Kommt bei mir mit der genannten Eingabe auch. Warum ? Ich bin da etwas überfordert.
Mein gepostetes PHP-Script liefert in IPS ohne Probleme:
string(70) "{"Watt":476.0,"Timestamp":1606210891,"A_Plus":4827044.0,"A_Minus":0.0}"
und nach json_decode das Array:
array(4) {
["Watt"]=>
float(635)
["Timestamp"]=>
int(1606211369)
["A_Plus"]=>
float(4827130)
["A_Minus"]=>
float(0)
}
Ist da vielleicht irgendwas, das durch den Browser verändert wird.
Viele Grüße
Rainer

BernhardB
Beiträge: 7
Registriert: 15.11.2010, 17:35
Wohnort: 91207 Lauf bei Nürnberg
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von BernhardB » 24.11.2020, 11:06

Bin jetzt ebenfalls am rumprobieren.
Habe fein säuberlichst meine Anmeldedaten "es ist meine e-mail dann einen Doppelpunkt gefolgt von meinem Kennwort" in einen Base64 Codierer eingetragen.
Sieht dann soo aus, allerdings ohne der vielen XXXX:
XXXXhttps://backend.powerfox.energy/api/2.0/my/main/current%7BAuthorization=Basic%20bWFXXXXXXXXXXXXXXXXXXZGVu%7DXXXX
Diese in Firefox kopiert. Der macht aus der geschweiften Klammer { ein %20 und aus } ein %7D
Die Antwort vom powerfox Server ist:
Es wurde keine HTTP-Ressource gefunden, die mit dem Anforderungs-URI XXXXXX übereinstimmt gefunden.

Komisch. Gehören da irgendwo Lehrzeichen rein oder stimmt was mit den { } Klammern nicht?
Eine HomeMatic CCU3; Wallbox go-eCharger, Poweropti, Jalousie-Aktoren mit Rohrmotoren; 2 Garagentorantriebe mit 4-fach Schaltaktor; HM-Zwischenstecker für Drucker u. vieles mehr.

Benutzeravatar
audi2010
Beiträge: 223
Registriert: 18.05.2015, 09:36
Wohnort: Friedberg(Hessen)
Hat sich bedankt: 171 Mal
Danksagung erhalten: 11 Mal

Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von audi2010 » 25.11.2020, 11:43

Ich lese da nicht mit der Codierung sondern im Script, wie unten beschrieben im Klartext aus. -> in IP-Symcon per PHP-Script
Gebe ich dies im Browser direkt ein, habe ich das gleiche Verhalten.
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Viele Grüße
Rainer

BernhardB
Beiträge: 7
Registriert: 15.11.2010, 17:35
Wohnort: 91207 Lauf bei Nürnberg
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von BernhardB » 26.11.2020, 10:23

Habe eine Anfrage an den IT-Service von Powerfox gestellt und promt :-) fogende Antwort erhalten:

*********
Das Problem ist, dass der Server die Authorization nicht als Teil der Url zulässt, sondern ihn als Header-Feld des Http-Requests erwartet. Bei openHAB sieht dies nur aufgrund der openHAB-eigenen Syntax so aus.

Haben Sie in Ihrer Homematic-Umgebung irgendwie die Möglichkeit eine Art "addHeader"-Methode für Ihren Http-Client aufzurufen?
Dieser können Sie als Key "Authorization" und als Wert "Basic: <IHRE_BASE64_HIER>" mitgeben.
**********

Es klingt für mich so, dass das Ganze als Homematic CCU Script programmiert, wahrscheinlich rel. einfach funktionieren könnte. Leider sind meine Script-Fähigkeiten fast nur auf Copy>Paste begrenzt. Da müsste mal ein Profi ran.

Script z.B. alle 10s Starten>>Http-Request mit Header-Feld mit CuxxD abschicken>>aus JSON Antwort "Watt" auslesen und in HM Variable schreiben.

Powerfox währe gerne an einer Lösung interessiert um deren Homematic Dokumentation zu erweitern.

Viele Grüße an euch alle,
BernhardB

PS: Ich werde jetzt mal eine Anfrage stellen, ob so ein JSON-Request nicht auch innerhalb des lokalen Netzwerks, ohne Cloud Umweg über die IP des Sensors angefordert werden kann.
So ungefähr:
http://192.168.XXX.XX/api/2.0/my/main/current
Bei meinem e-Charger funktionieren solche URL´s mit IP vorne.
Eine HomeMatic CCU3; Wallbox go-eCharger, Poweropti, Jalousie-Aktoren mit Rohrmotoren; 2 Garagentorantriebe mit 4-fach Schaltaktor; HM-Zwischenstecker für Drucker u. vieles mehr.

BernhardB
Beiträge: 7
Registriert: 15.11.2010, 17:35
Wohnort: 91207 Lauf bei Nürnberg
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben

Beitrag von BernhardB » 29.11.2020, 20:10

So jetzt hab ich es hinbekommen :D
Ich habe die "geniale" Zusatzsoftware "RedMatic" auf meiner CCU3 installiert. Dort dann folgenden "Flow" zusammengesetzt:
Node-RED1.gif
Mit + ein neues Arbeitsblatt erzeugen.
"Nodes" der Reihe nach rüberziehen und mit Linien verbinden, Werteingaben nach Doppelklick darauf:

"inject" wird timestamp: Unten Wiederholen > Intervall > z.B. alle 15s
"http request" wird HTTP-Anorderung: GET > https://backend.powerfox.energy/api/2.0/my/main/current > basic authentication > email > Kennwort > Rückgabe eine UTF-8-Zeichenfolge
"json": Konvertieren zwischen JSON... u. Objekt > msg. payload
"change" wird setze msg.payload: neben Festlegen > msg.payload > bis > Dropdown unten J: Ausdruck wählen > daneben payload.Watt
"function": In Zeile 1: msg.payload = parseFloat((msg.payload * -1).toFixed(2)); in Zeile 2: return msg;
"sysvar" wird Leistung-PV-Ueberschuss: CCU localhoast > Name "Dropdown listet alle HM-Systemvariablen" Leistung-PV-Ueberschuss > Emit changed values only anhakeln.
Wobei diese Systemvariable vor Node-RED Start angelegt sein sollte.
"debug" wird msg.payload Ziel Debugfenster
Dann oben rechts "deploy" klicken und rechts neben "info" diesen kleinen Käfer auswählen. Er öffnet das Debug Fenster in dem die Antworten angezeigt werden.

Der Node "-2000" kann zum eingeben eines Testwertes mit "function" verbunden werden um zu simulieren.
Nach jeder Änderung immer schön "deploy" klicken, es speichert das Arbeitsblatt und erstellt das eigentliche Programm.
Der "timestamp" gibt sozusagen die Startschüsse.

Übrigens, der Grund für die leihenhafte Beschreibung ist, ich habe selbst keine Ahnung vom "schripten" und auch von Node-RED noch nicht :?
Sozusagen von einem "Dummi" für (??Dummies??) :wink:
Eine HomeMatic CCU3; Wallbox go-eCharger, Poweropti, Jalousie-Aktoren mit Rohrmotoren; 2 Garagentorantriebe mit 4-fach Schaltaktor; HM-Zwischenstecker für Drucker u. vieles mehr.

Antworten

Zurück zu „HomeMatic allgemein“