Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Lichtwecker mit alexa2

    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

    Lichtwecker mit alexa2

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @Renegade 0 last edited by mickym

      @renegade-0 Ok - ich sehe schon das Problem.

      $moment($$.get_date+" "+$$.get_time,'HH:mm:ss').subtract($$.time_pre, 'minutes')
      

      Du musst halt mal posten, mit was Du Datumsstring erzeugen willst. Entweder erstellst Du im Vorfeld das Datum mit einer payload, mit der sich direkt ein $moment erzeugen lässt:

      https://momentjs.com/docs/#/parsing/string/

      In dem Fall brauch der Parser gar keine Hilfe, zur Interpretation des Eingabedatums. Insofern brauchst Du die Eingabe-Formatierung nämlich gar nicht. Ich sehe ja zum Glück hast Du ja den Screenshot gepostet. Musst Du gar nicht machen, als das nur zusammen setzen.

      So ich hab Dir die Change-Node so gebastelt, das es funktionieren sollte.

      $moment($$.get_date & " " & $$.get_time).subtract($$.time_pre, 'minutes').format('YYYY-MM-DD HH:mm:ss')	
      

      [
          {
              "id": "2fd34dfda714c704",
              "type": "change",
              "z": "582b1bd74b95c464",
              "name": "Alarm - x Minuten",
              "rules": [
                  {
                      "t": "set",
                      "p": "payload",
                      "pt": "msg",
                      "to": "$moment($$.get_date & \" \" & $$.get_time).subtract($$.time_pre, 'minutes').format('YYYY-MM-DD HH:mm:ss')\t",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 370,
              "y": 560,
              "wires": [
                  [
                      "201593768bcdc439",
                      "ac453d5e64a6df2b"
                  ]
              ]
          }
      ]
      

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

        @mickym

        $moment($$.get_date+" "+$$.get_time,'HH:mm:ss').subtract($$.time_pre, 'minutes')
        

        Das ist noch falsch. Also quasi aus den variablen get_date und get_time die korrekte Formatierung für $moment.
        Auf dem Bild ist unter den Datenpunkten zu sehen, wie die Strings aussehen.

        mickym 1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @Renegade 0 last edited by mickym

          @renegade-0 Hab es Dir gerade geändert. Wenn Du die Ausgabeformatierung aus den beiden Change Nodes des ursprünglichen Flows, einfach wegschmeisst, solltest Du natürlich schauen, was die machen und dann halt vorher implementieren. Wie gesagt hab dir den Code gepostet.

          Außerdem verknüpft man Zeichenketten in JSONATA nicht mit "+" sondern mit "&". 😉
          https://docs.jsonata.org/other-operators

          Im Prinzip kann die cron-plus Node auch mehrere Alarms machen - wenn Du mehrere Alexa Alarms gleichzeitig hast. Du brauchst auch keinen Statischen definieren.

          Also Du kannst die cron-plus Node durchaus leeren und dann über das topic definieren.

          2d3e7fe4-7866-4d6f-9f2e-c588e1de5706-image.png

          Die Alarme, die Du nicht fix in die cronplus eingegeben hast, sind dynamische Alarms - die kannst Du auch ausgeben lassen.

          087c6480-60d8-4879-9df8-0413ddc499ad-image.png

          Ich poste Dir nochmal kurz den letzten Teil des Flows:

          [
             {
                 "id": "ef4c7b9b08788ed9",
                 "type": "cronplus",
                 "z": "582b1bd74b95c464",
                 "name": "",
                 "outputField": "payload",
                 "timeZone": "",
                 "persistDynamic": false,
                 "commandResponseMsgOutput": "output1",
                 "outputs": 1,
                 "options": [
                     {
                         "name": "Boost",
                         "topic": "Boost",
                         "payloadType": "default",
                         "payload": "",
                         "expressionType": "dates",
                         "expression": "2021-11-23 00:00",
                         "location": "",
                         "offset": "0",
                         "solarType": "all",
                         "solarEvents": "sunrise,sunset"
                     }
                 ],
                 "x": 800,
                 "y": 560,
                 "wires": [
                     [
                         "29b7eb74d85375e7"
                     ]
                 ]
             },
             {
                 "id": "ac453d5e64a6df2b",
                 "type": "change",
                 "z": "582b1bd74b95c464",
                 "name": "update cron plus",
                 "rules": [
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "{\t    \"command\": \"add\",\t    \"name\": \"Alexa\",\t    \"expression\": payload,\t    \"expressionType\": \"dates\"\t}",
                         "tot": "jsonata"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 590,
                 "y": 560,
                 "wires": [
                     [
                         "ef4c7b9b08788ed9"
                     ]
                 ]
             },
             {
                 "id": "fa9b3a45a0bb61a7",
                 "type": "inject",
                 "z": "582b1bd74b95c464",
                 "name": "",
                 "props": [
                     {
                         "p": "topic",
                         "vt": "str"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "status-all",
                 "x": 620,
                 "y": 500,
                 "wires": [
                     [
                         "ef4c7b9b08788ed9"
                     ]
                 ]
             },
             {
                 "id": "29b7eb74d85375e7",
                 "type": "debug",
                 "z": "582b1bd74b95c464",
                 "name": "Aktive Alarms",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 1020,
                 "y": 560,
                 "wires": []
             },
             {
                 "id": "42db4f692eb73166",
                 "type": "inject",
                 "z": "582b1bd74b95c464",
                 "name": "",
                 "props": [
                     {
                         "p": "topic",
                         "vt": "str"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "remove-all",
                 "x": 620,
                 "y": 460,
                 "wires": [
                     [
                         "ef4c7b9b08788ed9"
                     ]
                 ]
             }
          ]
          

          Du kannst im Übrigen auch bei dem Alarm mitgeben, welche payload die Node ausspuken soll, falls Du das für die Steuerung Deiner Lampe brauchst.

          Also wenn Du mit true Deine Lampe einschaltest, kannst Du Dir zu dem Zeitpunkt einfach nur ein true ausgeben lassen. Erspart Dir eine ChangeNode.

          {
              "command": "add",
              "name": "Alexa",
              "expression": payload,
              "expressionType": "dates",
              "payloadType" : "bool",
              "payload" : true
          }
          

          Über den Namen kannst Du Dir ggf. auch mit dem topic (aus Alexa Datenpunkten) mehrere Alarms in der cron-plus Node definieren.

          Über den status bekommst Du zu allen Alarms als Array geliefert:

          b37cd08f-bcbd-4d91-8646-025460543ec3-image.png

          Du solltest dann nur alle inaktiven Alarms löschen (vielleicht einmal am Tag), wenn Du nicht nur mit einem arbeiten willst den Du updatest, wie im ursprünglichen Flow:

          db2c2825-03c9-45ef-9727-592d66823e20-image.png

          R 2 Replies Last reply Reply Quote 0
          • R
            Renegade 0 @mickym last edited by

            @mickym

            @mickym sagte in Lichtwecker mit alexa2:

            Außerdem verknüpft man Zeichenketten in JSONATA nicht mit "+" sondern mit "&".
            https://docs.jsonata.org/other-operators

            Ja danke dir. Sorry ich komm halt aus der Java Ecke. JSONata ist noch komplett neu für mich und ich hab auch noch nicht so wirklich ein gutes wiki gefunden.
            😉

            Aber ich bin ja lernwillig.

            Wow ok, das sind mal ordentlich Informationen. Werd das mal einbauen und alles durchackern. Wenn das läuft ist eh nur noch die Lampensteuerung. Da muss ich noch wegen dem Dimmen schauen, aber der Rest macht mir jetzt keinen Kopf.

            Danke dir auf jeden Fall schon mal für die ganzen Infos.

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

              @mickym sagte in Lichtwecker mit alexa2:

              Du kannst im Übrigen auch bei dem Alarm mitgeben, welche payload die Node ausspuken soll, falls Du das für die Steuerung Deiner Lampe brauchst.
              Also wenn Du mit true Deine Lampe einschaltest, kannst Du Dir zu dem Zeitpunkt einfach nur ein true ausgeben lassen. Erspart Dir eine ChangeNode.

              {
                  "command": "add",
                  "name": "Alexa",
                  "expression": payload,
                  "expressionType": "dates",
                  "payloadType" : "bool",
                  "payload" : true
              }
              
              

              Hab ich jetzt eingesetzt und getestet, aber die Ausgabe ist irgendwie ein Object.

              mickym 1 Reply Last reply Reply Quote 0
              • mickym
                mickym Most Active @Renegade 0 last edited by mickym

                @renegade-0 na nicht bei der Statusabfrage, sondern wenn der Trigger aktiv wurde. Bei mir geht das.

                a100ec8e-b2cb-4a51-af09-020fc1541e61-image.png

                Natürlich nur die payload - das außerhalb der payload noch andere Infos enthalten sind, kann sein.

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

                  @mickym

                  Ja habs jetzt auch gesehen. Kann man nicht auf 2 Ausgänge umschalten? Einmal command und einmal messages?

                  WEnn ich halt mit einem festen Alarm auf Update arbeite, muss ich nach dem Alarm eine Abfrage über alle Alarme machen, welcher der nächste ist und den setzen. Ich habe ja meist mehrere Alarme laufen. wochentags für die Arbeit, Wochenende mim Hund raus und hier und da nochmal einmalige Alarme. Da ich nicht für jeden Alarm(weil dynamisch) eine Struktur mit Datenpunkten setzen kann, habe ich mir überlegt, einfach ein enable = true reinzusetzen und nur wenn das aktiv ist, werden Alrame mit Lichtwecker gestellt, wenn nicht, werden sie ignoriert.

                  mickym 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @Renegade 0 last edited by

                    @renegade-0 sagte in Lichtwecker mit alexa2:

                    Kann man nicht auf 2 Ausgänge umschalten? Einmal command und einmal messages?

                    Warum nicht, spricht ja nichts dagegen?

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

                      @mickym
                      Das läuft jetzt auch. Nur die Alarme werden immer überschrieben, wenn ich mehrere habe. hab jetzt mal Name und expression auf payload gesetzt. Jetzt sind halt im object topic, payload und expression gleich, aber das stört ja nicht oder?

                      Hast du noch eine Idee, wie ich das mit dem Dimmen machen kann? Also in der Zeit time_pre soll er von Wert x zu Wert y das Licht hochfahren.

                      mickym 1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @Renegade 0 last edited by mickym

                        @renegade-0

                        Also bei mir tut das:

                        4770083a-ebb3-44c9-949c-3bf5cb1f7b9d-image.png

                        Die Alarme werden dann überschrieben, wenn sie den gleichen Namen haben.

                        Bei dem Dimmen würde ich halt Zielwert des Dimmens festlegen und dann anhand der Vorlaufzeit, den zu veränderten Dimmwert berechnen (wahrscheinlich in Abhängigkeit des aktuellen Wertes) - also ein Delta pro Minute um den Zielwert zu erreichen. Dann mit einer Triggernode halt jede Minute triggern und um das Delta den Dimmwert erhöhen.

                        Insgesamt also 2 TriggerNodes - die erste um den Zeitraum (pre_time) der 2.Triggernode zu steuern, die als Taktgeber dient. Flow kommt gleich.

                        Die Rechnerei musst halt dann anschliessend machen:

                        362daa0a-0a20-41ae-9f14-b497b006bd2d-image.png

                        [
                           {
                               "id": "afa7101ed59775af",
                               "type": "trigger",
                               "z": "582b1bd74b95c464",
                               "name": "steuert Aktivität",
                               "op1": "true",
                               "op2": "false",
                               "op1type": "bool",
                               "op2type": "bool",
                               "duration": "1",
                               "extend": false,
                               "overrideDelay": true,
                               "units": "min",
                               "reset": "",
                               "bytopic": "all",
                               "topic": "topic",
                               "outputs": 1,
                               "x": 660,
                               "y": 800,
                               "wires": [
                                   [
                                       "4b8d2f6cbcd13bba"
                                   ]
                               ]
                           },
                           {
                               "id": "650e5d29f3a9e598",
                               "type": "inject",
                               "z": "582b1bd74b95c464",
                               "name": "set time_pre",
                               "props": [
                                   {
                                       "p": "time_pre",
                                       "v": "10",
                                       "vt": "num"
                                   }
                               ],
                               "repeat": "",
                               "crontab": "",
                               "once": false,
                               "onceDelay": 0.1,
                               "topic": "",
                               "x": 250,
                               "y": 800,
                               "wires": [
                                   [
                                       "fa3939a8c2b34a28"
                                   ]
                               ]
                           },
                           {
                               "id": "4b8d2f6cbcd13bba",
                               "type": "trigger",
                               "z": "582b1bd74b95c464",
                               "name": "Taktgeber",
                               "op1": "true",
                               "op2": "0",
                               "op1type": "bool",
                               "op2type": "str",
                               "duration": "-1",
                               "extend": false,
                               "overrideDelay": false,
                               "units": "min",
                               "reset": "false",
                               "bytopic": "all",
                               "topic": "topic",
                               "outputs": 1,
                               "x": 840,
                               "y": 800,
                               "wires": [
                                   [
                                       "870a93288a2eeac7"
                                   ]
                               ]
                           },
                           {
                               "id": "870a93288a2eeac7",
                               "type": "debug",
                               "z": "582b1bd74b95c464",
                               "name": "Trigger",
                               "active": true,
                               "tosidebar": true,
                               "console": false,
                               "tostatus": false,
                               "complete": "payload",
                               "targetType": "msg",
                               "statusVal": "",
                               "statusType": "auto",
                               "x": 1000,
                               "y": 800,
                               "wires": []
                           },
                           {
                               "id": "fa3939a8c2b34a28",
                               "type": "change",
                               "z": "582b1bd74b95c464",
                               "name": "",
                               "rules": [
                                   {
                                       "t": "set",
                                       "p": "delay",
                                       "pt": "msg",
                                       "to": "time_pre*60*1000",
                                       "tot": "jsonata"
                                   }
                               ],
                               "action": "",
                               "property": "",
                               "from": "",
                               "to": "",
                               "reg": false,
                               "x": 460,
                               "y": 800,
                               "wires": [
                                   [
                                       "afa7101ed59775af"
                                   ]
                               ]
                           }
                        ]
                        

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

                          @mickym

                          Mahlzeit.

                          deutlich simpler gelöst, als mein erster Versuch, aber leider das selbe Problem, wie mein Versuch.

                          Sagen wir time = 10min , x = 20, y = 80. Dann soll er gleichmäßig innerhalb der 10 min von x auf y ansteigen.
                          Wenn jetzt aber time 30min, x = 0, y = 75. Dann muss er ja entweder eine andere Zeitspanne zwischen den Impulsen oder größere Impulse haben.

                          Und genau bei dieser Dynamik beiß ich mir in node-Red die Zähne aus. In Java wäre es eine einfache logische Rechnung und der Intervall wäre ausgerechnet. Dann immer +1 und gut.

                          mickym 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @Renegade 0 last edited by mickym

                            @renegade-0 Ja aber das hat doch nichts mit NR zu tun. Du musst halt einfach im ersten Fall pro Minute um 6 steigen, um zweiten Fall um 2,5. Wo ist das Problem?

                            Und wenn Du lieber codieren willst - dann codiere halt alles in einer function Node.

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

                              @mickym
                              Ja das ist mir soweit theoretisch klar, aber wie ich das sinnvoll umsetzen kann, da beißt es bei mir noch aus. function node hab ich noch nie wirklich benutzt, aber ich denke, damit geht so etwas am besten. Ich hab noch keine node für Berechnungen direkt gefunden. Oder geht sowas über JSONata sinnvoll?

                              mickym 1 Reply Last reply Reply Quote 0
                              • mickym
                                mickym Most Active @Renegade 0 last edited by mickym

                                @renegade-0 Über JSONATA und Change Node mach ich fast alles. Überhaupt kein Problem. Damit kann man alles berechnen.

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

                                  @mickym
                                  OK, hast du mal eine vernünftige wiki für JSONata?

                                  mickym 1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @Renegade 0 last edited by mickym

                                    @renegade-0 sagte in Lichtwecker mit alexa2:

                                    @mickym
                                    OK, hast du mal eine vernünftige wiki für JSONata?

                                    nur das; https://docs.jsonata.org/overview

                                    Das hast Du sicher schon gefunden. Das try Ding nutze ich aber oft. Aber in Deinem Fall ist nicht viel zu tun.

                                    Einfach Eigenschaft der Nachricht *+-/ andere Eigenschaft der Nachricht usw.

                                    Also wenn Du Dein 1. Beispiel nimmst und die Eigenschaften: msg.pre_time = 10, msg.start = 20, msg.ende = 80 ist, dann berechnest Du das Delta pro Minute einfach

                                    ed402842-616b-4f2c-9e52-79e19aa9ee5e-image.png

                                    [
                                       {
                                           "id": "7ee6cbae1ec58d73",
                                           "type": "change",
                                           "z": "289f539dcc33814e",
                                           "name": "",
                                           "rules": [
                                               {
                                                   "t": "set",
                                                   "p": "payload",
                                                   "pt": "msg",
                                                   "to": "(ende-start)/pre_time",
                                                   "tot": "jsonata"
                                               }
                                           ],
                                           "action": "",
                                           "property": "",
                                           "from": "",
                                           "to": "",
                                           "reg": false,
                                           "x": 570,
                                           "y": 320,
                                           "wires": [
                                               [
                                                   "817491f5d7cea76b"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "182d6f4da623b547",
                                           "type": "inject",
                                           "z": "289f539dcc33814e",
                                           "name": "",
                                           "props": [
                                               {
                                                   "p": "pre_time",
                                                   "v": "10",
                                                   "vt": "num"
                                               },
                                               {
                                                   "p": "start",
                                                   "v": "20",
                                                   "vt": "num"
                                               },
                                               {
                                                   "p": "ende",
                                                   "v": "80",
                                                   "vt": "num"
                                               }
                                           ],
                                           "repeat": "",
                                           "crontab": "",
                                           "once": false,
                                           "onceDelay": 0.1,
                                           "topic": "",
                                           "x": 370,
                                           "y": 320,
                                           "wires": [
                                               [
                                                   "7ee6cbae1ec58d73",
                                                   "e553c3b2eee51e91"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "817491f5d7cea76b",
                                           "type": "debug",
                                           "z": "289f539dcc33814e",
                                           "name": "Delta/Min",
                                           "active": true,
                                           "tosidebar": true,
                                           "console": false,
                                           "tostatus": false,
                                           "complete": "payload",
                                           "targetType": "msg",
                                           "statusVal": "",
                                           "statusType": "auto",
                                           "x": 760,
                                           "y": 320,
                                           "wires": []
                                       },
                                       {
                                           "id": "e553c3b2eee51e91",
                                           "type": "debug",
                                           "z": "289f539dcc33814e",
                                           "name": "Eingabe",
                                           "active": true,
                                           "tosidebar": true,
                                           "console": false,
                                           "tostatus": false,
                                           "complete": "true",
                                           "targetType": "full",
                                           "statusVal": "",
                                           "statusType": "auto",
                                           "x": 560,
                                           "y": 260,
                                           "wires": []
                                       }
                                    ]
                                    

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    813
                                    Online

                                    31.9k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    3
                                    23
                                    1005
                                    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