Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. qoka

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Q
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 6
    • Best 0
    • Groups 0

    qoka

    @qoka

    0
    Reputation
    23
    Profile views
    6
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    qoka Follow

    Latest posts made by qoka

    • RE: Alexa2.0 Adapter - Wecker

      Ich habe ein Skript gecoded (mehr schlecht als recht) welches genau sowas umsetzt [1]. Durch einen Bug im Javascript-Adapter wird aber der Log etwas zugemüllt dadurch. Habe das mittlerweile auch für die Musikwecker erweitert, falls Interesse besteht.

      [1] viewtopic.php?f=21&t=16682&p=179942#p179942

      posted in ioBroker Allgemein
      Q
      qoka
    • Selector, Objekte, und States gelöschter Wecker/Alarme

      Hallo zusammen,

      ein Verhalten des selectors ($(…)) beim Suchen von Wecker Objekten bringt mich langsam aber sicher um den Verstand 😄 Das Phänomen wurde hier schon von BigTastyBacon (viewtopic.php?f=37&t=16095&start=240#p176009) berichtet.

      Ich lösche einen Wecker in der Alexa App und sehe

      alexa2.0	2018-09-26 21:08:50.764	info	channel Echo-Devices.XXXXXXX.Alarm.d990f7ee-d347-3c7c-91fc-416fe363d131 deleted (null)
      alexa2.0	2018-09-26 21:08:50.763	info	state Echo-Devices.XXXXXXX.Alarm.d990f7ee-d347-3c7c-91fc-416fe363d131.triggered deleted
      alexa2.0	2018-09-26 21:08:50.762	info	state Echo-Devices.XXXXXXX.Alarm.d990f7ee-d347-3c7c-91fc-416fe363d131.enabled deleted
      alexa2.0	2018-09-26 21:08:50.751	info	state Echo-Devices.XXXXXXX.Alarm.d990f7ee-d347-3c7c-91fc-416fe363d131.time deleted
      
      

      Eine Abfrage:

      $("state[id=Alarm.]").each(function (id, i) {
          console.log('id');
          console.log(id);
          console.log('obj')
          console.log(JSON.stringify(getObject(id)))
          console.log('state')
          console.log(JSON.stringify(getState(id).val))
      });
      
      

      Liefert dann beispielsweise für *.enabled

      javascript.0	2018-09-26 21:16:16.981	info	script.js.AlarmCopy: true
      javascript.0	2018-09-26 21:16:16.981	info	script.js.AlarmCopy: state
      javascript.0	2018-09-26 21:16:16.981	info	script.js.AlarmCopy: null
      javascript.0	2018-09-26 21:16:16.980	warn	Object "alexa2.0.Echo-Devices.XXXXXXX.Alarm.d990f7ee-d347-3c7c-91fc-416fe363d131.enabled" does not exist
      javascript.0	2018-09-26 21:16:16.980	info	script.js.AlarmCopy: obj
      javascript.0	2018-09-26 21:16:16.980	info	script.js.AlarmCopy: alexa2.0.Echo-Devices.XXXXXXX.Alarm.d990f7ee-d347-3c7c-91fc-416fe363d131.enabled
      javascript.0	2018-09-26 21:16:16.979	info	script.js.AlarmCopy: id
      
      

      Ein Neustart des javascript adapters löst das Problem bis erneut ein Wecker gelöscht wurde.

      Kurzum: Der selector findet gelöschte Wecker, deren Objekte existieren nicht mehr, aber die States können gelesen werden.

      Meine Frage: Ist das ein Verständnisproblem (Objekt/State) bei mir, oder ist hier tatsächlich etwas nicht in Ordnung? Gibt es einen alternativen Weg um alle aktuell existieren Wecker Objekte auszulesen der das umgeht?

      Beste Grüße und Vielen Dank

      qoka

      posted in Cloud Dienste
      Q
      qoka
    • RE: Alexa2 - Object von getriggerte channel ansprechen

      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

      posted in Skripten / Logik
      Q
      qoka
    • RE: Alexa2 - Object von getriggerte channel ansprechen

      @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

      posted in Skripten / Logik
      Q
      qoka
    • RE: Iobroker.alexa2 v0.4+

      @BigTastyBacon:

      @apollon77:

      Mal JavaScript Adapter neu gestartet? `

      Hallo,

      ja, dann beginnt das ganze Spiel von vorne. Scheint so, als müsste man, nachdem man einen Wecker gelöscht hat (Alexa App –> Wecker löschen) den Adapter neu starten. Liegt dann wohl am Javascript Adapter, oder? :? `

      Hallo, ich bin auf das gleiche Problem (Selector findet alte, gelöschte Wecker-Objekte, die nicht im ioBroker Objektbaum angezeigt werden) gestoßen. Hat noch irgendjemand eine Idee, wie man das lösen kann? Ist für das Auslesen der Weckerdaten irgendwie doch essentiell 😄

      BG und Danke,

      qoka

      posted in Cloud Dienste
      Q
      qoka
    • RE: Alexa2 - Object von getriggerte channel ansprechen

      Hallo,

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

      BG

      posted in Skripten / Logik
      Q
      qoka
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo