Пытаюсь подключиться к CAN-шине своего автомобиля. Соединение работает, и данные печатаются на терминал без проблем.
bus = can.interface.Bus("can0", bustype="socketcan")
notifier = can.Notifier(bus, [can.Printer()])
Я использую Pyhton Can 2.2 и Python 3.7.
Я хочу добавить нового слушателя с каким-то оператором switch-case в файле can.dlc. Будет ли приведенный ниже псевдокод лучшим способом сделать это?
import can
def parse_data(can):
SingleCanFrame = can.Message
print(SingleCanFrame)
if SingleCanFrame.arbitration_id == 304: #car voltage
#convert data
#save to DB table 1
elif SingleCanFrame.arbitration_id == 400: #car speed
#convert data
#save to DB table 2
elif SingleCanFrame.arbitration_id == 401: #car tachometer
#convert data
#save to DB table 3
else:
#save to DB errorlog
bus = can.interface.Bus("can0", bustype="socketcan")
notifier = can.Notifier(bus, [parse_data(can)])
Редактировать 1:
забыл параметр: def parse_data(can)
Редактировать 2:
Новый код
import can
CAR = {"voltage": 304, "speed": 400, "tachometer": 401}
def cellvoltage(SingleCanFrame, MyDB):
#convert data
#save to DB table 1
def packcurrent(SingleCanFrame, MyDB):
#convert data
#save to DB table 2
def tachometer(SingleCanFrame, MyDB):
#convert data
#save to DB table 3
def parse_data(can):
SingleCanFrame = can.Message
MyDB = SomeDB.Connect()
print(SingleCanFrame)
if SingleCanFrame.arbitration_id == CAR["voltage"]: #car voltage
cellvoltage(SingleCanFrame, MyDB)
elif SingleCanFrame.arbitration_id == CAR["speed"]: #car speed
packcurrent(SingleCanFrame, MyDB)
elif SingleCanFrame.arbitration_id == CAR["tachometer"]: #car tachometer
tachometer(SingleCanFrame, MyDB)
else:
#save to DB errorlog
bus = can.interface.Bus("can0", bustype="socketcan")
notifier = can.Notifier(bus, [parse_data(can)])