Page 2 of 3
Re: Scene: Online/Offline via UniFi controller
Posted: 21 Nov 2017, 08:48
by riro
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.
Utan LUA-kunskap blir det jobbigt... men, ja uppdaterade scriptet så att den sätter en variabel med antalet som är online.
(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)
Re: Scene: Online/Offline via UniFi controller
Posted: 21 Nov 2017, 08:50
by riro
Typ så här:
Re: Scene: Online/Offline via UniFi controller
Posted: 22 Nov 2017, 01:38
by Texan
Tackar!
Re: Scene: Online/Offline via UniFi controller
Posted: 25 Nov 2017, 17:07
by Robert
Up and running nu. Tack
Du skulle inte vilja utveckla scriptet lite? Hade varit trevligt om man kunde få en variabel för varje enhet.
Kanske inte för alla men för dom man vill ha. Då kan man starta scener och annat beroende på status om något är online eller offline.
Re: Scene: Online/Offline via UniFi controller
Posted: 26 Nov 2017, 23:35
by Robert
Hur kommer det sig att main loopen inte fungerar? Har jag missat något?
Den fungerar endast när jag sparar VD:n manuellt eller öppnar main loop debug fönstret och låter den gå.
Re: Scene: Online/Offline via UniFi controller
Posted: 29 Nov 2017, 09:24
by riro
Robert wrote:Hur kommer det sig att main loopen inte fungerar? Har jag missat något?
Den fungerar endast när jag sparar VD:n manuellt eller öppnar main loop debug fönstret och låter den gå.
Låter ju riktigt konstigt om den fungerar med debug-fönstret uppe men inte utan det... det fönstret ska (!?) inte göra någon skillnad mer än att debug-meddelanden skrivs ut.
Hur menar du med att den fungerar när du sparar manuellt?
Re: Scene: Online/Offline via UniFi controller
Posted: 29 Nov 2017, 18:01
by Robert
Ändrar jag t.ex ip-adressen och skriver tillbaka samma igen och klickar på spara så uppdaterar den scriptet i main.
Re: Scene: Online/Offline via UniFi controller
Posted: 01 Dec 2017, 07:51
by riro
Robert wrote:Ändrar jag t.ex ip-adressen och skriver tillbaka samma igen och klickar på spara så uppdaterar den scriptet i main.
Varje gång den har kört så somnar scriptet in i ungefär 3 minuter innan den gör något igen... kanske kan ha något med saken att göra?
Re: Scene: Online/Offline via UniFi controller
Posted: 04 Dec 2017, 22:36
by Robert
Har varit där och ändrat också. Både sänkt tiden samt tagit bort raden helt.
Funderar på om det kan ha något med denna rad.
[ERROR] 21:35:24: line 40: Expected value but found invalid token at character 1
Jag får den inte alltid. Kör server på en Windows burk med Win 10. Rättigheter finns där. Dock känns det som att den täpper till dom då och då.
Får forska vidare.
Re: Scene: Online/Offline via UniFi controller
Posted: 05 Dec 2017, 23:15
by Robert
Får bort felmeddelandet om jag tar bort en siffra från ip-numret och lägger till den igen samt sparar om VDn. Då rullar den på som vanligt igen men slutar att köras efter några timmar.
Re: Scene: Online/Offline via UniFi controller
Posted: 06 Dec 2017, 00:08
by Texan
Tyvärr kan jag inte hjälpa till speciellt mycket.
Allt fungerar klockrent för mig. Jag köpte mig en Raspberry Pi och installerad Unifi controller på den, fungerar tok bra.
Re: Scene: Online/Offline via UniFi controller
Posted: 08 Dec 2017, 11:11
by riro
Robert wrote:Får bort felmeddelandet om jag tar bort en siffra från ip-numret och lägger till den igen samt sparar om VDn. Då rullar den på som vanligt igen men slutar att köras efter några timmar.
Mysko... men om/när den ger upp, vad svarar webben då?
Det är ju långt från ordentlig felhantering i scriptet... så svarar webben fel så dör den.
För mer debug (kan nog generera en hel del skräp) kan man skicka ut allt i sResponse i debug-fönstret... typ så här (runt rad 40 i koden):
Code: Select all
local jsonResponse = json.decode(sResponse)
msgDebug("Red", sResponse) -- Alltså den här raden som ska läggas till :)
local jsonLength = tableLength(jsonResponse)
Re: Scene: Online/Offline via UniFi controller
Posted: 25 Dec 2017, 09:43
by riro
Då min också dog nu så har jag lagt till lite simpel felhantering...
Code: Select all
local doDebug = true
local sStatusOnline = "Online"
local sStatusOffline = "Offline"
local sGlobalVariableName = "DevicesOnline"
local iSleepSeconds = 182
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/")
if string.len(sResponse) >= 100 then
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)
else
msgDebug("Red", "API response to short... aborting!")
msgDebug("Gray", "API response: " .. sResponse)
msgDebug("Black", "")
end
-- ------------------------------------------------------------------------------------------------------------------------
msgDebug("Orange", "Done! Sleeping " .. tostring(iSleepSeconds) .. " seconds")
fibaro:sleep(iSleepSeconds * 1000)
Re: Scene: Online/Offline via UniFi controller
Posted: 25 Dec 2017, 22:44
by Robert
Vad hände?
Jag la till din nya kod. Vad säger denna rad?
Code: Select all
msgDebug("Red", "API response to short... aborting!")
Fick den innan jag uppdaterade scriptet som vanligt, dvs tog bort en siffra från IP och la till igen och sparade om. Då försvann det.
Re: Scene: Online/Offline via UniFi controller
Posted: 03 Jan 2018, 17:28
by riro
Den raden kommer man till om PHP-sidan returnerar något som är kortare än 100 tecken (då har något gått snett)
Re: Scene: Online/Offline via UniFi controller
Posted: 04 Jan 2018, 09:01
by Bamsefar
Jag har en variant för UniFi också, om någon behöver någon annan variant så att säga. Jag har två system hemma, ett ASUS baserat (CheckIfHome osv) och sedan en pfSense/UniFi baserad som har en variant på CheckIfHome. Så om någon behöver något så kanske jag kan bidra
Re: Scene: Online/Offline via UniFi controller
Posted: 05 Jan 2018, 00:23
by Robert
Nu kör jag iof inte pfSense. Hittade aldrig någon bra hårdvara så det blev en EdgeRouter istället för min Asus. Men om den endast körs på UniFi så är jag intresserad
Kör detta script nu men det fungerar endast en kort stund. Sen behöver scriptet uppdateras manuellt eller en omstart av HC2 för att fungera igen.
Bamsefar wrote:Jag har en variant för UniFi också, om någon behöver någon annan variant så att säga. Jag har två system hemma, ett ASUS baserat (CheckIfHome osv) och sedan en pfSense/UniFi baserad som har en variant på CheckIfHome. Så om någon behöver något så kanske jag kan bidra
Re: Scene: Online/Offline via UniFi controller
Posted: 05 Jan 2018, 20:26
by Texan
Bamsefar wrote:Jag har en variant för UniFi också, om någon behöver någon annan variant så att säga. Jag har två system hemma, ett ASUS baserat (CheckIfHome osv) och sedan en pfSense/UniFi baserad som har en variant på CheckIfHome. Så om någon behöver något så kanske jag kan bidra
Alltid trevligt när det postas sceners vi kan ta del av. Så jag är intresserad av pfSense/UniFi varianten.
Re: Scene: Online/Offline via UniFi controller
Posted: 05 Jan 2018, 23:50
by Robert
Texan wrote:
Alltid trevligt när det postas sceners vi kan ta del av. Så jag är intresserad av pfSense/UniFi varianten.
Bamsefar har redan lagt upp den. Sök på pfSense så hittar du scriptet
Skickat från min ZTE A2017G via Tapatalk
Re: Scene: Online/Offline via UniFi controller
Posted: 09 Jan 2018, 21:05
by Bamsefar
Det hade jag glömt - att jag redan lagt upp den alltså
Times Flies when you're having fun eller något liknande!