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.
    • M
      martin last edited by

      Hallo!
      Ich nutze Xiaomi Temperatur-Sensoren im Außenbereich.
      Jetzt möchte ich gerne ein Skript erstellen, das ermittelt was der Min und Max-Wert der letzten 24 Stunden war.
      Also nicht von 24 - 24 Uhr, sondern immer aktuell 24 Stunden zurück.
      Wie gehe ich das an?

      paul53 mickym 2 Replies Last reply Reply Quote 0
      • 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

                          895
                          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