Hallo, ich habe folgendes Problem: ein Temperatursensor soll bei Battery low einen Alarm senden und nach Batteriewechsel den entsprechenden Zeitstempel in der DBLOG (mariadb) abspeichern.
Mit {fhem("setreading TH_BZ ChangedBattery ".localtime)} über die Commandeingabe funtioniert es (ich sehe auch entprechende Meldungen im eventlog und natl. in den DB.
Mit meinem notify funkioniert es nicht: das notify triggered korrekt auf battery Änderungen und ich sehe auch events. Nur das Reading "ChangedBattery" wird nicht unmittelbar aktualisiert, sondern erst nach einem Browser-Refresh und daher auch nicht in die DB übernommen. Ich habe mich schon mit delays (sleep etc.) und extra logs schwindlig experimentiert. Bitte um Tips.
List des Temperatursensors
Internals:
CODE SD_WS07_TH_303
DEF SD_WS07_TH_303
FUUID 5c9b8d71-f33f-2206-9a76-3f64bd188a42da2c
LASTInputDev SD433
MSGCNT 100
NAME TH_BZ
NR 305
SD433_DMSG P7#30A0FFF1C
SD433_MSGCNT 100
SD433_Protocol_ID 7
SD433_RAWMSG MS;P1=-3907;P2=486;P3=-984;P4=-1960;D=21232324242323232324232423232323232424242424242424242424242323232424242323;CP=2;SP=1;R=44;O;m1;
SD433_RSSI -52
SD433_TIME 2022-08-08 17:43:52
STATE 25.5 °C 28 % Mo 17:43
TYPE SD_WS07
bitMSG 00110000 1010 000011111111 1111 00011100
eventCount 297
lastMSG 30A0FFF1C
lastReceive 1659973432.20838
Helper:
DBLOG:
ChangeBattery:
DBLogging:
TIME 1659967652.19911
VALUE Mon Aug 8 16:07:32 2022
ChangedBattery:
DBLogging:
TIME 1659972650.32966
VALUE Mon Aug 8 17:30:50 2022
absHumidity:
DBLogging:
TIME 1659967270.23219
VALUE 7.0
humidity:
DBLogging:
TIME 1659973274.21408
VALUE 28
temperature:
DBLogging:
TIME 1659973037.15295
VALUE 25.5
OLDREADINGS:
READINGS:
2022-08-08 17:30:50 ChangedBattery Mon Aug 8 17:30:50 2022
2022-08-08 17:41:14 absHumidity 6.6
2022-08-08 17:37:17 aussenHumidityEqInnen 30.8
2022-08-08 17:43:52 battery ok
2022-08-08 17:43:52 channel 3
2022-08-08 17:41:14 dewpoint 5.6
2022-08-08 17:43:52 humidity 28
2022-08-08 17:37:17 lueftenMoeglich nein
2022-08-08 17:37:17 schimmelfreiMaxHumRoom 70.6
2022-08-08 17:37:17 schimmelfreiMinTemp 9.5
2022-08-08 17:37:17 spread 19.9
2022-08-08 17:43:52 state T: 25.5 H: 28
2022-08-08 17:43:52 temperature 25.5
2022-08-08 17:41:14 vapourPressure 9.1
Attributes:
DbLogExclude .*
DbLogInclude temperature,humidity,ChangedBattery
alexaName Badezimmertemperatur
alexaRoom Bad
alias Badezimmer
event-min-interval temperature:600,humidity:600
event-on-change-reading temperature:1.0,humidity:2,battery,ChangedBattery,CommentBattery
group virt_Bad
homebridgeMapping CurrentTemperature=temperature
CurrentRelativeHumidity=humidity
history:size=2048
max-deviation-temp 5
offset-hum 0
offset-temp 0
room ,Bad,Homekit,Homematic,SD_WS07
stateFormat {round(ReadingsNum($name,'temperature',-99),1)." °C ". ReadingsNum($name,'humidity',-1)." % ". WeekdayAndTimeFromTimestamp(ReadingsTimestamp($name,'state',''))}
userReadings spread:temperature.* {ReadingsNum($name,'temperature',-1)-ReadingsNum($name,'dewpoint',-1)},
schimmelfreiMinTemp:temperature.* { sprintf("%.1f",schimmelfreiMinTemp(ReadingsVal($name,"temperature",15),ReadingsVal($name,"humidity",100),100)) },
schimmelfreiMaxHumRoom:temperature.* { sprintf("%.1f",schimmelfreiMaxHum(ReadingsVal($name,"temperature",15))) },
lueftenMoeglich:temperature.* {(ReadingsVal($name,"humidity","N/A") >(shiftRelHumidity(ReadingsVal("TH_Garten","temperature","30"),ReadingsVal("TH_Garten","humidity","100"), ReadingsVal($name,"temperature","N/A") )+3))?"ja":"nein" },
aussenHumidityEqInnen:temperature.* {sprintf("%.1f",shiftRelHumidity(ReadingsVal("TH_Garten","temperature","30"),ReadingsVal("TH_Garten","humidity","100"), ReadingsVal($name,"temperature","N/A")))}
userattr max-deviation-hum:1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50 offset-hum
List des notify
Internals:
DEF .*.:battery:.* {if (($EVENT =~ m/low/i) or ($EVENT =~ m/5/i))
{
my $CommentBattery=ReadingsVal($NAME,"CommentBattery","0");
if ($CommentBattery ne "low")
{
my $DNAME = AttrVal($NAME,"alias",$NAME);
{ DebianMailnbl('ghofun10@gmail.com',"$DNAME -> $EVENT", "$DNAME -> $EVENT") };
fhem "set pushmsgRedmi10s message $DNAME $EVENT";
Log 3,"$DNAME $EVENT";
fhem "setreading $NAME CommentBattery low";
}
}
elsif (($EVENT =~ m/ok/i) or ($EVENT =~ m/100/i))
{
if (ReadingsVal("$NAME","CommentBattery","0") eq "low")
{
Log 3,"$NAME ChangedBattery ".localtime;
fhem "deletereading $NAME CommentBattery";
fhem "setreading $NAME ChangedBattery ".localtime;
fhem "customlog $NAME ChangedBattery ".localtime;
}
}
}
FUUID 620a8989-f33f-2206-0227-a2eb2076ac4fc65a
NAME n_batt_chk
NR 542
NTFY_ORDER 50-n_batt_chk
REGEXP .*.:battery:.*
STATE 2022-08-08 17:22:48
TRIGGERTIME 1659972168.18901
TYPE notify
eventCount 14
READINGS:
2022-08-08 17:21:48 state active
2022-08-08 17:22:48 triggeredByDev TH_BZ
2022-08-08 17:22:48 triggeredByEvent battery: ok
Attributes:
DbLogExclude .*
room BatteryMonitor
Hi,
selbst triggern wird unterbunden - by design :)
setze ein sleep 0.1 vor deinen setreading $NAME Befehl.
Siehe auch https://fhem.de/commandref_DE.html#setreading
Gruß Otto
Super, das hat geklappt.
Vielen Dank Otto