-
Notifications
You must be signed in to change notification settings - Fork 5
/
script_time_chauffage_autoplanification.lua
182 lines (125 loc) · 6.26 KB
/
script_time_chauffage_autoplanification.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
-------------------------------------------------------------
-- Script d'action des scripts de gestion du chauffage
------------------------------------------------------------
-- 1. Mode Auto
-- => Si ON alors active ce script
-- 2. Device 'Chauffage Auto Planification'
-- => Si ON, alors on active ce script
-------------------------------------------------------------
package.path = package.path .. ';' .. '/home/pi/domoticz/scripts/lua/?.lua'
require("library")
----------------
-- Paramètres --
----------------
dehors_min = 16
chambre_matin_start = -35 -- démarre le chauffage chambre en monde confort x min le matin avant reveil
chambre_matin_end = -5 -- stop le chauffage chambre x min le matin avant reveil
sdb_matin_start = -90
sdb_matin_end = 0
----------------
----------------
commandArray = {}
-- On détermine si on est un jour feriée
is_jour_ferie = 0
date_jour = os.date("%x")
for jourferie_i in string.gmatch(uservariables['Var_Jours_Feries'], "%S+") do -- %S+ matche tout ce qui n'est pas un espace
_, _, jour_ferie_j, jour_ferie_m, jour_ferie_a = string.find(jourferie_i, "(%d+)/(%d+)/(%d+)")
date_jour_ferie = os.date("%x", os.time{day=jour_ferie_j, month=jour_ferie_m, year='20'..jour_ferie_a})
if (date_jour_ferie == date_jour) then -- Si on est dans la journée fériée
is_jour_ferie = 1
break -- on sort de la bouche si on sait qu'on est un jour fériée
end
end
-- variables --
datetime = os.date("*t") -- table is returned containing date & time information
time_inminutes = 60 * datetime.hour + datetime.min
_, _, alarm1, alarm2 = string.find(uservariables['Var_Alarmclock'], "(%d+):(%d+)") -- extrait heure / minute de la variable alarmclock
alarmclock_inminutes = 60 * tonumber(alarm1) + tonumber(alarm2)
-- Temperature chauffage
chambre_consigne_valeur = uservariables['Var_Chauffage_chambre_Consigne']
chambre_consigne_onoff = otherdevices['Chauffage Chambre Consigne']
sdb_consigne_onoff = otherdevices['Chauffage Sdb Consigne']
chambre_temp = otherdevices_temperature['Temp chambre'] or 18
dehors_temp = otherdevices_temperature['Temp dehors'] or 10
-- Gestion automatique du chauffage uniquement
-- si le mode auto est activé
-- et si le mode auto planification est activé
-- et si la temperature dehors est supérieure au minmium
if (uservariables['Script_Mode_Maison'] == 'auto' and otherdevices['Chauffage Auto Planification'] == 'On' and dehors_temp <= dehors_min ) then
--------------------
-- Tous les jours --
-----------------------
-- Chauffage chambre le soir
-- entre 23h et minuit
if (datetime.hour >= 23) then
if (chambre_consigne_onoff == 'Off') then
commandArray['Chauffage Chambre Consigne'] = 'On'
end
-- entre 22h30 et 23h si temperature vraiment basse, on allume le chauffage
elseif (datetime.hour >= 22 and datetime.min >= 30 and chambre_temp <= chambre_consigne_valeur - 1.5) then
if (chambre_consigne_onoff == 'Off') then
commandArray['Chauffage Chambre Consigne'] = 'On'
end
-- Sinon on met le chauffage toute la nuit (jusqu'a l'heure du reveil)
elseif (time_inminutes < alarmclock_inminutes + chambre_matin_start) then
if (chambre_consigne_onoff == 'Off') then
commandArray['Chauffage Chambre Consigne'] = 'On'
end
-- Sinon on coupe le chauffage
elseif (time_inminutes > alarmclock_inminutes + chambre_matin_end and time_inminutes <= alarmclock_inminutes + chambre_matin_end + 3 ) then
if (chambre_consigne_onoff == 'On') then
commandArray['Chauffage Chambre Consigne'] = 'Off'
end
end
-------------
-- semaine --
if (datetime.wday ~= 7 and datetime.wday ~= 1 and is_jour_ferie == 0) then
-----------------------
-- Chauffage chambre le matin
-- Entre X et Y min avant le reveil
-- uniquement si le device 'Alarm Clock Weekdays' == 'On'
if (otherdevices['Alarm Clock Weekdays'] == 'On' and time_inminutes >= alarmclock_inminutes + chambre_matin_start and time_inminutes <= alarmclock_inminutes + chambre_matin_end ) then
if (chambre_consigne_onoff == 'Off') then
commandArray['Chauffage Chambre Consigne'] = 'On'
end
end
-- Sinon on coupe le chauffage
-- => géré dans la partie 'tous les jours'
-----------------
-- Chauffage sdb
-- Entre X et Y min avant le reveil
-- uniquement si le device 'Alarm Clock Weekdays' == 'On'
if (otherdevices['Alarm Clock Weekdays'] == 'On' and time_inminutes >= alarmclock_inminutes + sdb_matin_start and time_inminutes <= alarmclock_inminutes + sdb_matin_end ) then
if (sdb_consigne_onoff == 'Off') then
commandArray['Chauffage Sdb Consigne'] = 'On'
end
-- Sinon on coupe le chauffage
elseif (time_inminutes > alarmclock_inminutes + sdb_matin_end and time_inminutes <= alarmclock_inminutes + sdb_matin_end + 3) then
if (sdb_consigne_onoff == 'On') then
commandArray['Chauffage Sdb Consigne'] = 'Off'
end
end
end
---------------------------
-- weekend ou jour férié --
if (datetime.wday == 7 or datetime.wday == 1 or is_jour_ferie == 1) then
-----------------------
-- Chauffage chambre le matin
-- Entre X et Y min avant le reveil
-- uniquement si le device 'Alarm Clock Weekdays' == 'On'
if (otherdevices['Alarm Clock Weekdays'] == 'On' and time_inminutes >= alarmclock_inminutes + chambre_matin_start and time_inminutes <= alarmclock_inminutes + chambre_matin_end ) then
if (chambre_consigne_onoff == 'Off') then
commandArray['Chauffage Chambre Consigne'] = 'On'
end
end
end
-- Sinon si température dehors > Minimum, on coupe le chauffage
elseif (uservariables['Script_Mode_Maison'] == 'auto' and otherdevices['Chauffage Auto Planification'] == 'On' and dehors_temp > dehors_min) then
if (sdb_consigne_onoff == 'On') then
commandArray['Chauffage Sdb Consigne'] = 'Off'
end
if (chambre_consigne_onoff == 'On') then
commandArray['Chauffage Chambre Consigne'] = 'Off'
end
end
return commandArray