calendrier google comme declencheur d'un interrupteur
Re: calendrier google comme declencheur d'un interrupteur
Bonsoir
Je cale a la première étape :je n'arrive pas a installer gcal: après avoir suivi cette procédure:
-sudo apt-get install python-gflags python-dateutil python-httplib2
-sudo apt-get install python-pip
-sudo pip install google-api-python-client==1.4.2
-sudo pip install oauth2client==1.4.12
-sudo apt-get install python-httplib2 python-google-apputils python-googleapi et là j'ai le message d'erreur suivant:
unable to locate package python-google-apputils
J'ai esseyé plusieurs fois et j'ai toujours le même message.
Est ce que quelqu'un à une idée ?
Je cale a la première étape :je n'arrive pas a installer gcal: après avoir suivi cette procédure:
-sudo apt-get install python-gflags python-dateutil python-httplib2
-sudo apt-get install python-pip
-sudo pip install google-api-python-client==1.4.2
-sudo pip install oauth2client==1.4.12
-sudo apt-get install python-httplib2 python-google-apputils python-googleapi et là j'ai le message d'erreur suivant:
unable to locate package python-google-apputils
J'ai esseyé plusieurs fois et j'ai toujours le même message.
Est ce que quelqu'un à une idée ?
Re: calendrier google comme declencheur d'un interrupteur
Pourquoi ne pas suivre tout simplement ce qui est décrit dans le GitHub ?
Code : Tout sélectionner
sudo apt-get install gcalcli
Re: calendrier google comme declencheur d'un interrupteur
bonjour
Désolé de poser des questions qui doivent paraitre stupides pour des habitués.
après avoir installer sudo apt-get install gcalcli ,l'identification du compte et l'autorisation doit se faire par la commande : "sudo gcalcli agenda --noauth_local_webserver " selon le site https://easydomoticz.com/agenda-google- ... -partie-1/
et la j'obtiens ce message a la place du lien qui devrait me permettre l'autorisation du calendrier google
freebox@DOMOZ:~$ sudo apt-get install gcalcli
Reading package lists... Done
Building dependency tree
Reading state information... Done
gcalcli is already the newest version (4.0.4-2).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
freebox@DOMOZ:~$ sudo gcalcli agenda --noauth_local_webserver
Traceback (most recent call last):
File "/usr/local/bin/gcalcli", line 6, in <module>
from gcalcli.cli import main
File "/usr/local/lib/python2.7/dist-packages/gcalcli/cli.py", line 29, in <module>
from gcalcli import utils
File "/usr/local/lib/python2.7/dist-packages/gcalcli/utils.py", line 13, in <module>
fuzzy_date_parse = Calendar().parse
File "/usr/local/lib/python2.7/dist-packages/parsedatetime/__init__.py", line 270, in __init__
self.ptc = Constants()
File "/usr/local/lib/python2.7/dist-packages/parsedatetime/__init__.py", line 2381, in __init__
self.locale = get_icu(self.localeID)
File "/usr/local/lib/python2.7/dist-packages/parsedatetime/pdt_locales/icu.py", line 56, in get_icu
result['icu'] = icu = pyicu.Locale(locale)
AttributeError: 'module' object has no attribute 'Locale'
freebox@DOMOZ:~$
Ai- je oublier une manip ?
Désolé de poser des questions qui doivent paraitre stupides pour des habitués.
après avoir installer sudo apt-get install gcalcli ,l'identification du compte et l'autorisation doit se faire par la commande : "sudo gcalcli agenda --noauth_local_webserver " selon le site https://easydomoticz.com/agenda-google- ... -partie-1/
et la j'obtiens ce message a la place du lien qui devrait me permettre l'autorisation du calendrier google
freebox@DOMOZ:~$ sudo apt-get install gcalcli
Reading package lists... Done
Building dependency tree
Reading state information... Done
gcalcli is already the newest version (4.0.4-2).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
freebox@DOMOZ:~$ sudo gcalcli agenda --noauth_local_webserver
Traceback (most recent call last):
File "/usr/local/bin/gcalcli", line 6, in <module>
from gcalcli.cli import main
File "/usr/local/lib/python2.7/dist-packages/gcalcli/cli.py", line 29, in <module>
from gcalcli import utils
File "/usr/local/lib/python2.7/dist-packages/gcalcli/utils.py", line 13, in <module>
fuzzy_date_parse = Calendar().parse
File "/usr/local/lib/python2.7/dist-packages/parsedatetime/__init__.py", line 270, in __init__
self.ptc = Constants()
File "/usr/local/lib/python2.7/dist-packages/parsedatetime/__init__.py", line 2381, in __init__
self.locale = get_icu(self.localeID)
File "/usr/local/lib/python2.7/dist-packages/parsedatetime/pdt_locales/icu.py", line 56, in get_icu
result['icu'] = icu = pyicu.Locale(locale)
AttributeError: 'module' object has no attribute 'Locale'
freebox@DOMOZ:~$
Ai- je oublier une manip ?
Re: calendrier google comme declencheur d'un interrupteur
Installe Python3
Re: calendrier google comme declencheur d'un interrupteur
deja installé.
Re: calendrier google comme declencheur d'un interrupteur
Et que dit:
Code : Tout sélectionner
$ python --version
Il faut changer la version par défaut pour l'utilisateur (via un alias dans le .bashrc) ou globalement (via update-alternatives, mais gaffe aux effets de bord si python 2 est utilisé par ailleurs pour des scripts perso ailleurs... ou systèmes!).
Cf:
https://linuxconfig.org/how-to-change-f ... bian-linux
Re: calendrier google comme declencheur d'un interrupteur
effectivement: Python 2.7.16
Je vais essayé ta solution
Merci pour ton aide
Je vais essayé ta solution
Merci pour ton aide
Re: calendrier google comme declencheur d'un interrupteur
Bonjour Neutrino,
Je viens de reprendre ton script en dzevents, par contre cela me met une erreur à la ligne
action = action:gsub(" = ","=")
Voici l'erreur : 2021-05-16 13:18:00.284 Error: dzVents: Error: (3.1.7) Calendrier 1.0: ...scripts/dzVents/generated_scripts/Calendrier dernier.lua:91: attempt to index a nil value (global 'action')
S'aurais tu d'où cela vient?
Je viens de reprendre ton script en dzevents, par contre cela me met une erreur à la ligne
action = action:gsub(" = ","=")
Voici l'erreur : 2021-05-16 13:18:00.284 Error: dzVents: Error: (3.1.7) Calendrier 1.0: ...scripts/dzVents/generated_scripts/Calendrier dernier.lua:91: attempt to index a nil value (global 'action')
S'aurais tu d'où cela vient?
Neutrino a écrit : 20 juil. 2020, 22:42 Je dois avoir ça en magasin![]()
Je me suis créer un calendrier Google nommé 'maison' pour pas mélanger avec les autres.
J'ai un script qui récupère un fichier tiré de gcalcli et un autre qui l'interprète.
Un rdv nommé 'Lumière=On' passe interrupter Lumière à On pendant le temps du RDV.
ON en majuscule le laisse dans cet état.
Quelques explications : viewtopic.php?f=10&t=1195&p=10344#p10343
Le plus chiant, c'est d'installer gcalcli https://github.com/insanum/gcalcli
C'est du DzVents :
GoogleAgenda.luaCode : Tout sélectionner
--[[ Prerequisits ================================== Domoticz v3.8837 or later (dzVents version 2.4 or later) Google calendar actioner -- Authors ---------------------------------------------------------------- V1.0 - Neutrino - Adaptation to Dzvents ]]-- -- Variables to customize ------------------------------------------------ local fetchIntervalMins = 1 -- Day time scraping interval. --idx ou nom du capteur Text local nomText="Pense-bête" --nom de l'agenda google local domoticz_cal="maison" --fichier et chemin pour agenda local repertoire="/var/tmp/" local file="googlecal.txt" -- Please don't make any changes below this line (Except for setting logging level) local scriptName = 'Calendrier' local scriptVersion = '1.0' local function has_value (tab, val) for index, value in ipairs(tab) do --if val:find(value) then if val==(value) then return (index-1)*10 end end return false end return { active = true, logging = { level = domoticz.LOG_DEBUG, -- Uncomment to override the dzVents global logging setting marker = scriptName..' '..scriptVersion }, on = { timer = { 'every '..tostring(fetchIntervalMins)..' minutes', }, --devices={"30 secondes"}, }, execute = function(domoticz, item) --nom de l'agenda google local domoticz_cal="maison" --fichier et chemin pour agenda local options="--tsv --military" local agenda_start="00:00" local agenda_end="23:59" local lignecde="export LANG=\"fr_FR.UTF-8\" && sleep 1 && sudo gcalcli --cal="..domoticz_cal.." agenda " .."'"..agenda_start.."' '"..agenda_end.."' "..options lignecde=lignecde.." > "..repertoire..file.." &" domoticz.log("MAJ Calendrier "..domoticz_cal,domoticz.LOG_INFO) domoticz.log(lignecde,domoticz.LOG_INFO) os.execute(lignecde) --Récupère l'heure et la date actuelle time = os.time() local minutes=tonumber(os.date('%M',time)) local hours=tonumber(os.date('%H',time)) local jour = os.date('%d',time) --Nombre de minutes depuis 00:00 local maintenant=tonumber(hours*60+minutes) 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 domoticz.log("Début lecture Fichier google Calendrier") for line in file:lines() do -- Pour chaque lignes table.insert(ligne, line) -- On insère les lignes dans la table domoticz.log("Ligne : "..line,domoticz.LOG_DEBUG) end file:close() domoticz.log("Fin Fichier google Calendrier",domoticz.LOG_DEBUG) else domoticz.log('<font color="#FF0000">Erreur lecture fichier</font>',domoticz.LOG_DEBUG) 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(" = ","=") action = action:gsub("\r","") action = action:gsub("\n","") debutAction = heureDebut*60+minutesDebut finAction = heureFin*60+minutesFin-1 anneeAction,moisAction,jourAction = dateDebut:match("([^;]+)-([^;]+)-([^;]+)") if(action:find("=")~=nil and jourAction == jour)then --L'action contient "=", c'est un interrupteur à actionner domoticz.log("Action : "..action,domoticz.LOG_DEBUG) domoticz.log(maintenant.." : "..debutAction,domoticz.LOG_DEBUG) interrupteur,etat=action:match("([^;]+)=([^;]+)") domoticz.log(interrupteur.." => "..etat,domoticz.LOG_DEBUG) if(domoticz.devices(interrupteur)~=nil and debutAction==maintenant)then --if(domoticz.devices(interrupteur)~=nil and maintenant==maintenant)then --L'interrupteur existe, test des états possible --récupération des infos du dispositif levelMax = domoticz.devices(interrupteur).maxDimLevel levels = domoticz.devices(interrupteur).levelNames domoticz.log("Etat souhaité : "..etat,domoticz.LOG_DEBUG) if(etat=="On"or etat=="Off")then if(dateDebut~=dateFin)then --l'action finit demain finAction=finAction+(24*60) end if(etat=="On")then domoticz.devices(interrupteur).switchOn().forMin(finAction-maintenant) domoticz.log(interrupteur.." passe à On pour "..finAction-maintenant.." minutes.",domoticz.LOG_DEBUG) else domoticz.devices(interrupteur).switchOff().forMin(finAction-maintenant) domoticz.log(interrupteur.." passe à Off pour "..finAction-maintenant.." minutes.",domoticz.LOG_DEBUG) end if(domoticz.devices(nomText).text=='' or domoticz.devices(nomText).text: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 domoticz.log("pense-bête : "..action,domoticz.LOG_DEBUG) domoticz.devices(nomText).updateText(action) end elseif(etat=="ON")then --ON (tout en majuscule) siginifie que l'action n'a pas de fin domoticz.log(interrupteur.." passe à On",domoticz.LOG_DEBUG) domoticz.devices(interrupteur).switchOn() elseif(etat=="OFF")then --OFF (tout en majuscule) siginifie que l'action n'a pas de fin domoticz.log(interrupteur.." passe à Off",domoticz.LOG_DEBUG) domoticz.devices(interrupteur).switchOff() elseif(tonumber(etat)~=nil)then --Niveau du dimmer à actionner etat = tonumber(etat) if (etat>levelMax)then etat = levelMax domoticz.log("Attention ! Le niveau demandé "..etat.." est supérieur au niveau maximum possible "..levelMax.." !",domoticz.LOG_DEBUG) end domoticz.log(interrupteur.." passe à "..etat,domoticz.LOG_DEBUG) domoticz.devices(interrupteur).dimTo(etat) elseif(levels~=nil)then --custom selector if(has_value(levels,etat))then --Etat demandé reconnu domoticz.log(interrupteur.." passe à "..etat.." niveau "..has_value(levels,etat),domoticz.LOG_DEBUG) domoticz.devices(interrupteur).switchSelector(has_value(levels,etat)) else domoticz.log(interrupteur.." ne passe pas à "..etat..". Etat custom inexistant.",domoticz.LOG_DEBUG) end else --Etat non reconnu domoticz.log(interrupteur.." ne passe pas à "..etat..". Etat inconnu.",domoticz.LOG_DEBUG) --commandArray[interrupteur]=etat end elseif(domoticz.devices(interrupteur)==nil and debutAction==maintenant)then --L'interrupteur n'existe pas, on affiche le pense-bête domoticz.log("Pense-bête : "..action) domoticz.devices(nomText).updateText(action) elseif(finAction==maintenant and action == domoticz.devices(nomText).text)then --L'action est terminée, on l'efface domoticz.devices(nomText).updateText(" ") 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 domoticz.log("Pense-bête : "..action) domoticz.devices(nomText).updateText(action) elseif(finAction==maintenant and action == domoticz.devices(nomText).text)then --L'action est terminée, on l'efface domoticz.devices(nomText).updateText(" ") end end end }
Re: calendrier google comme declencheur d'un interrupteur
Tu as quoi dans ton fichier /var/tmp/googlecal.txt ?
Re: calendrier google comme declencheur d'un interrupteur
le fichier est vide alors que le calendrier à des choses