Ich habe festgestellt das Shellys mit langer Laufzeit manchmal verzögert reagieren oder einfach nur rumzicken. Nachdem ich ein paar Blocklys gesehen habe die alle Shellys einzeln abfragen war mir das zu viel Arbeit
Leider kann Blockly nicht alles was JavaScript kann. Daher blieb mir nur der Weg über JS statt Blockly. Ich hoffe das ist auch okay hier
// Wenn die Uptime über 10 Tagen liegt wird ein Adapter neu gestartet und die Rückmeldung per Signal versendet.
// Es werden alle Shellys des Adapters per Schleife geprüft, IP muss nicht bekannt sein sondern wird ausgelesen.
schedule('{"time":{"exactTime":true,"start":"nadir"},"period":{"days":1}}', async function () {
var shellies = $('shelly.0.*.name');
var updateCount = 0;
var uptime, result;
console.log('Dem System sind ' + shellies.length + ' Geräte von Shelly bekannt.');
shellies.each(
function(id, i) {
var shellyId = id.split(".").slice(0,-1).join(".");
require("request")((['http://',getState(shellyId + '.hostname').val,'/status'].join('')), async function (error, response, result) {
uptime = getAttr((function () { try {return JSON.parse(result);} catch(e) {return {};}})(), 'uptime');
await wait(20);
if (uptime >= 864000) {
try {
require("request")((['http://',getState(shellyId + '.hostname').val,'/reboot'].join('')), async function (error, response, result) {
exec((['signal-cli -u ABSENDERNUMMER send -m " ',getState(shellyId + '.name').val,' neu gestartet" EMPFÄNGERNUMMER'].join('')));
console.log((['Shelly ',getState(shellyId + '.name').val,' wurde neu gestartet'].join('')));
}).on("error", function (e) {console.error(e);});
}
catch (e) { console.error(e); }
}
}
)
}
)
});
Alles anzeigen
Das Script läuft regelmäßig und liest alle Adapter aus die unterhalb von Shelly.0. hängen. Wenn man mehrere Shelly Instanzen hat, muss das ganze halt angepasst werden....
Die Uptime wird vom Shelly ausgelesen, nicht aus dem ioBroker. Da ich die IP aus den ioBroker Daten abfrage läuft es auch mit DHCP Shellys ohne Probleme, sprich die IP darf sich auch ändern.
Nach dem Reboot bekomme ich eine Signal Nachricht welcher bzw. welche Adapter neu gestartet wurden. Die Signal Einrichtung darf jeder selber googeln
PS: Das Script ohne Zeittrigger läuft einwandfrei, mit Zeittrigger muss ich das erst bewähren