webrelay-modbus/c2m.py

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)