[Homey Pro] overview script

Recently Athom had a small poll on Slack to gauge how many devices people have.
This made me think of a script I had been working on for some time (also some time ago) using HomeyScript to make a (complete) overview of your current Homey Pro.
This means amount of flows, devices, apps, etc.

With this thread I was going to share this very Script, as I was also kind of curious what other people have (if they are willing to share their results of course).
It won’t expose any sensitive data, so you don’t have to worry about that. (the first reply will be my result if you want to see an example).
But have also added some extra (useful) options, to show names of for example broken or disabled flows, or disabled apps.
And just, doesn’t anyone else want to see what they have spent all their hard earned money on in an easy to see list? :moneybag:

How to use:

I’ve tried to make the script somewhat user friendly to use.
The only thing you need is an Homey Pro (any version, besides Homey (Cloud)) and the app HomeyScript.

When you have that app installed you can go to the Web GUI => Scripts and click on “New HomeyScript” on the bottom-left of the page.
A new script will get created and you can give it a name (not mandatory, just easier to find it back later on), “Homey Overview” is a good example :wink:
Then all you need to do is copy and paste the entire script below (it is pretty large, 460 lines) into the top field, and press the “Save” button.

Then to see the result all you have to do is press “Test”, and behold the results will show up below it (it can take a few seconds to retrieve all information from Homey Pro).
(Tip: you can increase the result’s view by dragging the “Output” line, up).

Changelog:

  • v1.5 (14 March '23):
    • Added error information for Homey Pro (early 2023) users as HomeyScript needs an update to support the getAppSettings() function
    • Fix when no HomeyScript tokens (again)
  • v1.4 (11 March '23):
    • Added amount of HomeyScripts
  • v1.3 (11 March '23):
    • Fix when no HomeyScript tokens
  • v1.2 (11 March '23):
    • Added amount of: HomeyScript tokens, Better Logic Variables;
    • Added some error catching if anything fails, it will continue on;
  • v1.1 (11 March '23):
    • Fixed the Z-Wave count.
      I used a bad way before, now it is more accurate and includes the different security levels;
    • Added Chronograph and Better Logic Library for Virtual Devices count;
  • v1 (10 March '23):
    • Initial release;

Note:

The Z-Wave count for battery and router devices can be slightly wrong to your actual real life devices, as Homey doesn’t expose what a actual router or battery device is, there is a “battery” flag but that is false for FLiRS devices like “newer” thermostats (Eurotronic Spirit or Fibaro Thermostatic).
I’ve tried to fix it as accurate as possible by also looking if there are batteries specified for the device.
But also this isn’t the case for every device like the Aeotec Siren 6, which has a battery, but that is only for backup reasons and thus pretty much always connected to the mains.
This is just the best I could do without having to manual configure every device that should be excluded, which is too much work for just an Overview Script.

Count down and/or other apps
I won’t be adding the countdown apps, there are 4 different ones, and is getting a bit too much that way.
Other apps will most likely also not be added, or in the end the script will contain all apps.

Disclaimer:

It should work with all Homey Pros, including the new 2023 version, but if you encounter an issue, feel free to say so and I will try to fix it as soon as possible.

Please do keep the thread clean, any non related replies will get deleted!
If you have (general) questions about HomeyScript or the used Web API, then this is not the thread for that.

The Script v1.5:

// Set any of these from `false;` to `true;` to see the corresponding Name(s) or Node ID('s) added to the list
const showUpdateableApps = false; // Names of Apps that can be updated
const showDisabledApps = false; // Names of Apps that are disabled or crashed
const showSDKv2Apps = false; // Names of Apps that are on SDKv2
const showSDKv3Apps = false; // Names of Apps that are on SDKv3
const showDisabledFlows = false; // Names of Flows that are disabled
const showBrokenFlows = false; // Names of Flows that are broken
const showDisabledAdvancedFlows = false; // Names of Advanced Flows that are disabled
const showBrokenAdvancedFlows = false; // Names of Advanced Flows that are broken
const showZwaveDevices = false; // Names of all Z-Wave devices
const showZwaveRouterDevices = false; // Names of Z-Wave router devices
const showZwaveUnsecureDevices = false; // Names of unsecure Z-Wave devices
const showZwaveSecureS0Devices = false; // Names of secure (S0) Z-Wave devices
const showZwaveSecureS2AuthenticatedDevices = false; // Names of secure (S2 Authenticated) Z-Wave devices
const showZwaveSecureS2UnauthenticatedDevices = false; // Names of secure (S2 Unauthenticated) Z-Wave devices
const showZwaveBatteryDevices = false; // Names of Z-Wave battery devices
const showZwaveUnreachableNodes = false; // Node ID's of unreachable (flagged) devices
const showZwaveUnknownNodes = false; // Node ID's of unknown nodes
const showZigbeeNodes = false; // Names of all ZigBee devices
const showZigbeeRouter = false; // Names of ZigBee: router devices
const showZigbeeEndDevice = false; // Names of ZigBee: end device devices
const showVirtualDevices = false; // Names of all Virtual devices
const showIRDevices = false; // Names of all InfraRed devices

// ================= Don't edit anything below here =================

log('--------------- Homey Pro Overview v1.5 --------------');

await Homey.system.getSystemName()
  .then(result => log('Homey name:', result))
  .catch(() => log('Failed: Getting Homey Name'));

let homeyPlatformVersion;
await Homey.system.getInfo()
  .then(result => {
    log('Homey version:', result.homeyVersion);
    log('Homey model:', result.homeyModelName, '(' + result.cpus.length + ' core(s))');
    homeyPlatformVersion = result.homeyPlatformVersion || 1;

    const d = Math.floor(result.uptime / (3600*24));
    const h = Math.floor(result.uptime % (3600*24) / 3600);
    const m = Math.floor(result.uptime % 3600 / 60);
    const s = Math.floor(result.uptime % 60);

    const dDisplay = d > 0 ? d + (d == 1 ? " day, " : " days, ") : "";
    const hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : "";
    const mDisplay = m > 0 ? m + (m == 1 ? " minute, " : " minutes, ") : "";
    const sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : "";
    log('Uptime:', result.uptime, '(' + dDisplay + hDisplay + mDisplay + sDisplay + ')');

    if (homeyPlatformVersion === 2) {
      log('WiFi:', (result.wifiConnected) ? 'connected' : 'not connected');
      log('Ethernet:', (result.ethernetConnected) ? 'connected' : 'not connected');
    }
  })
  .catch(() => log('Failed: Getting Homey Stats'));

await Homey.updates.getUpdates()
  .then(result => {
    if(result.length > 0) {
      log('Update available:', result[0].version);
    } else {
      log('Update available: None');
    }
  })
  .catch(() => log('Failed: Getting Updates'));
log('\r\n------------------ Main ---------------------');

await Homey.users.getUsers()
  .then(result => {
    let owner = 0, manager = 0, user = 0, guest = 0;
    Object.keys(result).forEach(function(key) {
      if (result[key].role === 'owner') owner++;
      if (result[key].role === 'manager') manager++;
      if (result[key].role === 'user') user++;
      if (result[key].role === 'guest') guest++;
    });

    log(Object.keys(result).length, 'Users', '('  + owner + ' owner, ' + manager + ' manager(s), ' + user + ' user(s), ' + guest + ' guest(s))');
  })
  .catch(() => log('Failed: Getting Users'));

await Homey.apps.getApps()
  .then(result => {
    let sdkv2 = 0, sdkv2Apps = [], sdkv3 = 0, sdkv3Apps = [], updateable = 0, updateableApps = [], disabled = 0, disabledApps = [];

    Object.keys(result).forEach(function(key) {
      if (result[key].updateAvailable) {
        updateable++;
        updateableApps.push(result[key].name);
      }
      if (result[key].sdk === 2) {
        sdkv2++;
        sdkv2Apps.push(result[key].name);
      }
      if (
        result[key].sdk === 3
        || homeyPlatformVersion === 2
      ) {
        sdkv3++;
        sdkv3Apps.push(result[key].name);
      }
      if (!result[key].ready) {
        disabled++;
        disabledApps.push(result[key].name);
      }
    });

    if (showSDKv2Apps) {
      log('---------------------------------------------')
      log('SDKv2 apps:');
      log(sdkv2Apps.join('\r\n'));
      log('---------------------------------------------')
    }

    if (showSDKv3Apps) {
      log('---------------------------------------------')
      log('SDKv3 apps:');
      log(sdkv3Apps.join('\r\n'));
      log('---------------------------------------------')
    }

    if (showUpdateableApps) {
      log('---------------------------------------------')
      log('Updateable apps:');
      log(updateableApps.join('\r\n'));
      log('---------------------------------------------')
    }

    if (showDisabledApps) {
      log('---------------------------------------------')
      log('Disabled apps:');
      log(disabledApps.join('\r\n'));
      log('---------------------------------------------')
    }

    log(Object.keys(result).length, 'Apps', '('  + sdkv2 + ' SDKv2, '  + sdkv3 + ' SDKv3, '  + updateable + ' updateable, ' + disabled + ' disabled/crashed)');
  })
  .catch(() => log('Failed: Getting Apps'));

await Homey.zones.getZones()
  .then(result => log(Object.keys(result).length, 'Zones'))
  .catch(() => log('Failed: Getting Zones'));

await Homey.notifications.getNotifications()
  .then(result => log(Object.keys(result).length || 0, 'Notifications (Timeline)'))
  .catch(() => log('Failed: Getting Notifications'));

await Homey.logic.getVariables()
  .then(result => {
    let boolean = 0, number = 0, string = 0;
    Object.keys(result).forEach(function(key) {
      if (result[key].type === 'boolean') boolean++;
      if (result[key].type === 'number') number++;
      if (result[key].type === 'string') string++;
    });
    log(Object.keys(result).length, 'Logic Variables', '(' + boolean + ' boolean (yes/no), ' + number + ' number, ' + string + ' string)');
  })
  .catch(() => log('Failed: Getting Variables'));

await Homey.flow.getFlows()
  .then(result => {
    let disabled = 0, broken = 0, disabledNames = [], brokenNames = [];
    Object.keys(result).forEach(function(key) {
      if (!result[key].enabled) {
        disabled++;
        disabledNames.push(result[key].name);
      }
      if (result[key].broken) {
        broken++;
        brokenNames.push(result[key].name);
      }
    });

    if (showDisabledFlows) {
      log('---------------------------------------------')
      log('Disabled flow names:');
      log(disabledNames.join('\r\n'));
      log('---------------------------------------------')
    }
    
    if (showBrokenFlows) {
      log('---------------------------------------------')
      log('Broken flow names:');
      log(brokenNames.join('\r\n'));
      log('---------------------------------------------')
    }

    log(Object.keys(result).length, 'Flows', '('  + broken + ' broken, ' + disabled + ' disabled)');
  })
  .catch(() => log('Failed: Getting Flows'));

await Homey.flow.getAdvancedFlows()
  .then(result => {
    let disabled = 0, broken = 0, disabledNames = [], brokenNames = [];
    Object.keys(result).forEach(function(key) {
      if (!result[key].enabled) {
        disabled++;
        disabledNames.push(result[key].name);
      }
      if (result[key].broken) {
        broken++;
        brokenNames.push(result[key].name);
      }
    });

    if (showDisabledAdvancedFlows) {
      log('---------------------------------------------')
      log('Disabled advanced flow names:');
      log(disabledNames.join('\r\n'));
      log('---------------------------------------------')
    }
    
    if (showBrokenAdvancedFlows) {
      log('---------------------------------------------')
      log('Broken advanced flow names:');
      log(brokenNames.join('\r\n'));
      log('---------------------------------------------')
    }

    log(Object.keys(result).length, 'Advanced flows', '('  + broken + ' broken, ' + disabled + ' disabled)');
  })
  .catch(() => log('Failed: Getting Advanced Flows'));

await Homey.apps.getAppSettings({id: 'com.athom.homeyscript'})
  .then(result => {
    log(Object.keys(result.scripts).length, 'HomeyScript scripts', '(' + ((result.tokens) ? Object.keys(result.tokens).length : 0) + ' tokens/tags)');
  })
  .catch(() => {
    if (homeyPlatformVersion === 2) {
      log('Failed: Getting HomeyScript, Homey Pro (early 2023): getting information from apps is currently unavailable.');
    }
    else {
      log('Failed: Getting HomeyScript');
    }
  });

await Homey.apps.getAppSettings({id: 'net.i-dev.betterlogic'})
  .then(result => {
    let boolean = 0, number = 0, string = 0;
    Object.keys(result.variables).forEach(function(key) {
      if (result.variables[key].type === 'boolean') boolean++;
      if (result.variables[key].type === 'number') number++;
      if (result.variables[key].type === 'string') string++;
    });
    log(Object.keys(result.variables).length, 'Better Logic Variables', '(' + boolean + ' boolean (yes/no), ' + number + ' number, ' + string + ' string)');
  })
  .catch(() => {
    if (homeyPlatformVersion === 2) {
      log('Failed: Getting Better logic, Homey Pro (early 2023): getting information from apps is currently unavailable.');
    }
  });

log('\r\n----------------- Devices -------------------');
let allDevices = 0, zwave = 0, zwaveDevices = [], zwaveNodes = [], zwaveRouter = 0, zwaveRouterDevices = [], zwaveBattery = 0, zwaveBatteryDevices = [], zwaveSx = 0, zwaveSxDevices = [], zwaveS0 = 0, zwaveS0Devices = [], zwaveS2Auth = 0, zwaveS2AuthDevices = [], zwaveS2Unauth = 0, zwaveS2UnauthDevices = [];

await Homey.devices.getDevices()
  .then(result => {
    let virtual = 0, ir = 0, other = 0, virtualNames = [], irNames = [];

    Object.keys(result).forEach(function(key) {
      if (result[key].driverUri === 'homey:manager:vdevice') {
        if (result[key].driverId === 'infraredbasic') {
          ir++;
          irNames.push(result[key].name);
        }
        else {
          virtual++
          virtualNames.push(result[key].name);
        }
      }
      else if (
        result[key].driverUri === 'homey:app:com.arjankranenburg.virtual'
        || result[key].driverUri === 'homey:app:nl.qluster-it.DeviceCapabilities'
        || result[key].driverUri === 'homey:app:nl.fellownet.chronograph'
        || result[key].driverUri === 'homey:app:net.i-dev.betterlogic'
      ) {
        virtual++
        virtualNames.push(result[key].name);
      }
      else if (result[key].flags.includes('zwaveRoot')) {
        zwave++;
        zwaveDevices.push(result[key].name);
        zwaveNodes.push(Number(result[key].settings.zw_node_id));
        
        if (
          result[key].settings.zw_battery === '✓'
          || result[key].energyObj.batteries
        ) {
          zwaveBattery++;
          zwaveBatteryDevices.push(result[key].name);
        } else {
          zwaveRouter++;
          zwaveRouterDevices.push(result[key].name);
        }

        if (result[key].settings.zw_secure === '⨯') {
          zwaveSx++;
          zwaveSxDevices.push(result[key].name);
        } else if (
          result[key].settings.zw_secure === '✓'
          || result[key].settings.zw_secure === 'S0'
        ) {
          zwaveS0++;
          zwaveS0Devices.push(result[key].name);
        } else if (result[key].settings.zw_secure === 'S2 (Authenticated)') {
          zwaveS2Auth++;
          zwaveS2AuthDevices.push(result[key].name);
        } else if (result[key].settings.zw_secure === 'S2 (Unauthenticated)') {
          zwaveS2Unauth++;
          zwaveS2UnauthDevices.push(result[key].name);
        }
      }
      else if (
        !result[key].flags.includes('zwave')
        && !result[key].flags.includes('zigbee')
      ) {
        other++;
      }
    });

    if (showVirtualDevices) {
      log('---------------------------------------------')
      log('Virtual devices:');
      log(virtualNames.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    if (showIRDevices) {
      log('---------------------------------------------')
      log('Infrared devices:');
      log(irNames.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    allDevices += virtual + ir + other + zwave;
    log(virtual, 'Virtual devices');
    log(ir, 'Infrared (database) devices');
    log(other, 'Other devices');
  })
  .catch(() => log('Failed: Getting Devices'));

await Homey.zwave.getState()
  .then(result => {
    let unknownNodes = result.zw_state.nodes.filter((el) => !zwaveNodes.includes(el)).sort((a, b) => a - b);
    unknownNodes.shift();

    if (showZwaveDevices) {
      log('---------------------------------------------')
      log('Z-Wave devices:');
      log(zwaveDevices.join('\r\n'));
      log('---------------------------------------------')
    }

    if (showZwaveRouterDevices) {
      log('---------------------------------------------')
      log('Z-Wave router devices:');
      log(zwaveRouterDevices.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    if (showZwaveUnsecureDevices) {
      log('---------------------------------------------')
      log('Z-Wave unsecure devices:');
      log(zwaveSxDevices.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    if (showZwaveSecureS0Devices) {
      log('---------------------------------------------')
      log('Z-Wave secure (S0) devices:');
      log(zwaveS0Devices.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    if (showZwaveSecureS2AuthenticatedDevices) {
      log('---------------------------------------------')
      log('Z-Wave secure (S2) authenticated devices:');
      log(zwaveS2AuthDevices.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    if (showZwaveSecureS2UnauthenticatedDevices) {
      log('---------------------------------------------')
      log('Z-Wave secure (S2) Unauthenticated devices:');
      log(zwaveS2Unauth.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    if (showZwaveBatteryDevices) {
      log('---------------------------------------------')
      log('Z-Wave battery devices:');
      log(zwaveBatteryDevices.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    if (showZwaveUnreachableNodes) {
      log('---------------------------------------------')
      log('Unreachable nodes:');
      log('Node ID:', result.zw_state.noAckNodes.sort((a, b) => a - b).join('\r\nNode ID: '));
      log('---------------------------------------------')
    }

    if (showZwaveUnknownNodes) {
      log('---------------------------------------------')
      log('Unknown nodes:');
      log('Node ID:', unknownNodes.join('\r\nNode ID: '));
      log('---------------------------------------------')
    }
    
    log(zwave, 'Z-Wave nodes', '(' + zwaveSx + ' Unsecure, ' + zwaveS0 + ' Secure (S0), ' + zwaveS2Auth + ' Secure (S2 Authenticated), ' + zwaveS2Unauth + ' Secure (S2 Unauthenticated), ' + zwaveRouter + ' router, ' + zwaveBattery + ' battery, ' + result.zw_state.noAckNodes.length + ' unreachable, ' + unknownNodes.length + ' Unknown node(s))')
  })
  .catch(() => log('Failed: Getting Z-Wave State'));

await Homey.zigBee.getState()
  .then(result => {
    let zigbeeDevices = [], router = 0, routerDevices = [], endDevice = 0, endDevices = [];

    Object.keys(result.nodes).forEach(function(key) {
      zigbeeDevices.push(result.nodes[key].name);

      if (result.nodes[key].type === 'Router') {
        router++;
        routerDevices.push(result.nodes[key].name);
      }
      if (result.nodes[key].type === 'EndDevice') {
        endDevice++;
        endDevices.push(result.nodes[key].name);
      }
    });

    if (showZigbeeNodes) {
      log('---------------------------------------------')
      log('ZigBee nodes:');
      log(zigbeeDevices.join('\r\n'));
      log('---------------------------------------------')
    }

    if (showZigbeeRouter) {
      log('---------------------------------------------')
      log('ZigBee routers:');
      log(routerDevices.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    if (showZigbeeEndDevice) {
      log('---------------------------------------------')
      log('ZigBee end devices:');
      log(endDevices.sort((a, b) => a - b).join('\r\n'));
      log('---------------------------------------------')
    }

    allDevices += Object.keys(result.nodes).length;
    log(Object.keys(result.nodes).length, 'Zigbee nodes', '(' + router + ' router, ' + endDevice + ' end device)');
  })
  .catch(() => log('Failed: Getting ZigBee State'));

log(allDevices, 'Total devices')

return 'Overview finished';
13 Likes

My Result with v1.5: (Don’t have better logic installed so it will not be shown)

--------------- Homey Pro Overview v1.5 --------------
Homey name: AVA
Homey version: 8.1.3
Homey model: Homey Pro (Early 2019) (2 core(s))
Uptime: 55408 (15 hours, 23 minutes, 28 seconds)
Update available: None

------------------ Main ---------------------
2 Users (1 owner, 1 manager(s), 0 user(s), 0 guest(s))
44 Apps (6 SDKv2, 38 SDKv3, 2 updateable, 0 disabled/crashed)
37 Zones
5 Notifications (Timeline)
87 Logic Variables (23 boolean (yes/no), 56 number, 8 string)
410 Flows (1 broken, 2 disabled)
135 Advanced flows (0 broken, 3 disabled)
16 HomeyScript scripts (0 tokens/tags)

----------------- Devices -------------------
27 Virtual devices
0 Infrared (database) devices
69 Other devices
73 Z-Wave nodes (52 Unsecure, 12 Secure (S0), 3 Secure (S2 Authenticated), 6 Secure (S2 Unauthenticated), 34 router, 39 battery, 8 unreachable, 4 Unknown node(s))
49 Zigbee nodes (41 router, 8 end device)
218 Total devices

———————————————————
:white_check_mark: Script Success
:leftwards_arrow_with_hook: Returned: “Overview finished”

1 Like

Nice and useful overview, thanks!

--------------- Homey Pro Overview --------------

Homey name: Homey

Homey version: 8.1.3

Homey model: Homey Pro (Early 2019) (2 core(s))

Uptime: 904206 (10 days, 11 hours, 10 minutes, 6 seconds)

Update available: None

------------------ Main ---------------------

3 Users (1 owner, 1 user(s), 1 guest(s))

30 Apps (6 SDKv2, 24 SDKv3, 6 updateable, 0 disabled/crashed)

17 Zones

1145 Notifications

26 Variables (17 boolean (yes/no), 0 number, 9 string)

5 Flows (0 broken, 0 disabled)

67 Advanced flows (0 broken, 5 disabled)

----------------- Devices -------------------

28 Z-Wave nodes (17 router, 2 battery, 1 unreachable)

16 Zigbee nodes (16 router, 0 end device)

17 Virtual devices

0 Infrared (database) devices

32 Other devices

93 Total devices

———————————————————
:white_check_mark: Script Success

:leftwards_arrow_with_hook: Returned: “Overview finished”

1 Like

--------------- Homey Pro Overview --------------

Homey name: Homey Pro van Gerner 26
Homey version: 8.1.3
Homey model: Homey Pro (Early 2019) (2 core(s))
Uptime: 289579 (3 days, 8 hours, 26 minutes, 19 seconds)
Update available: None

------------------ Main ---------------------

2 Users (1 owner, 1 manager(s), 0 user(s), 0 guest(s))
37 Apps (2 SDKv2, 35 SDKv3, 0 updateable, 0 disabled/crashed)
18 Zones
162 Notifications
27 Variables (2 boolean (yes/no), 21 number, 4 string)
69 Flows (0 broken, 8 disabled)
42 Advanced flows (0 broken, 5 disabled)
Failed: Getting HomeyScript Tokens

----------------- Devices -------------------

1 Virtual devices
0 Infrared (database) devices
51 Other devices
11 Z-Wave nodes (5 Unsecure, 0 Secure (S0), 2 Secure (S2 Authenticated), 4 Secure (S2 Unauthenticated), 6 router, 5 battery, 0 unreachable, 1 Unknown node(s))
42 Zigbee nodes (23 router, 19 end device)
105 Total devices

———————————————————
:white_check_mark: Script Success
:leftwards_arrow_with_hook: Returned: “Overview finished”

1 Like

Ok how do you have that many notifications they should be capped at 100 :joy:

They are capped at 1 month I think, latest one is Feb 10 19:13…

No they are capped at 100 when did you last reboot Homey? Around Feb 10?

Nice!!! Thanks!

Q: About variables, I assume Better Logic and HomeyScript variables aren’t included?
A: Now they are :wink:


UPDATED v1.4

--------------- Homey Pro Overview v1.4 --------------
Homey name: 1.HomeyPro Peter
Homey version: 8.1.3
Homey model: Homey Pro (Early 2019) (2 core(s))
Uptime: 949684 (10 days, 23 hours, 48 minutes, 4 seconds)
Update available: None

------------------ Main ---------------------
3 Users (1 owner, 1 manager(s), 0 user(s), 1 guest(s))
---------------------------------------------
SDKv2 apps:
Marantz
Homey Community Store
WebOS Plus
< group >
HTTP request flow cards
PaperTrails Log
---------------------------------------------
44 Apps (6 SDKv2, 38 SDKv3, 0 updateable, 6 disabled/crashed)
55 Zones
162 Notifications
261 Variables (35 boolean (yes/no), 142 number, 84 string)
601 Flows (9 broken, 111 disabled)
72 Advanced flows (15 broken, 25 disabled)
160 HomeyScript scripts (297 tokens)
3 Better Logic Variables (0 boolean (yes/no), 0 number, 3 string)

----------------- Devices -------------------
134 Virtual devices
0 Infrared (database) devices
175 Other devices
0 Z-Wave nodes
0 Zigbee nodes
309 Total devices

———————————————————
✅ Script Success
↩️ Returned: "Overview finished"

I had 700+ flow notifications once :stuck_out_tongue:

Ah, I didn’t even think of these, but those aren’t currently included indeed, not sure how easy it would be to include this.

A didn’t even see this one :joy: that should be an easy fix (edit: fixed)

1 Like

No, 10 days ago

--------------- Homey Pro Overview --------------

Homey name: Home

Homey version: 8.1.3

Homey model: Homey Pro (Early 2019) (2 core(s))

Uptime: 529 (8 minutes, 49 seconds)

Update available: None

------------------ Main ---------------------

5 Users (1 owner, 0 manager(s), 1 user(s), 3 guest(s))

38 Apps (3 SDKv2, 35 SDKv3, 1 updateable, 0 disabled/crashed)

26 Zones

31 Notifications

7 Variables (3 boolean (yes/no), 3 number, 1 string)

101 Flows (1 broken, 19 disabled)

11 Advanced flows (0 broken, 1 disabled)

----------------- Devices -------------------

16 Z-Wave nodes (8 router, 0 battery, 3 unreachable)

0 Zigbee nodes (0 router, 0 end device)

6 Virtual devices

0 Infrared (database) devices

131 Other devices

153 Total devices

——————————————————— ✅ Script Success

↩️ Returned: "Overview finished"

--------------- Homey Pro Overview v1.4 --------------

Homey name: Homey Pro
Homey version: 8.1.3
Homey model: Homey Pro (Early 2019) (2 core(s))
Uptime: 597031 (6 days, 21 hours, 50 minutes, 31 seconds)
Update available: None

------------------ Main ---------------------
2 Users (1 owner, 0 manager(s), 1 user(s), 0 guest(s))


SDKv2 apps:
ABUS
NEO Coolcam
HTTP request flow cards
Homey Community Store


Updateable apps:


Disabled apps:
HTTP request flow cards
UnZ-Cure
MQTT Hub
MQTT Client


45 Apps (4 SDKv2, 41 SDKv3, 0 updateable, 4 disabled/crashed)
25 Zones
11 Notifications
149 Variables (54 boolean (yes/no), 90 number, 5 string)
266 Flows (6 broken, 114 disabled)
97 Advanced flows (0 broken, 20 disabled)
29 HomeyScript scripts (2 tokens)

----------------- Devices -------------------

20 Virtual devices
0 Infrared (database) devices
49 Other devices
78 Z-Wave nodes (72 Unsecure, 1 Secure (S0), 3 Secure (S2 Authenticated), 2 Secure (S2 Unauthenticated), 39 router, 39 battery, 1 unreachable, 0 Unknown node(s))
37 Zigbee nodes (19 router, 18 end device)
184 Total devices

———————————————————
:white_check_mark: Script Success
:leftwards_arrow_with_hook: Returned: “Overview finished”

Updated 12.03.23 with script v1.4

Lots of people have more Z-wave Node IDs then the router + battery devices (they should sum up to the same value) would indicate, and I’m curious why.

Anyone that has this willing to do some more “research”?
Please PM me or contact me on slack (caseda).

You’re right. I haven’t noticed it at all so far. I have counted and I come to 78 (without Homey). I will contact you on Slack.

-------------- Homey Pro Overview --------------

Homey name: Homey

Homey version: 8.1.3

Homey model: Homey (Early 2018) (1 core(s))

Uptime: 40939 (11 hours, 22 minutes, 19 seconds)

Update available: None

------------------ Main ---------------------

2 Users (1 owner, 0 manager(s), 1 user(s), 0 guest(s))

27 Apps (6 SDKv2, 21 SDKv3, 5 updateable, 0 disabled/crashed)

17 Zones

11 Notifications

1 Variables (1 boolean (yes/no), 0 number, 0 string)

129 Flows (1 broken, 12 disabled)

7 Advanced flows (0 broken, 4 disabled)

----------------- Devices -------------------

1 Z-Wave nodes (0 router, 0 battery, 0 unreachable)

5 Zigbee nodes (1 router, 4 end device)

15 Virtual devices

1 Infrared (database) devices

44 Other devices

66 Total devices

——————————————————— :white_check_mark: Script Success

:leftwards_arrow_with_hook: Returned: “Overview finished”

Nice to see. But I wonder; how to find the apps that are updatable?

in the top of the script there are several options you can turn on to show the names added to the overview, for updateable apps change this line:

const showUpdateableApps = false; // Names of Apps that can be updated

to

const showUpdateableApps = true; // Names of Apps that can be updated

And it will add the names to the overview of the apps that can be updated when you run (test) the script.

1 Like

Interesting enough my sum of router+battery+unreachable is way less than the total amount…

yeah, i’ve probably overlooked something with the code when i wrote that part long time ago… backtracing it all right now :sweat_smile:

(Deleted devices?)