Page 1 of 1

45 minuers timer

Posted: 05 Nov 2021, 20:20
by MickeS
Hej,

Önskar en scen när man trycker på Play i appen på en scen så ska det räknas ner 45 minuter sen stängas av

Får inte till det i Block scenen.

Re: 45 minuers timer

Posted: 06 Nov 2021, 10:04
by MickeS
Skärmklipp.PNG
Denna har jag gjort, men den slår ifrån efter några sekunder.
Kanske är för att den är Överlastad ?

Re: 45 minuers timer

Posted: 07 Nov 2021, 17:22
by MickeS
Löste sig med att lägga in en Auto OFF med 45 minuter på brytaren istället för en Scen.

Enkel och billig lösning :)

Re: 45 minuers timer

Posted: 07 Nov 2021, 19:25
by RH_Dreambox
Men mer ekonomiskt och miljövänligt hade det varit att använda en temperaturstyrd motorrvärmare :-)
https://www.zwaveforum.se/viewtopic.php ... are#p21677

Re: 45 minuers timer

Posted: 15 Nov 2021, 23:43
by MickeS
Smart och bra.
Är frun som ska havsörnarna och olika tider varje morgon.
Detta kmr bli för mkt 🥳

Re: 45 minuers timer

Posted: 22 Nov 2021, 22:26
by MickeS
Nääädu MR DreamBox...

denna försökte man sig på men gick bet trots all info i tråden :)


RH_Dreambox wrote: 07 Nov 2021, 19:25 Men mer ekonomiskt och miljövänligt hade det varit att använda en temperaturstyrd motorrvärmare :-)
https://www.zwaveforum.se/viewtopic.php ... are#p21677

Re: 45 minuers timer

Posted: 23 Nov 2021, 10:26
by RH_Dreambox
Då gör vi ett försök till :-) Du kanske har missat någon versal eller gemen och då funkar det inte.
Variablerna måste vara korrekta.
Om du har döpt om någon variabel så måste denna uppdateras i både VD och scen.

Jag antar att du har installerat den bifogade VD'n. Kolla vilket ID den fick.
I scenen skall vi göra vissa justeringar enligt nedan, men först skapar vi de globala variablerna.
Den infon står också i början av scenen.

Skapa fyra Globala Variabler enligt nedan. OBS! Var noga med versaler och gemener.

Car_R_DepHour (Avresetid timme)
Car_R_DepMinute (Avresetid minut)
Car_R_RunTime (Driftstid beroende av utetemperaturen)
Car_R_LastDepTime (lastDepartureTimeR)

Skapa sedan en fördefinierad variabel innehållande nedanstående tre värden. Tänk på versaler och gemener.

Car_R_HeaterStatus = Auto, Manuell och StandBy
-----------------------------------------------------

Nedanstående variabler i scenen måste uppdateras. Notera att jag bara visar de rader som är viktiga.

Kolla vilket ID motorvärmarens VD fick då du skapade den och fyll i det.
Ange också ID för värmarens switch/relä.
==========================================
local Car_R_VD_ID = ??? -- ID till din motorvärmares VD
local relayID = ??? -- ändra till ditt relä-ID
==========================================

Om du har en egen temp-sensor så ange dess ID här.
OBS! Har du ingen egen sensor så anger du ID = 3 här.
Då används Yahoo Weather eller YR som temperaturreferens.
==========================================
local tempID = ??? -- ändra till din tempsensors ID
==========================================

Justera förseningstiden eller låt den vara som den är.
==========================================
local turnOffDelay = 15 -- drifttid (förseningstid) efter inställd avresetid
local deBug = false -- visa utökad bugginfo, "false" för att inaktivera
==========================================

Viktigt! Inaktivera eller radera det alternativ som du INTE använder.
Här används rad två som är egen temperatursensor.
==========================================
-- local outTemp = tonumber(fibaro:getValue(tempID, "Temperature")); -- Använd denna rad om temp hämtas från Yahoo Weather
local outTemp = tonumber(fibaro:getValue(tempID, "value")); -- Använd denna rad om du har en egen ute-tempgivare
==========================================

Re: 45 minuers timer

Posted: 29 Nov 2021, 13:04
by MickeS
Ser inte var jag ska ta bort Yahoo Weather, har en egen tempgivare





--[[
%% autostart
%% properties
%% globals
--]]

--[[
-----------------------------------------------------
Skapa följande Globala Variabler Max 18 tecken

Car_R_DepHour = Avresetid timme
Car_R_DepMinute = Avresetid minut
Car_R_RunTime = Driftstid beroende av utetemperaturen
Car_R_LastDepTime = lastDepartureTimeR

Samt en fördefinierad variabel

Car_R_HeaterStatus = Auto, Manuell, StandBy
-----------------------------------------------------
-----------------------------------------------------
Lokala variablers betydelse

local Car_R_VD_ID = ID till din motorvärmares VD
local relayState = Reläets status
local turnOffDelay = Förseningstid efter programmerad avresetid
local lastDeparture = Avresetid + Förseningstid
local heaterStatus = Global Car_R_HeatStatus
------------------------------------------------------
--]]

if (fibaro:countScenes() > 1) then fibaro:abort() end

local Car_R_VD_ID = 906 -- ID till din motorvärmares VD
local relayID = 814 -- ändra till ditt relä-ID

local tempID = 886 -- ändra till din tempsensors ID
---local tempID = 3 -- Om temp hämtas från Yahoo Weather eller YR

local turnOffDelay = 15 -- drifttid (förseningstid) efter inställd avresetid
local deBug = false -- visa utökad bugginfo, "false" för att inaktivera

function logbug(color, message)
fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"));
end

logbug ("green", "Scenen har startat.");

while true do
local heaterStatus = tostring(fibaro:getGlobalValue("Car_R_HeaterStatus"));


local outTemp = tonumber(fibaro:getValue(tempID, "value")); -- Använd denna rad om du har en egen ute-tempgivare
local relayState = tonumber(fibaro:getValue(relayID, "value"));
local startHour = tonumber(fibaro:getGlobalValue("Car_R_DepHour"));
local startMinute = tonumber(fibaro:getGlobalValue("Car_R_DepMinute"));
local runTime = 0

runTime = math.floor(60 + 100*outTemp/(outTemp - 35))
if outTemp > 13 then
runTime = 0
end

fibaro:setGlobal("Car_R_RunTime", runTime);
local theDate = os.date("*t");
local currentTime=tonumber(os.time());
local departureTime=tonumber(os.time({year=theDate.year, month=theDate.month, day=theDate.day, hour=startHour, min=startMinute}));
local lastDeparture=departureTime + (turnOffDelay * 60);
fibaro:setGlobal("Car_R_LastDepTime", lastDeparture);
local startTime=tonumber(departureTime-runTime*60);

local timeLeft = math.floor((departureTime - currentTime) / 60)
if departureTime < currentTime then
timeLeft = 0
end

if deBug then logbug("orange", "Relästatus: " .. relayState) end;
if deBug then logbug("orange", "Heater status: " .. heaterStatus) end;
if deBug then logbug("orange", "Tid till Autostart: " .. timeLeft .. " min.") end;

-- Starta inte timern om det är varmt ute (>10°C) eller om den redan är startad
if (outTemp <= 10) and (relayState == 0) then
if (currentTime >= startTime) and (currentTime < departureTime) and (heaterStatus == "Auto") then
fibaro:call(relayID, "turnOn");
if deBug then logbug("orange", "Värmen startades automatiskt.") end;
-- fibaro:setGlobal("TTS", "Motorvärmaren startades automatiskt.&vol=10");
end
end

-- Stäng av timern om värmen är på, avresetiden har löpt ut och att manuell styrning är av
if (relayState == 1) and (currentTime >= lastDeparture) and (heaterStatus == "Auto") then
fibaro:call(relayID, "turnOff");
fibaro:setGlobal("Car_R_HeaterStatus", "StandBy");
fibaro:call(Car_R_VD_ID , "setProperty", "ui.LabelStatus.value", string.format("%02d:%02d", startHour, startMinute) .. " / " .. "StandBy");
if deBug then logbug("orange", "Värmen stängdes av.") end;
-- fibaro:setGlobal("TTS", "Motorvärmaren stängdes av.&vol=10");
end

-- Manuell start av värmen
if (relayState == 1) and (heaterStatus == "StandBy") then
fibaro:setGlobal("Car_R_HeaterStatus", "Manuell");
fibaro:call(Car_R_VD_ID , "setProperty", "ui.LabelStatus.value", "Manuell");
if deBug then logbug("orange", "Motorvärmaren startades manuellt.") end;
-- fibaro:setGlobal("TTS", "Motorvärmaren startades manuellt.&vol=10");
end

-- Avsluta manuell uppvärmning, återgå till StandBy
if (relayState == 0) and (heaterStatus == "Manuell") then
fibaro:setGlobal("Car_R_HeaterStatus", "StandBy");
oldHour = fibaro:getGlobalValue("Car_R_DepHour");
oldMinute = fibaro:getGlobalValue("Car_R_DepMinute");
fibaro:call(Car_R_VD_ID , "setProperty", "ui.LabelStatus.value", string.format("%02d:%02d", startHour, startMinute) .. " / " .. "StandBy");
if deBug then logbug("orange", "Växlade från Manuell till StandBy.") end;
-- fibaro:setGlobal("TTS", "Motorvärmaren stängdes av.&vol=10");
end

if deBug then logbug("orange", "Motorvärmaren är " .. relayState .. "-" .. heaterStatus) end;
if deBug then logbug("green", "----------------------------------") end;

fibaro:sleep(15*1000);
end

Re: 45 minuers timer

Posted: 29 Nov 2021, 13:45
by RH_Dreambox
Den raden tycks redan vara borttagen eftersom den skulle ha funnits precis under denna rad.

Code: Select all

local outTemp = tonumber(fibaro:getValue(tempID, "value")); -- Använd denna rad om du har en egen ute-tempgivare

Re: 45 minuers timer

Posted: 02 Dec 2021, 16:03
by MickeS
så då borde det ju funka... ?

Re: 45 minuers timer

Posted: 02 Dec 2021, 16:14
by MickeS
verkar inte stå några värden i VD:n heller..
Skärmklipp1.PNG

Re: 45 minuers timer

Posted: 02 Dec 2021, 18:46
by RH_Dreambox
Jag sparkade igång min gamla HC2 som har stått i garderoben sedan jag skaffade en HC3 och kopierade in koden från ditt inlägg och VD'n fungerade direkt.
Vad som inte stämmer är den VD som du har på bild. Det är inte den VD som hör till scenen.
Har du modifierat VD'n själv eller har du använt en annan VD?
Så här bör den ha sett ut.
1_Car_Heater_VD.png
1_Car_Heater_VD.png (20 KiB) Viewed 11313 times

Re: 45 minuers timer

Posted: 06 Dec 2021, 13:12
by MickeS
nu har jag rätt VD.
Men den läser inte in tempen från sensorn.
Jag ska väl skriva i ID på rad 52 ? Då blir det DEBUG...

Trycker jag även på Manuell så startar inte värmaren.

nåt e knas.....


--[[
%% autostart
%% properties
%% globals
--]]

--[[
-----------------------------------------------------
Skapa följande Globala Variabler Max 18 tecken

Car_R_DepHour = Avresetid timme
Car_R_DepMinute = Avresetid minut
Car_R_RunTime = Driftstid beroende av utetemperaturen
Car_R_LastDepTime = lastDepartureTimeR

Samt en fördefinierad variabel

Car_R_HeaterStatus = Auto, Manuell, StandBy
-----------------------------------------------------
-----------------------------------------------------
Lokala variablers betydelse

local Car_R_VD_ID = ID till din motorvärmares VD
local relayState = Reläets status
local turnOffDelay = Förseningstid efter programmerad avresetid
local lastDeparture = Avresetid + Förseningstid
local heaterStatus = Global Car_R_HeatStatus
------------------------------------------------------
--]]

if (fibaro:countScenes() > 1) then fibaro:abort() end

local Car_R_VD_ID = 918 -- ID till din motorvärmares VD
local relayID = 915 -- ändra till ditt relä-ID

local tempID = 886 -- ändra till din tempsensors ID
---local tempID = 3 -- Om temp hämtas från Yahoo Weather eller YR

local turnOffDelay = 15 -- drifttid (förseningstid) efter inställd avresetid
local deBug = false -- visa utökad bugginfo, "false" för att inaktivera

function logbug(color, message)
fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"));
end

logbug ("green", "Scenen har startat.");

while true do
local heaterStatus = tostring(fibaro:getGlobalValue("Car_R_HeaterStatus"));


local outTemp = tonumber(fibaro:getValue(tempID, "value")); -- Använd denna rad om du har en egen ute-tempgivare
local relayState = tonumber(fibaro:getValue(relayID, "value"));
local startHour = tonumber(fibaro:getGlobalValue("Car_R_DepHour"));
local startMinute = tonumber(fibaro:getGlobalValue("Car_R_DepMinute"));
local runTime = 0

runTime = math.floor(60 + 100*outTemp/(outTemp - 35))
if outTemp > 13 then
runTime = 0
end

fibaro:setGlobal("Car_R_RunTime", runTime);
local theDate = os.date("*t");
local currentTime=tonumber(os.time());
local departureTime=tonumber(os.time({year=theDate.year, month=theDate.month, day=theDate.day, hour=startHour, min=startMinute}));
local lastDeparture=departureTime + (turnOffDelay * 60);
fibaro:setGlobal("Car_R_LastDepTime", lastDeparture);
local startTime=tonumber(departureTime-runTime*60);

local timeLeft = math.floor((departureTime - currentTime) / 60)
if departureTime < currentTime then
timeLeft = 0
end

if deBug then logbug("orange", "Relästatus: " .. relayState) end;
if deBug then logbug("orange", "Heater status: " .. heaterStatus) end;
if deBug then logbug("orange", "Tid till Autostart: " .. timeLeft .. " min.") end;

-- Starta inte timern om det är varmt ute (>10°C) eller om den redan är startad
if (outTemp <= 10) and (relayState == 0) then
if (currentTime >= startTime) and (currentTime < departureTime) and (heaterStatus == "Auto") then
fibaro:call(relayID, "turnOn");
if deBug then logbug("orange", "Värmen startades automatiskt.") end;
-- fibaro:setGlobal("TTS", "Motorvärmaren startades automatiskt.&vol=10");
end
end

-- Stäng av timern om värmen är på, avresetiden har löpt ut och att manuell styrning är av
if (relayState == 1) and (currentTime >= lastDeparture) and (heaterStatus == "Auto") then
fibaro:call(relayID, "turnOff");
fibaro:setGlobal("Car_R_HeaterStatus", "StandBy");
fibaro:call(Car_R_VD_ID , "setProperty", "ui.LabelStatus.value", string.format("%02d:%02d", startHour, startMinute) .. " / " .. "StandBy");
if deBug then logbug("orange", "Värmen stängdes av.") end;
-- fibaro:setGlobal("TTS", "Motorvärmaren stängdes av.&vol=10");
end

-- Manuell start av värmen
if (relayState == 1) and (heaterStatus == "StandBy") then
fibaro:setGlobal("Car_R_HeaterStatus", "Manuell");
fibaro:call(Car_R_VD_ID , "setProperty", "ui.LabelStatus.value", "Manuell");
if deBug then logbug("orange", "Motorvärmaren startades manuellt.") end;
-- fibaro:setGlobal("TTS", "Motorvärmaren startades manuellt.&vol=10");
end

-- Avsluta manuell uppvärmning, återgå till StandBy
if (relayState == 0) and (heaterStatus == "Manuell") then
fibaro:setGlobal("Car_R_HeaterStatus", "StandBy");
oldHour = fibaro:getGlobalValue("Car_R_DepHour");
oldMinute = fibaro:getGlobalValue("Car_R_DepMinute");
fibaro:call(Car_R_VD_ID , "setProperty", "ui.LabelStatus.value", string.format("%02d:%02d", startHour, startMinute) .. " / " .. "StandBy");
if deBug then logbug("orange", "Växlade från Manuell till StandBy.") end;
-- fibaro:setGlobal("TTS", "Motorvärmaren stängdes av.&vol=10");
end

if deBug then logbug("orange", "Motorvärmaren är " .. relayState .. "-" .. heaterStatus) end;
if deBug then logbug("green", "----------------------------------") end;

fibaro:sleep(15*1000);
end

Re: 45 minuers timer

Posted: 06 Dec 2021, 15:29
by RH_Dreambox
@MickeS
Nej, du skall absolut inte ändra något efter rad 40.

Det är bara tre variabler som du skall ändra, resten sköter scenen om.

På rad 33 anger du ID för din VD
På rad 34 anger du ID för ditt relä/switch
På rad 36 anger du ID för din temp-sensor

Nedanstående variabler är frivilliga och de ändrar du bara vid behov.
Rad 39 "turnOffDelay" ändrar du bara om du vill ha en kortare eller längre förseningstid innan värmaren stänger av.
Rad 40 "debug" ändrar du mellan "false" (mindre debug-info) eller "true" (mer debug-info)

Och som sagt, ändra inget efter rad 40, för då är du ute på riktigt hal is...

EDIT
Ursäkta mig MickeS, men jag såg nu att du måste ändra några saker i den Virtuella enhetens fyra nedersta programfönster också.
I det nedersta fönstret på rad 10 skall du fylla i din tempsensors ID "886" här (fibaro:getValue(886, "value")).
Och i de tre fönstren ovanför så skall du på rad 2 skriva in ditt relä's ID "814" (relayId = 814;).

Jag får väl som ursäkt säga att jag inte har använt min HC2 på ett och ett halvt år, och man glömmer fort :-)
Här kunde jag ha gjort globala variabler och hämtat värdena därifrån (slarvigt av mig).

Re: 45 minuers timer

Posted: 06 Dec 2021, 17:15
by MickeS
Nu jäklar snurrar det på !

Tack så mycket, alltid bra kunskap från dig.