NEWS

Script zur Überprüfung ob eine Instanz noch läuft.



  • Hallo,

    ich finde es einfach nicht mehr. Ich suche ein Skript, was mir eine Nachtricht auf Telegram sendet, wenn eine
    Instanz nicht mehr Grün ist, also Gelb oder Rot ist.

    Irgendwo hatte ich es bereits schon mal gesehen, finde es aber nicht mehr.

    Hat jemand das am Laufen vielleicht .

    cu Deta


  • Forum Testing Most Active

    createState('Status.ioBroker.Adapterüberwachung.Störung', { "name": "iobroker Servicemeldungen Störung" });
    createState('Status.ioBroker.Adapterüberwachung.Text', { "name": "iobroker Servicemeldungen Text" });
    
    function alarmMail(txt) {
        txt = 'System Adapter ' + txt;
        sendTo('email.0', 'iobroker - ' + txt);
        setState('javascript.0.Status.ioBroker.Adapterüberwachung.Text', txt);
        log('iobroker - System Adapter ' + (txt));
    }
    
    var cnt = 0;
    
    on(/^system\.adapter\..+\.alive$/, function (dp) {
        if (dp.state.val === true)
            log('trigger für Adapterüberwachung aktiv');
        var id = (dp.id.split('.'));
        if (id[2] != 'admin' && id[2] != 'ical' && id[2] != 'dwd' && id[2] != 'yr') {
            if (dp.state.val) {
                cnt--;
                if (cnt <= 0) {
                    // alarmMail('laufen fehlerfrei');
                    setState('javascript.0.Status.ioBroker.Adapterüberwachung.Störung', false);
                    setState('javascript.0.Status.ioBroker.Adapterüberwachung.Text', ' iobroker - Systemadapter laufen fehlerfrei');
                    log('iobroker - System Adapter laufen fehlerfrei');
                    cnt = 0; // falls verzählt und cnt < 0
                }
            } else {
                if (dp.state.val === false)
                    id = ('system.adapter.' + id[2] + '.' + id[3]);
                var instance = getObject(id);
                if (instance.common.enabled) {
                    alarmMail('meldet Probleme ' + dp.common.name);
                    setState('javascript.0.Status.ioBroker.Adapterüberwachung.Störung', true);
                    cnt = 0; // falls verzählt und cnt < 0
                }
            }
        }
    });
    


  • @sigi234 Danke, scheint aber nur eine Mail zu versenden. Bräuchte das für Telegram.


  • Forum Testing Most Active

    @deta sagte in Script zur Überprüfung ob eine Instanz noch läuft.:

    @sigi234 Danke, scheint aber nur eine Mail zu versenden. Bräuchte das für Telegram.

    sendTo('telegram.0', 'iobroker - ' + txt);



  • Muss das in Zeile 31 nicht

    if (!instance.common.enabled)
    

    heißen?

    PS: Danke für das Skript!


  • Forum Testing Most Active

    @eumats sagte in Script zur Überprüfung ob eine Instanz noch läuft.:

    Muss das in Zeile 31 nicht

    if (!instance.common.enabled)
    

    heißen?

    PS: Danke für das Skript!

    Ist nicht von mir............ist von @paul53

    https://forum.iobroker.net/topic/8779/bei-störung-e-mail-versenden/36



  • @eumats sagte in Script zur Überprüfung ob eine Instanz noch läuft.:

    Muss das in Zeile 31 nicht
    if (!instance.common.enabled)

    heißen?

    Nein, eine Störung liegt nur vor, wenn die Instanz freigegeben ist (laufen soll).



  • @paul53

    Ahh. Jetzt hat es geklingelt. Ich hatte zum stimulieren eines Ausfalls einen Adapter deaktiviert und mich gewundert das nix kommt. 😀

    Zwei Fragen noch:

    1. Wie kann ich die Funktion des Skripts denn testen? EDIT: Das habe ich mit einem kill -9 <pid> hinbekommen.
    2. In Deinem original Skript steht nach Zeile 35 noch ein cnt++. Ist das erforderlich?


  • @eumats sagte:

    In Deinem original Skript steht nach Zeile 35 noch ein cnt++. Ist das erforderlich?

    Ja. Das Skript ist an mehreren Stellen verändert worden. Die Variable cnt ist dafür gedacht, dass ein Wert > 0 im Datenpunkt 'Status.ioBroker.Adapterüberwachung.Störung' anzeigt, dass mindestens eine Instanz gestört ist.



  • @sigi234 sagte in Script zur Überprüfung ob eine Instanz noch läuft.:

    @deta sagte in Script zur Überprüfung ob eine Instanz noch läuft.:

    @sigi234 Danke, scheint aber nur eine Mail zu versenden. Bräuchte das für Telegram.

    sendTo('telegram.0', 'iobroker - ' + txt);

    ich hab absolut kein Plan wo das genau eingebaut werden muss.. 😡



  • Ersetze "email" einfach durch "telegram"



  • Scheint zu funktionieren .

    Nur jetzt Meckert er . das der Adapter Das Wetter und tvspielfilm ein Problem mit alive haben.
    Laufen aber .

    cu Deta



  • Ich habe das Skript etwas abgewandelt um genau diese kurzen Aussetzer der Adapter abzufangen. Wobei zugegebenermaßen noch der Test aussteht, ob das Skript auch etwas melden, wenn die Ausfall nicht nur kurz war. Da habe ich noch keine Idee, wie ich das Stimulieren kann.

    // Überwacht alle laufenden Adapter
     
    function alarmMeldung(txt) {
        txt = 'Adapter läuft nicht ordnungsgemäß: ' + txt;
        sendeStatusPerTelegram(txt);
        log(txt);
    }
     
    var cnt = 0,
        timeoutZeit = 1 * 60000;
     
    on(/^system\.adapter\..+\.alive$/, function (dp) {
        if (dp.state.val)
            //log('trigger für Adapterüberwachung aktiv');
        var id = (dp.id.split('.'));
    
        // Ausnahmen definieren. id[2] != 'admin' && id[2] != 'yahka'
        if (id[2] != 'admin') {
            if (dp.state.val) {
                cnt--;
                if (cnt <= 0) {
                    log('Adapter laufen fehlerfrei');
                    cnt = 0; // falls verzählt und cnt < 0
                }
             } else {
                log('### Fehler entdeckt. Warte auf Selbstheilung: ' + id[2]);
                var timeout = setTimeout(function () {
                    var dpname = ('system.adapter.' + id[2] + '.' + id[3] + '.' + id[4]),
                        newid  = ('system.adapter.' + id[2] + '.' + id[3]),
                        instance = getObject(newid);
                    log('### Wartezeit vorrüber. Prüfe noch mal: ' + id[2])
    
                    // nur einen Fehler melden, wenn der Adapter vorher auch mal aktiv war. Bzw. deaktivierte Adapter ignorieren
                    if (!getState(dpname).val) {
                        if (instance.common.enabled) {
                            alarmMeldung(dp.common.name);
                            cnt = 0; // falls verzählt und cnt < 0
                        }
                    } else {
                        log('### Der Fehler hat selbst geheilt: '+ id[2])
                    }
                }, timeoutZeit);
                cnt++;
             }
         }
     });
    


  • @deta sagte:

    Das Wetter und tvspielfilm ein Problem mit alive

    Laufen die Instanzen nicht ständig ? Dann ergänze die Zeile

        if (id[2] != 'admin' && id[2] != 'daswetter' && id[2] != 'tvspielfilm') {
    

    um diese Adapter.



  • @paul53
    Ich glaube er meint mehr, dass der Zustand "toggelt". Also alive kurzzeitig auf false geht. Ich hatte heute morgen z.B. 10 Meldungen das der Adapter web nicht geht, obwohl alles ok ist.



  • Es kommt aber immer alle paar Minuten, das die beiden Adapter ein problem mit Alive haben. So die Nachricht.
    Ich versuche mal die Ergänzung.



  • bis jetzt ist alles gut. Beobachte es weiter..



  • @deta Das sind beides Adapter, die sich Daten aus dem Internet holen. Verhält sich connected genauso wie alive ?



  • Bei mir waren es Web und Backitup...



  • Ich denke das hängt damit zusammen , das diese nicht immer aktiv sind, sondern nur kurz zum Datenabgleich.
    e0fbb622-257b-4222-80be-7495aed35692-grafik.png


Log in to reply
 

Suggested Topics

1.1k
Online

32.1k
Users

38.8k
Topics

525.6k
Posts