Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. PichlAlex

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    P
    • Profile
    • Following 0
    • Followers 0
    • Topics 0
    • Posts 1
    • Best 0
    • Groups 0

    PichlAlex

    @PichlAlex

    0
    Reputation
    6
    Profile views
    1
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    PichlAlex Follow

    Latest posts made by PichlAlex

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

      Hallo zusammen,

      ich habe das Script erweitert um alle 3 Statuswerte der Instanzen abzufragen.

      Damit werden auch folgende Situationen erkannt:

      • InfluxDB ist nicht erreichbar (oder User gesperrt/ungültig)
      • Plex verweigert die Verbindung weil Token abgelaufen ist (passiert manchmal nach Updates
      • Spotify Login-Token ist abgelaufen
      • ....und viele mehr

      Funktionsweise (am Beispiel von Instanz plex.0):

      • "Connected to host" wird über Event system.adapter.plex.0.connected geprüft
      • "Connected to device or service" wird über Event plex.0.info.connection geprüft
      • "Heartbeat" wird über Event system.adapter.plex.0.alive geprüft
      
      // Überwacht alle 3 Statuswerte der laufenden Adapter
       var G_TelegramChatId = 37342026;
      function alarmMeldung(txt) {
          //txt =  txt;
          //sendeStatusPerTelegram(txt);
          sendTo('telegram.0', 'Instanzmonitoring: ' + txt);
          sendTo("telegram.0", "send", {
              text: ('Instanzmonitoring: ' + txt),
              chatId: G_TelegramChatId
          });
          log('Sende via Telegram: ' + txt);
      }
       
      var cnt = 0,
          timeoutZeit = 1 * 30000;
      
      //Prüfen auf: Connected to host
      //['system','adapter','plex','0','connected']
      on(/^system\.adapter\..+\.connected$/, function (dp) {
          log("CONNECTED-EVENT " + ( JSON.stringify(dp)));
          var id = dp.id.split('.');
          //log(dp.id);
          //log(id);
      
          if (id[2] != 'admin') {
              if (dp.state.val) {
                  cnt--;
                  if (cnt <= 0) {
                      log('"Connected to host" Adapter laufen fehlerfrei');
                      cnt = 0; // falls verzählt und cnt < 0
                  }
               } else { 
                  log('### "Connected to host"-Fehler entdeckt. Warte auf Selbstheilung: ' + id[2]);
                  var newid  = ('system.adapter.' + id[2] + '.' + id[3]);
      
                  recheckWithIntervall(dp.common.name, newid, id[2], "Connected to host");
      
                  cnt++;
               }
           }
      });
      
      //Prüfen auf: Connected to device or service
      //plex.0.info.connection
      on(/^.*info\.connection.*$/, function (dp) {
          log("INFO-EVENT " + ( JSON.stringify(dp)));
          var id = dp.id.split('.');
          //log(dp.id);
          //log(id);
      
          if (id[0] != 'admin') {
              if (dp.state.val) {
                  cnt--;
                  if (cnt <= 0) {
                      log('"Connected to device or service" Adapter laufen fehlerfrei');
                      cnt = 0; // falls verzählt und cnt < 0
                  }
               } else { 
                  log('### "Connected to device or service"-Fehler entdeckt. Warte auf Selbstheilung: ' + id[2]);
                  var newid  = ('system.adapter.' + id[2] + '.' + id[3]);
      
                  recheckWithIntervall(dp.common.name, newid, id[2], "Connected to device or service");
                  
                  cnt++;
               }
           }
      });
      
      //Prüfen auf: Heartbeat
      on(/^system\.adapter\..+\.alive$/, function (dp) {
          //if (dp.state.val)
          //    log('trigger für Adapterüberwachung aktiv');
          var id = dp.id.split('.');
          //log(dp.id);
          //log(id);
          // Ausnahmen definieren. id[2] != 'admin' && id[2] != 'yahka'
          if (id[2] != 'admin' && id[2] != 'openweathermap') {
              if (dp.state.val) {
                  cnt--;
                  if (cnt <= 0) {
                      log('"Heartbeat"-Adapter laufen fehlerfrei');
                      cnt = 0; // falls verzählt und cnt < 0
                  }
               } else { 
                  log('### "Heartbeat"-Fehler entdeckt. Warte auf Selbstheilung: ' + id[2]);
                  var dpname = ('system.adapter.' + id[2] + '.' + id[3] + '.' + id[4]);
                  var newid  = ('system.adapter.' + id[2] + '.' + id[3]);
      
                  recheckWithIntervall(dp.common.name, newid, id[2], "Heartbeat");
      
                  cnt++;
               }
           }
       });
      
       function recheckWithIntervall(dpname, newid, adapter, eventtyp) {
          var timeout = setTimeout(function () {
              var instance = getObject(newid);
              log('### "' + eventtyp + '"-Wartezeit vorrüber. Prüfe noch mal: ' + newid);
      
              // 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('"' + eventtyp + '"-Fehler bei Instanz: ' + dpname);
                      cnt = 0; // falls verzählt und cnt < 0
                  }
              } else {
                  log('### Der "' + eventtyp + '"-Fehler hat selbst geheilt: '+ newid);
              }
          }, timeoutZeit);
       }
      
      
      posted in Skripten / Logik
      P
      PichlAlex
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo