# -*- coding: cp1252 -*-
# (C) Fabrice Sincere
# python 2.7

# communication RS232 avec un thermomètre numérique à capteur numérique DS1620
# http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/thermometreLCD_DS1620htm/thermometreLCD_DS1620.htm

# test : OK (linux/ubuntu + winXP)

import time
import serial   # librairie externe pyserial

print 'Communication avec le port COM'

filename = 'temperature.txt'
print '\nFichier de sauvegarde : '+filename
Fichier = open(filename,'a')

# biblio pyserial :
# http://pyserial.sourceforge.net/shortintro.html
# http://pyserial.sourceforge.net/pyserial_api.html

Port = serial.Serial()

Port.baudrate = 9600
Port.bytesize=8
Port.parities=0
Port.stopbits=1
Port.xonxoff=0
Port.rtscts=0
Port.timeout=0.1 # en seconde

print """
# Sous Windows :
# COM1 -> 0 (ou COM1)
# COM2 -> 1 (ou COM2)

# Sous Linux :
# COM1 -> 0 (ou /dev/ttyS0)
# COM2 -> 1 (ou /dev/ttyS1)
"""

nomport = raw_input('Nom du port COM ? ')
try:
    int(nomport)
    Port.port = int(nomport)
except:
    Port.port = nomport

print 'Port ->',Port.portstr,'\n'

Port.open()

try:
    while True:
        # écriture
        Port.write('\xAA\x00\x00')

        # lecture
        MSB = Port.read() # octet de poids fort
        LSB = Port.read() # octet de poids faible

        if (MSB !='' and LSB != ''):
            temperature = ord(LSB) + 256* ord(MSB)
            if temperature >= 256:
                temperature = temperature - 512
            temperature *= 0.5
            affichage = time.strftime('%H:%M:%S',time.localtime()) + '  '+ str(temperature) +' °C'
            print affichage
            Fichier.write(affichage+'\n')

        # pause 1 seconde
        time.sleep(1.0)

except KeyboardInterrupt:
    # CTRL + C
    print "\nCTRL+C\nFermeture du port",Port.portstr
    Port.close()
    Fichier.close()

