[Gelöst] Vorletzten Temperaturwert speichern und Differenz ermitteln

Begonnen von NewRasPi, 17 Februar 2019, 22:17:30

Vorheriges Thema - Nächstes Thema

NewRasPi

Hallo FHEM Freunde und Spezialisten
ich bräuchte etwas Hilfe beim gestalten einer Funktion die man mit "Oldvalue" bezeichnen könnte. War das mal eine Funktion die es nicht mehr gibt?
Ziel meines vorhabens ist, auszuwerten ob sich die Temperatur von der letzten Messung (z.B. vor 5 Minuten intervall) zu der aktuellen um mehr
als 5 °C geändert hat um dann eine Warnmeldung auszugeben. Die Meldefunktion selbst geht vermuttlich am besten mit einem DOIF. Hier in diesem Forumsbereich bin ich, weil ich hoffe das mir jemand beim erzeugen des Readings "vorletzte Temperatur" oder gleich "Differenzwert" zur vorherigen Messung. Als Sensoren habe ich die 1wire DS18B20.  Bei Wiki und den einschlägigen Seiten im Netz habe ich leider nichts passendes gefunden.
Vielen Dank für jeden passenden Hinweis.
Schöne Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

Jogi

Meinst so was? Das ist ein DOIF das ich nutze um zu vergleichen ob eine Temperatur sinkt.

(([dummyKaltwasserHeizung] <= OldValue("dummyKaltwasserHeizung")) and ([dummyKaltwasserHeizung]<[Grenzwert_KW_HZ]))
(set TempALKW_Heizung on)
DOELSEIF ([dummyKaltwasserHeizung] > OldValue("dummyKaltwasserHeizung"))
(set TempALKW_Heizung off)


Gruß,
Jogi

CoolTux

Lese Dich in OldReadingsVal ein. Das sollte das sein was Du suchst.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NewRasPi

Hallo CoolTux
Danke für den Tip.
ist dieses Reading noch aktuell?
Ich habe danach gesucht und noch nichts gefunden. - Muss wohl noch mal genauer suchen. Danke


Zitat von: Jogi am 17 Februar 2019, 22:23:06
Meinst so was? Das ist ein DOIF das ich nutze um zu vergleichen ob eine Temperatur sinkt.

(([dummyKaltwasserHeizung] <= OldValue("dummyKaltwasserHeizung")) and ([dummyKaltwasserHeizung]<[Grenzwert_KW_HZ]))
(set TempALKW_Heizung on)
DOELSEIF ([dummyKaltwasserHeizung] > OldValue("dummyKaltwasserHeizung"))
(set TempALKW_Heizung off)


Gruß,
Jogi

Hallo Jogi
diesen Thread hatte ich gelesen. Ich dachte aber das da die Lösung noch offen war.
Ich würde gerne auf eine Änderung von 5 °C oder mehr prüfen. Du bist auf einen Dummy ausgewichen. Wenn es ein "OldValue" direkt im 1wire Sensor gibt - oder per userattr anzulegen geht, dann würde mir das besser gefallen.
Schöne Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

CoolTux

OldReadingsVal ist eine FHEM Perlfunktion. Genau wie ReadingsVal nur eben den alten Wert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NewRasPi

Zitat von: CoolTux am 17 Februar 2019, 22:42:57
OldReadingsVal ist eine FHEM Perlfunktion. Genau wie ReadingsVal nur eben den alten Wert.

Hallo CoolTux
nach diesem Thread
https://forum.fhem.de/index.php?topic=85406.0
soll ja das schon eingecheckt sein. Aber die Commandref oder Anleitung dazu finde ich immer noch nicht.

Schöne Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NewRasPi

Noch mal hallo
muss ich dann doch über einen zusätzlichen Dummy gehen?
Hier mein List: Internals:
   ALARM      0
   ASYNC      0
   CHANGED   
   DEF        DS18B20 FFF898641403
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-ecee-6e7f0515f9d32105
   INTERVAL   900
   IODev      OWio
   NAME       AussenTemp
   NOTIFYDEV  global
   NR         31
   NTFY_ORDER 50-AussenTemp
   OW_FAMILY  28
   OW_ID      FFF898641403
   PRESENT    1
   ROM_ID     28.FFF898641403.23
   STATE      T:  1.00 °C
   TYPE       OWTHERM
   owg_cf     10
   owg_temp   1
   owg_th     85
   owg_tl     0
   Helper:
     DBLOG:
       temperature:
         logdb:
           TIME       1550442008.43773
           VALUE      1
   READINGS:
     2019-02-17 23:35:08   state           T:  1.00 °C
     2019-02-17 23:35:08   temperature     1
   tempf:
     factor     1
     offset     0
Attributes:
   DbLogExclude failures,T,85
   DbLogInclude temperature
   IODev      OWio
   event-min-interval temperature:900
   event-on-change-reading temperature
   fp_Lageplan 271,720,3,state,Aussen
   icon       temp_temperature
   interval   900
   model      DS18B20
   oldreadings state
   resolution 10
   room       5.1_Umwelt_Aussen,OWX
   tempHigh   85
   tempLow    0
   tempUnit   Celsius
   verbose    4

Darin hätte ich ein weiteres Reading erwartet. Da ist aber nicht mehr wie vorher/ ober bei den anderen Temperatursensoren ist.
Ausser das Attriput "oldreadings state" - nur leider kein Wert.
Ich steh da auf der Leitung - sorry.
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

CoolTux

Kennst Du die Funktion ReadingsVal? OldReadingsVal ist das selbe in grün nur für den alten Wert.
Willst du also den alten Wert von state haben musst Du

OldReadingsVal('DEVICENAME','state','none')

Machen. Am einfachsten im Notify für Deine Berechnung die Du machen willst oder wegen mein auch im userReadings.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NewRasPi

Zitat von: CoolTux am 18 Februar 2019, 00:00:47
Kennst Du die Funktion ReadingsVal? OldReadingsVal ist das selbe in grün nur für den alten Wert.
Willst du also den alten Wert von state haben musst Du

OldReadingsVal('DEVICENAME','state','none')

Machen. Am einfachsten im Notify für Deine Berechnung die Du machen willst oder wegen mein auch im userReadings.

Hallo CoolTux
im Device selbst geht es anscheinend nicht.
Ich habe beide Versuche ins Device 1wire Sensor eingebaut, leider ohne ein Ergebnis.
Mit Notify habe ich noch nichts gemacht. Damit muss ich mich dann erst mal beschäftigen. Das kann dann mit einem Wert rechnen, der gar nicht im Device
angezeigt wird?
Internals:
   ALARM      0
   ASYNC      0
   DEF        DS18B20 FFFB96641403
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-58a0-d28ad6c55a24787a
   INTERVAL   300
   IODev      OWio
   NAME       SchlafzimmerTemp
   NOTIFYDEV  global
   NR         34
   NTFY_ORDER 50-SchlafzimmerTemp
   OW_FAMILY  28
   OW_ID      FFFB96641403
   PRESENT    1
   ROM_ID     28.FFFB96641403.78
   STATE      T: 19.75 °C
   TYPE       OWTHERM
   owg_cf     10
   owg_temp   19.75
   owg_th     40
   owg_tl     0
   Helper:
     DBLOG:
       data:
         logdb:
           TIME       1550473751.38808
           VALUE      state: T: 19.75 °C
       temperature:
         logdb:
           TIME       1550473751.38808
           VALUE      19.75
   OLDREADINGS:
     2019-02-18 07:39:11   temperature     19.5
   READINGS:
     2019-02-18 08:09:11   state           T: 19.75 °C
     2019-02-18 08:09:11   temperature     19.75
   tempf:
     factor     1
     offset     0
Attributes:
   DbLogExclude failures,T,85
   DbLogInclude temperature
   IODev      OWio
   OldReadingsVal ('SchlafzimmerTemp','state','none')
   event-min-interval temperature,state:300
   event-on-change-reading temperature,state,STATE
   fp_Lageplan 172,299,5,SchlafzimmerTemp,
   fp_statevalue STATE
   icon       temp_temperature
   interval   300
   model      DS18B20
   oldreadings temperature
   resolution 10
   room       1.2_Schlafzimmer,OWX
   tempHigh   40
   tempLow    0
   tempUnit   Celsius
   userReadings OldReadingsVal('SchlafzimmerTemp','state','none')
   userattr   OldReadingsVal
   verbose    1


Was mache ich da falsch?
Schöne Grüße
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

CoolTux

Hast Du eigentlich Dich ein bisschen belesen zum Thema userReadings?

userattr   OldReadingsVal
Das ist Unsinn. Bitte löschen.


userReadings OldReadingsVal('SchlafzimmerTemp','state','none')

Der Aufbau ist völlig falsch


Internals:
   NAME       dummyWeather
   NR         122
   STATE      T: 20.75 °C
   TYPE       dummy
   OLDREADINGS:
     2019-02-18 08:32:45   state           T: 18.75 °C
   READINGS:
     2019-02-18 08:32:53   alterWert       T: 18.75 °C
     2019-01-12 10:50:35   statMeasured-tempDay Min: 0.0 Avg: 14.5 Max: 14.5 (since: )
     2019-02-18 08:32:53   state           T: 20.75 °C
     2019-01-12 10:50:08   tempDayMax      0.0
     2019-01-12 10:50:35   tempDayMin      0.0
Attributes:
   oldreadings state
   room       Test
   userReadings alterWert:T:.* { OldReadingsVal($name,'state','none')}

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

DOIF unterstützt neuerdings auch Differenz: https://fhem.de/commandref_DE.html#DOIF_Reading_Funktionen

z. B.

DOIF ([kaltwasser:state:diff] < 0) (....)

wenn die Temperatur fällt, ...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

NewRasPi

Hallo CoolTux
gelesen habe ich viel, verstanden davon leider nur sehr wenig. Euer Hintergrundwissen fehlt mir, wenn ich da "ähnliche Suchworte" nicht erkenne.
Jetzt ist aber dank Deinem Tipp schon mal ein "alter Wert" als Reading im Device (sogar im Temperatursensor Device ohne extra Dummy).
Nun hoffe ich das ich mit einem DOIF auch die Formel hinbekomme, wenn der neue Wert um mehr als 5 °C höher als der "alterWert" ist soll eine Warnmeldung per TTS/ Pushbullet (je nach dem ob zuhause jemand anwessend ist) etc.
versendet/ ausgegeben werden.
Internals:
   ALARM      0
   ASYNC      0
   DEF        DS18B20 FFFB96641403
   ERRCOUNT   0
   FUUID      5c430225-f33f-103c-58a0-d28ad6c55a24787a
   INTERVAL   300
   IODev      OWio
   NAME       SchlafzimmerTemp
   NOTIFYDEV  global
   NR         34
   NTFY_ORDER 50-SchlafzimmerTemp
   OW_FAMILY  28
   OW_ID      FFFB96641403
   PRESENT    1
   ROM_ID     28.FFFB96641403.78
   STATE      T: 19.25 °C
   TYPE       OWTHERM
   owg_cf     10
   owg_temp   19.25
   owg_th     40
   owg_tl     0
   Helper:
     DBLOG:
       data:
         logdb:
           TIME       1550489951.6179
           VALUE      state: T: 19.25 °C
       temperature:
         logdb:
           TIME       1550490251.38622
           VALUE      19.25
   OLDREADINGS:
     2019-02-18 12:29:11   state           T: 19.50 °C
     2019-02-18 10:44:11   temperature     19.75
   READINGS:
     2019-02-18 12:39:11   alterWert       T: 19.50 °C
     2019-02-18 12:44:11   state           T: 19.25 °C
     2019-02-18 12:44:11   temperature     19.25
   tempf:
     factor     1
     offset     0
Attributes:
   DbLogExclude failures,T,85
   DbLogInclude temperature
   IODev      OWio
   event-min-interval temperature,state:300
   event-on-change-reading temperature,state
   fp_Lageplan 172,299,5,SchlafzimmerTemp,
   fp_statevalue STATE
   icon       temp_temperature
   interval   300
   model      DS18B20
   oldreadings state
   resolution 10
   room       1.2_Schlafzimmer,OWX
   tempHigh   40
   tempLow    0
   tempUnit   Celsius
   userReadings alterWert:T:.* { OldReadingsVal($name,'state','none')}
   verbose    1

Es soll damit z.B. auch die Garage auf unnormalen Temperaturanstieg überwacht werden. (in unserer Region haben die letzten Wochen mehrere Carports und Garagen mit Autos gebrannt)
Ist der "alterWert" jetzt automatisch der zum voreingestellten Intervall, hier 300 Sekunden, gemessene Wert?

Vielen vielen Dank für die Hilfe.
Schöne Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

CoolTux

Bau es doch einfach in das userReading ein. Mach also kein userReading mit dem alten Wert sondern mach ein userReading was Dir auf Basis Deiner Wünsche ein high oder low aud gibt.

Fällt die Temperatir unnerhalb einer Readingaktuallisierung um 5 Grad gib wert high zurück.

nenne das userReading wegen meiner diffMin5 für minus 5 vom aktuellen Wert. Falls doch mal ein + 5 brauchst.  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

Zitat von: NewRasPi am 18 Februar 2019, 12:58:56

Nun hoffe ich das ich mit einem DOIF auch die Formel hinbekomme, wenn der neue Wert um mehr als 5 °C höher als der "alterWert" ist soll eine Warnmeldung per TTS/ Pushbullet (je nach dem ob zuhause jemand anwessend ist) etc.


Wie schon geschrieben man braucht nichts weiter zu definieren (keine Dummys, keine weiteren Readings, kein OldReadings-Attribut etc.), es reicht einfach die Definition:

DOIF ([SchlafzimmerTemp:temperature:diff] > 5)(set ....)

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF