ich habe am Pi ein HAT mit 2 Bus Channels (can0 und can1). Die Konfiguration passt soweit.
Ich will einen bestehenden CAN-Bus zwischen 2 Knoten auftrennen, die eine Seite hängt an can0, die andere an can1.
Vorerst, sollten einfach alle Nachrichten stur durchgeschliffen werden, also wie wenn die Trennung nicht da wäre. In einem späteren Schritt möchte ich gezielt CAN-Ids manipulieren.
Jetzt die eigentliche Frage, ich weiß nicht wie ich dem notifier die Funktion parser_can0 bzw. 1 übergeben kann? Ich versteh das Konstrukt nicht wirklich.
Wie kann ich eine Funktion definieren die aufgerufen wird wenn am Bus eine Nachricht ankommt?
Analog zu mqtt. dort geht das einfach mittels client.on_message = function_on_message
Könnt ihr mir da weiterhelfen?
sg, DANKE
Martin
Code: Alles auswählen
import can
import time
can0 = can.interface.Bus(channel = 'can0', bustype = 'socketcan_native')
can1 = can.interface.Bus(channel = 'can1', bustype = 'socketcan_native')
def parser_can0():
message=can.Message
print(message)
can1.send(message)
def parser_can1():
message=can.Message
print(message)
can0.send(message)
notifier0=can.Notifier(can0,[parser_can0()])
notifier1=can.Notifier(can1,[parser_can1()])
while True:
time.sleep(1)
print('Do something')
Code: Alles auswählen
<class 'can.message.Message'>
<class 'can.message.Message'>
Exception in thread can.notifier for bus "socketcan channel 'can1'":
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.7/dist-packages/can/notifier.py", line 102, in _rx_thread
self._on_message_received(msg)
File "/usr/local/lib/python3.7/dist-packages/can/notifier.py", line 119, in _on_message_received
res = callback(msg)
TypeError: 'NoneType' object is not callable