calendrier google comme declencheur d'un interrupteur
Re: calendrier google comme declencheur d'un interrupteur
gcalcli est installé et fonctionne ?
Re: calendrier google comme declencheur d'un interrupteur
Oui gcalcli est bien installé et il fonctionne.
Par contre lorsque j'exécute ton ancien script lua time dans ce lien viewtopic.php?p=10343#p10343
Voir code plus bas, là cela me copie bien dans le fichier googlecal.txt.
Par contre il me remet l'erreur au même endroit : action = action:gsub(" = ","=")
Je en sais pas pourquoi...
Par contre lorsque j'exécute ton ancien script lua time dans ce lien viewtopic.php?p=10343#p10343
Voir code plus bas, là cela me copie bien dans le fichier googlecal.txt.
Par contre il me remet l'erreur au même endroit : action = action:gsub(" = ","=")
Je en sais pas pourquoi...
Code : Tout sélectionner
-- 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/
---------------------------------
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 = '14'
nomText="Calendrier Info"
--nom de l'agenda google
domoticz_cal="Domoticz"
--fichier et chemin pour agenda
repertoire="/home/pi/"
file="googlecal.txt"
-- Toutes les deux heures, on récupère l'agenda de la journée
if(maintenant%1==0) then
--if(true)then
options="--tsv --military"
agenda_start="00:00"
agenda_end="+7 days 23:59"
lignecde="export LANG=\"fr_FR.UTF-8\" && sudo gcalcli --cal="..domoticz_cal.." agenda ".."'"..agenda_start.."' '"..agenda_end.."' "..options
lignecde=lignecde.." > "..repertoire..file
print("MAJ Calendrier "..domoticz_cal)
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:find("=")~=nil and jourAction == jour)then
--L'action contient "=", c'est un interrupteur à actionner
print("Action : "..action)
print(maintenant.." : "..debutAction)
interrupteur,etat=action:match("([^;]+)=([^;]+)")
if(otherdevices[interrupteur]~=nil and debutAction==maintenant)then
--L'interrupteur existe, test des états possibles
if(etat=='On'or etat=='Off')then
if(dateDebut~=dateFin)then
--l'action finit demain
finAction=finAction+(24*60)
end
print(interrupteur.." passe à "..etat)
commandArray[interrupteur]=etat.." FOR "..tostring(finAction-maintenant)
if(otherdevices_svalues[nomText]=='' or otherdevices_svalues[nomText]:find("=")~=nil)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
print("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
print(interrupteur.." passe à On")
commandArray[interrupteur]='On'
elseif(etat=='OFF')then
--OFF (tout en majuscule) siginifie que l'action n'a pas de fin
print(interrupteur.." passe à Off")
commandArray[interrupteur]='Off'
elseif(tonumber(etat)~=nil)then
--Niveau du dimmer à actionner
print(interrupteur.." passe à "..etat)
commandArray[interrupteur]="Set Level "..etat
elseif(etat=="Confort")then
--Consigne de chauffage
print(interrupteur.." passe à "..etat)
commandArray[interrupteur]='Set Level: 10'
elseif(etat=="Eco")then
--Consigne de chauffage
print(interrupteur.." passe à "..etat)
commandArray[interrupteur]='Set Level: 20'
elseif(etat=="Hors-Gel")then
--Consigne de chauffage
print(interrupteur.." passe à "..etat)
commandArray[interrupteur]='Set Level: 30'
elseif(etat=="Arrêt")then
--Consigne de chauffage
print(interrupteur.." passe à "..etat)
commandArray[interrupteur]='Set Level: 0'
else
--Etat non reconnu, on force l'interrupteur
print(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(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
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
end
return commandArray
Re: calendrier google comme declencheur d'un interrupteur
Tu as un exemple de ce qui remonte dans le fichier ?
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
calendrier google comme declencheur d'un interrupteur
Ce script existe en dzvent il me semble ici
viewtopic.php?p=85498#p85498
viewtopic.php?p=85498#p85498
Re: calendrier google comme declencheur d'un interrupteur
Voici ce que j'ai dans mon fichier.
@Pierrotori, oui je sais bien, mais en dzevents il n'y a rien qui se copie dans mon fichier googlecal.txt
@Pierrotori, oui je sais bien, mais en dzevents il n'y a rien qui se copie dans mon fichier googlecal.txt
Code : Tout sélectionner
start_date start_time end_date end_time title
2021-05-17 12:30 2021-05-17 13:30 Radiateur_cuisine&salon=On
2021-05-17 13:30 2021-05-17 14:30 Radiateur_cuisine&salon = On
2021-05-17 14:30 2021-05-17 15:30 uyyuk
2021-05-17 15:30 2021-05-17 16:30 gkjtk
2021-05-17 17:30 2021-05-17 18:30 kyu
2021-05-17 18:45 2021-05-17 19:45 tyjtyt
2021-05-17 20:15 2021-05-17 21:15 yukuyk
Re: calendrier google comme declencheur d'un interrupteur
Tiens, c'est étonnant, la première ligne de ton fichier ne devrait pas y être.
Donc forcément, le script ne reconnait rien et il plante.
Dans la version dzvents, remplacepar
pour voir si le fichier est bien alimenté.
mais ça ne résout pas le problème de la première ligne.
Donc forcément, le script ne reconnait rien et il plante.
Dans la version dzvents, remplace
Code : Tout sélectionner
lignecde=lignecde.." > "..repertoire..file.." &"
Code : Tout sélectionner
lignecde=lignecde.." > "..repertoire..file
mais ça ne résout pas le problème de la première ligne.
Re: calendrier google comme declencheur d'un interrupteur
Le dzvents alimente le fichier par contre j'ai toujours la première ligne, tu sais de quoi cela vient cette première ligne?
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
calendrier google comme declencheur d'un interrupteur
Si rien ne se copie ds le fichier google c’est que tu as un pb d’autorisation
Tu dois avoir une erreur dans une log
Tu dois avoir une erreur dans une log