Das MeshCore KISS Modem: Mehr als nur ein Knotenpunkt
Seit der Version 1.16.0 bietet der Firmware-Flasher für die meisten Platinen eine neue Rolle: das "KISS Radio Modem". Dieser Begriff sorgte in der Community für einige Verwirrung. Dieser Artikel klärt auf, was es mit dem KISS Modem auf sich hat, wofür es gedacht ist und wann es zum Einsatz kommt.
Im Kern verwendet das KISS Modem die gleiche MeshCore-Firmware und die gleiche Funkhardware wie andere Rollen. Der entscheidende Unterschied liegt in der Art der Kommunikation mit der Platine: Statt einer App nutzt man eine serielle Schnittstelle und das KISS-Protokoll. KISS steht für "Keep It Simple, Stupid" und ist ein einfaches, aber bewährtes Protokoll, das im Amateurfunk seit Jahrzehnten für die Kommunikation zwischen Computern und Packet-Modems (TNCs) eingesetzt wird. Mit dem KISS Modem verlagert sich die gesamte Logik für das Senden und Empfangen von Daten vom MeshCore-Gerät auf den Host-Computer. Das MeshCore-Gerät agiert somit eher als ein reiner LoRa-Dongle.

Für wen ist das KISS Modem gedacht?
Die meisten Benutzer, die ihr MeshCore-Gerät zum Chatten über eine Smartphone-App nutzen möchten, benötigen das KISS Modem nicht. Hierfür ist die Standard-Companion-Firmware die richtige Wahl.
Das KISS Modem richtet sich primär an Entwickler und technisch versierte Anwender, die Gateways oder eigene Dienste auf einem vollwertigen Computer aufbauen möchten. Ein prominentes Beispiel hierfür ist OpenHop (ehemals pyMC), das ein KISS Modem als Funkschnittstelle nutzen kann.
Die Anwendung ist jedoch nicht auf moderne Computer beschränkt. Ein interessantes Beispiel zeigt die Anbindung eines Commodore 64 über den User-Port mit 600 Baud. Der C64 übernimmt dabei die Paketgenerierung und Bildschirmausgabe, während das Modem die LoRa-Kommunikation und die AES-Verschlüsselung handhabt.

Auch für Entwickler, die MeshCore-Pakete von einem Laptop aus mit einer beliebigen Programmiersprache analysieren oder manipulieren möchten, ist das KISS Modem nützlich. Es ermöglicht einen direkten Zugriff auf die Funkkommunikation ohne den Umweg über eine komplexere Firmware, die eigene Logik implementiert. Zwar kann auch die Companion-Firmware rohe Pakete bereitstellen, doch das KISS Modem bietet eine vollständigere und direktere Kontrolle über die Funkebene.
Was ist KISS?
Wie bereits erwähnt, ist KISS die Abkürzung für "Keep It Simple, Stupid". Es handelt sich um ein Framing-Protokoll, das im Amateur-Packet-Radio seit den 1980er Jahren zur Kommunikation zwischen Computern und TNCs verwendet wird. MeshCore hat dieses Protokoll übernommen, da es unkompliziert ist und in vielen Programmiersprachen Bibliotheken dafür existieren.
Man kann sich KISS wie einen Briefumschlag vorstellen, in dem das eigentliche MeshCore-Paket der Brief ist.

Ein KISS-Rahmen wird durch ein C0-Byte an beiden Enden, ein Typ-Byte und das eigentliche Paket dazwischen begrenzt. Daher kann jeder KISS-Client (wie Direwolf oder APRSdroid) das Modem ansteuern und Rohdaten über das Funkmodul senden. Allerdings interpretieren diese Clients den Inhalt der MeshCore-Pakete nicht und können sie auch nicht in das Mesh-Netzwerk einbinden.
Zusätzlich zum reinen KISS-Protokoll fügt die Firmware die MeshCore-spezifischen Informationen wie Funkeinstellungen, Signalreports, Batteriestatus und Kryptographie über standardisierte KISS-Befehle hinzu, die von generischen KISS-Clients ignoriert werden.
Die Aufgaben der Platine
Die Platine übernimmt im KISS Modem Modus zwar nicht die Mesh-Logik, aber dennoch eine ganze Reihe wichtiger Funktionen: Sie sendet und empfängt rohe MeshCore-Pakete über LoRa. Empfangene Pakete werden genau so über die serielle Schnittstelle weitergeleitet, wie sie "over the air" empfangen wurden, inklusive Signalstärke (RSSI) und Rauschabstand (SNR). Die weitere Verarbeitung obliegt dann der Host-Software.
Der Host-Computer konfiguriert die Funkparameter wie Frequenz, Bandbreite, Spreading Factor, Coding Rate und Sendeleistung. Des Weiteren können Informationen wie die Batteriespannung, der Rauschpegel, Paket-Zähler und Sensorwerte (falls vorhanden) abgefragt werden. Die Platine kann auch die geschätzte Sendezeit eines Pakets basierend auf den aktuellen Einstellungen ermitteln. Die vollständige Liste der verfügbaren Befehle findet sich in der Protokolldokumentation.
Wichtig ist zu beachten, dass keine dieser Funkeinstellungen einen Neustart überdauert. Abgesehen vom Schlüsselpaar der Platine wird nichts gespeichert. Daher muss die Host-Software die Funkparameter bei jeder Verbindungsherstellung neu konfigurieren.
Das KISS Modem implementiert auch "Listen Before Talk" (LBT), um Kollisionen mit anderem Funkverkehr zu vermeiden. Es verarbeitet zudem immer nur ein Paket gleichzeitig und signalisiert, wenn ein Paket erfolgreich gesendet wurde, bevor ein weiteres angenommen wird.
Jede Platine generiert bei der ersten Inbetriebnahme ein eigenes Schlüsselpaar, das im Flash-Speicher abgelegt wird. Der private Schlüssel kann nicht ausgelesen werden. Möchte man die Identität der Platine im Mesh nutzen, kann man die Platine zur Signierung von Daten oder zum Schlüsselaustausch auffordern. Sie kann auch Verschlüsselungs- und Entschlüsselungsfunktionen sowie Verifizierungen mit vom Host bereitgestellten Schlüsseln durchführen. Alternativ kann man diese Funktionen auch gänzlich ignorieren. Die Platine sendet die ihr übergebenen Bytes ohne Überprüfung. Ein Host, der sein eigenes Schlüsselpaar verwaltet, kann somit gültige Pakete erzeugen, ohne die Kryptographie der Platine nutzen zu müssen – ein Ansatz, den OpenHop verfolgt. Der bereits erwähnte Commodore 64 hingegen delegiert aufgrund seiner begrenzten Rechenleistung die gesamte AES-Verschlüsselung und -Entschlüsselung an das Modem.
Was das KISS Modem nicht leistet, sind die Mesh-Logik wie Routing, Repeating, Chat-Funktionen oder ein Room-Server. All diese Funktionen müssen auf der Host-Seite implementiert werden.
Flashen der Firmware
Das Flashen der KISS Modem-Firmware ist identisch mit dem Flashen jeder anderen Rolle:
- Rufen Sie flasher.meshcore.io auf.
- Wählen Sie Ihre Platine aus.
- Wählen Sie die Rolle "KISS Radio Modem".
- Flashen Sie die Firmware.
- Öffnen Sie die serielle Schnittstelle der Platine mit 115200 Baud, 8N1, über eine Software, die MeshCore versteht.

Der letzte Schritt beinhaltet die eigentliche Arbeit. Bei den meisten Platinen ist die serielle Schnittstelle die USB-Schnittstelle. Es gibt eine Compile-Time-Option (KISS_UART_RX und KISS_UART_TX), um die serielle Kommunikation auf dedizierte UART-Pins zu verlegen, was beispielsweise für den direkten Anschluss an einen Raspberry Pi nützlich ist. Hierfür müsste die Firmware jedoch selbst kompiliert werden.
Wer die serielle Kommunikation nicht selbst implementieren möchte, kann auf OpenHop zurückgreifen, das diese Funktionalität bereits integriert hat. Wer eine eigene Lösung entwickeln möchte, findet alle Details zur seriellen Kommunikation in der KISS Modem-Protokolldokumentation und zum Paketformat in der entsprechenden Seite der Dokumentation.
Wo Sie anfangen können
- Flasher: https://flasher.meshcore.io
- Protokolldokumentation: https://docs.meshcore.io/kiss_modem_protocol
- Paketformat: https://docs.meshcore.io/packet_format
- OpenHop: https://github.com/openhop-dev/openhop_repeater
