webrelay-modbus/WebRelay.py

66 lines
No EOL
1.9 KiB
Python

import easymodbus.modbusClient
class WebRelay:
def __init__(self, n_relay=10):
self.n_relay = n_relay
self.relay_status = [False for i in range(self.n_relay)]
self.client = None
def __del__(self):
if self.client:
if self.client.is_connected():
self.client.close()
def apply_network_configs(self, nc_dict):
self.ip_address = nc_dict["ipaddr"]
self.port = nc_dict["port"]
self.uid = nc_dict["uid"]
def connect_slave(self):
if not self.client:
self.client = easymodbus.modbusClient.ModbusClient(self.ip_address, self.port)
self.client.unitidentifier = self.uid
self.client.connect()
else:
if not self.client.is_connected():
self.client = None
self.connect_slave()
def disconnect_slave(self):
if self.client:
self.client.close()
self.client = None
'''
def WriteSingleCoil(self, startingAddress, value)
Write single Coil to Server device (Function code 5)
startingAddress: Coil to be written
value: Coil Value to be written
def WriteMultipleCoils(self, startingAddress, values)
Write multiple coils to Server device (Function code 15)
startingAddress : First coil to be written
values: Coil Values [0..quantity-1] to be written
'''
def turn_relay_on(self, relay_id):
'''
:param relay_id: id of relay to turn on
:return: None
'''
self.check_write_single_coil(relay_id, True)
def turn_relay_off(self, relay_id):
'''
:param relay_id: id of relay to turn off
:return: None
'''
self.check_write_single_coil(relay_id, False)
def check_write_single_coil(self, relay_id, value):
if self.client:
if self.client.is_connected():
self.client.write_single_coil(relay_id, value)