IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
AudioSonic
Beiträge: 227
Registriert: 31.08.2014, 20:15

IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von AudioSonic » 04.03.2016, 00:46

Hallo Forum,

ich möchte euch kurz vorstellen, wie ihr die IP Steckdosenleiste mPower PRO (EU) in HM einbindet.
Prinzipiell sind auch die anderen Produkte der mpower Serie integrierbar, siehe https://www.ubnt.com/mfi/mpower/.

Ich habe die mPower PRO (EU) mit 6 Steckdosen und Ethernet + Wi-Fi.
Mit der Steckdosenleiste kann man z.B.
- einzelne Steckdosen über Homematic ein- und ausschalten
- aktuelle Spannung (V) an den Steckdosen auslesen
- aktuelle Leistung (W) an den Steckdosen auslesen
- Stromverbrauch (kWh) der einzelnen Steckdosen auslesen.
.....
- Watchdog funktion durch anpingen von Netzwerkgeräten ist auch noch integriert, uvm.

Möchte mich in dem Tutorial auf ein- und ausschalten, sowie auslesen der o.g. Messwerte beschränken.

für's Einschalten sind folgende zwei Skripte anzulegen, die im Abstand von 8 sec (=Erfahrungswert) auszulösen sind.
Voraussetzung ist zudem das CUxD installiert und eingerichtet ist.
IP der Leiste und Userdaten sind im Skript evtl anzupassen.

Login-Skript:

Code: Alles auswählen

!Login mit Userdaten an der Steckdosenleiste, eigene Daten hier eingeben:

string user_mpower = "ubnt"; ! User-Name der Steckdoesenleiste (ubnt ist Standard-User und kann übernommen werden)
string pw_mpower = "ubnt"; ! Passwort der Steckdoesenleiste (ubnt ist Standard-Passwort und kann übernommen werden)
string ip_mpower = "192.168.1.42"; ! IP der Steckdoesenleiste

dom.GetObject("CUxD.CUX2801001:11.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -X POST -d 'username="#user_mpower#"&password="#pw_mpower#"' -b 'AIROS_SESSIONID=01234567890123456789012345678901' "#ip_mpower#"/login.cgi");
Skript Steckdose 1 Einschalten

Code: Alles auswählen

string ip_mpower = "192.168.1.42"; ! IP der Steckdoesenleiste

dom.GetObject("CUxD.CUX2801001:11.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -X PUT -d output=1 -b 'AIROS_SESSIONID=01234567890123456789012345678901' "#ip_mpower#"/sensors/1");
oder Skript Steckdose 1 Ausschalten

Code: Alles auswählen

string ip_mpower = "192.168.1.42"; ! IP der Steckdoesenleiste

dom.GetObject("CUxD.CUX2801001:11.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -X PUT -d output=0 -b 'AIROS_SESSIONID=01234567890123456789012345678901' "#ip_mpower#"/sensors/1");
Login-Skript und Schaltskript sind dann anzulegen, z.B. als Reaktion auf Auslösung einer virtuellen Taste. Ganz wichtig, zwei seperate Skripte im Abstand von 8 sec anlegen, da sonst der Login nicht richtig funktioniert. Durch individuelle Tests kann evtl. auch ein Abstand von weniger als 8 sec ausreichen.
Um Steckdose 2-6 zu schalten ist jeweils die Zahl am Ende des Skripts anzupassen, also die 1 bei sensors/1.

Web-UI Programm:
Unbenannt.PNG
Unbenannt.PNG (15.03 KiB) 3246 mal betrachtet

Um die Messwerte der Steckdosenlsiete auszulesen sind wieder das Login-Skript und ein Auslesen-Skript notwendig.

Login-Skript:

Code: Alles auswählen

!Login mit Userdaten an der Steckdosenleiste, eigene Daten hier eingeben:

string user_mpower = "ubnt"; ! User-Name der Steckdoesenleiste (ubnt ist Standard-User und kann übernommen werden)
string pw_mpower = "ubnt"; ! Passwort der Steckdoesenleiste (ubnt ist Standard-Passwort und kann übernommen werden)
string ip_mpower = "192.168.1.42"; ! IP der Steckdoesenleiste

dom.GetObject("CUxD.CUX2801001:11.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -X POST -d 'username="#user_mpower#"&password="#pw_mpower#"' -b 'AIROS_SESSIONID=01234567890123456789012345678901' "#ip_mpower#"/login.cgi");
Auslesen-Skript:
am Beispiel von Spannung, Leistung, und Stromverbrauch für Steckdosen 1 und 2 - Erweiterung nach Bedarf möglich, analog JSON Rückgabeobjekt unten.
Dementsprechend sind vorher die Systemvariablen power1, power2, voltage1, voltage2, thismonth1 und thismonth2 als Zahl anzulegen.
Thismonth (kWh) ist ab Firmware 2.1.8 der Leiste verfübar. Update kann gemäß diesem Wiki http://www.fhemwiki.de/wiki/Ubiquit_mFi/mPower durchgeführt werden. Ich habe die aktuellste 2.1.11 installiert

Code: Alles auswählen

!Skript gilt für Firmwareversion 2.1.11

string ip_mpower = "192.168.1.42"; ! IP der Steckdoesenleiste eingeben

!Sensors aufrufen
dom.GetObject("CUxD.CUX2801001:10.CMD_SETS").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -b 'AIROS_SESSIONID=01234567890123456789012345678901' "#ip_mpower#"/sensors");
dom.GetObject("CUxD.CUX2801001:10.CMD_QUERY_RET").State(1);
string sensors = dom.GetObject("CUxD.CUX2801001:10.CMD_RETS").State();
!dom.GetObject("sensors").State(sensors);

!Werte auslesen

!Steckdose 1
string power_1 = sensors.StrValueByIndex(",", 2);
string word = "power";
integer word_laenge = word.Length();
integer word_position = power_1.Find(word);
string daten = power_1.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("power1").State(zahl);

string voltage_1 = sensors.StrValueByIndex(",", 5);
string word = "voltage";
integer word_laenge = word.Length();
integer word_position = voltage_1.Find(word);
string daten = voltage_1.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("voltage1").State(zahl);

string thismonth_1 = sensors.StrValueByIndex(",", 9);
string word = "thismonth";
integer word_laenge = word.Length();
integer word_position = thismonth_1.Find(word);
string daten = thismonth_1.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("thismonth1").State(zahl);

!Steckdose 2
string power_2 = sensors.StrValueByIndex(",", 12);
string word = "power";
integer word_laenge = word.Length();
integer word_position = power_2.Find(word);
string daten = power_2.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("power2").State(zahl);

string voltage_2 = sensors.StrValueByIndex(",", 15);
string word = "voltage";
integer word_laenge = word.Length();
integer word_position = voltage_2.Find(word);
string daten = voltage_2.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("voltage2").State(zahl);

string thismonth_2 = sensors.StrValueByIndex(",", 19);
string word = "thismonth";
integer word_laenge = word.Length();
integer word_position = thismonth_2.Find(word);
string daten = thismonth_2.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("thismonth2").State(zahl);
beide Skripte wieder im Abstand von 8 sec ausführen, im DANN-Zweig des Zeitmoduls oder CUxd-Timers (Intervall z.B. 181sec (=Primzahl :) )), analog Screenshot oben.

Für die Erweiterung des Auslese-Skripts um Steckdosen 3-6, oder andere Paramter, ist es hilfreich, wenn man das ganze JSON Rückgabeobjekt auf den cURL von oben kennt. Für meine Leiste sieht das nach 2 Wochen Nutzung so aus:

Code: Alles auswählen

{"sensors":[{"port":1,"output":1,"power":0.0,"enabled":0,"current":0.0,"voltage":234.884034633,"powerfactor":0.0,"relay":1,"lock":0,"thismonth":3031},{"port":2,"output":1,"power":0.0,"enabled":0,"current":0.0,"voltage":234.925451278,"powerfactor":0.0,"relay":1,"lock":0,"thismonth":4514},{"port":3,"output":0,"power":0.0,"enabled":0,"current":0.0,"voltage":0.0,"powerfactor":0.0,"relay":0,"lock":0,"thismonth":0},{"port":4,"output":0,"power":0.0,"enabled":0,"current":0.0,"voltage":0.0,"powerfactor":0.0,"relay":0,"lock":0,"thismonth":0},{"port":5,"output":0,"power":0.0,"enabled":0,"current":0.0,"voltage":0.0,"powerfactor":0.0,"relay":0,"lock":0,"thismonth":0},{"port":6,"output":0,"power":0.0,"enabled":0,"current":0.0,"voltage":0.0,"powerfactor":0.0,"relay":0,"lock":0,"thismonth":0}],"status":"success"}
Nach einem Monat Nutzung kommt noch der Block "prevmonth" (vor thismonth) hinzukommt und die Blöcke müssen neu gezählt werden, s. Hinweise weiter unten.

Durch Anlegen einer Systemvariablen "sensors" (Zeichenkette) in der CCU und dem Entfernen des !-Zeichens in der Zeile !dom.GetObject("sensors").State(sensors); des Auslese-Skripts könnt ihr eure eigene Rückgabe ansehen und das Auslese-Skript entsprechend anpassen. Dazu Einfach die "Block-Zahl" im Befehl StrValueByIndex(",", 15); (Beispiel) usw. entsprechend anpassen. Ein Block geht jeweils bis zum nächsten Komma und es wird bei 0 zu zählen angefangen.

Hinweise:
- Uhrzeit/Datum müssen bei der Erstinbetriebnahme korrekt eingestellt werden
- Bevor man das Script zum Auslesen anwendet die Dosen mit einem Verbraucher ein paar Stunden laufen lassen, damit der Wert "thismonth" in der Dose aktiviert wird.
- die Verbrauchswerte von "thismonth" im JSON und der WEBUI der Steckdosenleiste unterscheiden sich. Die Werte (kWh) in der WEBUI scheinen plausibel zu sein. Ob die Werte im JSON falsch sind, oder nur in einer anderen Einheit dargestellt sind ist derzeit noch ungeklärt.
- der Wert "prevmonth" erscheint erst nach einem Monat Nutzungsdauer. Das Ausleseskript, d.h. die "Blockzahlen", müssen demnach nach einem Monat angepasst werden. Für das Bsp. von oben wie folgt:

Code: Alles auswählen

!Messwerte auslesen                                                    .

!Skript gilt für Firmwareversion 2.1.11

string ip_mpower = "192.168.1.42"; ! IP der Steckdoesenleiste eingeben

!Sensors aufrufen
dom.GetObject("CUxD.CUX2801001:10.CMD_SETS").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -b 'AIROS_SESSIONID=01234567890123456789012345678901' "#ip_mpower#"/sensors");
dom.GetObject("CUxD.CUX2801001:10.CMD_QUERY_RET").State(1);
string sensors = dom.GetObject("CUxD.CUX2801001:10.CMD_RETS").State();
dom.GetObject("sensors").State(sensors);

!Werte auslesen

!Steckdose 1
string power_1 = sensors.StrValueByIndex(",", 2);
string word = "power";
integer word_laenge = word.Length();
integer word_position = power_1.Find(word);
string daten = power_1.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("power1").State(zahl);

string voltage_1 = sensors.StrValueByIndex(",", 5);
string word = "voltage";
integer word_laenge = word.Length();
integer word_position = voltage_1.Find(word);
string daten = voltage_1.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("voltage1").State(zahl);

string thismonth_1 = sensors.StrValueByIndex(",", 10);
string word = "thismonth";
integer word_laenge = word.Length();
integer word_position = thismonth_1.Find(word);
string daten = thismonth_1.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("thismonth1").State(zahl/3600);

!Steckdose 2
string power_2 = sensors.StrValueByIndex(",", 13);
string word = "power";
integer word_laenge = word.Length();
integer word_position = power_2.Find(word);
string daten = power_2.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("power2").State(zahl);

string voltage_2 = sensors.StrValueByIndex(",", 16);
string word = "voltage";
integer word_laenge = word.Length();
integer word_position = voltage_2.Find(word);
string daten = voltage_2.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("voltage2").State(zahl);

string thismonth_2 = sensors.StrValueByIndex(",", 21);
string word = "thismonth";
integer word_laenge = word.Length();
integer word_position = thismonth_2.Find(word);
string daten = thismonth_2.Substr((word_position + word_laenge +2), 4);
real zahl = daten.ToFloat();
dom.GetObject("thismonth2").State(zahl/3600);
die JSON Rückgabe sieht nach einem Monat Nutzung mit dem Parameter "prevmonth" dann so aus:

Code: Alles auswählen

{"sensors":[{"port":1,"output":1,"power":0.0,"enabled":0,"current":0.0,"voltage":233.978244781,"powerfactor":0.0,"relay":1,"lock":0,"prevmonth":27365,"thismonth":15859},{"port":2,"output":1,"power":0.0,"enabled":0,"current":0.0,"voltage":233.963060379,"powerfactor":0.0,"relay":1,"lock":0,"prevmonth":18748,"thismonth":4565},{"port":3,"output":0,"power":0.0,"enabled":0,"current":0.0,"voltage":0.0,"powerfactor":0.0,"relay":0,"lock":0,"prevmonth":0,"thismonth":0},{"port":4,"output":0,"power":0.0,"enabled":0,"current":0.0,"voltage":0.0,"powerfactor":0.0,"relay":0,"lock":0,"prevmonth":0,"thismonth":0},{"port":5,"output":0,"power":0.0,"enabled":0,"current":0.0,"voltage":0.0,"powerfactor":0.0,"relay":0,"lock":0,"prevmonth":0,"thismonth":0},{"port":6,"output":0,"power":0.0,"enabled":0,"current":0.0,"voltage":0.0,"powerfactor":0.0,"relay":0,"lock":0,"prevmonth":0,"thismonth":0}],"status":"success"}

Einsatzzweck der Steckdosenleiste:
Ich werwende die Steckdosenleiste um unsere Waschmaschine und Trockner "smarter" zu machen, also um Meldungen bei Beendigung von Wasch- und Trockervorgang auszugeben. Ich ersetze damit den Funk-Schaltaktor mit Leistungsmessung, mit dem ich im Keller immer wieder Empfangsprobleme hatte.

Viele Spass und Erfolg bei der Umsetzung :D !
Zuletzt geändert von AudioSonic am 25.07.2016, 13:58, insgesamt 3-mal geändert.

Benutzeravatar
AudioSonic
Beiträge: 227
Registriert: 31.08.2014, 20:15

Re: IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von AudioSonic » 11.03.2016, 07:41

Changelog:
- cURL Rückgabeobjekt hinzugefügt, was die Erweiterung/Anpassung des Auslese-Skripts vereinfacht

Geplant:
- Prüfung, ob Login vor jeder Auswerteschleife notwendig
- Skript für den Raspberry Pi, was zyklisch die Leiste ausliest und bei Änderung des Wertes, diesen an die CCU schickt (Entlastung CCU)
- Überprüfung der "Genauigkeit" von "thismonth". WebUI der Leiste und JSON differieren (?)

Input herzlich willkommen!

Stoni
Beiträge: 559
Registriert: 05.12.2013, 13:38

Re: IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von Stoni » 11.03.2016, 07:43

Das ist ne gute Sache. Ich habe schon länger überlegt, ob ich Waschmaschine und Trockner homematisiere, weiss nur nicht, ob ich das wirklich brauche. Aber ich würde dann aus Kostengründen auf deine Lösung zurückgreifen.


Gruß Stoni

Benutzeravatar
AudioSonic
Beiträge: 227
Registriert: 31.08.2014, 20:15

Re: IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von AudioSonic » 11.03.2016, 07:56

Ist eigentlich ein Must have, vor allem der Trockner weiß ja nie wann er denn wirklich fertig sein wird.... :mrgreen:

Stoni
Beiträge: 559
Registriert: 05.12.2013, 13:38

Re: IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von Stoni » 11.03.2016, 13:07

Bei uns piepen die Dinger, wenn sie fertig sind... Deswegen ist es eigentlich nicht erforderlich. Eigentlich... ;-)


Gruß Stoni

Benutzeravatar
AudioSonic
Beiträge: 227
Registriert: 31.08.2014, 20:15

Re: IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von AudioSonic » 11.03.2016, 13:25

Hehe ja. Bei uns auch, zumindest der Trockner. Aber beide Geräte stehen bei uns in der Waschküche unten im KG und bei geschlossener Tür hört man das Piepen oben nicht. Kommt eben immer auf die Bedingungen vor Ort an :D

Stoni
Beiträge: 559
Registriert: 05.12.2013, 13:38

Re: IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von Stoni » 11.03.2016, 13:26

Stehen bei uns auch im Keller...


Gruß Stoni

Stoni
Beiträge: 559
Registriert: 05.12.2013, 13:38

Re: IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von Stoni » 11.03.2016, 13:26

Wo hast du die Steckdose denn her? Von diesem vario-Store?


Gruß Stoni

Stoni
Beiträge: 559
Registriert: 05.12.2013, 13:38

IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von Stoni » 11.03.2016, 13:29

Mein Problem ist auch, dass ich eine Sprachausgabe ähnlich Home24 Mediaplayer für das iPad bräuchte, das hängt bei mir im Flur und Wohnzimmer. Ne Push aufs Handy meiner Frau kann ich vergessen, die lässt ihr Handy überall liegen...


Gruß Stoni

Benutzeravatar
AudioSonic
Beiträge: 227
Registriert: 31.08.2014, 20:15

Re: IP-Steckdosenleiste mPower PRO (EU) in HM einbinden

Beitrag von AudioSonic » 11.03.2016, 16:30

Varia-Store wollte ich erst, hab dann aber bei nem Ebucht Händler bestellt, war paar € günstiger 8)
Preisleistung der Steckdose ist top.
Des Weiteren Versuche ich halt alles soweit wie möglich per "Kabel" umzusetzen, Funk nur im Notfall. Da kam mir diese Leiste sehr gelegen.
WLAN hat die Leiste ja auch, habe ich aber nicht getestet.
Ansage aufm Tablet, das schreit ja quasi nach der homematisierung vom Wama und Trockner.... :!:

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“