Dagens hem är full av enheter som kan övervakas på ett eller annat sätt.
Denna LUA kod och virtuella enhet håller koll på om en mobiltelefon är aktiv i routerns DHCP tabell. I exemplet använder jag mig utav en router med DD-WRT firmware och har en “offline” tid på 30min innan någon ej betraktas som hemma längre.

check_home

Krav:
Variabler (kan givetvis bytas namn på) – wifiJonny, LastSeenJonny, Status
lastseenVar statusVar wifiVar

Virtuell enhet med lua kod i knappen

-- START USER SETTINGS --
-- DD-WRT user and password for login
user = "user";
pwd = "password";
-- MAC address to search for
deviceMAC = "xx:xx:xx:xx:xx:xx";-- Predefined variable name
globalVar = "wifiJonny";
lastseenVar = "LastSeenJonny";
statusVar = "Status";
-- value 1 and value 2 of predefined variable
txtOnline = "Hemma";
txtOffline = "Borta";
-- END USER SETTINGS --
-- DO NOT CHANGE FROM HERE --
selfId = fibaro:getSelfId();
ip = fibaro:get(selfId, 'IPAddress');
port = fibaro:get(selfId, 'TCPPort');
router = Net.FHttp(ip, port);
router:setBasicAuthentication(user,pwd);
response, status, errorCode = router:GET("/Status_Lan.asp")
if(string.find(response, deviceMAC)) then
 fibaro:setGlobal(globalVar, txtOnline);
 fibaro:setGlobal(lastseenVar,os.date(os.time()))
 fibaro:setGlobal(statusVar, "Hemma");
else
 fibaro:setGlobal(globalVar, txtOffline);
end
fibaro:call(thismodule, "setProperty", "currentIcon", 205)

Main loop:

local LastSeenJonny = 0+fibaro:getGlobal("LastSeenJonny");
local LastSeenMona = 0+fibaro:getGlobal("LastSeenMona");
local AbsenceTime = 30 --30 minutes
local AbsenceTime = os.time() - (AbsenceTime * 60)

if tonumber(LastSeenMona) < AbsenceTime and tonumber(LastSeenJonny) < AbsenceTime then
 if fibaro:getGlobal("Status") ~= "Borta" then
 fibaro:setGlobal("Status", "Borta")
 fibaro:debug("Ingen hemma längre")
 end
end
fibaro:sleep(17*1000)

För att få ut namnen på vilka personer som är hemma så kan man göra detta via en scen som uppdaterar den virtuella enhetens “Hemma” rad
who


--[[
%% properties

%% globals
--]]

users = {{name="Jonny", state = function() return fibaro:getGlobalValue("wifiJonny") end } ,
 {name="Mona",state = function() return fibaro:getGlobalValue("wifiMona") end } ,
 {name="Sofia",state = function() return fibaro:getGlobalValue("wifiSofia") end } ,
 {name="Sandra",state = function() return fibaro:getGlobalValue("wifiSandra") end } ,
 {name="Tijn",state = function() return fibaro:getGlobalValue("wifiTijn") end } ,
 {name="Dries", state = function() return fibaro:getGlobalValue("wifiDries") end } }

local bufReport ={}

for i=1,#users do 

 if (users[i].state() ~= "Borta") then
 table.insert(bufReport, users[i].name)
 end

end

--fibaro:debug(table.concat(bufReport , ', '))
tmp = table.concat(bufReport , ', ')
fibaro:call(34, "setProperty", 'ui.lblHome.value', tmp)
local thismodule = 34

if
 tmp ~= ""
then
 fibaro:call(thismodule, "setProperty", "currentIcon", 205)
else

 fibaro:call(thismodule, "setProperty", "currentIcon", 206)
end