Dni wolne od pracy w Inteligentnym domu

  • 17 Odpowiedzi
  • 10844 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline admin

  • Administratorzy
  • ***** 10
  • 1
Dni wolne od pracy w Inteligentnym domu
« dnia: Marzec 24, 2015, 08:43:13 pm »
Niemałym kłopotem w moim inteligentnym domu są dni wolne ustawowo od pracy które przypadają od poniedziałku do piątku. Wtedy niepotrzebnie rano otwierają się rolety (a mógłbym pospać dłużej), niepotrzebnie odzywa się budzik czy zmienia program ogrzewania. Postanowiłem coś z tym zrobić tak żeby mój dom wiedział o tym że jest dzień wolny. Opracowałem więc scenę która to w odpowiedni sposób wylicza.
Scena sprawdza, czy dzisiaj mamy dzień roboczy czy wolny i wstawia do zmiennej globalnej wartość 1 jeśli wolny lub 0 jeśli dzień pracujący.
Dzień wolny to : soboty, niedziele, dni ustawowo wolne w tym ruchome „lany poniedziałek” i „boże ciało”. Scena uruchamia się sama, codziennie o godzinie 00:01.
Można to wykorzystać później w scenach bloczkowych.
Przed uruchomieniem sceny należy założyć zmienną globalną o nazwie : „dzien_wolny”
--[[
%% autostart
%% properties
%% globals
--]]local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
while true do
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "00:01") )
)
then
wolny=0
rok=os.date("%Y")
zm = (rok % 19) + 1
c = math.floor(rok/400) + math.floor(8*(math.floor(rok/100)+11)/25) - math.floor(rok/100)
s = (11 * zm + c) % 30
if (s < 0) then
s = s + 30
end
pfm = os.time{year=rok, month=4, day=19} - s * 24 * 60 * 60
if (pfm == os.time{year=rok, month=4, day=19}) then
pfm = pfm - 24 * 60 * 60
elseif (pfm == os.time{year=rok, month=4, day=18} and zm > 11) then
pfm = pfm - 24 * 60 * 60
end
niedz = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
poniedz = niedz + 1 * 24 * 60 * 60
bozec = niedz + 60 * 24 * 60 * 60
wielkanoc = os.date("%m", niedz)..os.date("%d", niedz)
lanyponiedz= os.date("%m", poniedz)..os.date("%d", poniedz)
bozecialo= os.date("%m", bozec)..os.date("%d", bozec)
t= {"0101","0106","0501","0503","0815","1101","1111","1225","1226"}
table.insert(t,lanyponiedz)
table.insert(t,bozecialo)
data= tostring(os.date("%m%d"))
fibaro:debug(data)
for a, b in pairs(t) do
if data==b then
wolny = 1
end
end
local dzis = os.date("*t");
if (dzis.wday == 1 or dzis.wday == 7) or wolny == 1 then
fibaro:debug("Dzień wolny : TAK")
fibaro:setGlobal("dzien_wolny",1)
else
fibaro:debug("Dzień wolny : NIE")
fibaro:setGlobal("dzien_wolny",0)
end
end
fibaro:sleep(60*1000);
end
else
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
wolny=0
rok=os.date("%Y")
zm = (rok % 19) + 1
c = math.floor(rok/400) + math.floor(8*(math.floor(rok/100)+11)/25) - math.floor(rok/100)
s = (11 * zm + c) % 30
if (s < 0) then
s = s + 30
end
pfm = os.time{year=rok, month=4, day=19} - s * 24 * 60 * 60
if (pfm == os.time{year=rok, month=4, day=19}) then
pfm = pfm - 24 * 60 * 60
elseif (pfm == os.time{year=rok, month=4, day=18} and zm > 11) then
pfm = pfm - 24 * 60 * 60
end
niedz = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
poniedz = niedz + 1 * 24 * 60 * 60
bozec = niedz + 60 * 24 * 60 * 60
wielkanoc = os.date("%m", niedz)..os.date("%d", niedz)
lanyponiedz= os.date("%m", poniedz)..os.date("%d", poniedz)
bozecialo= os.date("%m", bozec)..os.date("%d", bozec)
t= {"0101","0106","0501","0503","0815","1101","1111","1225","1226"}
table.insert(t,lanyponiedz)
table.insert(t,bozecialo)
data= tostring(os.date("%m%d"))
fibaro:debug(data)
for a, b in pairs(t) do
if data==b then
wolny = 1
end
end
local dzis = os.date("*t");
if (dzis.wday == 1 or dzis.wday == 7) or wolny == 1 then
fibaro:debug("Dzień wolny : TAK")
fibaro:setGlobal("dzien_wolny",1)
else
fibaro:debug("Dzień wolny : NIE")
fibaro:setGlobal("dzien_wolny",0)
end
end
end
« Ostatnia zmiana: Marzec 24, 2015, 08:47:14 pm wysłana przez sztywniak »
*

Offline richo

  • Moderator Globalny
  • ***** 146
  • 6
  • Nazwa i wersja ID: Indigo 6/HC 4.037
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #1 dnia: Marzec 29, 2015, 01:19:38 am »
To jest naprawdę niezły pomysł, muszę tylko przerobić ją w Pythonie, chyba ze znajdę gdzieś auto translator LUA-Python


Sent using Tapatalk

PS
Właśnie ktoś to za mnie zrobił w Pythonie :-)
http://forums.indigodomo.com/viewtopic.php?f=107&t=13772
« Ostatnia zmiana: Kwiecień 03, 2015, 02:05:34 pm wysłana przez richo »
richo
*

Offline wiesiekr

  • ** 86
  • 4
  • Nazwa i wersja ID: HC2. HCL
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #2 dnia: Styczeń 03, 2016, 10:17:42 am »
A jak tą scenę zastosować żeby sterowała ogrzewaniem poprzez harmonogram.
*

Offline Piotr B

  • ** 64
  • 0
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #3 dnia: Styczeń 03, 2016, 10:48:36 am »
witam,
Pomysł jest co najmniej bardzo dobry :).

Mam pytanie (bo dla mnie jest to na razie za trudne zadanie), czy może dałoby sie troszkę tą scene rozbudowac.

Ja bym widział to tak - scena wczytuje tabele z zewnętrznego źródła (plik w jakiejś lokalizacji), gdzie ma zapisane wszystkie święta oraz urlopy :) i na tej podstawie wyznacza czy jest to dzien wolny czy tez nie.

Można by zasadniczo dodać kilka zmiennych i tabel (dla sytuacji gdy chcemy aby budzeni byli tylko wybrani domownicy - bo dzieci szkolne mają inne dni wolne).

Pozdrawiam

Piotr
*

Offline zen

  • *** 171
  • 3
  • Nazwa i wersja ID: Home Assistant
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #4 dnia: Styczeń 10, 2016, 09:51:07 pm »
A nie łatwiej użyć Google Calendar API albo pobrać sobie ICS z kalendarza świąt i obrobić go przez dajmy na to http://lua-users.org/lists/lua-l/2011-06/msg00644.html#Q3RJEBwB2WMDeoCL46OUtw ?
*

Offline pd77

  • * 2
  • 0
Odp: Dni wolne od pracy w Inteligentnym domu - prośba o pomoc
« Odpowiedź #5 dnia: Styczeń 03, 2017, 12:40:29 pm »
Witam,

Zrobiłem scenę z dniami wolnymi wg powyższego przepisu. Działa bardzo fajnie. Po północy scena się sama uruchamia i daje zmienną globalną 1 lub 0.
Problem mam z wykorzystaniem tej zmiennej w scenach bloczkowych. Chciałbym zrobić prostą scenę polegającą na tym, że jeśli o godzinie 6.30 od poniedziałku do piątku zmienna globalna "dzien_wolny" ma wartość 0 (czyli jest dzień roboczy) to włącza się światło w pokoju.
Scenę zrobiłem jak w załączniku ale problem jest taki, że przy takiej konstrukcji po zmianie zmiennej globalnej o północy z 1 na 0 lub z 0 na 1 to światło od razu się włącza.
Proszę kogoś biegłego w temacie o pomoc bo nie mogę sobie z tym poradzić.

*

Offline viperlodz

  • Moderator Globalny
  • ***** 838
  • 23
  • Nazwa i wersja ID: HC3 / HC2/ HC3L / Yubii
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #6 dnia: Styczeń 03, 2017, 03:03:38 pm »
odznacz w innej scenie jako wyzwalacz zmiane zmiennej
*

Offline pd77

  • * 2
  • 0
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #7 dnia: Styczeń 19, 2017, 10:15:39 pm »
Dziękuję. Faktycznie wystarczyło odznaczyć w scenie wyzwalacz w postaci zmiennej globalnej i wszystko działa jak należy.
*

Offline wiesiekr

  • ** 86
  • 4
  • Nazwa i wersja ID: HC2. HCL
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #8 dnia: Styczeń 20, 2017, 12:36:14 am »
Panowie a jak to zrobić żeby w HCL działało ?
*

Offline Pokemon

  • * 13
  • 0
  • Nazwa i wersja ID: Fibaro HC2 4.1
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #9 dnia: Styczeń 31, 2017, 11:55:38 pm »
Dziękuję. Faktycznie wystarczyło odznaczyć w scenie wyzwalacz w postaci zmiennej globalnej i wszystko działa jak należy.

Witam.
ponieważ zaczynam przygodę z Fibaro HC2 prosiłbym o pomoc kolegę jak to zrobić z wykorzystaniem skryptu odnośnie dni wolnych. Np nie chciałbym żeby załanczały mi się urządzenia w dni wolne od pracy i zgodnie ze wcześniejszymi postami ustawiłem w panelu zmiennych zmienną dni wolne tak jak w załączniku. Następnie utworzyłem  scenę i przekopiowałem skrypt podany wcześniej w poście jednak po uruchomieniu pokazuje mi błąd.
« Ostatnia zmiana: Luty 06, 2017, 09:00:46 pm wysłana przez Pokemon »
*

Offline confesor

  • ** 82
  • 1
  • Nazwa i wersja ID: Hc2 4.056/4.100 HCLite/ bluboc/Samsung
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #10 dnia: Luty 01, 2017, 12:04:46 am »
Na poczatku w lini 6 skasuj na poczatku te 3 znaki "--]" bo nie bierze ich program pod uwage i zobaczysz co dalej
*

Offline Pokemon

  • * 13
  • 0
  • Nazwa i wersja ID: Fibaro HC2 4.1
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #11 dnia: Luty 01, 2017, 06:43:03 pm »
Dzięki za szybką odpowiedź. Skrypt działa i odpowiedział, że dziś nie jest dzień wolny  :'( .
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #12 dnia: Kwiecień 09, 2020, 08:43:03 am »

Próbuję się przenieść na nową centralkę HC3, brakuje mi kilka rozwiązań z HC2.
Może ktoś już ogarnął dni wolne na nowej centralce i może się podzielić swoim rozwiązaniem.



« Ostatnia zmiana: Kwiecień 13, 2020, 10:02:55 am wysłana przez rafal_ll »
*

Offline rafal_ll

  • ** 48
  • 3
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #13 dnia: Styczeń 17, 2021, 09:19:34 pm »
Da się taką scenę przystosować do pracy na HC3
Bardzo bym ją potrzebował.
Są rozwiązania kalendarza oparte na zewnętrznych danych


Niemałym kłopotem w moim inteligentnym domu są dni wolne ustawowo od pracy które przypadają od poniedziałku do piątku. Wtedy niepotrzebnie rano otwierają się rolety (a mógłbym pospać dłużej), niepotrzebnie odzywa się budzik czy zmienia program ogrzewania. Postanowiłem coś z tym zrobić tak żeby mój dom wiedział o tym że jest dzień wolny. Opracowałem więc scenę która to w odpowiedni sposób wylicza.
Scena sprawdza, czy dzisiaj mamy dzień roboczy czy wolny i wstawia do zmiennej globalnej wartość 1 jeśli wolny lub 0 jeśli dzień pracujący.
Dzień wolny to : soboty, niedziele, dni ustawowo wolne w tym ruchome „lany poniedziałek” i „boże ciało”. Scena uruchamia się sama, codziennie o godzinie 00:01.
Można to wykorzystać później w scenach bloczkowych.
Przed uruchomieniem sceny należy założyć zmienną globalną o nazwie : „dzien_wolny”
--[[
%% autostart
%% properties
%% globals
--]]local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
while true do
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "00:01") )
)
then
wolny=0
rok=os.date("%Y")
zm = (rok % 19) + 1
c = math.floor(rok/400) + math.floor(8*(math.floor(rok/100)+11)/25) - math.floor(rok/100)
s = (11 * zm + c) % 30
if (s < 0) then
s = s + 30
end
pfm = os.time{year=rok, month=4, day=19} - s * 24 * 60 * 60
if (pfm == os.time{year=rok, month=4, day=19}) then
pfm = pfm - 24 * 60 * 60
elseif (pfm == os.time{year=rok, month=4, day=18} and zm > 11) then
pfm = pfm - 24 * 60 * 60
end
niedz = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
poniedz = niedz + 1 * 24 * 60 * 60
bozec = niedz + 60 * 24 * 60 * 60
wielkanoc = os.date("%m", niedz)..os.date("%d", niedz)
lanyponiedz= os.date("%m", poniedz)..os.date("%d", poniedz)
bozecialo= os.date("%m", bozec)..os.date("%d", bozec)
t= {"0101","0106","0501","0503","0815","1101","1111","1225","1226"}
table.insert(t,lanyponiedz)
table.insert(t,bozecialo)
data= tostring(os.date("%m%d"))
fibaro:debug(data)
for a, b in pairs(t) do
if data==b then
wolny = 1
end
end
local dzis = os.date("*t");
if (dzis.wday == 1 or dzis.wday == 7) or wolny == 1 then
fibaro:debug("Dzień wolny : TAK")
fibaro:setGlobal("dzien_wolny",1)
else
fibaro:debug("Dzień wolny : NIE")
fibaro:setGlobal("dzien_wolny",0)
end
end
fibaro:sleep(60*1000);
end
else
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
wolny=0
rok=os.date("%Y")
zm = (rok % 19) + 1
c = math.floor(rok/400) + math.floor(8*(math.floor(rok/100)+11)/25) - math.floor(rok/100)
s = (11 * zm + c) % 30
if (s < 0) then
s = s + 30
end
pfm = os.time{year=rok, month=4, day=19} - s * 24 * 60 * 60
if (pfm == os.time{year=rok, month=4, day=19}) then
pfm = pfm - 24 * 60 * 60
elseif (pfm == os.time{year=rok, month=4, day=18} and zm > 11) then
pfm = pfm - 24 * 60 * 60
end
niedz = pfm + (7 - tonumber(os.date("%w", pfm))) * 24 * 60 * 60
poniedz = niedz + 1 * 24 * 60 * 60
bozec = niedz + 60 * 24 * 60 * 60
wielkanoc = os.date("%m", niedz)..os.date("%d", niedz)
lanyponiedz= os.date("%m", poniedz)..os.date("%d", poniedz)
bozecialo= os.date("%m", bozec)..os.date("%d", bozec)
t= {"0101","0106","0501","0503","0815","1101","1111","1225","1226"}
table.insert(t,lanyponiedz)
table.insert(t,bozecialo)
data= tostring(os.date("%m%d"))
fibaro:debug(data)
for a, b in pairs(t) do
if data==b then
wolny = 1
end
end
local dzis = os.date("*t");
if (dzis.wday == 1 or dzis.wday == 7) or wolny == 1 then
fibaro:debug("Dzień wolny : TAK")
fibaro:setGlobal("dzien_wolny",1)
else
fibaro:debug("Dzień wolny : NIE")
fibaro:setGlobal("dzien_wolny",0)
end
end
end
*

Offline wiesiekr

  • ** 86
  • 4
  • Nazwa i wersja ID: HC2. HCL
Odp: Dni wolne od pracy w Inteligentnym domu
« Odpowiedź #14 dnia: Luty 15, 2021, 11:44:33 am »
Czy udało Ci się rozwiązać problem z sceną Dni Wolne, działa Ci na HC3 ?