Files
Domoticz/cal_action.py
2025-03-06 11:09:58 +01:00

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&param=switchlight&idx='
json_url2='&switchcmd='
json_url3='&level=0'
# fin du parametrage #
############### fin des parametres #############################
def maj_switch(idx,etat):
#/json.htm?type=command&param=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()