Hej
Jag funderar om man kan få fram värdet som visas i b.l.a iPad appen när hur länge sedan senaste rörelse?
Senaste rörelse
Jag tror man kan få tag i senaste när en händelse, vilken som helst, triggades. Men om det bara är rörelse, eller temperaturförändring eller något annat vet jag inte rakt av...
Code: Select all
fibaro:debug("Senaste händelse: "..fibaro:getValue(114, "timeStamp"))
Last edited by Bamsefar on 20 Mar 2015, 09:40, edited 1 time in total.
Reason: La till liten LUA kod...
Reason: La till liten LUA kod...
Testar Home Assistant på Raspberry Pi4B - nice
-
- Medlem
- Posts: 44
- Joined: 02 Mar 2015, 17:01
- 9
- Location: Uppsala
i iPad appen så visar den tiden då någon av rörelse eller dörr sensorerna var triggad. Tänkte det vore snyggt om man kunde snappa upp det värdet utan att behöva fråga varje sensor. Sedan kunde man typ basera det på om någon är hemma eller inte
Inte såvitt jag vet - det är lite udda, man kan slå på t.ex. alarmet från web gränssnittet (eller appen antar jag) - men motsvarande funktion går inte att komma åt via LUA / JSON... Då får man loopa över alla enheter och den vägen per enhet larma på/av - suck...
Testar Home Assistant på Raspberry Pi4B - nice
Code: Select all
fibaro:debug("Last breached:"..os.date("%H:%M:%S",fibaro:getValue(221, "lastBreached")))
lite mer info
Code: Select all
elapsedTime = os.difftime(fibaro:getValue(221, "lastBreached"),os.time())
telapsedTime = string.sub(elapsedTime,2) -- don't want the - value.
nHours = string.format("%02.f", math.floor(telapsedTime/3600));
nMins = string.format("%02.f", math.floor(telapsedTime/60 - (nHours*60)));
nSecs = string.format("%02.f", math.floor(telapsedTime - nHours*3600 - nMins *60));
if nHours == "00" then
fibaro:debug("Last breach was "..nMins.." minutes and "..nSecs.." seconds ago")
elseif nHours ~= "00" then
fibaro:debug("Last breach was "..nHours.." hours and"..nMins.." minutes and "..nSecs.." seconds ago")
end
Ser ju jättefint ut - men är det en odokumenterad "egenskap" i Fibaro's Motion sensor? Skälet till att jag frågar är att i 3.590 (som jag kör) så finns inte ens det valet...jompa68 wrote:Code: Select all
fibaro:debug("Last breached:"..os.date("%H:%M:%S",fibaro:getValue(221, "lastBreached")))
Testar Home Assistant på Raspberry Pi4B - nice
-
- Medlem
- Posts: 44
- Joined: 02 Mar 2015, 17:01
- 9
- Location: Uppsala
Men man måste då loopa igen alla dörr och rörelse sensorer som man vill ha och sedan visa den som var breached senast. Local variablar i scriptet id:n för sensorer och tiden för senaste rörelse. Och om värdet för senaste rörelse är t.ex över 60 min sätta en variabel till typ Movement = True/False. Hur skulle du enklast göra det?jompa68 wrote:lite mer info
Code: Select all
elapsedTime = os.difftime(fibaro:getValue(221, "lastBreached"),os.time()) telapsedTime = string.sub(elapsedTime,2) -- don't want the - value. nHours = string.format("%02.f", math.floor(telapsedTime/3600)); nMins = string.format("%02.f", math.floor(telapsedTime/60 - (nHours*60))); nSecs = string.format("%02.f", math.floor(telapsedTime - nHours*3600 - nMins *60)); if nHours == "00" then fibaro:debug("Last breach was "..nMins.." minutes and "..nSecs.." seconds ago") elseif nHours ~= "00" then fibaro:debug("Last breach was "..nHours.." hours and"..nMins.." minutes and "..nSecs.." seconds ago") end
Här är en komplett lösning för motion sensors
Code: Select all
--[[
%% properties
%% globals
--]]
startFunc = function()
mDevicesbl = {}
local httpClient = net.HTTPClient();
httpClient:request('http://127.0.0.1:11111/api/devices', {
success = function(resp)
local devices = json.decode(resp.data)
for i, v in pairs(devices) do
if v.baseType == "com.fibaro.motionSensor" then
table.insert(mDevicesbl,v.id)
end
end
motionDevFunc()
end,
error = function(err)
print('error = ' .. err)
end,
options = {
method = 'GET'
}
})
end
motionDevFunc = function()
for i = 1,#mDevicesbl do
deviceItems = mDevicesbl[i];
elapsedTime = os.difftime(fibaro:getValue(deviceItems, "lastBreached"),os.time())
telapsedTime = string.sub(elapsedTime,2) -- don't want the - value.
nHours = string.format("%02.f", math.floor(telapsedTime/3600));
nMins = string.format("%02.f", math.floor(telapsedTime/60 - (nHours*60)));
nSecs = string.format("%02.f", math.floor(telapsedTime - nHours*3600 - nMins *60));
if nHours == "00" then
fibaro:debug("Last breach was "..nMins.." minutes and "..nSecs.." seconds ago")
elseif nHours ~= "00" then
fibaro:debug("More then 1hour since last breach")
--fibaro:setGlobal("Movement", "True")
fibaro:debug("Last breach was "..nHours.." hours and "..nMins.." minutes and "..nSecs.." seconds ago")
end
end
end
startFunc()
-
- Medlem
- Posts: 44
- Joined: 02 Mar 2015, 17:01
- 9
- Location: Uppsala
Super Tack.
Funkar kanon. Men kan man även få med "com.fibaro.doorSensor" ?
Funkar kanon. Men kan man även få med "com.fibaro.doorSensor" ?
Code: Select all
--[[
%% properties
%% globals
--]]
startFunc = function()
mDevicesbl = {}
local httpClient = net.HTTPClient();
httpClient:request('http://127.0.0.1:11111/api/devices', {
success = function(resp)
local devices = json.decode(resp.data)
for i, v in pairs(devices) do
if v.baseType == "com.fibaro.motionSensor" or v.baseType == "com.fibaro.doorWindowSensor" then
table.insert(mDevicesbl,v.id)
end
end
motionDevFunc()
end,
error = function(err)
print('error = ' .. err)
end,
options = {
method = 'GET'
}
})
end
motionDevFunc = function()
for i = 1,#mDevicesbl do
deviceItems = mDevicesbl[i];
elapsedTime = os.difftime(fibaro:getValue(deviceItems, "lastBreached"),os.time())
telapsedTime = string.sub(elapsedTime,2) -- don't want the - value.
nHours = string.format("%02.f", math.floor(telapsedTime/3600));
nMins = string.format("%02.f", math.floor(telapsedTime/60 - (nHours*60)));
nSecs = string.format("%02.f", math.floor(telapsedTime - nHours*3600 - nMins *60));
if nHours == "00" then
fibaro:debug("Last breach was "..nMins.." minutes and "..nSecs.." seconds ago")
elseif nHours ~= "00" then
fibaro:debug("More then 1hour since last breach of id:"..fibaro:getName(deviceItems))
fibaro:debug("Last breach was "..nHours.." hours and "..nMins.." minutes and "..nSecs.." seconds ago")
end
end
end
startFunc()
Jag var ute i samma ärende för ett tag sen men gjorde istället en scen som triggas av någon av de sensorer jag är intresserad av. Scenen lagrar när och var i globala variabler som sen visas upp i en virtuell enhet.
Två globala variabler latestMotion och latestMotionID.
En scen (byt förstås ut till egna enhetsid:n under properties-delen):
En virtuell enhet med en label lblLatestMotion och en main loop:
Det är en ganska användbar lösning då man i scenen kan lägga in t.ex. att en scen ska köras om det är rörelse i ett visst rum samt att virtuella enhetens main loop kan användas till att köra funktioner om det inte varit rörelse i huset på ett tag.
/CQ1
Två globala variabler latestMotion och latestMotionID.
En scen (byt förstås ut till egna enhetsid:n under properties-delen):
Code: Select all
--[[
%% properties
268 value
265 value
286 value
271 value
274 value
277 value
280 value
283 value
296 value
299 value
%% globals
--]]
if (fibaro:countScenes() > 1) then fibaro:abort() end
local trigger = fibaro:getSourceTrigger();
local sensorID = trigger["deviceID"];
local currentTime=tonumber(os.time());
if (tonumber(fibaro:getValue(sensorID, "value")) == 1 ) then
fibaro:setGlobal("latestMotion", currentTime);
fibaro:setGlobal("latestMotionID", sensorID);
end;
Code: Select all
local latestMotion = tonumber(fibaro:getGlobalValue("latestMotion"));
local latestMotionID = fibaro:getGlobalValue("latestMotionID");
local ct = tonumber(os.time());
local diff = math.floor((ct - latestMotion)/(60));
local room = fibaro:getRoomNameByDeviceID(latestMotionID);
local selfID = fibaro:getSelfId();
fibaro:call(selfID, "setProperty", "ui.lblLatestMotion.value", diff .. " min sedan i " .. room);
fibaro:sleep(1000*60*1);
/CQ1
-
- Medlem
- Posts: 44
- Joined: 02 Mar 2015, 17:01
- 9
- Location: Uppsala
CQ1 wrote:Jag var ute i samma ärende för ett tag sen men gjorde istället en scen som triggas av någon av de sensorer jag är intresserad av. Scenen lagrar när och var i globala variabler som sen visas upp i en virtuell enhet.
Två globala variabler latestMotion och latestMotionID.
En scen (byt förstås ut till egna enhetsid:n under properties-delen):
/CQ1
Hej
Jag får detta när jag kör scenen.
[ERROR] 18:46:40: Runtime error: /opt/fibaro/FibaroSceneAPI.lua:91: attempt to concatenate local 'deviceId' (a nil value)
Vad kan det vara för fel?
-
- Medlem
- Posts: 44
- Joined: 02 Mar 2015, 17:01
- 9
- Location: Uppsala
Tack.
Funkar så klart, skulle kanske förstått det
Funkar så klart, skulle kanske förstått det
Hade det inte varit himla trevligt om fibaro lagt in en sida med grafer eller tidslinjer i gränssnittet. Skulle vilja ha mina rörelsesensorer representerade som vars en linje med synliga pulser när de triggats. Alternativt kinde datan presenteras som olikfärgade flashar på tidslinjen. Linjen bör då vara zoombar.
Nåja, detta kanske kommer i version 6.2
Skickat från min iPad med Tapatalk
Nåja, detta kanske kommer i version 6.2
Skickat från min iPad med Tapatalk