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. Hilfe bei debuggen einer übernommenen Funktion

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Hilfe bei debuggen einer übernommenen Funktion

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      BF0911 @mickym last edited by

      @mickym

      Ich hab mal wieder eine neue Idee, wo ich nicht so reicht weiß, wie man das sinnvoll umsetzt.

      Ich möchte, dass die Dosierpumpen-Logik erst 15 oder 30 Minuten nach Start der Filterpumpe starten.

      Das Delay-Node verzögert ja jede Nachricht um die entsprechende Zeit. Der UI-Scheduler schickt alle 30 Sekunden ein True oder False. Für mein Verständnis würde ja dann jedes true verzögert werden, was nicht gewünscht ist.

      Jetzt hatte ich testweise mal ein Filter-Node vor dem Delay gesetzt. In meiner Testumgebung mit Inject-Node, kam nur ein True an, bis ich halt ein false schicke. Soweit so richtig.

      Nun, ist die Frage, der Ui-Scheduler schickt ein "true" zum Start und triggern der einzelnen iobroker-get-Nodes. Diese werden dann aber durch den Filter dann erst wieder aktualisiert, wenn ein false kommt richtig? Und nicht wie bisher alle 30 SEkunden.

      Lange Rede, kurzer Sinn, bin ich auf dem richtigen WEg oder total falsch?

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

        @bf0911 Wenn Du das nicht mehr willst, dass der UI-Scheduler alle 30s sendet - dann brauchen wir auch keinen Filter Node für die Filterpumpe und den Rest der Pumpen - dann gewöhnen wir dem UI- Scheduler das Senden alle 30 s ab, in dem wir impliziert den Filter anwenden.

        0ad2c63e-2667-4b99-8ebe-e4ecaa089e27-image.png

        Sprich damit gewöhnen wir der UI-Scheduler Node generell ab, dass sie im Intervall sendet. Nun kommen nur noch Signale wenn der Zeitplan sich ändert. Diese Überpfügung alle 30 s kann man sich dann auch sparen und würde wieder auf default von 60s gehen, da Dich ja nur noch Änderungen interessieren.

        Wenn du dass nun willst, das nur nach einem Aktivierungssignal nach 15 oder 30 Minuten der Flow für die Dosierpumpenlogik losläuft, dann nutze wieder eine Trigger Node.

        Diese Trigger Node übernimmt vollständig das triggern der Dosierpumpen:

        b8a5fb9c-e8b6-41eb-b639-678a43484b22-image.png

        Immer versuchen den Flow so einfach wie möglich zu halten, um die Transparenz zu erhalten. Hier mal die veränderten Nodes zum Import:

        [
           {
               "id": "678c75e771b741cf",
               "type": "ui_time_scheduler",
               "z": "d25606275138920f",
               "group": "3979c1d87146b072",
               "name": "",
               "startDay": 0,
               "refresh": "30",
               "devices": [
                   "Filter-Pumpe"
               ],
               "singleOff": false,
               "onlySendChange": true,
               "customPayload": false,
               "eventMode": false,
               "eventOptions": [],
               "sendTopic": false,
               "lat": "",
               "lon": "",
               "customContextStore": "",
               "outputs": 2,
               "order": 1,
               "width": 0,
               "height": 0,
               "x": 130,
               "y": 1900,
               "wires": [
                   [
                       "734dada8a6cc2f4e"
                   ],
                   [
                       "51faf2b5bfa34119"
                   ]
               ]
           },
           {
               "id": "51faf2b5bfa34119",
               "type": "switch",
               "z": "d25606275138920f",
               "name": "Pumpenautomatik aktiv?",
               "property": "Pumpenautomatik",
               "propertyType": "flow",
               "rules": [
                   {
                       "t": "true"
                   }
               ],
               "checkall": "true",
               "repair": false,
               "outputs": 1,
               "x": 370,
               "y": 2100,
               "wires": [
                   [
                       "bf1b3cdd0ebcbe1f",
                       "10db98b5762e33d9"
                   ]
               ]
           },
           {
               "id": "10db98b5762e33d9",
               "type": "trigger",
               "z": "d25606275138920f",
               "name": "",
               "op1": "",
               "op2": "true",
               "op1type": "nul",
               "op2type": "bool",
               "duration": "30",
               "extend": false,
               "overrideDelay": false,
               "units": "min",
               "reset": "false",
               "bytopic": "all",
               "topic": "topic",
               "outputs": 1,
               "x": 620,
               "y": 2460,
               "wires": [
                   [
                       "1371455361c75baf",
                       "083d7a431bf1c459"
                   ]
               ]
           },
           {
               "id": "083d7a431bf1c459",
               "type": "debug",
               "z": "d25606275138920f",
               "name": "Starte Dosierpumpen",
               "active": true,
               "tosidebar": true,
               "console": false,
               "tostatus": false,
               "complete": "payload",
               "targetType": "msg",
               "statusVal": "",
               "statusType": "auto",
               "x": 880,
               "y": 2400,
               "wires": []
           },
           {
               "id": "3979c1d87146b072",
               "type": "ui_group",
               "name": "Scheduler",
               "tab": "5fb772105c6cc8b7",
               "order": 2,
               "disp": true,
               "width": "6",
               "collapse": false,
               "className": ""
           },
           {
               "id": "5fb772105c6cc8b7",
               "type": "ui_tab",
               "name": "Home",
               "icon": "dashboard",
               "disabled": false,
               "hidden": false
           }
        ]
        

        Da die trigger Node parallel für die Dosierpumpen genutzt wird, wird das triggern der Filter-Pumpe nicht verzögert.

        Die trigger Node ist auch so definiert, wenn die Filterpumpen ausschalten, kommt ein false Signal, was den Trigger wieder zurücksetzt, sodass auch nicht 20 Minuten nach dem Ausschalten noch ein Einschaltsignal kommt.

        903569c0-1f33-4cca-aba2-ed7f72f39b7d-image.png

        Du kannst zwar nochmals überprüfen, ob die Filterpumpe läuft, aber das sollte nach der Logik ja nicht vorkommen und soweit ich in Erinnerung habe, prüfst Du das ja nochmal mit dem finalen Einschaltsignal.

        B 1 Reply Last reply Reply Quote 0
        • B
          BF0911 @mickym last edited by

          @mickym

          Danke für die Ausführung.

          Mein Flow sieht aktuell so aus:

          Screenshot 2024-05-31 173758.png

          Ich würde den Trigger ja hinter "Durchfluss vorhanden?" setzen.

          Jetzt ist aber noch meine Frage offen, was passiert mit den Iobroker-Get-Nodes, wie "berechneter PH-Wert" oder "Filter-Pumpe", wenn ich den UI-Scheduler nicht mehr als 30 Sekunden aktualisieren lasse?

          Dann würden die Werte doch nur bei jeder Werte-Änderung (True und False der Filter-Pumpe) aktualisiert oder?

          Das macht natürlich wenig Sinn in so einer Logik.

          Sollte man die Werte-Abfrage separieren und per Inject-Node, z. B. alle 30 SEkunden aktualisieren lassen und diese in Flow-Variablen schreiben lassen?

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

            @bf0911 Nun ja ich denke, Du durchblickst das ja nun selbst nach Deinen Bedürfnissen. .

            Ich würde den Trigger ja hinter "Durchfluss vorhanden?" setzen.

            Ja wenn du den Scheduler so lässt, wie er ist, dann steuerst Du mit und ohne filter Node, ob alle 30s überprüft wird oder nur einmal.

            Jetzt ist aber noch meine Frage offen, was passiert mit den Iobroker-Get-Nodes, wie "berechneter PH-Wert" oder "Filter-Pumpe", wenn ich den UI-Scheduler nicht mehr als 30 Sekunden aktualisieren lasse?

            ja

            Dann würden die Werte doch nur bei jeder Werte-Änderung (True und False der Filter-Pumpe) aktualisiert oder?

            ja

            Sollte man die Werte-Abfrage separieren und per Inject-Node, z. B. alle 30 SEkunden aktualisieren lassen und diese in Flow-Variablen schreiben lassen?

            Kann man machen. Man kann aber auch, wenn die Pumpenautomatik aktiv ist, eine Triggernode alle 30 s triggern lassen.

            Insgesamt glaube ich aber, dass Du das alles nun sehr gut verstanden hast und die Möglichkeiten nach Deinen Bedürnissen anzupassen.

            B 1 Reply Last reply Reply Quote 0
            • B
              BF0911 @mickym last edited by

              Ich hab nochmal eine eher allgemeinere Frage.

              Wir fällt des öftern auf, dass sie die Einstellungen auf dem Dashboard auf "default" setzen.

              Womit kann das zusammenhängen?

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

                @bf0911 Keine Ahnung. Wo mache ich das denn?

                B 1 Reply Last reply Reply Quote 0
                • B
                  BF0911 @mickym last edited by

                  @mickym

                  Das wird meines Erachtens gar nicht gemacht, also irgendwelche Werte auf Default gesetzt.

                  Ich habe das Gefühl, dass sich das Dashboard die Werte nicht merkt bzw. die nicht mir mit dem Json übereinstimmt

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

                    @bf0911 sagte in Hilfe bei debuggen einer übernommenen Funktion:

                    @mickym

                    Das wird meines Erachtens gar nicht gemacht, also irgendwelche Werte auf Default gesetzt.

                    Ich habe das Gefühl, dass sich das Dashboard die Werte nicht merkt bzw. die nicht mir mit dem Json übereinstimmt

                    Ja das ist richtig. Das Dashboard zeigt nur an und hat auch nicht die Aufgabe sich irgendwas zu merken. Es ist Deine Aufgabe ggf. Werte zu speichern und bei einem Neustart von NodeRed die Werte wieder entsprechend zu initialisieren. Zum Speichern von Werten kannst Du ja entweder mqtt nehmen oder Datenpunkte im iobroker unter 0_userdata.0 erstellen.

                    Wobei ich bei dem Thema Hausautomation lieber bevorzuge aktuelle Werte zu haben und ggf. lieber die Dinge nicht initialisiert habe und weiß, dass sie aktuell sind. Aber das muss man von Fall zu Fall entscheiden.

                    Wenn Du aber zum Beispiel Deinen ui_scheduler nimmst, solltest Du bei jeder Änderungen im Dashboard Dir die Zeitpläne abspeichern und dann beim Neustart wieder einlesen. Deswegen hat der ui_scheduler ja auch einen Eingang.

                    Hier einfach mal die Hilfe zu der Node lesen:
                    aae7f160-b0ef-4c3f-a9f7-6846353c639e-image.png

                    Angeblich kann man zwar mit dem neuen Adapter ab 5.2 auf localfilesystem umstellen, aber ich hab das nicht gefunden. Deshalb bleibt das alles nur im Arbeitsspeicher und ist nach Neustart von NodeRed wieder weg. Wie gesagt, musst Du selbst dafür sorgen, ggf. die Zeitpläne in einem Datenpunkt abzuspeichern, dann bei Neustart wieder einzulesen und in den ui_scheduler einzuspeisen.

                    B 1 Reply Last reply Reply Quote 0
                    • B
                      BF0911 @mickym last edited by

                      @mickym

                      Entweder habe ich dich bzw. deine Antwort nicht ganz verstanden oder das Problem ist hier ein anderes.

                      Anbei drei Screenshots.

                      Zwei zeigen, das Dashboard, was sich willkürlich auf "Default" gesetzt hat.

                      Im Flow ist aber aus meiner Sicht, genau das, was du vorgeschlagen hast, bereits realisiert.

                      Es wird das "Objekt" Chlor-Parameter eingelesen und wenn dann über das Dashboard was geändert wurde, wieder in das Objekt geschrieben.

                      Die Werte im Objekt bleiben so, wie eingestellt, auch wenn das Dashboard sich auf "default" stellt.

                      z. B. der Redox-Grenzwert steht im Objekt auf 790 (gewünschte Einstellung) im Dashboard aber auf 750.

                      Ich hoffe, du verstehst was ich meine bzw. aus deiner Antwort verstanden habe.
                      Screenshot_20240829_160954_Chrome.jpg Screenshot_20240829_160947_Chrome.jpg Screenshot 2024-08-30 093415.png

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

                        @bf0911 Also ich kann Dir nur sagen, dass sich das Dashboard von sich aus nichts merkt. Wie gesagt werden die Defaultwerte nur gesetzt, wenn Du

                        1. Alle Flows neustartest
                        2. Den Adapter oder iobroker neu startest.

                        Wenn in den Objekten alles richtig ist, dann lies die halt beim Start von NodeRed ein.

                        So was sieht mir danach aus, als ob beim Start undefinierte Werte vorliegen.

                        6a0f302b-aa19-4aa2-988e-49e41027bdb8-image.png

                        Schau mal, ob Du beim Start von NodeRed das Objekt auch einliest.

                        4083a4cc-2294-4f3b-8955-bb79e4dddd60-image.png

                        Ansonsten musst Du schauen, woher die Werte kommen und wann das auftritt. Das Dashboard setzt sich nur bei Neustart oder beim Zurücksetzen aller Flows zurück.
                        Also Flows neustarten setzt auch das Dashboard zurück:

                        71038981-26b9-4252-bc4f-80c9b26745fa-image.png

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        513
                        Online

                        31.6k
                        Users

                        79.6k
                        Topics

                        1.3m
                        Posts

                        2
                        157
                        9072
                        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