Page 2 sur 8

Re: calendrier google

Publié : 16 déc. 2015, 00:35
par ricorico94
@Deennoo
Pour être honnête, je ne comprends pas bien la logique du script de Bakseeda, entre les interrupteurs, les variables : comment jongler avec ces entités en fonction du nombre de calendriers qu'on souhaite avoir, du nombre de devices domotiques à gérer, et de la variété d'ordres à donner à chaque device.. S'il faut que je créée 1 calendrier pour chacun de mes 7 radiateurs et pour chaque calendrier 25 variables, ça ferait un sacré nombre (7*25) de variables.. Un peu fouilli. Il n'a pas vraiment décrit sur son Post comment gérer des calendriers multiples/devices multiples/ordres multiples de bout en bout (entre Google et domoticz) et comme je débute sur domoticz, je suis encore perdu.

Pour le moment, je suis encore hésitant entre avoir un unique calendrier dans lequel je renseigne tous les radiateurs (risque que ça devienne fouilli, mais ça donne une bonne vue d'ensemble et ça diminue les appels au calendrier...), ou bien un calendrier par radiateur pour la lisibilité que ça apporte (mais il faut jongler entre les calendriers..). Comme c'est mon premier projet domotique, je manque d'expérience sur les avantages et inconvénients.. Ce que je sais, c'est qu'à part l'heure du lever où j'ai des points communs entre radiateurs, le reste des journées diffère pas mal entre radiateurs, et mes journées diffèrent d'une semaine sur l'autre..
En revanche, je souhaite pouvoir plus tard "forcer" certains ordres grâce à l'interface visuelle de domoticz: par exemple, si on a programmé un radiateur de salle de bain pour une certaine heure, mais qu'on change d'avis, je voudrais pouvoir déclencher un forçage par simple appui sur un bouton dans Domotics (via tablette ou téléphone) pour l'arrêter ou au contraire pour relancer un chauffage "par minuterie" (ie un appui lancerait le chauffage pour X minutes, puis le radiateur suivrait à nouveau son programme initial): il faut que ce soit simple pour que toute la famille sache le gérer.. Du coup, je me dis pour l'instant que si je prends un script de type LUA dans Domoticz, je devrais plus tard pouvoir rajouter cette couche de gestion, alors qu'avec un fichier CRON/python externe, je risque de perdre cette capacité d'analyse. Mais je me plante peut-être.. C'est pour ça que j'essaie de comprendre les mécanismes des divers scripts.

Re: calendrier google

Publié : 16 déc. 2015, 08:01
par vil1driver
Salut,

Si c'est pour gérer le quotidien ce n'est peut être pas le plus adapté..

Re: calendrier google

Publié : 16 déc. 2015, 12:40
par deennoo
vil1driver a écrit :Salut,

Si c'est pour gérer le quotidien ce n'est peut être pas le plus adapté..
C'est le probleme on est d'accord, Ricorico94 stp explique nous un peu mieux ton besoin, ton cas, si ce n'est pas ultra top secret. parce que la avec des bribes d'information on stagne.

Re: calendrier google

Publié : 16 déc. 2015, 14:09
par Neutrino
Perso, j'utilise le calendrier pour afficher des rappels sur l'écran LCD de ma "box" et pour lancer mon aspi robot suivant mon emploi du temps.
Ça me permet de décaler une plage en un clin d’œil sur mon smartphone sans avoir besoin de me connecter à mon VPN.
Ca m'évite surtout de passer par la fonction planning que je trouve pas terrible.
(Et ça m'a servit d'excuse pour pisser des lignes :mrgreen: )
Voici le script mis à jour avec les consignes de chauffage.
ATTENTION, l'action est lié à la casse ! 'éco' au lieu de 'Eco' ne fonctionnera pas (sauf à mettre à jour le script, c'est fait pour vivre tout ça ;) )

Code : Tout sélectionner

---------------------------------
-- Script de lecture de calendrier Google.
-- Actionne un interrupteur ou remplie un capteur virtuel Text
-- Auteur : Aurelien Neutrino
-- Date : 16 décembre 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="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 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.." 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'
			elseif(tonumber(etat)~=nil)then
			--Niveau du dimmer à actionner
				commandArray[interrupteur]="Set Level "..etat
			elseif(etat=="Confort")then
			--Consigne de chauffage
				commandArray[interrupteur]="Set Level 99"
			elseif(etat=="Confort-1")then
			--Consigne de chauffage
				commandArray[interrupteur]="Set Level 50"
			elseif(etat=="Confort-2")then
			--Consigne de chauffage
				commandArray[interrupteur]="Set Level 40"
			elseif(etat=="Eco")then
			--Consigne de chauffage
				commandArray[interrupteur]="Set Level 30"
			elseif(etat=="HorsGel")then
			--Consigne de chauffage
				commandArray[interrupteur]="Set Level 20"
			elseif(etat=="Arrêt")then
			--Consigne de chauffage
				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
Pas vraiment testé par contre...

Re: calendrier google

Publié : 16 déc. 2015, 14:26
par ricorico94
Je vais essayer de réexpliquer mon cas.. et ma compréhension de Domoticz.

Entre mes enfants, mon épouse et moi-même, nous avons tous des calendriers de présence à la maison différents: chacun suit globalement un certain rythme, mais les rythmes sont différents: par exemple, certains ont un simple rythme hebdomadaire, mais un enfant a un rythme sur 3 semaines, mon épouse sur 2 semaines et le mien n'a pas vraiment de rythme, car je bosse de chez moi de temps en temps, mais sans règle précise. Du coup, définir des règles de périodicité pour chaque radiateur serait faisable, mais assez compliquées de par le nombre de tests à faire (les heures de présence diffèrent selon les jours et les semaines, etc.). De plus, s j'ai des événements programmés mais non récurrents (par ex un départ en week-end), devoir modifier des règles juste pour un événement est dommage et probablement source d'erreur.
Donc je trouve très séduisante l'idée d'un calendrier Google dans lequel je saisis mes intentions de "chauffe" en fonction du planning connu de chacun : je n'aurai pas à vérifier chaque semaine la logique des tests divers et variés pour déterminer un ordre de chauffe, et j'aurai juste à créer ce planning de manière visuelle. j'ai bien lu qu'un calendrier google n'est pas perçu comme le mdoe de gestion le plus sécurisé, mais pour avoir une programmation simple, je pense que ça reste plus adapté que des règles compliquées à devoir modifier régulièrement.
Jusque là, mon état d'âme est donc de savoir s'il est plus pratique d'utiliser un unique calendrier (avec tout plein d'événements dedans..) plutôt qu'un calendrier pour chaque zone de chauffe (ie, en gros, chaque radiateur)

De plus, comme les radiateurs ne sont pas seulement On/Off mais avec des ordres de divers conforts, cela rendrait les règles encore plus compliquées, alors que le calendrier Google l'indiquerait plus facilement...

Ensuite, il y a les événements imprévus. Par exemple si quelqu'un rentre à la maison plus tôt que prévu. Ou encore, si on veut faire chauffer une salle de bain à un autre moment que le créneau habituel... Comme je prévois d'installer une tablette dédiée à la domotique dans la maison, je me disais que je mettrais dessus une page de contrôle de certaines choses, y compris des boutons pour déclencher "20 minutes de chauffe dans la douche", ou bien le plan de l'appart pour cliquer sur une chambre et forcer son chauffage. (Histoire de corser un peu le tout, je me lance dans l'aventure de S.A.R.A.H en plus de Domoticz et j'espère qu'on pourra donc commander vocalement ces ordres de dérogation au lieu d'utiliser la tablette..).
Donc il faut que je trouve un moyen simple (et élégant?) de permettre ce forçage de certains ordres pour outrepasser temporairement le planning venant du calendrier Google: si je comprends bien la logique de Domoticz, je pourrais soit utiliser pour ça des scripts LUA soit même du Blockly.
En revanche, je ne sais pas s'il me sera possible de faire repasser le device à son état antérieur à la dérogation (ie: si le chauffe-serviette des enfants était prévu pour chauffer de 18:30 à 19:30, mais que l'un d'eux le déclenche pour 20 minutes à 18:15, il serait super que le système comprenne qu'il faille laisser le radiateur sur chauffe au-delà de 18:35 et jusqu'à 19:30 comme c'était prévu dans le calendrier (sinon, les enfants suivants vont râler..). Il y a peut-être moyen de questionner Domoticz au début d'un script de dérogation afin de sauvegarder l'état, puis de le rétablir à la fin de la dérogation, mais je n'ai pas encore investigué cet aspect, vu que je reste encore perplexe devant des soucis "plus simples".. ;-)

Re: calendrier google

Publié : 16 déc. 2015, 16:32
par vil1driver
La prise de tête...
As tu vu mon script basé sur la détection de mouvement ?
C'est tout de même plus simple de laisser le système décider seul s'il doit chauffer ou non et à l'occasion l'y contraindre par un bouton/interrupteur/sms/etc..

J'ai pratiquement les mêmes contraintes que toi et ici le chauffage s'oublie totalement.

Avis perso les calendriers dans ce genre de situation c'est invivable... Si la domotique complique les choses il faut arrêter.

Re: calendrier google

Publié : 16 déc. 2015, 19:24
par ricorico94
Je crois avoir lu des posts sur une gestion du chauffage par capteurs, mais je ne le retrouve plus. Je ne sais plus qui en était l'auteur et si c'est ce dont tu parles (je veux bien un lien). Toutefois, j'étais passé très vite dessus, car je ne voyais pas comment être "proactif". Je veux dire que j'imagine bien que la domotique puisse diminuer voire éteindre des radiateurs une fois qu'aucune présence n'est détectée, mais en revanche je ne vois pas comment des capteurs de présence peuvent commencer à chauffer avant qu'une présence soit détectée. Et j'ai constaté que mes radiateurs, bien qu'électriques et "mixtes" (radiants+inertie moyenne) ont besoin de temps pour chauffer une pièce, donc je crains les foudres des autorités compétentes si elles rentrent et qu'il faut 1h ou 2h pour remonter la température. :lol:
J'ai tout de même déjà installé un script de détection des téléphones se connectant au wifi pour cette optique, mais comme écrit ci-dessus, je ne sais pas comment préparer à l'avance la montée en température sans un calendrier. Toutefois, j'avais en tête de forcer automatiquement le chauffage en cas de présence de ces téléphones, mais ça demande un peu de réflexion, car je voudrais traiter le cas de figure où le téléphone a été simplement oublié..
(et contrairement à ce qu'on lit ou à ce qu'on entend, il ne faut pas forcément chercher la stabilité des températures pour faire des économies)

Re: calendrier google

Publié : 16 déc. 2015, 20:31
par vil1driver
C'est sûr que tu veux toujours que ta pièce soit à sa température de confort avant que tu y entre....

Avec des horaire hyper variables...

Bon courage


Perso j'accepte de passer 30min à la temps éco...
Combien de temps restons nous dehors ?
Certainement plus parfois...

Mais la plupart du temps je simule ma présence avant de rentrer chez moi...

Re: calendrier google

Publié : 16 déc. 2015, 21:18
par rimram31
vil1driver a écrit :...Perso j'accepte de passer 30min à la temps éco...
J'ai programmé des créneaux horaires semaine, week-end (d'ailleurs un calendrier me serait utile pour les jours de présence mais pas we ...), créneaux qui ne sont pas trop "laches" et j'ai rapidement installé ImperiHome pour pouvoir forcer au cas où quand je suis là hors créneaux. J'avais auparavant un système Delta Dore qui faisait a peu près la même chose, j'en suis satisfait depuis vingt ans, la seule chose qui m'interrogeait était le "mode forcé" que j'ai maintenant sur mon mobile.

Petite mesquinerie (pas persuadé de son utilité!), je démarre mon chauffage la nuit une heure avant le passage en heures pleines. Il faudrait maintenant que je suis un peu mieux outillé pour le suivi que je calcule tout ça ;)

Mais je reste attentif au calendrier google qui me permettrait de gérer facilement les jours d'absences/présences hors week-end. J'ai jusque là rien compris a ce que j'ai lu sur le sujet dz/google ;) (et je peux me qualifier de développeur chevronné ...)

Re: calendrier google

Publié : 16 déc. 2015, 21:47
par ricorico94
@Neutrino: super merci pour ce script, je vais le tenter !
J'ai déjà quelques questions de débutants (désolé, je ne connais pas encore LUA par exemple..).
- si j'ai bien compris certains tutoriels, je crée un fichier dans le répertoire LUA, et comme ce script tourne à intervalles réguliers, je dois le nommer comment? script_time_xxxxxxxx.lua ? (soit par exemple script_time_Gcalendar.lua )
- le script indique un IDX=133 : est-ce que le fait ed mettre cette ligne dans le script va créer ce device dans Domoticz, ou est-ce que je dois créer ce device moi-même en parallèle ?
- dans un RDV donné, est-ce que je peux mettre plusieurs lignes (par exemple :
radiateur1=Eco
radiateur2=Confort )?
ou est-ce qu'une seule ligne est lue par le script ? Je ne vois pas dans le script où il analyserait en boucle le texte, mais je ne comprends pas encore toutes les subtilités... (c'est un euphémisme)
- si j'ai bien compris, les commandes que tu as codées pour mon dimmer sont comprises comme "définitives" comme tes "ON" et "OFF" (ie indépendantes de l'heure de fin du RDV, contrairement à "On") ?
- est-ce que le script ou Domoticz seraient gênés si plusieurs RDV commencent exactement à la même heure ? et est-ce qu'un RDV peut couvrir plusieurs jours ? (commencer un 15 décembre à 22h et se terminer le 16 décembre à 5h, voire même se terminer bien après, style le 25 décembre)


ricorico94