- Offizieller Beitrag
©2019-2020 Stefan K. (alias 66er) - ausführlicher Hinweis dazu am Ende der Anleitung
Alle Rechte vorbehalten!
Funktion getestet mit Firmware-Version(en):
1.5.9 | 1.7.7 | 1.9.0
Hallo zusammen,
um den Shelly1 in Homematic einzubinden, braucht es keine Fremdfirmware, die man flashen muß.
Nachfolgend stelle ich nun meine Lösung mit der Originalfirmware vor:
Möglichkeiten:
- Einschalten
- Ausschalten
- Zustandsanzeige
- Aktualisierung in frei einstellbarem Intervall (wichtig, falls z.B. parallel per Shelly-App oder Shelly-Timer geschaltet wird)
- Nutzung in Programmen
- optionale Überwachung der Erreichbarkeit des Shelly im Netzwerk (Onlinestatus)
techn. Voraussetzungen:
-
kompatibel mit den Homematic-Systemen CCU2, CCU3, Charly, sowie allen Ablegern wie RaspberryMatic und piVCCU.
-
installiertes Addon CUxD in aktueller Version
(Das Wissen um den Umgang CUxD, wie z.B. Geräte anlegen, setze ich an dieser Stelle voraus, sonst "explodiert" diese Anleitung. Danke für's Verständnis.)
Umsetzung:
(Auf die Beschreibung des Anlegens der CUxD-Geräte verzichte ich an dieser Stelle, dafür gibt es die CUxD-Doku!)
Falls noch nicht vorhanden, bitte ein Gerät (28) System Exec anlegen! Darüber werden die Befehle abgesetzt.
Hier gibt es bei Bedarf eine Anleitung zum Anlegen des CUxD-Exec-Gerätes.
(Im CUxD-Exec selbst werden keine Eintragungen gemacht!)
Anlegen einer CUxD (40) 16-Kanal Universalsteuerung als Schalter:
Bildschirmfoto vom 2020-02-27 11-59-06.png
Einstellungen der einzelnen Kanäle (1 Kanal = 1 Shelly)
Einstellung für SWITCH|CMD_SHORT:
Einstellungen für SWITCH|CMD_LONG:
IP-Adresse des Shelly1 jeweils anpassen
Damit funktioniert schon mal das EIN- und AUS-Schalten.
Für die Statusaktualisierung benötigt man neben dem CUxD-Exec noch einen CUxD-Timer.
Nachtrag;
Darauf kann man seit Firmware 1.5.0 ggf. verzichten, wenn man zur Statusaktualisierung die "Actions" in den Shelly nutzt. Vor- und Nachteile wurden in diesem Thread erörtert.
Auch die Einrichtung der Actions ist dort beschrieben.
Ich empfehle die Nutzung der Actions.Diese gab es bei Veröffentlichung dieser Anleitung noch nicht!
Im Timer wird die gewünschte Aktualisierungzeit (hier 30 Sekunden) eingetragen:
Timer.JPG
Nun braucht es noch 1 Programm, welches den Schalterstatus zyklisch aktualisiert:
Programm Shelly aktualisieren.JPG
Die zusätzlichen WENN-Prüfungen sind natürlich optional und auf meinen Aufbau angepasst. Funktional muß nur die 1. WENN-Zeile im Programm stehen !
Und wenn das Programm unter Verwendung von "Timerevent" nicht triggert, so kann man stattdessen auch
"bei Timerget im Wertebereich kleiner1 - bei Änderung"
auslösen.
Fehlt noch das Skript:
!Skript V2.1 zur Statusaktualisierung Shelly1 mit Originalfirmware (c) 2020 by 66er (alias Stefan K.)
!Raumbezeichnung: WeFi (kann angepasst werden)
!**** SETUP ******** SETUP ******** SETUP ******** SETUP ***
! ACHTUNG: Beim Anpassen der Adressen keine "" löschen!
! Setup der CUxD-GERÄTE
var url = "http://192.168.1.126/relay/0/status"; ! IP-Adresse des Shelly 1 anpassen
var execo = "CUxD.CUX2801001:2"; ! Adresse und Kanal des CUxD-Exec-Device angeben
var shellyo = "CUxD.CUX4000005:3" ; ! Adresse und Kanal des CUxD-Device für den Shelly 1 anpassen
!****ENDE SETUP ********ENDE SETUP ********ENDE SETUP ******
!*****Ab hier NICHTS MEHR ÄNDERN *****
dom.GetObject(""#execo#".CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject(""#execo#".CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject(""#execo#".CMD_RETS").State();
dom.GetObject(""#execo#".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(""#shellyo#".STATE").State();
!WriteLine(zustand);
if ((daten == "true,") && (zustand != true) )
{dom.GetObject(""#shellyo#".SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject(""#shellyo#".SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0";
!Ende Skript
Alles anzeigen
Bei einem Aktualisierungsintervall von 30 Sekunden und aktuell 3 Shelly1 ist keine größere Veränderung der CCU3-Auslastung zu bemerken.
Optionale Überwachung des Onlinestatus des Shelly1
(Erreichbarkeit im (W)LAN)
Hier mal vorab das Ergebnis:
(So kann schon hier jeder für sich entscheiden, ob das Thema für den Einzelnen relevant ist und weiterverfolgt wird )
Vorteile der optionalen Überwachung:
- Ausfallüberwachung
- Online-Status im bereits angelegten "CUxD-Shelly-Gerät" sichtbar
- Möglichkeit auf Nichterreichbarkeit eines Shelly1 individuell zu reagieren, z.B. mit eMail-Benachrichtigung, Anzeige o.ä.
- projektabhängige zusätzliche EInflußnahme auf den Schaltzustand des "CUxD-Shelly"
Was wird zusätzlich zur bisherigen Einrichtung benötigt:
- 1 CUxD-Gerät (28) Ping (1Kanal / Shelly1)
- 1 Systemvariable je Shelly1
Die Systemvariable(n):
Je Shelly wird 1 Systemvariable vom Typ Logik angelegt:
und mit dem entsprechenden Kanal des "CUxD-Shelly" verknüpft.
Dadurch wird die Variable im CUxD-Gerät sichtbar (siehe Bild unter Ergebnis)
Gesteuert wird die Variable direkt durch das Gerät "CUxD-Ping". (Sinnvollerweise ordnet man die Kanäle 1:1 den Shellys zu wie beim CUxD-Schalter. )
Nun ergeben sich 2 Möglichkeiten:
1. Onlinezustand nur anzeigen
Dazu ist je Shelly1 der zugeordnete CUxD-Ping-Kanal wie folgt einzustellen:
(Die Zeiten können beliebig verändert werden. (solange Euer System nicht in die Knie geht. )
SWITCH|IP_DNS_ADR: IP des Shelly anpassen
SWITCH|CMD_EXEC_TRUE:
SWITCH|CMD_EXEC_FALSE:
Achtung: In beiden Codes...
"Onlinestatus_Shelly_Fitnessraum" durch den Namen Eurer Systemvariablen ersetzen! (Achtung: keine Leerzeichen im Namen verwenden!)
Ab jetzt überwacht das CUxD-Ping den Shelly1 und aktualisiert ggf. den Status online/offline in der Systemvariablen automatisch.
Stimmt nach dem Anlegen der Zustand der Systemvariablen nicht mit dem realen Onlinestatus überein, so muß der reale Onlinestatus einmalig geändert werden (z.b. durch Ausschalten des Shelly). Nach Abwarten der im PING eingestellten Überwachungszeit und Wiedereinschalten des Shelly erfolgt dann die autom. Aktualisierung.
2. zusätzlich bei Status "Offline" den CUxD-Schalter des Shelly in Stellung "AUS" bringen
(ohne das unnötigerweise Befehle ins Netzwerk gesendet werden)
Sinn und Zweck:
Mangels N-Leiter in den Schalterdosen habe ich meine Shelly1 in den Lampen verbaut. Wird nun das Licht versehentlich (oder auch gewollt) über den herkömmlichen Schalter ausgeschaltet, so ist nicht nur das Licht aus, sondern auch der Shelly1 (=offline). Die CCU würde das aber nicht mitbekommen und folglich den CUxD-Schalter weiterhin im Zustand 1 belassen.
Durch einen 2.Befehl im Code für SWITCH|CMD_EXEC_FALSE kann der CUxD-Shelly-Schaltkanal auf AUS gesetzt werden, ohne dass unnötige Befehle ins Netzwerk gesendet werden. Insgesamt sieht der erweiterte Eintrag dann so aus:
extra/timer.tcl Onlinestatus_Shelly_Fitnessraum 0; extra/timer.tcl CUxD.CUX4000005:1.SET_STATE 0
"Onlinestatus_Shelly_Fitnessraum" durch den Namen Eurer Systemvariablen ersetzen! (Achtung: keine Leerzeichen im Namen verwenden!)
Außerdem bitte die CUxD-Adresse des Shelly-Schalt-Kanal anpassen!
Durch die erweiterte Befehlszeile wird nun zusätzlich zum Status in der Systemvariablen bei OFFLINE auch der Schalter auf Position AUS gesetzt.
(SWITCH|CMD_EXEC_TRUE braucht nicht erweitert zu werden, da bei ONLINE der Schaltzustand des Shelly1 ja eh aktualisiert wird.)
Viel Spass damit
____________________________________________________________
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).
© 2019-2020 Stefan K. (alias 66er)
Alle Rechte vorbehalten
____________________________________________________________
Dir gefällt die Anleitung? Du möchtest den dahinterstehenden Aufwand mit einem kleinen "Danke" honorieren?
Ich freue mich über jedes Danke Paypal (Geld an einen Freund senden): der-66er@web.de
Vielen Dank.