Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Portierung CCU.IO

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Portierung CCU.IO

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

      Hi Bluefox
      @Bluefox:

      Ich habe jetzt dein Skript auf das reduziert:

            setState('sayit.0.tts.text', 'Die Waschmaschine ist fertig');
            setState('sayit.0.tts.text', 'Der Trockner ist fertig');
      
      

      Bei mir auf Raspi2 stürzt nichts ab. Und bei dir? `

      Das ist doch das Script was ich oben zum Testen gepostet habe. Nur ohne den Trigger drum rum.

      Soll ich nur ein Script mit diesen zwei Zeilen schreiben?

      Wie, oder wodurch wird das ausgeführt wenn es keinen "ON…" Code gibt??

      Gruss Ralf
      3476_log.txt

      1 Reply Last reply Reply Quote 0
      • D
        derrapf last edited by

        Ah, ja.

        Geht. Wenn man das Script speichert wird es scheinbar gleich augeführt.

        Ergebnis: Der erste Satz wird gesagt; beim zweiten Satz krachts. Und jetzt?

        hm-rpc.0	2015-11-13 00:31:26	error	hm-rpc.0 Error: not connected
        host-bananapi	2015-11-13 00:31:26	info	Restart adapter system.adapter.sayit.0 because enabled
        host-bananapi	2015-11-13 00:31:26	error	instance system.adapter.sayit.0 terminated with code 6 (uncaught exception)
        Error:	2015-11-13 00:31:25	error	at TCP.close (net.js:485:12)
        Error:	2015-11-13 00:31:25	error	at TLSSocket.emit (events.js:129:20)
        Error:	2015-11-13 00:31:25	error	at TLSSocket.socketCloseListener (_http_client.js:247:23)
        Error:	2015-11-13 00:31:25	error	at createHangUpError (_http_client.js:215:15)
        Error:	2015-11-13 00:31:25	error	socket hang up
        uncaught	2015-11-13 00:31:25	error	exception: socket hang up
        Error:	2015-11-13 00:31:25	error	at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19)
        Error:	2015-11-13 00:31:25	error	at exports._errnoException (util.js:746:11)
        Error:	2015-11-13 00:31:25	error	connect EHOSTUNREACH
        uncaught	2015-11-13 00:31:25	error	exception: connect EHOSTUNREACH
        sayit-0	2015-11-13 00:31:22	info	saying: Der Trockner ist fertig
        hm-rega-0	2015-11-13 00:31:18	info	State 48905 0
        hm-rega-0	2015-11-13 00:31:18	info	State 46718 21.5
        hm-rega-0	2015-11-13 00:31:18	info	State 46717 39.1
        hm-rega-0	2015-11-13 00:31:18	info	State 46031 0
        hm-rega-0	2015-11-13 00:31:18	info	State 46030 2
        hm-rega-0	2015-11-13 00:31:18	info	State 44879 2
        hm-rega-0	2015-11-13 00:31:17	info	State 42820 true
        sayit-0	2015-11-13 00:31:17	info	saying: Die Waschmaschine ist fertig
        

        Gruss Ralf
        6359_logfilemultiroom.txt.zip.txt

        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          Hallo Ralf,

          die beiden Ansagen kommen natürlich ultrakurz hingereinander. Die Maschine kann schneller denken, als reden.

          Kannst du mal eine kleine Verzögerung einbauen?

          setState('sayit.0.tts.text', 'Die Waschmaschine ist fertig');
          setStateDelayed('sayit.0.tts.text', 'Der Trockner ist fertig', 5000);
          

          Gruß

          Pix

          1 Reply Last reply Reply Quote 0
          • D
            derrapf last edited by

            Hallo Pix, Hallo bluefox

            Es bleibt ominös bei mir.

            Eben wollte ich die Pix'sche Scriptverion probieren, als ich feststellen musste, dass IoBroker nicht mehr reagierte. Da ich zwischenzeitlich auf dem Bananapi mit MQTT rumgespielt und ein paar Dinge intalliert hatte, war ich nicht sonderlich verwundert und habe IOBroker neu gestartet.

            Danach habe ich nochmal das Testscript (ohne die Verzögerung) gestartet und auf einmal hat der Sayit beide Sätze ohne abzurauchen gesagt.

            Juhu, dachte ich, dann probierst Du mal das "richtige" Script; und siehe da: Es meldet sowohl die fertige Waschmaschine als auch den fertigen Trockner.

            Da ich inzwischen das Script erweitert hatte, dass auch das zu lange geöffnete Badfenster gemeldet wird, bin ich mutig geworden und habe die entsprechende Variable auf den Wert "daueroffen" gesetzt: Hat auch geklappt!

            Mein Übermut wurde immer grösser und die Variable wurde auf den dritten Wert gesetzt den sie hat: "zu lange offen": Krach!

            Und schon hat es wieder geknallt. Der Code ist der Gleiche, nur der Satz ein anderer.

            Also habe ich (Pix'sche Timing Theorie) gewartet. Lange. Und nochmal den entsprechenden Satz sagen lassen:

            Und was soll ich sagen: Es krachte schon wieder.

            Irgendwie finde ich kein Muster bei diesem seltamen Verhalten. Das einzige was bleibt ist ein sehr instabiler Eindruck dieses Moduls. Ich poste hier nochmal den Code und das Log, obwohl ich nicht glaube, dass das hier noch irgend jemand versteht…

            Code

            var idSprache        = 'sayit.0.tts.text';    // Sprachausgabe Browser
            
            var idWaschmaschine  = 'hm-rega.0.39968';     //STAT_Waschmaschine_fertig
            var idTrockner       = 'hm-rega.0.44879';     //STAT_W.Trockner_fertig
            var idBad_daueroffen = 'hm-rega.0.37449';     //Badezimmer_Alarm_daueroffen. Werte: zu; daueroffen; zu lang offen
            
            var timer = {};
            var debug = true;
            var repeat = true;
            var no_repeat = false;
            
            on ({id: idBad_daueroffen, val: 'daueroffen'}, function (data) {
               //sayOpen(idBad_daueroffen, "Achtung Systemmeldung um " +d.getHours() + " Uhr und " + d.getMinutes() + " Minuten:", 1000, no_repeat);
               saySomething(idBad_daueroffen, 'Achtung. Das Badezimmerfenster ist schon lenger als 15 Minuten offen', no_repeat);
            });  
            
            on ({id: idBad_daueroffen, val: 'zu lang offen'}, function (data) {
               //sayOpen(idBad_daueroffen, "Achtung Systemmeldung um " +d.getHours() + " Uhr und " + d.getMinutes() + " Minuten:", 1000; no_repeat);
               saySomething(idBad_daueroffen, 'Das Fenster im Bad ist schon lenger als eine halbe Stunde offen. Bitte endlich mal zu machen.', repeat);
            });  
            
            //----------------------------------------- Waschmaschine und Trockner --------------------------------
            on ({id: idWaschmaschine, val: 'fertig'}, function (data) {
               saySomething(idWaschmaschine, 'Die Waschmaschine ist fertig');
            });     
            
            on ({id: idTrockner, val: 'fertig'}, function (data) {
               saySomething(idTrockner, 'Der Trockner ist fertig');
            });  
            
            function saySomething(idGeraet, text, repeat)
            {
               // Sage zum ersten Mal
               var d = new Date ();
               var h = d.getHours();
            
               if (debug || (h < 22) && (h > 9)) // nur zwischen 9 und 20 Uhr
               {
                  log('Saying: ' + text);
                  setState(idSprache, text);
            
                 if (repeat)
                 {
                  // Sag jede 10 Min Text an           
                  timer[idGeraet] = setInterval(function() {
                     log('Timer[' + idGeraet + ']=' + timer[idGeraet]);
                     log('Get State=' + getState(idGeraet).val);
                     if (getState(idGeraet).val == 2)
                     {
                        log('Saying again: ' + text);
                        setState(idSprache, text);
                     }
                     else
                     {
                        if (timer[idGeraet]) clearInterval(timer[idGeraet]);
                        timer[idGeraet] = null;
                     }
                  }, 600000);
                 }
               }
            }
            
            

            Und hier die Logs. Man sieht, dass mehrfach die Texte richtig gesagt wurden aber es zwischen durch immer wieder Fehler gab.

            Unter anderem den Fehler > hm-rpc-0 2015-11-14 17:53:04 error Error: not connected und ein Node-Red Fehler

            Ich hoffe nicht, dass die damit zuammen hängen..
            > host-bananapi 2015-11-14 17:54:06 error instance system.adapter.node-red.0 terminated with code 7 (Adapter already running)

            host-bananapi	2015-11-14 17:51:59	info	Restart adapter system.adapter.sayit.0 because enabled
            host-bananapi	2015-11-14 17:51:59	error	instance system.adapter.sayit.0 terminated with code 6 (uncaught exception)
            TypeError:	2015-11-14 17:51:58	error	at FSReqWrap.oncomplete (fs.js:95:15)
            TypeError:	2015-11-14 17:51:58	error	at /opt/iobroker/node_modules/iobroker.sayit/main.js:276:21
            TypeError:	2015-11-14 17:51:58	error	at getLength (/opt/iobroker/node_modules/iobroker.sayit/main.js:164:27)
            TypeError:	2015-11-14 17:51:58	error	at /opt/iobroker/node_modules/iobroker.sayit/main.js:277:39
            TypeError:	2015-11-14 17:51:58	error	at /opt/iobroker/node_modules/iobroker.sayit/main.js:415:21
            TypeError:	2015-11-14 17:51:58	error	at cacheFile (/opt/iobroker/node_modules/iobroker.sayit/main.js:397:5)
            TypeError:	2015-11-14 17:51:58	error	at sayItSystem (/opt/iobroker/node_modules/iobroker.sayit/main.js:672:9)
            TypeError:	2015-11-14 17:51:58	error	at sayFinished (/opt/iobroker/node_modules/iobroker.sayit/main.js:203:45)
            TypeError:	2015-11-14 17:51:58	error	Cannot read property 'text' of undefined
            uncaught	2015-11-14 17:51:58	error	exception: Cannot read property 'text' of undefined
            sayit-0	2015-11-14 17:51:58	warn	Received file is too short:
            sayit-0	2015-11-14 17:51:58	warn	Cannot read length of file /opt/iobroker/node_modules/iobroker.sayit/say.mp3
            sayit-0	2015-11-14 17:51:58	warn	Received file is too short:
            sayit-0	2015-11-14 17:51:57	info	saying: Das Fenster im Bad ist schon lenger als eine halbe Stunde offen. Bitte endlich mal zu machen.
            hm-rega-0	2015-11-14 17:51:56	info	State 37449 zu lang offen
            javascript-0	2015-11-14 17:51:56	info	script.js.Statusaenderungen_sagen: Saying: Das Fenster im Bad ist schon lenger als eine halbe Stunde offen. Bitte endlich mal zu machen.
            hm-rega-0	2015-11-14 17:51:56	info	State 37449 zu lang offen
            ...
            hm-rega-0	2015-11-14 17:51:48	info	State 36815 8.19
            hm-rega-0	2015-11-14 17:51:48	info	State 36162 7
            host-bananapi	2015-11-14 17:51:48	info	Restart adapter system.adapter.node-red.0 because enabled
            host-bananapi	2015-11-14 17:51:48	error	instance system.adapter.node-red.0 terminated with code 7 (Adapter already running)
            hm-rega-0	2015-11-14 17:51:48	info	State 34330 5.3
            ...
            hm-rega-0	2015-11-14 17:51:41	info	State 41 10
            host-bananapi	2015-11-14 17:51:41	info	instance system.adapter.node-red.0 started with pid 17945
            javascript-0	2015-11-14 17:51:37	info	script.js.Statusaenderungen_sagen: Get State=0
            javascript-0	2015-11-14 17:51:37	info	script.js.Statusaenderungen_sagen: Timer[hm-rega.0.37449]=null
            hm-rpc-0	2015-11-14 17:51:34	error	Error: not connected
            ...
            hm-rega-0	2015-11-14 17:51:11	info	State 41 10
            host-bananapi	2015-11-14 17:51:11	info	Restart adapter system.adapter.node-red.0 because enabled
            host-bananapi	2015-11-14 17:51:11	error	instance system.adapter.node-red.0 terminated with code 7 (Adapter already running)
            host-bananapi	2015-11-14 17:51:07	info	instance system.adapter.node-red.0 started with pid 17938
            hm-rega-0	2015-11-14 17:50:48	info	State 48905 66
            ...
            hm-rega-0	2015-11-14 17:50:41	info	State 41 10
            host-bananapi	2015-11-14 17:50:37	info	Restart adapter system.adapter.node-red.0 because enabled
            host-bananapi	2015-11-14 17:50:37	error	instance system.adapter.node-red.0 terminated with code 7 (Adapter already running)
            host-bananapi	2015-11-14 17:50:33	info	instance system.adapter.node-red.0 started with pid 17931
            ...
            hm-rpc-0	2015-11-14 17:50:04	error	Error: not connected
            host-bananapi	2015-11-14 17:50:03	info	Restart adapter system.adapter.node-red.0 because enabled
            host-bananapi	2015-11-14 17:50:03	error	instance system.adapter.node-red.0 terminated with code 7 (Adapter already running)
            host-bananapi	2015-11-14 17:50:00	info	instance system.adapter.node-red.0 started with pid 17924
            javascript-0	2015-11-14 17:49:50	info	script.js.Statusaenderungen_sagen: Get State=0
            javascript-0	2015-11-14 17:49:50	info	script.js.Statusaenderungen_sagen: Timer[hm-rega.0.37449]=null
            
            
            1 Reply Last reply Reply Quote 0
            • P
              pix last edited by

              Hallo,

              das ist ja verzwickt. Hier noch ein paar Versuche:

              ` > ````

              javascript-0 2015-11-14 17:51:56 info script.js.Statusaenderungen_sagen: Saying: Das Fenster im Bad ist schon lenger als eine halbe Stunde offen. Bitte endlich mal zu machen.
              ```` `
              Der Text hat schon sehr viele Zeichen. Ich habe mit solch langen Texten immer wieder Probleme.

              Das Log meldet ein Problem mit der Variable 'text'. Umgehe das doch nochmal und lasse die Erinnerungsfunktion 'saySomething' erstmal weg.

              Alternativ oder vielleicht probierst du zuerst:

              saySomething erwartet (idGeraet, text, repeat) - ich weiß nicht, ob repeat optional ist oder doch jedesmal mit übergeben werden muss. Kann es sein, dass der Adapter das 'true' oder 'false' aus repeat evtl. in der Funktion in 'text' schreiben will, wenn du nur zwei der drei Parameter übergibst? Ausserdem ist es unglücklich, 'repeat' oben für das ganze Skript zu deklarieren und in saySomething nochmal. Und eine Variable 'repeat' reicht doch, da boolean. Da brauchst du no-repeat nicht mehr.

              Besser so:

              var idSprache        = 'sayit.0.tts.text';    // Sprachausgabe Browser
              
              var idWaschmaschine  = 'hm-rega.0.39968';     //STAT_Waschmaschine_fertig
              var idTrockner       = 'hm-rega.0.44879';     //STAT_W.Trockner_fertig
              var idBad_daueroffen = 'hm-rega.0.37449';     //Badezimmer_Alarm_daueroffen. Werte: zu; daueroffen; zu lang offen
              
              var timer = {};
              var debug = true;
              var repeat = false; // bei Skriptstart ausschalten
              
              // Eigentlich reicht ein subscribe, in dem alle 3 Zustände abgefragt werden, aber zum Test mal so:
              on ({id: idBad_daueroffen, val: 'zu'}, function (data) {
                 repeat = false;
              });  
              
              on ({id: idBad_daueroffen, val: 'daueroffen'}, function (data) {
                 repeat = false; // Einmalige Ansage
                 //sayOpen(idBad_daueroffen, "Achtung Systemmeldung um " +d.getHours() + " Uhr und " + d.getMinutes() + " Minuten:", 1000, repeat);
                 saySomething(idBad_daueroffen, 'Achtung. Das Badezimmerfenster ist schon lenger als 15 Minuten offen', repeat);
              });  
              
              on ({id: idBad_daueroffen, val: 'zu lang offen'}, function (data) {
                  repeat = true; // Ansage wiederholen
                 //sayOpen(idBad_daueroffen, "Achtung Systemmeldung um " +d.getHours() + " Uhr und " + d.getMinutes() + " Minuten:", 1000; repeat);
                 saySomething(idBad_daueroffen, 'Das Fenster im Bad ist schon lenger als eine halbe Stunde offen. Bitte endlich mal zu machen.', repeat);
              });  
              
              //----------------------------------------- Waschmaschine und Trockner --------------------------------
              on ({id: idWaschmaschine, val: 'fertig'}, function (data) {
                 saySomething(idWaschmaschine, 'Die Waschmaschine ist fertig', false); // nicht wiederholen
              });     
              
              on ({id: idTrockner, val: 'fertig'}, function (data) {
                 saySomething(idTrockner, 'Der Trockner ist fertig', false); // nicht wiederholen
              });  
              
              function saySomething(idGeraet, text, wiederholung)
              {
                 // Sage zum ersten Mal
                 var d = new Date ();
                 var h = d.getHours();
              
                 if (debug || (h < 22) && (h > 9)) // nur zwischen 9 und 20 Uhr
                 {
                    log('Saying: ' + text);
                    setState(idSprache, text);
              
                   if (wiedeholung)
                   {
                    // Sag jede 10 Min Text an           
                    timer[idGeraet] = setInterval(function() {
                       log('Timer[' + idGeraet + ']=' + timer[idGeraet]);
                       log('Get State=' + getState(idGeraet).val);
                       if (getState(idGeraet).val == 2)
                       {
                          log('Saying again: ' + text);
                          setState(idSprache, text);
                       }
                       else
                       {
                          if (timer[idGeraet]) clearInterval(timer[idGeraet]);
                          timer[idGeraet] = null;
                       }
                    }, 600000);
                   }
                 }
              
              }
              

              Gruß

              Pix

              1 Reply Last reply Reply Quote 0
              • D
                derrapf last edited by

                Hallo Pix

                Danke, dass Du Dich meiner annimmst.

                Dein Code zeigt aber den gleichen Effekt:

                Alle Sayings funktionieren. Nur das eine nicht:

                sayit.0	2015-11-15 21:15:02	info	sayit.0 Upload announce mp3 files
                sayit.0	2015-11-15 21:15:02	info	sayit.0 starting. Version 0.3.11 in /opt/iobroker/node_modules/iobroker.sayit
                bananapi	2015-11-15 21:14:58	info	host.bananapi instance system.adapter.sayit.0 started with pid 4849
                bananapi	2015-11-15 21:14:28	info	host.bananapi Restart adapter system.adapter.sayit.0 because enabled
                bananapi	2015-11-15 21:14:28	error	host.bananapi instance system.adapter.sayit.0 terminated with code 6 (uncaught exception)
                sayit.0	2015-11-15 21:14:27	error	Error: socket hang up at createHangUpError (_http_client.js:215:15) at TLSSocket.socketCloseListener (_http_client.js:247:23) at TLSSocket.emit (events.js:129:20) at TCP.close (net.js:
                sayit.0	2015-11-15 21:14:27	error	uncaught exception: socket hang up
                sayit.0	2015-11-15 21:14:27	error	Error: connect EHOSTUNREACH at exports._errnoException (util.js:746:11) at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19)
                sayit.0	2015-11-15 21:14:27	error	uncaught exception: connect EHOSTUNREACH
                sayit-0	2015-11-15 21:14:24	info	saying: Das Fenster im Bad ist schon lenger als eine halbe Stunde offen.
                hm-rega-0	2015-11-15 21:14:24	info	Got unexpected ID: hm-rega.0.37449
                javascript-0	2015-11-15 21:14:24	info	script.js.Test2: Saying: Das Fenster im Bad ist schon lenger als eine halbe Stunde offen.
                sayit-0	2015-11-15 21:14:13	info	saying: Achtung. Das Badezimmerfenster ist schon lenger als 15 Minuten offen
                javascript-0	2015-11-15 21:14:13	info	script.js.Test2: Saying: Achtung. Das Badezimmerfenster ist schon lenger als 15 Minuten offen
                hm-rega-0	2015-11-15 21:14:13	info	Got unexpected ID: hm-rega.0.37449
                sayit-0	2015-11-15 21:13:59	info	saying: Der Trockner ist fertig
                hm-rega-0	2015-11-15 21:13:59	info	Got unexpected ID: hm-rega.0.44879
                javascript-0	2015-11-15 21:13:59	info	script.js.Test2: Saying: Der Trockner ist fertig
                sayit-0	2015-11-15 21:13:51	info	saying: Die Waschmaschine ist fertig
                javascript-0	2015-11-15 21:13:51	info	script.js.Test2: Saying: Die Waschmaschine ist fertig
                

                Gruss Ralf

                1 Reply Last reply Reply Quote 0
                • P
                  pix last edited by

                  Für mich liegt der Fehler im TTS-Adapter, nicht im Javascript.

                  Das sind meine Einstellungen. EinsUnterschied zu Deinen aus diesem Beitrag (http://forum.iobroker.net/download/file … &mode=view) ist die Einstellung bei Typ.

                  261_bildschirmfoto_2015-11-16_um_13.13.58.jpg

                  Gruß

                  Pix

                  1 Reply Last reply Reply Quote 0
                  • D
                    derrapf last edited by

                    Hallo Pix

                    Bei mir sieht's anders aus: Typ ist "System" weil ja der Banana-Pi über die an ihm angeschlossenen Aktivboxen reden soll.

                    Systemkommando ist leer und bei Ankündigung steht "keins"

                    Und jetzt kommt der Hammer: Ich habe heute gefühlt ca. 1000 mal den Banana-Pi rebootet, weil er einfach kein Default-Gateway für's WLAN hatte. Manuell konnte man auf der Konsole mitsudo route add default gw 192.168.1.1 wlan0eines hinzufügen, aber nach dem Booten musste man diesen Befehl immer wieder von Hand eingeben. Ich habe zig Versuche mit````
                    up route add default gw 192.168.1.1 dev wlan0

                    
                    Wie auch immer: Nachdem ich hier Erfolg verbuchen konnte, wollte ich nochmal Pix's Script untersuchen und testen.
                    
                    Und was soll ich sagen: Auf einmal funktioniert alles. Hä? Warum?? Wer soll das denn blicken?
                    
                    Hier nochmal der Code der geht:
                    

                    var idSprache = 'sayit.0.tts.text'; // Sprachausgabe Browser

                    var idWaschmaschine = 'hm-rega.0.39968'; //STAT_Waschmaschine_fertig
                    var idTrockner = 'hm-rega.0.44879'; //STAT_W.Trockner_fertig
                    var idBad_daueroffen = 'hm-rega.0.37449'; //Badezimmer_Alarm_daueroffen. Werte: zu; daueroffen; zu lang offen

                    var timer = {};
                    var debug = true;
                    var repeat = false; // bei Skriptstart ausschalten

                    // Eigentlich reicht ein subscribe, in dem alle 3 Zustände abgefragt werden, aber zum Test mal so:
                    on ({id: idBad_daueroffen, val: 'zu'}, function (data) {
                    repeat = false;
                    });

                    on ({id: idBad_daueroffen, val: 'daueroffen'}, function (data) {
                    repeat = false; // Einmalige Ansage
                    //sayOpen(idBad_daueroffen, "Achtung Systemmeldung um " +d.getHours() + " Uhr und " + d.getMinutes() + " Minuten:", 1000, repeat);
                    saySomething(idBad_daueroffen, 'Achtung. Das Badezimmerfenster ist schon lenger als 15 Minuten offen', repeat);
                    });

                    on ({id: idBad_daueroffen, val: 'zu lang offen'}, function (data) {
                    repeat = true; // Ansage wiederholen
                    //sayOpen(idBad_daueroffen, "Achtung Systemmeldung um " +d.getHours() + " Uhr und " + d.getMinutes() + " Minuten:", 1000; repeat);
                    saySomething(idBad_daueroffen, 'Das Fenster im Bad ist schon lenger als eine halbe Stunde offen.', repeat);
                    });

                    //----------------------------------------- Waschmaschine und Trockner --------------------------------
                    on ({id: idWaschmaschine, val: 'fertig'}, function (data) {
                    saySomething(idWaschmaschine, 'Die Waschmaschine ist fertig', false); // nicht wiederholen
                    });

                    on ({id: idTrockner, val: 'fertig'}, function (data) {
                    saySomething(idTrockner, 'Der Trockner ist fertig', false); // nicht wiederholen
                    });

                    function saySomething(idGeraet, text, wiederholung)
                    {
                    // Sage zum ersten Mal
                    var d = new Date ();
                    var h = d.getHours();

                    if (debug || (h < 22) && (h > 9)) // nur zwischen 9 und 20 Uhr
                    {
                    log('Saying: ' + text);
                    setState(idSprache, text);

                     if (wiederholung)
                     {
                      // Sag jede 10 Min Text an           
                      timer[idGeraet] = setInterval(function() {
                         log('Timer[' + idGeraet + ']=' + timer[idGeraet]);
                         log('Get State=' + getState(idGeraet).val);
                         if (getState(idGeraet).val == 2)
                         {
                            log('Saying again: ' + text);
                            setState(idSprache, text);
                         }
                         else
                         {
                            if (timer[idGeraet]) clearInterval(timer[idGeraet]);
                            timer[idGeraet] = null;
                         }
                      }, 600000);
                     }
                    

                    }

                    }

                    
                    Ich bin mal gespannt wie lange.
                    
                    Jetzt teste ich mal ob es wirklich an der Länge des Textes liegt.
                    
                    Werde berichten.
                    
                    Gruss Ralf
                    1 Reply Last reply Reply Quote 0
                    • D
                      derrapf last edited by

                      … tatsächlich. Habe jetzt den Satz verlängert auf "Achtung. Das Badezimmerfenster ist schon lenger als eine halbe Stunde offen. Bitte zu machen"

                      Und schon knallts wieder:

                      host-bananapi	2015-11-16 23:10:05	info	Restart adapter system.adapter.sayit.0 because enabled
                      host-bananapi	2015-11-16 23:10:05	error	instance system.adapter.sayit.0 terminated with code 6 (uncaught exception)
                      TypeError:	2015-11-16 23:10:05	error	at FSReqWrap.oncomplete (fs.js:95:15)
                      TypeError:	2015-11-16 23:10:05	error	at /opt/iobroker/node_modules/iobroker.sayit/main.js:276:21
                      TypeError:	2015-11-16 23:10:05	error	at getLength (/opt/iobroker/node_modules/iobroker.sayit/main.js:164:27)
                      TypeError:	2015-11-16 23:10:05	error	at /opt/iobroker/node_modules/iobroker.sayit/main.js:277:39
                      TypeError:	2015-11-16 23:10:05	error	at /opt/iobroker/node_modules/iobroker.sayit/main.js:415:21
                      TypeError:	2015-11-16 23:10:05	error	at cacheFile (/opt/iobroker/node_modules/iobroker.sayit/main.js:397:5)
                      TypeError:	2015-11-16 23:10:05	error	at sayItSystem (/opt/iobroker/node_modules/iobroker.sayit/main.js:672:9)
                      TypeError:	2015-11-16 23:10:05	error	at sayFinished (/opt/iobroker/node_modules/iobroker.sayit/main.js:203:45)
                      TypeError:	2015-11-16 23:10:05	error	Cannot read property 'text' of undefined
                      uncaught	2015-11-16 23:10:05	error	exception: Cannot read property 'text' of undefined
                      sayit-0	2015-11-16 23:10:05	warn	Received file is too short:
                      sayit-0	2015-11-16 23:10:05	warn	Cannot read length of file /opt/iobroker/node_modules/iobroker.sayit/say.mp3
                      sayit-0	2015-11-16 23:10:05	warn	Received file is too short:
                      sayit-0	2015-11-16 23:10:04	info	saying: Achtung. Das Badezimmerfenster ist schon lenger als eine halbe Stunde offen. Bitte zu machen
                      

                      Gruss Ralf

                      1 Reply Last reply Reply Quote 0
                      • D
                        derrapf last edited by

                        Hallo Pix, Bluefox

                        Ich habe, nachdem jetzt das Script läuft (mit kurzen Sätzen) ein weiteres Problem:

                        Das Script wird getriggert, wenn ich im Reiter "Zustände" den Wert der Systemvariable ändere.

                        Wenn allerdings die CCU die Systemvariable ändert wird das Script NICHT getriggert.

                        Ich habe die Sysvar auch mal manuell im HQ-WebUI geändert: Ergebnis: IOBroker zeigt die Änderung unter "Zustände" korrekt an, aber das Script läuft nicht los.

                        Es läuft also nur, wenn ich die Varible in IOBroker selber ändere.

                        Gruss Ralf

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

                          @derrapf:

                          Hallo Pix, Bluefox

                          Ich habe, nachdem jetzt das Script läuft (mit kurzen Sätzen) ein weiteres Problem:

                          Das Script wird getriggert, wenn ich im Reiter "Zustände" den Wert der Systemvariable ändere.

                          Wenn allerdings die CCU die Systemvariable ändert wird das Script NICHT getriggert.

                          Ich habe die Sysvar auch mal manuell im HQ-WebUI geändert: Ergebnis: IOBroker zeigt die Änderung unter "Zustände" korrekt an, aber das Script läuft nicht los.

                          Es läuft also nur, wenn ich die Varible in IOBroker selber ändere.

                          Gruss Ralf `
                          Vielleicht stimmt Datentyp nicht. Kannst du mal dein Skript erweitern:

                          on('DEINE_TRIGGER_VARIABLE', function (obj) {
                              console.log(JSON.stringify(obj.newState));
                          });
                          
                          

                          und posten hier was kommt?

                          1 Reply Last reply Reply Quote 0
                          • D
                            derrapf last edited by

                            Hallo Bluefox

                            Habe folgende Ausgabe:

                            javascript.0	2015-11-22 19:08:41	info	javascript.0 script.js.Test2: {"val":2,"ts":1448215722,"ack":true,"lc":1448215706,"from":"system.adapter.hm-rega.0"}
                            javascript.0	2015-11-22 19:07:42	info	javascript.0 script.js.Test2: {"val":1,"ts":1448215662,"ack":true,"lc":1448215655,"from":"system.adapter.hm-rega.0"}
                            javascript-0	2015-11-22 19:05:12	info	script.js.Test2: {"val":0,"ts":1448215512,"ack":true,"lc":1448215493,"from":"system.adapter.hm-rega.0"}
                            sayit-0	2015-11-22 19:04:51	info	saying: Achtung. Das Badezimmerfenster ist schon lenger als 15 Minuten offen
                            hm-rega-0	2015-11-22 19:04:51	info	State 37449 daueroffen
                            javascript-0	2015-11-22 19:04:51	info	script.js.Test2: {"val":"daueroffen","ts":1448215491,"ack":false,"lc":1448215491,"from":"system.adapter.admin.0"}
                            javascript-0	2015-11-22 19:04:51	info	script.js.Test2: Saying: Achtung. Das Badezimmerfenster ist schon lenger als 15 Minuten offen
                            javascript-0	2015-11-22 19:04:42	info	script.js.Test2: {"val":2,"ts":1448215482,"ack":true,"lc":1448215459,"from":"system.adapter.hm-rega.0"}
                            javascript-0	2015-11-22 19:04:01	info	script.js.Test2: registered 6 subscriptions and 0 schedules
                            javascript-0	2015-11-22 19:04:00	info	Start javascript script.js.Test2
                            

                            Wurde aber wieder nur getriggert indem ich im IOBroker die Variable geändert habe.

                            Die letzten zwei JSON Augaben sind durch die Änderung der Variablen im HQ-WebUI entstanden. D.h. das Script scheint Deinen Triger ausgeführt zu haben, aber nicht meine. D.h. die Triggerbedingungen val und oder change:"ne" funktuonieren nicht?

                            Gruss Ralf

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

                              @derrapf:

                              D.h. die Triggerbedingungen val und oder change:"ne" funktuonieren nicht? `
                              Die Triggerbedingungen funktionieren schon. Allerdings ist val vom Typ "number" (0, 1, 2) und nicht vom Typ "string" (z.B. "daueroffen").

                              Wenn Du per admin einen string reinschreibst, wird dieser in newState.val übernommen, da offenbar keine Typprüfung erfolgt. Deshalb wird in diesem Fall getriggert.

                              1 Reply Last reply Reply Quote 0
                              • D
                                derrapf last edited by

                                Hallo Pix Bluefox

                                Ich glaube irgendwie hängt alles an den Triggerbedingungen;

                                Folgendermassen hat es jetzt funktioniert: Ich triggere einfach (wie im letzten BlueFox-Beispiel) auf die Variable. Ohne irgendwelche Bedingungen.

                                Dann frage ich den Zustand der Variablen von Hand ab und starte das entsprechende Unterprpgramm. Ist nicht ganz so elegant aber funktioniert nun:

                                var idSprache        = 'sayit.0.tts.text';    // Sprachausgabe Browser
                                
                                var idWaschmaschine  = 'hm-rega.0.39968';     //STAT_Waschmaschine_fertig
                                var idTrockner       = 'hm-rega.0.44879';     //STAT_W.Trockner_fertig
                                var idBad_daueroffen = 'hm-rega.0.37449';     //Badezimmer_Alarm_daueroffen. Werte: zu; daueroffen; zu lang offen
                                
                                var timer = {};
                                var debug = true;
                                var repeat = false; // bei Skriptstart ausschalten
                                
                                on(idBad_daueroffen, function (obj) 
                                {
                                   console.log(JSON.stringify(obj.newState));
                                   repeat = false; // Einmalige Ansage
                                   value = obj.newState.val;
                                   log('Get State=' + value);
                                
                                   if (value == 1)
                                   {
                                     saySomething(idBad_daueroffen, 'Achtung. Das Badezimmerfenster ist schon lenger als 15 Minuten offen', repeat);
                                   }
                                   else if (value == 2)
                                   {
                                     repeat = true;
                                     saySomething(idBad_daueroffen, 'Das Badezimmerfenster ist schon lenger als eine halbe Stunde offen', repeat);
                                   }
                                }); 
                                
                                //----------------------------------------- Waschmaschine und Trockner --------------------------------
                                
                                on(idWaschmaschine, function (obj) 
                                {
                                   console.log(JSON.stringify(obj.newState));
                                   value = obj.newState.val;
                                   log('Get State=' + value);
                                
                                   if (value == 0)   {
                                      saySomething(idTrockner, 'Die Waschmaschine ist fertig', true); //  wiederholen
                                   }
                                }); 
                                
                                on(idTrockner, function (obj) 
                                {
                                   console.log(JSON.stringify(obj.newState));
                                   value = obj.oldState.val;
                                   log('Get State=' + value);
                                
                                   if (value == 0)   {
                                      saySomething(idTrockner, 'Der Trockner ist fertig', true); //  wiederholen
                                   }
                                }); 
                                
                                function saySomething(idGeraet, text, wiederholung)
                                {
                                   // Sage zum ersten Mal
                                   var d = new Date ();
                                   var h = d.getHours();
                                
                                   if (debug || (h < 22) && (h > 9)) // nur zwischen 9 und 20 Uhr
                                   {
                                      log('Saying: ' + text);
                                      setState(idSprache, text);
                                
                                     if (wiederholung)
                                     {
                                      // Sag jede 10 Min Text an           
                                      timer[idGeraet] = setInterval(function() {
                                         log('Timer[' + idGeraet + ']=' + timer[idGeraet]);
                                         log('Get State=' + getState(idGeraet).val);
                                         if (getState(idGeraet).val == 2)
                                         {
                                            log('Saying again: ' + text);
                                            setState(idSprache, text);
                                         }
                                         else
                                         {
                                            if (timer[idGeraet]) clearInterval(timer[idGeraet]);
                                            timer[idGeraet] = null;
                                         }
                                      }, 600000);
                                     }
                                   }
                                
                                }
                                

                                Nichtsdestotrotz solten wir vielleicht doch klären und herausfinden warum die Trigger nicht so funktionieren wie man sich das vorstelt. Das hilft sicher auch Anderen.

                                Gruss Ralf

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

                                  So sollte es auch funktionieren (Beispiel Waschmaschine):

                                  on ({id: idWaschmaschine, val: 0}, function () {
                                     saySomething(idWaschmaschine, 'Die Waschmaschine ist fertig', false); // nicht wiederholen
                                  });
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    derrapf last edited by

                                    Hallo Paul, Hallo Bluefox, Hall Pix.

                                    ZUm Beweis, dass es so wie Paul vorgeschlagen hat nicht geht, hab ich seinen Code eingebaut und weiter experimentiert.

                                    Ich glaube ich habe es inzwischen geschnallt was nicht funktioniert:

                                    Die Systemvariable ist ja eine Liste von Strings. Beispielsweise "aus, läuft, fertig". Die Indizes des zughörigen "Arrays"

                                    sind 0,1 und 2

                                    Jetzt kommt der Witz:

                                    Wenn ich nach dem String triggere, also

                                    on ({id: idWaschmaschine, val: "fertig"}, function () 
                                    

                                    dann funktioniert das nur wenn ich die Variable im IOBroker ändere, aber nicht wenn die CCU diese ändert.

                                    Wenn ich wie folgt triggere

                                    on ({id: idWaschmaschine, val: 2}, function () 
                                    

                                    Dann funktioniert es im IOBroker nicht mehr, dafür aber wenn die CCU die Variable ändert-

                                    Hier läuft irgendwas gründlich schief. Aber den Fehler haben wir indirekt schon ein paar Seiten vorher entdeckt. Ich dacht nur nicht, dass es hier einen Unterschied gibt wer! die Variable setzt.

                                    Wer kann sich denn diesen Bug mal angicken und fixen? Und: Könnt ihr das reproduzieren oder ist das nur bei mir so?

                                    Gruss Ralf

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

                                      @derrapf:

                                      Dann funktioniert es im IOBroker nicht mehr, dafür aber wenn die CCU die Variable ändert- `
                                      Welche Version von ioBroker.admin verwendest Du ? Ab Version 0.6.4 wurde dies für Multistate-Datenpunkte (Werteliste) gefixt.

                                      1 Reply Last reply Reply Quote 0
                                      • D
                                        derrapf last edited by

                                        Hallo Paul

                                        @paul53:

                                        Welche Version von ioBroker.admin verwendest Du ? Ab Version 0.6.4 wurde dies für Multistate-Datenpunkte (Werteliste) gefixt. `
                                        Ich habe hier 0.5.11

                                        Das ist die Version die mit Hormoran's fertigem Image kommt.

                                        Dann date ich denn wohl mal up. Mal sehen ob sich dann was ändert.

                                        edit: Raaa! Nach dem Update sind alle meine Scripte weg!!!

                                        Es lassen sich auch keine mehr hinzufügen. Was ist denn da schief gegangen? Kann ich noch was retten? Wo wären denn die Scripte gewesen? Kann ich ev. per Winscp noch was finden?

                                        Noch eine Frage: Kann ich den Sayit direkt über html quatschen lassen?

                                        So wie früher bei CCU.IO?

                                        Da konnte man ja z.B. in der CCU folgendes programmieren

                                        string url="'http://192.168.111.171:8080/api/set/72910/?value="blablabla"'";
                                        dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("wget -q -O /dev/null " # url);
                                        
                                        

                                        Und dann hat er schon gesprochen.

                                        Wie geht denn das beim IOBroker?

                                        Gruss Ralf
                                        743_bild1.jpg

                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          derrapf last edited by

                                          Hallo?

                                          Jemand da?

                                          Lasst mich bitte nicht hängen. Irgendwie hab ich den IOBroker kaputt upgedatet.

                                          Bevor ich jetzt alles platt mache würde ich gerne noch retten was zu retten ist…

                                          Ich hoffe jemand kann mir da helfen.

                                          Gruss Ralf

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          533
                                          Online

                                          31.7k
                                          Users

                                          79.7k
                                          Topics

                                          1.3m
                                          Posts

                                          4
                                          52
                                          5538
                                          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