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)