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

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Skript - Alexa Speak wenn zwei Bedingungen erfüllt

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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

                        539
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

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