#=========================================================================
# Dependencies / Libraries
#=========================================================================
import time
import serial
import MySQLdb
import subprocess
from time import sleep
import datetime
#=========================================================================
# Fonction Tableau/Dictionnaire
#=========================================================================
def checksum (etiquette, valeur):
    sum = 32
    for c in etiquette: sum = sum + ord(c)
    for c in valeur: sum = sum + ord(c)
    sum = (sum & 63) + 32
    return chr(sum)
#=========================================================================
# Fonction LireTeleinfo
#=========================================================================
def ReadTeleinfo ():
    # Attendre le debut du message
    while ser.read(1) != chr(2): pass

    message = ""
    fin = False
    
    while not fin:
        char = ser.read(1)
        if char != chr(2):
            message = message + char
        else:
            fin = True
    
    trames = [
        trame.split(" ")
        for trame in message.strip("\r\n\x03").split("\r\n")
        ]
            
    tramesValides = dict([
        [trame[0],trame[1]]
        for trame in trames
        if (len(trame) == 3) and (checksum(trame[0],trame[1]) == trame[2])
        ])
            
    return tramesValides
# print('Lecture des trames Teleinformation avec la carte RPIDOM') 
#=========================================================================
# Connexion au port
#=========================================================================
ser = serial.Serial(
    port='/dev/ttyAMA0',
    baudrate=1200,
    parity=serial.PARITY_EVEN,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.SEVENBITS )
#=========================================================================
# Definition variables de trame et chargement d'une valeur initiale
#=========================================================================
vIINST = 0 
vMOTDETAT = 0
vOPTARIF = 0
vISOUSC = 0
vADCO = 0
vPAPP = 0
vIMAX = 0
vBASE = 0
vADPS = 0
#=========================================================================
# Read serial data
#=========================================================================
#print '\nPremiere voie'
ser.write('A')
sleep(1)
ser.flushInput()
tramesOk = ReadTeleinfo()
trouve = False
for etiquette in tramesOk:
    if etiquette == 'IINST':
        #print etiquette , ":", tramesOk[etiquette]
        vIINST = tramesOk[etiquette]
    if etiquette ==  'MOTDETAT':
        #print etiquette , ":", tramesOk[etiquette]
        vMOTDETAT = tramesOk[etiquette]
    if etiquette ==  'OPTARIF':
        #print etiquette , ":", tramesOk[etiquette]
        vOPTARIF = tramesOk[etiquette]
    if etiquette ==  'ISOUSC':
        #print etiquette , ":", tramesOk[etiquette]
        vISOUSC = tramesOk[etiquette]
    if etiquette ==  'ADCO':
        #print etiquette , ":", tramesOk[etiquette]
        vADCO = tramesOk[etiquette]
    if etiquette ==  'PAPP':
        #print etiquette , ":", tramesOk[etiquette]
        vPAPP = tramesOk[etiquette]
    if etiquette ==  'IMAX':
        #print etiquette , ":", tramesOk[etiquette]
        vIMAX = tramesOk[etiquette]
    if etiquette ==  'BASE':
        #print etiquette , ":", tramesOk[etiquette]
        vBASE = tramesOk[etiquette]
    if etiquette ==  'ADPS':
        #print etiquette , ":", tramesOk[etiquette]
        vADPS = tramesOk[etiquette]    
#=========================================================================
# Date and Hour
#=========================================================================
vHEURE = datetime.datetime.now().strftime('%H:%M')
vDATE = datetime.datetime.today().strftime('%Y-%m-%d')
#=========================================================================
# Connect and insert into DB
#=========================================================================
db = MySQLdb.connect(host="192.168.1.250",port=3307,user="root",passwd="MariaQiou",db="edf" )
cursor = db.cursor()
if vBASE > 0:
    cursor.execute("""INSERT INTO teleinfo(DATE, HEURE, IINST, MOTDETAT, OPTARIF, ISOUSC, ADCO, PAPP, IMAX, BASE, ADPS) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""" ,(vDATE, vHEURE, vIINST, vMOTDETAT, vOPTARIF, vISOUSC, vADCO, vPAPP, vIMAX, vBASE, vADPS))
# Write into DB
db.commit()
db.rollback()
db.close()
#=========================================================================    
ser.close()
