calendrier google

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Répondre
ricorico94
Messages : 52
Enregistré le : 01 nov. 2015, 18:29

calendrier google

Message par ricorico94 » 13 déc. 2015, 22:17

Bonjour,

Votre approche est assez différente d'une autre décrite sur le forum domoticz.com: la vôtre est basée si je comprends bien sur un script extérieur à Domoticz qui appelle Domoticz quand il y a besoin, et qui récupère les actions à prendre uniquement 1 fois par jour. Celle du forum Domoticz est basée sur des scripts internes à Domoticz: elle a l'avantage (si j'ai bien compris aussi) d'être plus dynamique puisque les calendriers google peuvent être mis à jour à tout moment du jour, mais le gros inconvénient (à mon avis) de ne permettre que du on/off en l'état (alors que la vôtre permet de fixer du on/off, mais aussi d'autres valeurs), de plus je n'ai pas bien compris comment l'utiliser pour gérer plusieurs devices différents (par exemple plusieurs radiateurs qui doivent avoir des programmes différents).

Avec votre solution, est-ce qu'on peut forcer un rafraîchissement plus souvent qu'une fois par jour ? Est-ce qu'on peut faire en sorte que Domoticz reste maître au cas où on veuille forcer une action par rapport à ce qui était prévu au calendrier ?

En tout cas, bravo ! (pour ce script et tout le reste du site!)

ricorico94

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


deennoo
Messages : 4006
Enregistré le : 25 janv. 2015, 02:00

Re: calendrier google

Message par deennoo » 13 déc. 2015, 23:14

J'avais lu ta question sur le Forum Officiel...

Bienvenue !!

Moi j'utilise la solution du forum officiel.

Le but : une maison est vide avec un chauffage électrique, 3 ménages différents y ont accès, chacun remplit le calendrier commun de la maison en fonction de sa présence sur les lieux. D'un vendredi midi au dimanche soir par exemple.

Quand l'Inter calendrier est allumé, il met en route un groupe d'interrupteur appellé chauffage et chauffe eau (via les événement) pendant la durée prévu de présence, et il eteind l'ensemble une fois que le "rdv" est fini.

L'avantage est : pas de ON ni de Off a mettre, ni de numéro ou nom de matériel a mettre, juste un rendez vous a plannifier, pour ceux qui ne sont pas "domotique friendly" c'est très appréciable.

A chacun de commencer le rendez-vous la veille afin d'arriver dans une maison "opérationnel".

Si je me souvient bien tu souhaites piloter tes radiateurs électrique non ?

En fonction d'un planning hebdo ? Journalier ? Dans le cas d'une résidence secondaire (c'est mon cas)?

En zone ou pour toute la maison en même temps ?
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr

patrice
Messages : 1627
Enregistré le : 22 sept. 2014, 21:51

Re: calendrier google

Message par patrice » 13 déc. 2015, 23:45

Bonjour

Les deux scripts ne savent activer que des interrupteurs dont on active les numéros interne à Domoticz (les idx)

Celui trouvé sur le blog est en python et permet d'activer un ou plusieurs interrupteurs (114=ON, 114;115=ON), ce script peu être activé aussi souvent que necessaire par appel via la commande crontab (toutes les heures, tt les 3 minutes ...)


Celui que tu cites du forum domoticz et mentionné ici par Deennoo est en Lua (le langage interne à Domoticz), dans ce script il faut que tu définisse la correspondance entre le nom usuel et l'idx, ce qui permet ensuite d'utiliser le nom usuel dans le calendrier google , c'est plus lisible en effet lumiere_couloir=ON que 114=ON

Et dans tous les cas l'appui sur un des widgets domoticz prendra le relai tant que le calendrier n'est pas relu avec éventuellement un ordre contraire.
J"explique : imginons que le calendrier dit de passer "lumiere" à ON, on lit le calendrier toutes les 30 secondes, ma lumière passe a ON, j'appuie et je la passe a off , lorsque dans 30 secondes on va relire le calendrier google comme celui ci dit de passer à ON , elle se rallume ...

Voila j’espère avoir éclairci la vision des deux calendriers
Raspberry Pi model B+, RFXComm,8 interrupteurs Chacon, 5 ds180b 1-Wire, 3 douilles Chacon, 1 contact de porte Chacon, 1 module variateur,module emetteur 54700, Aeon Stick Z-wave, 1 MultiSensor Aeon, accés à distance.
aka thegritche@domoticz forum

Neutrino
Messages : 1329
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Re: calendrier google

Message par Neutrino » 14 déc. 2015, 12:32

Bonjour,
J'ai fait un script "hybride".
Je me suis basé sur l'étape 1 du site, mais ensuite, j'ai remplacé le python par du LUA.
Je peux appeler un interrupteur par son nom et non par l'IDX, par ex : Lumière Salon = On.
Une plage 'On' pendant 1H, allumera l'interrupteur pendant 1H.
Une plage 'ON', peu importe la durée, allumera l'interrupteur.
Voici mon script_time_calendrier.lua :

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
	options="--tsv --military"
	agenda_start="00:00"
	agenda_end="23:59"
 	
	lignecde="sudo gcalcli --cal="..domoticz_cal.." 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: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(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
				print(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
					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'
			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
Ainsi, le calendrier allume la lumière automatiquement. Si je l'éteins, elle ne se rallumera pas.
Ma maison à plein d'IP ! :mrgreen:

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


patrice
Messages : 1627
Enregistré le : 22 sept. 2014, 21:51

Re: calendrier google

Message par patrice » 14 déc. 2015, 12:36

Bonjour

Cool, je garde ça sous le coude

Et je le mentionne dans l'article d'origine du blog

Merci
Raspberry Pi model B+, RFXComm,8 interrupteurs Chacon, 5 ds180b 1-Wire, 3 douilles Chacon, 1 contact de porte Chacon, 1 module variateur,module emetteur 54700, Aeon Stick Z-wave, 1 MultiSensor Aeon, accés à distance.
aka thegritche@domoticz forum

ricorico94
Messages : 52
Enregistré le : 01 nov. 2015, 18:29

Re: calendrier google

Message par ricorico94 » 15 déc. 2015, 17:23

Merci à vous tous ! Je n'ai pas encore tout compris.. ;-(

Dans le script de Patrice, le script python ne regarde le calendrier qu'une fois par jour, c'est ça ?
En revanche, dans la version modifiée par Neutrino, le script python est remplacé par du Lua qui vérifie un unique calendrier 1 fois par heure, et qui pour chaque entrée, lit les diverses lignes de code du RDV (par exemple, si une entrée Google inclut 2 lignes:
radiateur1=ON;
radiateur2=OFF
alors le script assignerait ces 2 valeurs aux IDX correspondant. C'est ça ?
Et donc si je voulais gérer mon module Qubino fil pilote qui fonctionne comme un dimmer, il faudrait que j'étende les clauses if/else du script de Neutrino pour convertir des mots-clefs "Confort" en valeur numérique correspondante de dimmer (99), ou bien que je vois comment directement saisir la valeur 99 dans le calendrier et modifier le script pour qu'il assigne cette valeur numérique à l'IDX ad hoc.
S'il n'y a plus de script python, faut-il encore installer les librairies python décrites dans le tuto de Patrice, ou restent-elles nécessaires pour l'accès à google API ?

A coté de ça, le script du forum Domoticz utilisé par Deennoo a l'avantage de la clarté en utilisant plusieurs calendriers, mais chaque calendrier ne peut déclencher qu'un seul type d'événement (qui lui-même déclenche les actions codées dans Domoticz). Mais dans cas, même en créant un calendrier par radiateur, le script ne peut pas gérer plusieurs états (par ex il ne peut distinguer une demande de hors Gel, d'une demande d'Arrêt complet ou de confort, etc.). Ou alors, il faudrait le modifier pour intégrer dans ce script l'analyse de texte du script de Neutrino ?

Merci à vous,
ricorico94

patrice
Messages : 1627
Enregistré le : 22 sept. 2014, 21:51

Re: calendrier google

Message par patrice » 15 déc. 2015, 20:51

Bonsoir
Je réponds à la question qui m'est posée, le script python lit autant de fois que l'on veut , il suffit de programmer son déclenchement via le crontab linux don le boulot est de lancer des scripts à la fréquence qu(on lui indique toutes les minutes , toutes les 3 minutes ,2 foi par jour, tt les heures , à 47 de chaque heure ...

Je laisse répondre les autres pour la partie Lua et les multiples calendriers
Raspberry Pi model B+, RFXComm,8 interrupteurs Chacon, 5 ds180b 1-Wire, 3 douilles Chacon, 1 contact de porte Chacon, 1 module variateur,module emetteur 54700, Aeon Stick Z-wave, 1 MultiSensor Aeon, accés à distance.
aka thegritche@domoticz forum

Neutrino
Messages : 1329
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Re: calendrier google

Message par Neutrino » 15 déc. 2015, 21:36

Je n'ai qu'un seul dimmer à la maison, mais c'est suffisant pour tester. :)
Je vais modifier le script pour prendre en charge les valeurs numériques.
Peux-tu me donner les correspondances mode=valeur (ex : Confort=99) ?
Ma maison à plein d'IP ! :mrgreen:

deennoo
Messages : 4006
Enregistré le : 25 janv. 2015, 02:00

Message par deennoo » 15 déc. 2015, 22:40

De mon côté BakSeeDaa le créateur de la méthode a répondu :
Son script permet d' analyser des mots clefs depuis une variable,

Voici un bout des 25 variables créé par BakSeeDaa

Image

Il te suffit ensuite de cree un autre script ce mettra en route en fonction du mot clef. Si tu marques horsgel et que tu créé un script qui lit hors gel et met ton radiateurs en hors gel moi je trouve cela quand même très simple.

Peux tu nous expliquer la finalité, et ton cas ?

Cela peut sûrement servir a d'autre.

ricorico94
Messages : 52
Enregistré le : 01 nov. 2015, 18:29

Re: calendrier google

Message par ricorico94 » 16 déc. 2015, 00:18

Merci Patrice pour ta réponse.

@Neutrino : Si en plus on m'apporte tout sur un plateau, c'est le confort absolu.. :D Pourri gâté.. Mais comme je débute en LUA et python, ça m'arrange clairement.
Pour les modules Qubino à fil pilote, les valeurs sont à choisir parmi des plages de valeurs pour chaque mode, mais certaines valeurs semblent plus logiques car utilisées déjà par le module lui-même quand on utilise ses propres interrupteurs:
Confort: 99
Confort-1°:50
Confort-2°:40
Eco: 30
HorsGel:20
Arrêt: 0

Je reviens sur ma question à propos des librairies Python: elles restent nécessaires car liées à l'API Google ?

Ricorico94

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre