Danke dir Jeep…sehr schönes Tool
Hallo zusammen,
das Script läuft jetzt fehlerfrei bis zur Version 4.150.
--[[
%% properties
--]]
-- file: Device-inventory.lua
-- version: 0.1.7
-- Works with version up to 4.150
-- 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.7"
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')
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 == '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")
users = api.get("/users")
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
Hallo Jeep, Habs gerade mit der 4.5.10 probiert, dort bekomm ich leider einige Fehler:
[DEBUG] 15:08:54: Sun Aug 5 15:08:54 2018, Version: 0.1.6
[DEBUG] 15:08:54: [1;31m2018-08-05 15:08:54.954867 [ error] API: Not found
[DEBUG] 15:08:54: [1;31m2018-08-05 15:08:54.960705 [ error] API: Not found
[DEBUG] 15:08:54: [1;31m2018-08-05 15:08:54.963422 [ error] API: Not found
[DEBUG] 15:08:54: [1;31m2018-08-05 15:08:54.972440 [ error] API: Not found
Ist das nur bei mir so??
Eigenartig ist, dass die Debug Meldungen danach trotzdem ausgegeben werden !?
Hab mir übrigens schon vor dem Update in der letzten Version eine Funktion eingebaut die zusätzlich ein Email schickt!
Vielleicht magst du es in die aktuelle Version einbauen
einfach in Zeile 72 (deines aktuellen Skriptes)
fibaro:call(2, "sendEmail", "Fibaro-Info - Geräte Inventur",""…#rooms …" - Räume in "…#sections…" Bereichen \n"…bdev + nbdev…" - Geräte sind insgesamt installiert\n"…nbdev…" - Geräte mit Stromversorgung und\n"…bdev…" - batteriebetriebene Geräte\n"…#scenes…" - Szenen (auch versteckte)\n"…users…" - Benutzer\n"…iosdev… " - Samartphones\n"…cam… " - Kameras\n"…#plugins… " - Plugins\n"…#vdevices… " - virtuelle Geräte\n"…#gvars… " - globale Variablen\n\n")
einbauen …
@pblacky
2 Posts weiter oben, ist die 0.1.7, die sollte diesem Fehler mit der FW 4.510 nicht mehr aufweisen.
Hi pblacky,
habe Deinen Vorschlag (fast) 1 zu 1 umgesetzt. Hab nur noch eine Variable eingefügt für den Fall das jemand keine E-Mail haben will.
Changelog für Version 0.1.8
– Möglichkeit die Ausgabe an der Admin Email Adresse zu senden.
--[[
%% properties
--]]
-- file: Device-inventory.lua
-- version: 0.1.8
-- Works with version up to 4.150
-- 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.8"
local oldnodeId = nil ;
local colour1 = 'lightgreen'
local colour2 = 'orange'
local adminmail = false -- | true
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')
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 == '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")
users = api.get("/users")
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)
if adminmail then
fibaro:call(2, "sendEmail", "Fibaro-Info - Geräte Inventur",""
..#rooms .." - Räume in "..#sections.." Bereichen \n"
..bdev + nbdev.." - Geräte sind insgesamt installiert\n"
..nbdev.." - Geräte mit Stromversorgung und\n"
..bdev.." - batteriebetriebene Geräte\n"
..#scenes.." - Szenen (auch versteckte)\n"
..#users.." - Benutzer\n"..iosdev.. " - Samartphones\n"
..cam.. " - Kameras\n"
..#plugins.. " - Plugins\n"
..#vdevices.. " - virtuelle Geräte\n"
..#gvars.. " - globale Variablen\n\n")
end
end --function
local startSource = fibaro:getSourceTrigger();
if (startSource["type"] == "other") then
checkDevices()
end
Hi Jeep,
Hatte vorher eh die 0.1.7 probiert, diese Version machte die API Fehler!
Ich habe die 0.1.8 nun versucht, auch dort habe ich die API-Fehler, bei der FW 4.510.
Vielleicht kann das jemand außer mir mit der aktuellen Firmware Version nachvollziehen?
laut forum von fibaro selber ist das ein Fehler im System.
das script läuft zwar durch aber es kommt trotzdem immer wieder die API-Fehler meldung
@pblacky,
kein Stress, habe auf meinem Testsystem nur ein paar devices, konnte den Fehler deshalb nicht vollständig erkennen. Eigentlich warten wir alle das Fibaro diesen BUG (den es ist einer seit den 4.5xx betas) fixt.
Die Leute im Fibaro Forum (incl. me) sind schon stinksauer wegen diesem Fehler ohne Zeilenangabe und das ist nicht mal der schlimmste Fehler in dieser Version.
Hi pblacky,
da ich vermute das Fibaro so schnell keinen Fix für “API: not found” liefern wird, habe ich einen Teil des Scripts umgebaut. Ich hoffe der Fehler ist weg.
Bitte Testen.
--[[
%% properties
--]]
-- file: Device-inventory.lua
-- version: 0.1.9
-- Works with version up to 4.150
-- 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.9"
local oldnodeId = nil ;
local colour1 = 'lightgreen'
local colour2 = 'orange'
local adminmail = false -- | true
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
devices = fibaro:getDevicesId({interfaces ={"battery"},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')
if batteryLevel ~= nil and batteryLevel ~= '' then
if oldnodeId ~= nodeId then
bdev = bdev+1;
end
oldnodeId = nodeId
end
end --for
local alldev = 0
local dev = api.get('/devices')
for _,p in pairs(dev) do
if p.parentId == 1 then
alldev = alldev +1
end
end
nbdev = alldev - bdev
-- 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 == '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")
users = api.get("/users")
separator = '------------------------------------------------'
Debug('green','Here is your HC2 device list:')
Debug(colour1, separator)
Debug(colour1, alldev .. ' 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)
if adminmail then
fibaro:call(2, "sendEmail", "Fibaro-Info - Geräte Inventur",""
..#rooms .." - Räume in "..#sections.." Bereichen \n"
..bdev + nbdev.." - Geräte sind insgesamt installiert\n"
..nbdev.." - Geräte mit Stromversorgung und\n"
..bdev.." - batteriebetriebene Geräte\n"
..#scenes.." - Szenen (auch versteckte)\n"
..#users.." - Benutzer\n"..iosdev.. " - Samartphones\n"
..cam.. " - Kameras\n"
..#plugins.. " - Plugins\n"
..#vdevices.. " - virtuelle Geräte\n"
..#gvars.. " - globale Variablen\n\n")
end
end --function
local startSource = fibaro:getSourceTrigger();
if (startSource["type"] == "other") then
checkDevices()
end
Hallo zusammen,
hatte in der letzen Version die Mailausgabe nicht berücksichtigt. Durch die massive Änderung am script musste das auch angepasst werden. Beim Batteriecheck script wird es noch ein wenig dauern, oder Fibaro ist schneller.
Changelog für Version 0.2.0
– Keine API Fehler mehr
– Bug beim Mailversand gefixt.
--[[
%% properties
--]]
-- file: Device-inventory.lua
-- version: 0.2.0
-- Works with version up to 4.150
-- 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.2.0"
local oldnodeId = nil ;
local colour1 = 'lightgreen'
local colour2 = 'orange'
local adminmail = true -- | Wenn true wird eine Mail an den admin Benutzer geschickt
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
devices = fibaro:getDevicesId({interfaces ={"battery"},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 );
Debug('cyan', 'Gathering device data...')
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
end
end --for
local alldev = 0
local dev = api.get('/devices')
for _,p in pairs(dev) do
if p.parentId == 1 then
alldev = alldev +1
end
end
nbdev = alldev - bdev
-- 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 == '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")
users = api.get("/users")
separator = '------------------------------------------------'
Debug('green','Here is your HC2 device list:')
Debug(colour1, separator)
Debug(colour1, alldev .. ' 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)
if adminmail then
fibaro:call(2, "sendEmail", "Fibaro-Info - Geräte Inventur",""
..#rooms .." - Räume in "..#sections.." Bereichen \n"
..alldev.." - Geräte sind insgesamt installiert\n"
..nbdev.." - Geräte mit Stromversorgung und\n"
..bdev.." - batteriebetriebene Geräte\n"
..#scenes.." - Szenen (auch versteckte)\n"
..#users.." - Benutzer\n"..iosdev.. " - Samartphones\n"
..cam.. " - Kameras\n"
..#plugins.. " - Plugins\n"
..#vdevices.. " - virtuelle Geräte\n"
..#gvars.. " - globale Variablen\n\n")
end
end --function
local startSource = fibaro:getSourceTrigger();
if (startSource["type"] == "other") then
checkDevices()
end
Hi @jeep
Dankle für die rasche Problemlösung, dein Skript V 0.2.0 funktioniert hervorragend mit der 4.5.x Firmware!
Hi Jeep,
Ich hatte heute mal wieder das Problem, dass ein Türsensor sich ohne - mir ersichtlichen-Grund verabschiedet hatte. Kein großes Problem, neu eingebunden, Szenen angepasst, läuft.
Also habe ich mich auf die Suche nach einem VD/Script gemacht, das regelmässig alle Devices etc listet und mich warnt wenn es Veränderungen gegeben hat. Hab noch nichts passendes gefunden und dachte mir das man Deine Szene hier entsprechend weiterentwickeln könnte. Meine Idee wäre den Output Deiner Szene in einer globalen Variablen abzulegen und bei der nächsten Ausführung der Szene die Ergebnisse zu vergleichen. Leider sind meine eigenen Fähigkeiten im Umgang mit Arrays sehr bescheiden, aber vielleicht hat ja jemand hier im Forum Lust das umzusetzen… oder kennt eine schon vorhandene Lösung zur Prüfung der Vollständigkeit von Devices.
Grüße
Lodi
Hi Lodi,
Das battery check script von jeep müsste eigentlich das sein was du brauchts. Dort wird auch der “last breached” gelistet also letzte Reaktion. Teste es mal an.
Hi Ändy,
Danke für den Tipp. Manchmal sieht man den wald vor lauter Bäumen nicht. Den battery check habe ich schon seit einiger Zeit laufen und das “last breached” Attribut ist natürlich genau das was ich brauche. Einzig würde ich die komplett verlorenen Devices dort nicht so schnell erkennen. Aber das kommt zum Glück ja nicht allzu häufig vor.
Grüße
Lodi
…habs gerade noch mal laufen lassen und gleich noch einen anderen Übeltäter gefunden. Window Sensor im Gästebad hatte seit Tagen keinen breach. Kurz Batterie raus und wieder rein und siehe da nun hat es 255% --> also leer.
Ich denke ich muss mir also meinen täglichen Batterie Report etwas genauer ansehen. Hab seit ein paar Wochen alles nett mit InfluxDB und Grafan grafisch aufbereitet und dachte darüber geht mir nix mehr durch die Lappen…
Hier noch mal ein herzliches “Danke Schön” an Jeep für seine tollen Skripte.
Gruß
Alex