NEWS
"entprellen" eines States
-
das Ping-Signal entprellen und mir nur eine Nachricht schicken, wenn der Homepilot z.B. für länger als 3 Minuten offline ist. `
Dafür verzögert man das Telegramm um 3 Minuten mit timer = setTimeout(). Bei jedem Ping wird der Timer mit clearTimeout(timer) gestoppt. -
Hi,
danke für den Tip.
So habe ich es nun gelöst:
var PingProblemSchedule; on({id: "ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/, change: "ne"}, function (obj) { if (getState("ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/).val === false) { PingProblemSchedule = setTimeout(function () {sendTo('telegram', 'Fehler: Homepilot 192.168.178.49 nicht erreichbar');}, 3*60*1000); } else { //Wenn OK Zustand nach länger als 3 Minuten, sende: Alles OK if ((dp.state.lc - dp.oldState.lc) > 3*60*1000) sendTo('telegram', 'Homepilot 192.168.178.49 wieder erreichbar'); //Ansonsten, OK Zustand nach weniger als 3 Minuten hergestellt, Fehlernachricht abbrechen else clearTimeout(PingProblemSchedule); } });
-
Das geht einfacher, da Ping zyklisch aktualisiert wird.
const idPing = "ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/; var timer = null; on({id: idPing, val: true}, function() { sendTo('telegram', 'Homepilot 192.168.178.49 wieder erreichbar'); clearTimeout(timer); timer = setTimeout(function() { sendTo('telegram', 'Fehler: Homepilot 192.168.178.49 nicht erreichbar'); }, 3*60*1000); });
-
@paul53 sagte in "entprellen" eines States:
Das geht einfacher, da Ping zyklisch aktualisiert wird.
const idPing = "ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/; var timer = null; on({id: idPing, val: true}, function() { sendTo('telegram', 'Homepilot 192.168.178.49 wieder erreichbar'); clearTimeout(timer); timer = setTimeout(function() { sendTo('telegram', 'Fehler: Homepilot 192.168.178.49 nicht erreichbar'); }, 3*60*1000); });
Dieses Script schickt mir minütlich (ping adapter intervall?): xyz wieder erreichbar.
Kann jemand helfen wie es richtig geht? -
const idPing = "ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/; var timer = null; on({id: idPing, val: true}, function() { if(!timer) sendTo('telegram', 'Homepilot 192.168.178.49 wieder erreichbar'); else clearTimeout(timer); timer = setTimeout(function() { sendTo('telegram', 'Fehler: Homepilot 192.168.178.49 nicht erreichbar'); timer = null; }, 3*60*1000); });
-
Danke für das Update. Leider springt er jetztj wild zwischen "nicht erreichbar" und "wieder erreichbar" hin und her. Der ping Status ist aber konstat auf true... Hier der verwendete code:
const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/*Rainyman*/; var timer = null; on({id: idPing, val: true}, function() { if(!timer) //sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar'); console.log('Rainyman 192.168.178.50 wieder erreichbar'); else clearTimeout(timer); timer = setTimeout(function() { //sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar'); console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar'); timer = null; }, 1*5*1000); });
-
@passuff sagte:
Hier der verwendete code:
Ja, bei nur 5 s Verzögerung muss das so sein. Die Verzögerung muss auf jeden Fall größer sein, als das Intervall, in dem der Ping-Status aktualisiert wird.
-
Sorry, mein Fehler. Funktioniert tadellos.
Danke dafür!
-
Ich bekomme im Schnitt alle 2-3 Tage eine "wieder erreichbar" Meldung. Laut Aufzeichnung kannn ich aber nicht erkennen, dass sich am PingStatus etwas geändert hat.
Jemand eine Idee?Code:
-
@passuff sagte in "entprellen" eines States:
if(!timer) {sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar') + setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, true)
- console.log('Rainyman 192.168.178.50 wieder erreichbar');
else clearTimeout(timer);
Was soll das für Code sein ? Javascript ist es nicht.
if(!timer) { sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar'); setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, true); console.log('Rainyman 192.168.178.50 wieder erreichbar'); } else clearTimeout(timer);
-
@paul53 sagte in "entprellen" eines States:
Was soll das für Code sein ? Javascript ist es nicht.
ja, da kannst du recht haben. Ich hatte es auch so wie du proiert, doch dann bekam ich einen Fehler beim compile:
javascript.0 script.js.common.Sonstige.Überwachung_Rainyman_Kopieren compile failed: at script.js.common.Sonstige.Überwachung_Rainyman_Kopieren:8
-
@passuff sagte in "entprellen" eines States:
} else clearTimeout(timer); else clearTimeout(timer);
Das zweite else ... muss raus.
Bitte Jacascript-Code in Code tags posten ! -
Sorry, da komme ich nicht weiter:
const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/*Rainyman*/; var timer = null; on({id: idPing, val: true}, function() { if(!timer) { sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar'); setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, true); console.log('Rainyman 192.168.178.50 wieder erreichbar'); } else clearTimeout(timer); timer = setTimeout(function() { sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar'); setState("CalcVal.0.Szenen.Dachfensterautomatik"/*Dachfensterautomatik*/, false); setState("hm-rpc.0.OEQ1301523.1.LEVEL"/*HM-LC-Bl1PBU-FM OEQ1301523:1.LEVEL*/, 0); //console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar'); timer = null; }, 5*60*1000); });
-
@passuff
Funktioniert es so nicht ? Sollte eigentlich. Damit die Struktur zu erkennen ist:const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/*Rainyman*/; var timer = null; on({id: idPing, val: true}, function() { if(!timer) { sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar'); setState("CalcVal.0.Szenen.Dachfensterautomatik"/*Dachfensterautomatik*/, true); console.log('Rainyman 192.168.178.50 wieder erreichbar'); } else clearTimeout(timer); timer = setTimeout(function() { sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar'); setState("CalcVal.0.Szenen.Dachfensterautomatik"/*Dachfensterautomatik*/, false); setState("hm-rpc.0.OEQ1301523.1.LEVEL"/*HM-LC-Bl1PBU-FM OEQ1301523:1.LEVEL*/, 0); //console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar'); timer = null; }, 5*60*1000); });
-
Nein, funktioniert leider nicht:
00:00:23.053 error javascript.0 script.js.common.Sonstige.Überwachung_Rainyman_Kopieren compile failed: at script.js.common.Sonstige.Überwachung_Rainyman_Kopieren:8
-
@passuff
In Zeile 8 ist der Kommentar(Name) falsch eingebaut. Ich habe es oben korrigiert. -
Super, vielen Dank!
-
@paul53 Bei neustart des Skripts wird einmalig die Bedingung " if(!timer)" wahr un somit eine pushover abgesetzt. Hast du eine Lösung dafür?
const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/*Rainyman*/; var timer = null; on({id: idPing, val: true}, function() { if(!timer) { sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar'); console.log('Rainyman 192.168.178.50 wieder erreichbar'); } else clearTimeout(timer); timer = setTimeout(function() { sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar'); setState("hm-rpc.0.OEQ1301523.1.LEVEL"/*HM-LC-Bl1PBU-FM OEQ1301523:1.LEVEL*/, 0); //console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar'); timer = null; }, 5*60*1000); });
-
@passuff
In Zeile 3 den Timer setzenvar timer = setTimeout(function() {}, 0);
-
Das ging schnell. Danke!