Hauptmenü

Jahreshöchsttemperatur

Begonnen von Kitt, 26 Mai 2018, 17:06:05

Vorheriges Thema - Nächstes Thema

Kitt

Hallo,

ich nutze ein Funkthermometer und einen CUL-Stick, um mir alle 15 Minuten die
Temperatur ausgeben zu lassen.

Nun würde ich mir gerne die bisherige Höchst- bzw. Tiefsttemperatur anzeigen lassen.
Falls diese sich ändern sollten, können die bisherigen Werte gerne gelöscht werden.
Mich interssiert nur der höchste und tiefste Wert der Aufzeichnung (mit Datum und
Uhrzeit).

Hat jemand eine Idee?

Viele Grüße

andies

Du fügst zwei weitere Readings Min und Max hinzu. Dann noch ein notify, das bei Änderungen diese beiden userreadings überschreibt, sollten die aktuellen Temperaturen größer / kleiner sein.

Nach einem ,,Zyklus" (Jahr?) löschst Du die beiden readings. So sollte es gehen.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

eisman

Hi,

oder du nutzt average........


temperature_avg_day      24.4 2018-05-26 17:22:34
temperature_avg_month  23.6 2018-05-26 17:22:34
temperature_cum_day     1523322.2  2018-05-26 17:22:34
temperature_cum_month 54446917.6000001 2018-05-26 17:22:34
temperature_max_day      25.0  2018-05-26 17:06:53
temperature_max_month  25.1 2018-05-10 00:16:32
temperature_min_day       24.1  2018-05-26 02:27:51
temperature_min_month  20.1

gruss


1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

MadMax-FHEM

FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Wzut

Zitat von: andies am 26 Mai 2018, 17:15:57
Du fügst zwei weitere Readings Min und Max hinzu. Dann noch ein notify, das bei Änderungen diese beiden userreadings überschreibt, sollten die aktuellen Temperaturen größer / kleiner sein.
userReadings min/max : ja
aber wozu noch ein extra notify ? Den Vergleich kann man auch direkt im userReading machen. (zumindest mache ich es so) 
 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

andies

Und wie lässt du die readings füllen bzw. wie wird das ausgelöst? Kannst du mal den Code Posten?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Wzut

#6
Die Funktionen die in userReadings stehen weden doch automatisch abgearbeitet wenn die Readings aktualisiert werden.
Hier mal ein Bsp als Raw  definition :
attr <myDevice> userReadings t_min {my $t=ReadingsNum($name,"temperature",0);; my $a=ReadingsNum($name,"t_min",99);; ($t<$a) ? $t : $a;;},\
t_max {my $t=ReadingsNum($name,"temperature",0);; my $a=ReadingsNum($name,"t_max",0);; ($t>$a) ? $t : $a;;}

<myDevice> ist naturlich zu ersetzen durch den Namen des Device , damit die Timestamps sich nicht jedesmal ändern muss man noch mit timestamp-on-change-readings arbeiten, also ggf.
attr <myDevic> timestamp-on-change-reading .*
Um die Timestamps irgendwann mal zu reseten lösche ich sie einfach , ala deletereading <myDevice> t_m.*
Beim nächsten Durchlauf werden sie dann wieder mit ihren Pseudo Startwerten 0 & 99 automatisch neu angelegt.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Kitt

Danke für die Hilfe soweit.

Der Minimumwert wird auch jeweils korrekt aktualisiert, aber beim Maximumwert passiert nichts.

Was mache ich falsch? Hab einfach den Code kopiert und <myDevice> angepasst.

Viele Grüße

Wzut

Zitat von: Kitt am 28 Mai 2018, 16:36:59
Was mache ich falsch?
ohne ein list  vom betroffenden Device wird dir das vermutlich niemand sagen können .....
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Kitt

#9
Hier das list (wie schon geschrieben: Mit dem Minimumwert ist alles ok, aber ein Maximumwert wird nicht angelegt):

Internals:
   DEF        22
   IODev      JeeLink
   JeeLink_MSGCNT 358847
   JeeLink_RAWMSG OK 9 34 1 4 206 62
   JeeLink_TIME 2018-06-01 19:02:51
   LASTInputDev JeeLink
   LaCrosse_lastRcv 2018-06-01 19:02:51
   MSGCNT     358724
   NAME       LaCrosse_22
   NR         49
   STATE      T: 23 H: 62
   TYPE       LaCrosse
   addr       22
   battery_new 0
   bufferedH 
   bufferedT 
   corr1      0
   corr2      0
   previousH  62
   previousT  23
   sensorType 0=T(H)
   OLDREADINGS:
   READINGS:
     2018-06-01 19:02:51   battery         ok
     2018-06-01 19:02:51   humidity        62
     2018-06-01 19:02:51   state           T: 23 H: 62
     2018-06-01 19:02:51   t_min           23
     2018-06-01 19:02:51   temperature     23
Attributes:
   IODev      JeeLink
   alias      Draußen
   event-on-change-reading .*
   room       Draußen
   userReadings t_min {my $t=ReadingsNum($name,"temperature",0); my $a=ReadingsNum($name,"t_min",99); ($t<$a) ? $t : $a;},\ t_max {my $t=ReadingsNum($name,"temperature",0); my $a=ReadingsNum($name,"t_max",0); ($t>$a) ? $t : $a;}



Wzut

#10
},\ t_max {
Vermutlich hast du es nicht in raw eingegeben sondern direkt am Attribut ?
Wenn ja mach den \ weg und setze dafür einen Zeilenumbruch wenn du in der Webansicht keine überlange Zeile bei userReadings haben willst.
Edit : ich sehe gerade dein Timestamp bei t_min stimmt bestimmt nicht weil du meinen Hinweis bezüglich timestamp-on-change-reading .*  nicht beachtet hast.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Kitt

Ok, jetzt funktioniert beides.

Aber wie kann ich mir den Zeitpunkt der Maxmimun- und Minimumtemperatur angeben lassen (als reading)?
Im Moment wird nur der Zeitpunkt der letzten Messung angegeben, oder?

Danke!

Wzut

#12
Zitat von: Wzut am 27 Mai 2018, 08:42:35
attr <myDevic> timestamp-on-change-reading .*
als reading ? Warum ? Die Zeitstempel von t_min und t_max sagen einem doch wann es war ....

Bsp von mir :
2018-05-31 20:35:23   t_max           29.3
2018-06-01 06:32:43   t_min           24.3
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Kitt

Danke erstmal für deine Geduld ;)

Ich würden gerne ein stateformat erstellen (um es per telegram zu versenden) mit der Minimum- und
Maximumtemperatur und dem jeweiligen timetstamp.

Also ungefähr so:
Höchsttemperatur: t_max °C (am "timestamp");
Minimumtemperatur: t_min °C (am "timestamp").

Kannst du mir nochmal weiterhelfen?



Wzut

Zitat von: Kitt am 01 Juni 2018, 22:02:11
Ich würden gerne ein stateformat erstellen (um es per telegram zu versenden) mit der Minimum- und
Maximumtemperatur und dem jeweiligen timetstamp.
den ersten Teil mit stateformat habe ich nicht verstanden , den zweiten Teil schon, bleibt aber die Frage offen wann das Handy bimmeln soll ?
Jeden Tag um Mitternacht ? oder jedsmal wenn sich t_min oder t_max geändert haben - ala wir haben einen neuen Rekord ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Thoffi1978

Hallo,
der Timestamp funktioniert bei mir auch nicht richtig.
Die Zeit wird nicht immer aber oft neu geschrieben, obwohl es keine neue Min oder Max Temperatur gibt.
Ohne timestamp-on-change-reading .*
wird die immer die neueste Zeit geschrieben.
Ich habe das Gefühl, sobald die Temperatur sinkt, wird die Zeit geschrieben.
Anbei die List und ein Screenshot
Internals:
   .lastTimehumidity 1527927884.36789
   .lastTimestate 1527927884.36789
   .lastTimet_max 1527927814.36507
   .lastTimet_min 1527927849.3553
   .lastTimetemperature 1527927919.37209
   CHANGED   
   CODE       CUL_TCM97001_80
   DEF        CUL_TCM97001_80
   LASTInputDev nanoCUL
   MSGCNT     23911
   NAME       Aussentemperatur
   NR         325
   RSSI       -76
   STATE      T: 20.1 H: 79
   TYPE       CUL_TCM97001
   lastH      0
   lastT      1527927989.36173
   nanoCUL_MSGCNT 23911
   nanoCUL_RAWMSG s50880C94F0FC;  480: 9184
   nanoCUL_TIME 2018-06-02 10:26:29
   .attraggr:
   .attreocr:
     .*
   .attrminint:
     .*:300
   .attrtocr:
     .*
   .userReadings:
     HASH(0x3f5a680)
     HASH(0x42e7688)
   READINGS:
     2018-03-25 08:52:15   battery         low
     2017-08-16 18:03:12   channel         0
     2018-06-02 10:24:44   humidity        79
     2018-03-25 08:52:15   mode            normal
     2018-06-02 10:24:44   state           T: 20.1 H: 79
     2018-06-02 10:23:34   t_max           20.4
     2018-06-02 10:24:09   t_min           14.7
     2018-06-02 10:25:19   temperature     20.1
Attributes:
   event-min-interval .*:300
   event-on-change-reading .*
   model      NC_WS
   room       Haus
   timestamp-on-change-reading .*
   userReadings t_min {my $t=ReadingsNum($name,"temperature",0);; my $a=ReadingsNum($name,"t_min",99);; ($t<$a) ? $t : $a;;},
t_max {my $t=ReadingsNum($name,"temperature",0);; my $a=ReadingsNum($name,"t_max",0);; ($t>$a) ? $t : $a;;}


Hoffi

Wzut

kann sein das es in Verbindung mit event-min-interval .*:300 nicht so läuft wie erwartet. Lösch es doch mal und beobachte, ich selbst verwende min-interval nie.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Thoffi1978


Kitt

Ich würde gerne über Telegram folgende Nachricht versenden:

Die Höchsttemperatur (t_max) wurde am (timestamp) gemessen.

Wie kann ich denn den zugehörigen Timestamp zu der jeweiligen Höchsttemperatur auslesen?

Danke!

Byte09

Zitat von: Kitt am 11 Juni 2018, 18:41:27
Ich würde gerne über Telegram folgende Nachricht versenden:

Die Höchsttemperatur (t_max) wurde am (timestamp) gemessen.

Wie kann ich denn den zugehörigen Timestamp zu der jeweiligen Höchsttemperatur auslesen?

Danke!

$timestamp = ReadingsTimestamp($name, $reading, $default);

Byte09

Kitt

#20
Super, das geht! Danke!

Kann ich den timestamp auch im deutschen Format ausgeben lassen und die Sekunden bei der Uhrzeit entfernen?

Viele Grüße

Kitt

Falls es noch jemanden interessiert, habe ich hier mal meine Lösung.

Es wird Folgendes ausgegeben:
Max-Temp: 30.2 °C (16.06., 16:54); Min-Temp: 12.6 °C (14.06., 03:27)

Internals:
   CHANGED   
   DEF        22
   IODev      JeeLink
   JeeLink_MSGCNT 509918
   JeeLink_RAWMSG OK 9 34 1 5 18 35
   JeeLink_TIME 2018-06-16 17:46:58
   LASTInputDev JeeLink
   LaCrosse_lastRcv 2018-06-16 17:46:58
   MSGCNT     509793
   NAME       LaCrosse_22
   NR         49
   STATE      Max-Temp: 30.2 °C
(16.06., 16:54);
Min-Temp: 12.6 °C
(14.06., 03:27)
   TYPE       LaCrosse
   addr       22
   battery_new 0
   bufferedH 
   bufferedT 
   corr1      0
   corr2      0
   previousH  35
   previousT  29.8
   sensorType 0=T(H)
   OLDREADINGS:
   READINGS:
     2018-06-01 21:33:09   battery         ok
     2018-06-16 17:36:56   humidity        35
     2018-06-16 16:54:17   maxstamp        16.06., 16:54
     2018-06-15 23:23:39   minstamp        14.06., 03:27
     2018-06-16 17:46:32   state           T: 29.8 H: 35
     2018-06-16 16:54:17   t_max           30.2
     2018-06-14 03:27:50   t_min           12.6
     2018-06-16 17:46:32   temperature     29.8
Attributes:
   IODev      JeeLink
   alias      Draußen
   event-on-change-reading .*
   room       Draußen
   stateFormat Max-Temp: t_max °C
(maxstamp);
Min-Temp: t_min °C
(minstamp)
   timestamp-on-change-reading .*
   userReadings t_min {my $t=ReadingsNum($name,"temperature",0); my $a=ReadingsNum($name,"t_min",99); ($t<$a) ? $t : $a;},
t_max {my $t=ReadingsNum($name,"temperature",0); my $a=ReadingsNum($name,"t_max",0); ($t>$a) ? $t : $a;},
maxstamp {ReadingsTimestamp("LaCrosse_22","t_max",0) =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;return "$3.$2., $4"},
minstamp {ReadingsTimestamp("LaCrosse_22","t_min",0) =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;return "$3.$2., $4"}

Thoffi1978

Hallo,
het schon jemand ein DOIF "gebastelt" der einen die Temperaturen per Mail / WA /Telegramm schickt, wenn diese sich geändert haben?

Hoffi