Device inventory script

Dieses Script ist ein Abfallprodukt des Batterie check scripts von hier: (https://www.siio.de/board/thema/und-noch-ein-batterie-check-scipt/page/7/#post-79063)
Da es eher gedacht ist um sporadisch ausgeführt zu werden, hat es kein Autostart und muss manuell angestoßen werden. Der Output sieht dann ungefähr so aus:

[DEBUG] 10:45:45: Sun Aug 27 10:45:45 2017, Version: 0.1.0
[DEBUG] 10:45:46: Here is your HC2 device list:
[DEBUG] 10:45:46: --------------------------------------------------
[DEBUG] 10:45:46: 24 Batterie devices
[DEBUG] 10:45:46: 45 Non batterie devices
[DEBUG] 10:45:46: 9 Virtual devices
[DEBUG] 10:45:46: 3 HC2 Users
[DEBUG] 10:45:46: 6 iOS/Android devices
[DEBUG] 10:45:46: 6 Plugins in use.
[DEBUG] 10:45:46: -------------------------------------------------

Wer also schon immer wissen wollte, wieviel von welchen Geräten in seinem HC2 vorhanden sind, braucht in Zukunft nicht mehr zu zählen. :wink:

--[[
%% properties
--]]

-- file: Device-inventory.lua 
-- version: 0.1.0
-- purpose:This script shows the device inventory and prints the output to 
-- the debug window.
-- Click the Start button to run the script.
-- Copyleft 08-2017 {jeep}

local sourceTrigger = fibaro:getSourceTrigger();
local version   = "0.1.0"
local oldnodeId = nil ;

Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

devices = fibaro:getDevicesId({visible = true, enabled = true, isPlugin =false })

function checkDevices() 
  local vdev   = 0;
  local bdev   = 0;
  local users  = 0;
  local iosdev = 0;
  local nbdev   = 0;
  local plugins = 0;
  local x = 0; 
  
  Debug('withe', os.date('%c')..', Version: '.. version );
  for id = 1, #devices do
    local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
    local nodeId       = fibaro:get(devices[id], 'nodeId') 
    if batteryLevel ~= nil and batteryLevel ~= '' then  
        if oldnodeId ~= nodeId then
           bdev = bdev+1;
        end 
       oldnodeId = nodeId
    else
       local dtype  = fibaro:getType(devices[id])
       if (dtype == 'virtual_device') or (dtype == 'HC_user') or (dtype == 'iOS_device') then  
          x=x+1
       else 
          nbdev = nbdev+1
       end 
       if (dtype == 'virtual_device') then
          vdev = vdev +1   
         elseif (dtype == 'HC_user') then  
          users = users+1; 
         elseif (dtype == 'iOS_device') then
          iosdev = iosdev+1;
       end 
    end  
  end  
 devices = fibaro:getDevicesId({ enabled = true, visible = true, isPlugin =true })
for id = 1, #devices do
    plugins = plugins+1
 end   
 
  separator = '--------------------------------------------------'
  Debug('withe','Here is your HC2 device list:')
  Debug('withe', separator)
  Debug('withe', bdev ..' Batterie devices')
  Debug('withe', nbdev ..' Non batterie devices')
  Debug('withe', vdev ..' Virtual devices')
  Debug('withe', users ..' HC2 Users')
  Debug('withe', iosdev ..' iOS/Android devices')
  Debug('withe', plugins .. ' Plugins in use.')
  Debug('withe', separator)
  
end  

local startSource = fibaro:getSourceTrigger(); 
if (startSource["type"] == "other")	then
   checkDevices()
end  

Hallo Jeep, danke für dieses “Abfallprodukt” :wink:
Läuft gut!
Es zählt offensichtlich auch nur die “wirklichen” Devices und nicht dopplete Einträge von Komponenten die sich mehrfach darstellen.
Hab ich das so richtig beobachtet?

Hi pblacky,

ja, stimmt genau, so hab ich das script aufgebaut. Es soll ja eine reale Inventarliste erstellt werden.

Nur ein kleines Update, keine Funktionsänderungen in dieser Version, nur unnötigen code entfernt.

Changelog für 0.1.1:
– Unnötige for schleife entfernt.

--[[
%% properties
--]]

-- file: Device-inventory.lua 
-- version: 0.1.1
-- purpose:This script shows the device inventory and prints the output to 
-- the debug window.
-- Click the Start button tu run the script.
-- Copyleft 08-2017 {jeep}

local sourceTrigger = fibaro:getSourceTrigger();
local version   = "0.1.1"
local oldnodeId = nil ;

Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

devices = fibaro:getDevicesId({visible = true, enabled = true, isPlugin =false })

function checkDevices() 
  local vdev   = 0;
  local bdev   = 0;
  local users  = 0;
  local iosdev = 0;
  local nbdev   = 0;
  local x = 0; 
  
  Debug('withe', os.date('%c')..', Version: '.. version );
  for id = 1, #devices do
    local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
    local nodeId       = fibaro:get(devices[id], 'nodeId') 
    if batteryLevel ~= nil and batteryLevel ~= '' then  
        if oldnodeId ~= nodeId then
           bdev = bdev+1;
        end 
       oldnodeId = nodeId
    else
       local dtype  = fibaro:getType(devices[id])
       if (dtype == 'virtual_device') or (dtype == 'HC_user') or (dtype == 'iOS_device') then  
          x=x+1
       else 
          nbdev = nbdev+1
       end 
       if (dtype == 'virtual_device') then
          vdev = vdev +1   
         elseif (dtype == 'HC_user') then  
          users = users+1; 
         elseif (dtype == 'iOS_device') then
          iosdev = iosdev+1;
       end 
    end  
  end  --for
 devices = fibaro:getDevicesId({ enabled = true, visible = true, isPlugin =true })
  
  separator = '--------------------------------------------------'
  Debug('green','Here is your HC2 device list:')
  Debug('withe', separator)
  Debug('withe', bdev ..' Batterie devices')
  Debug('withe', nbdev ..' Non batterie devices')
  Debug('withe', vdev ..' Virtual devices')
  Debug('withe', users ..' HC2 Users')
  Debug('withe', iosdev ..' iOS/Android devices')
  Debug('withe', #devices .. ' Plugins in use.')
  Debug('withe', separator)
  
end  -- function

local startSource = fibaro:getSourceTrigger(); 
if (startSource["type"] == "other")	then
   checkDevices()
end

Hätte nie gedacht das ich da noch ein update machen werde.
Jetzt wird auch die Anzahl der Szenen ausgegeben.

--[[
%% properties
--]]

-- file: Device-inventory.lua 
-- version: 0.1.2
-- purpose:This script shows the device inventory and prints the output to 
-- the debug window.
-- Click the Start button tu run the script.
-- Copyleft 08-2017 {jeep}

local sourceTrigger = fibaro:getSourceTrigger();
local version   = "0.1.2"
local oldnodeId = nil ;

Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

devices = fibaro:getDevicesId({visible = true, enabled = true, isPlugin =false })

function checkDevices() 
  local vdev   = 0;
  local bdev   = 0;
  local users  = 0;
  local iosdev = 0;
  local nbdev  = 0;
  --local plugins = 0;
  local x = 0; 
  
  Debug('withe', os.date('%c')..', Version: '.. version );
  for id = 1, #devices do
    local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
    local nodeId       = fibaro:get(devices[id], 'nodeId') 
    if batteryLevel ~= nil and batteryLevel ~= '' then  
        if oldnodeId ~= nodeId then
           bdev = bdev+1;
        end 
       oldnodeId = nodeId
    else
       local dtype  = fibaro:getType(devices[id])
       if (dtype == 'virtual_device') or (dtype == 'HC_user') or (dtype == 'iOS_device') then  
          x=x+1
       else 
          nbdev = nbdev+1
       end 
       if (dtype == 'virtual_device') then
          vdev = vdev +1   
         elseif (dtype == 'HC_user') then  
          users = users+1; 
         elseif (dtype == 'iOS_device') then
          iosdev = iosdev+1;
       end 
    end  
  end  --for
 devices = fibaro:getDevicesId({ enabled = true, visible = true, isPlugin =true })
 scenes  = api.get("/scenes")
 
  separator = '--------------------------------------------------'
  Debug('green','Here is your HC2 device list:')
  Debug('withe', separator)
  Debug('withe', bdev ..' Batterie devices')
  Debug('withe', nbdev ..' Non batterie devices')
  Debug('withe', vdev ..' Virtual devices')
  Debug('withe', users ..' HC2 Users')
  Debug('withe', iosdev ..' iOS/Android devices')
  Debug('withe', #devices .. ' Plugins in use.')
  Debug('withe', #scenes .. ' Scenes, including hidden scenes.')
  Debug('withe', separator)
    
end  -- function

local startSource = fibaro:getSourceTrigger(); 
if (startSource["type"] == "other")	then
   checkDevices()
end

Super, danke für das Update @jeep

Danke auch von mir. Funktioniert.
Ich habe übrigens 0 HC2 Users. Kann das sein?

Ja, ich denke Du hast nur einen Admin User und sonst keine weiteren Benutzer. Der Admin wird nicht mitgezählt.
Bitte Info sollte meine Vermutung falsch sein.

100% richtig! Danke :slight_smile:

Da fehlte doch noch was. Genau, die VDs. :wink:
Mit dieser Version wird auch die Anzahl der VDs ermittelt.

--[[
%% properties
--]]

-- file: Device-inventory.lua 
-- version: 0.1.3
-- purpose:This script shows the device inventory and prints the output to 
-- the debug window.
-- Click the Start button tu run the script.
-- Copyleft 08-2017 {jeep}

local sourceTrigger = fibaro:getSourceTrigger();
local version   = "0.1.2"
local oldnodeId = nil ;

Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

devices = fibaro:getDevicesId({visible = true, enabled = true, isPlugin =false })

function checkDevices() 
  local vdev   = 0;
  local bdev   = 0;
  local users  = 0;
  local iosdev = 0;
  local nbdev  = 0;
  --local plugins = 0;
  local x = 0; 
  
  Debug('withe', os.date('%c')..', Version: '.. version );
  for id = 1, #devices do
    local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
    local nodeId       = fibaro:get(devices[id], 'nodeId') 
    if batteryLevel ~= nil and batteryLevel ~= '' then  
        if oldnodeId ~= nodeId then
           bdev = bdev+1;
        end 
       oldnodeId = nodeId
    else
       local dtype  = fibaro:getType(devices[id])
       if (dtype == 'virtual_device') or (dtype == 'HC_user') or (dtype == 'iOS_device') then  
          x=x+1
       else 
          nbdev = nbdev+1
       end 
       if (dtype == 'virtual_device') then
          vdev = vdev +1   
         elseif (dtype == 'HC_user') then  
          users = users+1; 
         elseif (dtype == 'iOS_device') then
          iosdev = iosdev+1;
       end 
    end  
  end  --for
 plugins  = fibaro:getDevicesId({ enabled = true, visible = true, isPlugin =true })
 vdevices = fibaro:getDevicesId({ enabled = true, visible = true, type="virtual_device" })
 scenes   = api.get("/scenes")
 
  separator = '--------------------------------------------------'
  Debug('green','Here is your HC2 device list:')
  Debug('withe', separator)
  Debug('withe', bdev ..' Batterie devices')
  Debug('withe', nbdev ..' Non batterie devices')
  Debug('withe', vdev ..' Virtual devices')
  Debug('withe', users ..' HC2 Users')
  Debug('withe', iosdev ..' iOS/Android devices')
  Debug('withe', #plugins .. ' Plugins in use.')
  Debug('withe', #vdevices .. ' VDs in use.' )
  Debug('withe', #scenes .. ' Scenes, including hidden scenes.')
  Debug('withe', separator)
    
end  -- function

local startSource = fibaro:getSourceTrigger(); 
if (startSource["type"] == "other")	then
   checkDevices()
end

Hallo zusammen,
heute ist Patchday. Die Anzahl der Globalen Variablen wird jetzt auch angezeigt.

--[[
%% properties
--]]

-- file: Device-inventory.lua 
-- version: 0.1.2
-- purpose:This script shows the device inventory and prints the output to 
-- the debug window.
-- Click the Start button tu run the script.
-- Copyleft 08-2017 - 2018  {jeep}

local sourceTrigger = fibaro:getSourceTrigger();
local version   = "0.1.3"
local oldnodeId = nil ;

Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

devices = fibaro:getDevicesId({visible = true, enabled = true, isPlugin =false })

function checkDevices() 
  local vdev   = 0;
  local bdev   = 0;
  local users  = 0;
  local iosdev = 0;
  local nbdev  = 0;
  --local plugins = 0;
  local x = 0; 
  
  Debug('withe', os.date('%c')..', Version: '.. version );
  for id = 1, #devices do
    local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
    local nodeId       = fibaro:get(devices[id], 'nodeId') 
    if batteryLevel ~= nil and batteryLevel ~= '' then  
        if oldnodeId ~= nodeId then
           bdev = bdev+1;
        end 
       oldnodeId = nodeId
    else
       local dtype  = fibaro:getType(devices[id])
       if (dtype == 'virtual_device') or (dtype == 'HC_user') or (dtype == 'iOS_device') then  
          x=x+1
       else 
          nbdev = nbdev+1
       end 
       if (dtype == 'virtual_device') then
          vdev = vdev +1   
         elseif (dtype == 'HC_user') then  
          users = users+1; 
         elseif (dtype == 'iOS_device') then
          iosdev = iosdev+1;
       end 
    end  
  end  --for
 plugins  = fibaro:getDevicesId({ enabled = true, visible = true, isPlugin =true })
 vdevices = fibaro:getDevicesId({ enabled = true, visible = true, type="virtual_device" })
 scenes   = api.get("/scenes")
 gvars    = api.get("/globalVariables") 
 
  separator = '--------------------------------------------------'
  Debug('green','Here is your HC2 device list:')
  Debug('withe', separator)
  Debug('withe', bdev ..' Batterie devices')
  Debug('withe', nbdev ..' Non batterie devices')
  Debug('withe', vdev ..' Virtual devices')
  Debug('withe', users ..' HC2 Users')
  Debug('withe', iosdev ..' iOS/Android devices')
  Debug('withe', #plugins .. ' Plugins in use.')
  Debug('withe', #vdevices .. ' VDs in use.' )
  Debug('withe', #scenes .. ' Scenes, including hidden scenes.')
  Debug('withe', #gvars .. ' Global variables.')
  Debug('withe', separator)
end  -- function

local startSource = fibaro:getSourceTrigger(); 
if (startSource["type"] == "other")	then
   checkDevices()
end

Hi @Jeep
Du bist heute in Programmierlaune, wie es aussieht :wink:
Werde es gleich einspielen und testen!

Die Version sollte 0.1.4 sein, oder hab ich da bei mir was falsch archiviert?

Hi pblacky,
stimmt, Du hast recht, das hab ich übersehen. Werde es beim nächsten Update berücksichtigen. :wink:

Habs gerade ausprobiert, funktioniert super!!
Hab auf meiner Kiste schon 72 Szenen drauf, ist faszinierend wie schnell das “lebt” :wink:

Vielen Dank @jeep. Läuft…

Hallo zusammen,

wie ich sehe wird dieses einfache script doch recht häufig genutzt. Habe noch die Räume und Bereiche hinzugefügt.
Aber dass ist jetzt wohl das letzte Update (man soll bekanntlich nie Nie sagen), aber mehr kann man aus der API nicht rausholen.

--[[
%% properties
--]]

-- file: Device-inventory.lua 
-- version: 0.1.5
-- purpose:This script shows the device inventory and prints the output to 
-- the debug window.
-- Click the Start button tu run the script.
-- Copyleft 08-2017 - 2018  {jeep}

local sourceTrigger = fibaro:getSourceTrigger();
local version   = "0.1.5"
local oldnodeId = nil ;
local colour1   = 'lightgreen'
local colour2   = 'orange'

Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

devices = fibaro:getDevicesId({visible = true, enabled = true, isPlugin =false })

function checkDevices() 
  local vdev   = 0;
  local bdev   = 0;
  local users  = 0;
  local iosdev = 0;
  local nbdev  = 0;
  --local plugins = 0;
  local x = 0; 
  
  Debug('withe', os.date('%c')..', Version: '.. version );
  for id = 1, #devices do
    local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
    local nodeId       = fibaro:get(devices[id], 'nodeId') 
    if batteryLevel ~= nil and batteryLevel ~= '' then  
        if oldnodeId ~= nodeId then
           bdev = bdev+1;
        end 
       oldnodeId = nodeId
    else
       local dtype  = fibaro:getType(devices[id])
       if (dtype == 'virtual_device') or (dtype == 'HC_user') or (dtype == 'iOS_device') then  
          x=x+1
       else 
          nbdev = nbdev+1
       end 
       if (dtype == 'virtual_device') then
          vdev = vdev +1   
         elseif (dtype == 'HC_user') then  
          users = users+1; 
         elseif (dtype == 'iOS_device') then
          iosdev = iosdev+1;
       end 
    end  
  end  --for
 plugins  = fibaro:getDevicesId({ enabled = true, visible = true, isPlugin =true })
 vdevices = fibaro:getDevicesId({ enabled = true, visible = true, type="virtual_device" })
 scenes   = api.get("/scenes")
 gvars    = api.get("/globalVariables") 
 rooms    = api.get("/rooms") 
 sections = api.get("/sections")
  local colour = 'orange' 
  separator = '------------------------------------------------'
  Debug('green','Here is your HC2 device list:')
  Debug(colour1, separator)
  Debug(colour2, bdev ..' Batterie devices')
  Debug(colour2, nbdev ..' Non batterie devices')
  Debug(colour2, vdev ..' Virtual devices')
  Debug(colour2, users ..' HC2 Users')
  Debug(colour2, iosdev ..' iOS/Android devices')
  Debug(colour2, #plugins .. ' Plugins in use.')
  Debug(colour2, #vdevices .. ' VDs in use.' )
  Debug(colour2, #scenes .. ' Scenes, including hidden scenes.')
  Debug(colour2, #gvars .. ' Global variables.')
  Debug(colour2, 'There are '..#rooms ..' rooms  in '..#sections.. ' sections.')   
  Debug(colour1, separator)
end  -- function

local startSource = fibaro:getSourceTrigger(); 
if (startSource["type"] == "other")	then
   checkDevices()
end

Toll, danke @jeep!!!

@jeep: Das Script ist echt super.
Vielen lieben Dank. Echt klasse. Ich mag Statistiken.

Hi Ihr Liebhaber von Statistiken :wink:
War gerade auf der Suche nach einem Virtuellen Timer Device und habe dabei im Fibaro Forum ein interessantes Skript gefunden:
https://forum.fibaro.com/files/file/10-device-list-and-status/
Habs gerade ausprobiert, ist extrem umfangreich und funktioniert komplett ohne Parameter!

Muss doch noch ein Update nachschieben. Neben der Ausgabe von IP-Kameras, habe ich noch einen Fehler bei der Ausgabe der physikalischen Geräte entdeckt.
Das ist jetzt korrigiert, wer will darf gerne seine devices nachzählen.

Changelog für Version 0.1.6
– Bugfix, Anzahl der physikalischen Geräte ist jetzt korrekt.
– Anzahl Ip_Cams wird ausgegeben.

--[[
%% properties
--]]

-- file: Device-inventory.lua 
-- version: 0.1.6
-- purpose:This script shows the device inventory and prints the output to 
-- the debug window.
-- Click the Start button tu run the script.
-- Copyleft 08-2017 - 2018  {jeep}

local sourceTrigger = fibaro:getSourceTrigger();
local version   = "0.1.6"
local oldnodeId = nil ;
local colour1   = 'lightgreen'
local colour2   = 'orange'

Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

devices = fibaro:getDevicesId({parentId = 1, enabled = true, isPlugin = false })
function checkDevices() 
  local vdev, bdev, users, iosdev, nbdev, cam = 0,0,0,0,0,0;
  Debug('withe', os.date('%c')..', Version: '.. version );
  for id = 1, #devices do
     local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
     local nodeId       = fibaro:get(devices[id], 'nodeId') 
      dname         = fibaro:get(devices[id], 'name')
     if batteryLevel ~= nil and batteryLevel ~= '' then  
         if oldnodeId ~= nodeId then
            bdev = bdev+1;
         end 
        oldnodeId = nodeId
     else
        nbdev = nbdev+1
     end  
  end  --for
  -- Count other devices 
  devices = fibaro:getDevicesId({visible = true, enabled = true, isPlugin = false }) 
  for id = 1, #devices do
      local dtype  = fibaro:getType(devices[id])
      if (dtype == 'HC_user') then
         users = users+1; 
        elseif (dtype == 'iOS_device') then
          iosdev = iosdev+1;
        elseif (dtype == "com.fibaro.ipCamera") then
          cam = cam+1;
      end  
  end --for
  
 plugins  = fibaro:getDevicesId({ enabled = true, visible = true, isPlugin = true })
 vdevices = fibaro:getDevicesId({ enabled = true, visible = true, type="virtual_device" })
 scenes   = api.get("/scenes")
 gvars    = api.get("/globalVariables") 
 rooms    = api.get("/rooms") 
 sections = api.get("/sections")
  separator = '------------------------------------------------'
  Debug('green','Here is your HC2 device list:')
  Debug(colour1, separator)
  Debug(colour1, bdev + nbdev .. ' Total physical Z-Wave devices.')
  Debug(colour2, nbdev ..' Non batterie devices.')
  Debug(colour2, bdev ..' Batterie devices.')
  Debug(colour2, users ..' HC2 Users.')
  Debug(colour2, iosdev ..' iOS/Android devices.')
  Debug(colour2, cam ..' ip Cameras.')  
  Debug(colour2, #plugins .. ' Plugins in use.')
  Debug(colour2, #vdevices .. ' VDs in use.' )
  Debug(colour2, #scenes .. ' Scenes, including hidden scenes.')
  Debug(colour2, #gvars .. ' Global variables.')
  Debug(colour2, 'There are '..#rooms ..' rooms  in '..#sections.. ' sections.')   
  Debug(colour1, separator)
 
end  --function

local startSource = fibaro:getSourceTrigger(); 
if (startSource["type"] == "other")	then
   checkDevices()
end

devlist.jpg