Hallo zusammen,
ich komme leider mit meiner Einbindung eines Shelly Plus 1PM in Homematic nicht weiter:
Ich habe nach der Anleitung in dem Forum den Shelly eingebunden:
- CUx-D Exec und Schalter erstellt
- Shelly Webhooks erstellt (Login+PW der Homematic eingebunden)
- Variablen wurden über das Skript erstellt, Werte werden beim "Skript-Test" einmalig übergeben, allerdings aktualisieren sich die Werte nicht, wie in der Zeitsteuerung angegeben
Muss ich hier einen zusätzlichen Timer im CUx-D erstellen
Anbei habe ich den verwendeten Quellcode/Screenshots über die erstellten Daten angefügt, ich hoffe es fehlt nichts dabei.
Evtl könnt Ihr mir ja etwas auf die Sprünge helfen.
Herzlichen Dank schon einmal!!
Grüße Markus
! Skript V2.1.2 zur Statusaktualisierung ShellyPlus1PM mit Originalfirmware (c)2021-2022 by 66er (alias Stefan K.)
! Publiziert und Updates auf https://smarthome-forum.eu/forum/index.php?board/145-homematic/
! entwickelt und getestet auf ShellyPlus1PM-Firmware 0.9.1, 0.9.2beta2 und 0.10.1
! Versionsdatum:28.12.2021 : Anpassung an Firmware >= 0.9.2
! automatische Homematic-SV-Erstellung inkl Kanalzuordnung, Onlinestatus-Prüfung integriert (optional)
! Restrict Login optional
! BITTE BEACHTEN:
! Dieses Skript legt ggf. selbstständig zusätzliche Systemvariablen auf Deiner Homematic-Zentrale an!
! Das vermeidet Inkonsistenzen und eine temporäre Blockade der CCU durch das Skript.
! Ausserdem erspart es Dir das manuelle Anlegen benötigter Systemvariablen.
! Wer das nicht möchte, kann dieses Skript leider nicht nutzen!
! Die Nutzung des Skriptes erfolgt auf eigenes Risiko.
! Aus der Nutzung entsteht kein Rechtsanspruch auf Suppport oder Fehlerbeseitigung durch den Autor.
! Der Autor haftet nicht für eventuelle Folgen der Nutzung auf der Homematic-Zentrale des Nutzers.
! Das Skript ist ausführlich getestet und sollte problemlos funktionieren.
!Raumbezeichnung: Test (kann angepasst werden)
!**** SETUP ******** SETUP ******** SETUP ******** SETUP ***
! ACHTUNG: Beim Anpassen der Adressen keine "" löschen!
! Setup ShellyPlus 1PM
var shp1ip = "192.168.0.23" ; ! IP des ShellyPlus1PM anpassen
var shp1name = "VG Shelly Schalter" ; ! CUxD-Gerätenamen anpassen (daraus werden ggf. automatisch weitere Variablennamen erzeugt
! Restrict Login
var shp1rl = "N" ; ! Ist Resrict Login im Shelly aktiv, dann auf "J" setzen
var shp1bn = "DeinBenutzername" ; ! Ist Restrict login auf J, dann Benutzername anpassen
var shp1pw = "DeinPasswort" ; ! Ist Restrict login auf J, dann Passwort anpassen, keine Sonderzeichen
! Setup der CUxD-GERÄTE
var execshp1 = "CUxD.CUX2801005:1"; ! Adresse und Kanal des CUxD-Exec-Device angeben
var shp1cuxd = "CUxD.CUX4000001:1" ; ! Adresse des CUxD-Device für den ShellyPlus1PM anpassen
! Setup Online-Status
var shp1onl = "J" ; ! Variable für Onlinezustandsüberwachung, falls nicht gewünscht, auf "N" setzen""
! Setup Aktualisierungs- und Anzeigeumfang
var shp1a = "J" ; ! Schaltstatus aktualisieren, wenn nicht gewünscht auf "N" setzen
var shpl1p = "J" ; ! Verbrauch aktualisieren, wenn nicht gewünscht auf "N" setzen
!****ENDE SETUP ********ENDE SETUP ********ENDE SETUP ******
!*****Ab hier NICHTS MEHR ÄNDERN *****
! *** Variable für Leistung prüfen, ggf. anlegen
if (shpl1p == "J" ) {
var shpl1pk1 = shp1name + "_Leistung" ;
!WriteLine(shpl1pk1) ;
string sName= ""#shpl1pk1#"";
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript ShellyPlus1PM");
svObj.ValueUnit("W");
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.ValueMin(0);
svObj.ValueMax(3800);
svObj.State (0);!SCNR = SHP1PM21166R
dom.RTUpdate(0);
object oChan= channels.Get (""#shp1name#"");
object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (""#shpl1pk1#"");
oChan.DPs().Add (oSys);
oSys.Channel (oChan.ID() );
}
}
! Variable für Onlinestatus prüfen,ggf.anlegen
if (shp1onl == "J") {
var shp1onln = "Online-Status_" + shp1name ;
!WriteLine(shp1onln) ;
string sName= ""#shp1onln#""; ! Onlinestatus
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript ShellyPlus1PM");
svObj.ValueUnit("");
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtBinary);
svObj.ValueSubType(istBool);
svObj.ValueName0("Offline");
svObj.ValueName1("Online");
svObj.State(true);!SCR = SHP1PM21166R
dom.RTUpdate(0);
object oChan= channels.Get (""#shp1name#"");
object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (""#shp1onln#"");
oChan.DPs().Add (oSys);
oSys.Channel (oChan.ID() );
}
}
! Onlineabfrage und setzen des Status
string stderr;
string stdout;
integer Status;
system.Exec("ping -c 1 '"#shp1ip#"'", &stdout, &stderr);
Status = stdout.Find("ms");
WriteLine(Status);
if (((shp1onl ) == "J" ) && ((Status) == -1)) {
WriteLine("ShellyPlus1PM ist offline");
dom.GetObject (""#shp1onln#"").State(0);
quit; ! Programmabbruch bei Shelly offline
}
if ((shp1onl ) == "J" ) {
dom.GetObject (""#shp1onln#"").State(1);
WriteLine("ShellyPlus1PM ist online");
}
! Statusabfrage
! url ohne RL
var url = shp1ip + "/rpc/Shelly.GetStatus";
WriteLine(url);
! url mit RL
if ( shp1rl == "J") {
var url = shp1bn + ":" + shp1pw +"@" +shp1ip + "/rpc/Shelly.GetStatus";
WriteLine(url);
}
!****Abfrage des ShellyPlus1PM *****
dom.GetObject(""#execshp1#".CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject(""#execshp1#".CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject(""#execshp1#".CMD_RETS").State();
string t = dom.GetObject(""#execshp1#".CMD_RETS").State();
dom.GetObject(""#execshp1 #".CMD_SETS").State("0");
WriteLine("Antwortstring: " + Antwort);
string output = Antwort;
string part; string code;string slist;integer collect = -1;
foreach (part,output.Split("switch:0")){
collect = part.Find("output");
if (collect>-1){
code = ((part.StrValueByIndex(",",1)).StrValueByIndex(":",1));
code = code.Substr(0, code.Length()-0);
slist = slist#code#"/";
}}
WriteLine(slist);
var out = slist.StrValueByIndex("/", 0);
!WriteLine(out);
if (out == "true") {
dom.GetObject(""#shp1cuxd#".SET_STATE").State(1);
!WriteLine("Bedingung EIN festgestellt");
}
if (out != "true") {
WriteLine("Bedingung AUS festgestellt");
dom.GetObject(""#shp1cuxd#".SET_STATE").State(0);
dom.GetObject(""#shpl1pk1#"").State(0);
WriteLine("Programm beendet, Shelly ist ausgeschaltet!");
quit;
}
! ***Auswertung Leistung
string output = Antwort;
!Testantwort ! FOLGEZEILE MUSS auskommentiert sein, wenn String vorhanden
string part; string code;string slist;integer collect = -1;
foreach (part, output.Split("switch0")){
collect = part.Find("apower");
if (collect>-1){
code = ((part.StrValueByIndex(",",2)).StrValueByIndex(":",1));
code = code.Substr(0, code.Length()-0);
slist = slist#code#"/";
}}
WriteLine(slist);
var lpk1 = slist.StrValueByIndex("/", 0);
if (shpl1p == "J") {
dom.GetObject(""#shpl1pk1#"").State(lpk1);
}
WriteLine("Skript beendet");
!ENDE SKRIPT
Alles anzeigen
102
ShellyPlus1PM ist online
192.168.0.23/rpc/Shelly.GetStatus
Antwortstring: {"ble":{},"cloud":{"connected":true},"input:0":{"id":0,"state":false},"mqtt":{"connected":false},"switch:0":{"id":0, "source":"init", "output":true, "apower":64.6, "voltage":233.0, "current":1.002, "aenergy":{"total":31490.971,"by_minute":[1051.457,1223.182,1380.997],"minute_ts":1664706955},"temperature":{"tC":47.1, "tF":116.9}},"sys":{"mac":"441793CE350C","restart_required":false,"time":"12:35","unixtime":1664706959,"uptime":1011367,"ram_size":235212,"ram_free":159060,"fs_size":458752,"fs_free":155648,"cfg_rev":18,"kvs_rev":1,"schedule_rev":0,"webhook_rev":8,"available_updates":{"beta":{"version":"0.11.2-beta1"}}},"wifi":{"sta_ip":"192.168.0.23","status":"got ip","ssid":"Sebblschorsch Haus","rssi":-56},"ws":{"connected":false}}
true/
64.6/
Skript beendet
Shelly_Homematic_Übersicht.jpg