[JsonMod] JsonMod verhindert readingsWatcher

Begonnen von Christoph Morrison, 31 August 2021, 12:51:45

Vorheriges Thema - Nächstes Thema

Christoph Morrison

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?

herrmannj

ich kann keinen offensichtlichen Grund sehen. Kannst Du mal die events aufzeichnen und die JSON anhängen? Dann stelle ich das nach falls notwendig