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
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.
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
Oder das statistics Modul: https://wiki.fhem.de/wiki/Statistics
Gruß, Joachim
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)
Und wie lässt du die readings füllen bzw. wie wird das ausgelöst? Kannst du mal den Code Posten?
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.
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
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 .....
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;}
},\ 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.
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!
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
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?
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 ?
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
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.
Das war´s.
Danke :)
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!
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
Super, das geht! Danke!
Kann ich den timestamp auch im deutschen Format ausgeben lassen und die Sekunden bei der Uhrzeit entfernen?
Viele Grüße
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"}
Hallo,
het schon jemand ein DOIF "gebastelt" der einen die Temperaturen per Mail / WA /Telegramm schickt, wenn diese sich geändert haben?
Hoffi