Hallo zusammen,
hallo herrmannj,
hallo Wzut,
ich habe ein JsonMod um hier von einer SenseBox Daten eines Helligkeitssensors abzurufen:
Internals:
.FhemMetaInternals 1
.eventMapCmd update:noArg
API_LAST_MSG 200
API_LAST_RES 1630406880.15254
CFGFN ./cfg.d/out/sensors/environment/illumination/esg.cfg
DEF https://api.opensensemap.org/boxes/5b364f061fef04001b09f02b/sensors
FUUID 60f46b51-f33f-a67d-e58f-161d3a41fe6de7cc
FVERSION 98_JsonMod.pm:0.244200/2021-05-11
NAME out.sensors.environment.illumination.esg
NEXT 2021-08-31 12:50:00
NR 10474
SOURCE https://api.opensensemap.org/boxes/5b364f061fef04001b09f02b/sensors (200)
STATE 2700.00 lx
SVN 24420 2021-05-11 21:25:20 UTC
TYPE JsonMod
.attraggr:
.attreocr:
.+
.attrminint:
CONFIG:
IN_REQUEST 0
SOURCE https://api.opensensemap.org/boxes/5b364f061fef04001b09f02b/sensors
SECRET:
Helper:
DBLOG:
activity:
general.system.log.db:
TIME 1630406650.1956
VALUE alive
activity_state:
general.system.log.db:
TIME 1630406650.1956
VALUE device_alive
illumination:
general.system.log.db:
TIME 1630404931.73831
VALUE 2700.00
last_readout:
general.system.log.db:
TIME 1630404931.73831
VALUE 2021-08-31T06:54:06.420Z
last_readout_ts:
general.system.log.db:
TIME 1630404480.13658
VALUE 1630392846.42
sensor_id:
general.system.log.db:
TIME 1630404600.24453
VALUE 5b364f061fef04001b09f02f
sensor_type:
general.system.log.db:
TIME 1630404600.24453
VALUE TSL45315
state:
general.system.log.db:
TIME 1630406665.80669
VALUE update
ttl_alert:
general.system.log.db:
TIME 1630404480.13658
VALUE true
unit:
general.system.log.db:
TIME 1630404600.24453
VALUE lx
OLDREADINGS:
READINGS:
2021-08-31 12:48:00 .computedReadings unit,sensor_id,sensor_type,last_readout,illumination
2021-08-31 12:48:41 activity alive
2021-08-31 12:44:10 activity_state device_alive
2021-08-31 12:48:00 illumination 2700.00
2021-08-31 12:48:00 last_readout 2021-08-31T06:54:06.420Z
2021-08-31 12:48:00 sensor_id 5b364f061fef04001b09f02f
2021-08-31 12:48:00 sensor_type TSL45315
2021-08-31 12:48:00 unit lx
Attributes:
alias Helligkeit Messstation auf dem Evangelisch-Stiftischen Gymnasium Gütersloh
cmdIcon update:mdt-update@black
event-on-change-reading .+
eventMap reread:update
group Helligkeit
icon weather_sun@black
interval */2 * * * *
readingList single(jsonPath("\$.sensors[?(\@.sensorType in ['TSL45315'])].sensorType"), 'sensor_type', undef)
single(jsonPath("\$.sensors[?(\@.sensorType in ['TSL45315'])].lastMeasurement.value"), 'illumination', undef)
single(jsonPath("\$.sensors[?(\@.sensorType in ['TSL45315'])].lastMeasurement.createdAt"), 'last_readout', undef)
single(jsonPath("\$.sensors[?(\@.sensorType in ['TSL45315'])].unit"), 'unit', 'lx')
single(jsonPath("\$.sensors[?(\@.sensorType in ['TSL45315'])]._id"), 'sensor_id', undef)
readingsWatcher 180,,last_readout
room Außen->Sensoren->Umwelt
stateFormat {
return q(Keine aktuellen Daten) if (::ReadingsVal($name, q(activity), q(dead)) eq q(dead));
return sprintf(q(%.2f %s), ::ReadingsVal($name, q(illumination), 0), ::ReadingsVal($name, q(unit), q(lx)));
}
webCmd update
Wie im Dump zu sehen, pollt das JsonMod alle 2 Minuten Daten von dort und soll nur einen Event erzeugen, wenn sich die Daten ändern. Ich habe nun aber auch ein readingsWatcher definiert, das alle 3 Minuten prüfen soll, ob sich last_readout geändert hat. Leider fällt die Box immer mal wieder aus der Helligkeitswert bleibt stehen. readingsWatcher sollte das ja nun erkennen und das Device auf dead setzen (readingsWatcher ist entsprechend konfiguriert). Nur: JsonMod mach trotz event-on-change-reading z.B. auf den Timestamp (hier 2021-08-31T06:54:06.420Z, also schon lange nicht mehr aktuell) immer wieder Events, was verhindert, dass readingsWatcher das Device als dead markieren kann.
Habt ihr eine Idee?
ich kann keinen offensichtlichen Grund sehen. Kannst Du mal die events aufzeichnen und die JSON anhängen? Dann stelle ich das nach falls notwendig