Dokumentation für Version 0.0.1

This commit is contained in:
Dieter Lang 2026-08-09 18:56:01 +02:00
parent 63b6ca42c8
commit 6fa2293c77
2 changed files with 156 additions and 64 deletions

View file

@ -1,30 +1,45 @@
# Changelog
Alle wesentlichen Änderungen am Projekt werden in dieser Datei
dokumentiert.
Alle wesentlichen Änderungen am Projekt werden in dieser Datei dokumentiert.
## [0.0.1] - Entwicklung
## [0.0.1] - 2026-08-09
### Added
- Grundstruktur des Projekts `rs2322tcp`
- Grundstruktur des Projektes `rs2322tcp`
- Go-Modul `git.lang-dieter.de/rs2322tcp`
- Client-Anwendung als separates Programm vorgesehen
- Server-Anwendung als separates Programm vorgesehen
- Gemeinsame interne Pakete für Konfiguration, Transport, serielle
Schnittstellen, Client, Server und Versionierung
- Unterstützung von Windows und Linux als gleichberechtigte
Client-Plattformen vorgesehen
- Raspberry Pi 5 als Server-Plattform vorgesehen
- TCP als Transport für RS232-Daten festgelegt
- Tailscale als vertrauenswürdiges Netzwerk vorgesehen
- TLS zunächst nicht vorgesehen
- UDP als möglicher zukünftiger Transport für Audio-Daten vorgesehen
- Logging/Sniffer-Funktion für Diagnose vorgesehen
- Einsatz von `socat` als Entwicklungs- und Diagnosewerkzeug vorgesehen
- separates Programmgerüst für `rs2322tcp-client`
- separates Programmgerüst für `rs2322tcp-server`
- gemeinsame Versionierungsinformationen
- Git-basierte Build-Informationen
- zentrales Build-Skript `scripts/build.sh`
- automatische Quellcode-Formatierung beim Build
- automatische Tests beim Build
- SHA256-Prüfsummen der erzeugten Binärdateien
- `.gitignore` für Build- und Entwicklungsdateien
- erste Projekt- und Architekturdokumentation
### Build-Ziele
Der erste Build unterstützt:
- Linux amd64 Client und Server
- Linux arm64 Server
- Windows amd64 Client
### Architekturentscheidungen
- TCP wird für die Übertragung der RS232-Daten verwendet.
- Windows und Linux werden als gleichberechtigte Client-Plattformen betrachtet.
- Der Server ist zunächst für den Raspberry Pi 5 vorgesehen.
- Tailscale wird als vertrauenswürdiges Netzwerk verwendet.
- Eine zusätzliche TLS-Schicht ist zunächst nicht vorgesehen.
- Für eine spätere Audioübertragung ist ein separates UDP-basiertes Transportkonzept vorgesehen.
- `socat` kann für Entwicklung und Diagnose eingesetzt werden.
- Eine Sniffer-/Logging-Funktion für den übertragenen Datenverkehr ist vorgesehen.
### Status
Die Version 0.0.1 enthält zunächst nur die Projektgrundlage.
Eine funktionierende RS232- oder Netzwerkübertragung ist noch
nicht implementiert.
Version `0.0.1` enthält ausschließlich die Projektgrundlage.
Die eigentliche TCP-/RS232-Kommunikation und die virtuelle serielle Schnittstelle sind noch nicht implementiert.

165
README.md
View file

@ -1,82 +1,159 @@
# rs2322tcp
## Zweck
`rs2322tcp` ermöglicht die transparente Übertragung von RS232-Daten über TCP/IP.
`rs2322tcp` überträgt Daten zwischen seriellen RS232-Schnittstellen
und einem TCP/IP-Netzwerk.
Das Projekt ist für den Einsatz geeignet, bei dem eine vorhandene Software eine serielle Schnittstelle erwartet, das zugehörige Gerät sich jedoch an einem entfernten Standort befindet.
Das Projekt besteht aus einem Client und einem Server:
## Ziel
- Der Client stellt auf einem lokalen Rechner eine virtuelle serielle
Schnittstelle für vorhandene Software bereit.
- Der Server läuft auf einem Raspberry Pi und stellt die dort
angeschlossenen echten RS232-Schnittstellen bereit.
- Die serielle Kommunikation wird transparent über TCP übertragen.
Auf der Client-Seite soll vorhandene Hersteller-Software eine normale serielle Schnittstelle vorfinden.
Die vorhandene Software auf dem Client sowie die angeschlossenen
Geräte auf der Serverseite sollen dabei möglichst keinen Unterschied
zu einer direkten seriellen Verbindung feststellen.
Die Daten werden vom `rs2322tcp-client` über TCP an einen entfernten `rs2322tcp-server` übertragen. Der Server verbindet die Netzwerkverbindung mit einer realen seriellen Schnittstelle.
## Plattformen
Damit sollen weder die vorhandene Software auf dem Client noch die angeschlossenen Geräte auf der Remote-Seite erkennen müssen, dass die Verbindung über ein Netzwerk erfolgt.
### Client
Typische Anwendungen sind beispielsweise:
Der Client soll gleichberechtigt auf folgenden Plattformen betrieben
werden können:
- Funkgeräte mit CAT-Steuerung
- Antennenrotoren mit herstellerspezifischen seriellen Protokollen
- andere Geräte, die über RS232 gesteuert werden
## Architektur
```text
Client-PC Raspberry Pi 5
───────────────── ─────────────────
Hersteller-Software rs2322tcp-server
│ │
│ virtuelle │
│ serielle Schnittstelle │
▼ │
rs2322tcp-client │
│ │
└──────────── TCP/IP ──────────────────┘
┌──────────┴──────────┐
│ │
USB-to-RS232 USB-to-RS232
│ │
Funkgerät Rotor
```
## Client
Der Client soll gleichberechtigt unter folgenden Betriebssystemen eingesetzt werden können:
- Windows
- Linux
Die plattformspezifische Bereitstellung der virtuellen seriellen
Schnittstelle wird vom gemeinsamen Client-Kern getrennt.
Die plattformspezifische Bereitstellung der virtuellen seriellen Schnittstelle wird vom gemeinsamen Client-Kern getrennt.
### Server
## Server
Der Server ist zunächst für den Betrieb auf einem Raspberry Pi 5
vorgesehen.
Der Server ist zunächst für den Betrieb auf einem Raspberry Pi 5 vorgesehen.
Mehrere USB-to-RS232-Adapter können angeschlossen und über die
Konfiguration einzelnen Geräten zugeordnet werden.
Mehrere USB-to-RS232-Adapter können angeschlossen werden. Anzahl, Bezeichnung und serielle Parameter der Anschlüsse werden über eine Konfigurationsdatei festgelegt.
## Netzwerk
Für die RS232-Datenübertragung wird TCP verwendet.
Für die Übertragung der RS232-Daten wird TCP verwendet.
Das Projekt geht zunächst davon aus, dass die beteiligten Rechner
über ein vertrauenswürdiges Tailscale-Netz miteinander verbunden sind.
Die beteiligten Systeme werden zunächst über ein vertrauenswürdiges Tailscale-Netz verbunden.
Eine zusätzliche TLS-Verschlüsselung ist deshalb zunächst nicht
vorgesehen.
Eine zusätzliche TLS-Verschlüsselung ist deshalb derzeit nicht vorgesehen.
Für eine spätere Übertragung von Audio-Daten ist ein separates
Transportkonzept vorgesehen. Dafür soll UDP untersucht werden.
Für eine spätere Übertragung von Audio-Daten ist ein separates Netzwerk-/Transportkonzept vorgesehen. Hierfür soll UDP verwendet bzw. untersucht werden.
## Konfiguration
Client und Server erhalten jeweils eine eigene `config.json`.
Client und Server erhalten jeweils eine eigene JSON-Konfiguration.
Darin werden unter anderem serielle Schnittstellen, Parameter,
Gerätebezeichnungen und Netzwerkparameter konfiguriert.
Über die Konfiguration sollen unter anderem festgelegt werden können:
- Netzwerkparameter
- serielle Schnittstelle
- Baudrate
- Datenbits
- Parität
- Stopbits
- Bezeichnung des Gerätes
- weitere für die jeweilige Schnittstelle erforderliche Parameter
Die konkrete Konfigurationsstruktur wird im weiteren Projektverlauf festgelegt.
## Diagnose und Logging
Für Debugging und Diagnose soll eine Protokollierung des übertragenen
Datenverkehrs möglich sein.
Für Debugging und Diagnose soll eine Protokollierung des übertragenen Datenverkehrs möglich sein.
Dabei soll insbesondere eine Darstellung der übertragenen Bytes
möglich sein.
Insbesondere soll eine Darstellung der übertragenen Bytes möglich sein, um Probleme bei der Kommunikation zwischen Hersteller-Software und Gerät analysieren zu können.
`socat` kann während der Entwicklung und für Diagnosezwecke als
zusätzliches Werkzeug eingesetzt werden.
Während der Entwicklung kann `socat` als zusätzliches Werkzeug für Tests und Diagnose eingesetzt werden.
## Projektstruktur
```text
rs2322tcp/
├── cmd/
│ ├── rs2322tcp-client/
│ └── rs2322tcp-server/
├── configs/
├── docs/
├── internal/
│ ├── client/
│ ├── config/
│ ├── serial/
│ ├── server/
│ ├── transport/
│ └── version/
├── scripts/
│ └── build.sh
├── CHANGELOG.md
├── LICENSE
├── README.md
└── go.mod
```
## Build
Der Build erfolgt über das zentrale Build-Skript:
```bash
./scripts/build.sh
```
Das Skript führt unter anderem folgende Schritte aus:
- Formatierung des Go-Quellcodes
- Ausführung der Tests
- Bereinigung der Go-Module
- Ermittlung der Git-Versionsinformationen
- Build der vorgesehenen Zielplattformen
- Einbettung der Versionsinformationen über den Go-Linker
- Erzeugung von SHA256-Prüfsummen
Aktuell werden folgende Builds erzeugt:
- Linux amd64 Client und Server
- Linux arm64 Server
- Windows amd64 Client
## Versionierung
Die Version des Programms wird über Git verwaltet und beim Build in
das Programm eingebunden.
Die Versionierung erfolgt über Git.
Die Entwicklung erfolgt schrittweise über versionierte Entwicklungs-
stände.
Die Git-Informationen werden beim Build in die Binärdateien eingebettet. Neben der Version werden unter anderem Build-Nummer, Commit und Build-Datum erfasst.
Release-Versionen werden über Git-Tags gekennzeichnet.
## Entwicklungsstand
Das Projekt befindet sich derzeit in der frühen Entwicklungsphase.
Version `0.0.1` enthält zunächst die Projektgrundlage, die beiden Programmgerüste sowie das Buildsystem.
Eine funktionierende RS232- oder TCP-Übertragung ist in dieser Version noch nicht implementiert.
## Lizenz
GPLv3
GPL-3.0-or-later