#!/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()







