Aktion nur einmal pro 15 Minuten ausführen - einfache Frage

Begonnen von Frood42, 02 April 2019, 16:06:05

Vorheriges Thema - Nächstes Thema

Frood42

im event monitor steht

2019-04-12 19:06:22 SD_WS07 temp_kitchen T: 24 H: 19
2019-04-12 19:06:22 SD_WS07 temp_kitchen temperature: 24
2019-04-12 19:06:22 SD_WS07 temp_kitchen humidity: 19


das notify:
defmod temp_sens_korrektur notify temp_ki.*:temperature {if ($EVTPART1 > 15 and $EVTPART1 < 40) {fhem("setreading $NAME korrTemp $EVTPART1")}}

müsste denn nun nicht auch im event monitor irgendetwas zu korrTemp zu sehen sein??

Viele Grüße,
Frood

Frood42

#31
YES!
so gehts: (Frood hat nachgelesen  :o :o :o :o)
define temp_sens_korrektur notify temp_ki.*:temperature:.* {if ($EVTPART1 > 15 and $EVTPART1 < 40) {fhem("setreading $NAME tempKorr $EVTPART1")}}
(nach so viel regExp brauche ich jetzt erst mal eine regExp Pause bis morgen, sonst kriege ich regExpKater)


2019-04-12 20:07:10 SD_WS07 temp_kitchen T: 23.9 H: 19
2019-04-12 20:07:10 SD_WS07 temp_kitchen temperature: 23.9
2019-04-12 20:07:10 SD_WS07 temp_kitchen humidity: 19
2019-04-12 20:07:10 SD_WS07 temp_kitchen tempKorr: 23.9


Perfekt! Dass das echte temperature reading erhalten bleibt, ist ja auch ok, als Kontrolle zum Beispiel.
Ich lasse das mal laufen und melde dann den Grafana Graphen.

Vielen Dank!!


Da war aber noch was mit der DB?

Internals:
   REGEXP     .*:(temperature|humidity|voltage|frequency|power|motion|brightness|tempKorr).*


tempkorr landet irgendwie nicht in der DB, ich habe nur "|tempKorr" hinzugefügt.

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frood42

shutdown restart, alles gemacht. tempkorr alles klein geschrieben.  (./db.conf .*:(tempkorr|temperature|humidity|voltage|frequency|power|motion|brightness).*)
Kommt immer wieder in den logs

2019-04-12 21:11:46 SD_WS07 temp_kitchen T: 24.5 H: 19
2019-04-12 21:11:46 SD_WS07 temp_kitchen temperature: 24.5
2019-04-12 21:11:46 SD_WS07 temp_kitchen tempkorr: 24.5

Aber nicht in der DB. komisch.  :o

Otto123

naja jetzt ist es klein? tempkorr
Vorhin war es groß tempKorr

Es hieß auch schonmal korrTemp  ;D

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frood42

ja, gerade hinzugefügt die Info
Zitattempkorr alles klein geschrieben.  (./db.conf .*:(tempkorr|temperature|humidity|voltage|frequency|power|motion|brightness).*)

und
defmod temp_sens_korrektur notify temp_ki.*:temperature:.* {if ($EVTPART1 > 15 and $EVTPART1 < 40) {fhem("setreading $NAME tempkorr $EVTPART1")}}

Frood42

#36
soll ich mal einen neuen thread aufmachen? MIt den 15 Minuten hat das nichts mehr zu tun....

Bisschen schrill ist das ganze ja. Ich habe schon 100 mal das DB log angepasst, mal humidity hinzugefügt und schnapp war das aus dem reading aller devices gespeichert in der DB.

Mit dem defmod notify oben geht das bis jetzt wirklich gar nicht.

Daher fall back - und das neue Dummy Device gemacht. Funzt, alles prima, nur: Wieso 4-5 mal mit demselben Zeitstempel?
Attributes:
   event-min-interval .*:300
   event-on-change-reading .*
   group      01_Sensor_Temp
   room       EG_KITCHEN_ROOM
   userReadings trashTemp { my $val = ReadingsNum('temp_kitchen','temperature',0);  if ($val > 15 and $val < 37) {fhem("setreading temp_kitchen_corr temperature $val")}}
   userattr   max-deviation-hum:1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50 max-deviation-temp:1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50 offset-hum:slider,-50,1.0,50 offset-temp:slider,-25,1.0,25


Ich ignoriere auch gepflegt das "max-deviation-temp" und hoffe, dass das nicht sowieso schon für meine Zwecke gedacht war  ::)


SELECT * FROM `history` WHERE DEVICE = "temp_kitchen_corr"

TIMESTAMP DEVICE TYPE EVENT READING VALUE UNIT
2019-04-13 10:46:52 temp_kitchen_corr DUMMY temperature: 24.9 temperature 24.9
2019-04-13 10:46:52 temp_kitchen_corr DUMMY temperature: 24.9 temperature 24.9
2019-04-13 10:46:52 temp_kitchen_corr DUMMY temperature: 24.9 temperature 24.9
2019-04-13 10:46:52 temp_kitchen_corr DUMMY temperature: 24.9 temperature 24.9
2019-04-13 10:46:52 temp_kitchen_corr DUMMY temperature: 24.9 temperature 24.9


Das reading temperature kam früher definitiv nur einmal vor - laut event monitor.
2019-04-13 10:57:19 dummy temp_kitchen_corr temperature: 24.8
2019-04-13 10:57:19 dummy temp_kitchen_corr temperature: 24.9
2019-04-13 10:57:19 dummy temp_kitchen_corr temperature: 24.9
2019-04-13 10:57:19 dummy temp_kitchen_corr tempkorr: 24.8
2019-04-13 10:57:19 dummy temp_kitchen_corr tempkorr: 24.9
2019-04-13 10:57:19 dummy temp_kitchen_corr tempkorr: 24.9
2019-04-13 10:57:19 SD_WS07 temp_kitchen T: 24.9 H: 21
2019-04-13 10:57:19 SD_WS07 temp_kitchen temperature: 24.9
2019-04-13 10:57:19 SD_WS07 temp_kitchen batteryState: low
2019-04-13 10:57:19 SD_WS07 temp_kitchen tempkorr: 24.9


Der scheint mir irgendwie für alle readings des devices das UserReading zu machen, oder? (das tempkorr ist auch noch drin, aber landet ja nicht in der DB)

Otto123

ZitatWieso 4-5 mal mit demselben Zeitstempel?
Weil jede änderung an dem Device das userreading triggert.
Dann musst Du für das userreading einen trigger definieren. userReadings trashTemp:temperature.*
Ich bin nicht sicher mit dem Trigger

Ich versteh nicht, warum das notify schuld sein soll.  :D
Oder versuch mal in dem notify den Befehl zu ergänzen
{fhem("sleep 0.1;setreading $NAME tempkorr $EVTPART1")} da war doch was ...
Zitatsetreading
[EN DE]
setreading <devspec> <reading> <value>

Set the reading <reading> for the device <name> to <value> without sending out commands to the device, but triggering events and eventMap/stateFormat transformations as usual. See the set command documentation for replacement description.

Examples:
setreading lamp state on
Note: setreading won't generate an event for device X, if it is called from a notify for device X. Use "sleep 0.1; setreading X Y Z" in this case.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frood42

Super, vielen Dank!
Das ist ja aber auch schon etwas spezial, nech!

Das mit dem
userReadings trashTemp:temperature.*
hat nicht gut geklappt. habe auch an der Stelle ein sleep probiert, aber die temp* readings kommen zumindest immer noch doppelt rein.

Das notify mit dem sleep ist das beste. Klappt! Nicht ganz so ein selbsterklärender Einzeiler aber immerhin geht es.

defmod temp_sens_server_korrektur notify temp_se.*:temperature:.* {if ($EVTPART1 > 22 and $EVTPART1 < 38) {fhem("sleep 0.1;; setreading $NAME tempkorr $EVTPART1")}}

Viele Grüße,
Frood