setreading value wird nicht in DBLOG übernommen

Begonnen von KlaGho, 08 August 2022, 17:51:09

Vorheriges Thema - Nächstes Thema

KlaGho

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

Otto123

#1
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
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

KlaGho