60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
import can
|
|
import cantools
|
|
|
|
from pubsub import pub
|
|
|
|
from WebRelay import WebRelay
|
|
|
|
|
|
class BmsListener (can.Listener):
|
|
def __init__(self, parent):
|
|
self.parent = parent
|
|
|
|
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 > 0:
|
|
pub.sendMessage("turn_relay_on", relay_id=relay_id)
|
|
else:
|
|
pub.sendMessage("turn_relay_off",relay_id=relay_id)
|
|
|
|
|
|
class Model:
|
|
def __init__(self):
|
|
self.bus = None
|
|
self.notifier = None
|
|
self.printer = can.Printer()
|
|
self.listen_bms = BmsListener(self)
|
|
|
|
def start_can(self):
|
|
self.bus = can.Bus()
|
|
self.notifier = can.Notifier(self.bus, [self.printer, self.listen_bms])
|
|
|
|
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()
|
|
|
|
pub.subscribe(modbus.turn_relay_on, "turn_relay_on")
|
|
pub.subscribe(modbus.turn_relay_off, "turn_relay_off")
|
|
|
|
canbus = Model()
|
|
|
|
canbus.start_can()
|