Glömt att ta min medicin!

Post Reply
MrKlint
Ny medlem
Posts: 2
Joined: 23 Oct 2016, 18:33
7

Hejsan,

Har en låda med en Fibaro dörr-/fönstersensor.
En global variabel, MedicinVar som har värdet 0.
Jag ska ta min medicin morgon och kväll och om jag då öppnar lådan sätts MedicinVar till 1:
Medicinlåda_aktivera.png
Om jag missat att ta min medicin klockan 8:00 eller klockan 20:00, MedicinVar är fortfarande 0, så ska ett mail skickas. Har två scenes, en för morgon och en för kväll.

(Detta är blockkod konverterat till LUA då jag försöker lära mig.) :-)

Code: Select all

--[[
%% autostart
%% properties
%% events
%% globals
MedicinVar
--]]

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(fibaro:getGlobalValue("MedicinVar")) == tonumber("0") )
and
 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 
 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) 
 and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "20:00") )
)
then
-- Send an email to the email address associated with user 2.
	local subject = "Ta din medicin 20:00"
	local message = "Du har glömt att ta din medicin igen.\nDet är viktigt att du gör det."
	fibaro:call(2, "sendEmail", subject, message)
	
end

setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(fibaro:getGlobalValue("MedicinVar")) == tonumber("0") )
and
 ( (currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4
 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) )
or
startSource["type"] == "other"
)
then
-- fibaro:call(2, "sendDefinedEmailNotification", "4");
-- Send an email to the email address associated with user 2.
	local subject = "Ta din medicin 20:00"
	local message = "Du har glömt att ta din medicin igen.\nDet är viktigt att du gör det  ;-)"
	fibaro:call(2, "sendEmail", subject, message)
end

end
Hitintills funkar allt.

Klockan 04:00 och 16:00 nollställs MedicinVar till 0 igen. Detta funkar också bra.
MedicinVarNoll.png
Det som är problemet är att det skickas mail även när MedicinVar nollställs. På något sätt aktiveras även script:en som skickar mail, LUA-koden, även fast det måste vara 20:00 (eller 08:00) för att det ska kunna köras.

Om någon har lust att hjälpa mig vore jag mycket tacksam, skönt att slippa mina epilepsianfall bara för att man är en slarver ;-)

Tack för hjälpen!
MrKlint
Ny medlem
Posts: 2
Joined: 23 Oct 2016, 18:33
7

Jag tror jag lyckats hitta felet/anledningen. LUA-koden efter raden setTimeout(tempFunc, 60*1000) har ingen tid-specifikation i if-satsen. Jag förstår inte vad denna del av koden gör, ser ju bara ut att vara kopia av det den övre delen, men eftersom den if-satsen bara går på dagar och MedicinVar ska vara 0 så aktiveras denna del av koden och mail skickas.

Kan jag lägga till

Code: Select all

and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "20:00")
även här eller varför behövs denna del?

//Mattias
Post Reply