jompa68 wrote:Hur ser din rad 34 ut?
Code: Select all
if (outTemp < -20) then
jompa68 wrote:Hur ser din rad 34 ut?
Code: Select all
if (outTemp < -20) then
Jag vill också använda Yahoovädret alternativt den virtuella tempmätaren som hämtar data från Wunderground.mr-zeth wrote:Grymt jobbat Jonny!
Har du hämtat starttiden från någon rekommendation eller har du gått på sunt förnuft? Jag såg att den bara gick ner till -20 och tänkte lägga till ytterligare parametrar då vi nära på varje vinter har ner till -40.
Jag får dock följande error
[ERROR] 18:30:28: line 34: attempt to compare nil with number
Vad har jag missat?
*Edit* Ser att koden bygger på att man har en tempsensor ute, vilket jag inte har än utan tillförlitar mig på yahoo vädret som hc2 hämtar ifrån. Vad ska jag skriva istället för att hämta yahoo temp så länge?
Code: Select all
--[[
%% autostart
%% properties
%% globals
--]]
---------- CONFIGS ----------------
local relayId = 58; -- Switch, plugg's ID
--local tempId = 131; -- Temperatur sensor ID
local yahooWeatherID = 3 -- HC2 Yahoo WeatherID
------ END OF CONFIGS -------------
if (fibaro:countScenes() > 1) then fibaro:abort() end
while true do
-- Variabler som behöver skapas --
local manualOverride = tonumber(fibaro:getGlobalValue("heaterOverride"));
local calValue = tonumber(fibaro:getGlobalValue("calValue"));
local manualTimer = tonumber(fibaro:getGlobalValue("manualTimer"));
local startHour = tonumber(fibaro:getGlobalValue("calMotorvStartH"));
local startMinute = tonumber(fibaro:getGlobalValue("calMotorvStartM"));
local stopHour = tonumber(fibaro:getGlobalValue("calMotorvStopH"));
local stopMinute = tonumber(fibaro:getGlobalValue("calMotorvStopM"));
local mstartHour = tonumber(fibaro:getGlobalValue("departureHour"));
local mstartMinute = tonumber(fibaro:getGlobalValue("departureMinute"));
-----------------------------------
local outTemp = tonumber(fibaro:getValue(yahooWeatherID, "Temperature"));
local heaterState = tonumber(fibaro:getValue(relayId, "value"));
local diff = 0;
if (outTemp < -20) then
-- Start 3 hours before departure time
diff = 180;
elseif (outTemp < -10) then
-- Start 2 hours before departure time
diff = 120;
elseif (outTemp < 0) then
-- Start 1.5 hours before departure time
diff = 90;
elseif (outTemp < 10) then
-- Start 1 hour before departure time
diff = 60;
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);
local mdepartureTime=tonumber(os.time({year=theDate.year, month=theDate.month, day=theDate.day, hour=mstartHour, min=mstartMinute}));
local mstartTime=tonumber(mdepartureTime-diff*60);
---- Debug start ----
fibaro:debug("-------------------------------------");
if calValue == 0 and manualOverride == 0 and manualTimer == 0 then
fibaro:debug("Inget i kalendern och inget manuellt inställt")
elseif calValue == 1 then
fibaro:debug("Avresetid: " .. fibaro:getGlobal("calMotorvStart"));
fibaro:debug("Temperatur: " .. outTemp.." C");
fibaro:debug("Motorvärmaren startar: " .. diff.."min tidigare.");
fibaro:debug("manualOverride: " .. manualOverride);
fibaro:debug("Motorvärmarens status: "..heaterState);
elseif manualOverride == 1 then
fibaro:debug("Avresetid: " .. fibaro:getGlobal("departureHour")..":"..fibaro:getGlobal("departureMinute"));
fibaro:debug("Temperatur: " .. outTemp.." C");
fibaro:debug("Motorvärmare startar: " .. diff.."min tidigare.");
fibaro:debug("manualOverride: " .. manualOverride);
elseif calValue == 0 and manualTimer == 1 then
fibaro:debug("Avresetid: " .. fibaro:getGlobal("departureHour")..":"..fibaro:getGlobal("departureMinute"));
fibaro:debug("Temperatur: " .. outTemp.." C");
fibaro:debug("Motorvärmare startar: " .. diff.."min tidigare.");
fibaro:debug("manualOverride: " .. manualOverride);
end
fibaro:debug("-------------------------------------");
---- Debug end ----
if (outTemp < 10) and (heaterState == 0 )then
if (currentTime >= startTime) and (currentTime < departureTime) or (currentTime >= mstartTime) and (currentTime < mdepartureTime) then
fibaro:debug("Slog just på motorvärmaren!")
fibaro:call(relayId, "turnOn");
end
end
if (heaterState == 1) and manualTimer == 0 and (currentTime >= departureTime) or calValue == 1 and (currentTime <= startTime) or (currentTime <= mstartTime) then
fibaro:debug("Slog just av motorvärmaren!")
fibaro:call(relayId, "turnOff");
end
fibaro:sleep(60*1000);
end
Code: Select all
if (fibaro:countScenes() > 1) then fibaro:abort() end
Okej den har slutat att gnälla på rad 34 helt plötsligt. Nu ser loggen ut såhär:jompa68 wrote:Hur ser din rad 34 ut?
Om du kör koden i mainloop så ta markera med -- för denna raddå den inte behövsCode: Select all
if (fibaro:countScenes() > 1) then fibaro:abort() end
Jag antar att du måste uppdatera koden i den virituella enheten också så att den erhåller temp från yahoo och inte sensor.iSnobben wrote:Okej den har slutat att gnälla på rad 34 helt plötsligt. Nu ser loggen ut såhär:jompa68 wrote:Hur ser din rad 34 ut?
Om du kör koden i mainloop så ta markera med -- för denna raddå den inte behövsCode: Select all
if (fibaro:countScenes() > 1) then fibaro:abort() end
[DEBUG] 14:25:03: -------------------------------------
[DEBUG] 14:25:03: -------------------------------------
[DEBUG] 14:26:03: -------------------------------------
[DEBUG] 14:26:03: -------------------------------------
[DEBUG] 14:27:03: -------------------------------------
[DEBUG] 14:27:03: -------------------------------------
[DEBUG] 14:28:03: -------------------------------------
[DEBUG] 14:28:03: -------------------------------------
[DEBUG] 14:29:03: -------------------------------------
[DEBUG] 14:29:03: -------------------------------------
[DEBUG] 14:30:03: -------------------------------------
[DEBUG] 14:30:03: -------------------------------------
[DEBUG] 14:31:03: -------------------------------------
[DEBUG] 14:31:03: -------------------------------------
[DEBUG] 14:32:03: -------------------------------------
[DEBUG] 14:32:03: -------------------------------------
[DEBUG] 14:33:03: -------------------------------------
[DEBUG] 14:33:03: -------------------------------------
Den virtuella enheten visar dock ingen temperatur och den verkar inte hämta något från kalendern.
Code: Select all
local relayId = 58;
local virtualDeviceId = fibaro:getSelfId()
oldHour = fibaro:getGlobalValue("departureHour");
oldMinute = fibaro:getGlobalValue("departureMinute");
local status = "På";
if (tonumber(fibaro:getValue(relayId , "value")) == 0) then
status = "Av"
end
fibaro:call(virtualDeviceId , "pressButton", "1")
fibaro:call(virtualDeviceId , "setProperty", "ui.lblTemp.value", fibaro:getValue(yahooWeatherID("Temperature"));
fibaro:call(virtualDeviceId , "setProperty", "ui.lblCalStart.value", fibaro:getGlobalValue("calMotorvStart"));
fibaro:call(virtualDeviceId , "setProperty", "ui.lblCalStop.value", fibaro:getGlobalValue("calMotorvStop"));
fibaro:call(virtualDeviceId , "setProperty", "ui.lblStatus.value", status);
--local manualTimer = tonumber(fibaro:getGlobalValue("manualTimer"));
--if manualTimer == 0 then
--fibaro:call(virtualDeviceId , "setProperty", "ui.lblStart.value", "NEJ");
--else fibaro:call(virtualDeviceId , "setProperty", "ui.lblStart.value", oldHour..":"..oldMinute);
--end
--fibaro:call(virtualDeviceId , "setProperty", "ui.lblStart.value", oldHour..":"..oldMinute);
fibaro:sleep(30*1000);
Code: Select all
local relayId = 58;
local virtualDeviceId = fibaro:getSelfId()
local yahooWeatherID = 3 -- HC2 Yahoo WeatherID
oldHour = fibaro:getGlobalValue("departureHour");
oldMinute = fibaro:getGlobalValue("departureMinute");
local status = "På";
if (tonumber(fibaro:getValue(relayId , "value")) == 0) then
status = "Av"
end
fibaro:call(virtualDeviceId , "pressButton", "1")
fibaro:call(virtualDeviceId , "setProperty", "ui.lblTemp.value", fibaro:getValue(yahooWeatherID, "Temperature"));
fibaro:call(virtualDeviceId , "setProperty", "ui.lblCalStart.value", fibaro:getGlobalValue("calMotorvStart"));
fibaro:call(virtualDeviceId , "setProperty", "ui.lblCalStop.value", fibaro:getGlobalValue("calMotorvStop"));
fibaro:call(virtualDeviceId , "setProperty", "ui.lblStatus.value", status);
--local manualTimer = tonumber(fibaro:getGlobalValue("manualTimer"));
--if manualTimer == 0 then
--fibaro:call(virtualDeviceId , "setProperty", "ui.lblStart.value", "NEJ");
--else fibaro:call(virtualDeviceId , "setProperty", "ui.lblStart.value", oldHour..":"..oldMinute);
--end
--fibaro:call(virtualDeviceId , "setProperty", "ui.lblStart.value", oldHour..":"..oldMinute);
fibaro:sleep(30*1000);
Ja, man efterfrågade ett google kalender skript till sammans med att kunna styra det manuellt och det var så jag gjorde det från början.mr-zeth wrote:Funkar fint.
Så här ser koden ut i viritual device för att hämta data ifrån yahoo i stället för egen utesensor
Ett problem löst, ett nytt uppstått.
I Hämta Kalender så uppstår följande fel i debug.
[ERROR] 19:25:28: line 8: attempt to perform arithmetic on global 'sToday' (a nil value)
Jag antar att det har att göra med att jag ej specificerat någon kalender?
Jo nog var det så jag tänkte från början (googel kalender) men jag är ute på helt okänd mark här, ordet "Luakod" fanns inte i mitt vokabulär för 2 veckor sen så förtälj gärna hur jag löser det så jag får till det med googel kalender. Tack dock för all hjälp hittills!jompa68 wrote:Ja, man efterfrågade ett google kalender skript till sammans med att kunna styra det manuellt och det var så jag gjorde det från början.mr-zeth wrote:Funkar fint.
Så här ser koden ut i viritual device för att hämta data ifrån yahoo i stället för egen utesensor
Ett problem löst, ett nytt uppstått.
I Hämta Kalender så uppstår följande fel i debug.
[ERROR] 19:25:28: line 8: attempt to perform arithmetic on global 'sToday' (a nil value)
Jag antar att det har att göra med att jag ej specificerat någon kalender?
Har du ingen sådan så finns det en virtuell enhet som bara innehåller egen timer funktion för att ställa in tid för motorvärmare.
Det du behöver göra är egentligen "bara" att skapa en gCal och följa den här guiden: viewtopic.php?f=33&t=4215&p=5120&hilit=kalender#p5120mr-zeth wrote:Jo nog var det så jag tänkte från början (googel kalender) men jag är ute på helt okänd mark här, ordet "Luakod" fanns inte i mitt vokabulär för 2 veckor sen så förtälj gärna hur jag löser det så jag får till det med googel kalender. Tack dock för all hjälp hittills!jompa68 wrote:Ja, man efterfrågade ett google kalender skript till sammans med att kunna styra det manuellt och det var så jag gjorde det från början.mr-zeth wrote:Funkar fint.
Så här ser koden ut i viritual device för att hämta data ifrån yahoo i stället för egen utesensor
Ett problem löst, ett nytt uppstått.
I Hämta Kalender så uppstår följande fel i debug.
[ERROR] 19:25:28: line 8: attempt to perform arithmetic on global 'sToday' (a nil value)
Jag antar att det har att göra med att jag ej specificerat någon kalender?
Har du ingen sådan så finns det en virtuell enhet som bara innehåller egen timer funktion för att ställa in tid för motorvärmare.