Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Alexa Wecker schaltet Beleuchtung an

    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

    Alexa Wecker schaltet Beleuchtung an

    This topic has been deleted. Only users with topic management privileges can see it.
    • X
      xbow42 @dslraser last edited by xbow42

      @dslraser danke, sieht schon mal sehr schlüssig aus!

      B 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @dslraser last edited by paul53

        @dslraser
        Besser so:

        if(existsObject(id)) return existsState(id);
        return false;
        

        sonst wird bei nicht existierendem Objekt undefined zurück gegeben.

        1 Reply Last reply Reply Quote 3
        • B
          bishop @xbow42 last edited by

          @xbow42
          würdest du mir dein blockly für den Wecker zur Verfügung stellen!?!
          Würde auch gerne auf ICal/Feiertage reagieren damit er den Wecker dann ausschaltet.

          Danke
          Grüße

          X 1 Reply Last reply Reply Quote 0
          • X
            xbow42 @bishop last edited by xbow42

            @bishop
            ich bin mir nicht sicher, ob du damit was anfangen kannst.
            so 1zu1 wird das nicht laufen da ich weitere Adapter nutze und manuell angelegte DP unter userdata.0 angelegt habe. Mein ICal-Adapter filtert auf "Urlaub".

            Die Funktion "chk_IsWorkingDay" , hilft dir vieleicht dein Script anzupassen.
            iobroker_script_chk_IsWorkingDay.png
            Edit optimierte chk_Funktion:

            <block xmlns="https://developers.google.com/blockly/xml" type="procedures_defreturn" id="w)XegB]vEJkV_0eX]6Qc" x="462.99492026748976" y="-512.0510259487883">
             <field name="NAME">chk_isWorkingDay</field>
             <comment pinned="false" h="80" w="160">Funktion - Ist aktueller Tag ein Arbeitstag? (iCal/Feiertag-Adapter)</comment>
             <statement name="STACK">
               <block type="variables_set" id="i?z|+p`afay)h4l5A(M_">
                 <field name="VAR" id="+mr|bkNhZXs@C}[MoEko">isWorkingday</field>
                 <value name="VALUE">
                   <block type="logic_negate" id="6*qRRQ$aCx.:T03Eqv^o">
                     <value name="BOOL">
                       <block type="logic_operation" id="a#e8Ku_;:UcuHr).Gd(a" inline="false">
                         <field name="OP">OR</field>
                         <value name="A">
                           <block type="logic_operation" id="1Uq#I7@}iyEG27`^+T[m" inline="false">
                             <field name="OP">OR</field>
                             <value name="A">
                               <block type="get_value" id="H(*G_1H]p-.$3OI1P.Yc">
                                 <field name="ATTR">val</field>
                                 <field name="OID">feiertage.0.heute.boolean</field>
                               </block>
                             </value>
                             <value name="B">
                               <block type="get_value" id="_^95;?E8rUNUA0,t4M?G">
                                 <field name="ATTR">val</field>
                                 <field name="OID">ical.0.events.0.today.Urlaub</field>
                               </block>
                             </value>
                           </block>
                         </value>
                         <value name="B">
                           <block type="logic_operation" id="upyRkyiaX,bAwQ8E]WMR" inline="false">
                             <field name="OP">OR</field>
                             <value name="A">
                               <block type="logic_compare" id=".4o(!h+4!LE5wl4Z)5Bg">
                                 <field name="OP">EQ</field>
                                 <value name="A">
                                   <block type="time_get" id="FLfeVsl:h(K*eqz,;:ev">
                                     <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                     <field name="OPTION">wd</field>
                                   </block>
                                 </value>
                                 <value name="B">
                                   <block type="math_number" id="+W9B-clYl6nM3l2}|oqx">
                                     <field name="NUM">0</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                             <value name="B">
                               <block type="logic_compare" id="m(L2ytt)gZ5cq2yL17dw">
                                 <field name="OP">EQ</field>
                                 <value name="A">
                                   <block type="time_get" id="@nw.m$8S=3m|l}m}pB;c">
                                     <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                     <field name="OPTION">wd</field>
                                   </block>
                                 </value>
                                 <value name="B">
                                   <block type="math_number" id="(~^XXmzPIC8fv7+,j~(F">
                                     <field name="NUM">6</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                           </block>
                         </value>
                       </block>
                     </value>
                   </block>
                 </value>
                 <next>
                   <block type="control" id="#7Yn85R$R|n#0oF*_1[v">
                     <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                     <field name="OID">0_userdata.0.Allgemein.IsWorkingDay</field>
                     <field name="WITH_DELAY">FALSE</field>
                     <value name="VALUE">
                       <block type="variables_get" id="KlK$-Xp5Kx{O0yf;bNrT">
                         <field name="VAR" id="+mr|bkNhZXs@C}[MoEko">isWorkingday</field>
                       </block>
                     </value>
                   </block>
                 </next>
               </block>
             </statement>
             <value name="RETURN">
               <block type="variables_get" id="[:l(YYM|Zjgm_D[zT0$p">
                 <field name="VAR" id="+mr|bkNhZXs@C}[MoEko">isWorkingday</field>
               </block>
             </value>
            </block>
            


            iobroker_AlexaWecker.txt

            Export DP_Wecker
            0_userdata.0.Geräte.Wecker.json

            B 1 Reply Last reply Reply Quote 0
            • B
              bishop @xbow42 last edited by

              @xbow42
              werde mal schauen was ich verwenden kann!

              vielen dank

              1 Reply Last reply Reply Quote 0
              • P
                Paddex last edited by

                Hallo,

                ich möchte das Thema noch einmal aufgreifen und auch hier mal meine Frage stellen.
                Ich möchte bei mir eine Steuerung programmieren, die 30 Minuten vor dem ersten eingestellten Wecker die Heizung im Badezimmer anmachen soll.

                Dafür itteriere ich Nachts um 4 Uhr über alle Alarm-Ordner (später kann man den dies auch machen lassen, wenn z.B. in der Alexa Summery das Stichwort Wecker hällt). Suche die raus die "true" sind, packen sie dann in eine Liste welche ich dann sortiere.

                Dann siehe ich von der kleinsten Uhrzeit 30 Minuten ab und habe die Lösung 🙂

                JUHU - dachte ich ...

                Leider musste ich feststellen, dass wenn ein neuer Wecker angelegt wird, das Script diesen nicht findet. Erst wenn ich den javascript Adapter neu starte, erst dann findet er den neuen Wecker.

                Hier erstmal mein Code:

                var lst_Alarme, lst_Weckzeiten, int_Anzahl, acID, i, str_Weckzeit, str_kleinsteWeckzeitMinus30Min, VorWecker1;
                
                function listsGetSortCompare(type, direction) {
                  var compareFuncs = {
                    "NUMERIC": function(a, b) {
                        return Number(a) - Number(b); },
                    "TEXT": function(a, b) {
                        return a.toString() > b.toString() ? 1 : -1; },
                    "IGNORE_CASE": function(a, b) {
                        return a.toString().toLowerCase() > b.toString().toLowerCase() ? 1 : -1; },
                  };
                  var compare = compareFuncs[type];
                  return function(a, b) { return compare(a, b) * direction; }
                }
                
                
                // Alle Alarme von Schlafzimmer Echo Dot
                lst_Alarme = Array.prototype.slice.apply($("channel[state.id=alexa2.0.Echo-Devices.alexa2.0.Echo-Devices.G09XXXXXXXXXX.Alarm.*.enabled]"));
                lst_Weckzeiten = [];
                int_Anzahl = 0;
                if (!lst_Alarme.length) {
                  console.log('Keine Alarme gefunden');
                } else {
                  for (var acID_index in lst_Alarme) {
                    acID = lst_Alarme[acID_index];
                    int_Anzahl = (typeof int_Anzahl == 'number' ? int_Anzahl : 0) + 1;
                    console.log(([int_Anzahl,' - ',acID,' - ',getState(acID).val].join('')));
                    if (getState(acID).val) {
                      console.log(([acID,' - ',getState(acID).val].join('')));
                      str_Weckzeit = getState((String(acID.slice(0, acID.length - 7)) + 'time')).val;
                      lst_Weckzeiten.push(getDateObject(str_Weckzeit).getTime());
                    }
                  }
                  if (!lst_Weckzeiten.length) {
                    console.log('Keine AKTIVIERTEN Alarme gefunden');
                  } else {
                    console.log('fertige Liste durchsuchen');
                    for (var i_index in lst_Weckzeiten) {
                      i = lst_Weckzeiten[i_index];
                      console.log(('' + formatDate(getDateObject(getDateObject(i).getTime()), "hh:mm:ss")));
                    }
                    console.log('sortierte  Liste');
                    var i_list = lst_Weckzeiten.slice().sort(listsGetSortCompare("NUMERIC", 1));
                    for (var i_index2 in i_list) {
                      i = i_list[i_index2];
                      console.log(('' + formatDate(getDateObject(getDateObject(i).getTime()), "hh:mm:ss")));
                    }
                    console.log('kleinste Element');
                    console.log(('' + formatDate(getDateObject((lst_Weckzeiten.slice().sort(listsGetSortCompare("NUMERIC", 1))[0])), "hh:mm:ss")));
                    console.log('kleinste Element - 30 Minuten');
                    str_kleinsteWeckzeitMinus30Min = ('' + formatDate(getDateObject((parseFloat(getDateObject((lst_Weckzeiten.slice().sort(listsGetSortCompare("NUMERIC", 1))[0])).getTime()) - 30 * 1000 * 60)), "hh:mm:ss"));
                    console.log(str_kleinsteWeckzeitMinus30Min);
                    console.log('kleinste Element - 30 Minuten');
                    (function () {if (VorWecker1) {clearSchedule(VorWecker1); VorWecker1 = null;}})();
                    VorWecker1 = schedule((getDateObject(str_kleinsteWeckzeitMinus30Min).getMinutes()).toString().trim() + ' ' + getDateObject(str_kleinsteWeckzeitMinus30Min).getHours().toString().trim() + ' ' + '*'.toString().trim() + ' ' + '*'.toString().trim() + ' ' + '*'.toString().trim(), async function () {
                    });
                  }
                }
                

                Und hier noch mal in zusammengesetztes Bild vom Blockly:

                BlocklyScriptAlexaWecker.png

                Vielleicht hat ja einer von euch eine Idee, wie man in JS neue Datenpunkte einlesen kann, die Instanz neu starten kann .. etc..

                Vielen Dank und ich bin gespannt

                dslraser Dr. Bakterius 2 Replies Last reply Reply Quote 0
                • dslraser
                  dslraser Forum Testing Most Active @Paddex last edited by

                  @paddex sagte in Alexa Wecker schaltet Beleuchtung an:

                  Vielleicht hat ja einer von euch eine Idee, wie man in JS neue Datenpunkte einlesen kann, die Instanz neu starten kann .. etc..
                  Vielen Dank und ich bin gespannt

                  Vielleicht hilft Dir das hier

                  https://forum.iobroker.net/post/608712

                  1 Reply Last reply Reply Quote 0
                  • Dr. Bakterius
                    Dr. Bakterius Most Active @Paddex last edited by

                    @paddex Siehe auch: https://github.com/ioBroker/ioBroker.javascript/issues/109

                    AlCalzone created this issue in ioBroker/ioBroker.javascript

                    closed $(...) selector misses states #109

                    1 Reply Last reply Reply Quote 0
                    • P
                      Paddex last edited by

                      Hallo und Danke,

                      werde es jetzt die Tage versuch produktiev zu setzen. Erste Test waren schon mal erfolgreich.
                      Wenn das Script um 4 Uhr laufen soll, dann lasse ich den Adapter jetzt einfach um 3:59 neu starten. Funktioniert super über den Expertenmodus in der Instanzenansicht.
                      Noch mal Danke an alle.

                      Gruß

                      haselchen 1 Reply Last reply Reply Quote 0
                      • haselchen
                        haselchen Most Active @Paddex last edited by

                        @apollon77

                        Nimmt Amazon das übel wenn man wie @Paddex das macht und jede Nacht den Adapter neu startet?

                        apollon77 1 Reply Last reply Reply Quote 0
                        • apollon77
                          apollon77 @haselchen last edited by

                          @haselchen Sollte denen egal sein

                          1 Reply Last reply Reply Quote 0
                          • P
                            Paddex last edited by

                            Wieso sollte Amazon einem das übel nehmen? ich starte den JavaScript Adapter neu, nicht den Alexa. Durch den Neustart kennt er die neuen Datenpunkte die Alexa bei jedem neuem Wecker anlegt.

                            haselchen 1 Reply Last reply Reply Quote 0
                            • haselchen
                              haselchen Most Active @Paddex last edited by

                              @paddex

                              Ich bin davon ausgegangen , dass du den Alexa Adapter neu startest.
                              Und da war meine Intention, dass Amazon das irgendwie mitbekommt und nach einer gewissen Zeit temporär den Zugang sperrt.

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              873
                              Online

                              31.9k
                              Users

                              80.1k
                              Topics

                              1.3m
                              Posts

                              blockly javascript
                              13
                              60
                              5208
                              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