1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/usr/bin/env python3
- from serial import Serial
- from serial.serialutil import SerialException
- from umodbus.client.serial import rtu
- import umodbus
- from pprint import pprint
-
- from pyheatpump.conf import config
-
- serial_conn = None
-
- def connect():
- global serial_conn
-
- if serial_conn is None:
- print('Connecting to serial port *{}*'.format(
- config.get('heatpump', 'serial_port')))
- serial_conn = Serial(
- port=config.get('heatpump', 'serial_port'),
- baudrate=config.get('heatpump', 'baudrate'),
- bytesize=8,
- parity='N',
- stopbits=1)
-
- if serial_conn.open is False:
- print('Opening serial port')
- serial_conn.open()
-
- return serial_conn
-
- def read_coils(start, end):
- global serial_con
- connect()
- res = []
-
- try:
- for address in range(start, end + 1, 125):
- qty = 125 if (end - address) >= 125 else (end - address)
- if not qty:
- break
- print(start, end, address, qty)
- req_adu = rtu.read_coils(
- slave_id=1,
- starting_address=address,
- quantity=qty)
-
- resp = rtu.send_message(req_adu, serial_conn)
- res.extend(resp)
- except umodbus.exceptions.IllegalDataAddressError as e:
- print(e)
- return res
-
-
-
- def read_holding_registers(start, end):
- global serial_conn
- connect()
- res = []
-
- try:
- for address in range(start, end + 1, 125):
- qty = 125 if (end - address) >= 125 else (end - address)
- if not qty:
- break
- print(start, end, address, qty)
- req_adu = rtu.read_holding_registers(
- slave_id=1,
- starting_address=address,
- quantity=qty)
-
- resp = rtu.send_message(req_adu, serial_conn)
- res.extend(resp)
- except umodbus.exceptions.IllegalDataAddressError as e:
- print(e)
- return res
-
- if __name__ == '__main__':
- resp = read_holding_registers(1, 5000)
- #pprint(resp)
- print(len(resp))
- resp = read_coils(1, 2000)
- #pprint(resp)
- print(len(resp))
|