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

246 lines
9.7 KiB
Plaintext
Executable File

require "scripts/lua/functions"
--recupere les minutes
time=os.time()
seconds=tonumber(os.date('%S',time))
minutes=tonumber(os.date('%M',time))
heures=tonumber(os.date('%H',time))
jour=tonumber(os.date('%w',time))
mois=tonumber(os.date('%M',time))
--Initialise la commande de retour finale
commandArray={}
-- -----------------------------------------------------------------------
-- Test la dernière réception d'un switch et déclenche une alerte
-- Il faut une variable de la forme PILE_nowswitch pour mettre à jour le
-- témoin de notification envoyée
-- -----------------------------------------------------------------------
function levelBattery( switch )
if (lastUpdateOfDevice(switch) > 3600 ) then
if (uservariables['Variable:PILE_'..switch] == 'Normal') then
commandArray['SendNotification']='Alerte niveau pile#Attention plus de réception de température depuis '..switch..'#0'
commandArray['Variable:PILE_'..switch]='Plus de réception'
end
else
commandArray['Variable:PILE_'..switch]='Normal'
end
end
-- -----------------------------------------------------------------------
-- Test le nombre d'erreur dans le log toutes les heures
-- -----------------------------------------------------------------------
if (minutes == 0) then
local var = os.capture("grep Error /var/log/syslog |wc -l")
--print(var)
if (tonumber(var) > 0 and tonumber(uservariables['Variable:Erreurs']) == 0) then
commandArray['SendNotification']='Alerte Erreur '..var..'#Attention Il y a des erreurs dans domoticz #0'
end
commandArray['Variable:Erreurs']=var
end
-- -----------------------------------------------------------------------
-- Vérifie le nombre de sequences capturées par motion
-- -----------------------------------------------------------------------
if (minutes % 10 == 0) then
local f = io.popen("ls /home/pi/motion/ |grep avi| cut -c 1-2 |uniq| wc -l") -- runs command
local l = f:read("*a") -- read output of command
debug("Nombre de detection "..l)
f:close()
commandArray['PhotoMotion']=tostring(l)
commandArray['UpdateDevice']="136|0|"..l
end
-- -----------------------------------------------------------------------
--recupere les minutes
-- -----------------------------------------------------------------------
if (minutes % 10 == 0) then
debug('####### Lancement du check Presence ' ..heures..'h'..minutes)
if (otherdevices['Vacances'] == 'On') then
switchIfNeeded('Presence','Off')
else
--commandArray['Presence']='Off'
------------------------------------------------------------------------
if (josdJourChome() or otherdevices['PresenceForcee'] == 'On') then
debug(' Jour Chômé / Presence normale à la maison')
switchIfNeeded('Presence','On')
else
local jourS=josdGetJourSemaine()
debug("jour "..jourS)
if otherdevices['AbsenceFamille'] == 'Off' then
if ((jourS == "mercredi" and (heures >= 13 or (heures == 12 and minutes >= 30)))
or heures >= 17 or heures < 8
or (heures == 8 and minutes <= 30)
or otherdevices["Zone B"] == 'On' ) then
debug(' Jour non Chômé pas de vacances '..tostring(heures))
switchIfNeeded('Presence','On')
else
switchIfNeeded('Presence','Off')
end
else
if (((heures == 8 and minutes <= 15) or heures < 8) or heures >= 20 or otherdevices['moi'] == 'On' or otherdevices['Akhenaton'] == 'On') then
switchIfNeeded('Presence','On')
else
switchIfNeeded('Presence','Off')
end
end
end
end
end
-- --------------------------------------------------------------------------------
-- Vérification des dernières mises à jour des températures
-- --------------------------------------------------------------------------------
if (minutes%10== 0) then
levelBattery('Bureau')
levelBattery('ChambreManon')
levelBattery('ChambreTheo')
levelBattery('Chambre')
--levelBattery('ATMEGA_TEMP_1')
levelBattery('TemperatureBarometre')
end
-- --------------------------------------------------------------------------------
-- Function to update a switch
-- --------------------------------------------------------------------------------
function updateSunset(zone)
local cmd = "curl http://domogeek.entropialux.com/sun/" .. zone .. "/sunset/now"
local vac = os.capture(cmd, true)
debug("Sunset" .. cmd .. ": " .. vac)
commandArray['Variable:Couche']=vac
local cmd = "curl http://domogeek.entropialux.com/sun/" .. zone .. "/sunrise/now"
local vac = os.capture(cmd, true)
debug("Sunrise" .. cmd .. ": " .. vac)
commandArray['Variable:Lever']=vac
end
-- --------------------------------------------------------------------------------
-- Trigger at 0:03 every day
-- --------------------------------------------------------------------------------
if (minutes == 3 and (heures == 0 or heures == 8)) then
updateSunset("redon")
end
-- -------------------------------------------------------------------
-- Performance ping
-- -------------------------------------------------------------------
if (minutes % 10 == 0 ) then
local f = io.popen("ping -c 5 192.168.0.1 2>/dev/null |grep rtt |awk -F = '{print $2}'|awk -F / '{print $2}'") -- runs command
local l = f:read("*a") -- read output of command
debug("##### Perf ping : temps de ping "..l)
f:close()
-- Perf Reseau
commandArray['UpdateDevice']="145|0|"..l
end
-- ------------------------------------------------------------------------------
-- Lampes eteinte après 22 heures 30 / 23 heures si pas d'activite depuis 10 minutes
-- ------------------------------------------------------------------------------
-- Pas de traitement en cas d'alerte fumée
if otherdevices['DétecteurFuméeCuisine'] == "Normal"
-- Pas de traitement si lampe allumée il y a moins d'une heure
and (lastUpdateOfDevice('Lampe_Buffet') > 3600 and otherdevices['Lampe_Buffet'] == 'On')
then
if ((heures >= 23 or (heures == 22 and minutes >= 30)) and (minutes%5==0)) then
t1 = os.time()
s = uservariables_lastupdate['DerniereDetection'] --otherdevices_lastupdate['Detecteur Salon']
-- returns a date time like 2013-07-11 17:23:12
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minu = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minu, sec=seconds}
difference = (os.difftime (t1, t2))
debug("Eteindre les lumieres, DerniereDetection="..tostring(difference))
if (difference > 300 or heures >= 23) then
switchIfNeeded('Salon_Halogene', 'Off')
switchIfNeeded('Lampe_Buffet', 'Off')
switchIfNeeded('LumiereTele', 'Off')
switchIfNeeded('SonoJasper', 'Off')
end
end
end
-- Variation de pression
if minutes%10 == 0 then
local pressure = otherdevices_svalues['Pression']
local variationPressure = variationPressure('Barometre',60)
print("variationPressure="..tostring(variationPressure)..' Pression='..tostring(pressure))
end
-- ---------------------------------
-- Réglage des consigne temperature
-- ---------------------------------
if minutes%10 == 0 then
debug('####### Lancement du calcul consigne ' ..heures..'h'..minutes)
--commandArray['UpdateDevice'] = '214|0|25.00'
if (otherdevices['Vacances'] == 'On') then
commandArray['UpdateDevice'] = "213|0|16.5" -- Chambre
commandArray['UpdateDevice'] = "211|0|16.5" -- ChambreTheo
commandArray['UpdateDevice'] = "212|0|16.5" -- ChambreManon
commandArray['UpdateDevice'] = "214|0|16.5" -- Bureau
else
--commandArray['Presence']='Off'
------------------------------------------------------------------------
if (josdJourChome() or otherdevices['PresenceForcee'] == 'On') then
debug(' Jour Chômé / consigne temperature présence')
commandArray['UpdateDevice'] = "213|0|18" -- Chambre
commandArray['UpdateDevice'] = "211|0|18.5" -- ChambreTheo
commandArray['UpdateDevice'] = "212|0|18.5" -- ChambreManon
commandArray['UpdateDevice'] = "214|0|18" -- Bureau
else
local jourS=josdGetJourSemaine()
debug("jour "..jourS)
if otherdevices['AbsenceFamille'] == 'Off' then
if ((jourS == "mercredi" and (heures >= 13 or (heures == 12 and minutes >= 30)))
or heures >= 17 or heures < 8
or (heures == 8 and minutes <= 30)
or otherdevices["Zone B"] == 'On' ) then
debug(' Jour non Chômé pas de vacances '..tostring(heures))
commandArray['UpdateDevice'] = "213|0|18" -- Chambre
commandArray['UpdateDevice'] = "211|0|18.5" -- ChambreTheo
commandArray['UpdateDevice'] = "212|0|18.5" -- ChambreManon
commandArray['UpdateDevice'] = "214|0|18" -- Bureau
else
commandArray['UpdateDevice'] = "213|0|16.5" -- Chambre
commandArray['UpdateDevice'] = "211|0|16.5" -- ChambreTheo
commandArray['UpdateDevice'] = "212|0|16.5" -- ChambreManon
commandArray['UpdateDevice'] = "214|0|16.5" -- Bureau
end
else
if (((heures == 8 and minutes <= 15) or heures < 8) or heures >= 20 or otherdevices['moi'] == 'On'
or otherdevices['Akhenaton'] == 'On') then
commandArray['UpdateDevice'] = "213|0|18" -- Chambre
commandArray['UpdateDevice'] = "211|0|18.5" -- ChambreTheo
commandArray['UpdateDevice'] = "212|0|18.5" -- ChambreManon
commandArray['UpdateDevice'] = "214|0|18" -- Bureau
else
commandArray['UpdateDevice'] = "213|0|16.5" -- Chambre
commandArray['UpdateDevice'] = "211|0|16.5" -- ChambreTheo
commandArray['UpdateDevice'] = "212|0|16.5" -- ChambreManon
commandArray['UpdateDevice'] = "214|0|16.5" -- Bureau
end
end
end
end
end
-- return commandArray