Page 3 sur 3

Re: calendrier google comme declencheur d'un interrupteur

Publié : 16 mai 2021, 19:13
par Neutrino
gcalcli est installé et fonctionne ?

Re: calendrier google comme declencheur d'un interrupteur

Publié : 16 mai 2021, 19:22
par Antho
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...

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

Publié : 16 mai 2021, 21:06
par Neutrino
Tu as un exemple de ce qui remonte dans le fichier ?

calendrier google comme declencheur d'un interrupteur

Publié : 16 mai 2021, 22:04
par pierrotori
Ce script existe en dzvent il me semble ici
viewtopic.php?p=85498#p85498

Re: calendrier google comme declencheur d'un interrupteur

Publié : 17 mai 2021, 10:40
par Antho
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

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

Publié : 17 mai 2021, 18:40
par Neutrino
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, remplace

Code : Tout sélectionner

		lignecde=lignecde.." > "..repertoire..file.." &"
par

Code : Tout sélectionner

		lignecde=lignecde.." > "..repertoire..file
pour voir si le fichier est bien alimenté.
mais ça ne résout pas le problème de la première ligne. :?

Re: calendrier google comme declencheur d'un interrupteur

Publié : 18 mai 2021, 20:41
par Antho
Le dzvents alimente le fichier par contre j'ai toujours la première ligne, tu sais de quoi cela vient cette première ligne?

calendrier google comme declencheur d'un interrupteur

Publié : 18 mai 2021, 22:35
par pierrotori
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