Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Skript - Alexa Speak wenn zwei Bedingungen erfüllt

    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

    Skript - Alexa Speak wenn zwei Bedingungen erfüllt

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

      Meinst du das so, also das der Wert den du einträgst auch ausgegeben wird?

      const idSV = 'hm-rega.0.14932'; 
      const idND = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands.doNotDisturb';
      const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands.speak';
       
      on({id: idSV}, function(dp) { // triggert bei Aktualisierung
         if(!getState(idND).val) {
            let txt = 'anderer Text';
            if(dp.state.val) txt = dp.state.val;
            setState(idSpeak, txt);
         }
      });
      
      nils50122 1 Reply Last reply Reply Quote 1
      • nils50122
        nils50122 @mbw last edited by nils50122

        @mbw

        Genau, also es soll quasi jedes mal wenn sich die SV "Alexa_TTS" ändert dessen Inhalt (Text) ausgegeben werden.
        Das aber auch nur wenn donotdisturb auf false ist.
        Der Inhalt der SV "Alexa_TTS" wird von den HM-Programmen geschrieben.

        Mich iritiert nun ein wenig die Zeile "anderer Text", kann die nicht raus?

        Idealerweise setzen wir vor senden des speak commands (alexa2.0.Echo-Devices.xxxx.Commands.speak-volume) noch die Lautstärke auf z.B. 20 (kann ruhig im Script definiert werden)

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

          @nils50122 sagte:

          "anderer Text", kann die nicht raus?

          Ja.

          const idSV = 'hm-rega.0.14932'; 
          const idND = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands.doNotDisturb';
          const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands.speak';
           
          on(idSV, function(dp) { // triggert bei Wertänderung
             if(!getState(idND).val) setState(idSpeak, dp.state.val);
          });
          
          1 Reply Last reply Reply Quote 0
          • M
            mbw last edited by

            @nils50122 sagte in Skript - Alexa Speak wenn zwei Bedingungen erfüllt:

            Idealerweise setzen wir vor senden des speak commands (alexa2.0.Echo-Devices.xxxx.Commands.speak-volume) noch die Lautstärke auf z.B. 20 (kann ruhig im Script definiert werden)

            const idSV = 'hm-rega.0.14932'; 
            const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands';
            const ausgabelautstaerke = 20;
             
            on({id: idSV}, function(dp) { // triggert bei Aktualisierung
                if(!getState(idSpeak + '.doNotDisturb').val) {
                    alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke);
                }
            });
            
            function alexaSprich(idAlexa, text, lautstaerke) {
                var alteLautstaerke = getState(idAlexa + '.speak-volume').val;
                setState(idAlexa + '.speak-volume', lautstaerke);
                setState(idAlexa + '.speak', text);
                setState(idAlexa + '.speak-volume', alteLautstaerke);
            }
            
            nils50122 1 Reply Last reply Reply Quote 1
            • nils50122
              nils50122 @mbw last edited by

              @mbw

              Sogar mit dem setzen der alten Lautstärke, was ein Luxus 🙂
              Klappt perfekt, besten Dank.

              Die letzte bitte:

              Ich würde eine zweite SV "Alexa TTS - High Prio" für Ausgaben die DoNotDisturb nicht interessiert, anlegen.

              Welchen Teil im Skript muss ich löschen?

              M 1 Reply Last reply Reply Quote 0
              • M
                mbw @nils50122 last edited by

                @nils50122 sagte in Skript - Alexa Speak wenn zwei Bedingungen erfüllt:

                Ich würde eine zweite SV "Alexa TTS - High Prio" für Ausgaben die DoNotDisturb nicht interessiert, anlegen.
                Welchen Teil im Skript muss ich löschen?

                const idSV = 'hm-rega.0.14932'; 
                const idSV2 = 'hm-rega.0.14933'; 
                const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands';
                const idSpeak2 = 'alexa2.0.Echo-Devices.yyDeviceIDyy.Commands';
                const ausgabelautstaerke = 20;
                const ausgabelautstaerke2 = 50;
                 
                on({id: idSV}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus wenn doNotDisturb nicht gesetzt ist
                    if(!getState(idSpeak + '.Commands.doNotDisturb').val) {
                        alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke);
                    }
                });
                
                on({id: idSV2}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus auch wenn doNotDisturb gesetzt ist
                    alexaSprich(idSpeak2, dp.state.val, ausgabelautstaerke2);
                });
                
                function alexaSprich(idAlexa, text, lautstaerke) {
                    var alteLautstaerke = getState(idAlexa + '.speak-volume').val;
                    setState(idAlexa + '.speak-volume', lautstaerke);
                    setState(idAlexa + '.speak', text);
                    setState(idAlexa + '.speak-volume', alteLautstaerke);
                }
                
                nils50122 1 Reply Last reply Reply Quote 0
                • nils50122
                  nils50122 @mbw last edited by

                  @mbw

                  Wenn ich das richtig sehe, steuert das Skript nun zwei Devices an, oder?

                  Das soll schon beides auf dem selben ankommen.

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    mbw @nils50122 last edited by

                    @nils50122 sagte in Skript - Alexa Speak wenn zwei Bedingungen erfüllt:

                    Das soll schon beides auf dem selben ankommen.

                    on({id: idSV2}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus auch wenn doNotDisturb gesetzt ist
                        alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke2);
                    });
                    
                    nils50122 1 Reply Last reply Reply Quote 1
                    • nils50122
                      nils50122 @mbw last edited by

                      @mbw

                      Anscheinend funktioniert das DoNotDisturb nicht korrekt (Übertragung IOBroker <-> Alexa).
                      Somit wurden wir nun schon mehrmals Nachts von der TTS geweckt.

                      Kriegen wir es hin zusätzlich in das bereits vorhandene Skript eine Zeitprüfung (Zeitfenster 08:00 Uhr - 22:00 Uhr erlaubt, danach nicht) einzubauen?

                      M 1 Reply Last reply Reply Quote 0
                      • M
                        mbw @nils50122 last edited by

                        @nils50122 Hier sollte doch doNotDisturb nicht beachtet werden.
                        Zeitprüfung:

                        const idSV = 'hm-rega.0.14932'; 
                        const idSV2 = 'hm-rega.0.14933'; 
                        const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands';
                        const idSpeak2 = 'alexa2.0.Echo-Devices.yyDeviceIDyy.Commands';
                        const ausgabelautstaerke = 20;
                        const ausgabelautstaerke2 = 50;
                         
                        on({id: idSV}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus wenn doNotDisturb nicht gesetzt ist
                            if(!getState(idSpeak + '.Commands.doNotDisturb').val && compareTime("08:00", "22:00", "between")) {
                                alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke);
                            }
                        });
                         
                        on({id: idSV2}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus auch wenn doNotDisturb gesetzt ist
                            if (compareTime("08:00", "22:00", "between")) {    
                                alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke2);
                            }
                        });
                         
                        function alexaSprich(idAlexa, text, lautstaerke) {
                            var alteLautstaerke = getState(idAlexa + '.speak-volume').val;
                            setState(idAlexa + '.speak-volume', lautstaerke);
                            setState(idAlexa + '.speak', text);
                            setState(idAlexa + '.speak-volume', alteLautstaerke);
                        }
                        
                        nils50122 1 Reply Last reply Reply Quote 0
                        • nils50122
                          nils50122 @mbw last edited by

                          @mbw

                          Gibt es eine Möglichkeit die Systemvariable (idSV und idSV2) nach erfolgreicher Übergabe zu leeren?

                          Ansonsten gibt es momentan immer das Problem, dass bei einem Neustart z.B. der Rega-Instanz, des IOBrokers, der Raspberrymatic die Systemvariable noch einmal übergeben wird.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          879
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          3
                          18
                          1105
                          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