first commit

This commit is contained in:
Souti
2025-03-06 11:09:58 +01:00
commit 11f7d440ff
330 changed files with 38306 additions and 0 deletions

137
lua/script_time_gcal.lua Executable file
View File

@@ -0,0 +1,137 @@
---------------------------------
-- Script de lecture de calendrier Google.
-- Actionne un interrupteur ou remplie un capteur virtuel Text
-- Auteur : Aurelien Neutrino
-- Date : 29 Novembre 2015
-- Nécessite un capteur virtuel de type Text
-- Il faut suivre la source suivante et s'arrêter à la fin de l'étape 1
-- source :
-- http://easydomoticz.com/agenda-google-et-domoticz-version-2-partie-1/
-- Pour récupérer le code permettant de se connecter
-- exécuter : sudo gcalcli --cal=Domoticz agenda '00:00' '23:59' --tsv --military
-- puis coller l'adresse dans un navigateur
--
---------------------------------
require "scripts/lua/functions"
commandArray = {}
--Récupère l'heure et la date actuelle
time = os.time()
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))
jour = os.date('%d',time)
--Nombre de minutes depuis 00:00
maintenant=tonumber(hours*60+minutes)
--idx et nom du capteur Text
idxText = '203'
nomText="Agenda"
--nom de l'agenda google
domoticz_cal="Domoticz"
--fichier et chemin pour agenda
repertoire="/home/pi/"
file="googlecal.txt"
-- Toutes les heures, on récupère l'agenda de la journée
if(maintenant%60==0)then
options="--tsv --military"
agenda_start="00:00"
agenda_end="23:59"
-- Agenda Domoticz
lignecde="sudo gcalcli --cal="..domoticz_cal.." agenda ".."'"..agenda_start.."' '"..agenda_end.."' "..options
lignecde=lignecde.." > "..repertoire..file.." &"
os.execute(lignecde)
sleep(1)
-- Agenda Standard 4/ymDKXAZQtn9azD6vFmUPQ7fJ0jJFeJWOXu___bVKD68
lignecde="sudo gcalcli --cal=jerome.delacotte@gmail.com agenda '"..agenda_start.."' '"..agenda_end.."' "..options
lignecde=lignecde.." >> "..repertoire..file.." &"
os.execute(lignecde)
sleep(1)
-- Agenda Standard 4/ymDKXAZQtn9azD6vFmUPQ7fJ0jJFeJWOXu___bVKD68
lignecde="sudo gcalcli --cal=jerome.delacotte@vif.fr agenda '"..agenda_start.."' '"..agenda_end.."' "..options
lignecde=lignecde.." >> "..repertoire..file.." &"
os.execute(lignecde)
--end
local file = io.open(repertoire..file, "r") -- Ouvre le fichier en mode lecture
local ligne = {} -- Table pour les lignes du fichier
if(file~=nil)then
--le fichier n'est pas vide
for line in file:lines() do -- Pour chaque lignes
table.insert(ligne, line) -- On insère les lignes dans la table
end
end
for i, v in ipairs(ligne) do -- Lecture de la table des RDV
dateDebut,heureDebut,minutesDebut,dateFin,heureFin,minutesFin,action = v:match("([^;]+)\t([^;]+):([^;]+)\t([^;]+)\t([^;]+):([^;]+)\t([^;]+)")
action = action:gsub(" = ","=")
debutAction = heureDebut*60+minutesDebut
finAction = heureFin*60+minutesFin
anneeAction,moisAction,jourAction = dateDebut:match("([^;]+)-([^;]+)-([^;]+)")
if(action~=nil and action:find("=")~=nil and jourAction == jour)then
--L'action contient "=", c'est un interrupteur à actionner
debug("Action : "..action)
debug(maintenant.." : "..debutAction)
interrupteur,etat=action:match("([^;]+)=([^;]+)")
if(otherdevices[interrupteur]~=nil and(etat=='On' or etat=='Off' or etat=='ON' or etat=='OFF')and debutAction==maintenant)then
--L'interrupteur existe, l'état souhaité est reconnu
if(etat=='On'or etat=='Off')then
if(dateDebut~=dateFin)then
--l'action finit demain
finAction=finAction+(24*60)
end
debug(interrupteur.." passe à "..etat.." pendant "..tostring(finAction-maintenant).." minutes")
commandArray[interrupteur]=etat.." FOR "..tostring(finAction-maintenant)
if(otherdevices_svalues[nomText]=='')then
--Aucun pense-bête actuellement renseigné, on affiche l'action en cours.
--L'affichage d'un pense-bête est prioritaire sur l'affichage d'un changement d'état
debug("pense-bête : "..action)
commandArray['UpdateDevice']=idxText.."|0|"..action
end
elseif(etat=='ON')then
--ON (tout en majuscule) siginifie que l'action n'a pas de fin
debug(interrupteur.." passe à On")
commandArray[interrupteur]='On'
elseif(etat=='OFF')then
--OFF (tout en majuscule) siginifie que l'action n'a pas de fin
debug(interrupteur.." passe à Off")
commandArray[interrupteur]='Off'
else
--Etat non reconnu, on force l'interrupteur
debug(interrupteur.." passe à "..etat)
commandArray[interrupteur]=etat
end
elseif(otherdevices[interrupteur]==nil and debutAction==maintenant)then
--L'interrupteur n'existe pas, on affiche le pense-bête
commandArray['UpdateDevice']=idxText.."|0|"..action
elseif(finAction==maintenant and action == otherdevices_svalues[nomText])then
--L'action est terminée, on l'efface
commandArray['UpdateDevice']=idxText.."|0| "
end
elseif(action~=nil and action:find("Cong=")~=nil and jourAction == jour)then
commandArray['Presence']="on"
else
debug("###### Action : "..action)
if (debutAction==maintenant and jourAction == jour) then
--L'action ne correspond pas à un interrupteur à actionner, c'est donc un pense-bête, on l'affiche pendant la durée souhaitée
debug("####### Rappel agenda "..action)
commandArray['UpdateDevice']=idxText.."|0|"..action
else
if (finAction==maintenant and action == otherdevices_svalues[nomText]) then
--L'action est terminée, on l'efface
debug("####### Fin tâche agenda "..action)
commandArray['UpdateDevice']=idxText.."|0| "
end
end
end
end
end
return commandArray