[Tuto] Google Agenda et Domoticz Version 2

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Google Agenda et Domoticz Version 2

Message par Neutrino »

Impressionnant, tout est géré en LUA de A à Z !
Par contre, il faut effectivement un peu de temps devant soit pour le mettre en place.
C'est surtout l'accès à l'api google qui semble velu :)

J'ai fait ça aussi (à mon niveau hein), mais je reste dépendant de gcalcli.
Je mets dans un calendrier "Maison" par exemple de 14:30 à 15:30 Aspirateur=On et mon aspirateur robot fonctionnera pendant 1 H.
Si je mets "Lampe = ON", le ON en majuscule signifie sans limite.
Et si je mets "Sortir les poubelles", alors l'écran de mon pi l'affiche en boucle le temps donnée.
Je suis en plein débug, je le posterai ici une fois stabilisé.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Google Agenda et Domoticz Version 2

Message par patrice »

Bonsoir
Neutrino a écrit :I
Je mets dans un calendrier "Maison" par exemple de 14:30 à 15:30 Aspirateur=On et mon aspirateur robot fonctionnera pendant 1 H.
Comment tu déclenches l'aspi Robot ?
C'est quelle marque ?
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Google Agenda et Domoticz Version 2

Message par Neutrino »

Bonsoir Patrice,
C'est un LG Hom-Bot vr1027r.
Je l'ai depuis 3 ans et il se commande normalement avec une télécommande infrarouge.
J'ai installé sur mon pi un récepteur IR afin de copier mes télécommandes et 2 LED IR pour "arroser" la pièce de vie.
Ainsi, je peux contrôler ma TV, allumer mon MediaCenter et déclencher mon Aspirateur Robot avec un switch virtuel dans domoticz et LIRC.
Ces switchs lancent des scripts bash comme :

Code : Tout sélectionner

irsend SEND_ONCE hombot BTN_START

Et mes télécommandes sont reconnues par LIRC et peuvent ainsi lancer des requête JSON.
C'est comme ça que grâce au bouton Jaune de la telco de ma TV, j'allume la lumière du Salon
Telco->IR->LIRC->requête domoticz JSON -> RFLINK ->Module Dio->Et la lumière fut !
Je décrirai mon installation plus en détail dans un autre topic pour éviter de "polluer" celui-ci :)
Mais pour l'instant, ça donne ça ;) :
Image
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Google Agenda et Domoticz Version 2

Message par deennoo »

Et voilà, merci, je me demandait comme j'allais en piloter un.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Google Agenda et Domoticz Version 2

Message par patrice »

Merci
Je ne sais pas si mon vieux Roomba supporterait cette greffe contre nature :lol:
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Google Agenda et Domoticz Version 2

Message par deennoo »

patrice a écrit :Merci
Je ne sais pas si mon vieux Roomba supporterait cette greffe contre nature :lol:
si tu le pilotes déja avec une telecommande IR...pas de soucis tu ne fais que la copier, cela ressemble a un RFLink mais en IR, c'est une bonne idée de complement, pour un shield.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
heartblood
Messages : 189
Inscription : 13 août 2015, 09:50

Re: Google Agenda et Domoticz Version 2

Message par heartblood »

Perso, je contrôle mon aspirateur robot (télécommandé) avec un module kira 128 ^^ (http://www.maison-et-domotique.com/9991 ... en-reseau/)
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Google Agenda et Domoticz Version 2

Message par Neutrino »

J'ai fait un petit tuto ici viewtopic.php?f=15&t=1088 pour éviter de continuer à digresser sur ce topic ;)
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Google Agenda et Domoticz Version 2

Message par Neutrino »

Bon, après quelques jours de debug et de tests, voici mon script, garanti sans python :)
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
Pour le fonctionnement, c'est assez simple :
Pour la configuration, le côté Gmail est le même que l'étape 1 du blog.
Ensuite, il faut un capteur virtuel Text et des interrupteurs à actionner :mrgreen:
Le calendrier est interrogé toutes les heures.
L'agenda est rempli par exemple de 18:00 à 23:00 avec

Code : Tout sélectionner

Chauffage Salon=On

Le chauffage sera donc activé durant cette plage puis s'éteindra.
Remplacez On par ON et le chauffage restera allumé.
Si l'interrupteur ou la commande ne sont pas reconnus, le script l’interprète comme un texte libre et l'envoie dans le dummy text.
Libre à vous d'afficher ce texte sur la custom page ou sur un écran LCD !
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
seblang
Messages : 116
Inscription : 27 déc. 2015, 11:06

Re: Google Agenda et Domoticz Version 2

Message par seblang »

Hello neutrino,

merci pour ce script.
bon je vais peut etre poser des questions con, je suis nouveau et pas pro en programmation.

si je comprends bien je crée un capteur text (idx 60 chez moi donc dans le script je mets 60 au lieu de 133)
Ensuite le créer le fichier dans domoticz/scripts/script_time_calendrier.lua et je colle dedans ton script sans rien change si ce n'est le idx.

ensuite il n'y a rien a mettre dans le crontab ou autres? il s’exécute tout seul?

et dans mon calendrier si je mets "nom de l'interrupteur "=On celui restera a on le temps du rdv planning
et si je mets "nom de l'interrupteur "=ON celui- reste allumer toute le temps jusqu'a une nouvelle commande pour le meme interrupteur.?

merci de ton retour et bonne&heureuse année a toi
Répondre