Timer script Not Cancelling if state changes

By the time you typed that, you could have the rule checking actual status instead of guessing/hoping

“SomeItem” linked to a zwave device channel that updates periodically, e.g. temperature every twenty minutes. You only need one channel per device.
Add an Item expire property, period 45mins (two missed reports), have expire action set state to UNDEF. Put similar Items in a Group “MyImportantDevices”.
No rules so far.

DSL rule

rule "alert broken device"
when
    Member of MyImportantDevices changed to UNDEF
then
    logInfo("test", "Something has broken!")
    logInfo ("test", "Something that " + triggeringItem.label + " belongs to!"
end

There are a hundred odd different communication technologies and methodologies to deal with. How-to-do requires tailoring for each.
There are probably a half-dozen generic approaches that would cover most cases, albeit require tailoring still for individual devices in some cases.

Most people are concerned about just a few key functions. Example “did the heating fail to come on when wanted?” Monitoring device status won’t help if the failure is due to fuel supply, different approach needed. Etc.