Hallo und Guten Abend,
ich möchte meinen 1PM gerne in Homematic einbinden.
Angelehnt an den Thread V3.2.2
Beitrag
Shelly 1 in Homematic einbinden - mit der Originalfirmware - Kopplung V2
©2020-2021 Stefan K. (alias 66er) - ausführlicher Hinweis dazu am Ende der Anleitung
Alle Rechte vorbehalten!
Funktion getestet mit Firmware-Version(en):
1.9.0 und 1.10.4
Hallo zusammen,
heute kann ich Euch Version 2 der Kopplung Shelly1 in Homematic präsentieren.
Warum eine 2. Version
Nun,
Alle Rechte vorbehalten!
Funktion getestet mit Firmware-Version(en):
1.9.0 und 1.10.4
Hallo zusammen,
heute kann ich Euch Version 2 der Kopplung Shelly1 in Homematic präsentieren.
Warum eine 2. Version
Nun,
- Shelly1 ist, so unsere Umfrage, der meistgekoppelte Shelly
- Shelly1 war meine erste Kopplung überhaupt. Inzwischen habe ich neue Möglichkeiten und Erkenntnisse, die in diese Kopplung eingeflossen sind
- Dadurch wird
66er
Mein 1PM hat die Adresse CUX4000010:1 mit der IP 192.168.112.17
system.exec hat die CUX2801001
Schalten per Homematic sowie im Shelly funktioniert.
Wenn ich das Script ausführe aktualisiert sich zwar die Variable, aber erkennt den Zustand nicht.
Zeigt immer nur Online an.
Es geht lediglich um das Status Script.
Code
! Skript V3.2.2 zur Statusaktualisierung Shelly1 mit Originalfirmware (c) 2020-2021 by 66er (alias Stefan K.)
! Publiziert und Updates auf https://smarthome-forum.eu/forum/index.php?board/145-homematic/
! entwickelt und getestet auf Shelly1-Firmware 1.9.0 und 1.10.4
! Versionsdatum: 09.12.2021
! jede Funktion optional aktivierbar, automatische Homematic-SV-Erstellung, Onlinestatus-Prüfung integriert
! NEU: Variable wird dem CUxD-Schaltlkanal autom. zugeordnet
! 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: WeFi (kann angepasst werden)
!**** SETUP ******** SETUP ******** SETUP ******** SETUP ***
! ACHTUNG: Beim Anpassen der Adressen keine "" löschen!
! Setup Shelly1
var sh1ip = "192.168.112.17" ; ! IP des Shelly1 anpassen
var sh1name = "Shelly_PV" ; ! Name des Shelly1 anpassen (daraus werden ggf. automatisch weitere Variablennamen erzeugt
var sh1rl = "N" ; ! Ist Resrict Login im Shelly aktiv, dann auf "J" setzen
var sh1bn = "DeinBenutzername" ; ! Ist Restrict login auf J, dann Benutzername anpassen
var sh1pw = "DeinPasswort" ; ! Ist Restrict login auf J, dann Passwort anpassen, keine Sonderzeichen
! Setup der CUxD-GERÄTE
var execsh1 = "CUxD.CUX2801001:1"; ! Adresse und Kanal des CUxD-Exec-Device angeben
var sh1cuxd = "CUxD.CUX4000010:1" ; ! Adresse und Kanal des CUxD-Device für den Shelly1 anpassen
! Setup Online-Status
var sh1onl = "J" ; ! Variable für Onlinezustandsüberwachung, falls nicht gewünscht, auf "N" setzen""
! Setup Aktualisierungsumfang
var sh1stat = "J" ; ! Status EIN oder AUS wird durch das Skript aktualisiert, wenn nicht gewünscht auf "N" setzen
!****ENDE SETUP ********ENDE SETUP ********ENDE SETUP ******
!*****Ab hier NICHTS MEHR ÄNDERN *****
! Variable für Onlinestatus prüfen,ggf.anlegen
if (sh1onl == "J") {
var sh1onln = "Online-Status_" + sh1name ;
WriteLine(sh1onln) ;
string sName= ""#sh1onln#""; ! Onlinestatus
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript Shelly1");
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 = SH132266R
dom.RTUpdate(0);
object oChan= channels.Get (""#sh1name#"");
object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (""#sh1onln#"");
oChan.DPs().Add (oSys);
oSys.Channel (oChan.ID() );
}
}
! Onlineabfrage und setzen des Status
string stderr;
string stdout;
integer Status;
system.Exec("ping -c 1 '"#sh1ip#"'", &stdout, &stderr);
Status = stdout.Find("ms");
!WriteLine(Status);
if (((sh1onl ) == "J" ) && ((Status) == -1)) {
WriteLine("Shelly1 ist offline");
dom.GetObject (""#sh1onln#"").State(0);
quit; ! Programmabbruch bei Shelly offline
}
if ((sh1onl ) == "J" ) {
dom.GetObject (""#sh1onln#"").State(1);
WriteLine("Shelly1 ist online");
}
!***********************************************************
! Abfrage
if (sh1stat == "J"){
var url = "http://" + sh1ip + "/relay/0/status" ;
WriteLine(url);
if (sh1rl == "J") {
var url = "http://" + sh1bn + ":" + sh1pw + "@" +sh1ip + "/relay/0/status" ;
WriteLine(url);
}
dom.GetObject(""#execsh1#".CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject(""#execsh1#".CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject(""#execsh1#".CMD_RETS").State();
dom.GetObject(""#execsh1#".CMD_SETS").State("0");
WriteLine(Antwort);
string word = "ison:";
integer word_laenge = word.Length();
integer word_position = Antwort.Find(word);
string daten = Antwort.Substr((word_position + word_laenge +4), 5);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -3));
Antwort = "true";
WriteLine(daten);
var zustand = dom.GetObject(""#sh1cuxd#".STATE").State();
WriteLine(zustand);
if ((daten == "true,") && (zustand != true) )
{dom.GetObject(""#sh1cuxd#".SET_STATE").State(1);
WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject(""#sh1cuxd#".SET_STATE").State(0);
WriteLine("if off");
}
}
daten = "0";
WriteLine("Skript beendet");
!Ende Skript
Alles anzeigen
Folgende Ausgabe kommt beim Testen: