Forum: PC-Programmierung Datenbrücke zwischen zwei RasPis über das Internet


von Pat (elpat)


Lesenswert?

Hallo!

Ich möchte von einem Raspberry Pi auf ein anderes GNSS-RTK-Daten 
übertragen. Diese werden im Sekundentakt generiert und sollten ziemlich 
zeitnah am anderen Pi ankommen.

Kurz zusammengefasst also: es sollte möglich sein, beliebige Bytes 
relativ schnell und zuverlässig von einem Pi auf ein anderes bekommen.

Das ganze sollte in bestehenden C++ Code eingefügt werden können.

Was wäre eurer Meinung nach der einfachste Weg? Vor allem ohne 
Firewallregeln, VPN usw.?
Dachte schon an irgendwas mit Telegram oder matrix.org… Ginge das?

Danke im Voraus!

elpat

von Stefan F. (Gast)


Lesenswert?

Da bleibt ja eigentlich nur noch ein ganz normaler TCP Socket oder UDP.

UDP ist viel einfacher zu programmieren, wenn die Datenpakete klein 
(max.1400 Bytes) sind und ab und zu mal ein Paket verloren gehen darf.

Aber bedenke, das die Kommunikation ohne VPN (bzw. anderer 
Verschlüsselung) leicht abgehört und manipuliert werden kann.

Einer muss die IP Adresse des anderen kennen, um die Verbindung aufbauen 
zu können. Wenn diese sich häufig ändert, kannst du Dienste wie Dyndns 
nutzen. AVM hat ebenfalls so etwas für Nutzer von deren Router.

Falls du IP v4 nutzt musst du im Router ein Port-Forwarding einrichten, 
damit dein interner Rechner von außen erreichbar wird.

von Kilo S. (kilo_s)


Lesenswert?

Pat schrieb:
> Vor allem ohne Firewallregeln, VPN usw.?

In dem du einen zentralen Server im Internet einrichtest an den die 
Pakete gesendet werden, die dann von deinem zweiten system dort abgeholt 
werden.

Hat den Vorteil es ist erweiterbar.

von Εrnst B. (ernst)


Lesenswert?

Kilo S. schrieb:
> In dem du einen zentralen Server im Internet einrichtest

Oder mietest. Bei AWS kostet ein MQTT-Server in der benötigten 
Größenordnung ~0,50€ pro Monat. Im ersten Jahr vmtl. komplett kostenlos, 
müsste im Startup-Kontingent liegen.

Wenn du bei MQTT bleibst und keine anderen AWS-Dienste dazuklickst, bist 
du damit auch nicht bei Amazon gefangen, einen MQTT-Server kriegt man 
auch anderswo oder kann ihn ganz einfach selber betreiben.

von Kilo S. (kilo_s)


Lesenswert?

Εrnst B. schrieb:
> Oder mietest.

Gleicher Gedanke auf andere Art ausgedrückt, ich dachte an einen kleinen 
V Server. Die gibt es auch sehr günstig. ;-)

https://www.netcup.de/vserver/vps.php#v-server-details

von Michael D. (nospam2000)


Lesenswert?

Εrnst B. schrieb:
> Oder mietest. Bei AWS kostet ein MQTT-Server in der benötigten
> Größenordnung ~0,50€ pro Monat.

Heißt dort "IoTCore" und den Kostenrechner findet man hier:
https://calculator.aws/#/addService/IoTCore

  Michael

von Mario M. (thelonging)


Lesenswert?

Εrnst B. schrieb:
> MQTT-Server

Das wäre auch mein Tipp. Den muss man nicht mal mieten, es gibt auch 
öffentliche MQTT-Server.
https://iot4beginners.com/top-15-open-source-public-free-brokers-of-mqtt/

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Die beiden Raspis befinden sich ja jeweils in einem LAN, oder?

Dann verbinde doch die beiden zugehörigen Internet-Router (Fritzbox?) 
per VPN miteinander! Dadurch wird die IP der beiden Raspis für den 
jeweils anderen direkt erreichbar ...

Achtung! Die beiden Netzadressen müssen unterschiedlich sein! Auf beiden 
Seiten z.B. 192.168.178.x (typisch Fritz) geht nicht!

Was ginge wäre z.B. 192.168.178.x und 192.168.179.x ....

: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

Frank E. schrieb:
> Dann verbinde doch die beiden zugehörigen Internet-Router (Fritzbox?)
> per VPN miteinander!

Wäre die einfachste Lösung, aber:

Pat schrieb:
> ohne Firewallregeln, VPN usw.

Und dann bleibt halt nur noch ein externer Server, an den sich beide 
verbinden...

Aber auch den Weg über VPN verbaut er sich nicht, wenn er einen 
MQTT-Client in seinen C++ - Code integriert. Dann läuft halt auf einem 
der Raspis noch ein mosquitto mit.

von G. K. (zumsel)


Lesenswert?

Pat schrieb:

> Ich möchte von einem Raspberry Pi auf ein anderes GNSS-RTK-Daten
> übertragen. Diese werden im Sekundentakt generiert und sollten ziemlich
> zeitnah am anderen Pi ankommen.

https://gpsd.gitlab.io/gpsd/index.html

von Christian H. (ch-hunn)


Lesenswert?

Installiere auf den Nodes Tailscale.
Tailscale erstellt ein VPN zwischen allen Nodes. So sind sie alle über 
eine private statische IP Adresse untereinander erreichbar.
Der Vorteil von Tailscale ist, dass der Tunnel auch über ein NAT 
aufgebaut werden kann. Der Client ist für Linux, Win, Mac, IOS, Android 
erhältlich.
Gratis bis 100 Devices.
Ein neuer Node ist in 3 Minuten provisioniert.

von Mario M. (thelonging)


Lesenswert?

Frank E. schrieb:
> Was ginge wäre z.B. 192.168.178.x und 192.168.179.x ....


Lieber nicht die 179 verwenden, die wird typischerweise für das Gastnetz 
verwendet.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Kommt darauf an, was du unter "zeitnah" verstehst ...

Die Info-Quelle könnte ihre Infos in eine (beim Provider angelegte, 
übers Web erreichbare) MySQL-DB ablegen.

Der "empfangende" Raspi könnte die gleiche DB einfach regelmäßig pollen 
(z.B im 10s-Takt) und die noch nicht als gelesen markierten Datensätze 
auslesen und/oder evtl. danach sogar einfach löschen ...

Eine weitere Alternative: Ein Telegram-Bot! Sowohl das Senden als auch 
das Auslesen der letzten Meldung sind per HTTP-Request recht einfach. 
Dann benötigst du keine eigene Infrastruktur.

: Bearbeitet durch User
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Mario M. schrieb:
> Frank E. schrieb:
>> Was ginge wäre z.B. 192.168.178.x und 192.168.179.x ....
>
> Lieber nicht die 179 verwenden, die wird typischerweise für das Gastnetz
> verwendet.

Wenn du deiner FB die x.179 als Haupt-Netzadresse gibst, sucht sie sich 
selbst eine andere (z.B. 180) für das Gastnetz, so klug ist die Firmware 
schon :-)

von Pat (elpat)


Lesenswert?

Hallo!

Danke für all eure Tipps!

Am spannendsten klingt für mich Tailscale und die öffentlichen 
MQTT-Server. Mal sehen, was es letztendlich wird.

Das Internet für die GNSS Geräte kommt meist von irgendeinem 
Smartphone-Hotspot oder Webcube oder was auch immer, deshalb scheiden 
alle Fritzbox&Co-Lösungen leider aus.

Danke nochmals und schöne Grüße,
elpat

von Musik og F. (musikog_f)


Lesenswert?

Pat schrieb:
> Hallo!
>
> Danke für all eure Tipps!

kleine Seitenbemerkung, da wir nicht wissen wozu und warum.
Wie zeitkritisch ist das ganze? Also das R in RTK.
Wenn dir Latenzen von bis zu 1000 ms nix ausmachen, hast du 
Lösungsansätze. Wenn du unter 10 ms brauchst, dann sag bescheid.

von Le X. (lex_91)


Lesenswert?

Pat schrieb:
> Dachte schon an irgendwas mit Telegram oder matrix.org… Ginge das?

Witzigerweise ist diese Idee nicht mal die schlechteste.
Kommt natürlich auf die Menge der Daten und die geforderte Latenz an. 
Und natürlich, ob du einen Anbieter wie Telegram in deinem Datenkanal 
eingebunden haben möchtest.

Aber grundsätzlich ist die Telegram-API offen und gut dokumentiert.
Du kannst dir zwei Bots erstellen, einen auf Pi 1 und den anderen auf Pi 
2 nutzen und die Bots sich gegenseitig Nachrichten schreiben lassen. 
Dabei kommst du ohne VPN oder offene Ports aus, brauchst keinen 
öffentlich erreichbaren Host und brauchst keine Gateway-Applikation auf 
diesem Host. Dafür hast du aber noch einen Dritten mit im Boot. Musst du 
wissen ob das OK für deine Anwendung ist.

In Python sind das jeweils 5 Zeilen Code oder so.
In C++ vermutlich etwas mehr, aber auch machbar. Die API läuft über 
Web-Requests, d.h. jede Sprache die dich Requests absetzen lässt ist 
geeignet.

Ich hab hier einen Raspi mit Webcam in Betrieb der mir regelmäßig Fotos 
schießt und mir täglich eine Status-Nachricht per Telegram aufs Handy 
schickt (Anzahl der neuen Fotos, Speicherauslastung, Uptime usw.)

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.