Get notified when a device stops communicating

Every now and then I find aqara devices that has not been reporting new data for some time… would be nice if I could find out somehow.

Also, I found out Ikea filament lights on Homey’s zigbee cause the Aqara’s to randomly stop sending updates.
Works fine with Ikea sockets though.

1 Like

Will test the app and see…

About aqara/Ikea would you mind explaining some more… not sure I understand…

When I added Ikea filament lights to Homey’s zigbee, Aqara sensors which started to use them as zigbee hops, randomly stopped to send updates.
Pairing the sensors again (w/o removing them first) solved it for a while.
Then I replaced the Ikea with Lidl zigbee lights and the Aqara’s almost never stop sending updates anymore.
So, for me, that combi of Aqara/Ikea lights didn’t work well.
Aqara contact sensors didn’t seem to be affected, while they stick to the first route they find

Looked at the app and not really what I wanted but thx for the tip

Which app? It’s about the script, which checks the sensors

Device Capabilities app

The app is just the way to import my flow, nothing else :woozy_face:

The flow itself is simple, so you’ll only need this:
You need the Then HS card “Run code with argument and return text-tag”

As argument, enter the time in seconds you want the script to consider a sensor unresponsive.

// Sensor.Check, to check on sensor last update time. Argument: inactive time (in seconds):

const INVALIDATE_AFTER = (args[0]); // Example 86400sec./3600 = 24hrs

const invalidatedDevices = [];
for (const device of Object.values(await Homey.devices.getDevices())) {
  if (! device.capabilitiesObj) continue;
  let count = 0;
  for (const capabilityObj of Object.values(device.capabilitiesObj)) {
    
    if (device.capabilitiesObj.measure_temperature || device.capabilitiesObj.alarm_contact || device.capabilitiesObj.alarm_motion ) { 

      if (! capabilityObj?.lastUpdated || (Date.now() - new Date(capabilityObj?.lastUpdated) > INVALIDATE_AFTER * 1000)) {
        count++;
        }
    }
  }
  if (count && count === Object.keys(device.capabilitiesObj).length) {
    invalidatedDevices.push("- " + device.name + "\n   (zone: " + device.zoneName + ")" );
  }
}

// When there are matching sensors
if ( invalidatedDevices.length != 0 ) {
  // create / update HomeyScript variable
  await tag('InvalidatedDevices', invalidatedDevices.join('\n'));
  
  // Send Timeline notification
  Homey.flow.runFlowCardAction({
          uri: 'homey:manager:notifications',
          id: 'create_notification',
          args: {
            text: "\nDevices without updates for " + INVALIDATE_AFTER / 3600 + "hrs: \n" + invalidatedDevices.join('\n') + "\n\nflow Sensors Check"
          },
        });

  console.log("Devices without updates for " + INVALIDATE_AFTER / 3600 + "hrs: \n" + invalidatedDevices.join('\n'));
  return("Devices without updates for " + INVALIDATE_AFTER / 3600 + "hrs: \n" + invalidatedDevices.join('\n'));
}
  
// When there's no matching sensor
if ( invalidatedDevices.length == 0 ) {
  // Just report "None"
  // create / update HomeyScript variable
  await tag('InvalidatedDevices', 'None');
// Send Timeline notification
  Homey.flow.runFlowCardAction({
          uri: 'homey:manager:notifications',
          id: 'create_notification',
          args: {
            text: "\nDevices without updates for " + INVALIDATE_AFTER / 3600 + "hrs: None\n\nflow Sensors Check"
          },
        });

  console.log("Devices without updates for " + INVALIDATE_AFTER / 3600 + "hrs: None" );
  return invalidatedDevices.length != 0;
}

// Original script by Robert Klep  
// https://community.homey.app/t/a-script-to-check-sensor-last-update/63142/9