Shelly bringt in regelmäßigen Abständen neue Updates für die Module heraus. Über die Smartphone App lassen sich die Updates natürlich auf alle Shelly aufspielen – jedoch innerhalb von ioBroker gibt es nur die Möglichkeit, das Update via der Shelly Instanz zu installieren. Hier behelfen wir uns eines Skriptes, welches manuell den Update-Prozess auf den Shelly auslösen kann. Es wird auch nur das Update ausgelöst, wenn tatsächlich eines zur Verfügung steht.
Skript
Nun erstellen wir in ioBroker ein neues Skript im common Bereich. Es bekommt den Namen “Shelly-Firmware”.
/* * @copyright 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln> * * @author 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln> * * Dieses Skript dient zur freien Verwendung in ioBroker zur Verbrauchserfassung der Shelly Geräte. * Jegliche Verantwortung liegt beim Benutzer. Das Skript wurde unter Berücksichtigung der bestmöglichen Nutzung * und Performance entwickelt. * Der Entwickler versichert, das keine böswilligen Systemeingriffe im originalen Skript vorhanden sind. * * Sollte das Skript wider Erwarten nicht korrekt funktionieren, so hast Du jederzeit die Möglichkeit, Dich auf * https://www.kreyenborg.koeln * für Unterstützung zu melden. Jedes Skript besitzt seine eigene Kommentarseite, auf der, * nach zeitlicher Möglichkeit des Autors, Hilfe angeboten wird. Ein Anrecht hierauf besteht nicht! * * Ansprüche gegenüber Dritten bestehen nicht. * * Skript Name: Shelly-Firmware * Skript Version: 1.0 * Erstell-Datum: 07. Juni 2021 * */ // Datenpunkt der Shelly (Standard: shelly.0) var shelly_dp = "shelly.0"; // Datenpunkte der Shelly (!!! Bitte nicht ändern !!!) var shellyDps = $('state[id=' + shelly_dp + '.*.firmware]'); let anzahl_shelly = 0; let anzahl_shelly_update = 0; // Starte Reboot shellyDps.each(function (id, i) { if (getState(id).val == true) { setState(id + "update", true); anzahl_shelly_update++; } anzahl_shelly++; }); stopScript(""); log("Shelly-Firmware: Der Update-Befehl wurde an " + anzahl_shelly_update + " von " + anzahl_shelly + " Shelly gesendet!");
Wie hat Dir der Beitrag gefallen?
Bewertung: 5/5 - abgegebene Bewertungen: 1
ich habe noch eine Frage, da ich zwei Instanzen Shelly installiert habe wäre es möglich bei beiden das Update auszuführen?
Hallo Robert,
das Skript kannst Du wie folgt erweitern:
In Zeile 26:
var shelly_dp_1 = "shelly.1";
Zeile 29:
var shellyDps1 = $('state[id=' + shelly_dp_1 + '.*.firmware]');
Nach Zeile 40:
shellyDps1.each(function (id, i) {
if (getState(id).val == true) {
setState(id + "update", true);
anzahl_shelly_update++;
}
anzahl_shelly++;
});
Wenn Shelly 1 Buttons im Einsatz siud, die nicht online sind (nicht per USB verbunden), werden diese nicht aktualisiert. Ich habe die Schleife des Skripts für mich so angepasst, dass das protokolliert wird:
shellyDps.each(function (id, i) {
if (getState(id).val == true) {
if (getState(id.replace(“.firmware”,”.id”)).val==”shellybutton1″ && getState(id.replace(“.firmware”,”.online”)).val==false){
log(“Shelly Button “+getState(id.replace(“.firmware”,”.name”)).val+” konnte nicht aktualisiert werden, da er nicht online ist !”)
}else{
setState(id + “update”, true);
anzahl_shelly_update++;
}
}
anzahl_shelly++;
});
Hallo Dirk,
dies ist vielleicht für jemanden nützlich. Danke!
Gruß,
Stephan
Hallo,
wenn ich das script starte, läuft es durch und stoppt dann sofort wieder (oben in orange. script läuft nicht).
Ist das so gewollt?? Muss man hin und wieder das script manuell anstoßen??
Vielen Dank im Voraus!
mfg
Smirre
Hi Smirre,
ja, genau, das Skript läuft einmal durch und beendet sich dann selbst wieder – das ist so gewollt 😉
Somit ist sichergestellt, das keine Updates installiert werden, ohne das der Benutzer dies beeinflussen kann.
Das Skript sorgt im Eigentlichen dafür, das man nicht auf jeden Shelly gehen muss, um das Update zu starten, sondern ein gesammelter Befehl an alle geschickt wird.
Gruß,
Stephan