Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Problem] Ungewollte SayIt-Ansage nach ioBroker-Neustart

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Problem] Ungewollte SayIt-Ansage nach ioBroker-Neustart

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      dtp last edited by

      Hallo,

      ich habe fogendes sayIt-Skript bei mir laufen:

      var idSayIt = "sayit.0.tts.text";
      var date;
      
      // EG Flur SV Tablet Kamera
      on({id: "hm-rega.0.2727", val: true}, function(){
        setState(idSayIt, 'de;100;Achtung. Ihr Einbruch wurde registriert und wir haben bereits die Polizei verständigt.'); 
      });
      
      // CCU CUxD Timer Abwesenheit.WORKING
      on({id: "javascript.0.AlarmCountdown", change: "gt"}, function(obj){
        setState(idSayIt, 'Achtung. Alarmanlage in '+obj.state.val+' Sekunden scharf. Zum Entschärfen Haustür aufschließen.'); 
      });
      
      // Heizungsanlage Betriebsart
      on({id: "viessmann.0.get.VitoBetriebsart", change: "ne"}, function(obj){
        date = new Date();
        if((6 < date.getHours()) && (date.getHours() < 23)){
          setState(idSayIt, 'Betriebsart der Heizunmgsanlage auf '+obj.state.val+' geändert.'); 
        }
      });
      
      // Heizungsanlage Partybetrieb
      on({id: "viessmann.0.get.VitoBetriebParty", change: "ne"}, function(obj){
        date = new Date();
        if((6 < date.getHours()) && (date.getHours() < 23)){
          if(obj.state.val === "aus"){
            setState(idSayIt, 'Partybetrieb der Heizungsanlage ausgeschaltet.');
          }
          if(obj.state.val === "an"){
            setState(idSayIt, 'Partybetrieb der Heizungsanlage eingeschaltet.');
          }
        }
      });
      
      // Heizungsanlage Sparbetrieb
      on({id: "viessmann.0.get.VitoBetriebSpar", change: "ne"}, function(obj){
        date = new Date();
        if((6 < date.getHours()) && (date.getHours() < 23)){
          if(obj.state.val === "aus"){
            setState(idSayIt, 'Sparbetrieb der Heizungsanlage ausgeschaltet.');
          }
          if(obj.state.val === "an"){
            setState(idSayIt, 'Sparbetrieb der Heizungsanlage eingeschaltet.');
          }
        }
      });
      

      Nach einem reboot des Raspi bzw. einem Neustart von ioBroker werden jedes Mal die beiden letzten Ansagen "Partybetrieb der Heizungsanlage ausgeschaltet." und "Sparbetrieb der Heizungsanlage ausgeschaltet." auf meinem Tablet ausgegeben, obwohl sich deren Zustand eigentlich gar nicht geändert hat (ist immer aus). Nun ergeben sich zwei Fragen:

      1. Wieso erfolgt nicht auch eine Ansage zur Betriebsart?

      2. Wie kann ich die Ansagen nach einem Neustart vermeiden?

      Gruß,

      Thorsten

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Vermutlich startet das Skript bevor der Vitotronic-Adapter seine Initialisierung beendet hat.
        @dtp:

        Wie kann ich die Ansagen nach einem Neustart vermeiden? `
        Vielleicht hilft es, das Skript (mit Hilfe eines separaten Skriptes) zu stoppen und verzögert wieder zu starten. Habe mal getestet und festgestellt, dass stopScript('Scriptname') leider nicht funktioniert. Versuche es mal so:

        var obj = getObject('script.js.Skriptname');
        obj.common.enabled = false;
        setObject('script.js.Skriptname', obj);  // Skript stoppen
        
        setTimeout(function() {
            runScript('Skriptname');
        }, 10000);  // nach 10 s wieder starten
        
        
        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 last edited by

          Anderer Vorschlag: Eine Freigabeverzögerung nach Skriptstart einbauen:

          var idSayIt = "sayit.0.tts.text";
          var date;
          var startDelay = false;
          
          setTimeout(function() {
              startDelay = true;
          }, 10000);
          ...
          
          

          und dann die Abfragen erweitern:

            if((6 < date.getHours()) && (date.getHours() < 23) && startDelay){
          
          
          1 Reply Last reply Reply Quote 0
          • D
            dtp last edited by

            Hallo paul53,

            vielen Dank für die Hilfe. Doch leider kommen die Ansagen immer noch. Nun entsprechend verzögert. Gibt es keine Möglichkeit, den Neustart von ioBroker abzufragen und dann eine entsprechende if-Abfrage einzufügen?

            Gruß,

            Thorsten

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              @dtp:

              Gibt es keine Möglichkeit, den Neustart von ioBroker abzufragen und dann eine entsprechende if-Abfrage einzufügen? `
              Genau das passiert mit der zusätzlichen Auswertung von startDelay. Da mit ioBroker-Neustart alle Adapter und somit alle Skripte gestartet werden, wird startDelay erst auf false und nach 10 s auf true gesetzt. Folglich können Wertänderungen der Vitotronic-Datenpunkte innerhalb der ersten 10 s nach ioBroker-Neustart keine Reaktion (sayit) auslösen.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              668
              Online

              31.7k
              Users

              79.8k
              Topics

              1.3m
              Posts

              2
              5
              888
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo