Ok ok, då är jag med..
Det var alltså när mina egna försök att debugga triggades av if-satserna som problemet uppstod.
Tanken var ju att försöka få ut debug utskrifter så jag vet exakt när Home blir Away.
(os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)) >= (delayShort * 60)) and ((w1+w2+w3+w4+w5+w6+w7+w8) < usage)
Om ovan båda påståenden blir true så ändras global variabel till Away.. Det jag inte riktigt förstår är tanken bakom delayShort * 60.
Låt säga att os.time är 12:00 och vi drar hemifrån.. a15 (PIR entrédörren) kommer då få senaste ModificationTime 12:00..
Om vi drar till med 1 timma senare så borde os.time - senaste tiden för modifikation vara 60 min..
w1-8 kommer vara avstängda och således vara mindre än usage lokala variabeln.
Mitt frågetecken är då delayShort (som i nuvarnde fall är 50) * 60.. Det ger 3000. Gissar att det inte är millisekunder..
När jag skriver ut lite info ser det ut så här:
fibaro:debug("TEST sov nere: "..tonumber(a1))
[DEBUG] 22:35:14: TEST sov nere: 1485033763
local a1 = fibaro:getModificationTime(7,'value') --Sovrum tak
[DEBUG] 22:35:14: Sovrumsbelysning ändrade värde: 22:22
Alltså är 22:22 = 1485033763.. Tänkte att ok, oavsett hur den räknar eller vilket format det är så borde nuvarande tid - senast ändrade tid >= 3000 resultera i true/false..
Vilket det säkert gör, men skulle ju vilja veta exakt hur lång tid kommer det ta innan variabeln ändras till Away..
För att ytterligare snurra till det så har jag några fler tonumber exempel..
Tid vid körning av raden 22:24
1485033845 = 22:24
1485033763 = 22:18
1485039422 21:10
1485030360 21:26
Det konstiga är att 21:10 är större än 22:24..
Sen kanske detta är en återvändsgränd jag är och snurrar i
men vill inte ge upp.. Måste ju greppa detta nångång.
Btw, här är hela koden.. Underlättar kanske.
Code: Select all
--[[
%% autostart
%% properties
%% events
%% globals
--]]
while true do
local delayShort = 50
local delayLong = 340
local usage = 30 --watt
local a1 = fibaro:getModificationTime(7,'value') --Sovrum tak
local a2 = fibaro:getModificationTime(15,'value') --Klk nere tak
local a3 = fibaro:getModificationTime(23,'value') --Toa nere tak
local a4 = fibaro:getModificationTime(31,'value') --Tvättstuga tak
local a5 = fibaro:getModificationTime(39,'value') --Groventré
local a6 = fibaro:getModificationTime(27,'value') --Entre tak
local a7 = fibaro:getModificationTime(35,'value') --kök
local a8 = fibaro:getModificationTime(43,'value') --Vard.rum vägg
local a9 = fibaro:getModificationTime(162,'value') --Matbord
local a10 = fibaro:getModificationTime(80,'value') --Ebba tak
local a11 = fibaro:getModificationTime(92,'value') --Leah tak
local a12 = fibaro:getModificationTime(100,'value') --Toa uppe tak
local a13 = fibaro:getModificationTime(114,'value') --Halltak uppe gång
local a14 = fibaro:getModificationTime(63,'value') --Kontor tak
local a15 = fibaro:getModificationTime(194,'value') --rörelse entré
local a16 = fibaro:getModificationTime(188,'value') --rörelse öv
local w1 = fibaro:getValue(80, "power") --Ebba tak
local w2 = fibaro:getValue(92, "power") --Leah tak
local w3 = fibaro:getValue(162, "power") --Matbord
local w4 = fibaro:getValue(7, "power") --Sovrum tak
local w5 = fibaro:getValue(27, "power") --Entré tak
local w6 = fibaro:getValue(35, "power") --kök
local w7 = fibaro:getValue(43, "power") --Vard.rum vägg
local w8 = fibaro:getValue(114, "power") --Halltak uppe gång
fibaro:debug("TEST sov nere: "..tonumber(a1))
fibaro:debug("TEST klk nere: "..tonumber(a2))
fibaro:debug("TEST toa: "..tonumber(a3))
fibaro:debug("TEST tvätt: "..tonumber(a4))
fibaro:debug("TEST PIR ö.v: "..tonumber(a16))
fibaro:debug("Sovrumsbelysning ändrade värde: "..os.date("%H:%M",a1))
fibaro:debug("Klädkammare nere ändrade värde: "..os.date("%H:%M",a2))
fibaro:debug("Toalett nere ändrade värde: "..os.date("%H:%M",a3))
fibaro:debug("Tvättstuga ändrade värde: "..os.date("%H:%M",a4))
fibaro:debug("Groventré tak ändrade värde: "..os.date("%H:%M",a5))
fibaro:debug("Entré ändrade värde: "..os.date("%H:%M",a6))
fibaro:debug("Köksbelysning ändrade värde: "..os.date("%H:%M",a7))
fibaro:debug("Vardagsrum vägg ändrade värde: "..os.date("%H:%M",a8))
fibaro:debug("Matbord ändrade värde: "..os.date("%H:%M",a9))
fibaro:debug("Ebbas rum ändrade värde: "..os.date("%H:%M",a10))
fibaro:debug("Leahs rum ändrade värde: "..os.date("%H:%M",a11))
fibaro:debug("Toalett uppe ändrade värde: "..os.date("%H:%M",a12))
fibaro:debug("Halltak uppe gång ändrade värde: "..os.date("%H:%M",a13))
fibaro:debug("Kontor ändrade värde: "..os.date("%H:%M",a14))
fibaro:debug("Rörelsedetektor entré noterade rörelse: "..os.date("%H:%M",a15))
fibaro:debug("Rörelsedetektor ö.v noterade rörelse: "..os.date("%H:%M",a16))
fibaro:debug("Watt: "..(w1+w2+w3+w4+w5+w6+w7+w8))
if
(fibaro:getGlobalValue("TimeOfDay") == "Day")
then
if
(os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)) >= (delayShort * 60)) and ((w1+w2+w3+w4+w5+w6+w7+w8) < usage)
then --borta
if
(fibaro:getGlobalValue("PresentState") == "Home")
then
--fibaro:debug(((os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)) >= (delayShort * 60))))
fibaro:debug("Borta")
fibaro:debug(((os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)) .." min")))
fibaro:setGlobal("PresentState", "Away");
else
fibaro:debug("Borta")
end
else --fortfarande hemma
if
(fibaro:getGlobalValue("PresentState") == "Away")
then
fibaro:debug("Hemma")
fibaro:setGlobal("PresentState", "Home");
else
fibaro:debug("Hemma")
fibaro:debug(((os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)))/ 30) .." mins")
end
end
else
if
(os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)) >= (delayLong * 30)) --and ((w1+w2+w3+w4+w5+w6+w7+w8) < usage)
then --borta
if
(fibaro:getGlobalValue("PresentState") == "Home")
then
fibaro:debug("Borta")
fibaro:setGlobal("PresentState", "Away");
else
fibaro:debug("Borta")
fibaro:debug(((os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)))/ 30) .." min")
end
else --fortfarande hemma
if
(fibaro:getGlobalValue("PresentState") == "Away")
then
fibaro:debug("Hemma")
fibaro:setGlobal("PresentState", "Home");
else
fibaro:debug("Hemma")
fibaro:debug(((os.time() -(math.max(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)))/ 30) .." min")
end
end
end
fibaro:sleep(15000);
end
Förresten det går inte ändra så att senaste raden kommer överst i debug loggen? Drygt att skrolla till botten hela tiden.
Iof har ju sina fördelar oxå..