Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [gelöst] SayIt -> Audioausgabe verzögert nach 30-40 Sekunden

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    487

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

[gelöst] SayIt -> Audioausgabe verzögert nach 30-40 Sekunden

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
11 Beiträge 3 Kommentatoren 1.4k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Offline
    P Offline
    PrinzEisenherz1
    schrieb am zuletzt editiert von
    #1

    Hi zusammen!

    Ich hab n kleines Problem und vielleicht weiß ja jemand woran das liegt bzw ob das vielleicht sogar normal ist!

    Ich hab auf iobroker mir jetzt den SayIt Adapter installiert über das ich folgendes Script am laufen.

    http://forum.iobroker.net/viewtopic.php … tag#p20982

    Ich Trigger es über einen Bewegungsmelder (der Bewegungsmelder setzt eine Variable auf der CCU auf true wenn ausgelöst)!

    Jetzt ist mir aber aufgefallen das wenn ich am Bewegungsmelder vorbeilaufe es etwa 30-40 Sekunden dauert bis ich die Meldung am Tablet höre.

    Ist das normal?

    Auf dem Tablet hab ich homemediaplayer 24 und Ivona am laufen und am Sayit Adapter hab ich home 24 ohne ftp ausgewählt.

    Wie kann ich die Verzögerung der Ausgabe minimieren? Audioausgabe über Pi vielleicht?

    Gruß

    Johnny

    Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      Hallo,

      wenn ich da richtig verstehe, setzt ein Homematic-Programm eine Variable auf true, sobald der Bewegungsmelder anspringt. Korrekt? Die Aktualisierung des Status der Variable nach ioBroker kann schon mal länger dauern. Sinnvoller ist es, die Logik in ioBroker zu steuern:

      zB alle Bewegungsmelder im Raum Flur:

      $('channel[state.id=*.MOTION](rooms=Flur)').on(function (obj) {
          if (obj.state.val) { // Wenn Bewegung erkannt
              // hier die Aktion rein
          } // Ende Bewegung erkannt
      });
      
      

      oder ein bestimmter Bewegungsmelder:

      on({ id:"hm-rpc.0.KEQ123456.1.MOTION", val: true}, function(obj) {
          // hier die Aktion bei Auslösung des Melders
      });
      
      

      In der Aktion setzt du dann Sayit. Das sollte schneller gehen, als auf die Synchronisierung der HM-Variable zu warten.

      Gruß

      Pix

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        PrinzEisenherz1
        schrieb am zuletzt editiert von
        #3

        Hi Pix!

        Das trifft sich ja gut! Das Script das ich verwende ist eh von Dir fg

        `// Test mit Variable;
        // Besser ist es, gleich den Bewegungsmelder hier abzufragen.
        var idSayVar = "hm-rega.0.38101";
        
        // Definition
        var idSayIt =            "sayit.0.tts.text";
        var lautstaerke = 40;
        
        // Quellen
        var idWetter =           "hm-rega.0.29954";
        var idTemperatursensor = "hm-rpc.0.LEQ0177463.1.TEMPERATURE"; /*Temperatursensor:1.TEMPERATURE*/
        var idGeburtstage =      "javascript.0.Kalenderereignisse.heute";
        
        function ermitteleAnsagedatum () {
            //Wochentag ermitteln
            var d = new Date ();
            var w = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
            var wochentag = w[d.getDay()]; 
        
            //Tagesdatum ermitteln
            var tag = d.getDate();
        
            //Monat ermitteln
            var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
            var monat = month[d.getMonth()];
        
            //Jahr ermitteln
            var jahr = d.getFullYear();
        
            //Stunde ermitteln
            var stunde = d.getHours();
        
            //Minute ermitteln
            var minute = d.getMinutes();
        
            return { // zurückgeben
                'Jahr'      : jahr,
                'Monat'     : monat,
                'Tag'       : tag,
                'Wochentag' : wochentag,
                'Stunde'    : stunde,
                'Minute'    : minute,
                'Sekunde'   : sekunde
            };
        }
        
        function ermitteleWetter () { // Wetterbedingungen
            var wetterdaten = getState(idWetter).val;
            log('Wetter: ' + wetterdaten);
            return(wetterdaten);
        }
        
        function ermitteleAnsageTemperatur () {
            // Die Außentemperatur ist xx. Das Wetter heute ist xx
            // Einfache Temperaturansage mit SayIt.
            // Variante 1 mittels splitten der Temperatur, damit die Ansage nicht
            // "Es sind 18 Punkt 2 Grad " sagt.
        
            var temperatursensor = getState(idTemperatursensor).val;
            var temp_string = temperatursensor.toString();
            log('Temp  ' + temp_string);
            var temp_array = [];
            temp_array = temp_string.split(".");
        
            // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist.
            // Es wird dann nur "18" gelesen.
            if (!temp_array[1]) {
                temp_array[1] = "0";
                log("Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.");
            }
            return{
                'Ganzzahl'      : temp_array[0],
                'Nachkommazahl' : temp_array[1]
            };
        }
        
        function ermitteleGeburtstage () {
            var geburtstage = getState(idGeburtstage).val;
            if (geburtstage.length < 2) { // wenn der Inhalt des Objektes "idGeburtstage" weniger als 2 Zeichen lang ist (also praktisch leer), dann ...
                geburtstage = 'heute keine Geburtstage'; // oder "niemand", "keiner"
            }
            log(geburtstage);
            return (geburtstage);
        }
        
        // ################################### 
        // Trigger für Ansage
        on(idSayVar, function (data) {
        
            var ansagetext = "Guten Morgen, heute ist " + ermitteleAnsagedatum().Wochentag + " der " + ermitteleAnsagedatum().Tag + "te " + ermitteleAnsagedatum().Monat + ' ' + ermitteleAnsagedatum().Jahr 
                    + ". Es ist" + ermitteleAnsagedatum().Stunde + "  Uhr und " + ermitteleAnsagedatum().Minute + "  Minuten." 
                    + " Die Aussentemperatur beträgt " + ermitteleAnsageTemperatur().Ganzzahl + "," + ermitteleAnsageTemperatur().Nachkommazahl + " Grad." 
                    + " Wetter Bedingungen," + ermitteleWetter() +" ."
                    + " Heute haben Geburtstag: "+ ermitteleGeburtstage() +" .";
        
            log('Trigger: ' + data.state.val);
            if (data.state.val === true) {
                setState(idSayIt, lautstaerke + ";" + ansagetext);  // hier also ("40;Guten Morgen ...")
            }
        });
        
        /* Kalenderevent auswerten ----> nur Geburtstage
        
        sucht im iCal Adapter nach events (heute)
        auf Anfrage von Skorpil im Forum erstellt.
        http://forum.iobroker.de/viewtopic.php?f=21&t=2347&p=20627&sid=524f9dda2f313d3cbb183941df61fc38#p20627
        
        27.02.2016 erstellt von Pix
        02.03.2016 Anpassung und Aufbereitung für Sprachausgabe
        */
        
        //Datum als String ermitteln;
        function ermitteleDatum() {
            var d= new Date();
        
            //Tagesdatum ermitteln
                var day = new Array("00","01","02","03","04","05","06","07","06","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");
                var t = day[d.getDate().toString()];
        
            //Monat ermitteln
                var month = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
                var m = month[d.getMonth().toString()];
        
            //Jahr ermitteln
                var j = d.getFullYear().toString();
        
            var datum= t+"."+m+"."+j+" ";
            //log("datum:   " + datum);
            return (datum);
        }
        
        createState('Kalenderereignisse.heute', '', {
            name: 'Events von heute',
            type: 'string'
        });
        
        var idListe =  'Kalenderereignisse.heute';
        
        function pruefeKalender() {
            var inhalt = getState('ical.0.data.table').val;
            var heute = ermitteleDatum();
            try{
                var ereignisse = JSON.stringify(inhalt, null, 2); // Ausgabe als String
                //log(ereignisse);
                var ereignisheute = '', // Liste (kommasepariert)
                    ereignisheute_zeilen = ''; // Liste (mit Zeilenumbruch, zB für Anzeige in VIS)
                for(var i = 0; i <inhalt.length; i++)/{/alle/events/durchgehen/if/(/(inhalt[i].date.indexof(heute)/!="-1)" ||/(inhalt[i].date.indexof('heute')/)/strings/datum/oder/relatives/(nicht/nicht)/gefunden/var/ereignis="inhalt[i].event;" komma/im/namen/ersetzen="">0) ? ', ' : '';
                        ereignisheute = ereignisheute + komma + ereignis;
                        ereignisheute = ereignisheute.replace('Geburtstag von ', ''); // "Geburtstag von " löschen
                    } 
                }
                // Aufbereitung für die Ansage (falls vorhanden, wird letztes Komma durch und ersetzt)
                var lastkomma = ereignisheute.lastIndexOf(','); // letztes Komma in der Reihe
                if (lastkomma != -1) {
                   var vorn = ereignisheute.slice(0,lastkomma-1);
                   var hinten = ereignisheute.slice(lastkomma+1, ereignisheute.length);
                   ereignisheute = vorn + ' und' + hinten;
                }
                // Ende Aufbereitung für die Ansage
        
                setState(idListe, ereignisheute);
                log('Geburtstage: ' + ereignisheute);
            } catch (fehler_try) {
                log('Fehler beim Kalenderevent einlesen ' + fehler_try);
            }
        }
        
        // bei Aktualisierung des Kalenders
        on ({id:'ical.0.events.Geburtstag', change: 'any'}, function(data) {
            pruefeKalender();
        });
        
        //bei Skriptstart
        pruefeKalender();</inhalt.length;>` 
        
        Ich hab jetzt bloß auf die schnelle Dein Originalscript eingefügt weil ich gerade unterwegs bin!
        
        Danke für Deinen Tipp! Klingt logisch! Dauert ja auch lange wenn sich der Status z.B. eines Fensterkontaktes ändert bis es auf VIS angezeigt wird!
        
        Könntest Du mir vielleicht nur noch kurz sagen wo ich das am besten in Deinem Script einbinde?
        
        Danke schon mal!
        
        Johnny[/i][/i][/i]
        

        Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

        1 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          pix
          schrieb am zuletzt editiert von
          #4

          Hallo Johnny,

          ich erinnere mich.

          Ist ganz einfach: oben in der 3. Zeile statt var idSayVar = "hm-rega.0.38101"; einfach

          var idSayVar = "hm-rpc.0.IDBEwegungsmelder.1.MOTION";
          
          ````eintragen. Dann sollte es laufen. Weiter unten im Code steht die Überwachung __on (idSayVar)__. Den Kommentaren im Code entnehme ich, dass das Problem mit dem Bewegungsmelder wohl schon damals bestand.
          ~~@PrinzEisenherz1:~~ 
          
          > Dauert ja auch lange wenn sich der Status z.B. eines Fensterkontaktes ändert bis es auf VIS angezeigt wird! `  
          Genau, selbes Problem. Bitte den TFK direkt in Javascript abfragen und nicht die Homematic-Variable. Rega wird nicht schnell genug synchronisiert.
          
          Gruß
          
          Pix

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Antwort Letzte Antwort
          0
          • P Offline
            P Offline
            PrinzEisenherz1
            schrieb am zuletzt editiert von
            #5

            Danke Pix!

            Jetzt gibt's aber noch n kleines Problem und zwar würde ja das Script bei jeder Bewegungserkennung auslösen, richtig?

            Über die HM hatte ich es über ein Programm so gesteuert das wenn im Zeitraum 06:20 bis 06:45 und von 07:30-08:30 eine Bewegung erkannt wird dann wird eine Variable auf true gesetzt und das Script dadurch nur einmal ausgelöst. Um 06:50 und um 08:40 hab ich dann die Variable wieder auf false gesetzt.

            Wie kann ich das in dem Script lösen?

            Johnny

            Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

            1 Antwort Letzte Antwort
            0
            • ruhr70R Offline
              ruhr70R Offline
              ruhr70
              schrieb am zuletzt editiert von
              #6

              schau mal hier:

              http://forum.iobroker.net/viewtopic.php … ange#p8484

              Adapter: Fritzbox, Unify Circuit
              Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                pix
                schrieb am zuletzt editiert von
                #7

                Hallo Johnny,

                lege ein neues Script an. Es nutzt die Funktion isTimeInRange. http://forum.iobroker.net/viewtopic.php?f=21&t=1072

                // isTimeInRange
                function currentDate() {
                    var d = new Date();
                    return new Date(d.getFullYear(), d.getMonth(), d.getDate());
                }
                function addTime(strTime) {
                    var time = strTime.split(':');
                    var d = currentDate();
                    d.setHours(time[0]);
                    d.setMinutes(time[1]);
                    d.setSeconds(time[2]);
                    return d;
                }
                function isTimeInRange(strLower, strUpper) {
                    var now = new Date();
                    var lower = addTime(strLower);
                    var upper = addTime(strUpper);
                    var inRange = false;
                    if (upper > lower) {
                        // opens and closes in same day
                        inRange = (now >= lower && now <= upper) ? true : false;
                    } else {
                        // closes in the following day
                        inRange = (now >= upper && now <= lower) ? false : true;
                    }
                    return inRange;
                }
                // isTimeInRange ENDE
                
                createState('Sayit.Trigger', false, {
                    name: 'Sayit-Ansage bei Bewegung steuern',
                    type: 'boolean'
                });
                createState('Sayit.Zeitsteuerung', false, {
                    name: 'Sayit-Ansage nur innerhalb Zeitfenster schalten',
                    type: 'boolean'
                });
                
                var idBewegung = "hm-rpc.0.IDBEwegungsmelder.1.MOTION",
                    idTrigger = 'Sayit.Trigger';
                
                on({id: idBewegung, val: true}, function (obj) {
                   if ( isTimeInRange('06:20:00', '06:45:00') || isTimeInRange('07:30:00', '08:30:00') ) setState(idTrigger, true); // Trigger auslösen
                });
                
                // Zurücksetzen vom Trigger
                schedule("50 6 * * *", function () {
                    setState(idTrigger, false);
                });
                schedule("40 8 * * *", function () {
                    setState(idTrigger, false);
                });
                
                

                Im anderen Skript mit der Ansage setzt du dann oben bei idSayVar = 'javascript.0.Sayit.Trigger' ein.

                Gruß

                Pix

                ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                1 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  PrinzEisenherz1
                  schrieb am zuletzt editiert von
                  #8

                  Pix, Du bist mein persönlicher Held des heutigen Tages!

                  Perfekt!

                  Tausend Dank!

                  Gruß

                  Johnny

                  Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

                  1 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    PrinzEisenherz1
                    schrieb am zuletzt editiert von
                    #9

                    Hi Pix! Ich hab da doch nochmal ne Frage bezgl dem Geburtstags-/SayIt-Skript von Dir!

                    Wo setzt Du da einen Schedule damit die Aktualisierung des Kalenders reibungslos läuft!

                    Bei mir läuft es noch so wie in Deinem Ursprungsscript ohne Schedule und jetzt aktualisiert das Script die Kalenderabfrage bzgl Geburtstage nicht!

                    Johnny

                    Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

                    1 Antwort Letzte Antwort
                    0
                    • P Offline
                      P Offline
                      pix
                      schrieb am zuletzt editiert von
                      #10

                      Hallo,@PrinzEisenherz1:

                      Hi Pix! Ich hab da doch nochmal ne Frage bezgl dem Geburtstags-/SayIt-Skript von Dir!

                      Wo setzt Du da einen Schedule damit die Aktualisierung des Kalenders reibungslos läuft!

                      Bei mir läuft es noch so wie in Deinem Ursprungsscript ohne Schedule und jetzt aktualisiert das Script die Kalenderabfrage bzgl Geburtstage nicht!

                      Johnny `
                      scheib es einfach unten drunter, also unter//bei Skriptstart pruefeKalender();scheibst du noch den schedule````
                      //zu einer bestimmten Uhrzeit, hier beispielsweise zwei Minuten nach Mitternacht (also am besten, einmal zu Beginn des Tages, aber kurz nachdem iCal gemäß der iCal-Einstellungen aktualisiert hat)
                      schedule("2 0 * * *", pruefeKalender);

                      
                      Gruß
                      
                      Pix

                      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                      1 Antwort Letzte Antwort
                      0
                      • P Offline
                        P Offline
                        PrinzEisenherz1
                        schrieb am zuletzt editiert von
                        #11

                        Super! Dankeschön Pix!

                        Wünsche dir noch n schönes Wochenende!

                        Gruß Johnny

                        Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate
                        FAQ Cloud / IOT
                        HowTo: Node.js-Update
                        HowTo: Backup/Restore
                        Downloads
                        BLOG

                        600

                        Online

                        32.7k

                        Benutzer

                        82.5k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe