Arbetsdag idag / imorgon - Hur man räknar ut Påsken varje år

Hjälp varandra att vara kreativa för att göra hemmet mer bekvämt.
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Ny fredag och ingen släckning, jag har fel någonstans :cry:
Misstänker att det har att göra med att jag vill släcka 23:20.
Kan någon förklara vart jag ska ändra i koden så det släcks på fredagar.

Code: Select all

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

function Vacation_Days(dateForCheck)

-- Ange vilka datum som skall anses som lediga datum
   local LedigaDatum = { "2014-05-02" , "2014-05-30" }

   local datum

   for z,datum in pairs(LedigaDatum)
       do
          TestDatum = os.date("*t", os.time({year = tonumber(string.sub(datum,1,4)), month = tonumber(string.sub(datum,6,7)), day = tonumber(string.sub(datum,9))}))
          if ( TestDatum.year == dateForCheck.year and TestDatum.month == dateForCheck.month and TestDatum.day == dateForCheck.day ) then
             return true
          end
       end
   return false
end

function Holidays_CalculateEaster(year)
    golden = (year % 19) + 1
    c = math.floor(year/400) + math.floor(8*(math.floor(year/100)+11)/25) - math.floor(year/100)
    s = (11 * golden + c) % 30
    if (s < 0) then
       s = s + 30
    end
    pfm = os.time{year=year, month=4, day=19} - s * 24 * 60 * 60
    if (pfm == os.time{year=year, month=4, day=19}) then
       pfm = pfm - 24 * 60 * 60
    elseif (pfm == os.time{year=year, month=4, day=18} and golden > 11) then
       pfm = pfm - 24 * 60 * 60
    end
    sunday = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
    friday = sunday - 2 * 24 * 60 * 60

    return {year, tonumber(os.date("%m", friday)), tonumber(os.date("%d", friday))}
end

function WorkDay(dateToCheck)

   local easterDay
   local returnValue

   returnValue = true

-- Indatum är en lördag eller Söndag
   if ( dateToCheck.wday == 1 or dateToCheck.wday == 7 ) then
      returnValue = false
-- Indatum är nationaldag       
   elseif ( dateToCheck.month == 6 and dateToCheck.day == 6 ) then
      returnValue = false
-- Indatum är Nyårsdag eller trettondag
   elseif ( dateToCheck.month == 1 and (dateToCheck.day == 1 or dateToCheck.day == 6 ) ) then
      returnValue = false
-- Indatum är 1:a maj
   elseif ( dateToCheck.month == 5 and dateToCheck.day == 1 ) then
       returnValue = false
-- Indatum är Julafton,Juldag, Annandag eller Nyårsafton
   elseif ( dateToCheck.month == 12 and (dateToCheck.day == 24 or dateToCheck.day == 25 or dateToCheck.day == 26 or dateToCheck.day == 31) ) then
      returnValue = false
   end

-- Långfredag
   easterDay = Holidays_CalculateEaster(dateToCheck.year)
   if ( easterDay[1] == dateToCheck.year and easterDay[2] == dateToCheck.month and easterDay[3] == dateToCheck.day ) then
      returnValue = false
   end
-- AnnandagPåsk
   easterDay2 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+3*24*60*60)
   if ( easterDay2.year == dateToCheck.year and easterDay2.month == dateToCheck.month and easterDay2.day == dateToCheck.day ) then
      returnValue = false
   end
-- Kristihimmelfärdsdag? +41 dagar från Långfredag?
   datum3 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+41*24*60*60)
   if ( datum3.year == dateToCheck.year and datum3.month == dateToCheck.month and datum3.day == dateToCheck.day ) then
      returnValue = false
   end
-- hitta midsommardagen för att kunna kontrollera midsommarafton
-- midsommardagen = den lördag som infaller under tiden den 20-26 juni -> midsommarafton bör vara den fredag som inträffar under tiden 19-25 juni
   if ( dateToCheck.month == 6 and (dateToCheck.day >= 19 and dateToCheck.day <= 25) and dateToCheck.wday == 6 ) then
      returnValue = false
   end

   if ( Vacation_Days(dateToCheck) ) then
      returnValue = false
   end

   return returnValue
end

-- Main Start
-- Make sure the variables are correct at startup
if WorkDay(os.date("*t")) then
   fibaro:setGlobal("WorkToday","True");
else
   fibaro:setGlobal("WorkToday","False");
end
if WorkDay(os.date("*t", os.time()+24*60*60)) then
   fibaro:setGlobal("WorkTomorrow","True");
else
   fibaro:setGlobal("WorkTomorrow","False");
end

-- Main Loop
while true do
   local currentDate = os.date("*t");

-- Only update variables one time each day, 00:01
   if (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "00:01") then
      if WorkDay(os.date("*t")) then
         fibaro:setGlobal("WorkToday","True");
      else
         fibaro:setGlobal("WorkToday","False");
      end
      if WorkDay(os.date("*t", os.time()+24*60*60)) then
         fibaro:setGlobal("WorkTomorrow","True");
      else
         fibaro:setGlobal("WorkTomorrow","False");
      end
    end

-- Turn off lamps 22:05 day before workday, 
-- and 00:30 day before holiday (test is WorkToday since we are after midnight)
    if (
       (fibaro:getGlobalValue("WorkTomorrow") == "True")
    and
       ( string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "22:22")
       )
    then
       	fibaro:call(38, "turnOff");--Köksfönstren
   		fibaro:sleep(math.random(8000,12000)); 
   		fibaro:call(4, "turnOff");--Bakom Soffan
   		fibaro:sleep(math.random(5000,8000));
   		fibaro:call(33, "turnOff");--Vitrinskåpet
   		fibaro:sleep(math.random(8000,12000));
   		fibaro:call(45, "turnOff");--Bakom Tvn
   		fibaro:sleep(math.random(8000,12000));
   		fibaro:call(36, "turnOff");--Fönsterlampa Alcia
  	 	fibaro:sleep(math.random(8000,12000));
   		fibaro:call(34, "turnOff");--Lampa Byrån
   		fibaro:sleep(math.random(8000,12000));

    end

    if (
       (fibaro:getGlobalValue("WorkToday") == "False")
    and
       ( string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "23:20")
       )
    then
        fibaro:call(38, "turnOff");--Köksfönstren
        fibaro:sleep(math.random(8000,12000)); 
        fibaro:call(4, "turnOff");--Bakom Soffan
        fibaro:sleep(math.random(5000,8000));
        fibaro:call(33, "turnOff");--Vitrinskåpet
        fibaro:sleep(math.random(8000,12000));
   		fibaro:call(45, "turnOff");--Bakom Tvn
  		fibaro:sleep(math.random(8000,12000));
  		fibaro:call(36, "turnOff");--Fönsterlampa Alcia
  	 	fibaro:sleep(math.random(8000,12000));
   		fibaro:call(34, "turnOff");--Lampa Byrån
   		fibaro:sleep(math.random(8000,12000));
    end

fibaro:sleep(60*1000);

end
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Jag tror att detta borde fixa saken - bara ändrat testet av WorkTomorrow istf WorkToday i sista grupperingen.

Code: Select all

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

    function Vacation_Days(dateForCheck)

    -- Ange vilka datum som skall anses som lediga datum
       local LedigaDatum = { "2014-05-02" , "2014-05-30" }

       local datum

       for z,datum in pairs(LedigaDatum)
           do
              TestDatum = os.date("*t", os.time({year = tonumber(string.sub(datum,1,4)), month = tonumber(string.sub(datum,6,7)), day = tonumber(string.sub(datum,9))}))
              if ( TestDatum.year == dateForCheck.year and TestDatum.month == dateForCheck.month and TestDatum.day == dateForCheck.day ) then
                 return true
              end
           end
       return false
    end

    function Holidays_CalculateEaster(year)
        golden = (year % 19) + 1
        c = math.floor(year/400) + math.floor(8*(math.floor(year/100)+11)/25) - math.floor(year/100)
        s = (11 * golden + c) % 30
        if (s < 0) then
           s = s + 30
        end
        pfm = os.time{year=year, month=4, day=19} - s * 24 * 60 * 60
        if (pfm == os.time{year=year, month=4, day=19}) then
           pfm = pfm - 24 * 60 * 60
        elseif (pfm == os.time{year=year, month=4, day=18} and golden > 11) then
           pfm = pfm - 24 * 60 * 60
        end
        sunday = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
        friday = sunday - 2 * 24 * 60 * 60

        return {year, tonumber(os.date("%m", friday)), tonumber(os.date("%d", friday))}
    end

    function WorkDay(dateToCheck)

       local easterDay
       local returnValue

       returnValue = true

    -- Indatum är en lördag eller Söndag
       if ( dateToCheck.wday == 1 or dateToCheck.wday == 7 ) then
          returnValue = false
    -- Indatum är nationaldag       
       elseif ( dateToCheck.month == 6 and dateToCheck.day == 6 ) then
          returnValue = false
    -- Indatum är Nyårsdag eller trettondag
       elseif ( dateToCheck.month == 1 and (dateToCheck.day == 1 or dateToCheck.day == 6 ) ) then
          returnValue = false
    -- Indatum är 1:a maj
       elseif ( dateToCheck.month == 5 and dateToCheck.day == 1 ) then
           returnValue = false
    -- Indatum är Julafton,Juldag, Annandag eller Nyårsafton
       elseif ( dateToCheck.month == 12 and (dateToCheck.day == 24 or dateToCheck.day == 25 or dateToCheck.day == 26 or dateToCheck.day == 31) ) then
          returnValue = false
       end

    -- Långfredag
       easterDay = Holidays_CalculateEaster(dateToCheck.year)
       if ( easterDay[1] == dateToCheck.year and easterDay[2] == dateToCheck.month and easterDay[3] == dateToCheck.day ) then
          returnValue = false
       end
    -- AnnandagPåsk
       easterDay2 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+3*24*60*60)
       if ( easterDay2.year == dateToCheck.year and easterDay2.month == dateToCheck.month and easterDay2.day == dateToCheck.day ) then
          returnValue = false
       end
    -- Kristihimmelfärdsdag? +41 dagar från Långfredag?
       datum3 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+41*24*60*60)
       if ( datum3.year == dateToCheck.year and datum3.month == dateToCheck.month and datum3.day == dateToCheck.day ) then
          returnValue = false
       end
    -- hitta midsommardagen för att kunna kontrollera midsommarafton
    -- midsommardagen = den lördag som infaller under tiden den 20-26 juni -> midsommarafton bör vara den fredag som inträffar under tiden 19-25 juni
       if ( dateToCheck.month == 6 and (dateToCheck.day >= 19 and dateToCheck.day <= 25) and dateToCheck.wday == 6 ) then
          returnValue = false
       end

       if ( Vacation_Days(dateToCheck) ) then
          returnValue = false
       end

       return returnValue
    end

    -- Main Start
    -- Make sure the variables are correct at startup
    if WorkDay(os.date("*t")) then
       fibaro:setGlobal("WorkToday","True");
    else
       fibaro:setGlobal("WorkToday","False");
    end
    if WorkDay(os.date("*t", os.time()+24*60*60)) then
       fibaro:setGlobal("WorkTomorrow","True");
    else
       fibaro:setGlobal("WorkTomorrow","False");
    end

    -- Main Loop
    while true do
       local currentDate = os.date("*t");

    -- Only update variables one time each day, 00:01
       if (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "00:01") then
          if WorkDay(os.date("*t")) then
             fibaro:setGlobal("WorkToday","True");
          else
             fibaro:setGlobal("WorkToday","False");
          end
          if WorkDay(os.date("*t", os.time()+24*60*60)) then
             fibaro:setGlobal("WorkTomorrow","True");
          else
             fibaro:setGlobal("WorkTomorrow","False");
          end
        end

    -- Turn off lamps 22:05 day before workday,
    -- and 23:20 day before holiday
        if (
           (fibaro:getGlobalValue("WorkTomorrow") == "True")
        and
           ( string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "22:22")
           )
        then
              fibaro:call(38, "turnOff");--Köksfönstren
             fibaro:sleep(math.random(8000,12000));
             fibaro:call(4, "turnOff");--Bakom Soffan
             fibaro:sleep(math.random(5000,8000));
             fibaro:call(33, "turnOff");--Vitrinskåpet
             fibaro:sleep(math.random(8000,12000));
             fibaro:call(45, "turnOff");--Bakom Tvn
             fibaro:sleep(math.random(8000,12000));
             fibaro:call(36, "turnOff");--Fönsterlampa Alcia
             fibaro:sleep(math.random(8000,12000));
             fibaro:call(34, "turnOff");--Lampa Byrån
             fibaro:sleep(math.random(8000,12000));

        end

        if (
           (fibaro:getGlobalValue("WorkTomorrow") == "False")
        and
           ( string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "23:20")
           )
        then
            fibaro:call(38, "turnOff");--Köksfönstren
            fibaro:sleep(math.random(8000,12000));
            fibaro:call(4, "turnOff");--Bakom Soffan
            fibaro:sleep(math.random(5000,8000));
            fibaro:call(33, "turnOff");--Vitrinskåpet
            fibaro:sleep(math.random(8000,12000));
             fibaro:call(45, "turnOff");--Bakom Tvn
            fibaro:sleep(math.random(8000,12000));
            fibaro:call(36, "turnOff");--Fönsterlampa Alcia
             fibaro:sleep(math.random(8000,12000));
             fibaro:call(34, "turnOff");--Lampa Byrån
             fibaro:sleep(math.random(8000,12000));
        end

    fibaro:sleep(60*1000);

    end
Om inte detta fungerar så måste vi nog lägga in lite fibaro:debug rader så vi ser vad som händer i ditt system.
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Då håller jag tummarna :)
Nya koden inlagd, får dock vänta till nästa fredag för att se hur det går, bara fredagar som de strulat på.
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Tyvärr ingen släckning vaken fredag eller Lördag. Har du flera tips Bamsefar?

Edit: Ändrat till rätt dagar ;)

Skickat från min SM-G900F via Tapatalk
Last edited by sonnyboy on 19 May 2014, 06:55, edited 1 time in total.
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Söndag är väl ändå idag?

Men jag förstår vad du menar. Har varit i Oslo så jag får titta lite på detta senare idag. Men spontant så verkar inte uppdateringen av WorkToday fungera.
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Tror du har rätt, slocknade inte i söndags kväll heller, kollade variablerna, och både today och tomorrow var true :? efter en omstart så fick jag in rätt värden igen.

Idag måndag så är det fel på variablerna också work today är false, fast den inte borde vara det.

Code: Select all

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

function Vacation_Days(dateForCheck)

-- Ange vilka datum som skall anses som lediga datum
   local LedigaDatum = { "2014-05-02" , "2014-05-30" }

   local datum

   for z,datum in pairs(LedigaDatum)
       do
          TestDatum = os.date("*t", os.time({year = tonumber(string.sub(datum,1,4)), month = tonumber(string.sub(datum,6,7)), day = tonumber(string.sub(datum,9))}))
          if ( TestDatum.year == dateForCheck.year and TestDatum.month == dateForCheck.month and TestDatum.day == dateForCheck.day ) then
             return true
          end
       end
   return false
end

function Holidays_CalculateEaster(year)
    golden = (year % 19) + 1
    c = math.floor(year/400) + math.floor(8*(math.floor(year/100)+11)/25) - math.floor(year/100)
    s = (11 * golden + c) % 30
    if (s < 0) then
       s = s + 30
    end
    pfm = os.time{year=year, month=4, day=19} - s * 24 * 60 * 60
    if (pfm == os.time{year=year, month=4, day=19}) then
       pfm = pfm - 24 * 60 * 60
    elseif (pfm == os.time{year=year, month=4, day=18} and golden > 11) then
       pfm = pfm - 24 * 60 * 60
    end
    sunday = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
    friday = sunday - 2 * 24 * 60 * 60

    return {year, tonumber(os.date("%m", friday)), tonumber(os.date("%d", friday))}
end

function WorkDay(dateToCheck)

   local easterDay
   local returnValue

   returnValue = true

-- Indatum är en lördag eller Söndag
   if ( dateToCheck.wday == 1 or dateToCheck.wday == 7 ) then
      returnValue = false
-- Indatum är nationaldag       
   elseif ( dateToCheck.month == 6 and dateToCheck.day == 6 ) then
      returnValue = false
-- Indatum är Nyårsdag eller trettondag
   elseif ( dateToCheck.month == 1 and (dateToCheck.day == 1 or dateToCheck.day == 6 ) ) then
      returnValue = false
-- Indatum är 1:a maj
   elseif ( dateToCheck.month == 5 and dateToCheck.day == 1 ) then
       returnValue = false
-- Indatum är Julafton,Juldag, Annandag eller Nyårsafton
   elseif ( dateToCheck.month == 12 and (dateToCheck.day == 24 or dateToCheck.day == 25 or dateToCheck.day == 26 or dateToCheck.day == 31) ) then
      returnValue = false
   end

-- Långfredag
   easterDay = Holidays_CalculateEaster(dateToCheck.year)
   if ( easterDay[1] == dateToCheck.year and easterDay[2] == dateToCheck.month and easterDay[3] == dateToCheck.day ) then
      returnValue = false
   end
-- AnnandagPåsk
   easterDay2 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+3*24*60*60)
   if ( easterDay2.year == dateToCheck.year and easterDay2.month == dateToCheck.month and easterDay2.day == dateToCheck.day ) then
      returnValue = false
   end
-- Kristihimmelfärdsdag? +41 dagar från Långfredag?
   datum3 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+41*24*60*60)
   if ( datum3.year == dateToCheck.year and datum3.month == dateToCheck.month and datum3.day == dateToCheck.day ) then
      returnValue = false
   end
-- hitta midsommardagen för att kunna kontrollera midsommarafton
-- midsommardagen = den lördag som infaller under tiden den 20-26 juni -> midsommarafton bör vara den fredag som inträffar under tiden 19-25 juni
   if ( dateToCheck.month == 6 and (dateToCheck.day >= 19 and dateToCheck.day <= 25) and dateToCheck.wday == 6 ) then
      returnValue = false
   end

   if ( Vacation_Days(dateToCheck) ) then
      returnValue = false
   end

   return returnValue
end

-- Main Start
-- Make sure the variables are correct at startup
if WorkDay(os.date("*t")) then
   fibaro:setGlobal("WorkToday","True");
else
   fibaro:setGlobal("WorkToday","False");
end
if WorkDay(os.date("*t", os.time()+24*60*60)) then
   fibaro:setGlobal("WorkTomorrow","True");
else
   fibaro:setGlobal("WorkTomorrow","False");
end

-- Main Loop
while true do
   local currentDate = os.date("*t");

-- Only update variables one time each day, 00:01
   if (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "00:01") then
      if WorkDay(os.date("*t")) then
         fibaro:setGlobal("WorkToday","True");
      else
         fibaro:setGlobal("WorkToday","False");
      end
      if WorkDay(os.date("*t", os.time()+24*60*60)) then
         fibaro:setGlobal("WorkTomorrow","True");
      else
         fibaro:setGlobal("WorkTomorrow","False");
      end
    end

-- Turn off lamps 22:05 day before workday, 
-- and 00:30 day before holiday (test is WorkToday since we are after midnight)
    if (
       (fibaro:getGlobalValue("WorkTomorrow") == "True")
    and
       ( string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "22:22")
       )
    then
       	fibaro:call(38, "turnOff");--Köksfönstren
   		fibaro:sleep(math.random(8000,12000)); 
   		fibaro:call(4, "turnOff");--Bakom Soffan
   		fibaro:sleep(math.random(5000,8000));
   		fibaro:call(33, "turnOff");--Vitrinskåpet
   		fibaro:sleep(math.random(8000,12000));
   		fibaro:call(45, "turnOff");--Bakom Tvn
   		fibaro:sleep(math.random(8000,12000));
   		fibaro:call(36, "turnOff");--Fönsterlampa Alcia
  	 	fibaro:sleep(math.random(8000,12000));
   		fibaro:call(34, "turnOff");--Lampa Byrån
   		fibaro:sleep(math.random(8000,12000));    	
		HC2 = Net.FHttp("192.168.88.243", 6002)--Lampa sovrummet
		response, status, errorCode = HC2:GET("/api/tag/bool/Sovrum::Fönster?Value=false")
		fibaro:log(response);
    end

    if (
       (fibaro:getGlobalValue("WorkToday") == "False")
    and
       ( string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "23:20")
       )
    then
        fibaro:call(38, "turnOff");--Köksfönstren
        fibaro:sleep(math.random(8000,12000)); 
        fibaro:call(4, "turnOff");--Bakom Soffan
        fibaro:sleep(math.random(5000,8000));
        fibaro:call(33, "turnOff");--Vitrinskåpet
        fibaro:sleep(math.random(8000,12000));
   		fibaro:call(45, "turnOff");--Bakom Tvn
  		fibaro:sleep(math.random(8000,12000));
  		fibaro:call(36, "turnOff");--Fönsterlampa Alcia
  	 	fibaro:sleep(math.random(8000,12000));
   		fibaro:call(34, "turnOff");--Lampa Byrån
   		fibaro:sleep(math.random(8000,12000));
   	 	HC2 = Net.FHttp("192.168.88.243", 6002)--Lampa sovrummet
		response, status, errorCode = HC2:GET("/api/tag/bool/Sovrum::Fönster?Value=false")
		fibaro:log(response);
    end

fibaro:sleep(60*1000);

end
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Jag kommer skriva om slutpartiet på din version (och Johan71 borde ändra till det också), men jag vill testa lite. Jag misstänker att det har att göra med att vi försöker trigga 00:01 för att ta in nya värden, och det kan mycket väl vara så att det inte fungerar, för om den inte träffar exakt 00:01 - utan 00:00 sedan är det dygnsskifte så det har lite för mycket att göra, så +60 sekunder gör kanske att man hamnar på 00:02 i nästa loop. Alltså man missar exakt 00:01, vilket är triggern för att läsa upp nya variabler...

Hoppas få lite tid över ikväll för det, vart 3h matlagning igår kväll (oplanerat!) - så tiden försvinner till "fel" saker just nu :mrgreen:
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

sonnyboy wrote:Tror du har rätt, slocknade inte i söndags kväll heller, kollade variablerna, och både today och tomorrow var true :? efter en omstart så fick jag in rätt värden igen.

Idag måndag så är det fel på variablerna också work today är false, fast den inte borde vara det.

Code: Select all

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

function Vacation_Days(dateForCheck)

-- Ange vilka datum som skall anses som lediga datum
   local LedigaDatum = { "2014-05-02" , "2014-05-30" }

   local datum

   for z,datum in pairs(LedigaDatum)
       do
          TestDatum = os.date("*t", os.time({year = tonumber(string.sub(datum,1,4)), month = tonumber(string.sub(datum,6,7)), day = tonumber(string.sub(datum,9))}))
          if ( TestDatum.year == dateForCheck.year and TestDatum.month == dateForCheck.month and TestDatum.day == dateForCheck.day ) then
             return true
          end
       end
   return false
end

function Holidays_CalculateEaster(year)
    golden = (year % 19) + 1
    c = math.floor(year/400) + math.floor(8*(math.floor(year/100)+11)/25) - math.floor(year/100)
    s = (11 * golden + c) % 30
    if (s < 0) then
       s = s + 30
    end
    pfm = os.time{year=year, month=4, day=19} - s * 24 * 60 * 60
    if (pfm == os.time{year=year, month=4, day=19}) then
       pfm = pfm - 24 * 60 * 60
    elseif (pfm == os.time{year=year, month=4, day=18} and golden > 11) then
       pfm = pfm - 24 * 60 * 60
    end
    sunday = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
    friday = sunday - 2 * 24 * 60 * 60

    return {year, tonumber(os.date("%m", friday)), tonumber(os.date("%d", friday))}
end

function WorkDay(dateToCheck)

   local easterDay
   local returnValue

   returnValue = true

-- Indatum är en lördag eller Söndag
   if ( dateToCheck.wday == 1 or dateToCheck.wday == 7 ) then
      returnValue = false
-- Indatum är nationaldag       
   elseif ( dateToCheck.month == 6 and dateToCheck.day == 6 ) then
      returnValue = false
-- Indatum är Nyårsdag eller trettondag
   elseif ( dateToCheck.month == 1 and (dateToCheck.day == 1 or dateToCheck.day == 6 ) ) then
      returnValue = false
-- Indatum är 1:a maj
   elseif ( dateToCheck.month == 5 and dateToCheck.day == 1 ) then
       returnValue = false
-- Indatum är Julafton,Juldag, Annandag eller Nyårsafton
   elseif ( dateToCheck.month == 12 and (dateToCheck.day == 24 or dateToCheck.day == 25 or dateToCheck.day == 26 or dateToCheck.day == 31) ) then
      returnValue = false
   end

-- Långfredag
   easterDay = Holidays_CalculateEaster(dateToCheck.year)
   if ( easterDay[1] == dateToCheck.year and easterDay[2] == dateToCheck.month and easterDay[3] == dateToCheck.day ) then
      returnValue = false
   end
-- AnnandagPåsk
   easterDay2 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+3*24*60*60)
   if ( easterDay2.year == dateToCheck.year and easterDay2.month == dateToCheck.month and easterDay2.day == dateToCheck.day ) then
      returnValue = false
   end
-- Kristihimmelfärdsdag? +41 dagar från Långfredag?
   datum3 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+41*24*60*60)
   if ( datum3.year == dateToCheck.year and datum3.month == dateToCheck.month and datum3.day == dateToCheck.day ) then
      returnValue = false
   end
-- hitta midsommardagen för att kunna kontrollera midsommarafton
-- midsommardagen = den lördag som infaller under tiden den 20-26 juni -> midsommarafton bör vara den fredag som inträffar under tiden 19-25 juni
   if ( dateToCheck.month == 6 and (dateToCheck.day >= 19 and dateToCheck.day <= 25) and dateToCheck.wday == 6 ) then
      returnValue = false
   end

   if ( Vacation_Days(dateToCheck) ) then
      returnValue = false
   end

   return returnValue
end

-- Main Start
-- Make sure the variables are correct at startup
if WorkDay(os.date("*t")) then
   fibaro:setGlobal("WorkToday","True");
else
   fibaro:setGlobal("WorkToday","False");
end
if WorkDay(os.date("*t", os.time()+24*60*60)) then
   fibaro:setGlobal("WorkTomorrow","True");
else
   fibaro:setGlobal("WorkTomorrow","False");
end

-- Main Loop
while true do
   local currentDate = os.date("*t");

-- Only update variables one time each day, 00:01
   if (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "00:01") then
      if WorkDay(os.date("*t")) then
         fibaro:setGlobal("WorkToday","True");
      else
         fibaro:setGlobal("WorkToday","False");
      end
      if WorkDay(os.date("*t", os.time()+24*60*60)) then
         fibaro:setGlobal("WorkTomorrow","True");
      else
         fibaro:setGlobal("WorkTomorrow","False");
      end
    end

-- Turn off lamps 22:05 day before workday, 
-- and 00:30 day before holiday (test is WorkToday since we are after midnight)
    if (
       (fibaro:getGlobalValue("WorkTomorrow") == "True")
    and
       ( string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "22:22")
       )
    then
       	fibaro:call(38, "turnOff");--Köksfönstren
   		fibaro:sleep(math.random(8000,12000)); 
   		fibaro:call(4, "turnOff");--Bakom Soffan
   		fibaro:sleep(math.random(5000,8000));
   		fibaro:call(33, "turnOff");--Vitrinskåpet
   		fibaro:sleep(math.random(8000,12000));
   		fibaro:call(45, "turnOff");--Bakom Tvn
   		fibaro:sleep(math.random(8000,12000));
   		fibaro:call(36, "turnOff");--Fönsterlampa Alcia
  	 	fibaro:sleep(math.random(8000,12000));
   		fibaro:call(34, "turnOff");--Lampa Byrån
   		fibaro:sleep(math.random(8000,12000));    	
		HC2 = Net.FHttp("192.168.88.243", 6002)--Lampa sovrummet
		response, status, errorCode = HC2:GET("/api/tag/bool/Sovrum::Fönster?Value=false")
		fibaro:log(response);
    end

    if (
       (fibaro:getGlobalValue("WorkToday") == "False")
    and
       ( string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "23:20")
       )
    then
        fibaro:call(38, "turnOff");--Köksfönstren
        fibaro:sleep(math.random(8000,12000)); 
        fibaro:call(4, "turnOff");--Bakom Soffan
        fibaro:sleep(math.random(5000,8000));
        fibaro:call(33, "turnOff");--Vitrinskåpet
        fibaro:sleep(math.random(8000,12000));
   		fibaro:call(45, "turnOff");--Bakom Tvn
  		fibaro:sleep(math.random(8000,12000));
  		fibaro:call(36, "turnOff");--Fönsterlampa Alcia
  	 	fibaro:sleep(math.random(8000,12000));
   		fibaro:call(34, "turnOff");--Lampa Byrån
   		fibaro:sleep(math.random(8000,12000));
   	 	HC2 = Net.FHttp("192.168.88.243", 6002)--Lampa sovrummet
		response, status, errorCode = HC2:GET("/api/tag/bool/Sovrum::Fönster?Value=false")
		fibaro:log(response);
    end

fibaro:sleep(60*1000);

end
Men den där koden är ju inte den jag skrivit - du har ändrat! Den har fel test, den sista skall testa på:
(fibaro:getGlobalValue("WorkTomorrow") == "False")

I vilket fall, testa DENNA kod, och kom ihåg att spara:

Code: Select all

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

            function Vacation_Days(dateForCheck)

            -- Ange vilka datum som skall anses som lediga datum
               local LedigaDatum = { "2014-05-02" , "2014-05-30" }

               local datum

               for z,datum in pairs(LedigaDatum)
                   do
                      TestDatum = os.date("*t", os.time({year = tonumber(string.sub(datum,1,4)), month = tonumber(string.sub(datum,6,7)), day = tonumber(string.sub(datum,9))}))
                      if ( TestDatum.year == dateForCheck.year and TestDatum.month == dateForCheck.month and TestDatum.day == dateForCheck.day ) then
                         return true
                      end
                   end
               return false
            end

            function Holidays_CalculateEaster(year)
                golden = (year % 19) + 1
                c = math.floor(year/400) + math.floor(8*(math.floor(year/100)+11)/25) - math.floor(year/100)
                s = (11 * golden + c) % 30
                if (s < 0) then
                   s = s + 30
                end
                pfm = os.time{year=year, month=4, day=19} - s * 24 * 60 * 60
                if (pfm == os.time{year=year, month=4, day=19}) then
                   pfm = pfm - 24 * 60 * 60
                elseif (pfm == os.time{year=year, month=4, day=18} and golden > 11) then
                   pfm = pfm - 24 * 60 * 60
                end
                sunday = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
                friday = sunday - 2 * 24 * 60 * 60

                return {year, tonumber(os.date("%m", friday)), tonumber(os.date("%d", friday))}
            end

            function WorkDay(dateToCheck)

               local easterDay
               local returnValue

               returnValue = true

            -- Indatum är en lördag eller Söndag
               if ( dateToCheck.wday == 1 or dateToCheck.wday == 7 ) then
                  returnValue = false
            -- Indatum är nationaldag       
               elseif ( dateToCheck.month == 6 and dateToCheck.day == 6 ) then
                  returnValue = false
            -- Indatum är Nyårsdag eller trettondag
               elseif ( dateToCheck.month == 1 and (dateToCheck.day == 1 or dateToCheck.day == 6 ) ) then
                  returnValue = false
            -- Indatum är 1:a maj
               elseif ( dateToCheck.month == 5 and dateToCheck.day == 1 ) then
                   returnValue = false
            -- Indatum är Julafton,Juldag, Annandag eller Nyårsafton
               elseif ( dateToCheck.month == 12 and (dateToCheck.day == 24 or dateToCheck.day == 25 or dateToCheck.day == 26 or dateToCheck.day == 31) ) then
                  returnValue = false
               end

            -- Långfredag
               easterDay = Holidays_CalculateEaster(dateToCheck.year)
               if ( easterDay[1] == dateToCheck.year and easterDay[2] == dateToCheck.month and easterDay[3] == dateToCheck.day ) then
                  returnValue = false
               end
            -- AnnandagPåsk
               easterDay2 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+3*24*60*60)
               if ( easterDay2.year == dateToCheck.year and easterDay2.month == dateToCheck.month and easterDay2.day == dateToCheck.day ) then
                  returnValue = false
               end
            -- Kristihimmelfärdsdag? +41 dagar från Långfredag?
               datum3 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+41*24*60*60)
               if ( datum3.year == dateToCheck.year and datum3.month == dateToCheck.month and datum3.day == dateToCheck.day ) then
                  returnValue = false
               end
            -- hitta midsommardagen för att kunna kontrollera midsommarafton
            -- midsommardagen = den lördag som infaller under tiden den 20-26 juni -> midsommarafton bör vara den fredag som inträffar under tiden 19-25 juni
               if ( dateToCheck.month == 6 and (dateToCheck.day >= 19 and dateToCheck.day <= 25) and dateToCheck.wday == 6 ) then
                  returnValue = false
               end

               if ( Vacation_Days(dateToCheck) ) then
                  returnValue = false
               end

               return returnValue
            end



        --Settings
        LExecuteSecond = 60; -- Execute Every N-th second
        -- Moved time settings to inside while loop for generating new values correct
        LMidnightHour ="0100"; --Time which is considered to be midnight
        LMidnightTime =0; -- Time when values are reset if empty it will run imediately

        --kill any extra instances of the same scene
        if (fibaro:countScenes() > 1) then fibaro:abort() end;

        --Loop
        while true do

        -- Current Time
           LCurrentDate = os.date("*t"); -- Current Date in table format
           LCurrentTime = os.time(); -- Current time in unix format
         
        -- Check if workday
           if (LMidnightTime < LCurrentTime) then
              if WorkDay(os.date("*t")) then
                 fibaro:setGlobal("WorkToday","True");
              else
                 fibaro:setGlobal("WorkToday","False");
              end

              if WorkDay(os.date("*t", os.time()+24*60*60)) then
                 fibaro:setGlobal("WorkTomorrow","True");
              else
                 fibaro:setGlobal("WorkTomorrow","False");
              end

        -- MidnightTime
	      LMidnightTime = os.time{year=LCurrentDate.year, month=LCurrentDate.month, day=LCurrentDate.day+1, hour=string.sub(LMidnightHour, 1 , 2), min=string.sub(LMidnightHour, 3)};


              fibaro:debug("Work Today: " .. fibaro:getGlobalValue("WorkToday"));
              fibaro:debug("Work Tomorrow: " .. fibaro:getGlobalValue("WorkTomorrow"));
           end

        -- Turn off lamps 22:22 when tomorrow is workday, and 23:20 when tomorrow is not a workday

            if (
               (fibaro:getGlobalValue("WorkTomorrow") == "True")
            and
               ( string.format("%02d", LCurrentDate.hour) .. ":" .. string.format("%02d", LCurrentDate.min) == "22:22")
               )
            then
                  fibaro:call(38, "turnOff");--Köksfönstren
                 fibaro:sleep(math.random(8000,12000));
                 fibaro:call(4, "turnOff");--Bakom Soffan
                 fibaro:sleep(math.random(5000,8000));
                 fibaro:call(33, "turnOff");--Vitrinskåpet
                 fibaro:sleep(math.random(8000,12000));
                 fibaro:call(45, "turnOff");--Bakom Tvn
                 fibaro:sleep(math.random(8000,12000));
                 fibaro:call(36, "turnOff");--Fönsterlampa Alcia
                 fibaro:sleep(math.random(8000,12000));
                 fibaro:call(34, "turnOff");--Lampa Byrån
                 fibaro:sleep(math.random(8000,12000));       
              HC2 = Net.FHttp("192.168.88.243", 6002)--Lampa sovrummet
              response, status, errorCode = HC2:GET("/api/tag/bool/Sovrum::Fönster?Value=false")
              fibaro:log(response);
            end

            if (
               (fibaro:getGlobalValue("WorkTomorrow") == "False")
            and
               ( string.format("%02d", LCurrentDate.hour) .. ":" .. string.format("%02d", LCurrentDate.min) == "23:20")
               )
            then
                fibaro:call(38, "turnOff");--Köksfönstren
                fibaro:sleep(math.random(8000,12000));
                fibaro:call(4, "turnOff");--Bakom Soffan
                fibaro:sleep(math.random(5000,8000));
                fibaro:call(33, "turnOff");--Vitrinskåpet
                fibaro:sleep(math.random(8000,12000));
                 fibaro:call(45, "turnOff");--Bakom Tvn
                fibaro:sleep(math.random(8000,12000));
                fibaro:call(36, "turnOff");--Fönsterlampa Alcia
                 fibaro:sleep(math.random(8000,12000));
                 fibaro:call(34, "turnOff");--Lampa Byrån
                 fibaro:sleep(math.random(8000,12000));
                  HC2 = Net.FHttp("192.168.88.243", 6002)--Lampa sovrummet
              response, status, errorCode = HC2:GET("/api/tag/bool/Sovrum::Fönster?Value=false")
              fibaro:log(response);
            end


        --Sleep XX seconds
        fibaro:sleep(LExecuteSecond*1000);
         
        end
OBServera att jag bytt ut hela main i stort sett, förutom lampdelarna då. Men även bytt testet som tidigare var fel.

Edit: Kod uppdaterad....
Edit2: Glömde en variabel till som behövs....
Last edited by Bamsefar on 22 May 2014, 00:49, edited 2 times in total.
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Tack Bamsefar, den ska in direkt, Jag tackar ödmjukast för att du vill hjälpa mig med detta.
Är inte medveten om att jag ändrat i koden där :? men men.
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Kommer dock ett litet error i loggen från rad 136
och jag har inte ändrat något i den delen an koden.
Attachments
Error.png
Error.png (4.18 KiB) Viewed 19757 times
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Jaha - syntax error vid klipp och klistra - jaja... Ändrat koden i inlägget ovan.
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Nu kommer det inget i loggen mer än det som ska :)
Tackar så mycket.

Skickat från min SM-G900F via Tapatalk
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Men dessvärre finns ett fel till, glömde uppdatera LMidnightTime...
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Då har jag uppdaterat igen :)
Passade även på att lägga in semestern som lediga dagar.
Jag noterade att nu kommer inte workToday och Tomorrow i loggen varje minut.
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Variabeln uppdateras inte som sig bör i morse så var det workday tomorrow false. Då körde jag scenen och då vart den true.

Code: Select all

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

            function Vacation_Days(dateForCheck)

            -- Ange vilka datum som skall anses som lediga datum
               local LedigaDatum = { "2014-05-02" , "2014-05-30" , "2014-07-07" , "2014-07-08" , "2014-07-09" , "2014-07-10" , "2014-07-11" , "2014-07-14" , "2014-07-15" , "2014-07-16" , "2014-07-17" , "2014-07-18" , "2014-07-21" , "2014-07-22" , "2014-07-23" , "2014-07-24" , "2014-07-25" , "2014-07-28" , "2014-07-29" , "2014-07-30" , "2014-07-31" , "2014-08-01" }

               local datum

               for z,datum in pairs(LedigaDatum)
                   do
                      TestDatum = os.date("*t", os.time({year = tonumber(string.sub(datum,1,4)), month = tonumber(string.sub(datum,6,7)), day = tonumber(string.sub(datum,9))}))
                      if ( TestDatum.year == dateForCheck.year and TestDatum.month == dateForCheck.month and TestDatum.day == dateForCheck.day ) then
                         return true
                      end
                   end
               return false
            end

            function Holidays_CalculateEaster(year)
                golden = (year % 19) + 1
                c = math.floor(year/400) + math.floor(8*(math.floor(year/100)+11)/25) - math.floor(year/100)
                s = (11 * golden + c) % 30
                if (s < 0) then
                   s = s + 30
                end
                pfm = os.time{year=year, month=4, day=19} - s * 24 * 60 * 60
                if (pfm == os.time{year=year, month=4, day=19}) then
                   pfm = pfm - 24 * 60 * 60
                elseif (pfm == os.time{year=year, month=4, day=18} and golden > 11) then
                   pfm = pfm - 24 * 60 * 60
                end
                sunday = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
                friday = sunday - 2 * 24 * 60 * 60

                return {year, tonumber(os.date("%m", friday)), tonumber(os.date("%d", friday))}
            end

            function WorkDay(dateToCheck)

               local easterDay
               local returnValue

               returnValue = true

            -- Indatum är en lördag eller Söndag
               if ( dateToCheck.wday == 1 or dateToCheck.wday == 7 ) then
                  returnValue = false
            -- Indatum är nationaldag       
               elseif ( dateToCheck.month == 6 and dateToCheck.day == 6 ) then
                  returnValue = false
            -- Indatum är Nyårsdag eller trettondag
               elseif ( dateToCheck.month == 1 and (dateToCheck.day == 1 or dateToCheck.day == 6 ) ) then
                  returnValue = false
            -- Indatum är 1:a maj
               elseif ( dateToCheck.month == 5 and dateToCheck.day == 1 ) then
                   returnValue = false
            -- Indatum är Julafton,Juldag, Annandag eller Nyårsafton
               elseif ( dateToCheck.month == 12 and (dateToCheck.day == 24 or dateToCheck.day == 25 or dateToCheck.day == 26 or dateToCheck.day == 31) ) then
                  returnValue = false
               end

            -- Långfredag
               easterDay = Holidays_CalculateEaster(dateToCheck.year)
               if ( easterDay[1] == dateToCheck.year and easterDay[2] == dateToCheck.month and easterDay[3] == dateToCheck.day ) then
                  returnValue = false
               end
            -- AnnandagPåsk
               easterDay2 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+3*24*60*60)
               if ( easterDay2.year == dateToCheck.year and easterDay2.month == dateToCheck.month and easterDay2.day == dateToCheck.day ) then
                  returnValue = false
               end
            -- Kristihimmelfärdsdag? +41 dagar från Långfredag?
               datum3 = os.date("*t", os.time({year = easterDay[1], month = easterDay[2], day = easterDay[3]})+41*24*60*60)
               if ( datum3.year == dateToCheck.year and datum3.month == dateToCheck.month and datum3.day == dateToCheck.day ) then
                  returnValue = false
               end
            -- hitta midsommardagen för att kunna kontrollera midsommarafton
            -- midsommardagen = den lördag som infaller under tiden den 20-26 juni -> midsommarafton bör vara den fredag som inträffar under tiden 19-25 juni
               if ( dateToCheck.month == 6 and (dateToCheck.day >= 19 and dateToCheck.day <= 25) and dateToCheck.wday == 6 ) then
                  returnValue = false
               end

               if ( Vacation_Days(dateToCheck) ) then
                  returnValue = false
               end

               return returnValue
            end



        --Settings
        LExecuteSecond = 60; -- Execute Every N-th second
        -- Moved time settings to inside while loop for generating new values correct
        LMidnightHour ="0100"; --Time which is considered to be midnight
        LMidnightTime =0; -- Time when values are reset if empty it will run imediately

        --kill any extra instances of the same scene
        if (fibaro:countScenes() > 1) then fibaro:abort() end;

        --Loop
        while true do

        -- Current Time
           LCurrentDate = os.date("*t"); -- Current Date in table format
           LCurrentTime = os.time(); -- Current time in unix format
         
        -- Check if workday
           if (LMidnightTime < LCurrentTime) then
              if WorkDay(os.date("*t")) then
                 fibaro:setGlobal("WorkToday","True");
              else
                 fibaro:setGlobal("WorkToday","False");
              end

              if WorkDay(os.date("*t", os.time()+24*60*60)) then
                 fibaro:setGlobal("WorkTomorrow","True");
              else
                 fibaro:setGlobal("WorkTomorrow","False");
              end

        -- MidnightTime
         LMidnightTime = os.time{year=LCurrentDate.year, month=LCurrentDate.month, day=LCurrentDate.day+1, hour=string.sub(LMidnightHour, 1 , 2), min=string.sub(LMidnightHour, 3)};


              fibaro:debug("Work Today: " .. fibaro:getGlobalValue("WorkToday"));
              fibaro:debug("Work Tomorrow: " .. fibaro:getGlobalValue("WorkTomorrow"));
           end

        -- Turn off lamps 22:22 when tomorrow is workday, and 23:20 when tomorrow is not a workday

            if (
               (fibaro:getGlobalValue("WorkTomorrow") == "True")
            and
               ( string.format("%02d", LCurrentDate.hour) .. ":" .. string.format("%02d", LCurrentDate.min) == "22:22")
               )
            then
                 fibaro:call(38, "turnOff");--Köksfönstren
                 fibaro:sleep(math.random(8000,12000));
                 fibaro:call(4, "turnOff");--Bakom Soffan
                 fibaro:sleep(math.random(5000,8000));
                 fibaro:call(33, "turnOff");--Vitrinskåpet
                 fibaro:sleep(math.random(8000,12000));
                 fibaro:call(45, "turnOff");--Bakom Tvn
                 fibaro:sleep(math.random(8000,12000));
                 fibaro:call(36, "turnOff");--Fönsterlampa Alcia
                 fibaro:sleep(math.random(8000,12000));
                 fibaro:call(34, "turnOff");--Lampa Byrån
                 fibaro:sleep(math.random(8000,12000));       
                 fibaro:call(79, "pressButton", "2");--Lampa Sovrummet
    	         fibaro:sleep(math.random(5000,8000));
    	         fibaro:call(80, "pressButton", "2");--Lampa Diskbänken
    	         fibaro:sleep(math.random(5000,8000));
              fibaro:log(response);
            end

            if (
               (fibaro:getGlobalValue("WorkTomorrow") == "False")
            and
               ( string.format("%02d", LCurrentDate.hour) .. ":" .. string.format("%02d", LCurrentDate.min) == "23:20")
               )
            then
                fibaro:call(38, "turnOff");--Köksfönstren
                fibaro:sleep(math.random(8000,12000));
                fibaro:call(4, "turnOff");--Bakom Soffan
                fibaro:sleep(math.random(5000,8000));
                fibaro:call(33, "turnOff");--Vitrinskåpet
                fibaro:sleep(math.random(8000,12000));
                fibaro:call(45, "turnOff");--Bakom Tvn
                fibaro:sleep(math.random(8000,12000));
                fibaro:call(36, "turnOff");--Fönsterlampa Alcia
                fibaro:sleep(math.random(8000,12000));
                fibaro:call(34, "turnOff");--Lampa Byrån
                fibaro:sleep(math.random(8000,12000));
                fibaro:call(79, "pressButton", "2");--Lampa Sovrummet
    	        fibaro:sleep(math.random(5000,8000));
    	        fibaro:call(80, "pressButton", "2");--Lampa Diskbänken
    	        fibaro:sleep(math.random(5000,8000));
              fibaro:log(response);
            end


        --Sleep XX seconds
        fibaro:sleep(LExecuteSecond*1000);
         
        end
Skickat från min SM-G900F via Tapatalk
Last edited by sonnyboy on 25 May 2014, 09:38, edited 1 time in total.
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Johan71
Medlem
Posts: 84
Joined: 24 Jan 2014, 11:46
10

Hej
Då mitt i dagsläget fungerar perfekt så inväntar jag tills ni har löst problemen innan jag ändrar något.
Å andra sidan så har jag inte startat om min HC2 på 48 dagar så det är möjligt att det inte fungerar vid en omstart.
MVH Johan
_____________________________
Fibaro Home Center 2
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Sonnyboy, jag har ingen aning varför något fungerar på andra hc2or inte fungerar hos dig. Men du har ju kört scenen några dygn nu. Vad står det i debug fönstret?
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Detta fans i morse,

[DEBUG] 10:12:46: Work Today: False
[DEBUG] 10:12:46: Work Tomorrow: False
[ERROR] 23:21:52: line 184: attempt to call method 'log' (a nil value)

Detta vart efter jag tryckte på kör

[DEBUG] 08:17:13: Work Today: False
[DEBUG] 08:17:13: Work Tomorrow: True
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Ta bort dom två raderna som säger:
Fibaro:log(response)

Jag vet inte vad dom gör där. Dom fungerar inte i detta sammanhang då variabeln response inte finns i scenen. Vetcdu varifrån den kommer? För just dessa rader avbryter scenen och då stannar allt, och det förklarar med hög sannolikhet ditt problem...
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Hmm dessa två hade smygit sig in från min gamla nexa som släcktes,
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Post Reply