Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Über scriptEnabled triggern verboten. Aber wie richtig?

    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

    Über scriptEnabled triggern verboten. Aber wie richtig?

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      ramses @htrecksler last edited by

      @htrecksler
      Das sieht meinem ja doch sehr ähnlich bis auf die on change sache.. aber schön, dann habe ich es ja doch richtig verstanden 🙂

      Vielen Dank

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

        Meine Empfehlung: Packe alles, was das Skript tun soll, in eine Funktion und anstelle von stopScript() verwendest Du einen Datenpunkt-Trigger. Prinzip:

        function meineFunktion() {
           // hier der Ausführungs-Code
        }
        
        on({id: idTrigger}, meineFunktion);
        
        1 Reply Last reply Reply Quote 0
        • OstfrieseUnterwegs
          OstfrieseUnterwegs last edited by

          Wenn Dein Script nur einmal getriggert werden soll, kannst Du noch einen zweiten Datenpunkt anlegen, der als Flag benutzt wird und anzeigt, ob Dein Script schon mal gelaufen ist.
          Ich benutze das im Zusammenhang mit einem Bewegungsmelder: Wenn abends der erste am Bewegungsmelder vorbei geht, lasse ich Alexa Termine für den Nächsten Tag ansagen z,B. Mülltermine und so. Aber natürlich soll das nicht jedesmal anlaufen, wenn jemand durch den Flur geht. Also nach dem ersten Aufruf ein Flag setzen, und das dann nachts wirder auf false...

          R 1 Reply Last reply Reply Quote 0
          • R
            ramses @OstfrieseUnterwegs last edited by ramses

            @OstfrieseUnterwegs
            Hatte mich da ein wenig unglücklich ausgedrückt. Es soll so oft getriggert werden wie man möchte, aber halt durch Alexa-Zuruf. Denke die On change any variante ist da tatsächlich die glücklichste und einfachste.
            Aber deine Idee mit dem Bewegungsmelder gefällt mir! Zwar nicht für Terminansagen aber für anderes. Ich klau mir die Idee mal 🙂

            1 Reply Last reply Reply Quote 0
            • R
              ramses last edited by ramses

              Also, ich habe jetzt alles so umgesetzt wie ihr es vorgeschlagen habt, aber der Fehler ist geblieben.
              Wenn ich das Script trigger, springt alexa2.0.History.name und alexa2.0.History.serialNumber kurz auf die richtige Alexa (von wo der Aufruf erfolgte) und springt dann manchmal einfach um auf irgendeine andere und gibt es letztendlich im falschen Raum aus.

              Beispiel: alexa2.0.History.name steht auf Badezimmer. Ich trigger im Wohnzimmer das Script.
              Alexa2.0.History.name springt um auf Wohnzimmer und eine Sekunde danach zurück auf Badezimmer oder manchmal auch Küche. Ist er einmal aus dem Tritt, kann ich im Wohnzimmer das Script so oft triggern wie er will, er gibt es dann z.b. immer in Küche aus.
              Frage ich Alexa dann im Wohnzimmer z.b. nach der Uhrzeit, ist er wieder im Tritt und die Ausgabe erfolgt beim nächsten Trigger richtigerweise im Wohnzimmer. Dieser Fehler tritt so jedes 10. Mal auf.
              Alles sehr verwirrend.

              Kann es sein, dass es ein Timing Problem ist ?
              Ich merke, dass vor allem die Dots nicht mal dazu kommen ihr "OK" zu beenden. Habe es jetzt testweise mal mit einem setStateDelayed,1000 versucht. Ob das was gebracht hat, wird sich im Laufe der Tage zeigen. Bis jetzt konnte ich ihn nicht mehr aus dem Tritt bringen.

              Hier das geänderte Script, vielleicht fällt einem ja syntaktisch ein Fehler auf (bitte keine Optik-Korrekturen) 🙂

              on({id:"javascript.0.klima.kinderzimmer",change:'any'}, function (obj) {
                  var TEMP1 = getState('netatmo.0.Micha.Kinderzimmer.Temperature.Temperature').val;
                  var CO1 = getState('netatmo.0.Micha.Kinderzimmer.CO2.CO2').val;
                  var HUMIDITY1 = getState('netatmo.0.Micha.Kinderzimmer.Humidity.Humidity').val;
                  var LASTALEXA = 'alexa2.0.Echo-Devices.'+getState('alexa2.0.History.serialNumber').val+'.Commands.speak';
                
              if (CO1>1000){
              // setState(LASTALEXA, '40;Die Temperatur beträgt ' + TEMP1 + ' Grad. Die Luftfeuchtigkeit beträgt ' + HUMIDITY1 + ' Prozent. Das Zimmer sollte gelüftet werden.' );
              setStateDelayed(LASTALEXA, '40;Die Temperatur beträgt ' + TEMP1 + ' Grad. Die Luftfeuchtigkeit beträgt ' + HUMIDITY1 + ' Prozent. Das Zimmer sollte gelüftet werden.',1000);
                           }
              
              else {
              // setState(LASTALEXA, '40;Die Temperatur beträgt ' + TEMP1 + ' Grad. Die Luftfeuchtigkeit beträgt ' + HUMIDITY1 + ' Prozent. Das Zimmer muss nicht gelüftet werden.' );
              setStateDelayed(LASTALEXA, '40;Die Temperatur beträgt ' + TEMP1 + ' Grad. Die Luftfeuchtigkeit beträgt ' + HUMIDITY1 + ' Prozent. Das Zimmer muss nicht gelüftet werden.',1000);
                   }
                  
              });
              

              PS: Just mit abschicken dieses Posts, hab ich Sie auch mit setStateDelayed aus dem Tritt gebracht 😕

              dslraser 1 Reply Last reply Reply Quote 0
              • dslraser
                dslraser Forum Testing Most Active @ramses last edited by dslraser

                @ramses
                hier mal ein Auszug eines Blocklys (nur eine Temperaturabfrage). In der Alexa App eine Routine mit: Alexa, wie ist die Temperatur im Garten. Angestoßen wird ein eigener Datenpunkt.
                Ist zwar ssml und nicht speak, aber sonst der gleiche Vorgang.
                (Garten und Ansage sind Variablen die weiter oben im Script angelegt sind---sind hier nicht im Code-Ausschnitt sichtbar)

                on({id: 'javascript.0.Eigene_Datenpunkte.01Alexa2Ansagen.Ansagen.05Temperaturansage_Garten', change: "any"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  Garten = getState("javascript.0.Eigene_Datenpunkte.01Alexa2Ansagen.Temperaturen.06Garten").val;
                  Ansage = ['<speak><voice name="Alexa">','draussen im Garten sind, ',Garten,'Grad.','</voice></speak>'].join('');
                  // Echo Küche
                  if (getState("alexa2.0.History.name").val == 'Küche') {
                    setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                  }
                  // Echo Wohnzimmer
                  if (getState("alexa2.0.History.name").val == 'Wohnzimmer') {
                    setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                  }
                  // Echo Gästezimmer
                  if (getState("alexa2.0.History.name").val == 'Gästezimmer') {
                    setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                  }
                  // Echo Schlafzimmer
                  if (getState("alexa2.0.History.name").val == 'Schlafzimmer') {
                    setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                  }
                  // Echo Badezimmer
                  if (getState("alexa2.0.History.name").val == 'Badezimmer') {
                    setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                  }
                  // Echo Keller-Flur
                  if (getState("alexa2.0.History.name").val == 'Keller-Flur') {
                    setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                  }
                  // Echo Flur
                  if (getState("alexa2.0.History.name").val == 'Flur') {
                    setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                  }
                  // Echo Werkstatt
                  if (getState("alexa2.0.History.name").val == 'Werkstatt') {
                    setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                  }
                  // Gäste WC
                  if (getState("alexa2.0.History.name").val == 'Gäste WC') {
                    setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                  }
                });
                

                Bildschirmfoto 2019-03-11 um 18.35.43.png

                R 1 Reply Last reply Reply Quote 0
                • R
                  ramses @dslraser last edited by ramses

                  @dslraser
                  Oh, mit den Routinen habe ich mich noch nie beschäftigt, verstehe aber das Prinzip.
                  Glaube nur, es wird auf das Selbe hinauslaufen, da du auch mit (getState("alexa2.0.History.name) die letzte aktive aufrufst und bei mir der Wert dort dann einfach schon falsch ist.

                  Habe einfach mal direkt nach dem on change any , die Abfrage nach alexa2.0.History.name gemacht und schon dort war sie dann gegebenenfalls falsch.
                  Aber danke für den Hinweis auf die Routinen. "Wie ist das Klima im Kinderzimmer?" klingt defintiv besser als "Aktiviere Klima Kinderzimmer" 🙂

                  dslraser 1 Reply Last reply Reply Quote 0
                  • dslraser
                    dslraser Forum Testing Most Active @ramses last edited by dslraser

                    @ramses sagte in Über scriptEnabled triggern verboten. Aber wie richtig?:

                    Aber danke für den Hinweis auf die Routinen. "Wie ist das Klima im Kinderzimmer?" klingt defintiv besser als "Aktiviere Klima Kinderzimmer" 🙂

                    Nur wegen der individuellen Fragestellung nutze ich Routinen. "Schalte Temperatur im Garten an" oder sowas ist, na ja....☹
                    Temperaturen kann ja iot/cloud im Grunde auch ohne Script ansagen, aber ich habe für mich ein Script in dem Hans und Vicki (Stimmen) die Temperaturen aller Räume nacheinander und im Wechsel mit den Stimmen ansagen. Ist nicht so langweilig...☺

                    Bildschirmfoto 2019-03-11 um 18.54.09.png

                    Bildschirmfoto 2019-03-11 um 18.54.24.png

                    R 1 Reply Last reply Reply Quote 0
                    • R
                      ramses @dslraser last edited by ramses

                      @dslraser
                      Auch wenn das jetzt absolut off-topic ist. Das musst du mir bitte genauer erklären. Stimmenwechsel?
                      Ich glaube die halbe Alexa-Welt ist scheinbar an mir vorbeigezogen. Geht dieser Stimmenwechsel nur über ssml?
                      Wäre toll wenn du dazu mal was Javascript-Code zeigen würdest. Blockly macht mich kirre 🙂

                      dslraser 1 Reply Last reply Reply Quote 0
                      • dslraser
                        dslraser Forum Testing Most Active @ramses last edited by dslraser

                        @ramses
                        ja, über ssml

                        Klick

                        hier mal ein Ausschnitt

                        on({id: 'javascript.0.Eigene_Datenpunkte.01Alexa2Ansagen.Ansagen.01Temperaturansage_gesamt', change: "any"}, function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          Schlafzimmer = getState("javascript.0.Eigene_Datenpunkte.01Alexa2Ansagen.Temperaturen.01Schlafzimmer").val;
                          Wohnzimmer = getState("javascript.0.Eigene_Datenpunkte.01Alexa2Ansagen.Temperaturen.02Wohnzimmer").val;
                          Badezimmer = getState("javascript.0.Eigene_Datenpunkte.01Alexa2Ansagen.Temperaturen.03Badezimmer").val;
                          Flur = getState("javascript.0.Eigene_Datenpunkte.01Alexa2Ansagen.Temperaturen.04Flur").val;
                          G_C3_A4stezimmer = getState("javascript.0.Eigene_Datenpunkte.01Alexa2Ansagen.Temperaturen.05Gästezimmer").val;
                          Garten = getState("javascript.0.Eigene_Datenpunkte.01Alexa2Ansagen.Temperaturen.06Garten").val;
                          Ansage = ['<speak><voice name="Hans">','','','Los gehts. ','Im Wohnzimmer sind,',Wohnzimmer,'Grad.','</voice><voice name="Vicki">','im Badezimmer sind,',Badezimmer,'Grad.','</voice><voice name="Hans">','im Gästezimmer sind,',G_C3_A4stezimmer,'Grad.','</voice><voice name="Vicki">','im Flur sind, ',Flur,'Grad.','</voice><voice name="Hans">','im Schlafzimmer sind, ',Schlafzimmer,'Grad, ','</voice><voice name="Vicki">','und draussen im Garten sind, ',Garten,'Grad.','</voice><voice name="Alexa"><prosody volume="+6dB">','Das wäre dann alles .','</prosody>','</voice></speak>'].join('');
                          // Wohnzimmer
                          if (getState("alexa2.0.History.name").val == 'Wohnzimmer') {
                            setState("alexa2.0.Echo-Devices.xxx.Commands.ssml"/*ssml*/, Ansage);
                          }
                        

                        Das sind die Ansagen im Wechsel mit Hans und Vicki und zum Schluss eine Lautstärke Erhöhung mit der Ansage durch Alexa mit: das wäre dann alles.

                        R 1 Reply Last reply Reply Quote 0
                        • R
                          ramses @dslraser last edited by

                          @dslraser

                          sehr schön. Danke dir.

                          So ich glaube ich hab meinen Fehler gefunden. Ich wohne in einem Altbau mit 3m hohen Wänden. Hier schallt es oftmals ein wenig. Es scheint so, 2 andere Alexas hören meine Stimme auch und springen deshalb hin und her und geben dann im falschen Raum aus. Wenn ich die Alexa mit ihrem Namen "anflüster" so das definitiv nur eine reagieren kann, ist es bisher nicht mehr vorgekommen (300 Versuche -morgen bin ich heiser).
                          Lustigerweise ist sowas zb noch nie vorgekommen bei anderen Befehlen wie Musikwiedergabe und Co.

                          R 1 Reply Last reply Reply Quote 0
                          • R
                            ramses @ramses last edited by ramses

                            @dslraser
                            Hab jetzt mal so eine Routine gemacht. Kann man unterbinden, dass eine Ansage wie "Alexa, wie ist das Klima im Kinderzimmer" nicht mit OK quittiert?

                            dslraser 1 Reply Last reply Reply Quote 0
                            • dslraser
                              dslraser Forum Testing Most Active @ramses last edited by

                              @ramses
                              ich nutze den Kurzmodus. Einstellung in der Amazon App.

                              R 1 Reply Last reply Reply Quote 0
                              • R
                                ramses @dslraser last edited by ramses

                                @dslraser
                                Diese Einstellung finde ich wo?

                                Ah habs.. aber ein Ton bleibt halt immer noch. Gegen das OK hab ich ja jetzt nichts. Nur OK ist halt keine Antwort auf eine Frage sondern auf einen Befehl 🙂

                                dslraser 1 Reply Last reply Reply Quote 0
                                • dslraser
                                  dslraser Forum Testing Most Active @ramses last edited by

                                  @ramses
                                  Einstellungen/Alexa Konto/Alexa-Spachantworten

                                  Screenshot_20190311-195705_Amazon Alexa.jpg

                                  R 1 Reply Last reply Reply Quote 0
                                  • R
                                    ramses @dslraser last edited by

                                    @dslraser

                                    Ah jetzt ja.

                                    .. aber ein Ton bleibt halt immer noch. Gegen das OK hab ich ja im Grunde jetzt nichts. Nur OK ist halt keine Antwort auf eine Frage sondern auf einen Befehl 🙂

                                    dslraser 1 Reply Last reply Reply Quote 0
                                    • dslraser
                                      dslraser Forum Testing Most Active @ramses last edited by dslraser

                                      @ramses
                                      kannst ja noch "moment", oder "ich schau mal nach", (oder was Dir eben gefällt ) davor setzen.

                                      Edit: dann kommt kein Ton im Kurzmodus und auch kein okay im Normalmodus.

                                      Screenshot_20190311-200651_Amazon Alexa.jpg

                                      R 1 Reply Last reply Reply Quote 0
                                      • R
                                        ramses @dslraser last edited by ramses

                                        @dslraser

                                        Das unterbindet aber wahrscheinlich nicht, dass der Bestätigungs-Ton, bzw das Bestätigungs-OK durch ein "Moment bitte" ersetzt wird, oder?
                                        Aber ich vermute du meinst das im Sinne von flüssiger Sprache.
                                        In der Langform würde dann vermutlich ein "Ok, moment" bei rauskommen,oder?

                                        dslraser 1 Reply Last reply Reply Quote 0
                                        • dslraser
                                          dslraser Forum Testing Most Active @ramses last edited by

                                          @ramses
                                          doch, wird dann unterbunden, gerade probiert

                                          R 1 Reply Last reply Reply Quote 0
                                          • R
                                            ramses @dslraser last edited by

                                            @dslraser
                                            Genial. So, glaube heute hast du mir wirklich genug geholfen. Ich gehe dann mal ein wenig basteln. Vielen Dank noch mal für deine Hilfe.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            929
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            9
                                            37
                                            1873
                                            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