first commit
This commit is contained in:
137
lua/script_time_gcal.lua
Executable file
137
lua/script_time_gcal.lua
Executable 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
|
||||
Reference in New Issue
Block a user