Files
Domoticz/lua/script_time_volets_duplique.lua
2025-03-06 11:09:58 +01:00

472 lines
18 KiB
Lua
Executable File

require "scripts/lua/functions"
commandArray = {}
local HEURE_DEB = 9
local HEURE_FIN = 17
local AZIMUTH_FIN = 270
local TEMP_MAX = 25.5
local TEMP_MAX_2 = 29
local MIN_LUX = 15000
local device_temp = 'BarometreLaGacilly'
--recupere les minutes
time=os.time()
minutes=tonumber(os.date('%M',time))
--jour=tonumber(os.date('%w',time))
heures=tonumber(os.date('%H',time))
mois=tonumber(os.date('%m',time))
local saison = uservariables["Saison"]
local delaiFermeture = uservariables["DelaiFermetureVoletCoucheSoleil"]
local jourS = josdGetJourSemaine()
local nuages = tonumber(otherdevices['Nuage_LaGacilly'])
local temp_ext = getExternalTempRef(device_temp)
-- -------------------------------------------------------------------
-- Verification des volets ouverts si température trop basse
-- -------------------------------------------------------------------
if (minutes == 0 or minutes == 30 ) then
print('Volets ########## Lancement du check fermeture velux du grenier ' ..heures..'h'..minutes)
--tab = getValuesInTab('Exterieur_Cellier')
-- val = otherdevices[device_temp]
val, val2 = otherdevices_svalues[device_temp]:match("([^;]+);([^;]+)")
local tmp = tonumber(val)
print('Volets ########## Lancement du check fermeture velux du grenier ' ..heures..'h'..minutes..' tmp='..tostring(tmp))
if (tmp < 14.0 and (otherdevices['Velux droit'] == 'Open' or otherdevices['Velux gauche'] == 'Open')) then
commandArray['notification']="Volet ouvert#Un des volets du grenier est reste ouvert #0"
end
end
-- -----------------------
-- Fermeture volet central
-- -----------------------
if minutes%5 == 0 and minutes < 2
and (
(heures >= 22 and (saison ~= "ete") and jourS ~= "mercredi" and (mois < 5 or mois >= 9)) -- or uservariables['Dark'] == "True")
or (heures >= 23)
)
then
print('Volets ------------------------------------------------------')
print('Volets Test fermeture volet Central '..otherdevices['VoletPorteSalon'])
print('Volets ------------------------------------------------------')
if (otherdevices['VoletPorteSalon'] ~= 'Closed') then
commandArray['VoletPorteSalon']='On'
end
end
-- -----------------------
-- Ouverture volets
-- -----------------------
if minutes%10 == 3
and heures < 10
and (otherdevices['VoletCuisine'] == 'Closed' or otherdevices['VoletSalonTele'] == 'Closed')
--and (saison == "Printemps" or saison == "ete")
then
print('Volets ------------------------------------------------------')
print('Volets Test ouverture volets jour chome='..tostring(josdJourChome())..' Absence='..otherdevices['AbsenceFamille']..' Vacances='..otherdevices['Vacances']
..' '..tostring(heures)..':'..tostring(minutes))
print('Volets ------------------------------------------------------')
local ouvertureVolet = false;
if (josdJourChome()
or otherdevices['AbsenceFamille'] == 'On'
or otherdevices['Vacances'] == 'On'
) then
print('Volets bloc 09:30 '..tostring(heures == 09 and minutes >= 30))
if (heures == 09 and minutes >= 30) then
ouvertureVolet = true;
end
end
if otherdevices['AbsenceFamille'] == 'Off'
and not josdJourChome()
and otherdevices['Vacances'] == 'Off'
then
print('Volets bloc 07:00 '..tostring(heures == 07 and minutes >= 00))
if (heures == 07 and minutes >= 00) then
ouvertureVolet = true;
end
end
print("Volets ouvertureVolet="..tostring(ouvertureVolet))
if (ouvertureVolet == true) then
print('Volets Ouverture volets jour chome='..tostring(josdJourChome())..' Absence='..otherdevices['AbsenceFamille']..' Vacances='..otherdevices['Vacances']
..tostring(heures)..' '..tostring(minutes))
switchIfNeeded('VoletPorteSalon', 'Off')
switchIfNeeded('VoletSalonTele', 'Off')
switchIfNeeded('VoletCuisine', 'Off')
--if (otherdevices['VoletVelux'] == 'Closed') then
switchIfNeeded('VoletVelux', 'Off')
--end
end
end
-- -----------------------
-- Ouverture volets chambres
-- -----------------------
if minutes%5 == 0 and heures > 6 and heures < 13
--and (saison == "Printemps" or saison == "ete")
then
print('Volets ------------------------------------------------------')
print('Volets Test ouverture volets chambres')
print('Volets ------------------------------------------------------')
local presenceManon = (otherdevices['Manon'] == "On" or jourS == "samedi" or (jourS == "dimanche" and heures < 18) or otherdevices['Zone B'] == 'On')
local presenceTheo = (otherdevices['Theo'] == "On" or jourS == "samedi" or (jourS == "dimanche" and heures < 18) or otherdevices['Zone B'] == 'On')
local val
local val2
val, val2 = otherdevices_svalues[device_temp]:match("([^;]+);([^;]+)")
--val = otherdevices[device_temp]
local temp = tonumber(val)
-- ----------------
-- Volet Somfy
-- ----------------
if (josdJourChome() or otherdevices['Vacances'] == 'On'
or (otherdevices['Conges'] == 'On' and otherdevices['AbsenceFamille'] == 'Off'))
then
print('Volets Test ouverture volets chambres bloc journee chomee')
if (heures == 10 and minutes >= 30) then
switchIfNeeded('VoletChambreVirtuel', 'Off')
end
if (heures == 12 and minutes >= 30 and minutes <= 32) then
if (temp >= TEMP_MAX) then
-- nothing
else
switchIfNeeded('VoletManonVirtuel', 'Off')
switchIfNeeded('VoletTheoVirtuel', 'Off')
end
end
else
print('Volets Test ouverture volets chambres bloc journee travaille')
if (heures == 07 and minutes >= 45) then
switchIfNeeded('VoletChambreVirtuel', 'Off')
end
if (heures == 07 and minutes >= 45 and not presenceManon) then
switchIfNeeded('VoletManonVirtuel', 'Off')
end
if (heures == 07 and minutes >= 45 and not presenceTheo) then
switchIfNeeded('VoletTheoVirtuel', 'Off')
end
if (heures == 12 and minutes >= 30 and minutes <= 32) then
if (temp >= TEMP_MAX) then
-- nothing
else
if presenceManon then
switchIfNeeded('VoletManonVirtuel', 'Off')
end
if presenceTheo then
switchIfNeeded('VoletTheoVirtuel', 'Off')
end
end
end
end
end
if minutes%1 == 0 and heures >= 19 and (saison == "ete")
and uservariables['VoletsSomfy'] ~= 'open'
and uservariables['Dark'] ~= "True"
then
local evolution = tonumber(uservariables['AugmentationTempExterieure'])
local tempChambre = getTemperatureFromDevice('Chambre')
print("tempChambre="..tostring(tempChambre).." temp_ext="..tostring(temp_ext).." evolution="..tostring(evolution))
if (temp_ext + evolution <= tempChambre) then
commandArray['Variable:VoletsSomfy'] = "open"
print("SOMFY Volets test ouverture volets : temp en baisse")
print("SOMFY Volets Lancement script somfy")
os.execute("/opt/domoticz/scripts/voletsSomfy.sh u")
end
end
-- ---------------------------------------------------------------------------------------
-- Fermeture des volets
-- ---------------------------------------------------------------------------------------
--print("Volets DARK=="..tostring(uservariables['Dark'] == "True"))
if minutes%5 == 0
-- (saison ~= "Ete")
and (
otherdevices['VoletCuisine'] == 'Open' or otherdevices['VoletSalonTele'] == 'Open'
--or otherdevices['VoletChambreVirtuel'] == 'Open'
--or otherdevices['VoletManonVirtuel'] == 'Open'
--or otherdevices['VoletTheoVirtuel'] == 'Open'
)
and (heures >= 18 or
(
(heures >= 17 and minutes >= 30) and (
uservariables['Dark'] == "True"
or (
tonumber(otherdevices['Lux']) < tonumber(uservariables["LuxMini"])
)
)
)
)
then
print('Volets ------------------------------------------------------')
print('Volets Test fermeture volet ')
print('Volets ------------------------------------------------------')
print('Volets ####### Comparaison heure vs Couche du soleil ========>'..uservariables["Heure"].." couché "..uservariables["Couche"])
--print('Volets ####### Lancement du check test ' ..heures..'h'..minutes..' volet cuisine '..otherdevices['Exterieur_Cellier']..' svalues='..otherdevices_svalues['Exterieur_Cellier']..' VoletCuisine='..otherdevices['VoletCuisine'])
--tmp = otherdevices_svalues['Exterieur_Cellier']
--tab = split(tmp, ";")
-- val = otherdevices[device_temp]
print("Volets ######### Check fermeture : temperature lue par "..device_temp.." "..temp_ext)
temp = temp_ext --tonumber(val)
if (
(
(
(temp < 6.0 and whenDark() <= 0)
or (temp < 8 and whenDark() <= -10)
or (temp < 10 and whenDark() <= -20)
)
)
or (
uservariables['Dark'] == "True"
)
)
then
local temp_chambre = getTemperatureFromDevice('Chambre')
print(temp_chambre)
print("Volets ######### Dans temperature exterieure la gacilly "..tostring(temp_ext)..' temp_chambre'..tostring(temp_chambre))
if mois >= 6 and mois <= 9 and temp_ext < temp_chambre and temp_ext >= 21 and temp_chambre > 23 then
if (otherdevices['VoletCuisine'] == 'Open' and otherdevices['VoletSalonTele'] == 'Open') then -- or (minutes % 10 == 0 and heures <=20)) then
print("Volets Lancement volets2 On 17")
os.execute("/opt/domoticz/scripts/volets2.sh On 17 &")
end
else
print("Volets Lancement un par un")
if (otherdevices['VoletCuisine'] == 'Open') then -- or (minutes % 10 == 0 and heures <=20) ) then
commandArray['VoletCuisine']='On'
end
if (otherdevices['VoletSalonTele'] == 'Open') then -- or (minutes % 10 == 0 and heures <=20)) then
commandArray['VoletSalonTele']='On'
end
if (otherdevices['VoletChambreVirtuel'] == 'Open') then -- or (minutes % 10 == 0 and heures <=20)) then
commandArray['VoletChambreVirtuel']='On'
end
if (otherdevices['VoletManonVirtuel'] == 'Open') then -- or (minutes % 10 == 0 and heures <=20)) then
commandArray['VoletManonVirtuel']='On'
end
if (otherdevices['VoletTheoVirtuel'] == 'Open') then -- or (minutes % 10 == 0 and heures <=20)) then
commandArray['VoletTheoVirtuel']='On'
end
end
switchIfNeeded('VoletVelux', 'On')
else
print("Volets ############ PAS DANS LE IF")
end
end
-- ------------------------------------------------------------------------------
-- Ouverture des volets en fonction de la temperature exterieure Hiver et Automne
-- ------------------------------------------------------------------------------
if minutes%5 == 0
and heures <= HEURE_DEB
and ((heures >= 9 and josdJourChome()) or (heures > 6 and not josdJourChome()))
and (saison == "Hiver" or saison == "Automne")
and (greater2(uservariables["Heure"],uservariables["Lever"], - 30)) -- heures >= 20
and (otherdevices['VoletCuisine'] == 'Closed'
or otherdevices['VoletSalonTele'] == 'Closed'
or otherdevices['VoletPorteSalon'] == 'Closed'
or otherdevices['VoletVelux'] == 'Closed'
or otherdevices['VoletChambreVirtuel'] == 'Closed'
or otherdevices['VoletManonVirtuel'] == 'Closed'
or otherdevices['VoletTheoVirtuel'] == 'Closed'
)
then
print('Volets ------------------------------------------------------')
print('Volets Test ouverture volet ')
print('Volets ------------------------------------------------------')
print('Volets ####### Comparaison heure vs Lever du soleil ========>'..uservariables["Heure"]..
" "..uservariables["Lever"])
print('Volets ####### Lancement du check test ' ..heures..'h'..minutes..' volet cuisine '
..otherdevices['Exterieur_Cellier']..' svalues='..otherdevices_svalues[device_temp]..' VoletCuisine='..otherdevices['VoletCuisine'])
temp = temp_ext --
if (temp > 12.0
or (heures >=9 and minutes >= 30 and josdJourChome())
or (heures > 6 and not josdJourChome())
) then
if (otherdevices['VoletCuisine'] == 'Closed' or (minutes % 10 == 0 and heures == 9)) then
commandArray ['VoletCuisine']='Off'
end
if (otherdevices['VoletSalonTele'] == 'Closed' or (minutes % 10 == 0 and heures == 9)) then
commandArray['VoletSalonTele']='Off'
end
if (otherdevices['VoletPorteSalon'] == 'Closed' or (minutes % 10 == 0 and heures == 9)) then
commandArray['VoletPorteSalon']='Off'
end
if (otherdevices['VoletVelux'] == 'Closed' or (minutes % 10 == 0 and heures == 9)) then
commandArray['VoletVelux']='Off'
end
-- if (otherdevices['VoletChambreVirtuel'] == 'Closed') then -- or (minutes % 10 == 0 and heures <=20)) then
-- commandArray['VoletChambreVirtuel']='Off'
-- end
-- if (otherdevices['VoletManonVirtuel'] == 'Closed') then -- or (minutes % 10 == 0 and heures <=20)) then
-- commandArray['VoletManonVirtuel']='Off'
-- end
-- if (otherdevices['VoletTheoVirtuel'] == 'Closed') then -- or (minutes % 10 == 0 and heures <=20)) then
-- commandArray['VoletTheoVirtuel']='Off'
-- end
end
end
-- ------------------------------------------------------------------------------
-- fermeture des volets en fonction de la temperature exterieure en ete
-- ------------------------------------------------------------------------------
if (minutes%5 == 0 --and uservariables['Dark'] == "False"
and (heures > HEURE_DEB and heures < HEURE_FIN))
--and (saison == "ete")
--and (greater(uservariables["Heure"] , uservariables["Lever"])) -- heures >= 20
--and (otherdevices['VoletCuisine'] == 'Open' or otherdevices['VoletSalonTele'] == 'Open' or otherdevices['VoletPorteSalon'] == 'Open')
then
print('Volets ------------------------------------------------------')
print('Volets Test fermeture volet Ete')
print('Volets ------------------------------------------------------')
print('Volets ####### Lancement du check test ' ..heures..'h'..minutes..
' temp cellier '..otherdevices['Exterieur_Cellier']..
' svalues='..otherdevices_svalues[device_temp]..
' VoletCuisine='..otherdevices['VoletCuisine']..
' nuages='..tostring(nuages))
local temp = temp_ext
if (saison == "ete" or temp >= TEMP_MAX) then
-- Lecture des lux pour ne pas fermer si ciel couvert
-- local lux = tonumber(otherdevices['Lux'])
print("Volets "..device_temp.." "..otherdevices_svalues[device_temp]
.." volet cuisine "..otherdevices['VoletCuisine']..
" volet tele "..otherdevices['VoletSalonTele']..
" volet salon"..otherdevices['VoletPorteSalon'])
if temp >= TEMP_MAX
and (otherdevices['VoletCuisine'] == 'Open'
and otherdevices['VoletSalonTele'] == 'Open'
and otherdevices['VoletPorteSalon'] == 'Open')
--and tonumber(otherdevices['Sun Altitude']) > 50
--sand (nuages < 50 or temp >= TEMP_MAX_2)
then
commandArray['Variable:VoletsSomfy'] = "close"
print("Volets test fermeture volets : temp élevée lux"..tostring(lux))
-- if lux > MIN_LUX then
if temp >= TEMP_MAX_2 then
print("Volets Lancement script 2 temp élevée volets2.sh on 15")
os.execute("/opt/domoticz/scripts/volets2.sh On 15 &")
else
print("Volets Lancement script 1 temp élevée volets.sh on ")
os.execute("/opt/domoticz/scripts/volets.sh On &")
end
-- end
end
end
if (temp >= TEMP_MAX_2 and heures == 13 and minutes == 00
and jours ~= 'samedi' and jours ~= "dimanche"
) then
commandArray['Variable:VoletsSomfy'] = "close"
print("Volets test fermeture volets : temp très élevée lux"..tostring(lux))
print("Volets Lancement script somfy")
os.execute("/opt/domoticz/scripts/voletsSomfy.sh d")
-- end
end
end
-- print("Volets Sun Altitude=" ..otherdevices['Sun Altitude'])
-- ------------------------------------------------------------------------------
-- Réouverture après la vague de chaleur ETE
-- ------------------------------------------------------------------------------
-- print("Volets Azimuth="..otherdevices["Sun Azimuth"])
if (minutes%5 == 0
and ((heures > HEURE_FIN and whenDark() > 60)) --heures <= 19))
and (saison == "ete" or (mois >= 5 and mois <= 10 ))
) then
-- val = otherdevices[device_temp]
print("Volets -- ------------------------------------------------------------------------------")
print("Volets -- Réouverture après la vague de chaleur ETE")
print("Volets -- ------------------------------------------------------------------------------")
print("Volets "..device_temp.." "..otherdevices["Exterieur_Cellier"].." "..tostring(temp_ext)..
otherdevices['VoletCuisine'].." "..otherdevices['VoletSalonTele'].." "..otherdevices['VoletPorteSalon'])
local temp = temp_ext
if ((temp <= 26 or (temp <= TEMP_MAX and heures >= 18) or (heures >= 19)
or tonumber(otherdevices['Sun Altitude']) <= 30
)
--or tonumber(otherdevices["Sun Azimuth"]) > AZIMUTH_FIN)
and (otherdevices['VoletCuisine'] == 'Closed' or
otherdevices['VoletSalonTele'] == 'Closed' or
otherdevices['VoletPorteSalon'] == 'Closed'))
then
print("Volets Ouverture volets : temp en baisse")
if temp <= TEMP_MAX then
print("Volets Lancement volets2 Off 20")
os.execute("/opt/domoticz/scripts/volets2.sh Off 20 &")
else
print("Volets Lancement volets3 Off 20")
os.execute("/opt/domoticz/scripts/volets3.sh Off 20 &")
end
end
end
-- ------------------------------------------------------------------------------
-- Activation ventilation grenier
-- ------------------------------------------------------------------------------
if (minutes%5 == 0
) then
local temp = tonumber(otherdevices_svalues['Cheminee'])
print("Volets "..device_temp.." Test ventilation "..otherdevices_svalues[device_temp].." externe="..temp_ext.." salon="..temp)
local variation = variationTemp2('Cheminee', 30) -- variation des 10 dernières minutes
print("Variation Chemine="..tostring(variation))
if (temp_ext < 15 and (temp >= 20 or variation > 1) and heures >= 10) then
print("Activation ventilation")
commandArray['Ventilation'] = 'On'
else
print("Désactivation ventilation")
commandArray['Ventilation'] = 'Off'
end
end
return commandArray