Navigation

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

    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

    L
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 4
    • Best 0
    • Groups 1

    lichtraum

    @lichtraum

    Starter

    0
    Reputation
    5
    Profile views
    4
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    lichtraum Follow
    Starter

    Latest posts made by lichtraum

    • RE: Homematic HCU

      @jamalau tatsächlich ist es so einfach:
      JavaScript anlegen, den Code einfügen und starten.

      Nur wenn du mehrere Homematic IP Instanzen hast, müsstest du noch die Variable WATCHING_INSTANCE anpassen.

      Viele Grüße

      posted in ioBroker Allgemein
      L
      lichtraum
    • RE: Homematic HCU

      Das von @jamalau beschriebene Problem tritt bei mir auch auf. Allerdings kann ich es nicht auf eine bestimmte Zeit eingrenzen. Es passiert meistens einmal am Tag - aber zu unterschiedlichsten Zeiten. Manchmal läuft der Adapter auch ohne Probleme zwei / drei Tage durch.

      Ich hatte schon überlegt, ein Issue auf Github zu erstellen, aber im Debug Log finde ich einfach keinen Eintrag dazu. Die Log-Einträge verstummen einfach mit Eintreten des Problems.

      Mein Workaround ist ein Skript, welches auf das letzte Update prüft und den Adapter neu startet, falls das Update zu lange her ist. Vielleicht hilft es jemanden:

      /* ------------- CONFIG ------------- */
      const TIME_TREASHOLD = 10 * 60 * 1000; // 10 minutes in ms - wie lange muss das letzte Lebenszeichen her sein
      const ATTEMPTS_TIME = 60 * 60 * 1000; // 60 minutes in ms - wie lange muss der letzte neustart her sein, damit es nicht als neuer Versuch gewertet wird
      const ATTEMPTS_TREASHOLD = 3;  // Anzahl maximaler Neustartversuche
      
      const WATCHING_INSTANCE = 'hmip.0';  // Instanz die überwacht werden soll
      
      /* ------------- SKRIPT ------------- */
      class HomematicWatcher {
          constructor() {
              this.states = [];
              this.latestUpdate = new Date('1990-01-01');
              this.lastRestart = new Date('1990-01-01');
              this.attempts = 0;
          }
      
          collectStates() {
              $(`${WATCHING_INSTANCE}.*`).each((id) => { 
                  if(existsState(id)) {
                      this.states.push(id);
                  }
              });
          }
      
          determineLastestUpdate() {
              for (let i = 0; i < this.states.length; i++) {
                  const lastUpdate = getState(this.states[i]).ts;
                  if (lastUpdate !== undefined) {
                      const lastUpdate_ts = new Date(lastUpdate);
                      if (lastUpdate_ts > this.latestUpdate) {
                          this.latestUpdate = lastUpdate_ts;
                      }
                  }
              }
          }
      
          checkForRestart() {
              if (new Date().getTime() - this.latestUpdate.getTime() > TIME_TREASHOLD) {            
                  // Instanz neu starten
                  this.restartInstance();
              } 
          }
         
          getInstanceState() {
              var obj_instance = getObject(`system.adapter.${WATCHING_INSTANCE}`);
              return obj_instance.common.enabled;
          }
         
          setInstanceState(val) {
              var obj_instance = getObject(`system.adapter.${WATCHING_INSTANCE}`);
              obj_instance.common.enabled = val;
              setObject(`system.adapter.${WATCHING_INSTANCE}`, obj_instance);  
              console.warn(`HmIP Instanz ${WATCHING_INSTANCE} wurde ${val ? 'gestartet' : 'gestoppt'}`);  
          }
      
          restartInstance() {
              // Nur neu starten, wenn Instanz bereits läuft 
              if(this.getInstanceState() != false) {
              
                      // Anzahl der Neustartversuche zählen, wenn letzter Neustart weniger als ATTEMPTS_TIME her ist
                  if (new Date().getTime() - this.lastRestart.getTime() < ATTEMPTS_TIME) {      
                      this.attempts++;
                  } else {
                      this.attempts = 0;
                  }
      
                  try {
                      // Nur neu starten, wenn Anzahl der erlaubten Versuche noch nicht überschritten wurde
                      if (this.attempts <= ATTEMPTS_TREASHOLD) {                    
                          
                          // Instanz stoppen        
                          this.lastRestart = new Date();
                          this.setInstanceState(false);    
      
                          // Instanz starten
                          setTimeout(() => {                
                              this.lastRestart = new Date();
                              this.setInstanceState(true);  
                          }, 3000);          
                      } else {
                          console.error(`Instanz ${WATCHING_INSTANCE} wurde bereits ${this.attempts} mal neugestartet. Abbruch.`);
                      }
                  }
                  catch (e) {
                      console.error(`Fehler beim Neustart der Instanz ${WATCHING_INSTANCE}: ${e}`)
                  }
              }
          }
      }
      
      // Ausführen bei Skriptstart
      const watcher = new HomematicWatcher()
      watcher.collectStates();
      watcher.determineLastestUpdate();
      watcher.checkForRestart();
      
      // Schedule alle zwei Minuten
      schedule('*/2 * * * *', () => {
          watcher.determineLastestUpdate();
          watcher.checkForRestart();
      });
      
      posted in ioBroker Allgemein
      L
      lichtraum
    • RE: Variable von Google Home an Datenpunkt übergeben

      @arteck Danke dir für deine Rückmeldung.
      Nein, habe ich noch nicht. Was genau meinst du damit? Hast du vielleicht ein Beispiel oder ein Link zu einer Doku?

      Viele Grüße

      posted in Cloud Dienste
      L
      lichtraum
    • Variable von Google Home an Datenpunkt übergeben

      Guten Morgen,
      folgender Fall: Ich möchte meinen Fernseher per Google Home umschalten. Jedoch würde ich ungern für jeden Sender eine Zeile im IoT-Adapter vergeben.
      Das ideale Szenario sieht so aus:

      Ok Google aktiviere Fernseher auf $var
      

      $var könnte ein Sender, wie ARD oder ZDF sein.

      Den Datenpunkt kann ich dann per Skript auslesen und über eine Switch-Anweisung entsprechend behandeln.
      Jedoch schaffe ich es nicht, Google eine Variable mitzugeben. Über IFTTT ging das früher mal.

      Hat jemand eine Idee, wie man das im IoT-Adpater umsetzen könnte?

      Vielleicht hat alternativ jemand eine Dokumentation zum JSON-Code, der im IoT-Adapter unter Google-Geräte eingetragen werden kann? Also was kann in der Zelle "in GH konvertieren" bzw. "in ioB konvertieren" eingetragen werden? Welche Parameter gibt es und was bewirken diese?

      Danke euch!

      posted in Cloud Dienste
      L
      lichtraum
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo