#!/usr/bin/python
#
# _example_(!) python program for eibcontrol communication
# (c) 2006 Frank Scholz, dev * netzflocken . de
#
# eib_sendtime.py -a 0/0/40 
#
# 20060425: initial version 0.1
#

import sys
import getopt
import socket
import string
import time
import struct

HomeServer        =       '127.0.0.1'
HomeServerPort    =       8081 
EIBaddress        =       (0,0,40)

write_request = """<eib type="write" path="/eib/groups/%d/%d/%d/curvalue" data="%ld"/>\n"""

def eib_set( server, port, address, value):
    result=""
    state="false"
    s=socket.socket( socket.AF_INET, socket.SOCK_STREAM)
    s.connect( (server, port))
    request = write_request % ( address[0], address[1], address[2], value)
    #print request
    s.send( request)
    result = s.recv( 1024)
    #print result
    s.close()
    if( string.find( result, "state=\"true\"") != -1):
        state="true"
        result=result[ string.find( result, "data=\"")+6:]
        state=result[ 0 : string.find( result, "\"")]
    return( state)

def eis3_build( day, hour, minute, second):
    if day not in range(8):
        day = 0
    if hour not in range(24):
        hour = 0
    if minute not in range(60):
        minute = 0
    if second not in range(60):
        second = 0
    r = day<<21|hour<<16|minute<<8|second
    #print r
    return struct.unpack("L", struct.pack("!L", r))[0]>>8


try:
        optlist, args = getopt.getopt(sys.argv[1:], "a:p:s:", ['address=','server=','port='])
except getopt.error, message:
        sys.stderr.write(message+'\n')
        sys.exit(1)

for option, param in optlist:
        if option in ('-a', '--address'): EIBaddress=string.split(param,'/',2)
        if option in ('-p', '--port'): HomeServerPort=atoi(param)
        if option in ('-s', '--server'): HomeServer=param

t = time.localtime(time.time())
#print t
value = eis3_build( t[6]+1, t[3], t[4], t[5])
eib_set( HomeServer, HomeServerPort, EIBaddress, value)
