Die einfachste Variante wäre ein Expiration Timer. Ob das praktikabel ist, kommt dann vor allem auf die Anzahl zu überwachender Sensoren an. Du musst von allen zu überwachenden Sensoren ein verlinktes Item in eine Gruppe packen. Zusätzlich brauchst Du ein Item pro Sensor. Die Namen der Items sollten sich aus den gruppierten Items ableiten lassen. Dann reicht eine Rule für alle Sensoren, in der Form:
Code: Alles auswählen
rule "Sensor Heartbeat"
when
Member of gHeartbeatIn received update
then
val strName = trigeringItem.name.split("_").get(1) //gegeben, dass im Itemnamen der Sensorname an zweiter Stelle zwischen Untersrichen steht
gHeartbeatOut.members.filter[i|i.name.contains(strName)].head.postUpdate(ON)
end
Diese Minirule setzt also jedes Mal, wenn der Sensor einen Wert liefert das passende Item auf ON. Die Itemnamen können lose miteinander verbunden sein, wichtig ist nur, dass es für jedes überwachte Item auch ein Alarmitem gibt.
Der Trick: Dieses Item ist mit einem Expiration Timer versehen. Der Expiration Timer kann pro Item individuell eingestellt werden, man kann also dieselbe Rule für Sensoren verwenden, die einmal in der Minute Daten liefern und andere Sensoren, die nur einmal pro Stunde Daten liefern. Die Expiration wird großzügig etwas länger als die längste zu erwartetende Sendepause gesetzt und endet mit einem postUpdate(OFF) (das wird nur ausgelöst, wenn für Zeit x kein Update rein kam)
Eine zweite Rule übernimmt dann die Alarmierung, in welcher Form auch immer:
Code: Alles auswählen
rule "Alarm Heartbeat"
when
Member of gHeartbeatOut changed from ON to OFF
then
logWarn("heartbeat","Sensor {} hat sich schon lange nicht mehr gemeldet!",triggeringItem.label)
end
Im Label des Alarmitems steht dann der passende Sensorname drin
Eine andere Option: Man kann über das Link Profile ein DateTime Item an beliebige Channel verlinken und dort "Zeitstempel bei Aktualisierung" auswählen. Fortan wird in dem DateTime Item also immer der Zeitpunkt der letzten Aktualisierung gespeichert.
Leider ist die Auswertung von DateTime Status nicht sehr komfortabel, und schlimmer, es geschieht nicht automatisch. Man braucht dann also eine Rule, welche zyklisch alle DateTime Items prüft und gegebenenfalls Alarm schlägt. Dafür hat man aber den Zeitstempel der Aktualisierung.
Eventuell könnte man auch beide Verfahren miteinander kombinieren

und sich so das ganze Rumgerechne mit Datum und Zeit ersparen...