Ohne es selber getestet zuhaben, eventuell kannst du eine Art Reihenschaltung machen. Der erste Shelly bekommt seinen Befehl vom Taster und gibt ihn an z.B. 2 Shelly's per Actions wie von Schubbie beschrieben weiter. In diesen trägst du dann weitere Shelly's ein, so das der Befehl von einem zum anderem weiter gereicht wird.
Beiträge von SeRef
VPN/Proxy erkannt
Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.
-
-
vielen Dank für den Hinweis!
Je mehr man sucht und drauf starrt, desto verschwommener wird's! Danke!Gerne, das kommt mir sehr bekannt vor ?
-
Ich weiß, unlogisch! Aber muss so, sonst kommt ein Fehler!
Versuch mal "Skript testen", wirst sehen!
!If (shgal == "J") { -> if (shgal == "J") {
Der Fehler kommt vom großen "i"
Gruß
-
Willkommen im Forum .

Das ist ja mal ein Einstand. Coole Umsetzung,

Danke!
Zitat(Ich selbst bin kein Fan von automatisierten Updates, ist ein Update fehlerhaft, sind alle betroffen. Daher installiere ich persönlich lieber manuell und bei Bedarf.
)Kann ich verstehen. Man muss ja nicht gleich alle updaten. Dann trägt man eben erst mal nur einen ein und deaktiviert das autoupdate. So wird man schon mal darüber informiert, dass ein neues update verfügbar ist und kann dann bei Bedarf darauf reagieren.
-
Hallo,
da ich meinen Shelly's (bisher "nur" vier) ohne Internetfreigabe betreibe, habe ich nach einer Möglichkeit gesucht ein Firmwareupdate dennoch komfortabel und möglichst automatisiert durchführen zu können. Über diesen Beitrag bin ich zu folgender Lösung gekommen:
Code
Alles anzeigen! Shelly updaten 0.0.2 ! ******************************************************** string vAutoUpdate = "ja"; ! nur bei "ja" wird das Update angestossen, sonst wird nur geprüft string vListe1 = "SHSW-25,192.168.69.50;SHSW-PM,192.168.69.51;SHRGBW2,192.168.69.52;SHEM-3,192.168.69.53"; ! Typ,IP,IP,.,.,.;Typ,IP,IP,.,.,.;Typ, string vDateiIdSHSW_25 = "748f863308ab1516"; string vDateiIdSHSW_PM = "fefe55d73fa2d3f4"; string vDateiIdSHRGBW2 = "31b898ec5380c750"; string vDateiIdSHEM_3 = "8a415833e9a3c90a"; ! ******************************************************** string stdout = ""; string stderr = ""; string vServer = ""; string vFwServer = ""; string vFwShelly = ""; string vIndex1 = ""; string vIp = ""; string vTyp = ""; string vDateiId = ""; string vName = ""; integer vZaehler1 = -1; string vMailtext = ""; ! Firmwareversionen vom Server system.Exec("wget -q -O - -t 1 -T 10 'http://api.shelly.cloud/files/firmware'", &stdout, &stderr); vServer = stdout.Replace("}", ","); foreach (vIndex1, vListe1.Split(";")) { vDateiId = ""; vZaehler1 = -1; foreach (vIp, vIndex1.Split(",")) { if (vDateiId == "") { vTyp = vIp; if (vTyp == "SHSW-25") { vDateiId = vDateiIdSHSW_25; } elseif (vTyp == "SHSW-PM") { vDateiId = vDateiIdSHSW_PM; } elseif (vTyp == "SHRGBW2") { vDateiId = vDateiIdSHRGBW2; } elseif (vTyp == "SHEM-3") { vDateiId = vDateiIdSHEM_3; } else { vMailtext = vMailtext # "Der Shelly-typ " # vTyp # " konnte nicht zugeordnet werden.\n"; break; } ! Firmwareversion vom Server if (vServer.Contains('"' # vTyp # '"')) { vFwServer = vServer.StrValueByIndex('"' # vTyp # '"', 1).StrValueByIndex('"version"', 1).StrValueByIndex(',', 0).StrValueByIndex(':', 1); vFwServer = vFwServer.Replace("\/", "/"); } else { vMailtext = vMailtext # "Das Auslesen der aktuellen Firmwareversion vom Server für die Shelly's vom Typ " # vTyp # " ist misslungen.\n\n"; break; } } else { ! Firmwareversion vom Shelly ! system.Exec("wget -q -O - -t 1 -T 10 'http://" # vIp # "/shelly'", &stdout, &stderr); system.Exec("wget -q -O - -t 1 -T 10 'http://" # vIp # "/settings'", &stdout, &stderr); stdout = stdout.Replace("}", ","); if (stdout.Contains('"' # vTyp # '"')) { vFwShelly = stdout.StrValueByIndex('"fw"', 1).StrValueByIndex(',', 0).StrValueByIndex(':', 1); ! Versionsvergleich if (vFwShelly != vFwServer) { vName = stdout.StrValueByIndex('"name"', 1).StrValueByIndex(',', 0).StrValueByIndex(':', 1); vMailtext = vMailtext # "Es ist ein Firmwareupdate für den Shelly " # vName # " (" # vIp # ") verfügbar.\n"; vMailtext = vMailtext # " Version alt: " # vFwShelly # "\n Version neu: " # vFwServer # "\n\n"; ! Update ausführen? if (vAutoUpdate == "ja") { ! Datei herunterladen if (vZaehler1 < 0) { vTempo1 = vServer.StrValueByIndex('"' # vTyp # '"', 1).StrValueByIndex('"url"', 1).StrValueByIndex(',', 0).StrValueByIndex('"', 2); vTempo1 = vTempo1.Replace("\/", "/"); system.Exec("wget -q -t 1 -T 10 -O /usr/local/nas/" # vTyp # ".zip " # vTempo1 # " &"); vZaehler1 = vZaehler1 + 1; } vTempo1 = 300 + vZaehler1 * 30; ! system.Exec("wget -q -t 1 -T 10 -O - http://" # vIp # "/ota?url=http://RasPi:Ras-Pi@192.168.69.1/fritz.nas/Fritz!Box_128/RasPi/" # vTyp # ".zip &") ! system.Exec("wget -q -t 1 -T 10 -O - http://" # vIp # "/ota?url=fritz.nas/filelink.lua?id=" # vDateiId # " &") system.Exec("sleep " # vTempo1 # " && wget -q -t 1 -T 10 -O - http://" # vIp # "/ota?url=fritz.nas/filelink.lua?id=" # vDateiId # " &") vMailtext = vMailtext # " Update wird in " # vTempo1 # " Sekunden ausgeführt.\n\n\n"; vTempo1 = (vTempo1 + system.Date("%s").ToInteger()).ToTime.Format("%T") vMailtext = vMailtext # " Update wird um " # vTempo1 # " ausgeführt.\n\n\n"; } } } else { vMailtext = vMailtext # "Das Auslesen der aktuellen Firmwareversion vom Shelly " # vTyp # " mit der IP " # vIp # " ist misslungen.\n\n"; } } } } ! E-Mail senden ! if (vMailtext != "") { ! gvMailtext = gvMailtext # vMailtext; ! gvMailbetreff = gvMailbetreff # " " # dom.GetObject("$this$") # ","; ! dom.GetObject("Mailversand").State(true); ! } WriteLine(vMailtext);Das Skript holt sich die aktuellen Firmwareversionen vom Server und vergleicht sie mit den aktuell installierten Versionen auf den in der Variable vListe1 angegebenen Shellys. In der Variable wird erst der Typ und dann Kommagetrennt die dazugehörigen IP-Adressen aller Shellys diesen Typs eingetragen. Die verschiedenen Typen werden dann durch ein Semikolon voneinander getrennt.
Ist auf einem Schelly die Firmware nicht aktuell und die Variable vAutoUpdate mit "ja" vorbelegt wird die entsprechende Firmware vom Server auf einen gemounteten Ordner meiner Fritzbox heruntergeladen. Diese Dateien habe ich vorab Freigegeben (Freigabe bleibt auch nach überschreiben der Datei erhalten) und den Code bei den Variablen vDateiIdxxxx eingetragen. Anschließend wird das Update mit einer Wartezeit von fünf Minuten (damit der Download abgeschlossen ist) angestoßen. Müssen mehrere Shellys geupdatet werden, wird jeweils nochmal 30 Sekunden zur Wartezeit addiert.
Damit das nicht nur still und heimlich passiert, lasse ich mir per Mail das Ergebnis zusenden. Den Teil habe ich hier im Skript aber auskommentiert, da es nicht ohne weiteres in einer anderen CCU lauffähig ist.
Ich wünsche allen ein Frohes und gesundes Fest