//= Monitoring val logName = "monitoring_lastupdate" // ======================================================== // Speichert den Zeitpunkt der letzten Änderung in // ItemName + "_LastUpdate" rule "Store LastUpdate-Time" when Member of GR_LastUpdate received update then val target_name = triggeringItem.name + "_LastUpdate" //logInfo("LastUpdate", "Saving LastUpdate for "+ triggeringItem.name + " in " + target_name) val new_value = now.toString // SN_localtime.state.toString //logInfo("LastUpdate", "new Value: " + new_value) //val item = ItemService.getItem(target_name) //if (item == null) { // logError("LastUpdate", "Cant find Item '" + target_name + "'") //} else { postUpdate(target_name, new_value) //} end // Prüft regelmässig, ob LastUpdate-Zeiten im erlaubten Rahmen // liegen und erzeugt Warnings rule "Check LastUpdate-Ages" when System started or // run at system start in case the time changed when OH was offline Time cron "0 */1 * * * ? *" // Jede Minute then var DateTime localtimeJoda = now // new DateTime((SN_localtime.state as DateTimeType).calendar.timeInMillis) GR_Monitor_LastUpdate_10_30_60?.allMembers.forEach[item| var String new_state = "OK" if (item.state.toString == "NULL") { new_state = "WARN" } else { var DateTime last_update = new DateTime(item.state.toString) val update_age_in_millies = localtimeJoda.getMillis() - last_update.getMillis() val update_age_minutes = update_age_in_millies / 1000 / 60 //logInfo("ageCheck", "Age in minutes: " + update_age_minutes) if (update_age_minutes >= 60) { new_state = "CRIT" } else if (update_age_minutes >= 30) { new_state = "WARN" } else if (update_age_minutes >= 10) { new_state = "INFO" } } postUpdate(item.name+ "_State", new_state) ] // Copy Paste... GR_Monitor_LastUpdate_30_90_xx?.allMembers.forEach[item| var String new_state = "OK" if (item.state.toString == "NULL") { new_state = "WARN" } else { var DateTime last_update = new DateTime(item.state.toString) val update_age_in_millies = localtimeJoda.getMillis() - last_update.getMillis() val update_age_minutes = update_age_in_millies / 1000 / 60 //logInfo("ageCheck", "Age in minutes: " + update_age_minutes) if (update_age_minutes >= 90) { new_state = "WARN" } else if (update_age_minutes >= 30) { new_state = "INFO" } } postUpdate(item.name+ "_State", new_state) ] // Copy Paste... GR_Monitor_LastUpdate_60_120_xx?.allMembers.forEach[item| var String new_state = "OK" if (item.state.toString == "NULL") { new_state = "WARN" } else { var DateTime last_update = new DateTime(item.state.toString) val update_age_in_millies = localtimeJoda.getMillis() - last_update.getMillis() val update_age_minutes = update_age_in_millies / 1000 / 60 //logInfo("ageCheck", "Age in minutes: " + update_age_minutes) if (update_age_minutes >= 120) { new_state = "WARN" } else if (update_age_minutes >= 60) { new_state = "INFO" } } postUpdate(item.name+ "_State", new_state) ] end //# This rule cases the pre-compile of the whole rulefile by system-start. //# Verhindert, dass Rules erst bei der ersten Schalter-bedinung compiliert //# werden. //# Wichtig: RuleName muss eindeutig sein. Verwende Dateiname rule "precompile monitoring_lastupdate" when System started then logInfo(logName, "precompile triggered") end