Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. {Frage] Erkennen der Geschwindigkeit einer Temperaturänderung

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    823

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

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

{Frage] Erkennen der Geschwindigkeit einer Temperaturänderung

Scheduled Pinned Locked Moved Skripten / Logik
19 Posts 4 Posters 1.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Online
    L Online
    Linedancer
    wrote on last edited by
    #1

    Hallo Gemeinde,

    ich benötige mal ein Schubs in die richtige Richtung für ein neues Script (vorzugsweise Blockly, aber mit Javascript komme ich wenns sein muss auch irgendwie hin).

    Aufgabe:

    Es soll erkannt werden wie schnell eine Temperatur steigt. Wenn die Änderung schnell genug erfolgt wird ein Aktor geschaltet.

    Anwendung:

    Ich habe mittlerweile einen Temperaturfühler am Warmwasser Ausgang des Trinkwasser Speichers und möchte bedarfsgesteuert die Zirkulationspumpe einschalten.

    so sieht das Sensorsignal aus:
    1564_2018-02-21.png

    Der Ansatz alle 5 Sekunden die aktuelle Temperatur mit der vor 5 Sekunden gespeicherten zu vergleichen kann ja nicht zielführend sein. Ein sinnvoller Ansatz fällt mir leider nicht ein.

    Vielleicht gibt's ja hier Ideen. Ich sag schonmal Danke

    –

    Ciao, Gerhard

    1 Reply Last reply
    0
    • AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      wrote on last edited by
      #2

      @Linedancer:

      Der Ansatz alle 5 Sekunden die aktuelle Temperatur mit der vor 5 Sekunden gespeicherten zu vergleichen kann ja nicht zielführend sein. Ein sinnvoller Ansatz fällt mir leider nicht ein. `
      Aber (fast) genau so funktioniert numerische Differentiation:

      Geschwindigkeit = [Wert(jetzt) - Wert(vorher)] / [Zeit(jetzt) - Zeit(vorher)]
      

      Wenn du etwas weniger Schwankungen haben willst, kannst du die Werte über einen größeren Zeitraum vergleichen.

      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

      1 Reply Last reply
      0
      • L Online
        L Online
        Linedancer
        wrote on last edited by
        #3

        Das man das so machen kann ist mir schon klar und so ein Script bekomme ich auch hin, aber ist so ein Script das alle 5s läuft nicht zu Ressourcen fressend? In meinem fall würde der Javascript Adapter, der dafür zuständig wäre, auf eine Synology Disk Station im Docker Container laufen.

        –

        Ciao, Gerhard

        1 Reply Last reply
        0
        • AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          wrote on last edited by
          #4

          @Linedancer:

          ein Script das alle 5s läuft nicht zu Ressourcen fressend? `
          Nee, da mach dir mal keine Sorgen. Wenn es wirklich nur 1 Wert aus 4 berechnet, ist das kein Thema.

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          1 Reply Last reply
          0
          • L Online
            L Online
            Linedancer
            wrote on last edited by
            #5

            Na dann werd ich mal los legen.

            –

            Ciao, Gerhard

            1 Reply Last reply
            0
            • paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #6

              Vorschlag:

              const idTemp = '...';
              
              on(idTemp, function(dp) {  // Triggern bei Wertänderung
                 var speed = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc);  // K/min
              });
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Reply Last reply
              0
              • AlCalzoneA Offline
                AlCalzoneA Offline
                AlCalzone
                Developer
                wrote on last edited by
                #7

                @paul53:

                Vorschlag:

                const idTemp = '...';
                
                on(idTemp, function(dp) {  // Triggern bei Wertänderung
                   var speed = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc);  // K/min
                });
                ```` `  
                

                Sollte das nicht ts sein statt lc?

                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                1 Reply Last reply
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by
                  #8

                  @AlCalzone:

                  Sollte das nicht ts sein statt lc? `
                  Nein, denn es wird auf Wertänderung getriggert. Da z.B. HM-Sensoren ihren Wert auch ohne Wertänderung aktualisieren, kann ein dp.oldState.ts zu jung sein (ist nicht an eine Wertänderung gebunden).

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    pix
                    wrote on last edited by
                    #9

                    Hallo,

                    hier sind ja die Parameter für die on-Subscriptions aufgelistet: https://github.com/ioBroker/ioBroker.ja ... some-state

                    Aus "change" und "valGt" dem Operator "and" müsste sich was basteln lassen, das im Fall eines schnellen Anstiegs die Funktion ausführt.

                    Leider habe ich gerade keine Kapazitäten das selbst zu testen (Kinderbetreuung parallel).

                    Gruß

                    Pix

                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                    1 Reply Last reply
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by
                      #10

                      @pix:

                      Aus "change" und "valGt" dem Operator "and" müsste sich was basteln lassen, das im Fall eines schnellen Anstiegs die Funktion ausführt. `
                      Nein, das geht nicht. Die Abhängigkeit von der Änderungsgeschwindigkeit erfordert eine Division dWert/dt.

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      1 Reply Last reply
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        wrote on last edited by
                        #11

                        @Linedancer:

                        Wenn die Änderung schnell genug erfolgt wird ein Aktor geschaltet. `
                        Erweiterung des Skriptes um den Aktor.

                        const idTemp = '...';
                        const idAktor = '...';
                        const gw = 2;  // Grenzwert in K/min
                        
                        var aktor = getState(idAktor).val;
                        var timer = null;
                        
                        on(idTemp, function(dp) {  // Triggern bei Wertänderung
                           var speed = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc);  // K/min
                           if(speed >= gw) {
                              if(!aktor) setState(idAktor,true);
                              clearTimeout(timer);
                              timer = setTimeout(function() {
                                 if(aktor) setState(idAktor, false);
                              }, 120000); // 2 Minuten
                           }   
                        });
                        
                        on({id: idAktor, ack: true}, function(dp) {
                           aktor = dp.state.val;
                        });
                        

                        EDIT: Um Auschalten nach 2 Minuten ergänzt.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Reply Last reply
                        0
                        • AlCalzoneA Offline
                          AlCalzoneA Offline
                          AlCalzone
                          Developer
                          wrote on last edited by
                          #12

                          @paul53:

                          Nein, denn es wird auf Wertänderung getriggert. Da z.B. HM-Sensoren ihren Wert auch ohne Wertänderung aktualisieren, kann ein dp.oldState.ts zu jung sein (ist nicht an eine Wertänderung gebunden). `
                          Ok, dann sollte es wahrscheinlich keinen Unterschied machen. Wenn ich im stationären Zustand bin (d.h. keine Wertänderung auftritt), ist die Differenz im Zähler eh 0, egal ob man im Nenner jetzt ts oder lc verwendet.

                          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                          1 Reply Last reply
                          0
                          • paul53P Offline
                            paul53P Offline
                            paul53
                            wrote on last edited by
                            #13

                            @AlCalzone:

                            dann sollte es wahrscheinlich keinen Unterschied machen Doch, macht es. Beispiel: > Wert 20.0 –> 20.1 °C: ts = lc

                            Wert 20.1 °C bleibt 2,5 Minuten später: ts > lc, oldts = oldlc

                            Wert 20.1 --> 20.2 °C weitere 2,5 Minuten später ts = lc, oldts > oldlc

                            speed mit ts: 0,1/2,5

                            speed mit lc: 0,1/5,0 ` Bei Verwendung von ts kann eine zu hohe Änderungsgeschwindigkeit berechnet werden.

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Reply Last reply
                            0
                            • P Offline
                              P Offline
                              pix
                              wrote on last edited by
                              #14

                              Wenn ich mir die Kurve des steigenden Wertes ansehe, wird der Abstand zwischen oldState und newState größer. Darauf kann man reagieren.

                              Pix

                              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                              1 Reply Last reply
                              0
                              • L Online
                                L Online
                                Linedancer
                                wrote on last edited by
                                #15

                                Wow, hier ist ja was los

                                Erstmal danke für den Input. Muss erstmal nachlesen, damit ich das alles verstehe…. :?:

                                Da trau ich mich ja fast nicht mein Blockly zu zeigen mit dem ich hier experimentiere.
                                1564_2018-02-21__1_.png

                                Da der Aktor noch nicht existiert hab ich das mal mit einem Datenpunkt nachgebildet. Der Sensor von dem die Temperatur kommt, ist ein One Wire DS18b20

                                der am Raspi im Heizungskeller hängt und alle 10 Sekunden mit dem Parser Adapter ausgelesen wird.

                                Der erste Test mit dem Blockly hat mal nicht soooo schlecht funktioniert, 23 Sekunden nach öffnen des Wasserhahns kam die Telegram message.

                                Jetzt fehlt noch ne Funktion die die Zirkulation nur startet, wenn es auch nötig ist.

                                –

                                Ciao, Gerhard

                                1 Reply Last reply
                                0
                                • AlCalzoneA Offline
                                  AlCalzoneA Offline
                                  AlCalzone
                                  Developer
                                  wrote on last edited by
                                  #16

                                  @paul53:

                                  ` > Wert 20.0 –> 20.1 °C: ts = lc

                                  Wert 20.1 °C bleibt 2,5 Minuten später: ts > lc, oldts = oldlc

                                  Wert 20.1 --> 20.2 °C weitere 2,5 Minuten später ts = lc, oldts > oldlc

                                  speed mit ts: 0,1/2,5

                                  speed mit lc: 0,1/5,0 Bei Verwendung von ts kann eine zu hohe Änderungsgeschwindigkeit berechnet werden.
                                  Okay, du willst auf eine Änderung nach dem stationären Zustand hinaus - macht Sinn. Dennoch stimme ich nicht vollständig zu - die Wahrheit liegt irgendwo in der Mitte:
                                  1097_geschwindigkeit.png
                                  Rot ist die momentane Geschwindigkeit mit ts. Grün ist die Geschwindigkeit, wenn man wie du vorschlägst statt ts lc verwendet. Mmn ist die im vorliegenden Fall zu gering. Gelb wäre vermutlich die "wahre" Geschwindigkeit.

                                  Im Prinzip haben wir hier nur die Stützstellen-Distanz verändert. Welche sinnvoll ist, hängt stark vom Verlauf und der zeitlichen Auflösung ab.

                                  Das war auch das was ich vorhin meinte:
                                  > Wenn du etwas weniger Schwankungen haben willst, kannst du die Werte über einen größeren Zeitraum vergleichen.
                                  Nebeneinanderliegende Datenpunkte führen zu hohen Änderungen in der Ableitung - und damit teils zu hohe oder zu niedrige (bei negativem Trend) Geschwindigkeiten. Je weiter die Datenpunkte auseinanderliegen, desto genauer erfasst du das globale Verhalten, aber umso träger wird es auch.

                                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                  1 Reply Last reply
                                  0
                                  • paul53P Offline
                                    paul53P Offline
                                    paul53
                                    wrote on last edited by
                                    #17

                                    @Linedancer:

                                    alle 10 Sekunden mit dem Parser Adapter ausgelesen wird. `
                                    Diese Information erspart die Division dWert/dt.
                                    @Linedancer:

                                    Jetzt fehlt noch ne Funktion die die Zirkulation nur startet, wenn es auch nötig ist. `
                                    Wann ist es nötig (Definition) ?

                                    Zu dem Blockly Script:

                                    Die Verzögerung (timeout) startet alle 10 s, solange die Temperatur ansteigt. Es wird dabei jedesmal ein neuer Timer erzeugt. Richtig: Die Verzögerung muss auch innerhalb des Bedingungsblocks (neu > alt + 0.3) gestartet und vorher muss der Timer (timeout) <u>gestoppt</u> werden.

                                    Der "Wert vom Objekt WW _Speicher_Auslauf" existiert bereits als lokale Variable value. Der "Wert vom WW_Speicher_Auslauf_aktuell" existiert bereits als lokale Variable oldValue; der 2. Trigger und der zusätzliche Datenpunkt werden also nicht benötigt.

                                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                    1 Reply Last reply
                                    0
                                    • L Online
                                      L Online
                                      Linedancer
                                      wrote on last edited by
                                      #18

                                      @paul53:

                                      Wann ist es nötig (Definition) ? `
                                      Jedwede Zirkulation entläd den Trinkwasserspeicher, deswegen soviel Zirk wie nötig und so wenig wie möglich. Wenn ide Temperatur an den Zapfstellen hoch genug ist muss keine Zirk laufen. Idee ist hier ein Temp Sensor an der höchsten Stelle de Zirkulationsleitung.

                                      @paul53:

                                      Die Verzögerung (timeout) startet alle 10 s, solange die Temperatur ansteigt. Es wird dabei jedesmal ein neuer Timer erzeugt. Richtig: Die Verzögerung muss auch innerhalb des Bedingungsblocks (neu > alt + 0.3) gestartet und vorher muss der Timer (timeout) <u>gestoppt</u> werden. `
                                      Ok, verstanden und umgesetzt.

                                      @paul53:

                                      Der "Wert vom Objekt WW _Speicher_Auslauf" existiert bereits als lokale Variable value. Der "Wert vom WW_Speicher_Auslauf_aktuell" existiert bereits als lokale Variable oldValue; der 2. Trigger und der zusätzliche Datenpunkt werden also nicht benötigt. `
                                      Der zweite Trigger muss den oldValue auch wenn die Zirk nicht aktiv ist (bei fallender Temperatur) aktualisiern, sonst würde er ja bei max stehenbleiben.

                                      –

                                      Ciao, Gerhard

                                      1 Reply Last reply
                                      0
                                      • paul53P Offline
                                        paul53P Offline
                                        paul53
                                        wrote on last edited by paul53
                                        #19

                                        @Linedancer:

                                        Der zweite Trigger muss den oldValue auch wenn die Zirk nicht aktiv ist (bei fallender Temperatur) aktualisiern, sonst würde er ja bei max stehenbleiben.
                                        Nein, oldValue ist eine lokale Variable, die nur innerhalb der Funktion aktualisiert wird mit oldValue = obj.oldState.val. obj.oldState.val gehört zum Zustand eines Datenpunktes und wird durch ioBroker aktualisiert, nicht durch den Trigger.

                                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                        1 Reply Last reply
                                        0

                                        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                        With your input, this post could be even better 💗

                                        Register Login
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        490

                                        Online

                                        32.8k

                                        Users

                                        82.7k

                                        Topics

                                        1.3m

                                        Posts
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Home
                                        • Recent
                                        • Tags
                                        • Unread 0
                                        • Categories
                                        • Unreplied
                                        • Popular
                                        • GitHub
                                        • Docu
                                        • Hilfe