149 lines
4.2 KiB
Python
149 lines
4.2 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
# il faut le module requests
|
|
# sudo pip install requests
|
|
|
|
|
|
# on lit le fichier genere par getgoovlecal.py
|
|
# dans le calendrier google on fait soit
|
|
# idx=etat (14=On ou 44=Off)
|
|
#
|
|
# ou idx1;idx2;idx3=etat
|
|
# 25/01/15 correction pour mode debug qui lance la cde alors que le mode ss debug non
|
|
# 25/01/15 mode auth pour identification Domoticz
|
|
|
|
|
|
|
|
import time
|
|
import os
|
|
import requests
|
|
from requests.auth import HTTPBasicAuth
|
|
import csv
|
|
from collections import namedtuple
|
|
from datetime import datetime
|
|
|
|
############# Parametres #################################
|
|
|
|
# fichier et chemin pour agenda
|
|
rep="/var/tmp/"
|
|
file="googlecal.txt"
|
|
|
|
# seuil pour declemecnhemnt des actions
|
|
# c'est la tolerance autour de l'heure prevue par rapport a l'heure exacte
|
|
# cest a dire que X secondes AVANT l heure prevue on declenche
|
|
seuil=10
|
|
|
|
#a cause du declenchelent de crontab qui a lieu entre 0 et 5sec apres l'heure prevue
|
|
# un crontab programme toutes les minutes peut se declencher a 1min0sec, 1min1sec ,1min2sec ... 1min5sec
|
|
# donc on gere un seuil de X secondes APRES l'heure prevue
|
|
# si declenchement tt les minutes dans crontab
|
|
# si le seuil est a 10 sec
|
|
# l'action pourra se declencher 1O secondes avant
|
|
# et si c'est croontab qui declcenche on laisse 10 secondes APRES
|
|
|
|
|
|
#debug = 1 on affiche les chaines de caracteres recues
|
|
debug=1
|
|
|
|
|
|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
# les parametres de Domoticz
|
|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
domoticz_ip='localhost'
|
|
domoticz_port='81'
|
|
user='souti'
|
|
password='setaou'
|
|
|
|
# l URL Domoticz est construite dans maj_switch pour allumer/eteidndre
|
|
# avec les bouts ci dessous
|
|
json_url1='/json.htm?type=command¶m=switchlight&idx='
|
|
json_url2='&switchcmd='
|
|
json_url3='&level=0'
|
|
|
|
# fin du parametrage #
|
|
############### fin des parametres #############################
|
|
|
|
def maj_switch(idx,etat):
|
|
|
|
#/json.htm?type=command¶m=switchlight&idx=&switchcmd=&level=0
|
|
|
|
requete='http://'+domoticz_ip+':'+domoticz_port+json_url1+idx+json_url2+etat+json_url3
|
|
r=requests.get (requete,auth=HTTPBasicAuth(user,password))
|
|
if debug!=0:
|
|
print "______________________________________________________________"
|
|
print ""
|
|
print ("URL= :",requete)
|
|
print (" le serveur Domoticz dit : ",r)
|
|
print ""
|
|
print "###############################################################"
|
|
|
|
def debugmode():
|
|
print ""
|
|
print "###############################################################"
|
|
print ""
|
|
print ("le fichier dit que l'action ",r.action,"debute a ",r.heuredeb,"le :",r.datedeb)
|
|
print ("heure declenchement ",heure_action)
|
|
print ("il est ",present)
|
|
print ("difference en secondes",diffsecondes)
|
|
print ""
|
|
print ""
|
|
|
|
# main #
|
|
|
|
reader = csv.reader(open(rep+file),delimiter='\t')
|
|
rec=namedtuple('rec','datedeb heuredeb datefin heurefin action')
|
|
|
|
for r in map(rec._make,reader):
|
|
date_action=r.datedeb+" "+r.heuredeb
|
|
heure_action= datetime.strptime(date_action,"%Y-%m-%d %H:%M")
|
|
present=datetime.now()
|
|
diffsecondes=(heure_action-present).seconds
|
|
# diffsecondes=4
|
|
if (diffsecondes < seuil or (diffsecondes> 86400-seuil and diffsecondes <86400)):
|
|
if debug!=0:
|
|
debugmode()
|
|
todo=r.action.split("=")
|
|
idx=todo[0]
|
|
etat=todo[1].capitalize()
|
|
|
|
if ";" in idx:
|
|
#print "multiples idx"
|
|
midx=idx.split(";")
|
|
for each_idx in midx:
|
|
print (" IDX : ",each_idx)
|
|
if (etat=="On" or etat=="Off"):
|
|
if debug!=0:
|
|
print ""
|
|
print "ok actions a faire"
|
|
print ("idx=",each_idx)
|
|
print ("etat=",etat)
|
|
print ""
|
|
|
|
maj_switch(each_idx,etat)
|
|
|
|
else:
|
|
if (etat=="On" or etat=="Off"):
|
|
if debug!=0:
|
|
print ""
|
|
print "ok actions a faire"
|
|
print ("idx=",idx)
|
|
print ("etat=",etat)
|
|
print ""
|
|
|
|
maj_switch(idx,etat)
|
|
|
|
else:
|
|
if debug!=0:
|
|
print "Rien a faire /nothing to do/wir haben nichts damit zu tun"
|
|
debugmode()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|