merci pour cette aide précieuse
le fait d’écrire ce que l'on veut faire en langage "compréhensible" (comme ta réponse) ma beaucoup aider.
donc maintenant j'envoie bien sur ma table juste les changement d’état de la chaudière.
avec la doc de minimalmodbus , il y'a des exemples pour créer un driver spécifique.
le *.py du driver à importer dans le script
Code : Tout sélectionner
#!/usr/bin/env python
import minimalmodbus
class Froling( minimalmodbus.Instrument ):
def __init__(self, portname, slaveaddress):
minimalmodbus.Instrument.__init__(self, portname, slaveaddress)
#System- and Boiler State
#Function: Read Input Registers (FC=04)
#Address Range: 34001-34002
def p4_state(self):
"""34001 System state"""
return self.read_register(4001,0,04)
def system_state(self):
"""34001 System state"""
return seflf.read_register(4000,0,04)
#Digital Outputs
#Function: Read Coil Status (FC=01)
#Address Range: 00001-00158"""
def cir1(self):
"""Heating circuit pump 1"""
return selfread_bit(0,1)
def cir2(self):
"""Heating circuit pump 2"""
return self.read_bit(1,1)
def cir0(self):
"""Ecs circuit pump 0"""
return self.read_bit(8,1)
#Actual Values
#Function: Read Input Registers(FC=04)
#Address Range: 30001-30272"""
def Tp4(self):
scale=2
return self.read_register(0,0,04)/scale
def Tfume(self):
scale=1
return self.read_register(1,0,04)/scale
def o2r(self):
scale=10
return self.read_register(4,0,04)/scale
def Tex(self):
scale=2
return self.read_float(4,04,2)/scale
def fan_speed(self):
scale=1
return self.read_register(7,0,04)/scale
def Tc1(self):
scale=2
return self.read_register(21,0,04)/scale
def Cc1(self):
scale=2
return self.read_register(22,0,04)/scale
et le script
Code : Tout sélectionner
#!/usr/bin/env python
import froling
froling.CLOSE_PORT_AFTER_EACH_CALL = True
import serial
import time
import MySQLdb as mdb
p4 = froling.Froling('/dev/ttyUSB0', 1)
p4.debug = False
p4.serial.baudrate = 57600
p4.serial.bytesize = 8
p4.serial.parity = serial.PARITY_NONE
p4.serial.stopbits = 1
p4.serial.timeout = 0.5
def mdb_state():
con = mdb.connect(host="localhost",user="chris",passwd="xxxx",db="froling");
try:
cur = con.cursor()
cur.execute("""INSERT INTO samples(nom , valeur) VALUES(%s , %s)""", ('state_p4', p4.p4_state()))
con.commit()
finally:
if con:
con.close()
last_rec= {}
last_rec["state"] = p4.p4_state()
start = time.time()
mdb_state()
while p4.p4_state() != 5 :
Val_Registre=p4.p4_state()
if Val_Registre == last_rec.get("state"):
end = time.time()
print 'no state change since:', (end - start), 'last state:', last_rec.get("state")
time.sleep(60)
else:
start = time.time()
mdb_state()
print time.strftime("%H:%M:%S"), 'state change de:', last_rec.get("state"), 'a:', p4.p4_state()
last_rec["state"] = p4.p4_state()
time.sleep(15)
un ptit aperçue dans la console
no state change since: 0.163349866867 last state: 19
no state change since: 60.2425758839 last state: 19
no state change since: 120.302088022 last state: 19
no state change since: 180.364240885 last state: 19
no state change since: 240.438768864 last state: 19
no state change since: 300.517911911 last state: 19
13:44:05 state change de: 19 a: 7
no state change since: 15.1373958588 last state: 7
no state change since: 75.2105090618 last state: 7
no state change since: 135.272527933 last state: 7
13:47:20 state change de: 7 a: 2
no state change since: 15.1364610195 last state: 2
13:48:35 state change de: 2 a: 8
no state change since: 15.0895550251 last state: 8
no state change since: 75.1751000881 last state: 8
no state change since: 135.237360001 last state: 8
no state change since: 195.30065012 last state: 8
13:52:51 state change de: 8 a: 9
no state change since: 15.1329770088 last state: 9
13:54:06 state change de: 9 a: 3
no state change since: 15.0914077759 last state: 3
no state change since: 75.1783699989 last state: 3
encore merci