first commit
This commit is contained in:
148
cal_action.py
Normal file
148
cal_action.py
Normal file
@@ -0,0 +1,148 @@
|
||||
#!/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()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user