Skip to content
  • Home
  • 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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. bshb - Rollladensteuerung mit yhka Homekit

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.2k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

bshb - Rollladensteuerung mit yhka Homekit

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
121 Beiträge 2 Kommentatoren 10.4k Aufrufe 2 Watching
  • Ä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.
  • S sascho

    @mickym

    Also, ich habe gerade mal einen komplett neuen Container mit nur Node Red + der Velux Nodes angelegt.
    Wenn ich per Inject Node 0, 100 eingebe, funktioniert es. Das sieht man daran, dass bei Remaining 40 erscheint und nach 40 Sekunden Current = Target ist.
    13c44af3-4be1-4bcb-89f6-ee15b006a411-image.png

    Was nicht funktioniert, die Inject Node vor den Datenpunkt zu hängen und dann die Velux Node anzusprechen. Dann passiert erst gar nichts, und dann kommt manchmal die Fehlermeldung. Die Fehlermeldung kann nicht mehr mit dem KLF200 Adapter zusammenhängen, da dieser nie im Container installiert wurde. Ich vermute, die Velux Nodes verwenden die gleiche Bibliothek.
    Btw, ich habe in den Red Node Einstellungen die Konvertierung auf String Werten abgestellt. Es kommen also Numbers bei der Velux Node an. Auch mit Stringwerten, übernimmt die Velux Target Node den Wert nicht. Falls wir es nicht so hinbekommen, kann man die Inject nodes auch triggern? Alternativ über die API Node gehen?

    28e8841b-454a-4b62-afcb-4681c1bae464-image.png

    In der Velux Node habe ich noch das Topic ergänzt:
    0f9ac858-3302-4100-83d7-d7f5340d6623-image.png

    mickymM Offline
    mickymM Offline
    mickym
    Most Active
    schrieb am zuletzt editiert von mickym
    #71

    @sascho Also ob Adapter und Nodes die gleiche Bibliothek zugreifen, glaube ich noch nicht 100% - schau mal ob Du wie gesagt unter /opt/iobroker/iobroker-data/node-red/node_modules die gleiche Bibliothek noch mal hast. Ich glaube es noch nicht so ganz. ;)

    Ehrlich gesagt ist mir immer noch nicht klar, warum es sich mit einer Inject Nodes anders als bei einer iobroker-IN Node handelt - ausser natürlich, dass das topic verwirren könnte. Manchmal kommen die Ideen beim Schreiben und Nachdenken gleichzeitig. ;)

    Also Du kannst über einen Datenpunkt natürlich eine ChangeNode verwenden - da würde ich aber erst mal keine payload setzen, sondern das topic löschen - das wäre mE der wesentliche Unterschied zwischen der iobroker-In Node und der Inject Node.

    Also erst mal eine Change Node zwischen der iobroker IN und der Velux Node - in der Du das topic löschst:
    604b4800-cbac-4e62-85bf-28e8ae0e221b-image.png

    Wenn das nicht hilft müsste man mal versuchen, das ganze Nachrichtenobjekt nochmal neu zu erstellen, falls das ein Problem ist. In diesem Fall müsstest Du eine function Node dazwischen schalten mit folgendem Code:

    var value=msg.payload;
    msg={payload:value};
    return msg;
    

    Also erst mal topic löschen - da die Velux Node ja das Topic auswertet:
    df38dcad-2042-44f7-9023-3b6784da787e-image.png
    08802254-2691-457f-8f53-1cce398e061d-image.png

    Und wenn da der Pfad von userdata Punkt drinsteht - wird das ggf. die Ursache sein, warum die velux Node verwirrt ist.

    Alternativ kannst auch zwischen den iobroker-In NOde und der Velux Node eine Change NOde setzen in der Du das topic explizit setzt:

    1abcc2b4-0234-45eb-b135-6de609758c9e-image.png

    @sascho sagte in bshb - Rollladensteuerung mit yhka Homekit:

    Was nicht funktioniert, die Inject Node vor den Datenpunkt zu hängen und dann die Velux Node anzusprechen. Dann passiert erst gar nichts, und dann kommt manchmal die Fehlermeldung.

    Wie gesagt ich glaube das es an dem Topic liegt. Interessant ist auch dass da steht, das die KLF nur 2 Verbindungen erlaubt - deshalb kommt es wohl leicht zu den Engpässen, insbesondere wenn die nicht mehr getrennt werden.

    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

    S 1 Antwort Letzte Antwort
    0
    • mickymM mickym

      @sascho Also ob Adapter und Nodes die gleiche Bibliothek zugreifen, glaube ich noch nicht 100% - schau mal ob Du wie gesagt unter /opt/iobroker/iobroker-data/node-red/node_modules die gleiche Bibliothek noch mal hast. Ich glaube es noch nicht so ganz. ;)

      Ehrlich gesagt ist mir immer noch nicht klar, warum es sich mit einer Inject Nodes anders als bei einer iobroker-IN Node handelt - ausser natürlich, dass das topic verwirren könnte. Manchmal kommen die Ideen beim Schreiben und Nachdenken gleichzeitig. ;)

      Also Du kannst über einen Datenpunkt natürlich eine ChangeNode verwenden - da würde ich aber erst mal keine payload setzen, sondern das topic löschen - das wäre mE der wesentliche Unterschied zwischen der iobroker-In Node und der Inject Node.

      Also erst mal eine Change Node zwischen der iobroker IN und der Velux Node - in der Du das topic löschst:
      604b4800-cbac-4e62-85bf-28e8ae0e221b-image.png

      Wenn das nicht hilft müsste man mal versuchen, das ganze Nachrichtenobjekt nochmal neu zu erstellen, falls das ein Problem ist. In diesem Fall müsstest Du eine function Node dazwischen schalten mit folgendem Code:

      var value=msg.payload;
      msg={payload:value};
      return msg;
      

      Also erst mal topic löschen - da die Velux Node ja das Topic auswertet:
      df38dcad-2042-44f7-9023-3b6784da787e-image.png
      08802254-2691-457f-8f53-1cce398e061d-image.png

      Und wenn da der Pfad von userdata Punkt drinsteht - wird das ggf. die Ursache sein, warum die velux Node verwirrt ist.

      Alternativ kannst auch zwischen den iobroker-In NOde und der Velux Node eine Change NOde setzen in der Du das topic explizit setzt:

      1abcc2b4-0234-45eb-b135-6de609758c9e-image.png

      @sascho sagte in bshb - Rollladensteuerung mit yhka Homekit:

      Was nicht funktioniert, die Inject Node vor den Datenpunkt zu hängen und dann die Velux Node anzusprechen. Dann passiert erst gar nichts, und dann kommt manchmal die Fehlermeldung.

      Wie gesagt ich glaube das es an dem Topic liegt. Interessant ist auch dass da steht, das die KLF nur 2 Verbindungen erlaubt - deshalb kommt es wohl leicht zu den Engpässen, insbesondere wenn die nicht mehr getrennt werden.

      S Offline
      S Offline
      sascho
      schrieb am zuletzt editiert von sascho
      #72

      @mickym

      Du hattest Recht mit dem Topic, wenn die Change node das Topic löscht funktioniert es ohne Probleme:

      ba623d7d-6894-41e2-9f96-993f4ceb74bf-image.png

      d7c2756f-455a-438f-810d-34ec3d5aa085-image.png

      fdadcc2c-1aa7-4daf-89cb-57d6a9f1b71f-image.png

      Bin ich erleichtert :v:

      Wo wären den der Pfad zu finden, nach dem ich gucken soll?

      20d01d13-5acf-4f40-92d7-6770318b5a05-image.png

      Wenn das jetzt noch heute Abend noch gut klappt, dann nehme ich mein Produktivsystem wieder online und probiere es mal in dem Set-up aus!

      :yum:

      mickymM 2 Antworten Letzte Antwort
      0
      • S sascho

        @mickym

        Du hattest Recht mit dem Topic, wenn die Change node das Topic löscht funktioniert es ohne Probleme:

        ba623d7d-6894-41e2-9f96-993f4ceb74bf-image.png

        d7c2756f-455a-438f-810d-34ec3d5aa085-image.png

        fdadcc2c-1aa7-4daf-89cb-57d6a9f1b71f-image.png

        Bin ich erleichtert :v:

        Wo wären den der Pfad zu finden, nach dem ich gucken soll?

        20d01d13-5acf-4f40-92d7-6770318b5a05-image.png

        Wenn das jetzt noch heute Abend noch gut klappt, dann nehme ich mein Produktivsystem wieder online und probiere es mal in dem Set-up aus!

        :yum:

        mickymM Offline
        mickymM Offline
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #73

        @sascho :+1: :+1: :+1:

        9eaf6643-5c5d-436b-81df-698c5e231ca9-image.png

        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

        1 Antwort Letzte Antwort
        0
        • S sascho

          @mickym

          Du hattest Recht mit dem Topic, wenn die Change node das Topic löscht funktioniert es ohne Probleme:

          ba623d7d-6894-41e2-9f96-993f4ceb74bf-image.png

          d7c2756f-455a-438f-810d-34ec3d5aa085-image.png

          fdadcc2c-1aa7-4daf-89cb-57d6a9f1b71f-image.png

          Bin ich erleichtert :v:

          Wo wären den der Pfad zu finden, nach dem ich gucken soll?

          20d01d13-5acf-4f40-92d7-6770318b5a05-image.png

          Wenn das jetzt noch heute Abend noch gut klappt, dann nehme ich mein Produktivsystem wieder online und probiere es mal in dem Set-up aus!

          :yum:

          mickymM Offline
          mickymM Offline
          mickym
          Most Active
          schrieb am zuletzt editiert von mickym
          #74

          @sascho über den neuen Admin findest das nicht.

          Du musst halt in Deinem Container schauen - ob in diesem Verzeichnis die KLF200 API noch installiert ist:

          43ac189b-dbb9-4ca0-87d0-f3954d4e5343-image.png

          oder natürlich auf der Kommandozeile:

          cd /opt/iobroker/iobroker-data/node-red/node_modules
          

          dann

          ls -la | more
          

          dann mit Enter durchscrollen

          hier sehe ich dann das alles Node-Typen die ich mit dem Pallettenamanger installiert habe - deswegen gehe ich davon aus, dass hier dann auch ein Verzeichnis velux-klf200-api exisitieren müsste.

          drwxrwxr-x+   8 iobroker iobroker  4096 18. Jul 00:43 node-disk-info
          drwxrwxr-x+   3 iobroker iobroker  4096 16. Nov 2020  node-fetch
          drwxrwxr-x+   5 iobroker iobroker  4096 29. Mär 03:59 node-persist
          drwxrwxr-x+   3 iobroker iobroker  4096 14. Mai 18:26 node-red-contrib-bigtimer
          drwxrwxr-x+   5 iobroker iobroker  4096 16. Jul 15:52 node-red-contrib-buffer-parser
          drwxrwxr-x+   3 iobroker iobroker  4096 16. Jul 15:53 node-red-contrib-cron-plus
          drwxrwxr-x+   4 iobroker iobroker  4096  4. Dez 2019  node-red-contrib-crypto-js
          drwxrwxr-x+   4 iobroker iobroker  4096  1. Feb 2021  node-red-contrib-eztimer
          drwxrwxr-x+   2 iobroker iobroker  4096  5. Dez 2020  node-red-contrib-fs-ops
          drwxrwxr-x+   4 iobroker iobroker  4096  5. Feb 2021  node-red-contrib-harmony-websocket
          drwxr-xr-x+   4 iobroker iobroker  4096 18. Jul 00:43 node-red-contrib-homekit-bridged
          drwxrwxr-x+   6 iobroker iobroker  4096 29. Mär 03:59 node-red-contrib-light-scheduler
          drwxrwxr-x+   6 iobroker iobroker  4096 16. Nov 2020  node-red-contrib-moment
          drwxrwxr-x+   3 iobroker iobroker  4096 18. Jul 00:44 node-red-contrib-os
          drwxrwxr-x+   3 iobroker iobroker  4096 17. Aug 01:16 node-red-contrib-tail-file
          drwxrwxr-x+   6 iobroker iobroker  4096 18. Jul 00:42 node-red-contrib-ui-time-scheduler
          drwxrwxr-x+   4 iobroker iobroker  4096 18. Jul 00:42 node-red-dashboard
          drwxrwxr-x+   4 iobroker iobroker  4096 18. Jul 00:42 node-red-node-email
          drwxrwxr-x+   4 iobroker iobroker  4096 29. Mär 03:56 node-red-node-feedparser
          

          Unter meiner Windows-Testinstallation von NodeRed finde ich nach Installation der velux Nodes - diese beiden Verzeichnisse:

          536ef8fa-cf5b-4d75-bff4-83a604503eb3-image.png

          Wenn das alles stabil klappt - ich drück Dir die Daumen - dann kannst ja auch ein bisschen mit dem valuetype spielen.

          96b71062-647e-47fb-b08e-05139f1b6422-image.png

          Manchmal muss man halt auch nur exakt lesen - siehe markierte Textstelle! - aber wie gut, dass Du es mit der Inject Node und der iobroker-In Node versucht hast - so konnte man sich über die Unterschiede auf die Lösung des Problems kommen.

          Damit kann man dann vielleicht sogar - das Fenster von einer bestehenden Position um einen bestimmten Prozentsatz verändern
          Das topic in eine ChangeNode würde dann so aussehen:

          4327b85a-5f23-4a10-97b7-051d00edb278-image.png

          id und name musst halt eingeben - der Wert kommt weiterhin über die payload Deiners Datenpunktes.

          Hier mal die Change Node zum Import:

          [
             {
                 "id": "847444e6.bec5c8",
                 "type": "change",
                 "z": "df26843.51cc978",
                 "name": "",
                 "rules": [
                     {
                         "t": "set",
                         "p": "topic",
                         "pt": "msg",
                         "to": "{\"write\":{\"name\":\"\",\"id\":\"\",\"valuetype\":\"PERCENT_PM\"}}",
                         "tot": "json"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 510,
                 "y": 180,
                 "wires": [
                     []
                 ]
             }
          ]
          

          So würde ich das mal sehen, um die Beschreibung umzusetzen. Aber schau erst mal ob es so stabil läuft, dann kannst immer noch sehen, ob Du hier mit den Möglichkeiten rumspielen möchtest. Name und ID sind auch optional (also brauchst nicht angeben, wenn Du das in der Node schon spezifizierst), weil Du das wahrscheinlich schon in der Velux NOde angibst. Man kann aber durch das variable Topic aber auch mit weniger Nodes auskommen, da das topic ja die Einstellungen in der Node überschreibt, aber das kann man immer noch später optimieren.

          Aber erst muss mal alles stabil sein. ;) Daumen drück!

          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

          S 2 Antworten Letzte Antwort
          0
          • mickymM mickym

            @sascho über den neuen Admin findest das nicht.

            Du musst halt in Deinem Container schauen - ob in diesem Verzeichnis die KLF200 API noch installiert ist:

            43ac189b-dbb9-4ca0-87d0-f3954d4e5343-image.png

            oder natürlich auf der Kommandozeile:

            cd /opt/iobroker/iobroker-data/node-red/node_modules
            

            dann

            ls -la | more
            

            dann mit Enter durchscrollen

            hier sehe ich dann das alles Node-Typen die ich mit dem Pallettenamanger installiert habe - deswegen gehe ich davon aus, dass hier dann auch ein Verzeichnis velux-klf200-api exisitieren müsste.

            drwxrwxr-x+   8 iobroker iobroker  4096 18. Jul 00:43 node-disk-info
            drwxrwxr-x+   3 iobroker iobroker  4096 16. Nov 2020  node-fetch
            drwxrwxr-x+   5 iobroker iobroker  4096 29. Mär 03:59 node-persist
            drwxrwxr-x+   3 iobroker iobroker  4096 14. Mai 18:26 node-red-contrib-bigtimer
            drwxrwxr-x+   5 iobroker iobroker  4096 16. Jul 15:52 node-red-contrib-buffer-parser
            drwxrwxr-x+   3 iobroker iobroker  4096 16. Jul 15:53 node-red-contrib-cron-plus
            drwxrwxr-x+   4 iobroker iobroker  4096  4. Dez 2019  node-red-contrib-crypto-js
            drwxrwxr-x+   4 iobroker iobroker  4096  1. Feb 2021  node-red-contrib-eztimer
            drwxrwxr-x+   2 iobroker iobroker  4096  5. Dez 2020  node-red-contrib-fs-ops
            drwxrwxr-x+   4 iobroker iobroker  4096  5. Feb 2021  node-red-contrib-harmony-websocket
            drwxr-xr-x+   4 iobroker iobroker  4096 18. Jul 00:43 node-red-contrib-homekit-bridged
            drwxrwxr-x+   6 iobroker iobroker  4096 29. Mär 03:59 node-red-contrib-light-scheduler
            drwxrwxr-x+   6 iobroker iobroker  4096 16. Nov 2020  node-red-contrib-moment
            drwxrwxr-x+   3 iobroker iobroker  4096 18. Jul 00:44 node-red-contrib-os
            drwxrwxr-x+   3 iobroker iobroker  4096 17. Aug 01:16 node-red-contrib-tail-file
            drwxrwxr-x+   6 iobroker iobroker  4096 18. Jul 00:42 node-red-contrib-ui-time-scheduler
            drwxrwxr-x+   4 iobroker iobroker  4096 18. Jul 00:42 node-red-dashboard
            drwxrwxr-x+   4 iobroker iobroker  4096 18. Jul 00:42 node-red-node-email
            drwxrwxr-x+   4 iobroker iobroker  4096 29. Mär 03:56 node-red-node-feedparser
            

            Unter meiner Windows-Testinstallation von NodeRed finde ich nach Installation der velux Nodes - diese beiden Verzeichnisse:

            536ef8fa-cf5b-4d75-bff4-83a604503eb3-image.png

            Wenn das alles stabil klappt - ich drück Dir die Daumen - dann kannst ja auch ein bisschen mit dem valuetype spielen.

            96b71062-647e-47fb-b08e-05139f1b6422-image.png

            Manchmal muss man halt auch nur exakt lesen - siehe markierte Textstelle! - aber wie gut, dass Du es mit der Inject Node und der iobroker-In Node versucht hast - so konnte man sich über die Unterschiede auf die Lösung des Problems kommen.

            Damit kann man dann vielleicht sogar - das Fenster von einer bestehenden Position um einen bestimmten Prozentsatz verändern
            Das topic in eine ChangeNode würde dann so aussehen:

            4327b85a-5f23-4a10-97b7-051d00edb278-image.png

            id und name musst halt eingeben - der Wert kommt weiterhin über die payload Deiners Datenpunktes.

            Hier mal die Change Node zum Import:

            [
               {
                   "id": "847444e6.bec5c8",
                   "type": "change",
                   "z": "df26843.51cc978",
                   "name": "",
                   "rules": [
                       {
                           "t": "set",
                           "p": "topic",
                           "pt": "msg",
                           "to": "{\"write\":{\"name\":\"\",\"id\":\"\",\"valuetype\":\"PERCENT_PM\"}}",
                           "tot": "json"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 510,
                   "y": 180,
                   "wires": [
                       []
                   ]
               }
            ]
            

            So würde ich das mal sehen, um die Beschreibung umzusetzen. Aber schau erst mal ob es so stabil läuft, dann kannst immer noch sehen, ob Du hier mit den Möglichkeiten rumspielen möchtest. Name und ID sind auch optional (also brauchst nicht angeben, wenn Du das in der Node schon spezifizierst), weil Du das wahrscheinlich schon in der Velux NOde angibst. Man kann aber durch das variable Topic aber auch mit weniger Nodes auskommen, da das topic ja die Einstellungen in der Node überschreibt, aber das kann man immer noch später optimieren.

            Aber erst muss mal alles stabil sein. ;) Daumen drück!

            S Offline
            S Offline
            sascho
            schrieb am zuletzt editiert von
            #75

            @mickym

            Stabil laufen wäre jetzt erst einmal mein Hauptziel :-). Ich habe gestern mal alles auf Velux Nodes umgestellt - also pro Fenster 1x Current, 1x Remaining, 1x Target. Dadurch musste ich ziemlich oft die Red Node Flows neu deployen. Das hat wohl das KLF200 überfordert. Ich bekomme seitdem nur noch diese Fehlermeldungen:
            23 Aug 11:33:36 - [error] [velux-connection:6e3b4717.7b2e68] Velux Error: tcp errorError: connect ECONNREFUSED 192.168.178.6:51200 at TLSSocket.velux.errorCallback (/opt/iobroker/node_modules/velux-klf200-api/lib/net.js:171:19) at TLSSocket.emit (events.js:314:20) at emitErrorNT (internal/streams/destroy.js:92:8) at emitErrorAndCloseNT (internal/streams/destroy.js:60:3) at processTicksAndRejections (internal/process/task_queues.js:84:21)

            Ich vermute, ich müsste es jetzt vom Strom trennen und neu booten da es sich aufgehängt hat. Gefühlt kriegt es den Reset manchmal nach ein paar Stunden selbst hin. Ob die API Node jetzt noch funktionieren würde, weiß ich nicht.

            Ob ich Nodes sparen kann - keine Ahnung. Selbst wenn ich Scenes einsetze, habe ich noch 5 Scenes x 1 Current/1x Remaining/1x Scene.
            Mir ist auch nicht klar, ob weniger Nodes besser wären, da ja alle über eine API Einstellung laufen.
            Ich würde Ende der Woche erst mal schauen, ob ich die Scenes eingerichtet bekomme.
            Evtl. kann man ja auch Remaining und Current über eine Node auslesen (All Values).

            mickymM 1 Antwort Letzte Antwort
            0
            • mickymM mickym

              @sascho über den neuen Admin findest das nicht.

              Du musst halt in Deinem Container schauen - ob in diesem Verzeichnis die KLF200 API noch installiert ist:

              43ac189b-dbb9-4ca0-87d0-f3954d4e5343-image.png

              oder natürlich auf der Kommandozeile:

              cd /opt/iobroker/iobroker-data/node-red/node_modules
              

              dann

              ls -la | more
              

              dann mit Enter durchscrollen

              hier sehe ich dann das alles Node-Typen die ich mit dem Pallettenamanger installiert habe - deswegen gehe ich davon aus, dass hier dann auch ein Verzeichnis velux-klf200-api exisitieren müsste.

              drwxrwxr-x+   8 iobroker iobroker  4096 18. Jul 00:43 node-disk-info
              drwxrwxr-x+   3 iobroker iobroker  4096 16. Nov 2020  node-fetch
              drwxrwxr-x+   5 iobroker iobroker  4096 29. Mär 03:59 node-persist
              drwxrwxr-x+   3 iobroker iobroker  4096 14. Mai 18:26 node-red-contrib-bigtimer
              drwxrwxr-x+   5 iobroker iobroker  4096 16. Jul 15:52 node-red-contrib-buffer-parser
              drwxrwxr-x+   3 iobroker iobroker  4096 16. Jul 15:53 node-red-contrib-cron-plus
              drwxrwxr-x+   4 iobroker iobroker  4096  4. Dez 2019  node-red-contrib-crypto-js
              drwxrwxr-x+   4 iobroker iobroker  4096  1. Feb 2021  node-red-contrib-eztimer
              drwxrwxr-x+   2 iobroker iobroker  4096  5. Dez 2020  node-red-contrib-fs-ops
              drwxrwxr-x+   4 iobroker iobroker  4096  5. Feb 2021  node-red-contrib-harmony-websocket
              drwxr-xr-x+   4 iobroker iobroker  4096 18. Jul 00:43 node-red-contrib-homekit-bridged
              drwxrwxr-x+   6 iobroker iobroker  4096 29. Mär 03:59 node-red-contrib-light-scheduler
              drwxrwxr-x+   6 iobroker iobroker  4096 16. Nov 2020  node-red-contrib-moment
              drwxrwxr-x+   3 iobroker iobroker  4096 18. Jul 00:44 node-red-contrib-os
              drwxrwxr-x+   3 iobroker iobroker  4096 17. Aug 01:16 node-red-contrib-tail-file
              drwxrwxr-x+   6 iobroker iobroker  4096 18. Jul 00:42 node-red-contrib-ui-time-scheduler
              drwxrwxr-x+   4 iobroker iobroker  4096 18. Jul 00:42 node-red-dashboard
              drwxrwxr-x+   4 iobroker iobroker  4096 18. Jul 00:42 node-red-node-email
              drwxrwxr-x+   4 iobroker iobroker  4096 29. Mär 03:56 node-red-node-feedparser
              

              Unter meiner Windows-Testinstallation von NodeRed finde ich nach Installation der velux Nodes - diese beiden Verzeichnisse:

              536ef8fa-cf5b-4d75-bff4-83a604503eb3-image.png

              Wenn das alles stabil klappt - ich drück Dir die Daumen - dann kannst ja auch ein bisschen mit dem valuetype spielen.

              96b71062-647e-47fb-b08e-05139f1b6422-image.png

              Manchmal muss man halt auch nur exakt lesen - siehe markierte Textstelle! - aber wie gut, dass Du es mit der Inject Node und der iobroker-In Node versucht hast - so konnte man sich über die Unterschiede auf die Lösung des Problems kommen.

              Damit kann man dann vielleicht sogar - das Fenster von einer bestehenden Position um einen bestimmten Prozentsatz verändern
              Das topic in eine ChangeNode würde dann so aussehen:

              4327b85a-5f23-4a10-97b7-051d00edb278-image.png

              id und name musst halt eingeben - der Wert kommt weiterhin über die payload Deiners Datenpunktes.

              Hier mal die Change Node zum Import:

              [
                 {
                     "id": "847444e6.bec5c8",
                     "type": "change",
                     "z": "df26843.51cc978",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "topic",
                             "pt": "msg",
                             "to": "{\"write\":{\"name\":\"\",\"id\":\"\",\"valuetype\":\"PERCENT_PM\"}}",
                             "tot": "json"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 510,
                     "y": 180,
                     "wires": [
                         []
                     ]
                 }
              ]
              

              So würde ich das mal sehen, um die Beschreibung umzusetzen. Aber schau erst mal ob es so stabil läuft, dann kannst immer noch sehen, ob Du hier mit den Möglichkeiten rumspielen möchtest. Name und ID sind auch optional (also brauchst nicht angeben, wenn Du das in der Node schon spezifizierst), weil Du das wahrscheinlich schon in der Velux NOde angibst. Man kann aber durch das variable Topic aber auch mit weniger Nodes auskommen, da das topic ja die Einstellungen in der Node überschreibt, aber das kann man immer noch später optimieren.

              Aber erst muss mal alles stabil sein. ;) Daumen drück!

              S Offline
              S Offline
              sascho
              schrieb am zuletzt editiert von sascho
              #76

              @mickym

              Wie komme ich eigentlich in die Pfadstruktur von Docker bzw. buanet iobroker? Deinen Befehl direkt im terminal einzugeben gibt nur ein Fehler:
              38050c85-e3cb-4843-b068-3f43545354f9-image.png

              Du hast so etwas wie einen Ordner Browser offen. So etwas würde ich mir auch gerne einrichten.

              mickymM 1 Antwort Letzte Antwort
              0
              • S sascho

                @mickym

                Stabil laufen wäre jetzt erst einmal mein Hauptziel :-). Ich habe gestern mal alles auf Velux Nodes umgestellt - also pro Fenster 1x Current, 1x Remaining, 1x Target. Dadurch musste ich ziemlich oft die Red Node Flows neu deployen. Das hat wohl das KLF200 überfordert. Ich bekomme seitdem nur noch diese Fehlermeldungen:
                23 Aug 11:33:36 - [error] [velux-connection:6e3b4717.7b2e68] Velux Error: tcp errorError: connect ECONNREFUSED 192.168.178.6:51200 at TLSSocket.velux.errorCallback (/opt/iobroker/node_modules/velux-klf200-api/lib/net.js:171:19) at TLSSocket.emit (events.js:314:20) at emitErrorNT (internal/streams/destroy.js:92:8) at emitErrorAndCloseNT (internal/streams/destroy.js:60:3) at processTicksAndRejections (internal/process/task_queues.js:84:21)

                Ich vermute, ich müsste es jetzt vom Strom trennen und neu booten da es sich aufgehängt hat. Gefühlt kriegt es den Reset manchmal nach ein paar Stunden selbst hin. Ob die API Node jetzt noch funktionieren würde, weiß ich nicht.

                Ob ich Nodes sparen kann - keine Ahnung. Selbst wenn ich Scenes einsetze, habe ich noch 5 Scenes x 1 Current/1x Remaining/1x Scene.
                Mir ist auch nicht klar, ob weniger Nodes besser wären, da ja alle über eine API Einstellung laufen.
                Ich würde Ende der Woche erst mal schauen, ob ich die Scenes eingerichtet bekomme.
                Evtl. kann man ja auch Remaining und Current über eine Node auslesen (All Values).

                mickymM Offline
                mickymM Offline
                mickym
                Most Active
                schrieb am zuletzt editiert von mickym
                #77

                @sascho sagte in bshb - Rollladensteuerung mit yhka Homekit:

                @mickym

                Stabil laufen wäre jetzt erst einmal mein Hauptziel :-). Ich habe gestern mal alles auf Velux Nodes umgestellt - also pro Fenster 1x Current, 1x Remaining, 1x Target. Dadurch musste ich ziemlich oft die Red Node Flows neu deployen. Das hat wohl das KLF200 überfordert. Ich bekomme seitdem nur noch diese Fehlermeldungen:

                Nun das heiß erst mal, dass es mit einer Node stabil gelaufen ist. Ich gehe mal davon aus, dass Du beim deployen zumindest nur die geänderten Nodes deployest - wenn nicht - vielleicht hilft das ja auch schon etwas.

                d6456955-b516-471d-aeb3-0e0e507b614c-image.png

                Mir ist auch nicht klar, ob weniger Nodes besser wären, da ja alle über eine API Einstellung laufen

                Nun auch wenn es über eine API läuft, so könntest Du über das Topic ja verscheiden KLF Nodes ansprechen. Mit theoretisch einer Node - kannst Du den Nachrichtenfluß ggf. über die Delay Node bremsen.

                Evtl. kann man ja auch Remaining und Current über eine Node auslesen (All Values).

                Auch das ist mE eine gute Idee.

                Oder generell eben, wie ich mit dem API aufruf prüfen, ob die KLF idle und ready ist und ggf. zumindest alles was Schreiben betrifft - blockieren, solange KLF nicht ready.

                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                S 1 Antwort Letzte Antwort
                0
                • mickymM mickym

                  @sascho sagte in bshb - Rollladensteuerung mit yhka Homekit:

                  @mickym

                  Stabil laufen wäre jetzt erst einmal mein Hauptziel :-). Ich habe gestern mal alles auf Velux Nodes umgestellt - also pro Fenster 1x Current, 1x Remaining, 1x Target. Dadurch musste ich ziemlich oft die Red Node Flows neu deployen. Das hat wohl das KLF200 überfordert. Ich bekomme seitdem nur noch diese Fehlermeldungen:

                  Nun das heiß erst mal, dass es mit einer Node stabil gelaufen ist. Ich gehe mal davon aus, dass Du beim deployen zumindest nur die geänderten Nodes deployest - wenn nicht - vielleicht hilft das ja auch schon etwas.

                  d6456955-b516-471d-aeb3-0e0e507b614c-image.png

                  Mir ist auch nicht klar, ob weniger Nodes besser wären, da ja alle über eine API Einstellung laufen

                  Nun auch wenn es über eine API läuft, so könntest Du über das Topic ja verscheiden KLF Nodes ansprechen. Mit theoretisch einer Node - kannst Du den Nachrichtenfluß ggf. über die Delay Node bremsen.

                  Evtl. kann man ja auch Remaining und Current über eine Node auslesen (All Values).

                  Auch das ist mE eine gute Idee.

                  Oder generell eben, wie ich mit dem API aufruf prüfen, ob die KLF idle und ready ist und ggf. zumindest alles was Schreiben betrifft - blockieren, solange KLF nicht ready.

                  S Offline
                  S Offline
                  sascho
                  schrieb am zuletzt editiert von sascho
                  #78

                  @mickym

                  Ja, die API Node würde ich auch gerne mal in Gang setzen. Aber ich habe das gleiche Problem wie der Themenersteller hier. Man bekommt nur ein schwarzes Dropdown in der Velux API:

                  https://github.com/PLCHome/node-red-contrib-velux/issues/11

                  Ich muss wahrscheinlich in die Konfiguration ändern, bevor ich hier? den Befehl:
                  a1698f30-8b69-4ef5-9d1b-57543ab8bcdf-image.png
                  eingeben kann:
                  1be9c0d0-c411-4f2c-a9e4-df4b53185619-image.png

                  Dazu müsste ich aber in die Container Ordnerstruktur kommen.

                  mickymM 1 Antwort Letzte Antwort
                  0
                  • S sascho

                    @mickym

                    Wie komme ich eigentlich in die Pfadstruktur von Docker bzw. buanet iobroker? Deinen Befehl direkt im terminal einzugeben gibt nur ein Fehler:
                    38050c85-e3cb-4843-b068-3f43545354f9-image.png

                    Du hast so etwas wie einen Ordner Browser offen. So etwas würde ich mir auch gerne einrichten.

                    mickymM Offline
                    mickymM Offline
                    mickym
                    Most Active
                    schrieb am zuletzt editiert von
                    #79

                    @sascho sagte in bshb - Rollladensteuerung mit yhka Homekit:

                    @mickym

                    Wie komme ich eigentlich in die Pfadstruktur von Docker bzw. buanet iobroker? Deinen Befehl direkt im terminal einzugeben gibt nur ein Fehler:
                    38050c85-e3cb-4843-b068-3f43545354f9-image.png

                    Du hast so etwas wie einen Ordner Browser offen. So etwas würde ich mir auch gerne einrichten.

                    Da kann ich leider nicht helfen, da ich nicht mit Docker oder VMs arbeite.

                    Das ist bei mit der verpönte Raspberry Desktop.

                    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                    1 Antwort Letzte Antwort
                    0
                    • S sascho

                      @mickym

                      Ja, die API Node würde ich auch gerne mal in Gang setzen. Aber ich habe das gleiche Problem wie der Themenersteller hier. Man bekommt nur ein schwarzes Dropdown in der Velux API:

                      https://github.com/PLCHome/node-red-contrib-velux/issues/11

                      Ich muss wahrscheinlich in die Konfiguration ändern, bevor ich hier? den Befehl:
                      a1698f30-8b69-4ef5-9d1b-57543ab8bcdf-image.png
                      eingeben kann:
                      1be9c0d0-c411-4f2c-a9e4-df4b53185619-image.png

                      Dazu müsste ich aber in die Container Ordnerstruktur kommen.

                      mickymM Offline
                      mickymM Offline
                      mickym
                      Most Active
                      schrieb am zuletzt editiert von mickym
                      #80

                      @sascho Schreib doch mal gar nichts in die API Node und versuch doch nur mal über die Inject Nodes API Befehle abzusetzen.

                      Ich habe Dir ja mal den Reboot gepostet - und hier mal zusätzlich die Statusabfrage:

                      bfae9c7e-8152-4fdf-ac44-0ae1cde490e1-image.png

                      [{"id":"275af5e430be8cde","type":"inject","z":"5191e3c.a1ef01c","name":"Reboot","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"apiText\":\"GW_REBOOT_REQ\"}","payloadType":"json","x":270,"y":1160,"wires":[["9c07a33961e3b586"]]},{"id":"9c07a33961e3b586","type":"Velux Api","z":"5191e3c.a1ef01c","name":"","datasource":"","api":"8196","ntf":[],"topic":"s","x":420,"y":1160,"wires":[["20a2999409a22c6b"]]},{"id":"20a2999409a22c6b","type":"debug","z":"5191e3c.a1ef01c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":1160,"wires":[]},{"id":"7995768ac4e4da56","type":"inject","z":"5191e3c.a1ef01c","name":"Aktueller Status","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"apiText\":\"GW_GET_STATE_REQ\"}","payloadType":"json","x":240,"y":1100,"wires":[["9aef1284b04763c8"]]},{"id":"9aef1284b04763c8","type":"Velux Api","z":"5191e3c.a1ef01c","name":"","datasource":"","api":"8196","ntf":[],"topic":"s","x":420,"y":1100,"wires":[["8850598c3c5ac10d"]]},{"id":"8850598c3c5ac10d","type":"debug","z":"5191e3c.a1ef01c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":1100,"wires":[]}]
                      

                      37908521-60ec-4277-aa00-f6a0ea688cae-image.png

                      b077d02c-da5f-4faa-8a65-61713c58fb4e-image.png

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      mickymM 1 Antwort Letzte Antwort
                      0
                      • mickymM mickym

                        @sascho Schreib doch mal gar nichts in die API Node und versuch doch nur mal über die Inject Nodes API Befehle abzusetzen.

                        Ich habe Dir ja mal den Reboot gepostet - und hier mal zusätzlich die Statusabfrage:

                        bfae9c7e-8152-4fdf-ac44-0ae1cde490e1-image.png

                        [{"id":"275af5e430be8cde","type":"inject","z":"5191e3c.a1ef01c","name":"Reboot","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"apiText\":\"GW_REBOOT_REQ\"}","payloadType":"json","x":270,"y":1160,"wires":[["9c07a33961e3b586"]]},{"id":"9c07a33961e3b586","type":"Velux Api","z":"5191e3c.a1ef01c","name":"","datasource":"","api":"8196","ntf":[],"topic":"s","x":420,"y":1160,"wires":[["20a2999409a22c6b"]]},{"id":"20a2999409a22c6b","type":"debug","z":"5191e3c.a1ef01c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":1160,"wires":[]},{"id":"7995768ac4e4da56","type":"inject","z":"5191e3c.a1ef01c","name":"Aktueller Status","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"apiText\":\"GW_GET_STATE_REQ\"}","payloadType":"json","x":240,"y":1100,"wires":[["9aef1284b04763c8"]]},{"id":"9aef1284b04763c8","type":"Velux Api","z":"5191e3c.a1ef01c","name":"","datasource":"","api":"8196","ntf":[],"topic":"s","x":420,"y":1100,"wires":[["8850598c3c5ac10d"]]},{"id":"8850598c3c5ac10d","type":"debug","z":"5191e3c.a1ef01c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":1100,"wires":[]}]
                        

                        37908521-60ec-4277-aa00-f6a0ea688cae-image.png

                        b077d02c-da5f-4faa-8a65-61713c58fb4e-image.png

                        mickymM Offline
                        mickymM Offline
                        mickym
                        Most Active
                        schrieb am zuletzt editiert von
                        #81

                        @sascho Aber nochmal, wenn das mit den Nodes keine gute Idee ist oder zu kompliziert - dann bleib doch bei Deiner Adapterlösung. Das mit dem anhand des Logs die KLF neu zu starten, wie Du es ursprünglich vorhattest ist dann vielleicht doch einfacher.

                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                        S 1 Antwort Letzte Antwort
                        0
                        • mickymM mickym

                          @sascho Aber nochmal, wenn das mit den Nodes keine gute Idee ist oder zu kompliziert - dann bleib doch bei Deiner Adapterlösung. Das mit dem anhand des Logs die KLF neu zu starten, wie Du es ursprünglich vorhattest ist dann vielleicht doch einfacher.

                          S Offline
                          S Offline
                          sascho
                          schrieb am zuletzt editiert von
                          #82

                          @mickym

                          Ich teste das mit den Inject Nodes mal heute Abend. Aber ich glaube das KLF200 ist jetzt nicht mehr über die api erreichbar.
                          Ich hatte heute Nacht das Testsystem mit den 3 Velux nodes online. Dies bekommt auch keine Verbindung mehr.
                          Das heißt ab einem gewissen Punkt muss man das KLF200 per smartem Zwischenstecker vom Netz trennen um einen reboot zu initiieren. Das würde sehr wahrscheinlich nicht mehr über den Adapter oder die api Node klappen, da die api down ist.
                          Ich würde das über den von Dir oben beschriebenen Weg machen.

                          Bleibt aber noch die Frage warum das KLF200 einfriert. Ich vermute Überlastung. Da würde ich mal testen ob die Velux nodes im Normalbetrieb besser arbeiten als der Adapter. Vorteil wäre, dass sie nicht wie der Adapter dauerhaft abschalten wenn das KLF200 nicht erreichbar ist.
                          Ich glaube wir sind auf einem guten Weg auch wenn es viel try und error ist.

                          mickymM 1 Antwort Letzte Antwort
                          0
                          • S sascho

                            @mickym

                            Ich teste das mit den Inject Nodes mal heute Abend. Aber ich glaube das KLF200 ist jetzt nicht mehr über die api erreichbar.
                            Ich hatte heute Nacht das Testsystem mit den 3 Velux nodes online. Dies bekommt auch keine Verbindung mehr.
                            Das heißt ab einem gewissen Punkt muss man das KLF200 per smartem Zwischenstecker vom Netz trennen um einen reboot zu initiieren. Das würde sehr wahrscheinlich nicht mehr über den Adapter oder die api Node klappen, da die api down ist.
                            Ich würde das über den von Dir oben beschriebenen Weg machen.

                            Bleibt aber noch die Frage warum das KLF200 einfriert. Ich vermute Überlastung. Da würde ich mal testen ob die Velux nodes im Normalbetrieb besser arbeiten als der Adapter. Vorteil wäre, dass sie nicht wie der Adapter dauerhaft abschalten wenn das KLF200 nicht erreichbar ist.
                            Ich glaube wir sind auf einem guten Weg auch wenn es viel try und error ist.

                            mickymM Offline
                            mickymM Offline
                            mickym
                            Most Active
                            schrieb am zuletzt editiert von mickym
                            #83

                            @sascho Wie gesagt, über den API Call kannst Du ja den Status abrufen. Falls dann keine Antwort kommt, dann die Steckdose (smarten Zwischenstecker) schalten:

                            Hier kannst Du halt über die Steckdose (Zwischenstecker) direkt reagieren anstelle von Logs, wenn das KLF200 nicht mehr erreichbar ist:

                            2d49f320-13b6-45fe-9eb7-bad3c4dbd0ae-image.png

                            [{"id":"7995768ac4e4da56","type":"inject","z":"5191e3c.a1ef01c","name":"Aktueller Status ??","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"apiText\":\"GW_GET_STATE_REQ\"}","payloadType":"json","x":170,"y":700,"wires":[["9aef1284b04763c8","8957abd7d15d9f71"]]},{"id":"9aef1284b04763c8","type":"Velux Api","z":"5191e3c.a1ef01c","name":"","datasource":"","api":"8196","ntf":[],"topic":"s","x":380,"y":700,"wires":[["8850598c3c5ac10d","6f4c4e4dd1ef1132"]]},{"id":"8850598c3c5ac10d","type":"debug","z":"5191e3c.a1ef01c","name":"Werte Status aus - KLF ist ansprechbar","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":780,"y":700,"wires":[]},{"id":"6f4c4e4dd1ef1132","type":"change","z":"5191e3c.a1ef01c","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":760,"wires":[["8957abd7d15d9f71"]]},{"id":"8957abd7d15d9f71","type":"trigger","z":"5191e3c.a1ef01c","name":"timeout - schalte Steckdose aus","op1":"","op2":"off","op1type":"nul","op2type":"str","duration":"1","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":470,"y":820,"wires":[["ee53bb9a075f4e32","f2b2a59afc8c798b"]]},{"id":"ee53bb9a075f4e32","type":"trigger","z":"5191e3c.a1ef01c","name":"schalte Steckdose nach 10s an","op1":"","op2":"on","op1type":"nul","op2type":"str","duration":"10","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":810,"y":880,"wires":[["f2b2a59afc8c798b"]]},{"id":"f2b2a59afc8c798b","type":"debug","z":"5191e3c.a1ef01c","name":"Steckdose","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1090,"y":820,"wires":[]}]
                            

                            Diese 3 Nodes kannst Du Dir generell auch als Subflow speichern, dann hast Du alles in einer Node und kannst diese als timeout Node für alle Nodes verwenden, wo Du nach einer bestimmten Zeit eine Antwort erwartest. Statt on und off kannst natürlich auch true und false verwenden, je nachdem was Du halt für Deine Steckdose brauchst.

                            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                            S 1 Antwort Letzte Antwort
                            0
                            • mickymM mickym

                              @sascho Wie gesagt, über den API Call kannst Du ja den Status abrufen. Falls dann keine Antwort kommt, dann die Steckdose (smarten Zwischenstecker) schalten:

                              Hier kannst Du halt über die Steckdose (Zwischenstecker) direkt reagieren anstelle von Logs, wenn das KLF200 nicht mehr erreichbar ist:

                              2d49f320-13b6-45fe-9eb7-bad3c4dbd0ae-image.png

                              [{"id":"7995768ac4e4da56","type":"inject","z":"5191e3c.a1ef01c","name":"Aktueller Status ??","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"apiText\":\"GW_GET_STATE_REQ\"}","payloadType":"json","x":170,"y":700,"wires":[["9aef1284b04763c8","8957abd7d15d9f71"]]},{"id":"9aef1284b04763c8","type":"Velux Api","z":"5191e3c.a1ef01c","name":"","datasource":"","api":"8196","ntf":[],"topic":"s","x":380,"y":700,"wires":[["8850598c3c5ac10d","6f4c4e4dd1ef1132"]]},{"id":"8850598c3c5ac10d","type":"debug","z":"5191e3c.a1ef01c","name":"Werte Status aus - KLF ist ansprechbar","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":780,"y":700,"wires":[]},{"id":"6f4c4e4dd1ef1132","type":"change","z":"5191e3c.a1ef01c","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":760,"wires":[["8957abd7d15d9f71"]]},{"id":"8957abd7d15d9f71","type":"trigger","z":"5191e3c.a1ef01c","name":"timeout - schalte Steckdose aus","op1":"","op2":"off","op1type":"nul","op2type":"str","duration":"1","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":470,"y":820,"wires":[["ee53bb9a075f4e32","f2b2a59afc8c798b"]]},{"id":"ee53bb9a075f4e32","type":"trigger","z":"5191e3c.a1ef01c","name":"schalte Steckdose nach 10s an","op1":"","op2":"on","op1type":"nul","op2type":"str","duration":"10","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":810,"y":880,"wires":[["f2b2a59afc8c798b"]]},{"id":"f2b2a59afc8c798b","type":"debug","z":"5191e3c.a1ef01c","name":"Steckdose","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1090,"y":820,"wires":[]}]
                              

                              Diese 3 Nodes kannst Du Dir generell auch als Subflow speichern, dann hast Du alles in einer Node und kannst diese als timeout Node für alle Nodes verwenden, wo Du nach einer bestimmten Zeit eine Antwort erwartest. Statt on und off kannst natürlich auch true und false verwenden, je nachdem was Du halt für Deine Steckdose brauchst.

                              S Offline
                              S Offline
                              sascho
                              schrieb am zuletzt editiert von sascho
                              #84

                              @mickym

                              Hi!

                              also ich konnte den Hardware Reset am KLF200 jetzt machen und die Velux Nodes funktionieren - so lala. Ich habe die Beobachtung gemacht, dass ich immer nur einen Befehl geben kann, dann warten muss bis sich der Status aktualisiert hat und dann den nächsten Befehl geben kann. Auch das klappt nicht immer und es erscheinen diese Fehler im Log:
                              96fca521-0b46-47ce-ad4c-e40d29571278-image.png

                              Ich habe jetzt nur noch die Hoffnung, die Anzahl der Nodes durch die Verwendung von Szenen für das Target und die All Values Node für die Current Values zu reduzieren.

                              Kannst du spontan sagen, wie ich so einen Payload zerlege und in Datenpunkt ausgebe?

                              4d589ae8-5101-4b4c-8e78-bd6370f319b2-image.png

                              Wenn das alles nicht hilft, muss ich wohl zurück auf den Adapter gehen und mir mit der Reboot Funktionalität behelfen :-(.

                              mickymM 1 Antwort Letzte Antwort
                              0
                              • S sascho

                                @mickym

                                Hi!

                                also ich konnte den Hardware Reset am KLF200 jetzt machen und die Velux Nodes funktionieren - so lala. Ich habe die Beobachtung gemacht, dass ich immer nur einen Befehl geben kann, dann warten muss bis sich der Status aktualisiert hat und dann den nächsten Befehl geben kann. Auch das klappt nicht immer und es erscheinen diese Fehler im Log:
                                96fca521-0b46-47ce-ad4c-e40d29571278-image.png

                                Ich habe jetzt nur noch die Hoffnung, die Anzahl der Nodes durch die Verwendung von Szenen für das Target und die All Values Node für die Current Values zu reduzieren.

                                Kannst du spontan sagen, wie ich so einen Payload zerlege und in Datenpunkt ausgebe?

                                4d589ae8-5101-4b4c-8e78-bd6370f319b2-image.png

                                Wenn das alles nicht hilft, muss ich wohl zurück auf den Adapter gehen und mir mit der Reboot Funktionalität behelfen :-(.

                                mickymM Offline
                                mickymM Offline
                                mickym
                                Most Active
                                schrieb am zuletzt editiert von mickym
                                #85

                                @sascho

                                1. Mit der Catch Node - kannst Du, wenn Du weißt welche Velux Nodes diesen Fehler produzieren (ist das die Statusabfrage) ggf. abfangen. Einfach eine Catch Node rausziehen, dann zu überwachende Nodes auswählen und das msg.error Objekt analysieren.

                                a4769785-46ad-4341-b07b-f6bf4e9ccce1-image.png
                                2. Wenn Du ein Objekt hast, hängt nun davon ab, ob Du wirklich alles in Datenpunkte schreiben willst oder nur einzelne Daten.

                                2.1 Wenn Dich nur eine einzelne Eigenschaft interessiert zum Beispiel velocity - dann setzt Du die msg.payload auf msg.payload.velocity

                                345332b6-227e-4cab-b0ae-35921d79a158-image.png

                                2.2. Wenn Du jede Eigenschaft als eigene payload haben willst hängst Du eine split Node dran

                                9b3869c2-85af-4bcb-9a69-b6cf91d2080a-image.png

                                2.3. Wenn Du das ganze Objekt in einen Datenpunkt schreiben willst, wandelst Du es in einen JSON String um und beim Auslesen wieder in ein Objekt

                                6d295706-44c9-44c6-a37c-29c2b26a84c4-image.png

                                und so wandelst Du es wieder in ein Objekt zurück:

                                5b2ebf9c-e4d6-4af0-b153-72df09be9cee-image.png

                                2.4. Auch wenn es mit der neuen Adminversion zum Beginn wohl einige Fehlermeldungen (gabs dann doch nicht) - dann nimmst Du meinen Subflow, der hier genau beschrieben ist: https://forum.iobroker.net/topic/43856/json-string-oder-java-object-in-iobroker-struktur

                                Dort ist auch die genaue Bedienung beschrieben - hier nur die Kurzfassung:

                                Im NodeRed Adapter musst Du die Erstellung von Fremdobjekten zulassen:

                                94e12676-d81f-49ae-8607-9fe563a0f3e5-image.png

                                Das Anlegen macht die iobroker Out Node in dem Du das einstellst:

                                3f28fc36-536e-4ad7-9ffd-f5596eca14c2-image.png

                                Wider Erwarten gabs bei mir im Log keine Fehlermeldung:

                                Mit diesem Flow

                                1044367b-1fab-4291-829b-3e1489a73007-image.png

                                erzeugst Du dann automatisch die Objektstruktur als einzelne Datenpunkte im iobroker:

                                5a178074-81bc-42b7-abf6-4be32d8b0676-image.png

                                [
                                   {
                                       "id": "c3403a60.92fbb8",
                                       "type": "subflow",
                                       "name": "JSON or Obj to IOBroker",
                                       "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs no `msg.top` property is defined, then you will get an error in the following iobroker-out node (key or topic does not exist) - if you append a debug node to the subflow node you will get the message: \n> Please define msg.top as root for the object structure \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls in keine Angabe in msg.top definiert wurde, wird man in der darauffolgenden iobroker-out node den Fehler erhalten, dass kein key oder topic definiert ist. Falls eine debug Node an den Subflow angehängt wirde erhält man folgende Ausgabe:\n> Please define msg.top as root for the object structure ",
                                       "category": "parser",
                                       "in": [
                                           {
                                               "x": 60,
                                               "y": 160,
                                               "wires": [
                                                   {
                                                       "id": "94876630.f71748"
                                                   }
                                               ]
                                           }
                                       ],
                                       "out": [
                                           {
                                               "x": 2280,
                                               "y": 260,
                                               "wires": [
                                                   {
                                                       "id": "74b0b536.02371c",
                                                       "port": 0
                                                   },
                                                   {
                                                       "id": "ab9b1e85.eea2a",
                                                       "port": 0
                                                   }
                                               ]
                                           }
                                       ],
                                       "env": [],
                                       "meta": {},
                                       "color": "#E2D96E",
                                       "icon": "node-red/batch.svg"
                                   },
                                   {
                                       "id": "eea737e7.7e8fb8",
                                       "type": "split",
                                       "z": "c3403a60.92fbb8",
                                       "name": "split object",
                                       "splt": "\\n",
                                       "spltType": "str",
                                       "arraySplt": 1,
                                       "arraySpltType": "len",
                                       "stream": false,
                                       "addname": "key",
                                       "x": 1170,
                                       "y": 160,
                                       "wires": [
                                           [
                                               "dc473616.c2b508"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "dc473616.c2b508",
                                       "type": "change",
                                       "z": "c3403a60.92fbb8",
                                       "name": "add key to topic",
                                       "rules": [
                                           {
                                               "t": "set",
                                               "p": "stateName",
                                               "pt": "msg",
                                               "to": "key",
                                               "tot": "msg"
                                           },
                                           {
                                               "t": "set",
                                               "p": "topic",
                                               "pt": "msg",
                                               "to": "topic  & '.' & key",
                                               "tot": "jsonata"
                                           },
                                           {
                                               "t": "change",
                                               "p": "topic",
                                               "pt": "msg",
                                               "from": " ",
                                               "fromt": "str",
                                               "to": "_",
                                               "tot": "str"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 1360,
                                       "y": 160,
                                       "wires": [
                                           [
                                               "78697695.9a72c8"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "78697695.9a72c8",
                                       "type": "switch",
                                       "z": "c3403a60.92fbb8",
                                       "name": "is type?",
                                       "property": "payload",
                                       "propertyType": "msg",
                                       "rules": [
                                           {
                                               "t": "istype",
                                               "v": "array",
                                               "vt": "array"
                                           },
                                           {
                                               "t": "istype",
                                               "v": "object",
                                               "vt": "object"
                                           },
                                           {
                                               "t": "else"
                                           }
                                       ],
                                       "checkall": "true",
                                       "repair": false,
                                       "outputs": 3,
                                       "x": 1540,
                                       "y": 160,
                                       "wires": [
                                           [
                                               "d839cef8.577f1"
                                           ],
                                           [
                                               "eea737e7.7e8fb8"
                                           ],
                                           [
                                               "bdfdae99.f4d9d"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "d839cef8.577f1",
                                       "type": "split",
                                       "z": "c3403a60.92fbb8",
                                       "name": "split array",
                                       "splt": "\\n",
                                       "spltType": "str",
                                       "arraySplt": 1,
                                       "arraySpltType": "len",
                                       "stream": false,
                                       "addname": "",
                                       "x": 580,
                                       "y": 280,
                                       "wires": [
                                           [
                                               "36327f2d.8efc3"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "36327f2d.8efc3",
                                       "type": "change",
                                       "z": "c3403a60.92fbb8",
                                       "name": "add index to topic",
                                       "rules": [
                                           {
                                               "t": "set",
                                               "p": "topic",
                                               "pt": "msg",
                                               "to": "topic  & '.' & parts.index",
                                               "tot": "jsonata"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 770,
                                       "y": 280,
                                       "wires": [
                                           [
                                               "d8f58d9b.b6a1"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "74b0b536.02371c",
                                       "type": "change",
                                       "z": "c3403a60.92fbb8",
                                       "name": "finalize msg.topic",
                                       "rules": [
                                           {
                                               "t": "set",
                                               "p": "top",
                                               "pt": "msg",
                                               "to": "'0_userdata.0.' & top",
                                               "tot": "jsonata"
                                           },
                                           {
                                               "t": "set",
                                               "p": "topic",
                                               "pt": "msg",
                                               "to": "top & topic",
                                               "tot": "jsonata"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 1970,
                                       "y": 240,
                                       "wires": [
                                           []
                                       ]
                                   },
                                   {
                                       "id": "4cdee7cb.910c38",
                                       "type": "switch",
                                       "z": "c3403a60.92fbb8",
                                       "name": "is type?",
                                       "property": "payload",
                                       "propertyType": "msg",
                                       "rules": [
                                           {
                                               "t": "istype",
                                               "v": "json",
                                               "vt": "json"
                                           },
                                           {
                                               "t": "istype",
                                               "v": "object",
                                               "vt": "object"
                                           },
                                           {
                                               "t": "istype",
                                               "v": "array",
                                               "vt": "array"
                                           },
                                           {
                                               "t": "else"
                                           }
                                       ],
                                       "checkall": "true",
                                       "repair": false,
                                       "outputs": 4,
                                       "x": 400,
                                       "y": 160,
                                       "wires": [
                                           [
                                               "c1c41535.17d3b8"
                                           ],
                                           [
                                               "eea737e7.7e8fb8"
                                           ],
                                           [
                                               "d839cef8.577f1"
                                           ],
                                           [
                                               "d8f58d9b.b6a1"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "c1c41535.17d3b8",
                                       "type": "json",
                                       "z": "c3403a60.92fbb8",
                                       "name": "",
                                       "property": "payload",
                                       "action": "",
                                       "pretty": false,
                                       "x": 570,
                                       "y": 120,
                                       "wires": [
                                           [
                                               "3ccd67db.375058"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "bdfdae99.f4d9d",
                                       "type": "switch",
                                       "z": "c3403a60.92fbb8",
                                       "name": "is msg.top != null",
                                       "property": "top",
                                       "propertyType": "msg",
                                       "rules": [
                                           {
                                               "t": "nnull"
                                           },
                                           {
                                               "t": "null"
                                           }
                                       ],
                                       "checkall": "true",
                                       "repair": false,
                                       "outputs": 2,
                                       "x": 1750,
                                       "y": 280,
                                       "wires": [
                                           [
                                               "74b0b536.02371c"
                                           ],
                                           [
                                               "7ba7dc21.fdb214"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "7ba7dc21.fdb214",
                                       "type": "change",
                                       "z": "c3403a60.92fbb8",
                                       "name": "payload = warning",
                                       "rules": [
                                           {
                                               "t": "set",
                                               "p": "payload",
                                               "pt": "msg",
                                               "to": "Please define msg.top as root for the object structure",
                                               "tot": "str"
                                           },
                                           {
                                               "t": "delete",
                                               "p": "topic",
                                               "pt": "msg"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 1970,
                                       "y": 300,
                                       "wires": [
                                           [
                                               "ab9b1e85.eea2a"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "ab9b1e85.eea2a",
                                       "type": "rbe",
                                       "z": "c3403a60.92fbb8",
                                       "name": "",
                                       "func": "rbe",
                                       "gap": "",
                                       "start": "",
                                       "inout": "out",
                                       "septopics": true,
                                       "property": "payload",
                                       "x": 2130,
                                       "y": 300,
                                       "wires": [
                                           []
                                       ]
                                   },
                                   {
                                       "id": "94876630.f71748",
                                       "type": "change",
                                       "z": "c3403a60.92fbb8",
                                       "name": "",
                                       "rules": [
                                           {
                                               "t": "delete",
                                               "p": "topic",
                                               "pt": "msg"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 210,
                                       "y": 160,
                                       "wires": [
                                           [
                                               "4cdee7cb.910c38"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "3ccd67db.375058",
                                       "type": "switch",
                                       "z": "c3403a60.92fbb8",
                                       "name": "is array?",
                                       "property": "payload",
                                       "propertyType": "msg",
                                       "rules": [
                                           {
                                               "t": "istype",
                                               "v": "array",
                                               "vt": "array"
                                           },
                                           {
                                               "t": "else"
                                           }
                                       ],
                                       "checkall": "true",
                                       "repair": false,
                                       "outputs": 2,
                                       "x": 700,
                                       "y": 120,
                                       "wires": [
                                           [
                                               "d839cef8.577f1"
                                           ],
                                           [
                                               "eea737e7.7e8fb8"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "80dde279.c28ec",
                                       "type": "comment",
                                       "z": "c3403a60.92fbb8",
                                       "name": "Array",
                                       "info": "",
                                       "x": 400,
                                       "y": 280,
                                       "wires": []
                                   },
                                   {
                                       "id": "95ee816e.68a16",
                                       "type": "comment",
                                       "z": "c3403a60.92fbb8",
                                       "name": "object",
                                       "info": "",
                                       "x": 1140,
                                       "y": 100,
                                       "wires": []
                                   },
                                   {
                                       "id": "d8f58d9b.b6a1",
                                       "type": "switch",
                                       "z": "c3403a60.92fbb8",
                                       "name": "is type?",
                                       "property": "payload",
                                       "propertyType": "msg",
                                       "rules": [
                                           {
                                               "t": "istype",
                                               "v": "object",
                                               "vt": "object"
                                           },
                                           {
                                               "t": "istype",
                                               "v": "array",
                                               "vt": "array"
                                           },
                                           {
                                               "t": "else"
                                           }
                                       ],
                                       "checkall": "true",
                                       "repair": false,
                                       "outputs": 3,
                                       "x": 960,
                                       "y": 280,
                                       "wires": [
                                           [
                                               "eea737e7.7e8fb8"
                                           ],
                                           [
                                               "d839cef8.577f1"
                                           ],
                                           [
                                               "bdfdae99.f4d9d"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "661bcbd9.33b4c4",
                                       "type": "inject",
                                       "z": "175d7b92.c54684",
                                       "name": "",
                                       "props": [
                                           {
                                               "p": "payload"
                                           }
                                       ],
                                       "repeat": "",
                                       "crontab": "",
                                       "once": false,
                                       "onceDelay": 0.1,
                                       "topic": "",
                                       "payload": "{\"velocity\":0,\"velocityTag\":\"DEFAULT\",\"velocityText\":\"The node operates by its default velocity\"}",
                                       "payloadType": "json",
                                       "x": 350,
                                       "y": 780,
                                       "wires": [
                                           [
                                               "6fddd77b.2cd208"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "b4882230.f2297",
                                       "type": "subflow:c3403a60.92fbb8",
                                       "z": "175d7b92.c54684",
                                       "name": "",
                                       "x": 750,
                                       "y": 780,
                                       "wires": [
                                           [
                                               "e98362f0.0721b"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "6fddd77b.2cd208",
                                       "type": "change",
                                       "z": "175d7b92.c54684",
                                       "name": "msg.top = velux",
                                       "rules": [
                                           {
                                               "t": "set",
                                               "p": "top",
                                               "pt": "msg",
                                               "to": "velux",
                                               "tot": "str"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 520,
                                       "y": 780,
                                       "wires": [
                                           [
                                               "b4882230.f2297"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "e98362f0.0721b",
                                       "type": "ioBroker out",
                                       "z": "175d7b92.c54684",
                                       "name": "",
                                       "topic": "",
                                       "ack": "true",
                                       "autoCreate": "true",
                                       "stateName": "",
                                       "role": "",
                                       "payloadType": "",
                                       "readonly": "",
                                       "stateUnit": "",
                                       "stateMin": "",
                                       "stateMax": "",
                                       "x": 980,
                                       "y": 780,
                                       "wires": []
                                   }
                                ]
                                

                                Ergänzung: Die Fehlermeldung im Log gabs wahrscheinlich nicht, weil es direkt nach 0_userdata.0 angelegt wurde.

                                Du kannst aber erst mal selbst keine Datenpunkte seit dem neuen Admin anlegen, weil NodeRed leider keine Objekte im iobroker anlegen kann.

                                Du siehst das fehlende Objekt im neuen admin an dem fehlenden Stiftsymbol

                                885ddba4-daa0-4606-b344-5ad632c01cd0-image.png

                                Du musst dann auf der Ebene 0_userdata.0 den Punkt velux nochmals manuell anlegen, damit alles regelkonform ist:

                                77002fac-e816-41d3-a39a-8583335bf14c-image.png

                                Dann kannst auch manuell in diesem "Verzeichnis" wieder neue Datenpunkte anlegen:

                                0c02597e-dc6b-4ddb-87a8-a43ad495d739-image.png

                                Wenn Du auf den Adapter zurückgehst um das Log zu analysieren, dann sag nochmal Bescheid, denn ich hab noch was an der ChangeNode geändert und wie gesagt eine andere Tailnode verwendet.

                                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                S 1 Antwort Letzte Antwort
                                0
                                • mickymM mickym

                                  @sascho

                                  1. Mit der Catch Node - kannst Du, wenn Du weißt welche Velux Nodes diesen Fehler produzieren (ist das die Statusabfrage) ggf. abfangen. Einfach eine Catch Node rausziehen, dann zu überwachende Nodes auswählen und das msg.error Objekt analysieren.

                                  a4769785-46ad-4341-b07b-f6bf4e9ccce1-image.png
                                  2. Wenn Du ein Objekt hast, hängt nun davon ab, ob Du wirklich alles in Datenpunkte schreiben willst oder nur einzelne Daten.

                                  2.1 Wenn Dich nur eine einzelne Eigenschaft interessiert zum Beispiel velocity - dann setzt Du die msg.payload auf msg.payload.velocity

                                  345332b6-227e-4cab-b0ae-35921d79a158-image.png

                                  2.2. Wenn Du jede Eigenschaft als eigene payload haben willst hängst Du eine split Node dran

                                  9b3869c2-85af-4bcb-9a69-b6cf91d2080a-image.png

                                  2.3. Wenn Du das ganze Objekt in einen Datenpunkt schreiben willst, wandelst Du es in einen JSON String um und beim Auslesen wieder in ein Objekt

                                  6d295706-44c9-44c6-a37c-29c2b26a84c4-image.png

                                  und so wandelst Du es wieder in ein Objekt zurück:

                                  5b2ebf9c-e4d6-4af0-b153-72df09be9cee-image.png

                                  2.4. Auch wenn es mit der neuen Adminversion zum Beginn wohl einige Fehlermeldungen (gabs dann doch nicht) - dann nimmst Du meinen Subflow, der hier genau beschrieben ist: https://forum.iobroker.net/topic/43856/json-string-oder-java-object-in-iobroker-struktur

                                  Dort ist auch die genaue Bedienung beschrieben - hier nur die Kurzfassung:

                                  Im NodeRed Adapter musst Du die Erstellung von Fremdobjekten zulassen:

                                  94e12676-d81f-49ae-8607-9fe563a0f3e5-image.png

                                  Das Anlegen macht die iobroker Out Node in dem Du das einstellst:

                                  3f28fc36-536e-4ad7-9ffd-f5596eca14c2-image.png

                                  Wider Erwarten gabs bei mir im Log keine Fehlermeldung:

                                  Mit diesem Flow

                                  1044367b-1fab-4291-829b-3e1489a73007-image.png

                                  erzeugst Du dann automatisch die Objektstruktur als einzelne Datenpunkte im iobroker:

                                  5a178074-81bc-42b7-abf6-4be32d8b0676-image.png

                                  [
                                     {
                                         "id": "c3403a60.92fbb8",
                                         "type": "subflow",
                                         "name": "JSON or Obj to IOBroker",
                                         "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs no `msg.top` property is defined, then you will get an error in the following iobroker-out node (key or topic does not exist) - if you append a debug node to the subflow node you will get the message: \n> Please define msg.top as root for the object structure \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls in keine Angabe in msg.top definiert wurde, wird man in der darauffolgenden iobroker-out node den Fehler erhalten, dass kein key oder topic definiert ist. Falls eine debug Node an den Subflow angehängt wirde erhält man folgende Ausgabe:\n> Please define msg.top as root for the object structure ",
                                         "category": "parser",
                                         "in": [
                                             {
                                                 "x": 60,
                                                 "y": 160,
                                                 "wires": [
                                                     {
                                                         "id": "94876630.f71748"
                                                     }
                                                 ]
                                             }
                                         ],
                                         "out": [
                                             {
                                                 "x": 2280,
                                                 "y": 260,
                                                 "wires": [
                                                     {
                                                         "id": "74b0b536.02371c",
                                                         "port": 0
                                                     },
                                                     {
                                                         "id": "ab9b1e85.eea2a",
                                                         "port": 0
                                                     }
                                                 ]
                                             }
                                         ],
                                         "env": [],
                                         "meta": {},
                                         "color": "#E2D96E",
                                         "icon": "node-red/batch.svg"
                                     },
                                     {
                                         "id": "eea737e7.7e8fb8",
                                         "type": "split",
                                         "z": "c3403a60.92fbb8",
                                         "name": "split object",
                                         "splt": "\\n",
                                         "spltType": "str",
                                         "arraySplt": 1,
                                         "arraySpltType": "len",
                                         "stream": false,
                                         "addname": "key",
                                         "x": 1170,
                                         "y": 160,
                                         "wires": [
                                             [
                                                 "dc473616.c2b508"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "dc473616.c2b508",
                                         "type": "change",
                                         "z": "c3403a60.92fbb8",
                                         "name": "add key to topic",
                                         "rules": [
                                             {
                                                 "t": "set",
                                                 "p": "stateName",
                                                 "pt": "msg",
                                                 "to": "key",
                                                 "tot": "msg"
                                             },
                                             {
                                                 "t": "set",
                                                 "p": "topic",
                                                 "pt": "msg",
                                                 "to": "topic  & '.' & key",
                                                 "tot": "jsonata"
                                             },
                                             {
                                                 "t": "change",
                                                 "p": "topic",
                                                 "pt": "msg",
                                                 "from": " ",
                                                 "fromt": "str",
                                                 "to": "_",
                                                 "tot": "str"
                                             }
                                         ],
                                         "action": "",
                                         "property": "",
                                         "from": "",
                                         "to": "",
                                         "reg": false,
                                         "x": 1360,
                                         "y": 160,
                                         "wires": [
                                             [
                                                 "78697695.9a72c8"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "78697695.9a72c8",
                                         "type": "switch",
                                         "z": "c3403a60.92fbb8",
                                         "name": "is type?",
                                         "property": "payload",
                                         "propertyType": "msg",
                                         "rules": [
                                             {
                                                 "t": "istype",
                                                 "v": "array",
                                                 "vt": "array"
                                             },
                                             {
                                                 "t": "istype",
                                                 "v": "object",
                                                 "vt": "object"
                                             },
                                             {
                                                 "t": "else"
                                             }
                                         ],
                                         "checkall": "true",
                                         "repair": false,
                                         "outputs": 3,
                                         "x": 1540,
                                         "y": 160,
                                         "wires": [
                                             [
                                                 "d839cef8.577f1"
                                             ],
                                             [
                                                 "eea737e7.7e8fb8"
                                             ],
                                             [
                                                 "bdfdae99.f4d9d"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "d839cef8.577f1",
                                         "type": "split",
                                         "z": "c3403a60.92fbb8",
                                         "name": "split array",
                                         "splt": "\\n",
                                         "spltType": "str",
                                         "arraySplt": 1,
                                         "arraySpltType": "len",
                                         "stream": false,
                                         "addname": "",
                                         "x": 580,
                                         "y": 280,
                                         "wires": [
                                             [
                                                 "36327f2d.8efc3"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "36327f2d.8efc3",
                                         "type": "change",
                                         "z": "c3403a60.92fbb8",
                                         "name": "add index to topic",
                                         "rules": [
                                             {
                                                 "t": "set",
                                                 "p": "topic",
                                                 "pt": "msg",
                                                 "to": "topic  & '.' & parts.index",
                                                 "tot": "jsonata"
                                             }
                                         ],
                                         "action": "",
                                         "property": "",
                                         "from": "",
                                         "to": "",
                                         "reg": false,
                                         "x": 770,
                                         "y": 280,
                                         "wires": [
                                             [
                                                 "d8f58d9b.b6a1"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "74b0b536.02371c",
                                         "type": "change",
                                         "z": "c3403a60.92fbb8",
                                         "name": "finalize msg.topic",
                                         "rules": [
                                             {
                                                 "t": "set",
                                                 "p": "top",
                                                 "pt": "msg",
                                                 "to": "'0_userdata.0.' & top",
                                                 "tot": "jsonata"
                                             },
                                             {
                                                 "t": "set",
                                                 "p": "topic",
                                                 "pt": "msg",
                                                 "to": "top & topic",
                                                 "tot": "jsonata"
                                             }
                                         ],
                                         "action": "",
                                         "property": "",
                                         "from": "",
                                         "to": "",
                                         "reg": false,
                                         "x": 1970,
                                         "y": 240,
                                         "wires": [
                                             []
                                         ]
                                     },
                                     {
                                         "id": "4cdee7cb.910c38",
                                         "type": "switch",
                                         "z": "c3403a60.92fbb8",
                                         "name": "is type?",
                                         "property": "payload",
                                         "propertyType": "msg",
                                         "rules": [
                                             {
                                                 "t": "istype",
                                                 "v": "json",
                                                 "vt": "json"
                                             },
                                             {
                                                 "t": "istype",
                                                 "v": "object",
                                                 "vt": "object"
                                             },
                                             {
                                                 "t": "istype",
                                                 "v": "array",
                                                 "vt": "array"
                                             },
                                             {
                                                 "t": "else"
                                             }
                                         ],
                                         "checkall": "true",
                                         "repair": false,
                                         "outputs": 4,
                                         "x": 400,
                                         "y": 160,
                                         "wires": [
                                             [
                                                 "c1c41535.17d3b8"
                                             ],
                                             [
                                                 "eea737e7.7e8fb8"
                                             ],
                                             [
                                                 "d839cef8.577f1"
                                             ],
                                             [
                                                 "d8f58d9b.b6a1"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "c1c41535.17d3b8",
                                         "type": "json",
                                         "z": "c3403a60.92fbb8",
                                         "name": "",
                                         "property": "payload",
                                         "action": "",
                                         "pretty": false,
                                         "x": 570,
                                         "y": 120,
                                         "wires": [
                                             [
                                                 "3ccd67db.375058"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "bdfdae99.f4d9d",
                                         "type": "switch",
                                         "z": "c3403a60.92fbb8",
                                         "name": "is msg.top != null",
                                         "property": "top",
                                         "propertyType": "msg",
                                         "rules": [
                                             {
                                                 "t": "nnull"
                                             },
                                             {
                                                 "t": "null"
                                             }
                                         ],
                                         "checkall": "true",
                                         "repair": false,
                                         "outputs": 2,
                                         "x": 1750,
                                         "y": 280,
                                         "wires": [
                                             [
                                                 "74b0b536.02371c"
                                             ],
                                             [
                                                 "7ba7dc21.fdb214"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "7ba7dc21.fdb214",
                                         "type": "change",
                                         "z": "c3403a60.92fbb8",
                                         "name": "payload = warning",
                                         "rules": [
                                             {
                                                 "t": "set",
                                                 "p": "payload",
                                                 "pt": "msg",
                                                 "to": "Please define msg.top as root for the object structure",
                                                 "tot": "str"
                                             },
                                             {
                                                 "t": "delete",
                                                 "p": "topic",
                                                 "pt": "msg"
                                             }
                                         ],
                                         "action": "",
                                         "property": "",
                                         "from": "",
                                         "to": "",
                                         "reg": false,
                                         "x": 1970,
                                         "y": 300,
                                         "wires": [
                                             [
                                                 "ab9b1e85.eea2a"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "ab9b1e85.eea2a",
                                         "type": "rbe",
                                         "z": "c3403a60.92fbb8",
                                         "name": "",
                                         "func": "rbe",
                                         "gap": "",
                                         "start": "",
                                         "inout": "out",
                                         "septopics": true,
                                         "property": "payload",
                                         "x": 2130,
                                         "y": 300,
                                         "wires": [
                                             []
                                         ]
                                     },
                                     {
                                         "id": "94876630.f71748",
                                         "type": "change",
                                         "z": "c3403a60.92fbb8",
                                         "name": "",
                                         "rules": [
                                             {
                                                 "t": "delete",
                                                 "p": "topic",
                                                 "pt": "msg"
                                             }
                                         ],
                                         "action": "",
                                         "property": "",
                                         "from": "",
                                         "to": "",
                                         "reg": false,
                                         "x": 210,
                                         "y": 160,
                                         "wires": [
                                             [
                                                 "4cdee7cb.910c38"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "3ccd67db.375058",
                                         "type": "switch",
                                         "z": "c3403a60.92fbb8",
                                         "name": "is array?",
                                         "property": "payload",
                                         "propertyType": "msg",
                                         "rules": [
                                             {
                                                 "t": "istype",
                                                 "v": "array",
                                                 "vt": "array"
                                             },
                                             {
                                                 "t": "else"
                                             }
                                         ],
                                         "checkall": "true",
                                         "repair": false,
                                         "outputs": 2,
                                         "x": 700,
                                         "y": 120,
                                         "wires": [
                                             [
                                                 "d839cef8.577f1"
                                             ],
                                             [
                                                 "eea737e7.7e8fb8"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "80dde279.c28ec",
                                         "type": "comment",
                                         "z": "c3403a60.92fbb8",
                                         "name": "Array",
                                         "info": "",
                                         "x": 400,
                                         "y": 280,
                                         "wires": []
                                     },
                                     {
                                         "id": "95ee816e.68a16",
                                         "type": "comment",
                                         "z": "c3403a60.92fbb8",
                                         "name": "object",
                                         "info": "",
                                         "x": 1140,
                                         "y": 100,
                                         "wires": []
                                     },
                                     {
                                         "id": "d8f58d9b.b6a1",
                                         "type": "switch",
                                         "z": "c3403a60.92fbb8",
                                         "name": "is type?",
                                         "property": "payload",
                                         "propertyType": "msg",
                                         "rules": [
                                             {
                                                 "t": "istype",
                                                 "v": "object",
                                                 "vt": "object"
                                             },
                                             {
                                                 "t": "istype",
                                                 "v": "array",
                                                 "vt": "array"
                                             },
                                             {
                                                 "t": "else"
                                             }
                                         ],
                                         "checkall": "true",
                                         "repair": false,
                                         "outputs": 3,
                                         "x": 960,
                                         "y": 280,
                                         "wires": [
                                             [
                                                 "eea737e7.7e8fb8"
                                             ],
                                             [
                                                 "d839cef8.577f1"
                                             ],
                                             [
                                                 "bdfdae99.f4d9d"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "661bcbd9.33b4c4",
                                         "type": "inject",
                                         "z": "175d7b92.c54684",
                                         "name": "",
                                         "props": [
                                             {
                                                 "p": "payload"
                                             }
                                         ],
                                         "repeat": "",
                                         "crontab": "",
                                         "once": false,
                                         "onceDelay": 0.1,
                                         "topic": "",
                                         "payload": "{\"velocity\":0,\"velocityTag\":\"DEFAULT\",\"velocityText\":\"The node operates by its default velocity\"}",
                                         "payloadType": "json",
                                         "x": 350,
                                         "y": 780,
                                         "wires": [
                                             [
                                                 "6fddd77b.2cd208"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "b4882230.f2297",
                                         "type": "subflow:c3403a60.92fbb8",
                                         "z": "175d7b92.c54684",
                                         "name": "",
                                         "x": 750,
                                         "y": 780,
                                         "wires": [
                                             [
                                                 "e98362f0.0721b"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "6fddd77b.2cd208",
                                         "type": "change",
                                         "z": "175d7b92.c54684",
                                         "name": "msg.top = velux",
                                         "rules": [
                                             {
                                                 "t": "set",
                                                 "p": "top",
                                                 "pt": "msg",
                                                 "to": "velux",
                                                 "tot": "str"
                                             }
                                         ],
                                         "action": "",
                                         "property": "",
                                         "from": "",
                                         "to": "",
                                         "reg": false,
                                         "x": 520,
                                         "y": 780,
                                         "wires": [
                                             [
                                                 "b4882230.f2297"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "e98362f0.0721b",
                                         "type": "ioBroker out",
                                         "z": "175d7b92.c54684",
                                         "name": "",
                                         "topic": "",
                                         "ack": "true",
                                         "autoCreate": "true",
                                         "stateName": "",
                                         "role": "",
                                         "payloadType": "",
                                         "readonly": "",
                                         "stateUnit": "",
                                         "stateMin": "",
                                         "stateMax": "",
                                         "x": 980,
                                         "y": 780,
                                         "wires": []
                                     }
                                  ]
                                  

                                  Ergänzung: Die Fehlermeldung im Log gabs wahrscheinlich nicht, weil es direkt nach 0_userdata.0 angelegt wurde.

                                  Du kannst aber erst mal selbst keine Datenpunkte seit dem neuen Admin anlegen, weil NodeRed leider keine Objekte im iobroker anlegen kann.

                                  Du siehst das fehlende Objekt im neuen admin an dem fehlenden Stiftsymbol

                                  885ddba4-daa0-4606-b344-5ad632c01cd0-image.png

                                  Du musst dann auf der Ebene 0_userdata.0 den Punkt velux nochmals manuell anlegen, damit alles regelkonform ist:

                                  77002fac-e816-41d3-a39a-8583335bf14c-image.png

                                  Dann kannst auch manuell in diesem "Verzeichnis" wieder neue Datenpunkte anlegen:

                                  0c02597e-dc6b-4ddb-87a8-a43ad495d739-image.png

                                  Wenn Du auf den Adapter zurückgehst um das Log zu analysieren, dann sag nochmal Bescheid, denn ich hab noch was an der ChangeNode geändert und wie gesagt eine andere Tailnode verwendet.

                                  S Offline
                                  S Offline
                                  sascho
                                  schrieb am zuletzt editiert von
                                  #86

                                  @mickym

                                  Also, ich habe mal alles auf die All Value Nodes umgebaut - über die Change Variante. Gefühlt hat das schon mal etwas gebracht. Es kommen weniger Fehlermeldung ins Log:
                                  51b8d861-aa7e-49c9-922c-e91eea081e49-image.png

                                  Allerdings habe ich beobachtet, dass wenn ich Fensterpaare ansteuere, dass die Status Nodes kurz offline sind, und erst nach 2-3 Minuten wieder einen Status berichten. Ich vermute stark, dass in diesem Moment die Fehlermeldungen generiert werden. Vermutlich kann das KLF200 wirklich nur 2 Befehle gleichzeitig verarbeiten. Ich bekomme später des KLR200 und versuche dann mal die Target Befehle über Szenen abzubilden. Evtl. reduziert das die Probleme weiter.

                                  Wie ich die Catch Node verwenden kann ist mir aber nicht klar.

                                  Ich habe sie mit ins Flow Fenster kopiert.. Sollte sie das Debug Fenster beladen?

                                  ![54766800-8a13-47f2-b9da-90fe02c324a7-image.png]

                                  cc1b84a1-a2d8-4cf0-8752-830c3a14970f-image.png (/assets/uploads/files/1630158935738-54766800-8a13-47f2-b9da-90fe02c324a7-image.png)

                                  bb81e70c-5c4f-49dd-bdb5-e4f4dbfee1cc-image.png

                                  mickymM 2 Antworten Letzte Antwort
                                  0
                                  • S sascho

                                    @mickym

                                    Also, ich habe mal alles auf die All Value Nodes umgebaut - über die Change Variante. Gefühlt hat das schon mal etwas gebracht. Es kommen weniger Fehlermeldung ins Log:
                                    51b8d861-aa7e-49c9-922c-e91eea081e49-image.png

                                    Allerdings habe ich beobachtet, dass wenn ich Fensterpaare ansteuere, dass die Status Nodes kurz offline sind, und erst nach 2-3 Minuten wieder einen Status berichten. Ich vermute stark, dass in diesem Moment die Fehlermeldungen generiert werden. Vermutlich kann das KLF200 wirklich nur 2 Befehle gleichzeitig verarbeiten. Ich bekomme später des KLR200 und versuche dann mal die Target Befehle über Szenen abzubilden. Evtl. reduziert das die Probleme weiter.

                                    Wie ich die Catch Node verwenden kann ist mir aber nicht klar.

                                    Ich habe sie mit ins Flow Fenster kopiert.. Sollte sie das Debug Fenster beladen?

                                    ![54766800-8a13-47f2-b9da-90fe02c324a7-image.png]

                                    cc1b84a1-a2d8-4cf0-8752-830c3a14970f-image.png (/assets/uploads/files/1630158935738-54766800-8a13-47f2-b9da-90fe02c324a7-image.png)

                                    bb81e70c-5c4f-49dd-bdb5-e4f4dbfee1cc-image.png

                                    mickymM Offline
                                    mickymM Offline
                                    mickym
                                    Most Active
                                    schrieb am zuletzt editiert von mickym
                                    #87

                                    @sascho Nein die Catch Node ist dazu da, um Fehler abzufangen oder ggf. darauf zu reagieren.

                                    Wie gesagt ich würde es aber nicht mit allen Nodes machen, sondern dafür ausgewählte Velux Nodes von Dir verwenden.

                                    Ich versuche Dir das für Dein Beispiel, so am Besten wie möglich zu illustrieren. Da ich wie gesagt keine KLF 200 und keine Velux-Fenster habe, behelfe ich mich momentan mit einer Function Node - die in diesem Beispiel zum Beispiel eine Velux API Node sein könnte, um den Status abzufragen oder auch um das Target zu setzen .

                                    Doch zuerst noch mal die Catch Node.

                                    Man kann entweder alle Nodes in einem Flow überwachen oder nur spezielle. Für spezielle kann man die über eine Liste auswählen, da die ziemlich lange ist, kann man das aber auch über die Schaltfläche Nodes auswählen machen, wie ich versucht habe in folgendem Video darzustellen:

                                    Catch Node zur Fehlerbehandlung.mp4

                                    So und hier nun der Flow und was ich mit dieser Catch Node erreichen kann.

                                    screen.png

                                    Die FunctionNode simuliert eine Velux Node, die ich mit einer Zufallszahl füttere, wenn diese größer als 0,5 ist - spukt die Node einen Fehler aus, wenn die Zufallszahl kleiner 0,5 ist, dann ist alles OK.

                                    Den Fehler, den die Funktion Node ausstößt, ist in etwa der den Du im Log gepostet hast und das sieht im Beipielflow im Log dann so aus:

                                    d1ac1fb5-5277-44b6-966a-a46814f566b2-image.png

                                    wenn ich diese nicht mit der Catch Node abfange.

                                    Der Vorteil ist natürlich nicht nur, dass ich den Fehler statt im Log im Debug Fenster habe, sondern dass ich damit nun eigene Flows starten kann, die durch den Fehler in der Velux Node getriggert werden können.

                                    Du siehst wenn Du in der function Node also ein Fehler erzeugt wird (das würde ja Deiner Velux Node entsprechen), dann triggert die Catch Node mit der Error-Objekt

                                    8216c084-c32c-4747-b655-d2af69e0f37b-image.png

                                    Dieses kann man nun zwar einfach im Debug Fenster ausgeben lassen oder man lässt einen sinnvollen Flow starten. In meinem Beispielflow filtere ich also nur die Fehlermeldung mit dem timeout aus - man kann natürlich generell einfach alles durchlassen, was einen Fehler erzeugt.

                                    9597162e-4755-4855-b291-d432f9353691-image.png

                                    Wichtig ist aber, dass ich über die nachfolgende Change Node nun eine Flowvariable "timeout" auf true setzen kann:

                                    ae213010-9035-4a04-821e-b713478e033c-image.png

                                    Solange dies gesetzt ist - wird oben der Flow blockiert bis die timeout Variable wieder false ist.

                                    5d622698-6550-4166-8d4e-6ea726878006-image.png

                                    Sprich so kann man nur Werte setzen wenn die timeout-Variable false ist.

                                    Arbeit die Velux Node richtig (in dem Beispiel die Function Node und liegt keine Fehlersituation vor), dann wird timeout auf false gesetzt.

                                    Ich geh einfach mal davon aus, dass die Velux Node im Fehlerfall bislang auch nichts mehr ausspukt und nur wenn alles OK ist, wird auch was aus der Node ausgegeben.

                                    96423900-ecfb-4dd5-9229-da3adaa04c65-image.png 1e082a83-6dd8-4fd1-a5c4-d5779d5329f0-image.png

                                    Hier mal der Beispielflow zum Import:

                                    [
                                       {
                                           "id": "70cf0aeb.94bae4",
                                           "type": "function",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "Simuliert Velux Node und erzeugt Zufallsfehler",
                                           "func": "if (msg.payload > 0.5) {\n    node.error('Error: timeout GW_COMMAND_SEND_CFM',msg);\n    return null;\n}\nreturn msg;",
                                           "outputs": 1,
                                           "noerr": 0,
                                           "initialize": "",
                                           "finalize": "",
                                           "libs": [],
                                           "x": 640,
                                           "y": 3820,
                                           "wires": [
                                               [
                                                   "55bbd00a.85697",
                                                   "3cc096df.4ed41a"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "aed24250.60e72",
                                           "type": "change",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "random 0 bis 1",
                                           "rules": [
                                               {
                                                   "t": "set",
                                                   "p": "payload",
                                                   "pt": "msg",
                                                   "to": "$random()\t",
                                                   "tot": "jsonata"
                                               }
                                           ],
                                           "action": "",
                                           "property": "",
                                           "from": "",
                                           "to": "",
                                           "reg": false,
                                           "x": 340,
                                           "y": 3820,
                                           "wires": [
                                               [
                                                   "70cf0aeb.94bae4"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "6b165b15.9486d4",
                                           "type": "inject",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "setze Rolladen auf 40",
                                           "props": [
                                               {
                                                   "p": "payload"
                                               }
                                           ],
                                           "repeat": "",
                                           "crontab": "",
                                           "once": false,
                                           "onceDelay": 0.1,
                                           "topic": "",
                                           "payload": "40",
                                           "payloadType": "num",
                                           "x": 180,
                                           "y": 3680,
                                           "wires": [
                                               [
                                                   "81199e61.31b9",
                                                   "aed24250.60e72"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "55bbd00a.85697",
                                           "type": "debug",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "",
                                           "active": true,
                                           "tosidebar": true,
                                           "console": false,
                                           "tostatus": false,
                                           "complete": "false",
                                           "statusVal": "",
                                           "statusType": "auto",
                                           "x": 970,
                                           "y": 3820,
                                           "wires": []
                                       },
                                       {
                                           "id": "1f8cc5bb.da0f8a",
                                           "type": "debug",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "msg.error Objekt",
                                           "active": true,
                                           "tosidebar": true,
                                           "console": false,
                                           "tostatus": false,
                                           "complete": "error",
                                           "targetType": "msg",
                                           "statusVal": "",
                                           "statusType": "auto",
                                           "x": 550,
                                           "y": 3980,
                                           "wires": []
                                       },
                                       {
                                           "id": "7cecf902.b29378",
                                           "type": "switch",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "",
                                           "property": "error.message",
                                           "propertyType": "msg",
                                           "rules": [
                                               {
                                                   "t": "cont",
                                                   "v": "timeout GW_COMMAND_SEND_CFM",
                                                   "vt": "str"
                                               }
                                           ],
                                           "checkall": "true",
                                           "repair": false,
                                           "outputs": 1,
                                           "x": 530,
                                           "y": 4060,
                                           "wires": [
                                               [
                                                   "5e8ff0c7.7bd35"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "5e8ff0c7.7bd35",
                                           "type": "change",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "",
                                           "rules": [
                                               {
                                                   "t": "set",
                                                   "p": "payload",
                                                   "pt": "msg",
                                                   "to": "true",
                                                   "tot": "bool"
                                               },
                                               {
                                                   "t": "set",
                                                   "p": "timeout",
                                                   "pt": "flow",
                                                   "to": "true",
                                                   "tot": "bool"
                                               }
                                           ],
                                           "action": "",
                                           "property": "",
                                           "from": "",
                                           "to": "",
                                           "reg": false,
                                           "x": 720,
                                           "y": 4060,
                                           "wires": [
                                               [
                                                   "4c05b28d.a48e1c"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "4c05b28d.a48e1c",
                                           "type": "debug",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "Timeout Fehler Entdeckt",
                                           "active": true,
                                           "tosidebar": true,
                                           "console": false,
                                           "tostatus": false,
                                           "complete": "payload",
                                           "targetType": "msg",
                                           "statusVal": "",
                                           "statusType": "auto",
                                           "x": 980,
                                           "y": 4060,
                                           "wires": []
                                       },
                                       {
                                           "id": "3cc096df.4ed41a",
                                           "type": "change",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "",
                                           "rules": [
                                               {
                                                   "t": "set",
                                                   "p": "timeout",
                                                   "pt": "flow",
                                                   "to": "false",
                                                   "tot": "bool"
                                               }
                                           ],
                                           "action": "",
                                           "property": "",
                                           "from": "",
                                           "to": "",
                                           "reg": false,
                                           "x": 990,
                                           "y": 3780,
                                           "wires": [
                                               []
                                           ]
                                       },
                                       {
                                           "id": "81199e61.31b9",
                                           "type": "switch",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "timeout = false",
                                           "property": "timeout",
                                           "propertyType": "flow",
                                           "rules": [
                                               {
                                                   "t": "false"
                                               }
                                           ],
                                           "checkall": "true",
                                           "repair": false,
                                           "outputs": 1,
                                           "x": 420,
                                           "y": 3680,
                                           "wires": [
                                               [
                                                   "a705ab3f.628828",
                                                   "aed24250.60e72"
                                               ]
                                           ]
                                       },
                                       {
                                           "id": "a705ab3f.628828",
                                           "type": "debug",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "Velux node setze target auf ...",
                                           "active": true,
                                           "tosidebar": true,
                                           "console": false,
                                           "tostatus": false,
                                           "complete": "payload",
                                           "targetType": "msg",
                                           "statusVal": "",
                                           "statusType": "auto",
                                           "x": 720,
                                           "y": 3680,
                                           "wires": []
                                       },
                                       {
                                           "id": "87ba9ec9.74a74",
                                           "type": "catch",
                                           "z": "dce8fa20.2e93c8",
                                           "name": "",
                                           "scope": [
                                               "70cf0aeb.94bae4"
                                           ],
                                           "uncaught": false,
                                           "x": 320,
                                           "y": 3980,
                                           "wires": [
                                               [
                                                   "1f8cc5bb.da0f8a",
                                                   "7cecf902.b29378"
                                               ]
                                           ]
                                       }
                                    ]
                                    

                                    Noch was zur Catch Node - falls Du nicht alle Nodes überwachst gibt die Zahl hinter der Node an (wenn Du keinen Namen vergibst) wieviel Nodes von der Catch Node überwacht werden.

                                    In dem msg.error Objekt, das die Catch Node zurückgibt, ist neben der Fehlermeldung die source interessant:
                                    Damit kannst Du anhand des Namens oder auch der ID, die Node identifizieren, welche den Fehler geworfen hat. Dies ist dann wichtig, wenn Du mehrere Nodes mit einer Catch Node überwachst.

                                    Wenn Du die ID über die Schaltfläche in die Zwischenablage kopierst:

                                    56777fcd-1cbd-4c93-8f86-f7fa612798e3-image.png

                                    Dann kannst Du diese Node über diese ID im Info-Fenster einfach suchen:

                                    e9bcc30c-4043-4003-b38c-358397cc9cfe-image.png

                                    Mit etwas Programmierung in einer Function Node - könnte man sich damit auch eine Befehlsqueue aufbauen, die nur bei korrektem Fehlerstatus die Velux Nodes mit Befehlen versieht.

                                    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                    mickymM 1 Antwort Letzte Antwort
                                    0
                                    • mickymM mickym

                                      @sascho Nein die Catch Node ist dazu da, um Fehler abzufangen oder ggf. darauf zu reagieren.

                                      Wie gesagt ich würde es aber nicht mit allen Nodes machen, sondern dafür ausgewählte Velux Nodes von Dir verwenden.

                                      Ich versuche Dir das für Dein Beispiel, so am Besten wie möglich zu illustrieren. Da ich wie gesagt keine KLF 200 und keine Velux-Fenster habe, behelfe ich mich momentan mit einer Function Node - die in diesem Beispiel zum Beispiel eine Velux API Node sein könnte, um den Status abzufragen oder auch um das Target zu setzen .

                                      Doch zuerst noch mal die Catch Node.

                                      Man kann entweder alle Nodes in einem Flow überwachen oder nur spezielle. Für spezielle kann man die über eine Liste auswählen, da die ziemlich lange ist, kann man das aber auch über die Schaltfläche Nodes auswählen machen, wie ich versucht habe in folgendem Video darzustellen:

                                      Catch Node zur Fehlerbehandlung.mp4

                                      So und hier nun der Flow und was ich mit dieser Catch Node erreichen kann.

                                      screen.png

                                      Die FunctionNode simuliert eine Velux Node, die ich mit einer Zufallszahl füttere, wenn diese größer als 0,5 ist - spukt die Node einen Fehler aus, wenn die Zufallszahl kleiner 0,5 ist, dann ist alles OK.

                                      Den Fehler, den die Funktion Node ausstößt, ist in etwa der den Du im Log gepostet hast und das sieht im Beipielflow im Log dann so aus:

                                      d1ac1fb5-5277-44b6-966a-a46814f566b2-image.png

                                      wenn ich diese nicht mit der Catch Node abfange.

                                      Der Vorteil ist natürlich nicht nur, dass ich den Fehler statt im Log im Debug Fenster habe, sondern dass ich damit nun eigene Flows starten kann, die durch den Fehler in der Velux Node getriggert werden können.

                                      Du siehst wenn Du in der function Node also ein Fehler erzeugt wird (das würde ja Deiner Velux Node entsprechen), dann triggert die Catch Node mit der Error-Objekt

                                      8216c084-c32c-4747-b655-d2af69e0f37b-image.png

                                      Dieses kann man nun zwar einfach im Debug Fenster ausgeben lassen oder man lässt einen sinnvollen Flow starten. In meinem Beispielflow filtere ich also nur die Fehlermeldung mit dem timeout aus - man kann natürlich generell einfach alles durchlassen, was einen Fehler erzeugt.

                                      9597162e-4755-4855-b291-d432f9353691-image.png

                                      Wichtig ist aber, dass ich über die nachfolgende Change Node nun eine Flowvariable "timeout" auf true setzen kann:

                                      ae213010-9035-4a04-821e-b713478e033c-image.png

                                      Solange dies gesetzt ist - wird oben der Flow blockiert bis die timeout Variable wieder false ist.

                                      5d622698-6550-4166-8d4e-6ea726878006-image.png

                                      Sprich so kann man nur Werte setzen wenn die timeout-Variable false ist.

                                      Arbeit die Velux Node richtig (in dem Beispiel die Function Node und liegt keine Fehlersituation vor), dann wird timeout auf false gesetzt.

                                      Ich geh einfach mal davon aus, dass die Velux Node im Fehlerfall bislang auch nichts mehr ausspukt und nur wenn alles OK ist, wird auch was aus der Node ausgegeben.

                                      96423900-ecfb-4dd5-9229-da3adaa04c65-image.png 1e082a83-6dd8-4fd1-a5c4-d5779d5329f0-image.png

                                      Hier mal der Beispielflow zum Import:

                                      [
                                         {
                                             "id": "70cf0aeb.94bae4",
                                             "type": "function",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "Simuliert Velux Node und erzeugt Zufallsfehler",
                                             "func": "if (msg.payload > 0.5) {\n    node.error('Error: timeout GW_COMMAND_SEND_CFM',msg);\n    return null;\n}\nreturn msg;",
                                             "outputs": 1,
                                             "noerr": 0,
                                             "initialize": "",
                                             "finalize": "",
                                             "libs": [],
                                             "x": 640,
                                             "y": 3820,
                                             "wires": [
                                                 [
                                                     "55bbd00a.85697",
                                                     "3cc096df.4ed41a"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "aed24250.60e72",
                                             "type": "change",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "random 0 bis 1",
                                             "rules": [
                                                 {
                                                     "t": "set",
                                                     "p": "payload",
                                                     "pt": "msg",
                                                     "to": "$random()\t",
                                                     "tot": "jsonata"
                                                 }
                                             ],
                                             "action": "",
                                             "property": "",
                                             "from": "",
                                             "to": "",
                                             "reg": false,
                                             "x": 340,
                                             "y": 3820,
                                             "wires": [
                                                 [
                                                     "70cf0aeb.94bae4"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "6b165b15.9486d4",
                                             "type": "inject",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "setze Rolladen auf 40",
                                             "props": [
                                                 {
                                                     "p": "payload"
                                                 }
                                             ],
                                             "repeat": "",
                                             "crontab": "",
                                             "once": false,
                                             "onceDelay": 0.1,
                                             "topic": "",
                                             "payload": "40",
                                             "payloadType": "num",
                                             "x": 180,
                                             "y": 3680,
                                             "wires": [
                                                 [
                                                     "81199e61.31b9",
                                                     "aed24250.60e72"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "55bbd00a.85697",
                                             "type": "debug",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "",
                                             "active": true,
                                             "tosidebar": true,
                                             "console": false,
                                             "tostatus": false,
                                             "complete": "false",
                                             "statusVal": "",
                                             "statusType": "auto",
                                             "x": 970,
                                             "y": 3820,
                                             "wires": []
                                         },
                                         {
                                             "id": "1f8cc5bb.da0f8a",
                                             "type": "debug",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "msg.error Objekt",
                                             "active": true,
                                             "tosidebar": true,
                                             "console": false,
                                             "tostatus": false,
                                             "complete": "error",
                                             "targetType": "msg",
                                             "statusVal": "",
                                             "statusType": "auto",
                                             "x": 550,
                                             "y": 3980,
                                             "wires": []
                                         },
                                         {
                                             "id": "7cecf902.b29378",
                                             "type": "switch",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "",
                                             "property": "error.message",
                                             "propertyType": "msg",
                                             "rules": [
                                                 {
                                                     "t": "cont",
                                                     "v": "timeout GW_COMMAND_SEND_CFM",
                                                     "vt": "str"
                                                 }
                                             ],
                                             "checkall": "true",
                                             "repair": false,
                                             "outputs": 1,
                                             "x": 530,
                                             "y": 4060,
                                             "wires": [
                                                 [
                                                     "5e8ff0c7.7bd35"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "5e8ff0c7.7bd35",
                                             "type": "change",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "",
                                             "rules": [
                                                 {
                                                     "t": "set",
                                                     "p": "payload",
                                                     "pt": "msg",
                                                     "to": "true",
                                                     "tot": "bool"
                                                 },
                                                 {
                                                     "t": "set",
                                                     "p": "timeout",
                                                     "pt": "flow",
                                                     "to": "true",
                                                     "tot": "bool"
                                                 }
                                             ],
                                             "action": "",
                                             "property": "",
                                             "from": "",
                                             "to": "",
                                             "reg": false,
                                             "x": 720,
                                             "y": 4060,
                                             "wires": [
                                                 [
                                                     "4c05b28d.a48e1c"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "4c05b28d.a48e1c",
                                             "type": "debug",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "Timeout Fehler Entdeckt",
                                             "active": true,
                                             "tosidebar": true,
                                             "console": false,
                                             "tostatus": false,
                                             "complete": "payload",
                                             "targetType": "msg",
                                             "statusVal": "",
                                             "statusType": "auto",
                                             "x": 980,
                                             "y": 4060,
                                             "wires": []
                                         },
                                         {
                                             "id": "3cc096df.4ed41a",
                                             "type": "change",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "",
                                             "rules": [
                                                 {
                                                     "t": "set",
                                                     "p": "timeout",
                                                     "pt": "flow",
                                                     "to": "false",
                                                     "tot": "bool"
                                                 }
                                             ],
                                             "action": "",
                                             "property": "",
                                             "from": "",
                                             "to": "",
                                             "reg": false,
                                             "x": 990,
                                             "y": 3780,
                                             "wires": [
                                                 []
                                             ]
                                         },
                                         {
                                             "id": "81199e61.31b9",
                                             "type": "switch",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "timeout = false",
                                             "property": "timeout",
                                             "propertyType": "flow",
                                             "rules": [
                                                 {
                                                     "t": "false"
                                                 }
                                             ],
                                             "checkall": "true",
                                             "repair": false,
                                             "outputs": 1,
                                             "x": 420,
                                             "y": 3680,
                                             "wires": [
                                                 [
                                                     "a705ab3f.628828",
                                                     "aed24250.60e72"
                                                 ]
                                             ]
                                         },
                                         {
                                             "id": "a705ab3f.628828",
                                             "type": "debug",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "Velux node setze target auf ...",
                                             "active": true,
                                             "tosidebar": true,
                                             "console": false,
                                             "tostatus": false,
                                             "complete": "payload",
                                             "targetType": "msg",
                                             "statusVal": "",
                                             "statusType": "auto",
                                             "x": 720,
                                             "y": 3680,
                                             "wires": []
                                         },
                                         {
                                             "id": "87ba9ec9.74a74",
                                             "type": "catch",
                                             "z": "dce8fa20.2e93c8",
                                             "name": "",
                                             "scope": [
                                                 "70cf0aeb.94bae4"
                                             ],
                                             "uncaught": false,
                                             "x": 320,
                                             "y": 3980,
                                             "wires": [
                                                 [
                                                     "1f8cc5bb.da0f8a",
                                                     "7cecf902.b29378"
                                                 ]
                                             ]
                                         }
                                      ]
                                      

                                      Noch was zur Catch Node - falls Du nicht alle Nodes überwachst gibt die Zahl hinter der Node an (wenn Du keinen Namen vergibst) wieviel Nodes von der Catch Node überwacht werden.

                                      In dem msg.error Objekt, das die Catch Node zurückgibt, ist neben der Fehlermeldung die source interessant:
                                      Damit kannst Du anhand des Namens oder auch der ID, die Node identifizieren, welche den Fehler geworfen hat. Dies ist dann wichtig, wenn Du mehrere Nodes mit einer Catch Node überwachst.

                                      Wenn Du die ID über die Schaltfläche in die Zwischenablage kopierst:

                                      56777fcd-1cbd-4c93-8f86-f7fa612798e3-image.png

                                      Dann kannst Du diese Node über diese ID im Info-Fenster einfach suchen:

                                      e9bcc30c-4043-4003-b38c-358397cc9cfe-image.png

                                      Mit etwas Programmierung in einer Function Node - könnte man sich damit auch eine Befehlsqueue aufbauen, die nur bei korrektem Fehlerstatus die Velux Nodes mit Befehlen versieht.

                                      mickymM Offline
                                      mickymM Offline
                                      mickym
                                      Most Active
                                      schrieb am zuletzt editiert von
                                      #88

                                      @sascho

                                      In Anlehnung an das vorherige Posting könntest Du auch versuchen mit einer Velux Node verschiedene Fenster zu steuern und mal schauen ob das geht.

                                      Ich habe das mal mit dem topic und Inject Nodes versucht - und das kannst ja auch mal probieren, halt mit Deinen IDs

                                      9b40e23e-236e-46e9-a5df-c267308c1956-image.png

                                      216d7b0d-90cd-42f6-a62b-d50f906b5d49-image.png

                                      ob Du so Deine verschiedenen Fenster / Rolläden mit einer Velux Node steuern kannst.

                                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                      1 Antwort Letzte Antwort
                                      0
                                      • S sascho

                                        @mickym

                                        Also, ich habe mal alles auf die All Value Nodes umgebaut - über die Change Variante. Gefühlt hat das schon mal etwas gebracht. Es kommen weniger Fehlermeldung ins Log:
                                        51b8d861-aa7e-49c9-922c-e91eea081e49-image.png

                                        Allerdings habe ich beobachtet, dass wenn ich Fensterpaare ansteuere, dass die Status Nodes kurz offline sind, und erst nach 2-3 Minuten wieder einen Status berichten. Ich vermute stark, dass in diesem Moment die Fehlermeldungen generiert werden. Vermutlich kann das KLF200 wirklich nur 2 Befehle gleichzeitig verarbeiten. Ich bekomme später des KLR200 und versuche dann mal die Target Befehle über Szenen abzubilden. Evtl. reduziert das die Probleme weiter.

                                        Wie ich die Catch Node verwenden kann ist mir aber nicht klar.

                                        Ich habe sie mit ins Flow Fenster kopiert.. Sollte sie das Debug Fenster beladen?

                                        ![54766800-8a13-47f2-b9da-90fe02c324a7-image.png]

                                        cc1b84a1-a2d8-4cf0-8752-830c3a14970f-image.png (/assets/uploads/files/1630158935738-54766800-8a13-47f2-b9da-90fe02c324a7-image.png)

                                        bb81e70c-5c4f-49dd-bdb5-e4f4dbfee1cc-image.png

                                        mickymM Offline
                                        mickymM Offline
                                        mickym
                                        Most Active
                                        schrieb am zuletzt editiert von mickym
                                        #89

                                        @sascho So nun habe ich mal so eine Befehlsqueue realisiert:

                                        Wenn Du über die Inject Nodes wie im vorherigen Post Deine Fenster/Jalousien steuern kannst, dann wäre der nächste Schritt so eine Befehlsqueue mittels einer function Node zu realisieren. Man könnte das ggf. auch ohne function Node machen, aber dann wäre der Flow sehr unübersichtlich.

                                        e0c7e9f6-7acc-4d5e-9043-44374d44dd52-image.png

                                        Die blaue Gruppe - in der ich den Fehler der Velux Nodes nur simuliere, kannst Du dann natürlich weglassen. Ich habe in der Simulationsnode - die Fehlerhäufigkeit mal auf 30% eingestellt, so dass 30% einen Fehler erzeugen.

                                        Wenn Du im Flow die function Node "Befehlsqueue" markierst (orange Linie) und dann auf die Kontextdaten gehst und die Daten aktualisierst, dann siehst Du das die Befehlsqueue quasi leer ist.

                                        Nun drücke ich die Inject-Nodes nach der Reihe der IDs (also 1,2,3,4,1,2, ...)

                                        Wenn ein Fehler auftritt, bei mir gleich beim ID 1, dann siehst Du in der trigger Node das 1 Nachricht ansteht und diese nach einer Minute die Befehlsqueue erneut triggert.

                                        In der Queue ist immer noch der eine Befehl - der also wegen des Fehlers noch nicht abgesetzt werden konnte.

                                        29a4eb5e-f608-4cb9-a885-04239542ebf8-image.png

                                        Das passiert dann solange - bis die Velux Node (wieder verfügbar ist):

                                        3a3ac74b-0138-41cf-88b0-cfefefae9859-image.png

                                        Hier ein Beispiel wo die erste ID funktionierte, ID 2 und 3 jedoch nicht - da Velux Node nicht bereit.
                                        In der Befehlsqueue wurden die beiden zwischengespeichert:

                                        d2d899d1-63e0-4c2f-a5f5-54da4e294acb-image.png

                                        Alle Minuten wird nun versucht - die noch voll Queue abzuarbeiten bis die Velux Node verfügbar ist - dann wird die Queue geleert:

                                        58bfc2ed-35b2-432b-92fa-5a63cf5c45e9-image.png

                                        Hier wieder mal der View zum Spielen und Lernen. ;)

                                        [{"id":"928423187ddebeb8","type":"inject","z":"5191e3c.a1ef01c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"velux:write:id:1","payload":"0","payloadType":"num","x":140,"y":2160,"wires":[["1174c3d4591443f0"]]},{"id":"271ceb4ffe85fc0c","type":"inject","z":"5191e3c.a1ef01c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"velux:write:id:2","payload":"0","payloadType":"num","x":140,"y":2220,"wires":[["1174c3d4591443f0"]]},{"id":"acdfc9e792f998a3","type":"inject","z":"5191e3c.a1ef01c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"velux:write:id:3","payload":"100","payloadType":"num","x":130,"y":2280,"wires":[["1174c3d4591443f0"]]},{"id":"2aad88c9786daebb","type":"inject","z":"5191e3c.a1ef01c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"velux:write:id:4","payload":"50","payloadType":"num","x":130,"y":2340,"wires":[["1174c3d4591443f0"]]},{"id":"1174c3d4591443f0","type":"function","z":"5191e3c.a1ef01c","name":"Befehlsqueue","func":"var queue = context.get('queue') || [];\nvar isError = false;\n\nmsg.OK = msg.OK || false;\n\nif (msg.payload !== undefined) queue.push(msg);\nif (msg.error !== undefined) isError = true;\nif (msg.OK) {\n    // node.warn('msg.OK recieved');\n    queue.shift();\n    // node.warn(queue);\n    isError = false;\n}\ncontext.set('queue',queue);\n\n// if (msg.OK) return null; \n\n// node.warn('isError: ' + isError);\n// node.warn('msg.OK: ' + msg.OK);\n\nif (queue.length > 0 && !isError ) {\n    return [queue[0],null];\n}\n    else if (isError) {\n    return [null,msg];\n}\n    \n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":2240,"wires":[["e373e8c42f89a886","aed24250.60e72"],["9123ef8b7bd2ad6a","56618fd026f5c1b1"]]},{"id":"e373e8c42f89a886","type":"Velux Nodes","z":"5191e3c.a1ef01c","nodevalue":"","topic":"","x":650,"y":2080,"wires":[["6493512466028bf9","7361ce697612a791"]]},{"id":"6493512466028bf9","type":"debug","z":"5191e3c.a1ef01c","name":"Velux Node Simulation","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1280,"y":2080,"wires":[]},{"id":"85ad53e3176273fe","type":"catch","z":"5191e3c.a1ef01c","name":"","scope":["70cf0aeb.94bae4"],"uncaught":false,"x":170,"y":2440,"wires":[["1174c3d4591443f0"]]},{"id":"7361ce697612a791","type":"change","z":"5191e3c.a1ef01c","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"delete","p":"topic","pt":"msg"},{"t":"set","p":"OK","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":890,"y":2240,"wires":[["1174c3d4591443f0","c0a741f73c2a7530"]]},{"id":"56618fd026f5c1b1","type":"debug","z":"5191e3c.a1ef01c","name":"error","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":650,"y":2300,"wires":[]},{"id":"9123ef8b7bd2ad6a","type":"trigger","z":"5191e3c.a1ef01c","name":"","op1":"","op2":"true","op1type":"nul","op2type":"bool","duration":"1","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":670,"y":2360,"wires":[["8ff0b78f263a84ce"]]},{"id":"c0a741f73c2a7530","type":"change","z":"5191e3c.a1ef01c","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":2240,"wires":[["9123ef8b7bd2ad6a"]]},{"id":"8ff0b78f263a84ce","type":"change","z":"5191e3c.a1ef01c","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"delete","p":"topic","pt":"msg"},{"t":"delete","p":"error","pt":"msg"},{"t":"set","p":"OK","pt":"msg","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":2420,"wires":[["1174c3d4591443f0"]]},{"id":"3e49536e2c3f9b25","type":"group","z":"5191e3c.a1ef01c","name":"Simuliere VeluxNode","style":{"label":true,"color":"#000000","fill":"#3f93cf"},"nodes":["aed24250.60e72","70cf0aeb.94bae4"],"x":534,"y":2119,"w":612,"h":82},{"id":"aed24250.60e72","type":"change","z":"5191e3c.a1ef01c","g":"3e49536e2c3f9b25","name":"random 0 bis 1","rules":[{"t":"set","p":"rnd","pt":"msg","to":"$random()\t","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":2160,"wires":[["70cf0aeb.94bae4"]]},{"id":"70cf0aeb.94bae4","type":"function","z":"5191e3c.a1ef01c","g":"3e49536e2c3f9b25","name":"Simuliert Velux Node und erzeugt Zufallsfehler","func":"if (msg.rnd > 0.7) {\n    msg = {};\n    node.error('Error: timeout GW_COMMAND_SEND_CFM',msg);\n    return null;\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":2160,"wires":[["6493512466028bf9","7361ce697612a791"]]}]
                                        

                                        Der untere Teil der function Node (Befehlsqueue) wird also ausgeführt, wenn die Velux Node im Fehlerzustand ist, ansonsten werden die Befehle nacheinander an die Velux Node über den oberen Ausgang der function Node gesendet.

                                        Du kannst natürlich meine ganzen Debug Nachrichten aus der function Node rauslöschen, so dass der reine Code der function Node nun so aussieht:

                                        var queue = context.get('queue') || [];
                                        var isError = false;
                                        msg.OK = msg.OK || false;
                                        
                                        if (msg.payload !== undefined) queue.push(msg);
                                        if (msg.error !== undefined) isError = true;
                                        if (msg.OK) {
                                            queue.shift();
                                            isError = false;
                                        }
                                        context.set('queue',queue);
                                        if (queue.length > 0 && !isError ) {
                                            return [queue[0],null];
                                        }
                                            else if (isError) {
                                            return [null,msg];
                                        }
                                        

                                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                        S 1 Antwort Letzte Antwort
                                        0
                                        • mickymM mickym

                                          @sascho So nun habe ich mal so eine Befehlsqueue realisiert:

                                          Wenn Du über die Inject Nodes wie im vorherigen Post Deine Fenster/Jalousien steuern kannst, dann wäre der nächste Schritt so eine Befehlsqueue mittels einer function Node zu realisieren. Man könnte das ggf. auch ohne function Node machen, aber dann wäre der Flow sehr unübersichtlich.

                                          e0c7e9f6-7acc-4d5e-9043-44374d44dd52-image.png

                                          Die blaue Gruppe - in der ich den Fehler der Velux Nodes nur simuliere, kannst Du dann natürlich weglassen. Ich habe in der Simulationsnode - die Fehlerhäufigkeit mal auf 30% eingestellt, so dass 30% einen Fehler erzeugen.

                                          Wenn Du im Flow die function Node "Befehlsqueue" markierst (orange Linie) und dann auf die Kontextdaten gehst und die Daten aktualisierst, dann siehst Du das die Befehlsqueue quasi leer ist.

                                          Nun drücke ich die Inject-Nodes nach der Reihe der IDs (also 1,2,3,4,1,2, ...)

                                          Wenn ein Fehler auftritt, bei mir gleich beim ID 1, dann siehst Du in der trigger Node das 1 Nachricht ansteht und diese nach einer Minute die Befehlsqueue erneut triggert.

                                          In der Queue ist immer noch der eine Befehl - der also wegen des Fehlers noch nicht abgesetzt werden konnte.

                                          29a4eb5e-f608-4cb9-a885-04239542ebf8-image.png

                                          Das passiert dann solange - bis die Velux Node (wieder verfügbar ist):

                                          3a3ac74b-0138-41cf-88b0-cfefefae9859-image.png

                                          Hier ein Beispiel wo die erste ID funktionierte, ID 2 und 3 jedoch nicht - da Velux Node nicht bereit.
                                          In der Befehlsqueue wurden die beiden zwischengespeichert:

                                          d2d899d1-63e0-4c2f-a5f5-54da4e294acb-image.png

                                          Alle Minuten wird nun versucht - die noch voll Queue abzuarbeiten bis die Velux Node verfügbar ist - dann wird die Queue geleert:

                                          58bfc2ed-35b2-432b-92fa-5a63cf5c45e9-image.png

                                          Hier wieder mal der View zum Spielen und Lernen. ;)

                                          [{"id":"928423187ddebeb8","type":"inject","z":"5191e3c.a1ef01c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"velux:write:id:1","payload":"0","payloadType":"num","x":140,"y":2160,"wires":[["1174c3d4591443f0"]]},{"id":"271ceb4ffe85fc0c","type":"inject","z":"5191e3c.a1ef01c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"velux:write:id:2","payload":"0","payloadType":"num","x":140,"y":2220,"wires":[["1174c3d4591443f0"]]},{"id":"acdfc9e792f998a3","type":"inject","z":"5191e3c.a1ef01c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"velux:write:id:3","payload":"100","payloadType":"num","x":130,"y":2280,"wires":[["1174c3d4591443f0"]]},{"id":"2aad88c9786daebb","type":"inject","z":"5191e3c.a1ef01c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"velux:write:id:4","payload":"50","payloadType":"num","x":130,"y":2340,"wires":[["1174c3d4591443f0"]]},{"id":"1174c3d4591443f0","type":"function","z":"5191e3c.a1ef01c","name":"Befehlsqueue","func":"var queue = context.get('queue') || [];\nvar isError = false;\n\nmsg.OK = msg.OK || false;\n\nif (msg.payload !== undefined) queue.push(msg);\nif (msg.error !== undefined) isError = true;\nif (msg.OK) {\n    // node.warn('msg.OK recieved');\n    queue.shift();\n    // node.warn(queue);\n    isError = false;\n}\ncontext.set('queue',queue);\n\n// if (msg.OK) return null; \n\n// node.warn('isError: ' + isError);\n// node.warn('msg.OK: ' + msg.OK);\n\nif (queue.length > 0 && !isError ) {\n    return [queue[0],null];\n}\n    else if (isError) {\n    return [null,msg];\n}\n    \n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":2240,"wires":[["e373e8c42f89a886","aed24250.60e72"],["9123ef8b7bd2ad6a","56618fd026f5c1b1"]]},{"id":"e373e8c42f89a886","type":"Velux Nodes","z":"5191e3c.a1ef01c","nodevalue":"","topic":"","x":650,"y":2080,"wires":[["6493512466028bf9","7361ce697612a791"]]},{"id":"6493512466028bf9","type":"debug","z":"5191e3c.a1ef01c","name":"Velux Node Simulation","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1280,"y":2080,"wires":[]},{"id":"85ad53e3176273fe","type":"catch","z":"5191e3c.a1ef01c","name":"","scope":["70cf0aeb.94bae4"],"uncaught":false,"x":170,"y":2440,"wires":[["1174c3d4591443f0"]]},{"id":"7361ce697612a791","type":"change","z":"5191e3c.a1ef01c","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"delete","p":"topic","pt":"msg"},{"t":"set","p":"OK","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":890,"y":2240,"wires":[["1174c3d4591443f0","c0a741f73c2a7530"]]},{"id":"56618fd026f5c1b1","type":"debug","z":"5191e3c.a1ef01c","name":"error","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":650,"y":2300,"wires":[]},{"id":"9123ef8b7bd2ad6a","type":"trigger","z":"5191e3c.a1ef01c","name":"","op1":"","op2":"true","op1type":"nul","op2type":"bool","duration":"1","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":670,"y":2360,"wires":[["8ff0b78f263a84ce"]]},{"id":"c0a741f73c2a7530","type":"change","z":"5191e3c.a1ef01c","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":2240,"wires":[["9123ef8b7bd2ad6a"]]},{"id":"8ff0b78f263a84ce","type":"change","z":"5191e3c.a1ef01c","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"delete","p":"topic","pt":"msg"},{"t":"delete","p":"error","pt":"msg"},{"t":"set","p":"OK","pt":"msg","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":2420,"wires":[["1174c3d4591443f0"]]},{"id":"3e49536e2c3f9b25","type":"group","z":"5191e3c.a1ef01c","name":"Simuliere VeluxNode","style":{"label":true,"color":"#000000","fill":"#3f93cf"},"nodes":["aed24250.60e72","70cf0aeb.94bae4"],"x":534,"y":2119,"w":612,"h":82},{"id":"aed24250.60e72","type":"change","z":"5191e3c.a1ef01c","g":"3e49536e2c3f9b25","name":"random 0 bis 1","rules":[{"t":"set","p":"rnd","pt":"msg","to":"$random()\t","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":2160,"wires":[["70cf0aeb.94bae4"]]},{"id":"70cf0aeb.94bae4","type":"function","z":"5191e3c.a1ef01c","g":"3e49536e2c3f9b25","name":"Simuliert Velux Node und erzeugt Zufallsfehler","func":"if (msg.rnd > 0.7) {\n    msg = {};\n    node.error('Error: timeout GW_COMMAND_SEND_CFM',msg);\n    return null;\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":2160,"wires":[["6493512466028bf9","7361ce697612a791"]]}]
                                          

                                          Der untere Teil der function Node (Befehlsqueue) wird also ausgeführt, wenn die Velux Node im Fehlerzustand ist, ansonsten werden die Befehle nacheinander an die Velux Node über den oberen Ausgang der function Node gesendet.

                                          Du kannst natürlich meine ganzen Debug Nachrichten aus der function Node rauslöschen, so dass der reine Code der function Node nun so aussieht:

                                          var queue = context.get('queue') || [];
                                          var isError = false;
                                          msg.OK = msg.OK || false;
                                          
                                          if (msg.payload !== undefined) queue.push(msg);
                                          if (msg.error !== undefined) isError = true;
                                          if (msg.OK) {
                                              queue.shift();
                                              isError = false;
                                          }
                                          context.set('queue',queue);
                                          if (queue.length > 0 && !isError ) {
                                              return [queue[0],null];
                                          }
                                              else if (isError) {
                                              return [null,msg];
                                          }
                                          
                                          S Offline
                                          S Offline
                                          sascho
                                          schrieb am zuletzt editiert von sascho
                                          #90

                                          @mickym

                                          Wow! Jetzt bin ich völlig erschlagen. Ich muss mir das erst mal morgen alles in Ruhe ansehen. Tausend Dank schon mal vorweg! Ich glaube, ich muss Dir mal einen Präsentkorb schicken, bei dem ganzen Aufwand, den Du hier für mich betreibst!

                                          Ich habe gerade das KLR200 in Betrieb genommen, und im KLF200 4 Szenen zu einem Fensterpaar angelernt:
                                          1317055c-0909-4360-894f-0d6f49d76f95-image.png

                                          Mit der Scene Node und einer Inject Node kann ich die 4 Szenen ansteuern. Es funktioniert sehr gut.

                                          69e8da04-755e-4ccc-be3d-9ff02b1d10fe-image.png

                                          b5a7e9da-73a3-4280-95e0-ffd1cf7336c7-image.png

                                          11fce081-f398-4b93-8a33-a37da80817fd-image.png

                                          Die Kür wäre jetzt, wenn ich nur eine Velux Scene Node benötigen würde, indem ich den Szenenindex in der Nachricht mitgebe. Laut diesem Node Guide wäre das doch möglich:
                                          4b49a4be-3579-49f4-aba1-ec6145777089-image.png
                                          Was muss ich denn da im Topic mitgeben? Ich bekomme nur Fehler gerade.

                                          c03983e8-acf3-4f1c-b729-933927580cd8-image.png

                                          Das geht doch in die Richtung, wie Du es oben aufgebaut hast - hinter die Dachfenster Funktionen hängen, die dann die Velux Scene Node anspricht.

                                          Btw. Die Scene Node sendet auch Status Meldungen - einige während die Fenster laufen... Evtl. könnte ich mir da die Current, und Remaining/Run Status Meldungen abfangen und so auf die Velux Nodes komplett verzichten :-)

                                          e1e6cb95-d55c-4431-8efa-9be667492765-image.png

                                          mickymM 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

                                          641

                                          Online

                                          32.7k

                                          Benutzer

                                          82.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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