Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Alexa2 - Object von getriggerte channel ansprechen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Alexa2 - Object von getriggerte channel ansprechen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 3 Kommentatoren 1.5k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Q Offline
    Q Offline
    qoka
    schrieb am zuletzt editiert von
    #3

    Hallo,

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

    BG

    1 Antwort Letzte Antwort
    0
    • G Offline
      G Offline
      gcaruso
      schrieb am zuletzt editiert von
      #4

      Ne leider nicht.

      1 Antwort Letzte Antwort
      0
      • H Offline
        H Offline
        homecineplexx
        schrieb am zuletzt editiert von
        #5

        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 Antwort Letzte Antwort
        0
        • G Offline
          G Offline
          gcaruso
          schrieb am zuletzt editiert von
          #6

          @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 Antwort Letzte Antwort
          0
          • H Offline
            H Offline
            homecineplexx
            schrieb am zuletzt editiert von
            #7

            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 Antwort Letzte Antwort
            0
            • G Offline
              G Offline
              gcaruso
              schrieb am zuletzt editiert von
              #8

              @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 Antwort Letzte Antwort
              0
              • Q Offline
                Q Offline
                qoka
                schrieb am zuletzt editiert von
                #9

                @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 Antwort Letzte Antwort
                0
                • G Offline
                  G Offline
                  gcaruso
                  schrieb am zuletzt editiert von
                  #10

                  @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 Antwort Letzte Antwort
                  0
                  • Q Offline
                    Q Offline
                    qoka
                    schrieb am zuletzt editiert von
                    #11

                    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 Antwort Letzte Antwort
                    0
                    • G Offline
                      G Offline
                      gcaruso
                      schrieb am zuletzt editiert von
                      #12

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

                      Nochmal Vielen Dank.

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      729

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe