71 lines
1.8 KiB
Python
71 lines
1.8 KiB
Python
import time
|
|
|
|
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[-1] > 0:
|
|
# pub.sendMessage("turn_relay_on", relay_id=relay_id)
|
|
self.parent.turn_relay_on(relay_id)
|
|
else:
|
|
# pub.sendMessage("turn_relay_off",relay_id=relay_id)
|
|
self.parent.turn_relay_off(relay_id)
|
|
|
|
print ("message processed!")
|
|
|
|
|
|
class Model:
|
|
def __init__(self, modbus):
|
|
self.bus = None
|
|
self.notifier = None
|
|
self.printer = can.Printer()
|
|
self.listen_bms = BmsListener(modbus)
|
|
|
|
def start_can(self):
|
|
self.bus = can.Bus()
|
|
#self.notifier = can.Notifier(self.bus, [self.printer])
|
|
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(modbus)
|
|
|
|
canbus.start_can()
|
|
|
|
while True:
|
|
time.sleep(1)
|
|
# modbus.client.is_connected()
|