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. Min / Max Wert der letzten 24h

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Min / Max Wert der letzten 24h

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @martin last edited by paul53

      @martin sagte:

      Skript erstellen, das ermittelt was der Min und Max-Wert der letzten 24 Stunden war.

      Siehe hier

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

        @martin Dafür gibt es doch aggregator node. Da ist alles drin, was Du brauchst und ist meines Erachtens auch schon im Standard installiert.

        Oh sorry - dachte Du nutzt NodeRed weil der Thread sich wohl fälschlicherweise in diese Kategorie verirrt hat. Sollte man dann wohl besser verschieben.

        M 1 Reply Last reply Reply Quote 0
        • M
          martin @mickym last edited by

          @mickym Ja, Node-Red habe ich auch im Einsatz.
          Wie wäre hierfür denn der Ansatz? Hast du da was für mich?

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

            @martin sagte in Min / Max Wert der letzten 24h:

            @mickym Ja, Node-Red habe ich auch im Einsatz.
            Wie wäre hierfür denn der Ansatz? Hast du da was für mich?

            Wie gesagt in der aggregator node ist alles drin was Du brauchst. Du nimmst eine node für den Min wert und eine node für den Max wert.

            screen.png

            Du bekommst halt den Wert immer erst nach 24 Stunden und der Zeitpunkt verschiebt sich halt nicht. Wenn Du den Haken bei set incomplete interval setzt - dann geht es genau von 24-24 Uhr. Ansonsten ermittelt er den 24 Stundenwert seit dem die Node gestartet ist. Wenn Du Zwischenergebnisse brauchst kannst Du solche Nodes ja in Serie schalten. Zum Beispiel Min Wert der letzten Stunde und aggregierst die dann im nächsten Node zu einem Tag usw.

            Ansonsten habe ich auch mal eine Function Node gebastelt.,

            Die Lösung mit der Function Node hat den Vorteil, dass Du bei jedem Temperatureingang den bis dahin ermittelten Max- und Min-Wert hast, während Du mit der aggregator node den Max-Wert ist nach Ablauf der Periode (24 Stunden) bekommst.

            Für Steuerung, wo Du anhand der Max/Min Temperatur ist der Aggregator Node ausreichend. Wenn Du die aktuellen Werte immer parat und sichtbar haben willst dann selbst machen.

            Zum Schluß habe ich nochmal die Funktion-Node für Dich gebastelt, die sowohl min und max ausgibt:

            [
                {
                    "id": "e93aaaf0.9de138",
                    "type": "function",
                    "z": "dce8fa20.2e93c8",
                    "name": "Maximum und Minimum",
                    "func": "var cMax = context.get('cMaxTemperature');\nvar cMin = context.get('cMinTemperature');\n\ncurrentTemp=Number(msg.payload);\n\nif (cMax === undefined || cMin === undefined){\n    cMax=currentTemp;\n    cMin=currentTemp;\n    context.set('cMaxTemperature',cMax);\n    context.set('cMinTemperature',cMin);\n}\n\nif (msg.reset){\n    context.set('cMaxTemperature',undefined);\n    context.set('cMinTemperature',undefined);\n    return null;\n}\n\nif (currentTemp > cMax){\n    cMax=currentTemp;\n    context.set('cMaxTemperature',cMax);\n}\n\nif (currentTemp < cMin){\n    cMin=currentTemp;\n    context.set('cMinTemperature',cMin);\n}\n\nmsg.max=cMax;\nmsg.min=cMin;\nmsg.currentTemp=currentTemp;\nreturn msg;",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "x": 970,
                    "y": 1360,
                    "wires": [
                        [
                            "8a022075.8ec6a"
                        ]
                    ]
                },
                {
                    "id": "8a022075.8ec6a",
                    "type": "debug",
                    "z": "dce8fa20.2e93c8",
                    "name": "",
                    "active": true,
                    "tosidebar": true,
                    "console": false,
                    "tostatus": false,
                    "complete": "true",
                    "targetType": "full",
                    "statusVal": "",
                    "statusType": "auto",
                    "x": 1170,
                    "y": 1300,
                    "wires": []
                },
                {
                    "id": "5dec1af2.3695b4",
                    "type": "inject",
                    "z": "dce8fa20.2e93c8",
                    "name": "Reset ",
                    "props": [
                        {
                            "p": "reset",
                            "v": "true",
                            "vt": "bool"
                        }
                    ],
                    "repeat": "3600",
                    "crontab": "",
                    "once": false,
                    "onceDelay": 0.1,
                    "topic": "",
                    "x": 760,
                    "y": 1300,
                    "wires": [
                        [
                            "e93aaaf0.9de138"
                        ]
                    ]
                }
            ]
            
            var cMax = context.get('cMaxTemperature');
            var cMin = context.get('cMinTemperature');
            
            currentTemp=Number(msg.payload);
            
            if (cMax === undefined || cMin === undefined){
                cMax=currentTemp;
                cMin=currentTemp;
                context.set('cMaxTemperature',cMax);
                context.set('cMinTemperature',cMin);
            }
            
            if (msg.reset){
                context.set('cMaxTemperature',undefined);
                context.set('cMinTemperature',undefined);
                return null;
            }
            
            if (currentTemp > cMax){
                cMax=currentTemp;
                context.set('cMaxTemperature',cMax);
            }
            
            if (currentTemp < cMin){
                cMin=currentTemp;
                context.set('cMinTemperature',cMin);
            }
            
            msg.max=cMax;
            msg.min=cMin;
            msg.currentTemp=currentTemp;
            return msg;
            
            

            screen.png

            Mit der Inject-Node bist Du ja flexibel, was die Intervalle oder bestimmte Uhrzeiten betrifft.

            Statt der Inject Node mit der 30 hängst Du natürlich Deine Xiaomi Sensoren dran. 😉

            Ansonsten wenn das dynamisch immer die letzten 24 Std. werden sollen, dann wird das viel komplexer, da Du trotzdem bestimmte Intervalle brauchst - macht aber auch meines Erachtens nicht soviel Sinn. Ob der Zeitraum von 3 Uhr morgens bis 3 morgens am nächsten Tag oder von 12 Uhr morgens ... an 24 Std die Höchst oder Tiefstwerte ausgibt ist doch bei einem Tageszyklus egal, da die Höchst- und Tiefsttemperatur ja nur einmal am Tag erreicht werden.

            M Ralf Lange 2 Replies Last reply Reply Quote 2
            • M
              martin @mickym last edited by

              @mickym Danke. Werde ich mal ausprobieren.

              1 Reply Last reply Reply Quote 0
              • Ralf Lange
                Ralf Lange @mickym last edited by

                @mickym Hi, würdest du mir bitte erklären, wie ich die beiden Schnippsel verwende? Also wie und wo sie verwendet werden?

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

                  @ralf-lange Falls Du die function Node meinst, nun sie gibt Dir den maximalen und minimalen Wert (ich hab Temperatur genommen, aber im Prinzip geht es für alle Zahlenwerte) aus, wenn man mit der aggregator Node und den festen Zeitintervallen nicht zufrieden ist.
                  Zurücksetzen kann man das mit der msg.reset Nachricht die unter über die Inject Node getriggert wird. Dort kannst Du ja auch ein beliebiges Zeitintervall einstellen.

                  Um jedoch immer die letzten x Intervalle zu haben - musst Du etwas Neues machen und ein Array mit festen Zeitabständen - zum Beispiel einer Trigger Node füttern.

                  Wenn Dich das interessiert kann man auch so was machen.

                  Ralf Lange 1 Reply Last reply Reply Quote 0
                  • Ralf Lange
                    Ralf Lange @mickym last edited by

                    @mickym Danke. Aber verstanden hab ich es nicht. Vermutlich bin ich nur zu doof. Ich verstehe nicht, wo die beiden Codeschnipsel verwendet werden. Der obere nummerierte vermutlich im Funktion Node. Der hat aber keinen Rückgabewert.

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

                      @ralf-lange sagte in Min / Max Wert der letzten 24h:

                      Du hast doch das importiert ? oder ?

                      1e2c4b97-6b48-4e2a-960b-db9e018f1449-image.png

                      So - nun musst du vorne irgendwas an die function Node anschließen, was Zahlenwerte liefert. Der Reset Inject Node - dient dazu die Max und Min Werte zurückzusetzen.

                      Sobald Du irgendwas, das Zahlenwerte liefert vorne anschließt, dann gibt Dir die debug Node folgendes aus:

                      ea495700-de6f-4051-91ca-e86307935e7c-image.png

                      Ralf Lange 1 Reply Last reply Reply Quote 0
                      • Ralf Lange
                        Ralf Lange @mickym last edited by Ralf Lange

                        @mickym Okay, ich bin offiziell ein Idiot...

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        874
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        blockly monitoring
                        4
                        11
                        2297
                        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