Utan LUA-kunskap blir det jobbigt... men, ja uppdaterade scriptet så att den sätter en variabel med antalet som är online.Texan wrote:En funktion som jag kommer på är att kunna stänga/sätta på en lampa/enhet när en telefon blir synlig i nätet. Tyvärr så har jag ingen kunskap att få ihop en sådan lua scen, så om det är möjligt så vore jag tacksam.
(Du måste skapa variabeln som är definerad som sGlobalVariableName )
Sen är det hyffsat enkelt att använda block's och reagera på antalet online.
Code: Select all
local doDebug = true
local sStatusOnline = "Online"
local sStatusOffline = "Offline"
local sGlobalVariableName = "DevicesOnline"
local iSleepSeconds = 182
--local mySettings = json.decode( tostring( fibaro:getGlobalValue("set_IDs") ) )
msgDebug = function (color, message)
if doDebug then
fibaro:debug("<span style='color: " .. color .. "'>" .. tostring(message) .. "</span>")
end
end
tableLength = function (T)
local c = 0
for _ in pairs(T) do
c = c + 1
end
return c
end
-- ------------------------------------------------------------------------------------------------------------------------
labels = {}
msgDebug("Orange", "Calling HC2 API for labels on device " .. tostring(fibaro:getSelfId()) )
local http = Net.FHttp("127.0.0.1", 11111)
local sResponse, status, err = http:GET("/api/devices/" .. tostring(fibaro:getSelfId()))
local jsonResponse = json.decode(sResponse)
for rowIndex, rowData in pairs(jsonResponse.properties.rows) do
for buttonIndex, buttonData in pairs(rowData.elements) do
msgDebug("Yellow", "Found label: " .. jsonResponse.properties.rows[rowIndex].elements[buttonIndex].name .. " (" .. jsonResponse.properties.rows[rowIndex].elements[buttonIndex].caption .. ")")
labels[#labels+1] = jsonResponse.properties.rows[rowIndex].elements[buttonIndex].name
end
end
msgDebug("Orange", "Calling UniFi API on " .. fibaro:getValue(fibaro:getSelfId(), 'IPAddress') )
local http = Net.FHttp(fibaro:getValue(fibaro:getSelfId(), 'IPAddress'), fibaro:getValue(fibaro:getSelfId(), 'TCPPort'))
local sResponse = http:GET("/unifi/")
local jsonResponse = json.decode(sResponse)
local jsonLength = tableLength(jsonResponse)
iOnline = 0
for p in pairs(labels) do
msgDebug("Black", "")
local label = labels[p]
sLabel = "ui." .. label .. ".value"
msgDebug("White", "Check device with label: " .. label)
sValue = os.date("%Y-%m-%d %H:%M:%S") .. " / " .. sStatusOffline
bOnline = false
for r = 1, jsonLength do
if (label == string.gsub("lbl" .. jsonResponse[r].mac, ":", "") ) then
msgDebug("Green", "Online: " .. jsonResponse[r].mac .. " / " .. jsonResponse[r].name )
sValue = tostring(os.date("%Y-%m-%d %H:%M:%S")) .. " / " .. sStatusOnline
bOnline = true
iOnline = iOnline + 1
end
end
sCurrentValue = fibaro:getValue(fibaro:getSelfId(), sLabel)
msgDebug("Orange", "Label, current value = " .. sCurrentValue)
if bOnline then
if string.find(sCurrentValue, sStatusOnline) then
msgDebug("Gray", "Allready " .. sStatusOnline .. " status... no update!")
else
msgDebug("Yellow", sLabel .. " = " .. sValue)
fibaro:call(fibaro:getSelfId(), "setProperty", sLabel, sValue)
end
else
if string.find(sCurrentValue, sStatusOffline) then
msgDebug("Gray", "Allready " .. sStatusOffline .. " status... no update!")
else
msgDebug("Yellow", sLabel .. " = " .. sValue)
fibaro:call(fibaro:getSelfId(), "setProperty", sLabel, sValue)
end
end
end
msgDebug("Green", tostring(iOnline) .. " devices online, setting variable " .. sGlobalVariableName)
fibaro:setGlobal(sGlobalVariableName, iOnline)
-- ------------------------------------------------------------------------------------------------------------------------
msgDebug("Orange", "Done! Sleeping " .. tostring(iSleepSeconds) .. " seconds")
fibaro:sleep(iSleepSeconds * 1000)