62 lines
1.4 KiB
Python
62 lines
1.4 KiB
Python
import time
|
|
|
|
import can
|
|
import cantools
|
|
|
|
from pubsub import pub
|
|
|
|
from WebRelay import WebRelay
|
|
|
|
|
|
class CanToModbus (can.Listener):
|
|
def __init__(self, modbus_client):
|
|
self.modbus_client = modbus_client
|
|
|
|
def on_message_received(self, msg):
|
|
relay_id = msg.arbitration_id
|
|
relay_state = msg.data
|
|
print (relay_id, relay_state)
|
|
if relay_id < 10:
|
|
if relay_state[-1] > 0:
|
|
self.modbus_client.turn_relay_on(relay_id)
|
|
else:
|
|
self.modbus_client.turn_relay_off(relay_id)
|
|
|
|
|
|
class PmgrowBms:
|
|
def __init__(self, add_printer=True):
|
|
self.bus = None
|
|
self.notifier = None
|
|
self.listeners = [can.Printer()] if add_printer else []
|
|
|
|
def start_can(self):
|
|
self.bus = can.Bus()
|
|
self.notifier = can.Notifier(self.bus, self.listeners)
|
|
|
|
def stop_can(self):
|
|
self.notifier.stop()
|
|
self.bus.shutdown()
|
|
self.notifier = None
|
|
self.bus = None
|
|
|
|
def process_message(self, msg):
|
|
pass
|
|
|
|
|
|
if __name__ == "__main__":
|
|
nc_dict = dict()
|
|
nc_dict["ipaddr"] = "192.168.1.2"
|
|
nc_dict["port"] = 502
|
|
nc_dict["uid"] = 240
|
|
|
|
modbus = WebRelay()
|
|
modbus.apply_network_configs(nc_dict)
|
|
modbus.connect_slave()
|
|
|
|
canbus = PmgrowBms(modbus)
|
|
canbus.listeners.append(CanToModbus(modbus))
|
|
|
|
canbus.start_can()
|
|
|
|
while True:
|
|
time.sleep(1)
|