Das Vorgehen ist grundsätzlich das gleiche wie in der Dokumentation s.o. beschrieben, Du bekommst jeweils ein JSON zurück geliefert, was Du dann einem Textfeld oder anderem Element zuordnen kannst. Eine Übersicht über alle verfügbaren Befehle findest Du in der API Dokumentation des Herstellers beschrieben.
Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Moderator: Co-Administratoren
-
- Beiträge: 6743
- Registriert: 22.05.2012, 08:40
- System: CCU
- Hat sich bedankt: 25 Mal
- Danksagung erhalten: 485 Mal
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Hast du dafür zufällig ein fertiges Script für mich, ich versuche es schon seit ein paar Tagen selbst allerdings wird mir immer nur der Bezug negativ angezeigt und bei Einspeisung is immer null...
- Baxxy
- Beiträge: 10832
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2227 Mal
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Zufällig lag da ein fast fertiges Script in meiner Script Datenbank.
(was jetzt komplett ist)
Kurzanleitung:
- 4 SysVars Typ Zahl anlegen (Summe-Bezug, Summe-Einspeisung, Leistung-Bezug, Leistung-Einspeisung).
Die Benamung ist egal, Namen im Script und in der WebUI müssen natürlich übereinstimmen - Das Script erstmal im "Script testen" mit den korrekten SysVar-Namen (ansonsten unverändert) ausführen.
Leistung-Bezug sollte 0W und Leistung-Einspeisung 159W sein
Die "Test_Ausgabe_Daten" auf einen positiven Watt-Wert ändern (z.B. 159)
Leistung-Bezug sollte 159W und Leistung-Einspeisung 0W sein - Passt alles dann im Script den "Test_Mode" auf false ändern und das Script nochmal ausführen.
Kommen die realen Daten korrekt an kann das Script im Programm genutzt werden.
Code: Alles auswählen
!- original Code by @Hattermann - https://homematic-forum.de/forum/viewtopic.php?f=19&t=62796&start=20#p695773
!- modified by @Baxxy
!- added "Summe Einspeisung wird in SysVar geschrieben" und Code-Optimierunge
!- added "Duale Ausgabe", Leistung Bezug/Einspeisung können in 2 SysVars geschrieben werden
!- https://homematic-forum.de/forum/viewtopic.php?f=19&t=62796&p=765144#p765144
!-------- Hier die eigenen Daten Eintragen------------------
string username = "Hans.Wurst@Mueller.de";
string password = "4711";
string poweropti_serial = "1234567890ab";
!-----------------------------------------------------------
! - Duale Ausgabe, bei true werden Leistung-Bezug und Leistung-Einspeisung in separate SysVars geschrieben werden
boolean Duale_Ausgabe = true; !- bei true duale Ausgabe in 2 SysVars, false = Ausgabe in eine SysVar
boolean Test_Mode = true; !- bei true wird mit Test-Ausgabe-Daten gearbeitet, im Regelbetrieb auf false setzen
string Test_Ausgabe_Daten = '{"Outdated":false,"Watt":-159,"Timestamp":1659294930,"A_Plus":220.065,"A_Minus":921.478}';
! - diese Systemvariablen als Typ: Zahl anlegen!
! - Benamung egal, aber die Namen in der WebUI und in der Scriptdeklaration müssen gleich sein
string SV_Leistung_Bezug = "PWRFox Leistung aktuell - Bezug";
string SV_Leistung_Einspeisung = "PWRFox Leistung aktuell - Einspeisung"; !- nur benötigt wenn "Duale_Ausgabe" auf true
string SV_Summe_Verbrauch = "PWRFox Verbrauch Summe - Bezug";
string SV_Summe_Einspeisung = "PWRFox Verbrauch Summe - Einspeisung";
!###########################################################
! - ab hier keine Änderungen nötig!
object oSV_Leistung_aktell = dom.GetObject (ID_SYSTEM_VARIABLES).Get (SV_Leistung_Bezug);
object oSV_Leistung_Einspeisung = dom.GetObject (ID_SYSTEM_VARIABLES).Get (SV_Leistung_Einspeisung);
object oSV_Summe_Verbrauch = dom.GetObject (ID_SYSTEM_VARIABLES).Get (SV_Summe_Verbrauch);
object oSV_Summe_Einspeisung = dom.GetObject (ID_SYSTEM_VARIABLES).Get (SV_Summe_Einspeisung);
string usernameEnc = username.UriEncode();
string passwordEnc = password.UriEncode();
string JSON_All; var stemp; integer StrLen; integer pos; real AktuelleLeistung; real VerbrauchSumme; real EinspeiseSumme; boolean dual_sv_out;
if (Duale_Ausgabe) {
if ( oSV_Leistung_aktell && oSV_Leistung_Einspeisung && oSV_Summe_Verbrauch && oSV_Summe_Einspeisung ) {
WriteLine("Modus - Duale SysVar Ausgabe: Alle SysVars vorhanden!");
dual_sv_out = true; }
else { WriteLine("Modus - Duale SysVar Ausgabe: Nicht alle SysVars vorhanden ...Script wird beendet!"); quit; }
}
else {
if ( oSV_Leistung_aktell && oSV_Summe_Verbrauch && oSV_Summe_Einspeisung ) {
WriteLine("Modus - Single SysVar Ausgabe: Alle SysVars vorhanden!"); }
else { WriteLine("Modus - Single SysVar Ausgabe: Nicht alle SysVars vorhanden ...Script wird beendet!"); quit; }
}
! Username, Password ausgeben um Strings selbst zu basteln
! WriteLine(usernameEnc);
! WriteLine(passwordEnc);
! Abfrage der Serial im Browser:
! https://%usernameEnc%:%passwordEnc%@backend.powerfox.energy/api/2.0/my/all/devices
string cmd = "curl -X GET \"https://" + usernameEnc + ":" + passwordEnc + "@backend.powerfox.energy/api/2.0/my/" + poweropti_serial + "/current\"";
! Daten der Geräte abrufen
!string Test_Ausgabe;
if (!Test_Mode) {
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
JSON_All = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State().ToLatin();
WriteLine("Ausgabe_Daten: "# JSON_All);
}
else {
!- Teststring nutzen
JSON_All = Test_Ausgabe_Daten;
StrLen = JSON_All.Length();
WriteLine("Test_Ausgabe_Daten: "# JSON_All);
}
! Leistung Lesen
pos = JSON_All.Find( "\"Watt\":" ) + 7;
JSON_All = JSON_All.Substr( pos, JSON_All.Length() - pos );
pos = JSON_All.Find( "," );
stemp = JSON_All.Substr( 0, pos );
! WriteLine( stemp );
AktuelleLeistung = stemp.ToFloat();
WriteLine("PwrFox Leistung: "# AktuelleLeistung.ToString(0) #"W");
if ( dual_sv_out ) {
if ( AktuelleLeistung > 0.0 ) {
oSV_Leistung_aktell.State(AktuelleLeistung);
oSV_Leistung_Einspeisung.State(0.0, 100);
WriteLine("PwrFox Leistung = Bezug: "# AktuelleLeistung.ToString(0) #"W");
}
elseif ( AktuelleLeistung < 0.0 ) {
oSV_Leistung_aktell.State(0.0);
oSV_Leistung_Einspeisung.State(AktuelleLeistung.Abs(), 100);
WriteLine("PwrFox Leistung = Einspeisung: "# AktuelleLeistung.Abs().ToString(0) #"W");
}
else { oSV_Leistung_aktell.State(0.0); oSV_Leistung_Einspeisung.State(0.0, 100);
WriteLine("PwrFox Leistung = Ausgeglichen: "# AktuelleLeistung.ToString(0) #"W");
}
}
else { oSV_Leistung_aktell.State(AktuelleLeistung); }
! Verbrauch lesen
pos = JSON_All.Find( "\"A_Plus\":" ) + 9;
JSON_All = JSON_All.Substr( pos, JSON_All.Length() - pos );
pos = JSON_All.Find( "," );
stemp = JSON_All.Substr( 0, pos );
! WriteLine( stemp );
VerbrauchSumme = stemp.ToFloat();
WriteLine("Summe Verbrauch: "# VerbrauchSumme);
! Einspeisung Summe lesen
pos = JSON_All.Find( "\"A_Minus\":" ) + 10;
JSON_All = JSON_All.Substr( pos, JSON_All.Length() - pos );
stemp = JSON_All.RTrim("}");
! WriteLine( stemp );
EinspeiseSumme = stemp.ToFloat();
WriteLine("Summe Einspeisung: "# EinspeiseSumme);
! Variablen setzen
oSV_Summe_Verbrauch.State(VerbrauchSumme, 200);
oSV_Summe_Einspeisung.State(EinspeiseSumme, 300);
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Hallo Zusammen,
bei mir geht der Skript nicht, was mache ich falsch ?
Habe ihn eingefügt und meine Daten ergänzt und alle Systemvariablen angelegt, die Daten werden immer mit 0 angezeigt.
mfg
Deman
bei mir geht der Skript nicht, was mache ich falsch ?
Habe ihn eingefügt und meine Daten ergänzt und alle Systemvariablen angelegt, die Daten werden immer mit 0 angezeigt.
mfg
Deman
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
besten Dank für das Script. Wie habt ihr es eingebunden (als Programm mit Zeitsteuerung)?
Ich würde gerne eine Steckdose schalten (wenn Einspeisung vorhanden ist) und wieder abschalten.
Ich würde gerne eine Steckdose schalten (wenn Einspeisung vorhanden ist) und wieder abschalten.
- Baxxy
- Beiträge: 10832
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2227 Mal
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Was anderes als zyklisches Triggern mit dem Zeitmodul bleibt dir doch nicht übrig.
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Dann lese ich alle paar Minuten die Daten aus und frage die Avriablen ab. Ist es so korrekt?
- Baxxy
- Beiträge: 10832
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2227 Mal
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Naja, nicht so wirklich.
"Nur prüfen" triggert kein Programm, "bei Änderung" wäre passender.
Dann solltest du über eine Hysterese nachdenken.
Schwankt dein Bezug um die 50W geht dein Aktor immer AN/AUS.
Beschreibe mal möglichst präzise wie das Szenario aussehen soll... mit allen Eventualitäten.
"Nur prüfen" triggert kein Programm, "bei Änderung" wäre passender.
Dann solltest du über eine Hysterese nachdenken.
Schwankt dein Bezug um die 50W geht dein Aktor immer AN/AUS.
Beschreibe mal möglichst präzise wie das Szenario aussehen soll... mit allen Eventualitäten.
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Danke für deine Unterstützung. Prüfen hatte ich so verstanden, dass er prüft, ob die Bedingung erfüllt ist. Ich möchte eine Steckdose einschalten, wenn die Einspeisung größer als 50 Watt ist. Fältt der Einspeisewert unter 50 Watt, soll die Steckdose wieder ausgeschaltet werden.
Die Variable Einspeisung setze ich alle 10 Minuten über ein anderes weiteres Script.
Die Variable Einspeisung setze ich alle 10 Minuten über ein anderes weiteres Script.
- Baxxy
- Beiträge: 10832
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2227 Mal
Re: Zählersensor Powerfox Poweropti Leistung auslesen und in Variable schreiben
Ok, wenn nur im 10Min Takt abgefragt wird dann passt das nach deinen Vorgaben so.
"nur prüfen" musst du trotzdem ändern in "bei Änderung".
"nur prüfen" musst du trotzdem ändern in "bei Änderung".
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen