Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Alexa2 - Object von getriggerte channel ansprechen

    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

    Alexa2 - Object von getriggerte channel ansprechen

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

      Hallo zusammen,

      ich benutze folgende scripts um eine wecker von mein Schlafzimmer Echo zu triggern damit ich nach dem "alexa stop" eine routine starten kann:

      var x = new RegExp("\alexa2\.0\.Echo-Devices.G090LV05455400XX\.Alarm\.*\.triggered");
      on({id: x, val: true}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        var alexaWeckUp = getState("javascript.0.AlexaWeckerAktiv").val
        if (alexaWeckUp == false) {
            setState("javascript.0.AlexaWeckerAktiv", true);
        } 
      });
      

      und

      var x = new RegExp("\alexa2\.0\.Echo-Devices.G090LV05455400XX\.Alarm\.*\.triggered");
      on({id: x, val: false}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        var alexaWeckUp = getState("javascript.0.AlexaWeckerAktiv").val
          if (alexaWeckUp == true) {
          setState("javascript.0.AlexaWeckerAktiv", false)
          setState("alexa2.0.Echo-Devices.G090LV05455400XX.Routines.da6d6de7-baae-4771-8f92-f653c4c102bc", true);
          }
      });
      

      Ich wollte jetzt ein script schreiben der nach dem triggern von eine aktive wecker im Schlafzimmer ein timer setzt um meine kaffeemaschine eine stunde vorher einschaltet.

      Getriggert wird:

      var x = new RegExp("\alexa2\.0\.Echo-Devices.G090LV05455400XX\.Alarm\.*\.enabled");
      

      wenn enabled == true dann soll das object time von gleiche channel gelesen werden um die Uhrzeit des Weckers erfahre. Danach soll dieser Uhrzeit in eine von mir erstellte object "kaffeemschine_weckzeit" mit eine stunde weniger geschrieben werden.

      Wie kann ich den object time von gleiche channel von getriggerte object enabled auslesen??

      Danke im voraus für eure hilfe.

      Gruß

      Giovanni

      1 Reply Last reply Reply Quote 0
      • G
        gcaruso last edited by

        Hallo nochmal,

        hat keiner eine Ahnung wie das geht?

        Gruß

        1 Reply Last reply Reply Quote 0
        • Q
          qoka last edited by

          Hallo,

          bist du damit weitergekommen? Ich möchte etwas sehr ähnliches realisieren (auslesen der frühesten auf aktiv gesetzten Weckzeit).

          BG

          1 Reply Last reply Reply Quote 0
          • G
            gcaruso last edited by

            Ne leider nicht.

            1 Reply Last reply Reply Quote 0
            • H
              homecineplexx last edited by

              also ich bin mir nicht 100 sicher, aber du hast ja in deiner variable x zuweisung einen stern, dh es ist nicht ein einzelner state sondern x beliebige.

              darum glaub ich dass, du das "on" nicht so machen kannst.

              ich glaub das müßte irgendwie so aussehen:

              var x = $('channel[state.id=alexa2.0.Echo-Devices.G090LV05455400XX.Alarm.*.triggered]');
              x.on(function(obj) {
              
              });
              
              
              1 Reply Last reply Reply Quote 0
              • G
                gcaruso last edited by

                @homecineplexx:

                also ich bin mir nicht 100 sicher, aber du hast ja in deiner variable x zuweisung einen stern, dh es ist nicht ein einzelner state sondern x beliebige.

                darum glaub ich dass, du das "on" nicht so machen kannst.

                ich glaub das müßte irgendwie so aussehen:

                var x = $('channel[state.id=alexa2.0.Echo-Devices.G090LV05455400XX.Alarm.*.triggered]');
                x.on(function(obj) {
                
                });
                
                ```` `  
                

                Hallo homecineplexx,

                das stern nutze ich weil wenn ein neue Alarm von Alexa generiert wird, bekommt er als Name die Alarmzeit. Da sie immer unterschiedlich sind lasse ich alle Name durchsuchen. Der Script funktioniert auch einwandfrei. Das was ich machen wollte ist das alle Alarme von dieser Device wenn sie aktiv sind in eine variable speichern so das ich sie auf meine VIS Visualisierung zeigen kann.

                1 Reply Last reply Reply Quote 0
                • H
                  homecineplexx last edited by

                  das mit dem sternchen weiß ich schon..wird auch in meiner variante funktionieren.

                  aber überschreibst du nicht immer den gleichen datenpunkt mit dem nächsten alarm?

                  1 Reply Last reply Reply Quote 0
                  • G
                    gcaruso last edited by

                    @homecineplexx:

                    das mit dem sternchen weiß ich schon..wird auch in meiner variante funktionieren.

                    aber überschreibst du nicht immer den gleichen datenpunkt mit dem nächsten alarm? `

                    Hi, korrekt. Der datenpunkt wird immer neu überschriben aber das ist bei mir egal weil da wird nur gespeichert ob überhaupt ein wecker aktiv ist.

                    1 Reply Last reply Reply Quote 0
                    • Q
                      qoka last edited by

                      @gcaruso:

                      Getriggert wird:

                      var x = new RegExp("\alexa2\.0\.Echo-Devices.G090LV05455400XX\.Alarm\.*\.enabled");
                      

                      wenn enabled == true dann soll das object time von gleiche channel gelesen werden um die Uhrzeit des Weckers erfahre. Danach soll dieser Uhrzeit in eine von mir erstellte object "kaffeemschine_weckzeit" mit eine stunde weniger geschrieben werden. `

                      Hallo,

                      ich habe das mit einem schedule gelöst:

                      • alle X Sekunden wird nach dem frühesten, aktiven Wecker gesucht (mit selector $('channel[state.id=alexa2.0.Echo-Devices..Alarm..enabled]') und Vergleichen der Uhrzeit aller aktiven Wecker)

                      • dessen Werte werden in einem Objekt Wecker (enabled: boolean und time: Weckzeit) gespeichert

                      • Wecker.enabled triggert eine Funktion die ein paar schedules zu früheren Uhrzeiten setzt (zB: Hue Wakeup -10 Minuten, Espressomaschine -60 Minuten) setzt

                      Wenn du Interesse daran hast, kann ich dir meine Skripte zukommen lassen oder sie hier posten. Sind nur höchstwahrscheinlich grauenhaft programmiert 😉

                      Beste Grüße

                      1 Reply Last reply Reply Quote 0
                      • G
                        gcaruso last edited by

                        @qoka:

                        @gcaruso:

                        Getriggert wird:

                        var x = new RegExp("\alexa2\.0\.Echo-Devices.G090LV05455400XX\.Alarm\.*\.enabled");
                        

                        wenn enabled == true dann soll das object time von gleiche channel gelesen werden um die Uhrzeit des Weckers erfahre. Danach soll dieser Uhrzeit in eine von mir erstellte object "kaffeemschine_weckzeit" mit eine stunde weniger geschrieben werden. `

                        Hallo,

                        ich habe das mit einem schedule gelöst:

                        • alle X Sekunden wird nach dem frühesten, aktiven Wecker gesucht (mit selector $('channel[state.id=alexa2.0.Echo-Devices..Alarm..enabled]') und Vergleichen der Uhrzeit aller aktiven Wecker)

                        • dessen Werte werden in einem Objekt Wecker (enabled: boolean und time: Weckzeit) gespeichert

                        • Wecker.enabled triggert eine Funktion die ein paar schedules zu früheren Uhrzeiten setzt (zB: Hue Wakeup -10 Minuten, Espressomaschine -60 Minuten) setzt

                        Wenn du Interesse daran hast, kann ich dir meine Skripte zukommen lassen oder sie hier posten. Sind nur höchstwahrscheinlich grauenhaft programmiert 😉

                        Beste Grüße `

                        Hallo qoka,

                        das wäre super wenn du hier in Forum posten könntest.

                        Meine scripts sind bestimmt grauenhafter als deine :lol: :lol:

                        Gruß

                        Giovanni

                        1 Reply Last reply Reply Quote 0
                        • Q
                          qoka last edited by

                          Ich bin noch nicht wirklich zum ausführlichen Debuggen gekommen und eins, zwei Lösungen sind echt unschön, aber hier Mal mein aktueller Stand was den Alexa Wecker angeht.

                          • einmal ein Skript zum Auslesen der aktuell frühesten Weckzeit, welches jede Minute ausgeführt wird

                          ! ````
                          function CreateAlarm() {

                          // define alarm
                          var alarm=[];
                          
                          // select all existing alarms 
                          // TODO $("channel[state.id=*.time]") or so does not work, no role for alarm defined
                          // N.B.: subscription of alarm keys not robust against deleting alarms, thus use of schedule
                          $('state[id=alexa2.0.Echo-Devices.*.Alarm.*.enabled]').each(function (id, i) {
                          
                              // crop alarm id
                              var cropped_id=id.substr(0, id.lastIndexOf("."))
                          
                              // check if alarmid has object 
                              // TODO: selector returns ids of nonexisting objects(?) change approach or suppress warning
                              if (getObject(cropped_id) !== null){
                                  alarm.push({time: getState(cropped_id + ".time").val, enabled: getState(cropped_id + ".enabled").val});
                              }
                          
                          });
                          

                          ! // find earliest alarm with state enabled if at least one enabled alarm exists
                          alarm=alarm.sort((a,b) => a.time >= b.time).find(alarm => alarm.enabled);
                          if (alarm !== undefined) {
                          setState("javascript.0.Wecker.alarm.time",alarm.time);
                          setState("javascript.0.Wecker.alarm.enabled",alarm.enabled);
                          }
                          else {
                          setState("javascript.0.Wecker.alarm.time","none");
                          setState("javascript.0.Wecker.alarm.enabled",false);
                          }

                          }

                          ! // schedule script
                          schedule("*/60 * * * * *", CreateAlarm);
                          ! ````

                          • ein Skript, welches aus dem erstellten Objekt ("javascript.0.Wecker.alarm") ein paar Schedules zu früheren Uhrzeiten erzeugt

                          ! ````
                          //HueTrigger
                          function HueTrigger() {

                          // get state
                          var state = getState("javascript.0.Wecker.hue.triggered").val
                          
                          // set state iff false and turn on hue wakup light scene
                          if (state === false) {
                              setState("javascript.0.Wecker.hue.triggered", true)
                              setState("alexa2.0.Smart-Home-Devices.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.active",true);
                          }   
                          

                          }

                          ! //CoffeeTrigger
                          function CoffeeTrigger() {

                          // get state
                          var state = getState("javascript.0.Wecker.coffee.triggered").val
                          
                          // set state iff false and turn on coffee plug
                          if (state === false) {
                              setState("javascript.0.Wecker.coffee.triggered", true)
                              setState("alexa2.0.Smart-Home-Devices.XXXXXXXXXXXXXXXXXXXXXXXXXXXX.powerState",true);
                          }   
                          

                          }

                          ! // init timers
                          var timer_hue=null;
                          var timer_coffee=null;
                          ! // set timers for alarm time string
                          function AlarmTimer(timestring) {

                          // check if timestring is not none
                          if (timestring.val !== "none") {
                          
                              // get time
                              var alarmtime = timestring.val.split(':');
                          
                              // set hue timer
                              var huetime = new Date(1,1,1,alarmtime[0],alarmtime[1],alarmtime[2],0);
                              huetime.setMinutes(huetime.getMinutes()-11);
                              clearSchedule(timer_hue);
                              timer_hue = schedule(String(huetime.getMinutes()) + ' ' + String(huetime.getHours()) + ' * * *', HueTrigger);   
                          
                              // save hue object
                              setState("javascript.0.Wecker.hue.time",String(huetime.getHours()).replace(/^(\d)$/, "0$1") + ":" + String(huetime.getMinutes()).replace(/^(\d)$/, "0$1") + ":00");
                              setState("javascript.0.Wecker.hue.enabled",true);
                          

                          !
                          // set coffee timer
                          var coffeetime = new Date(1,1,1,alarmtime[0],alarmtime[1],alarmtime[2],0);
                          coffeetime.setMinutes(coffeetime.getMinutes()-60);
                          clearSchedule(timer_coffee);
                          timer_coffee = schedule(String(coffeetime.getMinutes()) + ' ' + String(coffeetime.getHours()) + ' * * *', CoffeeTrigger);

                              // save coffe object
                              setState("javascript.0.Wecker.coffee.time",String(coffeetime.getHours()).replace(/^(\d)$/, "0$1") + ":" + String(coffeetime.getMinutes()).replace(/^(\d)$/, "0$1") + ":00");
                              setState("javascript.0.Wecker.coffee.enabled",true);
                          

                          !
                          }
                          else {
                          ! // clear hue timer
                          clearSchedule(timer_hue);
                          setState("javascript.0.Wecker.hue.time","none");
                          setState("javascript.0.Wecker.hue.enabled",false);

                              // clear coffee timer
                              clearSchedule(timer_coffee);
                              setState("javascript.0.Wecker.coffee.time","none");
                              setState("javascript.0.Wecker.coffee.enabled",false);
                          
                          }
                          

                          ! }
                          ! // run on start of script
                          AlarmTimer(getState("javascript.0.Wecker.alarm.time"));
                          ! // subscribe to alarm.time
                          on("javascript.0.Wecker.alarm.time",function(obj){AlarmTimer(getState("javascript.0.Wecker.alarm.time"));});

                          
                          - ein Skript was den Alarm trigger nutzt um beim Beenden des Weckers ein Skript zu starten und trigger zu resetten
                          
                          >! ````
                          // define regex for alarm trigger
                          var x = new RegExp("\alexa2\.0\.Echo-Devices.*\.Alarm\.*\.triggered");
                          >! // on trigger true
                          on({id: x, val: true}, function (obj) {
                          
                              // get alarm trigger
                              var state = getState("javascript.0.Wecker.alarm.triggered").val
                          >!     // set alarm trigger true
                              if (state === false) {
                                  setState("javascript.0.Wecker.alarm.triggered", true);
                              } 
                          
                          });
                          >! // on trigger false
                          on({id: x, val: false}, function (obj) {
                          
                              // get alarm trigger
                              var state = getState("javascript.0.Wecker.alarm.triggered").val
                          
                              // set alarm, hue, and coffee false and run routine for alarm off
                              if (state === true) {
                                  setState("javascript.0.Wecker.alarm.triggered", false)
                                  setState("javascript.0.Wecker.coffee.triggered", false)
                                  setState("javascript.0.Wecker.hue.triggered", false)
                                  setState("alexa2.0.Echo-Devices.XXXXXXXXXXXXXXXX.Routines.XXXXXXXXXXXXXXXXXX", true);
                              }
                          
                          });
                          

                          Falls irgendjemand elegantere Wege oder Lösungen kennt, sind diese Willkommen. Vorallem, dass der Selektor IDs zu gelöschten Objekten findet sorgt im Moment dazu, dass der LOG zugemüllt wird.

                          BG

                          1 Reply Last reply Reply Quote 0
                          • G
                            gcaruso last edited by

                            Super qoka. Vielen Dank. Zwar viele WARN im log aber er macht was er soll. Ich weiß auch nicht besser 😄

                            Nochmal Vielen Dank.

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            926
                            Online

                            31.7k
                            Users

                            79.9k
                            Topics

                            1.3m
                            Posts

                            3
                            12
                            1325
                            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