Hallo zusammen,
gerne würde ich mir eine Benachrichtung mit telebot aufs Handy schicken, wenn der Wert des readings "rain" um exakt 1,000mm (1mm) zugenommen hat. Meine bisherigen Codings geben leider keinen vergleichbaren Fall her, den ich abkupfern könnte und auch im Netz habe ich nichts leicht Nachvollziehbares hierzu gefunden.
Das Reading kommt mit drei Nachkommastellen, also müsste nach meinem Verständnis also eine Differenzberechnung gemacht werden.
Hier mal das listing der Wetterstation, falls es von Belang sein sollte:
Internals:
CUL_0_MSGCNT 8
CUL_0_RAWMSG A1379867050B35B00000000D22C0796C05B28F6BF::-69:CUL_0
CUL_0_RSSI -69
CUL_0_TIME 2018-06-14 14:33:08
DEF 50B35B
IODev CUL_0
LASTInputDev CUL_0
MSGCNT 8
NAME Wetterstation
NOTIFYDEV global
NR 551
NTFY_ORDER 50-Wetterstation
STATE T: 21 H: 44 W: 9.1 R: 572.893 IR: 0 WD: 200 WDR: 67.5 S: 246 B: 191
TYPE CUL_HM
lastMsg No:79 - t:70 s:50B35B d:000000 00D22C0796C05B28F6BF
peerList vccu_Btn2,
protLastRcv 2018-06-14 14:33:08
rssi_at_CUL_0 cnt:8 min:-69.5 max:-66 avg:-68.18 lst:-69
READINGS:
2018-06-14 14:14:41 Activity alive
2017-08-19 18:51:30 CommandAccepted yes
2017-07-31 16:46:10 D-firmware 1.6
2017-07-31 16:46:10 D-serialNr NEQ1648866
2017-08-19 18:51:30 PairedTo 0x060468
2017-07-31 16:47:19 R-burstRx off
2017-07-31 16:47:19 R-pairCentral 0x060468
2017-07-31 16:47:19 R-stormLowThresh 5
2017-07-31 16:47:19 R-stormUpThresh 20
2017-07-31 16:47:19 R-sunThresh 50
2017-08-19 18:16:36 R-vccu_Btn2-peerNeedsBurst set_off
2017-08-19 18:21:13 R-vccu_Btn2-stormLowThresh 5
2017-08-19 18:21:13 R-vccu_Btn2-stormUpThresh 20
2017-08-19 18:21:13 R-vccu_Btn2-sunThresh 50
2017-08-19 18:21:13 R-vccu_Btn2-windSpeedRsltSrc max
2017-08-19 18:47:11 R-vccu_Btn3-peerNeedsBurst set_off
2017-08-19 18:51:31 R-vccu_Btn3-stormLowThresh 5
2017-08-19 18:51:31 R-vccu_Btn3-stormUpThresh 20
2017-08-19 18:51:31 R-vccu_Btn3-sunThresh 50
2017-08-19 18:51:31 R-vccu_Btn3-windSpeedRsltSrc max
2017-07-31 16:47:19 R-windSpeedRsltSrc max
2017-08-19 18:51:30 RegL_00. 01:00 02:01 0A:06 0B:04 0C:63 18:00 00:00
2017-08-19 18:51:30 RegL_01. 05:32 06:14 07:05 0A:01 00:00
2017-08-19 18:51:31 RegL_01.vccu_Btn2 05:32 06:14 07:05 0A:01 00:00
2017-08-19 18:51:31 RegL_01.vccu_Btn3 05:32 06:14 07:05 0A:01 00:00
2017-08-19 18:51:31 RegL_04.vccu_Btn2 05:00 00:00
2017-08-19 18:51:32 RegL_04.vccu_Btn3 05:00 00:00
2018-06-14 14:33:08 battery ok
2018-06-14 14:33:08 brightness 191
2018-06-14 14:33:08 humidity 44
2018-06-14 14:33:08 isRaining 0
2018-06-14 14:14:41 peerList vccu_Btn2,
2018-06-14 14:33:08 rain 572.893
2018-06-14 14:33:08 rssi_at_CUL_0 -69
2018-06-14 14:33:08 state T: 21 H: 44 W: 9.1 R: 572.89 IR: 0 WD: 200 WDR: 67.5 S: 246 B: 191
2018-06-13 20:15:06 storm unknown:04
2018-06-14 14:33:08 sunshine 246
2018-06-14 14:33:08 temperature 21
2018-06-13 20:15:06 trig_01 vccu
2018-06-13 20:15:06 trigger_cnt 5
2017-08-19 18:48:43 unknown 0400000000000105320A010000
2018-06-14 14:33:08 windDirRange 67.5
2018-06-14 14:33:08 windDirection 200
2018-06-14 14:33:08 windSpeed 9.1
helper:
HM_CMDNR 121
mId 00AE
regLst ,0,1,1p,4p
rxType 140
supp_Pair_Rep 0
expert:
def 1
det 0
raw 1
tpl 0
io:
newChn +50B35B,00,00,00
nextSend 1528979588.64392
rxt 2
vccu vccu
p:
50B35B
00
00
00
prefIO:
CUL_0
mRssi:
mNo 79
io:
CUL_0:
-65
-65
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
role:
chn 1
dev 1
rssi:
at_CUL_0:
avg -68.1875
cnt 8
lst -69
max -66
min -69.5
tmpl:
Attributes:
IODev CUL_0
IOgrp vccu:CUL_0
actCycle 000:10
actStatus alive
alias Wetterstation
autoReadReg 4_reqStatus
event-on-change-reading rain,windDirection,state
expert 2_raw
firmware 1.6
icon weather_station
model HM-WDS100-C6-O-2
peerIDs 00000000,06046802,
room Wetter,CUL_HM,Garagentore,Garten
rssiLog 1
serialNr NEQ1648866
subType THSensor
Wie geht so etwas, - kann mir da jemand helfen?
VG,
al
was hast du denn bis jetzt versucht?
vermutlich lässt sich das mit einem notify lösen.
was mich etwas stutzig macht:
Zitat von: justcallmeal am 14 Juni 2018, 14:43:00
gerne würde ich mir eine Benachrichtung mit telebot aufs Handy schicken, wenn der Wert des readings "rain" um exakt 1,000mm (1mm) zugenommen hat.
was ist bei 1,001 mm?
dann nicht mehr?? oder meinst du "mehr als 1mm"?
nur zur klarstellung :)
Zitat von: nils_ am 14 Juni 2018, 15:28:14
was hast du denn bis jetzt versucht?
...nun, ich bin da nicht der große Programmierer... ich bekomme es hin, eine Meldung zu erhalten, wenn der Wert sich ändert, sprich, wenn er zunimmt. Das wäre bei längerem Regnen alle paar Sekunden. Logisch, dass ich das natürlich nicht will.
Bei komplexeren Dingen versuche ich ein Template zu finden, welches ich ggf. auf meinen Bedarf ein wenig ändere. In diesem Fall habe ich leider nirgends etwas gefunden...
Was die die Logik angeht: es sollte so sein, dass immer wenn der Wert um einen Millimeter zugenommen hat, eine Meldung angetriggert wird. D.h. für jeden weiteren mm eine Meldung --> 20 mm Regen = 20 Meldungen.
Vielleicht müsste dazu gar keine Differenzberechnung angestellt werden; es würde ja reichen, auf die erste Stelle vor dem Dezimalpunkt zu triggern, das könnte -wie ich mir vorstelle- noch einfacher sein. Leider weiß ich nicht wie das geht.
VG,
al
Zitat von: justcallmeal am 14 Juni 2018, 19:10:01
...nun, ich bin da nicht der große Programmierer... ich bekomme es hin, eine Meldung zu erhalten, wenn der Wert sich ändert, sprich, wenn er zunimmt. Das wäre bei längerem Regnen alle paar Sekunden. Logisch, dass ich das natürlich nicht will.
dann zeig doch mal die "dauerfeuer"-lösung.
die dann anzupassen wäre einer von vielen möglichen wegen.
Zitat von: justcallmeal am 14 Juni 2018, 19:10:01
Bei komplexeren Dingen versuche ich ein Template zu finden, welches ich ggf. auf meinen Bedarf ein wenig ändere. In diesem Fall habe ich leider nirgends etwas gefunden...
dein template wäre Perl bzw. die Syntax davon.
in deinem fall ein "if" (nicht FHEM-IF, geht evtl. auch ::) )
Zitat von: justcallmeal am 14 Juni 2018, 19:10:01
Was die die Logik angeht: es sollte so sein, dass immer wenn der Wert um einen Millimeter zugenommen hat, eine Meldung angetriggert wird. D.h. für jeden weiteren mm eine Meldung --> 20 mm Regen = 20 Meldungen.
ReadingsVal(...) und OldReadingsVal(...) zu finden https://fhem.de/commandref_DE.html#perl
das wäre dann mit Differenzberechnung ;)
Zitat von: justcallmeal am 14 Juni 2018, 19:10:01
Vielleicht müsste dazu gar keine Differenzberechnung angestellt werden; es würde ja reichen, auf die erste Stelle vor dem Dezimalpunkt zu triggern, das könnte -wie ich mir vorstelle- noch einfacher sein. Leider weiß ich nicht wie das geht.
das wäre dann eher ein anderer ansatz: event-on-change-reading
Zitat von: nils_ am 15 Juni 2018, 09:28:05
dann zeig doch mal die "dauerfeuer"-lösung.
okay, ich dachte, dass dies die Dauerfeuerlösung sei, aber ist nicht so, wie ich später festellen musste:
define Regenmeldung_1 notify Wetterstation:rain:.* \ { if ($EVTPART1 ne '5' ) \ {fhem (set teleBot msg @123456789 Regen: [Wetterstation:rain]mm) } }
Vielmehr macht diese Zeile scheinbar gar nichts :-(
Nach einigen weiteren Überlegungen denke ich, dass auf die Veränderung der Ziffer in Reading getriggert werden sollte, die direkt vor dem Dezimalpunkt steht.
geht das überhaupt?
VG,
al
Bei mir triggert Wetterstation:rain.*
Ich würde da mal ein "Log 3, $EVTPART1" für if und else einfügen. Da siehst Du im Log ob und was drin steht.
Zitat von: rabehd am 15 Juni 2018, 13:01:37
Ich würde da mal ein "Log 3, $EVTPART1" für if und else einfügen.
sorry, was heißt das detaillierter ausgedrückt?
ZitatVielmehr macht diese Zeile scheinbar gar nichts :-(
Dann gehe doch mal systematisch vor.
1. Triggert Dein "Event" überhaupt?
define Regenmeldung_1 notify Wetterstation:rain:.* Log 3, "Regen triggert"
Dann müßte ja was im Logstehen, wenn das Reading rain aktualisiert wird.
2. Was ist überhaupt in $EVTPART1 drin?
define Regenmeldung_1 notify Wetterstation:rain:.* Log 3, "Eventpart1 ist " . $EVTPART1
Zitat($EVTPART1 ne '5' )
verwende ich nicht, keine Ahnung was es bedeutet/bedeuten soll.
Bei mir regnet es im Moment auch nicht.
Ich würde sicherstellen, das Rain nur ein Event erzeugt, wenn sich der Wert ändert.
Dann würde ich im notify prüfen, ob die Nachkommastelle 0 ist, wenn ja dann soll eine Nachricht gesendet werden.
vielen Dank für Deine Ausführungen, wenngleich ich nicht wirklich alles verstanden habe :-\
Trotzdem habe ich damit wieder ein wenig hinzugelernt ;)
Ich habe die Aufgabenstellung allerdings mittlerweile anders lösen können, indem ich auf das "state" eines Dummies triggere indem die Differenzberechnung stattfindet, wie in folgendem Thread beschrieben:
https://forum.fhem.de/index.php?topic=14165.0 (https://forum.fhem.de/index.php?topic=14165.0)
Besten Dank nochmals!
al