calendrier google comme declencheur d'un interrupteur

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: calendrier google comme declencheur d'un interrupteur

Message par Neutrino »

gcalcli est installé et fonctionne ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Antho
Messages : 10
Inscription : 09 avr. 2019, 10:04

Re: calendrier google comme declencheur d'un interrupteur

Message 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

Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: calendrier google comme declencheur d'un interrupteur

Message par Neutrino »

Tu as un exemple de ce qui remonte dans le fichier ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

calendrier google comme declencheur d'un interrupteur

Message par pierrotori »

Ce script existe en dzvent il me semble ici
viewtopic.php?p=85498#p85498
Antho
Messages : 10
Inscription : 09 avr. 2019, 10:04

Re: calendrier google comme declencheur d'un interrupteur

Message 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
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: calendrier google comme declencheur d'un interrupteur

Message 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. :?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Antho
Messages : 10
Inscription : 09 avr. 2019, 10:04

Re: calendrier google comme declencheur d'un interrupteur

Message 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?
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

calendrier google comme declencheur d'un interrupteur

Message 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
Répondre