Motorvärmarstyrning

Här kan du som nybörjare ställa dina frågor utan att skämmas
sonnyboy
Proffsmedlem
Posts: 602
Joined: 26 Sep 2013, 08:05
Location: Västerås

21 Nov 2016, 15:08

La in ytterligare en funktion på lunchen idag :)
Får se hur länge den får vara med.
Attachments
Mv.png
Fibaro HomeCenter 2
Fw 4.512 Beta
BeyondMeasure 1.10
25 Enheter, 55 Scener tidigare, 8 nu med gea GEA
martinlundgren80
Ny medlem
Posts: 18
Joined: 03 Jan 2016, 15:31

29 Nov 2016, 15:23

Hej,
Har följt den här tråden ett tag och nu är det dags att ta tag i motorvärmaren hemma.

Finns det nån möjlighet att nån kan lägga upp den kompletta koden med alla funktioner så att man skulle kunna programmera upp det från början?

Tack

//Martin
sonnyboy
Proffsmedlem
Posts: 602
Joined: 26 Sep 2013, 08:05
Location: Västerås

29 Nov 2016, 15:43

Det beror på vad du vill ha, @RH_Dreambox har även en timer inbyggd i sin vilket inte jag har, den hämtar jag temperaturen från en global variabel istället från en enhet.

Om du vill ha push till mobilen så gör du bara en Scen med denna kod och ändrar till dina enheter.

Code: Select all

[code]--[[
%% properties
237 value
%% events
%% globals
--]]


local mobileID = 69 -- enter mobile device ID to which push notification will be sent
local deviceID = 237 -- define Device ID

if (tonumber(fibaro:getValue(deviceID , "value")) == 1)  -- get Status from Device and send push notification
then
  fibaro:call(mobileID, "sendPush", "Motorvärmare Aktiv i "..fibaro:getGlobalValue("diffStart").." Minuter");
end
[/code]
Fibaro HomeCenter 2
Fw 4.512 Beta
BeyondMeasure 1.10
25 Enheter, 55 Scener tidigare, 8 nu med gea GEA
RH_Dreambox
Proffsmedlem
Posts: 883
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

29 Nov 2016, 15:50

@RH_Dreambox har även en timer inbyggd i sin vilket inte jag har,
Timern lade jag in för att manuell styrning skulle funka. Utan timer så stängde värmaren av sig vid nästa loop (ca. 1 min).
Sonnyboy, har du fått manuell styrning att fungera utan timer?
2 st HC2 4.520, Recovery-stickorna ligger i skrivbordslådan nu!
sonnyboy
Proffsmedlem
Posts: 602
Joined: 26 Sep 2013, 08:05
Location: Västerås

29 Nov 2016, 15:52

RH_Dreambox wrote:
@RH_Dreambox har även en timer inbyggd i sin vilket inte jag har,
Timern lade jag in för att manuell styrning skulle funka. Utan timer så stängde värmaren av sig vid nästa loop (ca. 1 min).
Sonnyboy, har du fått manuell styrning att fungera utan timer?
Ja den fungerar utan timer för mig, om du menar när du trycker på, på knappen på VD:n
Fibaro HomeCenter 2
Fw 4.512 Beta
BeyondMeasure 1.10
25 Enheter, 55 Scener tidigare, 8 nu med gea GEA
sonnyboy
Proffsmedlem
Posts: 602
Joined: 26 Sep 2013, 08:05
Location: Västerås

29 Nov 2016, 16:30

@RH_Dreambox
Har du skapat denna variabel?

Code: Select all

heaterOverride
Utan den så ska den stänga av sig efter 1 minut.
När jag sätter på min manuellt så får jag värde 1 på den variabeln stänger jag av så blir det 0
Fibaro HomeCenter 2
Fw 4.512 Beta
BeyondMeasure 1.10
25 Enheter, 55 Scener tidigare, 8 nu med gea GEA
RH_Dreambox
Proffsmedlem
Posts: 883
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

29 Nov 2016, 19:10

Utan den så ska den stänga av sig efter 1 minut.
När jag sätter på min manuellt så får jag värde 1 på den variabeln stänger jag av så blir det 0
Jo jag har den variabeln. Men det var något med att om man stängde av värmaren manuellt eller inte stängde av den så var det någon variabel som inte återställdes och som då sabbade andra funktioner.
Jag minns tyvärr inte så noga, men jag testade och fann att den manuella styrningen inte funkade rätt om man hanterade den på ett visst sätt. Därför gjorde jag en ändring i koden så att detta funkade oavsett hur man tryckte.

Om man tidigare satte på värmaren manuellt så fanns det inget som stängde av den om en viss variabel hade ett visst värde. Hade variabeln motsatt värde så stängde den av sig inom en minut, vilket den inte skulle göra.
Jag ändrade då så att värmaren gick en viss tid innan den stängde av sig och samtidigt återställde variablerna.
2 st HC2 4.520, Recovery-stickorna ligger i skrivbordslådan nu!
andwin
Medlem
Posts: 54
Joined: 03 Oct 2016, 13:37
Location: Eskilstuna

30 Nov 2016, 08:44

Min vill inte stänga av.. får
[DEBUG] 07:40:37: line 43: attempt to compare nil with number

43: if (heaterState == 1) and (currentTime >= lastDeparture) and (manualOverride == 0) then
44: fibaro:call(relayId, "turnOff");

Blir inte riktigt klok på varför den inte vill köra scenen samt inte vill stänga av..

Hela koden..

Code: Select all

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

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

while true do
  
  local relayId = 45;

  local manualOverride = tonumber(fibaro:getGlobalValue("heaterOverride"));

  local WorkDay = (fibaro:getGlobal("WorkToday"))
  local outTemp = tonumber(fibaro:getValue(3, "Temperature"));
  local heaterState = tonumber(fibaro:getValue(relayId, "value"));

  local startHour = tonumber(fibaro:getGlobalValue("departureHour"));
  local startMinute = tonumber(fibaro:getGlobalValue("departureMinute"));

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

  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 startTime=tonumber(departureTime-diff*60);
  
  -- Don't start the timer if it's too warm outside
  -- (or if its already started)
 
  if (outTemp < 10) and (heaterState == 0) then
      if (currentTime >= startTime) and (currentTime < departureTime) then
      if (WorkDay == "True") then
        fibaro:call(relayId, "turnOn");
      end
end
    end
    
  if (heaterState == 1) and (currentTime >= lastDeparture) and (manualOverride == 0) then
    fibaro:call(relayId, "turnOff");
  end
  
   if (manualOverride == 1) then
    fibaro:call(relayId, "turnOn");
    fibaro:sleep(10*60000); -- Sätt den tid värmaren skall gå manuellt, (här satt till 60 min)
    fibaro:call(relayId, "turnOff");
    fibaro:setGlobal("heaterOverride", 0);
  end
  
  fibaro:sleep(60*1000);
end
Fibaro Homecenter 2
4.20
RH_Dreambox
Proffsmedlem
Posts: 883
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

30 Nov 2016, 12:24

Blir inte riktigt klok på varför den inte vill köra scenen samt inte vill stänga av..
Du kanske skall lägga in koden på nytt.
När jag kollar lite snabbt ser jag att det fattas minst 8 rader nödvändig kod jämfört med vad jag har.
Du har även tagit bort alla rader med fibaro:debug(.....)
Dessa är inte nödvändiga för funktionen, men kan vara väldigt värdefulla vid felsökning.
2 st HC2 4.520, Recovery-stickorna ligger i skrivbordslådan nu!
andwin
Medlem
Posts: 54
Joined: 03 Oct 2016, 13:37
Location: Eskilstuna

30 Nov 2016, 13:23

RH_Dreambox wrote:
Blir inte riktigt klok på varför den inte vill köra scenen samt inte vill stänga av..
Du kanske skall lägga in koden på nytt.
När jag kollar lite snabbt ser jag att det fattas minst 8 rader nödvändig kod jämfört med vad jag har.
Du har även tagit bort alla rader med fibaro:debug(.....)
Dessa är inte nödvändiga för funktionen, men kan vara väldigt värdefulla vid felsökning.
Ok vill du dela med dig av din?
Fibaro Homecenter 2
4.20
RH_Dreambox
Proffsmedlem
Posts: 883
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

30 Nov 2016, 13:42

OK, men eftersom jag inte använder sonnyboy's funktion med veckodagar så får du lägga till den själv.
Och glöm inte att byta enhets-ID och den temperaturkälla som du vill använda. Det står i koden var du byter detta.
Mot slutet av koden kan du ändra tiden för manuell styrning av värmaren. Defaultvärde är 120 minuter.
Edit: Variablernas namn är nu justerade till de ursprungliga namnen. Jag hade av misstag lagt in mina egna variabler som slutade på R. Det var för att mina två värmare inte skulle störa varandras funktion (.....R och .....Y).

Code: Select all

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

-- Create the following Global Variables
   -- heaterOverride
   -- departureHour
   -- departureMinute
   -- diffStart
   -- manualOverride
   -- lastDepartureTime
   -- heaterStatus

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

while true do

  local relayId = 712; -- change to your relay ID

  local tempID = 518; -- change to your Temperature ID
-- Byt raden ovan till nedanstående om du inte har egen tempgivare
-- local tempID = 3; -- Fibaro Yahoo Weather ID, change from "value" to "Temperature"

  local turnOffDelay = 15 --time in minutes the heater will stay on after the set departure time.
  local manualOverride = tonumber(fibaro:getGlobalValue("heaterOverride"));
  local heaterStatus = tonumber(fibaro:getGlobalValue("heaterStatus"));

  local outTemp = tonumber(fibaro:getValue(tempID, "value"));
-- Byt raden ovan till nedanstående om du inte har egen tempgivare
--  local outTemp = tonumber(fibaro:getValue(tempID, "Temperature"));

  local heaterState = tonumber(fibaro:getValue(relayId, "value"));
  local startHour = tonumber(fibaro:getGlobalValue("departureHour"));
  local startMinute = tonumber(fibaro:getGlobalValue("departureMinute"));

  local diff = 0;

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

  fibaro:setGlobal("diffStart", diff)
  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("lastDepartureTime", lastDeparture);
  local startTime=tonumber(departureTime-diff*60);
  
   fibaro:debug("heaterState: " .. heaterState);
   fibaro:debug("currentTime: " .. currentTime);
   fibaro:debug("departureTime: " .. departureTime);
   fibaro:debug("manualOverride: " .. manualOverride);
     fibaro:debug("heaterStatus: " .. heaterStatus);
     fibaro:debug("lastDeparture: " .. lastDeparture);
   fibaro:debug("-------------------------------------");
  
  -- Don't start the timer if it's too warm outside
  -- (or if its already started)
 
  if (outTemp < 10) and (heaterState == 0) then
      if (currentTime >= startTime) and (currentTime < departureTime) then
        fibaro:call(relayId, "turnOn");
      end
  end
  if (heaterState == 1) and (currentTime >= lastDeparture) and (manualOverride == 0) then
    fibaro:call(relayId, "turnOff");
  end
  
   if (manualOverride == 1) then
    fibaro:call(relayId, "turnOn");
    fibaro:sleep(120*1000);  -- Default 120 minuter vid manuell styrning av värmaren
    fibaro:call(relayId, "turnOff");
    fibaro:setGlobal("heaterOverride", 0);
  end
  
  fibaro:sleep(60*1000);
end

-- Skicka mail eller Push som en info    
--local subject = "Motorvärmaren är på"
--local message = "Motorvärmaren stänger av om ".. turnOffDelay .."minuter"
--fibaro:call(2, "sendEmail", subject, message)
--fibaro:call(4, "sendEmail", subject, message)
--fibaro:call(153, "sendPush", subject, message)
--fibaro:debug("Mail och Push") 
--Slut  
2 st HC2 4.520, Recovery-stickorna ligger i skrivbordslådan nu!
sonnyboy
Proffsmedlem
Posts: 602
Joined: 26 Sep 2013, 08:05
Location: Västerås

03 Dec 2016, 13:10

Funderade lite på det här med timer vid manuellt startad.
Kan man inte använda variabeln "diffstart" som värde vid manuell start? Då får man rätt tid vid manuell start :)
Fibaro HomeCenter 2
Fw 4.512 Beta
BeyondMeasure 1.10
25 Enheter, 55 Scener tidigare, 8 nu med gea GEA
RH_Dreambox
Proffsmedlem
Posts: 883
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

03 Dec 2016, 14:35

Menar du att använda värdet i variabeln diffStart som tidsparameter för manuell start?
Det är ju en strålande bra idé! Den måste jag testa.
Den enda nackdelen är ju då om man vill ha en längre manuell tid än vad diffStart medger. Tex. om jag vill använda motorvärmaruttaget för att dammsuga bilen på sommaren.
Men jag får väl vänta med att städa bilen då :-)

Edit:
Jag använde den lokala variabeln "diff * 60" och lade in den i timersnurran i stället för 120 (diff *60* 1000).
Då slipper man hämta in den globala variabeln diffStart.
2 st HC2 4.520, Recovery-stickorna ligger i skrivbordslådan nu!
martinlundgren80
Ny medlem
Posts: 18
Joined: 03 Jan 2016, 15:31

05 Jan 2017, 11:46

Hej och tack för all hjälp här!
Är det någon utav er som skulle kunna dela med er av VD:n också så vore det fantastiskt då det känns som att den är rejält uppdaterad mot den i först inlägget.

Ställer man i VDn om man vill att motorvärmarstyrningen ska vara aktiv eller inte?
Ska ha den till en bil som inte används alla dagar och skulle vilja att man t.ex. ställer in tiden på kvällen så kör den enbart en gång på utsatt tid dagen efter och sedan blir den inaktiv igen.

Mvh
Martin

EDIT: Jag vidareutvecklade VDn själv så att man välja om man vill att schemaläggningen ska vara aktiv eller om man vill att den bara ska gå igång vid utsatt tid och sedan bli inaktiv.
Attachments
Skärmklipp.JPG
Fredrik85
Medlem
Posts: 61
Joined: 24 Jan 2016, 17:05

06 Jan 2017, 16:34

Har knåpat ihop den virtuella enheten, scenen och variablerna men får det inte att fungera förutom utetempen.
Misstänker att jag fattar något av id-numren fel så jag sätter mina id:n fel.

Är det följande id:n på förstasidan som krillev lagt ut?

78 = virtuella enheten
79 = scenen
49 = brytaren/väggpluggen till motorvärmarkabeln
/Mvh Fredrik

Fibaro HC2, FW 4.160
Mest saker från Fibaro, även lite från AeonLabs, Düwi och Vision
RH_Dreambox
Proffsmedlem
Posts: 883
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

06 Jan 2017, 18:23

Om du har läst igenom hela tråden så ser du att det har skett en hel del förändringar av den ursprungliga koden.
Så om du inte har uppdaterat något efter det första inlägget så (bör) skall du göra det.

Som du ser i inläggen så är det 7 globala variabler som du måste lägga in för att det skall fungera.
diffStart, departureHour, departureMinute, heaterOverride, heaterStatus, lastDepartureTime och manualOverride.
2 st HC2 4.520, Recovery-stickorna ligger i skrivbordslådan nu!
Fredrik85
Medlem
Posts: 61
Joined: 24 Jan 2016, 17:05

06 Jan 2017, 20:14

Har nu lagt till resterade variabler, ändrat till den LUA koden i scenen som du lagt ut sist, och lagt till labeln lblStart i vd.
Inget funkar än förutom temperaturen.
/Mvh Fredrik

Fibaro HC2, FW 4.160
Mest saker från Fibaro, även lite från AeonLabs, Düwi och Vision
sonnyboy
Proffsmedlem
Posts: 602
Joined: 26 Sep 2013, 08:05
Location: Västerås

06 Jan 2017, 20:16

Jag kommer lägga ut den verisionen som jag har ikväll och den fungerar fint.
Fibaro HomeCenter 2
Fw 4.512 Beta
BeyondMeasure 1.10
25 Enheter, 55 Scener tidigare, 8 nu med gea GEA
sonnyboy
Proffsmedlem
Posts: 602
Joined: 26 Sep 2013, 08:05
Location: Västerås

06 Jan 2017, 20:55

Edit 2018-09-04
Har förenklat lite så man slipper ändra massa onödigt,
La till temperaturen från Fibaros vädertjänst istället.

Nu bör det vara så här enkelt
1 Skapa variabler
2 importera VD och ändra till ditt reläid
3 Skapa scenen och ändra till ditt reläid (jag har döpt denna scen till "Opel MV Styrning"


Nedan variabler behövs för att denna ska fungera.
heaterOverride
WorkToday
departureHour
departureMinute
diffStart

Importera Motorvärmare opel VD
Ändra alla "local relayId = 237" till ditt relänummer, 3 ställen ska ändras

Denna kod klistras in i en Scen.
Här ska local relayId = 237 ändras till ditt relänummer.

Code: Select all

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

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

while true do
  
  local relayId = 237 -- id på din brytare

  local manualOverride = tonumber(fibaro:getGlobalValue("heaterOverride"))

  local outTemp = tonumber(fibaro:getValue(3, "Temperature")) -- Använder fibaros tempservice
  local WorkDay = (fibaro:getGlobal("WorkToday"))-- True eller False förväntas
  local heaterState = tonumber(fibaro:getValue(relayId, "value"))

  local startHour = tonumber(fibaro:getGlobalValue("departureHour"))
  local startMinute = tonumber(fibaro:getGlobalValue("departureMinute"))

  local diff = 0;
  diff = math.floor(60 + 100*outTemp/(outTemp - 35))
if outTemp > 13 then
diff = 0;
end
  
  fibaro:setGlobal("diffStart", diff)
  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 startTime=tonumber(departureTime-diff*60);
  
  -- Don't start the timer if it's too warm outside
  -- (or if its already started)
  if (outTemp < 10) and (heaterState == 0) then
      if (currentTime >= startTime) and (currentTime < departureTime) then
      	  if (WorkDay == "True") then  
        fibaro:call(relayId, "turnOn");
      end
  end
end
fibaro:debug("heaterState: " .. heaterState);
fibaro:debug("currentTime: " .. currentTime);
fibaro:debug("departureTime: " .. departureTime);
fibaro:debug("manualOverride: " .. manualOverride);
fibaro:debug("outTemp: " .. outTemp);
fibaro:debug("WorkDay: " .. WorkDay);
fibaro:debug("-------------------------------------");
  if (heaterState == 1) and (currentTime >= departureTime) and (manualOverride == 0) then
    fibaro:call(relayId, "turnOff");
  end
  
  fibaro:sleep(60*1000);
end
Vill du ha ett Pushmeddelande på din telefon när värmen hoppar igång?
Klistra in denna kod i en scen

Code: Select all

--[[
%% properties
237 value -- ändra till ditt relänummer
%% events
%% globals
--]]


local mobileID = 69 -- Ditt nummer på telefon
local deviceID = 237 -- Ditt relänummer

if (tonumber(fibaro:getValue(deviceID , "value")) == 1)  -- get Status from Device and send push notification
then
  fibaro:call(mobileID, "sendPush", "Motorvärmare Aktiv i "..fibaro:getGlobalValue("diffStart").." Minuter");
end
Attachments
Motorvärmare_Opel.zip
(1.17 KiB) Downloaded 12 times
Motorvärmare_Opel.zip
Uppdaterad 2018-09-01
(1.17 KiB) Downloaded 19 times
KupevarmareOff.png
Defa Off
KupevarmareOff.png (14.02 KiB) Viewed 5958 times
Kupevarmare.png
Defa On
Kupevarmare.png (15.58 KiB) Viewed 5958 times
Last edited by sonnyboy on 04 Sep 2018, 14:21, edited 8 times in total.
Fibaro HomeCenter 2
Fw 4.512 Beta
BeyondMeasure 1.10
25 Enheter, 55 Scener tidigare, 8 nu med gea GEA
Fredrik85
Medlem
Posts: 61
Joined: 24 Jan 2016, 17:05

07 Jan 2017, 17:07

Tror jag är något på spåret nu, ska testa imorgon om det funkar med med WorkToday osv :)
/Mvh Fredrik

Fibaro HC2, FW 4.160
Mest saker från Fibaro, även lite från AeonLabs, Düwi och Vision
Post Reply