©2021 Axel (alias SparkyMaster)
Alle Rechte vorbehalten!
Aktualisierung:
Für die autom. Aktualisierung des Schaltstatus benötigen wir 1en Timer ... (Bedingung: Wenn ...)
... der das Programm zur Aktualisierung triggert.
Alternativ kann die Aktualisierung in "Bedingung: WENN ..." auch durch das Homematic-interne-Zeitmodul ausgelöst werden.
Das Programm:
Das Skript: (Aktivität: Dann ...)
! Skript V1.0.2 zur Einbindung Shelly GAS mit Originalfirmware in Homematic (c) 2021 by SparkyMaster
! angepasstes Originalskript by @66er
! entwickelt und getestet auf Shelly-Motion-Firmware "1.9.0"
! Versionsdatum: 23.01.2021
! Jede Funktion optional aktivierbar, automatische Homematic-SV-Erstellung, Onlinestatus-Prüfung integriert
! 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 die Autoren.
! Die Autoren haftet nicht für eventuelle Folgen der Nutzung auf der Homematic-Zentrale des Nutzers.
! Das Skript ist ausführlich getestet und sollte problemlos funktionieren.
!Standort: HWR (kann angepasst werden)
!**** SETUP ******** SETUP ******** SETUP ******** SETUP ***
! ACHTUNG: Beim Anpassen der Adressen keine "" löschen!
! Setup Shelly GAS
var shgip = "192.168.178.44" ; ! IP des Shelly GAS anpassen
var shgname = "Shelly_GAS" ; ! Name des Shelly GAS anpassen (daraus werden ggf. automatisch weitere Variablennamen erzeugt
var shgrl = "N" ; ! Ist Resrict Login im Shelly aktiv, dann auf "J" setzen
var shgbn = "DeinBenutzername" ; ! Ist Restrict login auf J, dann Benutzername anpassen
var shgpw = "DeinPasswort" ; ! Ist Restrict login auf J, dann Passwort anpassen, keine Sonderzeichen
! Setup der CUxD-GERÄTE
var execshg = "CUxD.CUX2801003:3"; ! Adresse und Kanal des CUxD-Exec-Device angeben
var shgcuxd = "CUxD.CUX4000010:1" ; ! Adresse und Kanal des CUxD-Device für den Shelly GAS anpassen
! Setup Online-Status
var shgonl = "J" ; ! Variable für Onlinezustandsüberwachung prüfen, ggf anlegen, falls nicht gewünscht, auf "N" setzen
var shgonlp = "J" ; ! Onlineprüfung durchführen, falls nicht gewünscht, auf "N" setzen
! Setup Aktualisierungsumfang der Werte des Shelly GAS
var shgppm = "J" ; ! Status für Gaskonzentration auswerten, wenn nicht gewünscht auf "N" setzen
var shgal = "J" ; ! Status für Alarm auswerten, 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 (shgonl == "J") {
var shgonln = shgname + "_Online-Status" ;
WriteLine(shgonln) ;
string sName= (""#shgonln#""); ! Onlinestatus
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript Shelly GAS");
svObj.ValueUnit("");
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtBinary);
svObj.ValueSubType(istBool);
svObj.ValueName0("Offline");
svObj.ValueName1("Online");!SCN=SHG010SM
svObj.State (true);
dom.RTUpdate(0);
}
}
! Onlineabfrage und setzen des Status
if ( shgonlp == "J" ) {
string stderr;
string stdout;
integer Status;
system.Exec("ping -c 1 '"#shgip#"'", &stdout, &stderr);
Status = stdout.Find("ms");
WriteLine(Status);
if (((shgonl ) == "J" ) && ((Status) == -1)) {
WriteLine("Shelly GAS ist offline");
dom.GetObject (""#shgonln#"").State(0);
quit; ! Programmabbruch bei Shelly offline
}
if ((shgonl ) == "J" ) {
dom.GetObject (""#shgonln#"").State(1);
WriteLine("Shelly GAS ist online");
}
}
!***********************************************************
! Abfrage
var url = "http://" + shgip + "/status" ;
WriteLine(url);
if (shgrl == "J") {
var url = "http://" + shgbn + ":" + shgpw + "@" +shgip + "/status" ;
WriteLine(url);
}
dom.GetObject(""#execshg#".CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject(""#execshg#".CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject(""#execshg#".CMD_RETS").State();
dom.GetObject(""#execshg#".CMD_SETS").State("0");
WriteLine(Antwort);
!**********************************************************
!********************** Auswertungen
!Gaskonzentration in ppm
if (shgppm == "J") {
string shgppmn = shgname + "_Konzentration";
string sName= (""#shgppmn#"");
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript Shelly GAS");
svObj.ValueUnit("ppm");
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.ValueMin(0);
svObj.ValueMax(65000);
svObj.State (0); ! SCN=SHG010SM
dom.RTUpdate(0);
}
string t = Antwort;
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"concentration"')) {
string e = (s.StrValueByIndex (":",2).RTrim (","));
WriteLine(e);
}
}
!ppm-Angabe in der Systemvariablen setzen
dom.GetObject(""#shgppmn#"").State(e);
WriteLine("Konzentration in ppm geschrieben.");
}
! Alarm
if (shgal == "J") {
string shgaln = shgname + "_Alarm";
WriteLine(shgaln);
string sName= (""#shgaln#""); ! Alarm
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript Shelly GAS");
svObj.ValueUnit("");
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtInteger);
svObj.ValueSubType(istEnum);
svObj.ValueList("none;mild;heavy;test");
svObj.State (0); !. Zustand der Sysvar nach dem Anlegen
dom.RTUpdate(0); !SCN=SHG100SM
}
! Abfrage Alarm
string lu = Antwort;
string part; string code;string list;integer collect = 1;
foreach (part, lu.Split("{")){
collect = part.Find('"alarm_state"');
if (collect>-1){
code = ((part.StrValueByIndex(",",2)).StrValueByIndex(":",1));
code = code.Substr(1, code.Length()-3);
list = list#code#"/";
}
}
WriteLine(list);
real wert;
if(list == "test/") {
wert = 3;
}
if(list == "heavy/") {
wert = 2;
}
if(list == "mild/") {
wert = 1;
}
if(list == "none/") {
wert = 0;
}
dom.GetObject(""#shgaln#"").State(wert);
}
WriteLine("Skript V1.0.2 beendet");
!Ende Skript
Alles anzeigen
Gemäß den Hinweisen das Skript anpassen!
Viel Erfolg!
___________________________________________________________
Die Anleitung inkl. der Skripte und Bilder unterliegt dem Urheberrecht. Wer gegen das Urheberrecht verstößt (z.B. Bilder oder Texte unerlaubt kopiert und auf anderen Webseiten publiziert), macht sich gem. §§ 106 ff UrhG strafbar, kann zudem kostenpflichtig abgemahnt werden und muss Schadensersatz leisten (§ 97 UrhG).
©2021 Axel (alias SparkyMaster)
Alle Rechte vorbehalten