Moin zusammen
Ich habe ein ROOMMATE - DEVICE mit einem User -Reading eingerichtet:
Internals:
CFGFN ./cfg/HomeResidentStatus.cfg
DEF rgr_Residents
DURATIONTIMER 1670234682.87353
FUUID 5c49937e-f33f-02bc-94cb-a3883dce1b60c32a
FVERSION 20_ROOMMATE.pm:0.195330/2019-06-02
NAME Vorname_Nachname
NOTIFYDEV global,Vorname_Nachname_wakeuptimer1
NR 630
NTFY_ORDER 50-Vorname_Nachname
READY 1
RESIDENTGROUPS rgr_Residents
STATE home
SUBTYPE adult
TYPE ROOMMATE
eventCount 2859
Helper:
DBLOG:
homestatus:
DbLogFhem:
TIME 1670234623.04909
VALUE 1
READINGS:
2022-12-02 06:54:00 durTimerAbsence 00:00:00
2022-12-02 06:54:00 durTimerAbsence_cr 0
2022-12-05 11:03:42 durTimerPresence 00:18:15
2022-12-05 11:03:42 durTimerPresence_cr 18
2022-11-27 13:59:51 durTimerSleep 00:00:00
2022-11-27 13:59:51 durTimerSleep_cr 0
2022-12-05 11:03:42 homestatus 1
2022-12-05 10:45:27 lastArrival 2022-12-05 10:45:27
2022-12-05 10:45:23 lastDeparture 2022-12-05 10:45:23
2022-12-05 10:45:27 lastDurAbsence 00:00:04
2022-12-05 10:45:27 lastDurAbsence_cr 0
2022-12-05 10:45:23 lastDurPresence 75:51:23
2022-12-05 10:45:23 lastDurPresence_cr 4551
2022-12-05 10:45:23 lastLocation Home
2022-12-05 10:45:23 lastMood calm
2022-12-05 10:45:27 lastState absent
2022-12-05 10:45:27 location Home
2022-12-05 10:45:27 mood calm
2022-12-05 10:45:27 presence present
2022-12-05 10:45:27 state home
2022-11-29 22:21:42 wayhome 0
TIMER:
Vorname_Nachname_DurationTimer:
HASH Vorname_Nachname
MODIFIER DurationTimer
NAME Vorname_Nachname_DurationTimer
Attributes:
DbLogExclude .*
DbLogInclude homestatus
alias Status
devStateIcon home:icoVorname_Nachname.home absent:icoVorname_Nachname.absent
event-on-change-reading .*
event-on-update-reading .*
group Vorname_Nachname
icon people_sensor
room Roommates
rr_locationHome Home
rr_locations home,work,anywhere
rr_wakeupDevice Vorname_Nachname_wakeuptimer1
sortby 0
userReadings homestatus {
if (ReadingsVal("Vorname_Nachname","state",1) eq "home") {return 1;}
elsif (ReadingsVal("Vorname_Nachname","state",1) eq "absent") {return 2;}
elsif (ReadingsVal("Vorname_Nachname","state",1) eq "gotosleep") {return 3;}
elsif (ReadingsVal("Vorname_Nachname","state",1) eq "gone") {return 4;}
else {return 1;}
}
webCmd state:mood
Das userReadings haut mir jedesmal die Log-Meldung
2022.12.05 10:45:24.924 1: readingsUpdate(Vorname_Nachname,homestatus,2) missed to call readingsBeginUpdate first.
2022.12.05 10:45:24.925 1: stacktrace:
2022.12.05 10:45:24.925 1: main::readingsBulkUpdate called by fhem.pl (4972)
2022.12.05 10:45:24.925 1: main::readingsEndUpdate called by FHEM/RESIDENTStk.pm (727)
2022.12.05 10:45:24.925 1: main::RESIDENTStk_Set called by fhem.pl (3967)
2022.12.05 10:45:24.925 1: main::CallFn called by fhem.pl (1962)
2022.12.05 10:45:24.925 1: main::DoSet called by fhem.pl (1994)
2022.12.05 10:45:24.925 1: main::CommandSet called by fhem.pl (1274)
2022.12.05 10:45:24.925 1: main::AnalyzeCommand called by fhem.pl (1125)
2022.12.05 10:45:24.925 1: main::AnalyzeCommandChain called by .//FHEM/01_FHEMWEB.pm (2847)
2022.12.05 10:45:24.926 1: main::FW_fC called by .//FHEM/01_FHEMWEB.pm (984)
2022.12.05 10:45:24.926 1: main::FW_answerCall called by .//FHEM/01_FHEMWEB.pm (609)
2022.12.05 10:45:24.926 1: main::FW_Read called by fhem.pl (3972)
2022.12.05 10:45:24.926 1: main::CallFn called by fhem.pl (782)
2022.12.05 10:45:27.265 2: ROOMMATE set Vorname_Nachname home
raus
Der Beitrag
https://forum.fhem.de/index.php?topic=106021.0 hat leider nicht zur Lösung beigetragen.
Kennt Jemand diese Warnung und die entsprechende Abhilfe?
Nachtrag:
Seltsam ist das schon, denn FHEM/RESIDENTStk.pm (727) zeigt
727 readingsEndUpdate( $hash, 1 );
und die Zeile 454 darüber wird der Kreis korrekt geöffnet:
454 readingsBeginUpdate($hash);
Nachtrag 2:
Habe durch rum experimentieren einen Workaround gefunden.
Mein userReading liest sich jetzt wie folgt:
homestatus {
my $hash = $defs{$NAME};
readingsBeginUpdate($hash);
if (ReadingsVal("Guest","state",1) eq "home") {return 1;}
elsif (ReadingsVal("Guest","state",1) eq "absent") {return 2;}
elsif (ReadingsVal("Guest","state",1) eq "gotosleep") {return 3;}
elsif (ReadingsVal("Guest","state",1) eq "gone") {return 4;}
else {return 1;}
}
Man bemerke, dass ich jetzt selbst ein "readingsBeginnUpdate" ausführe.
Das ist alles Andere als sauber"
Aber zumindest ist die Fehlermeldung weg.
Gruß
Sailor