calendrier google

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
beuz33
Messages : 72
Inscription : 19 oct. 2015, 16:30

Re: calendrier google

Message par beuz33 »

Ca va mieux, en effet, j'ai plusieurs calendriers et mes infos était enregistrés dans un autre, maintenant j'arrive a les lire en faisant
gcalcli --cal=Domoticz --tsv --military
par contre mon fichier googlecal.txt ne se met pas a jour, alors j'ai suivi ce que tu avais dis dans le forum, je l'ai supprimé et fait
sudo gcalcli --cal=domoticz agenda '00:00' '23:59' --tsv --military > /home/pi/googlecal.txt
mon fichier googlecal.txt c'est bien créé avec les infos dedans, mais rien ne bouge coté domoticz (le device texte ne change jamais) de plus quand le script_time_calendrier se rééxécute, le fichier googlecal.txt se vide
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: calendrier google

Message par Neutrino »

Le nom de l'agenda google est bien modifié dans le script ?

Pour info :
Les switchs ne sont modifiés qu'au moment précis de début de l'événement.
L'ordre est de type "Y pendant Y minutes".
Si un autre ordre intervient entre temps, l'heure de fin est "oubliée".
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
beuz33
Messages : 72
Inscription : 19 oct. 2015, 16:30

Re: calendrier google

Message par beuz33 »

Re-bonjour,

du coup j'ai fait des essais mon fichier Google.txt se vide depuis que j'ai mis la ligne de commande modifiée,
si je remet:
lignecde="sudo gcalcli --cal="..domoticz_cal.." agenda ".."'"..agenda_start.."' '"..agenda_end.."' "..options
le script fonctionne correctement, personne n'a eu ce problème??
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: calendrier google

Message par Neutrino »

La ligne

Code : Tout sélectionner

lignecde="export LANG=\"fr_FR.UTF-8\" && sudo gcalcli --cal="..domoticz_cal.." agenda ".."'"..agenda_start.."' '"..agenda_end.."' "..options
est toute sur la même ligne.
Au pire, t'as juste à faire gaffe à ne pas mettre d'accents.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
seblang
Messages : 116
Inscription : 27 déc. 2015, 11:06

Re: calendrier google

Message par seblang »

Bonjour chez cela ne fonctionne pas! je suis nouveau et je ne vois pas pourquoi!!!!!

Si je tape dans le navigateur :

http://192.168.1.2:8080/json.htm?type=c ... itchcmd=On

Le idx 26 passe sur on mais quand je passe par la programmation non!

Les commande futur ne saffiche pas comme dans l'exemple, j'ai tjr Rien a faire !

une idée?

cat /var/tmp/googlecal.txt

pi@raspberrypi:~/domoticz/scripts $ cat /var/tmp/googlecal.txt
2015-12-27 00:00 2015-12-28 00:00 maison
2015-12-27 00:40 2015-12-27 01:10 26=On
2015-12-27 01:00 2015-12-27 12:00 26=On
2015-12-27 12:00 2015-12-27 22:00 26=Off



./cal_action.py


pi@raspberrypi:~/domoticz/scripts $ ./cal_action.py
Rien a faire /nothing to do/wir haben nichts damit zu tun

###############################################################

("le fichier dit que l'action ", 'maison', 'debute a ', '00:00', 'le :', '2015-12-27')
('heure declenchement ', datetime.datetime(2015, 12, 27, 0, 0))
('il est ', datetime.datetime(2015, 12, 27, 10, 12, 59, 826275))
('difference en secondes', 49620)


Rien a faire /nothing to do/wir haben nichts damit zu tun

###############################################################

("le fichier dit que l'action ", '26=On', 'debute a ', '00:40', 'le :', '2015-12-27')
('heure declenchement ', datetime.datetime(2015, 12, 27, 0, 40))
('il est ', datetime.datetime(2015, 12, 27, 10, 12, 59, 827377))
('difference en secondes', 52020)


Rien a faire /nothing to do/wir haben nichts damit zu tun

###############################################################

("le fichier dit que l'action ", '26=On', 'debute a ', '01:00', 'le :', '2015-12-27')
('heure declenchement ', datetime.datetime(2015, 12, 27, 1, 0))
('il est ', datetime.datetime(2015, 12, 27, 10, 12, 59, 828190))
('difference en secondes', 53220)


Rien a faire /nothing to do/wir haben nichts damit zu tun

###############################################################

("le fichier dit que l'action ", '26=Off', 'debute a ', '12:00', 'le :', '2015-12-27')
('heure declenchement ', datetime.datetime(2015, 12, 27, 12, 0))
('il est ', datetime.datetime(2015, 12, 27, 10, 12, 59, 828943))
('difference en secondes', 6420)
beuz33
Messages : 72
Inscription : 19 oct. 2015, 16:30

Re: calendrier google

Message par beuz33 »

Bonjour,
que je fasse On ou ON, mes interrupteurs s'allument mais ne s'éteignent jamais, on est obligé de faire une commande Off pour pouvoir éteindre ou l'interrupteur peut s'arrêter tout seul a l'heure de fin du calendrier, de plus je ne comprend pas mon fichier texte ne se met jamais a jour.

si quelqu'un a une réponse a mon problème??

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

Re: calendrier google

Message par Neutrino »

Bonsoir,
Je poste tout mon script qui fonctionne chez moi :

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 = '133'
nomText="Pense-bête"

--nom de l'agenda google
domoticz_cal="maison" 

--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
--if(true)then
	options="--tsv --military"
	agenda_start="00:00"
	agenda_end="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 99"
			elseif(etat=="Confort-1")then
			--Consigne de chauffage
			print(interrupteur.." passe à "..etat)
				commandArray[interrupteur]="Set Level 50"
			elseif(etat=="Confort-2")then
			--Consigne de chauffage
			print(interrupteur.." passe à "..etat)
				commandArray[interrupteur]="Set Level 40"
			elseif(etat=="Eco")then
			--Consigne de chauffage
			print(interrupteur.." passe à "..etat)
				commandArray[interrupteur]="Set Level 30"
			elseif(etat=="HorsGel")then
			--Consigne de chauffage
			print(interrupteur.." passe à "..etat)
				commandArray[interrupteur]="Set Level 20"
			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
La mise à jour du fichier s'effectue par le scripts toutes les heures.
S'il n'y a pas de RDV dans le calendrier dédié, alors le fichier est vide.
Pour le fonctionnement, je vais donner un exemple.
Capture.PNG
Capture.PNG (2.84 Kio) Consulté 10944 fois
Ici, l'interrupteur "Test" passera à On pendant 1H, la durée du RDV sur google..
La syntaxe est importante : le script demande à Domoticz de mettre l'interrupteur à On pour 1H. Au bout d'une heure, il l'éteint.
Attention, si on agit sur l'interrupteur entre temps, la demande d'extinction est oubliée, l'interrupteur restera dans son dernier état.
Le 'ON' dit juste "Allume le !", pour l'éteindre, il faut un 'OFF'.
D'ailleurs, 'Off' éteint l'interrupteur pendant X minutes.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
David07
Messages : 6
Inscription : 30 déc. 2015, 17:19

Re: calendrier google

Message par David07 »

Bonjour,
je me lance, je suis débutant en domotique et en script LUA.
Suite à ce thread https://www.domoticz.com/wiki/Interacti ... e_Calendar qui ne marchait plus je me suis lancé dans l'écriture de mon propre script il y a déjà quelques temps mais je n'avais jamais pris le temps de le mettre dans un github ni de le publier dans un forum.
Voici que pendant ces vacances de fin d'année je me dis que "ce n'est pas bien de ne pas partager" (cf. la pub) donc j'ai fait ma branche sur github et j'ai commité mon script pour le partager.

J'ai vu qu'ici vous vous partagiez déjà un script, le mien est un peu différent car il s'inspire du wiki cité plus haut.
La stratégie est différente par rapport au script de Neutrino, le script n'a pas d'intelligence dans le sens où il n'interprète pas les actions à faire.
Il ne fait que 3 choses, il lit le champs description de l'événement du calendar:
- s'il trouve ( ou [ il pense que c'est un script LUA donc il tente d’exécuter (ATTENTION pas encore testé)
- sinon:
* s'il y a = il regarde l'état actuel, si différent il fait le changement sinon il ne fait rien
* s'il y a == il applique le changement (il force l'état)
Donc si je prends par analogie le script de Neutrino pour mettre un radiateur "radiateur_salon" en mode "confort-1" il faudrait mettre un événement dans le calendrier de Domoticz:

Code : Tout sélectionner

radiateur_salon=Set Level 50
Autre point de différence, les actions a mettre dans le calendrier: Si on met une action de type VMC=On pendant 3 heures par exemple, le script va vérifier toutes les minutes que cet état est bien celui attendu et si non il le change pour le mettre à On. A la fin des 3 heures il ne le passera pas à Off, il faut faire un événement dans le calendrier VMC=Off. Si on ne veut pas qu'il vérifie tout le temps dans ce cas il suffit de faire une action de 1 minutes ;)

Dans mon script, il faut ajuster les variables qui sont dans l'entête et si tout va bien ça devrait rouler !

Au fait j'allais oublier, il est ici: https://github.com/DavidTre07/Domoticz/ ... oauth2.lua

Soyez indulgent, je débute en programmation et encore plus en LUA. Habituellement je me limite à des scripts shell...
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: calendrier google

Message par Neutrino »

Salut David07,
Merci pour ton script, j'apprends plein de trucs en LUA !
Vraiment sympa de pouvoir exécuter du LUA via le calendrier Google et bravo pour la gestion d'erreur, on reconnait une certaine expérience ;)
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Chris54220
Messages : 124
Inscription : 20 mars 2016, 20:54
Localisation : Nancy

Re: calendrier google

Message par Chris54220 »

Bonjour je viens vers vous car j'ai un petit soucis j'ai essai d'Install avec la partie un mais sa me fait un erreur pouvais vous m'aidez SVP

quand je lance la commande

pi@raspberrypi:~/gcalcli$ sudo pip install oauth2client

Code : Tout sélectionner

running install
running bdist_egg
running egg_info
writing requirements to gcalcli.egg-info/requires.txt
writing gcalcli.egg-info/PKG-INFO
writing top-level names to gcalcli.egg-info/top_level.txt
writing dependency_links to gcalcli.egg-info/dependency_links.txt
reading manifest file 'gcalcli.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'gcalcli.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-armv7l/egg
running install_lib
warning: install_lib: 'build/lib.linux-armv7l-2.7' does not exist -- no Python modules to install

creating build/bdist.linux-armv7l/egg
creating build/bdist.linux-armv7l/egg/EGG-INFO
installing scripts to build/bdist.linux-armv7l/egg/EGG-INFO/scripts
running install_scripts
running build_scripts
creating build/bdist.linux-armv7l/egg/EGG-INFO/scripts
copying build/scripts-2.7/gcalcli -> build/bdist.linux-armv7l/egg/EGG-INFO/scripts
changing mode of build/bdist.linux-armv7l/egg/EGG-INFO/scripts/gcalcli to 755
copying gcalcli.egg-info/PKG-INFO -> build/bdist.linux-armv7l/egg/EGG-INFO
copying gcalcli.egg-info/SOURCES.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying gcalcli.egg-info/dependency_links.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying gcalcli.egg-info/requires.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying gcalcli.egg-info/top_level.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/gcalcli-3.3.2-py2.7.egg' and adding 'build/bdist.linux-armv7l/egg' to it
removing 'build/bdist.linux-armv7l/egg' (and everything under it)
Processing gcalcli-3.3.2-py2.7.egg
Removing /usr/local/lib/python2.7/dist-packages/gcalcli-3.3.2-py2.7.egg
Copying gcalcli-3.3.2-py2.7.egg to /usr/local/lib/python2.7/dist-packages
gcalcli 3.3.2 is already the active version in easy-install.pth
Installing gcalcli script to /usr/local/bin

Installed /usr/local/lib/python2.7/dist-packages/gcalcli-3.3.2-py2.7.egg
Processing dependencies for gcalcli==3.3.2
Searching for oauth2client<=1.4.12
Reading https://pypi.python.org/simple/oauth2client/
Best match: oauth2client 1.4.12
Downloading https://pypi.python.org/packages/4a/de/9cc7e74bc217b9f428945b3c85ad83f5ab21ec77718408cfe8ab36118938/oauth2client-1.4.12-py2.7.egg#md5=8265f6985905a5590c622741980a47e5
Processing oauth2client-1.4.12-py2.7.egg
Moving oauth2client-1.4.12-py2.7.egg to /usr/local/lib/python2.7/dist-packages
Adding oauth2client 1.4.12 to easy-install.pth file

Installed /usr/local/lib/python2.7/dist-packages/oauth2client-1.4.12-py2.7.egg
error: Installed distribution oauth2client 1.4.12 conflicts with requirement oauth2client>=2.0.0,<3
voila ce qu'il ces passe est j'arrive pas a passe cette erreur
Répondre