
Der CAN-Bus (Controller Area Network) ist ein serielles Bussystem. Er kam ursprünglich vorrangig von Fahrzeugen zum Einsatz und ist inzwischen auch im Bereich der Heimautomatisierung recht verbreitet.
Dieser Adapter soll eine direkte Anbindung eines CAN-Interfaces (z.B. can0
) an ioBroker ermöglichen.
Hierbei geht es um reine CAN-Nachrichten von bis zu 8 Byte Datenlänge. Aufgesetzte Protokolle wie z.B. CANOpen sind nicht vorgesehen.
Unterstützt wird jede Hardware, die sich auf einem Linux-basierten Betriebssystem als CAN-Interface meldet. Aufgrund der zugrundeliegenden socketcan
Library werden Windows-Systeme leider nicht unterstützt.
Die Admin-Seite ist mit React auf Basis von adapter-react gebaut. Da dies noch recht neu ist, wären hier sicherlich auch ausgiebige Tests nicht verkehrt. 
Dieser Adapter verwendet Sentry Libraries um automatisch Fehler an die Entwickler (mich) zu senden. Für mehr Details und Informationen zum Deaktivieren des Error-Reportings siehe Sentry-Plugin Dokumentation.
Features
- Empfangen und Senden von CAN-Nachrichten in Standard- und Extended-Frames
- Jede Nachricht kann einzeln zum Senden und/oder Empfangen konfiguriert werden
- Möglichkeit automatisch empfangene, aber noch nicht konfigurierte, CAN-Nachrichten hinzuzufügen
- Konfiguration von Parsern für die einzelnen CAN-Nachrichten zum Lesen/Schreiben von Daten von/in den Rohdaten-Buffer der Nachrichten
- Zahlentypen
- Boolsche Werte inkl. Bitmasken
- Strings in verschieden Encodings
- Eigene Scripte zum Lesen vom / Schreiben in den Buffer der Rohdaten
- Erweiterte Import/Export Funktionen
- Import von Nachrichtenkonfigurationen zur Erweiterung der bestehenden Konfiguration
- Import vor vordefinierten "bekannten" Konfigurationen von GitHub direkt im Admininterface
- Export und Import der Nachrichtenkonfigurationen als
json
oder csv
Dateien
- Optionale Verwendung der Datenlänge (DLC)
- Optionale Unterstützung des RTR-Flags
- Optionale Raw-States, welche die Rohdaten der empfangenen bzw. gesendeten/zu sendenden CAN-Nachrichten-Objekte beinhalten
Anforderungen
- Linux Betriebssystem
- CAN-Hardware, die vom Kernel unterstützt wird und ein Interface wie beispielsweise
can0
bereitstellt
- Kenntnisse über die CAN-Nachrichten auf dem Bus (nicht zwingend erforderlich, aber hilfreich)
Parser
Über die Parser können Daten aus den Rohdaten einer CAN-Nachricht extrahiert bzw. in diese hineingeschrieben werden.
Es gibt vordefinierte Parser für die nachfolgend aufgeführten Datentypen und zusätzlich die Möglichkeit eigene Scripte zum Lesen/Schreiben zu erstellen.
Zahlentypen im Big-Endian und Little-Endian Format
- Signed und Unsigned 8, 16 und 32 Bit Integer
- 32 Bit Float
- 64 Bit Double
Boolsche Werte
- 1 Byte inkl. Unterstützung von Bitmasken
Strings
- 1 bis 8 Byte Länge
- Encodings: ascii, base64, hex, latin1, utf8, utf16le
Eigene Skripte
Beim Parsertyp Custom können eigene Skripte zum Lesen/Schreiben der Werte genutzt werden.
Diese Skripte laufen in einer Sandbox (ähnlich den Skripten vom JavaScript Adapter).
Folgende Features können in den Skripten genutzt werden:
- Die meisten Node.js Standardfunktionen
async
/await
- Log-Funktionen des Adapters:
log.warn('something')
, log.info('something')
, log.debug('something')
getStateAsync('id')
und getObjectAsync('id')
, wobei id
die vollständige ID des States/Objektes ist
Fehler in den Skripten werden vom Adapter abgefangen und ins Log geschrieben.
In beiden Skripen sind die Variablen value
und buffer
vordefiniert. buffer
enthält dabei jeweils die aktuellen Rohdaten der CAN-Nachricht als Node.js Buffer. value
sollte beim Lesen auf den gelesenen Wert gesetzt werden. Beim Schreiben enthält value
den zu schreibenden Wert.
Screenshots




Schlusswort
Die Übersetzungen sollten in Deutsch und Englisch vollständig und korrekt sein.
Übersetzungen für andere Sprachen sind teils automatisch übersetzt und teils noch gar nicht vorhanden. Wer mag kann gerne über Weblate die Übersetzungen vervollständigen/korrigieren.
Viel Spaß beim Testen!
Ich freue mich auf Feedback. 
Grüße
Peter