Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. shelly Status zur Fallunterscheidung nutzen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    shelly Status zur Fallunterscheidung nutzen

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

      Als erstes nehme ich mal diese 3. Ausgabe aus - das soll wohl eine Anzeige sein, die ist aber nicht definiert und gesetzt:

      7f3902ca-6bee-4d12-b727-84930b05683e-image.png

      Ich geh mal davon aus, dass es LED2 heißen soll. Und hab die Ausgabe mal so geändert:

      return [msg.payload2,LED1,LED2];
      

      Ansonsten kann ich Deinen Fehler nachvollziehen:
      b9304c98-faa2-44c7-991e-5f8378fb41d7-image.png

      So UND nun komme ich zu dem Punkt - warum DU function Nodes VERMEIDEN sollst, wo es geht. Du kannst keine Debug NOdes ansetzen und musst nun im Code suchen. Schöner wäre es doch in einem Flow zu suchen. Wir sollten - ABER NUR WENN DU Lust hast - im letzten Schritt Deine function Node durch einen schönen Flow ersetzen, was meinst Du?

      Aber als erstes suchen wir wo der Fehler auftritt.

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

        Stimmt, die Variable "statusrel0" war ein Debug-Versuch von mir, die hatte ich anstelle einer LED genutzt. Mir wäre es auch sehr lieb, wenn ich die Fallunterscheidungen ohne Programmcode machen könnte, schliesslich war es genau das was ich an Node-Red so gut finde. Die function node war dann eher ein Behelf, da ich keine Idee hat die Unterscheidung mit nodes zu machen. Man fällt irgendwie in die Programmierübungen aus der Schulzeit zurück 😉

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

          @rudi-3 sagte in shelly Status zur Fallunterscheidung nutzen:

          Stimmt, die Variable "statusrel0" war ein Debug-Versuch von mir, die hatte ich anstelle einer LED genutzt. Mir wäre es auch sehr lieb, wenn ich die Fallunterscheidungen ohne Programmcode machen könnte, schliesslich war es genau das was ich an Node-Red so gut finde. Die function node war dann eher ein Behelf, da ich keine Idee hat die Unterscheidung mit nodes zu machen. Man fällt irgendwie in die Programmierübungen aus der Schulzeit zurück 😉

          Na wenn das so ist, dann stecke ich in die function Node keine Energie mehr rein - wollen wir den unteren Teil dann gleich neu machen?

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

            Eine Verständnisfrage zwischendurch. Ich habe testweise nach Deinem Vorbild eine change-node genommen um aus der Payload vom shelly-relays einen Teil zu extrahieren. Dabei kam aber wieder das ganze Nachrichtenobjekt raus. Warum ist das so?
            shelly2.PNG

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

              Wenn's in der function node für mich was zu lernen gibt, wäre es zumindest interessant. Aber wenn ich nur mit nodes arbeiten kann, bin ich auch schon happy

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

                @rudi-3 sagte in shelly Status zur Fallunterscheidung nutzen:

                Eine Verständnisfrage zwischendurch. Ich habe testweise nach Deinem Vorbild eine change-node genommen um aus der Payload vom shelly-relays einen Teil zu extrahieren. Dabei kam aber wieder das ganze Nachrichtenobjekt raus. Warum ist das so?
                shelly2.PNG

                Vielleicht ein Syntax- Leerzeichen oder irgendwas - was ich so auch nicht sehe. Oder nicht ÜBERNEHMEN geklickt. 😉 Keine Ahnung. Bei mir funktioniert es:
                af04bef3-9d1d-488a-99e1-c238aa13e657-image.png

                Hier der Import:

                [
                   {
                       "id": "b540dd62c4b7bb4b",
                       "type": "inject",
                       "z": "a3ff42d9e3f31af7",
                       "name": "Shelly Input",
                       "props": [
                           {
                               "p": "payload"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "",
                       "payload": "{\"status\":{\"wifi_sta\":{\"connected\":true,\"ssid\":\"Kellerfritz\",\"ip\":\"192.168.2.196\",\"rssi\":-46},\"cloud\":{\"enabled\":false,\"connected\":false},\"mqtt\":{\"connected\":false},\"time\":\"15:16\",\"serial\":1,\"has_update\":true,\"mac\":\"10521C06EE47\",\"relays\":[{\"ison\":false,\"has_timer\":false,\"overpower\":false,\"overtemperature\":false,\"is_valid\":true},{\"ison\":false,\"has_timer\":false,\"overpower\":false,\"overtemperature\":false,\"is_valid\":true}],\"rollers\":[{\"state\":\"stop\",\"power\":0,\"is_valid\":true,\"safety_switch\":false,\"overtemperature\":false,\"stop_reason\":\"normal\",\"last_direction\":\"stop\",\"current_pos\":101,\"calibrating\":false,\"positioning\":true}],\"meters\":[{\"power\":0,\"is_valid\":true,\"timestamp\":1689347786,\"counters\":[0,0,0],\"total\":0},{\"power\":0,\"is_valid\":true,\"timestamp\":1689347786,\"counters\":[0,0,0],\"total\":0}],\"inputs\":[{\"input\":0},{\"input\":0}],\"temperature\":56.18,\"overtemperature\":false,\"tmp\":{\"tC\":56.18,\"tF\":133.12,\"is_valid\":\"true\"},\"update\":{\"status\":\"pending\",\"has_update\":true,\"new_version\":\"20230503-095750/v1.13.0-g9aed950\",\"old_version\":\"20191217-074901/1047-long-id-for-shelly-devices@ab2bdce7\"},\"ram_total\":49480,\"ram_free\":37016,\"fs_size\":233681,\"fs_free\":157628,\"voltage\":235.06,\"uptime\":6684},\"payload\":{\"relays\":[{\"ison\":false,\"has_timer\":false,\"overpower\":false,\"overtemperature\":false,\"is_valid\":true},{\"ison\":false,\"has_timer\":false,\"overpower\":false,\"overtemperature\":false,\"is_valid\":true}],\"rollers\":[{\"state\":\"stop\",\"power\":0,\"is_valid\":true,\"safety_switch\":false,\"overtemperature\":false,\"stop_reason\":\"normal\",\"last_direction\":\"stop\",\"current_pos\":101,\"calibrating\":false,\"positioning\":true}],\"meters\":[{\"power\":0,\"is_valid\":true,\"timestamp\":1689347786,\"counters\":[0,0,0],\"total\":0},{\"power\":0,\"is_valid\":true,\"timestamp\":1689347786,\"counters\":[0,0,0],\"total\":0}],\"inputs\":[{\"input\":0},{\"input\":0}],\"tmp\":{\"tC\":56.18,\"tF\":133.12,\"is_valid\":\"true\"}},\"_msgid\":\"9bd7710f1fddad89\"}",
                       "payloadType": "json",
                       "x": 210,
                       "y": 1040,
                       "wires": [
                           [
                               "326d78cdf99b0b69",
                               "d5a4defd13b3e3cf"
                           ]
                       ]
                   },
                   {
                       "id": "84167164063b10b2",
                       "type": "debug",
                       "z": "a3ff42d9e3f31af7",
                       "name": "ison?",
                       "active": true,
                       "tosidebar": true,
                       "console": false,
                       "tostatus": false,
                       "complete": "payload",
                       "targetType": "msg",
                       "statusVal": "",
                       "statusType": "auto",
                       "x": 590,
                       "y": 1040,
                       "wires": []
                   },
                   {
                       "id": "326d78cdf99b0b69",
                       "type": "change",
                       "z": "a3ff42d9e3f31af7",
                       "name": "",
                       "rules": [
                           {
                               "t": "set",
                               "p": "payload",
                               "pt": "msg",
                               "to": "payload.payload.relays[0].ison",
                               "tot": "jsonata"
                           }
                       ],
                       "action": "",
                       "property": "",
                       "from": "",
                       "to": "",
                       "reg": false,
                       "x": 410,
                       "y": 1040,
                       "wires": [
                           [
                               "84167164063b10b2"
                           ]
                       ]
                   },
                   {
                       "id": "d5a4defd13b3e3cf",
                       "type": "debug",
                       "z": "a3ff42d9e3f31af7",
                       "name": "Komplett",
                       "active": true,
                       "tosidebar": true,
                       "console": false,
                       "tostatus": false,
                       "complete": "payload",
                       "targetType": "msg",
                       "statusVal": "",
                       "statusType": "auto",
                       "x": 400,
                       "y": 980,
                       "wires": []
                   }
                ]
                

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

                  Bei mir jetzt auch. Um meine Erkenntnis für die Nachwelt zu beschreiben: Ich hatte es erst im Originalflow versucht, da ging es nicht. Dann habe ich den neuen Teil in einen neuen Flow kopiert und jetzt geht's.

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

                    So ich kann Deinen Fehler nachvollziehen - hatte dann aber nur die Blocks etwas auseinandergezogen und da war der Fehler komischerweise kurz weg.

                    Also um es kurz zu machen, was definitiv falsch ist, sind Deine Ausgaben. Keine dieser 3 variablen sind definiert.

                    Alles was innerhalb von geschweiften Klammern definiert wird, hat auch nur Gültigkeit innerhalb dieser geschweiften Klammern. Und msg.payload2 ist ein Objekt das gar nicht definiert ist. Wenn Du das alles zum Schluss ausgeben willst, dann musst Du auch alles am Anfang definieren.

                    ed357b39-3773-407e-8dbc-9c2928c131a5-image.png

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

                      Ich hätte also die Ausgaben direkt in die IF-Blöcke packen müssen / können? Heute habe ich eine steile Lernkurve 😉

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

                        @rudi-3 Nein die Variablen LED1 und LED2 vor den IF Abfragen definieren.

                        Dann machst Du Vergleiche - obwohl Dein Kontext gar nicht initialisiert ist, wenn Du das Dashboard nicht vorher betätigt hast:

                        f2b0f60f-0f0a-4e13-8884-f2103846da58-image.png

                        Prüfe also zu jeder Zeit - Deine Kontextdaten und initialisiere die Werte auch bevor Du irgendwas im Dashboard gesetzt hast.

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

                          Desweiteren wenn Du schon function NOde nimmst, dann musst Du darauf achten, dass Du alle Fälle berücksichtigst:

                          541b615d-da0d-4e97-8cf4-c598f741007e-image.png

                          Mit so vielen unterschiedlichen Parametern, ein, aus, und Summe sind da glaub 12 Fälle. Was machst Du denn wenn summe < ein ist - dann passiert gar nichts.

                          Mit node.warn kannst Du überprüfen, ob was gesetzt ist.

                          cf6e881f-469d-4812-8596-a65d39e0bbca-image.png

                          Du siehst es ist alles undefined - ja wenn kein Fall eintritt - ist es empty weil wir gesetzt haben oder undefined.

                          Auch so was ist Käse:

                          c3b8c98a-8b62-4fc2-bf28-e541a6fadfae-image.png

                          1. Definierst Du ein Objekt im luftleeren Raum - wenn das ausgegeben werden soll, dann musst Du ein msg Objekt definieren.
                            364a0ded-1136-4de7-9d7a-352ba7e420c0-image.png

                          Dein Objekt kommt nie und nimmer an.

                          1. Du musst doch IMMER - wenn Du alles AUSGIBST auch alle Ausgaben definieren oder Du setzt diese auf null. Korrigiere ich noch. Aber Du musst auch den 2. Ausgang definieren - entweder für alles oder in jedem Ast.
                          R 2 Replies Last reply Reply Quote 0
                          • R
                            Rudi 3 @mickym last edited by

                            Node warn kannte ich noch nicht. Nützliches Ding. Bezüglich der Fälle kommen in der Praxis nicht so viele vor. Wichtig ist mir, das ich die Relais gestuft schalten kann. Etwas tricky ist, das sich der PV-Überschuss in dem Moment kleiner wird, in dem man den Heizstab zuschalten. Ich muss also später noch eine Hystere dazunehmen, sonst schwingt das ganze Werk wild.

                            mickym 2 Replies Last reply Reply Quote 0
                            • mickym
                              mickym Most Active @Rudi 3 last edited by

                              @rudi-3 sagte in shelly Status zur Fallunterscheidung nutzen:

                              Node warn kannte ich noch nicht. Nützliches Ding. Bezüglich der Fälle kommen in der Praxis nicht so viele vor. Wichtig ist mir, das ich die Relais gestuft schalten kann. Etwas tricky ist, das sich der PV-Überschuss in dem Moment kleiner wird, in dem man den Heizstab zuschalten. Ich muss also später noch eine Hystere dazunehmen, sonst schwingt das ganze Werk wild.

                              Gut - also eigentlich will ich nun nicht die ganze function Node umschreiben - es gäbe noch 1000 Dinge zu sagen - wollen wir ohne weiter machen?

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

                                Da kommt doch einiges zusammen, das ich erstmal durcharbeiten muss.... Da wird das Wochenende wohl etwas knapp.

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

                                  @rudi-3 sagte in shelly Status zur Fallunterscheidung nutzen:

                                  Da kommt doch einiges zusammen, das ich erstmal durcharbeiten muss.... Da wird das Wochenende wohl etwas knapp.

                                  Also ohne function Node?

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

                                    @mickym dann versuchen wir es lieber ohne function node. Das hebe ich mir für später auf.

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

                                      @rudi-3 sagte in shelly Status zur Fallunterscheidung nutzen:

                                      @mickym dann versuchen wir es lieber ohne function node. Das hebe ich mir für später auf.

                                      Ja und nochmal - wenn Du programmierst machst Du dir soviel kaputt - deswegen nur wenn es gar nicht anders geht.

                                      Als erstes werden wir - da wir ja keine function Node mehr benutzen - Deine ganzen Parameter im flow Kontext speichern.

                                      Man kann mit einer Inject Node - die beim Start ausgeführt wird - alle Parameter auch mit 0 initialisieren.
                                      e1d61512-683d-4a79-b81f-67e05cbee532-image.png

                                      Trigger wird ja der Shelly sein. 😉

                                      Da das Setzen der parameter unabhängig von den Shellies ist holen wir uns nun den ganzen FlowKontext rein. Ich ändere das oben nochmal in den ich nicht 3 einzelne Werte nehmen, sondern ein Objekt dann ist das einfacher. Ich nenne das Objekt mal EnergieManagement.

                                      Das Ganze sieht dann so aus:

                                      602d33bc-e545-4033-9b26-3f9ed5588294-image.png

                                      Wenn der Shelly dann triggert, dann lesen wir das ganze Objekt EnergieManagement in unser Nachrichtenobjekt ein.

                                      2036d469-106d-4382-8f8b-286ecd4c86b1-image.png

                                      Wir haben dazu in das Nachrichtenobjekt eine eigene Eigenschaft EnergieManagement aufgenommen und haben das nun überall in unserem Nachrichtenobjekt jederzeitverfügbar - zusammen mit der Shelly payload.

                                      bfd95d73-ebf9-4e77-96ab-1b903324d8dd-image.png

                                      So nun versuche ich mich an Deine Logik von der function Node zu orientieren - wobei

                                      b4dc9f55-8619-4be7-8b46-898a83f171e1-image.png

                                      sowas Käse ist (relais1 = relais[0].ison und wird ja auf true überprüft.

                                      Sowas ist auch UNLOGISCH:

                                      6ccc8e9f-144b-45ab-9e9f-810fdd5c0ab1-image.png

                                      Das sind haargenau die gleichen Bedingungen und werden beide ausgeführt - im Code wird also der grüne Bereich NIE eintreten, weil er durch den roten Code überschrieben wird. Das ist auch überflüssig - da ja theoretisch das Relais 1 schon eingeschaltet ist.

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

                                        @mickym stimmt, im Code ist's falsch im Kommentar steht drin wie es sein soll. muss ich beim rumprobieren ver... haben.

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

                                          @rudi-3 sagte in shelly Status zur Fallunterscheidung nutzen:

                                          Ich muss also später noch eine Hystere dazunehmen, sonst schwingt das ganze Werk wild.

                                          Die Hysterese hast Du ja in dem Du eine Ein- und Ausschwelle hast.

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

                                            An Deiner Stelle versteh ich auch nicht, warum du die Summe mit einem Slider setzt - macht es nicht Sinn, dass die Summe automatisch festgelegt wird - z.Bsp. durch den oberen Teil.

                                            435dabf8-141b-4f7a-95ac-da4d40ad39ef-image.png

                                            Musst Du aber wissen.

                                            R 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.0k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            38
                                            1152
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo