From b67bb89479457da57944a7b8d15eb20cf53b9316 Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Mon, 28 Jan 2019 12:38:20 +0400 Subject: [PATCH 01/11] Parameters are moved to config file --- requirements.txt | 3 +++ sdm630.cfg | 8 ++++++++ test.py | 16 ++++++++++++++-- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 requirements.txt create mode 100644 sdm630.cfg diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..56d4931 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +serial +modbus_tk +configparser diff --git a/sdm630.cfg b/sdm630.cfg new file mode 100644 index 0000000..05a53cc --- /dev/null +++ b/sdm630.cfg @@ -0,0 +1,8 @@ +[SDM630] +PORT=/dev/tty.usbserial-1420 +BAUDRATE=9600 +BYTESIZE=8 +PARITY=N +STOPBITS=1 +XONXOFF=0 +DSRDTR=True diff --git a/test.py b/test.py index 85fea6d..8280483 100644 --- a/test.py +++ b/test.py @@ -11,6 +11,7 @@ import modbus_tk import modbus_tk.defines as cst from modbus_tk import modbus_rtu +import configparser def read_float(arrRegs): reg1 = arrRegs[1] @@ -32,17 +33,28 @@ def bcdDigits(chars): return yield val -PORT = '/dev/usbserial/sdm630' SLAVE = 1 def main(): """main""" logger = modbus_tk.utils.create_logger("console") + config = configparser.ConfigParser() + config.read('sdm630.cfg') + PORT=config['SDM630']['PORT'] + BAUDRATE=config['SDM630']['BAUDRATE'] + BYTESIZE=int(config['SDM630']['BYTESIZE']) + PARITY=config['SDM630']['PARITY'] + STOPBITS=bool(config['SDM630']['STOPBITS']) + XONXOFF=config['SDM630']['XONXOFF'] + DSRDTR=config['SDM630']['DSRDTR'] + STOPBITS=config['SDM630']['STOPBITS'] + + try: #Connect to the slave master = modbus_rtu.RtuMaster( - serial.Serial(port=PORT, baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0, dsrdtr=True) + serial.Serial(port=PORT, baudrate=BAUDRATE, bytesize=BYTESIZE, parity=PARITY, stopbits=1, xonxoff=XONXOFF, dsrdtr=DSRDTR) ) master.set_timeout(1.0) # master.set_verbose(True) From 6a0bb0ee61369821892df1d389dcadfba5e2114f Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Tue, 29 Jan 2019 22:03:20 +0400 Subject: [PATCH 02/11] RS485 implemantation --- requirements.txt | 2 ++ sdm630-mqtt.conf | 18 +++++++++++++++--- sdm630-mqtt.py | 28 +++++++++++++++++++++++----- sdm630.cfg | 2 +- sdm630.py | 41 +++++++++++++++++++++++++++++++++++------ test.py | 15 ++++++++------- 6 files changed, 84 insertions(+), 22 deletions(-) diff --git a/requirements.txt b/requirements.txt index 56d4931..a2ae8b7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ serial modbus_tk configparser +pymodbus +paho-mqtt diff --git a/sdm630-mqtt.conf b/sdm630-mqtt.conf index 548f728..4a8417b 100644 --- a/sdm630-mqtt.conf +++ b/sdm630-mqtt.conf @@ -1,12 +1,24 @@ [mqtt] -server=localhost +server=10.7.0.84 port=1883 keepalive=10 topic_prefix=/sdm630 [sdm630] -host=localhost -port=5002 regfile=registers.csv num_meters=1 id1=1 +connection_type=RS485 + +[tcp] +host=localhost +port=5002 + +[rs485] +PORT=/dev/tty.usbserial-1410 +BAUDRATE=9600 +BYTESIZE=8 +PARITY=N +STOPBITS=1 +XONXOFF=0 +DSRDTR=True diff --git a/sdm630-mqtt.py b/sdm630-mqtt.py index 19e25ea..8b1014c 100644 --- a/sdm630-mqtt.py +++ b/sdm630-mqtt.py @@ -28,7 +28,7 @@ def publish(topic,value): config = ConfigParser.ConfigParser() confread = config.read(CONFIG_FILE) logging.info("Read config {}".format(confread)) -logging.info("Opening port {}".format(config.get("sdm630","port"))) + logging.info("Connecting to MQTT server...") mqclient = mqtt.Client() @@ -45,11 +45,29 @@ def publish(topic,value): logging.info("Setup...") num_meters = config.getint("sdm630","num_meters") meters = [] +connection_type = config.get("sdm630", "connection_type") +regfile = config.get("sdm630", "regfile") + for i in range(num_meters): - meter = SDM630(config.get("sdm630","host"), - config.get("sdm630","port"), - config.getint("sdm630","id"+str(i+1)), - config.get("sdm630","regfile")) + + if connection_type == 'TCP': + logging.info("Opening port {}".format(config.get("tcp","port"))) + meter = SDM630(config.get("tcp","host"), + config.get("tcp","port"), + config.getint("sdm630","id"+str(i+1)), + regfile) + elif connection_type == 'RS485': + logging.info("Opening port {}".format(config.get("rs485","port"))) + meter = SDM630(config.get("rs485","PORT"), + config.getint("rs485","BAUDRATE"), + config.getint("rs485","BYTESIZE"), + config.get("rs485","PARITY"), + config.getint("rs485","STOPBITS"), + config.getint("rs485","XONXOFF"), + config.get("rs485","DSRDTR"), + config.getint("sdm630","id"+str(i+1)), + regfile) + meter.connect() meters.append(meter) diff --git a/sdm630.cfg b/sdm630.cfg index 05a53cc..58315d9 100644 --- a/sdm630.cfg +++ b/sdm630.cfg @@ -1,5 +1,5 @@ [SDM630] -PORT=/dev/tty.usbserial-1420 +PORT=/dev/tty.usbserial-1410 BAUDRATE=9600 BYTESIZE=8 PARITY=N diff --git a/sdm630.py b/sdm630.py index 027a07a..0e58836 100644 --- a/sdm630.py +++ b/sdm630.py @@ -3,25 +3,54 @@ from pymodbus.client.sync import ModbusTcpClient from pymodbus.payload import BinaryPayloadDecoder from pymodbus.constants import Endian + +import modbus_tk +import modbus_tk.defines as cst +from modbus_tk import modbus_rtu + import serial import time import csv class SDM630(object): + (TCP,RS485) = (0,1) + # connecting using tcp def __init__(self,host,port,aid,regfile): + self.connection_type = self.TCP + self.__fill_registers__(regfile) + self.aid = aid + self.host = host + self.port = port + + # connecting using serial port + def __init__(self,port, baudrate, bytesize, parity, stopbits, xonxoff, dsrdtr, aid, regfile): + self.connection_type = self.RS485 + self.__fill_registers__(regfile) + self.port = port + self.baudrate = baudrate + self.bytesize = bytesize + self.parity = parity + self.stopbits = stopbits + self.xonxoff = xonxoff + self.dsrdtr = dsrdtr + self.aid = aid + + + def __fill_registers__(self, regfile): self.registers = {} with open(regfile) as regs: reader = csv.reader(regs,delimiter=';') for line in reader: self.registers[line[1]] = int(line[0],base=16) - self.aid = aid - self.host = host - self.port = port + def connect(self): - self.master = ModbusTcpClient(host=self.host,port=self.port) -# self.master.set_timeout(1.0) -# self.master.set_verbose(True) + if (self.connection_type == self.TCP): + self.master = ModbusTcpClient(host=self.host,port=self.port) + elif (self.connection_type == self.RS485): + self.master = modbus_rtu.RtuMaster(serial.Serial(self.port, self.baudrate, self.bytesize, self.parity, self.stopbits, self.xonxoff, self.dsrdtr)) + self.master.set_timeout(1.0) + #self.master.set_verbose(True) def __getattr__(self,attr): diff --git a/test.py b/test.py index 8280483..26f074b 100644 --- a/test.py +++ b/test.py @@ -41,15 +41,16 @@ def main(): config = configparser.ConfigParser() config.read('sdm630.cfg') - PORT=config['SDM630']['PORT'] - BAUDRATE=config['SDM630']['BAUDRATE'] - BYTESIZE=int(config['SDM630']['BYTESIZE']) - PARITY=config['SDM630']['PARITY'] - STOPBITS=bool(config['SDM630']['STOPBITS']) - XONXOFF=config['SDM630']['XONXOFF'] - DSRDTR=config['SDM630']['DSRDTR'] + PORT=config.get('SDM630','PORT') + BAUDRATE=config.get('SDM630','BAUDRATE') + BYTESIZE=int(config.get('SDM630','BYTESIZE')) + PARITY=config.get('SDM630','PARITY') + STOPBITS=config.get('SDM630','STOPBITS') + XONXOFF=config.get('SDM630','XONXOFF') + DSRDTR=config.get('SDM630','DSRDTR') STOPBITS=config['SDM630']['STOPBITS'] + print(STOPBITS) try: #Connect to the slave From 3f02aee9e75b8216783c4e370bb1f408a98b3931 Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Tue, 29 Jan 2019 23:42:37 +0400 Subject: [PATCH 03/11] Finish rs485 implementation, test.py use the same config file --- sdm630-mqtt.py | 2 +- sdm630.cfg | 8 -------- sdm630.py | 5 +++-- test.py | 20 +++++++++----------- 4 files changed, 13 insertions(+), 22 deletions(-) mode change 100644 => 100755 sdm630-mqtt.py delete mode 100644 sdm630.cfg mode change 100644 => 100755 test.py diff --git a/sdm630-mqtt.py b/sdm630-mqtt.py old mode 100644 new mode 100755 index 8b1014c..9a67db0 --- a/sdm630-mqtt.py +++ b/sdm630-mqtt.py @@ -102,4 +102,4 @@ def publish(topic,value): publish(str(num)+"/wh/import",sdm630.import_wh) publish(str(num)+"/wh/export",sdm630.export_wh) publish(str(num)+"/time",time.time()) - time.sleep(0.5) + time.sleep(5) diff --git a/sdm630.cfg b/sdm630.cfg deleted file mode 100644 index 58315d9..0000000 --- a/sdm630.cfg +++ /dev/null @@ -1,8 +0,0 @@ -[SDM630] -PORT=/dev/tty.usbserial-1410 -BAUDRATE=9600 -BYTESIZE=8 -PARITY=N -STOPBITS=1 -XONXOFF=0 -DSRDTR=True diff --git a/sdm630.py b/sdm630.py index 0e58836..94e24b6 100644 --- a/sdm630.py +++ b/sdm630.py @@ -1,6 +1,7 @@ # -*- coding: utf_8 -*- from pymodbus.client.sync import ModbusTcpClient +from pymodbus.client.sync import ModbusSerialClient from pymodbus.payload import BinaryPayloadDecoder from pymodbus.constants import Endian @@ -48,8 +49,8 @@ def connect(self): if (self.connection_type == self.TCP): self.master = ModbusTcpClient(host=self.host,port=self.port) elif (self.connection_type == self.RS485): - self.master = modbus_rtu.RtuMaster(serial.Serial(self.port, self.baudrate, self.bytesize, self.parity, self.stopbits, self.xonxoff, self.dsrdtr)) - self.master.set_timeout(1.0) + self.master = ModbusSerialClient("rtu", port=self.port, baudrate=self.baudrate, timeout=1) + #self.master.set_timeout(1.0) #self.master.set_verbose(True) diff --git a/test.py b/test.py old mode 100644 new mode 100755 index 26f074b..1ea84aa --- a/test.py +++ b/test.py @@ -40,17 +40,15 @@ def main(): logger = modbus_tk.utils.create_logger("console") config = configparser.ConfigParser() - config.read('sdm630.cfg') - PORT=config.get('SDM630','PORT') - BAUDRATE=config.get('SDM630','BAUDRATE') - BYTESIZE=int(config.get('SDM630','BYTESIZE')) - PARITY=config.get('SDM630','PARITY') - STOPBITS=config.get('SDM630','STOPBITS') - XONXOFF=config.get('SDM630','XONXOFF') - DSRDTR=config.get('SDM630','DSRDTR') - STOPBITS=config['SDM630']['STOPBITS'] - - print(STOPBITS) + config.read('sdm630-mqtt.conf') + rs485 = config['rs485'] + PORT=rs485.get('PORT') + BAUDRATE=rs485.getint('BAUDRATE', 9600) + BYTESIZE=rs485.getint('BYTESIZE', 8) + PARITY=rs485.get('PARITY', 'N') + STOPBITS=rs485.getint('STOPBITS', 1) + XONXOFF=rs485.getint('XONXOFF', 0) + DSRDTR=rs485.getboolean('DSRDTR', True) try: #Connect to the slave From 8c4abdab64db0974a2631b5fff6c2c7688db8204 Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Tue, 29 Jan 2019 23:43:50 +0400 Subject: [PATCH 04/11] Default values are used for serial port connection, unused variables are removed from config file --- sdm630-mqtt.conf | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sdm630-mqtt.conf b/sdm630-mqtt.conf index 4a8417b..4b56add 100644 --- a/sdm630-mqtt.conf +++ b/sdm630-mqtt.conf @@ -17,8 +17,3 @@ port=5002 [rs485] PORT=/dev/tty.usbserial-1410 BAUDRATE=9600 -BYTESIZE=8 -PARITY=N -STOPBITS=1 -XONXOFF=0 -DSRDTR=True From 3dc581de7063a2954e93861ab1cd5e878329d3d1 Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Tue, 29 Jan 2019 23:47:24 +0400 Subject: [PATCH 05/11] Unused parameters of serial connections are removed from code --- sdm630-mqtt.py | 5 ----- sdm630.py | 7 +------ 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/sdm630-mqtt.py b/sdm630-mqtt.py index 9a67db0..7c21a61 100755 --- a/sdm630-mqtt.py +++ b/sdm630-mqtt.py @@ -60,11 +60,6 @@ def publish(topic,value): logging.info("Opening port {}".format(config.get("rs485","port"))) meter = SDM630(config.get("rs485","PORT"), config.getint("rs485","BAUDRATE"), - config.getint("rs485","BYTESIZE"), - config.get("rs485","PARITY"), - config.getint("rs485","STOPBITS"), - config.getint("rs485","XONXOFF"), - config.get("rs485","DSRDTR"), config.getint("sdm630","id"+str(i+1)), regfile) diff --git a/sdm630.py b/sdm630.py index 94e24b6..1df4a1a 100644 --- a/sdm630.py +++ b/sdm630.py @@ -24,16 +24,11 @@ def __init__(self,host,port,aid,regfile): self.port = port # connecting using serial port - def __init__(self,port, baudrate, bytesize, parity, stopbits, xonxoff, dsrdtr, aid, regfile): + def __init__(self,port, baudrate, aid, regfile): self.connection_type = self.RS485 self.__fill_registers__(regfile) self.port = port self.baudrate = baudrate - self.bytesize = bytesize - self.parity = parity - self.stopbits = stopbits - self.xonxoff = xonxoff - self.dsrdtr = dsrdtr self.aid = aid From 7848e6e3f2667d15e3545e70885aa46bdf6b170f Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Tue, 29 Jan 2019 23:52:35 +0400 Subject: [PATCH 06/11] Default values for config file are returned back --- sdm630-mqtt.conf | 4 ++-- sdm630-mqtt.py | 4 ++-- sdm630.py | 4 ---- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/sdm630-mqtt.conf b/sdm630-mqtt.conf index 4b56add..bb76b77 100644 --- a/sdm630-mqtt.conf +++ b/sdm630-mqtt.conf @@ -1,5 +1,5 @@ [mqtt] -server=10.7.0.84 +server=localhost port=1883 keepalive=10 topic_prefix=/sdm630 @@ -8,7 +8,7 @@ topic_prefix=/sdm630 regfile=registers.csv num_meters=1 id1=1 -connection_type=RS485 +connection_type=rs485 [tcp] host=localhost diff --git a/sdm630-mqtt.py b/sdm630-mqtt.py index 7c21a61..c7f99c6 100755 --- a/sdm630-mqtt.py +++ b/sdm630-mqtt.py @@ -50,13 +50,13 @@ def publish(topic,value): for i in range(num_meters): - if connection_type == 'TCP': + if connection_type == 'tcp': logging.info("Opening port {}".format(config.get("tcp","port"))) meter = SDM630(config.get("tcp","host"), config.get("tcp","port"), config.getint("sdm630","id"+str(i+1)), regfile) - elif connection_type == 'RS485': + elif connection_type == 'rs485': logging.info("Opening port {}".format(config.get("rs485","port"))) meter = SDM630(config.get("rs485","PORT"), config.getint("rs485","BAUDRATE"), diff --git a/sdm630.py b/sdm630.py index 1df4a1a..96bbd25 100644 --- a/sdm630.py +++ b/sdm630.py @@ -5,10 +5,6 @@ from pymodbus.payload import BinaryPayloadDecoder from pymodbus.constants import Endian -import modbus_tk -import modbus_tk.defines as cst -from modbus_tk import modbus_rtu - import serial import time import csv From f1bf2e8ed9f97281d25e80fda556cb2c2b2b4189 Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Wed, 30 Jan 2019 00:22:35 +0400 Subject: [PATCH 07/11] Divided into several classes --- sdm630-mqtt.py | 17 +++++++---------- sdm630.py | 52 +++++++++++++++++++++++++------------------------- 2 files changed, 33 insertions(+), 36 deletions(-) diff --git a/sdm630-mqtt.py b/sdm630-mqtt.py index c7f99c6..6bce711 100755 --- a/sdm630-mqtt.py +++ b/sdm630-mqtt.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf_8 -*- -from sdm630 import SDM630 +from sdm630 import * import sys import serial @@ -46,24 +46,21 @@ def publish(topic,value): num_meters = config.getint("sdm630","num_meters") meters = [] connection_type = config.get("sdm630", "connection_type") -regfile = config.get("sdm630", "regfile") for i in range(num_meters): - if connection_type == 'tcp': logging.info("Opening port {}".format(config.get("tcp","port"))) - meter = SDM630(config.get("tcp","host"), - config.get("tcp","port"), - config.getint("sdm630","id"+str(i+1)), - regfile) + meter = SDM630TCP(host=config.get("tcp","host"), + port=config.get("tcp","port"), + aid=config.getint("sdm630","id"+str(i+1)), + regfile=config.get("sdm630", "regfile")) elif connection_type == 'rs485': logging.info("Opening port {}".format(config.get("rs485","port"))) - meter = SDM630(config.get("rs485","PORT"), + meter = SDM630RS485(config.get("rs485","PORT"), config.getint("rs485","BAUDRATE"), config.getint("sdm630","id"+str(i+1)), - regfile) + regfile=config.get("sdm630", "regfile")) - meter.connect() meters.append(meter) logging.info("Entering endless loop") diff --git a/sdm630.py b/sdm630.py index 96bbd25..1f206a6 100644 --- a/sdm630.py +++ b/sdm630.py @@ -10,24 +10,9 @@ import csv class SDM630(object): - (TCP,RS485) = (0,1) - # connecting using tcp - def __init__(self,host,port,aid,regfile): - self.connection_type = self.TCP - self.__fill_registers__(regfile) - self.aid = aid - self.host = host - self.port = port - - # connecting using serial port - def __init__(self,port, baudrate, aid, regfile): - self.connection_type = self.RS485 + def __init__(self, regfile): self.__fill_registers__(regfile) - self.port = port - self.baudrate = baudrate - self.aid = aid - - + def __fill_registers__(self, regfile): self.registers = {} with open(regfile) as regs: @@ -35,15 +20,6 @@ def __fill_registers__(self, regfile): for line in reader: self.registers[line[1]] = int(line[0],base=16) - - def connect(self): - if (self.connection_type == self.TCP): - self.master = ModbusTcpClient(host=self.host,port=self.port) - elif (self.connection_type == self.RS485): - self.master = ModbusSerialClient("rtu", port=self.port, baudrate=self.baudrate, timeout=1) - #self.master.set_timeout(1.0) - #self.master.set_verbose(True) - def __getattr__(self,attr): if attr == "voltx3": @@ -67,3 +43,27 @@ def read_registers(self,addr,count): return decoder.decode_32bit_float() return tuple(decoder.decode_32bit_float() for _ in range(count)) +# connecting using tcp +class SDM630TCP(SDM630): + def __init__(self,host,port,aid,regfile): + SDM630.__init__(self,regfile) + + self.aid = aid + self.host = host + self.port = port + + self.master = ModbusTcpClient(host=self.host,port=self.port) + + +# connecting using serial port +class SDM630RS485(SDM630): + def __init__(self, port, baudrate, aid, regfile): + SDM630.__init__(self,regfile) + + self.port = port + self.baudrate = baudrate + self.aid = aid + + self.master = ModbusSerialClient("rtu", port=self.port, baudrate=self.baudrate, timeout=1) + + From 5061406c26715f3ca2987d155adcea95cfecebfa Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Wed, 30 Jan 2019 00:23:42 +0400 Subject: [PATCH 08/11] Original port is returned back --- sdm630-mqtt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdm630-mqtt.conf b/sdm630-mqtt.conf index bb76b77..0026857 100644 --- a/sdm630-mqtt.conf +++ b/sdm630-mqtt.conf @@ -15,5 +15,5 @@ host=localhost port=5002 [rs485] -PORT=/dev/tty.usbserial-1410 +PORT=/dev/usbserial/sdm630 BAUDRATE=9600 From 248f3d02172f1d90529582e1abb53bbd4e44e552 Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Wed, 30 Jan 2019 00:25:32 +0400 Subject: [PATCH 09/11] Original settings are returned back to config --- sdm630-mqtt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdm630-mqtt.conf b/sdm630-mqtt.conf index 0026857..2e058fe 100644 --- a/sdm630-mqtt.conf +++ b/sdm630-mqtt.conf @@ -8,7 +8,7 @@ topic_prefix=/sdm630 regfile=registers.csv num_meters=1 id1=1 -connection_type=rs485 +connection_type=tcp [tcp] host=localhost From 1b88e5f43d1a0b32cd859f69c2a2cd71f0d6ea07 Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Wed, 30 Jan 2019 00:27:11 +0400 Subject: [PATCH 10/11] back to origins --- sdm630-mqtt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdm630-mqtt.py b/sdm630-mqtt.py index 6bce711..e95cb74 100755 --- a/sdm630-mqtt.py +++ b/sdm630-mqtt.py @@ -94,4 +94,4 @@ def publish(topic,value): publish(str(num)+"/wh/import",sdm630.import_wh) publish(str(num)+"/wh/export",sdm630.export_wh) publish(str(num)+"/time",time.time()) - time.sleep(5) + time.sleep(0.5) From 90df5653edff27ea5c5bb60a0e5ad95c5d05e9f7 Mon Sep 17 00:00:00 2001 From: Eugene Horohorin Date: Wed, 30 Jan 2019 00:31:08 +0400 Subject: [PATCH 11/11] Option -c is added to test.py --- test.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test.py b/test.py index 1ea84aa..1106b06 100755 --- a/test.py +++ b/test.py @@ -8,6 +8,7 @@ from struct import * import serial +import sys import modbus_tk import modbus_tk.defines as cst from modbus_tk import modbus_rtu @@ -39,8 +40,12 @@ def main(): """main""" logger = modbus_tk.utils.create_logger("console") + CONFIG_FILE = 'sdm630-mqtt.conf' + if ((len(sys.argv) == 3) and sys.argv[1] == '-c'): + CONFIG_FILE = sys.argv[2] + config = configparser.ConfigParser() - config.read('sdm630-mqtt.conf') + config.read(CONFIG_FILE) rs485 = config['rs485'] PORT=rs485.get('PORT') BAUDRATE=rs485.getint('BAUDRATE', 9600) @@ -53,7 +58,7 @@ def main(): try: #Connect to the slave master = modbus_rtu.RtuMaster( - serial.Serial(port=PORT, baudrate=BAUDRATE, bytesize=BYTESIZE, parity=PARITY, stopbits=1, xonxoff=XONXOFF, dsrdtr=DSRDTR) + serial.Serial(port=PORT, baudrate=BAUDRATE, bytesize=BYTESIZE, parity=PARITY, stopbits=STOPBITS, xonxoff=XONXOFF, dsrdtr=DSRDTR) ) master.set_timeout(1.0) # master.set_verbose(True)