NEWS
[gelöst] MQTT Datenaustausch in beide Richtungen ?
-
Tag,
heutiges Projekt soll sein:
RPI 2 soll per MQTT einen DP auf true setzen.
Dies ist erfolgreich !
Wenn dieser DP auf true gesetzt wird soll RPI 1 eine Aktion ausführen und bei Erfolg ebenfalls einen DP auf true setzen.
Ebenfalls erfolgreich !
Nun soll der RPI 2 darauf reagieren und wieder eine AKtion ausführen.Zur momentanen Konfig:
RPI 1 - MQTT als Server
RPI 2 - MQTT als ClientJetzt stellt sich mir die Frage ob der RPI 2 auch auf Server umgestellt werden muss und wie die jeweilige Konfig dann aussehen muss (Port, usw.) ?
Grüßle und danke
-
@djmarc75
ich hatte damals als ich mich mit MQTT beschäftigt hatte den mqtt-client Adapter genutzt. Damals waren dort die einzelnen Datenpunkte deutlich einfacher zu konfigurieren -
@homoran sagte in MQTT Datenaustausch in beide Richtungen ?:
mqtt-client Adapter genutzt. Damals waren dort die einzelnen Datenpunkte deutlich einfacher zu konfigurieren
Ja, das stimmt auffallend.
Nur möchte ich ja dass sich beide RPI per MQTT "austauschen" also beide quasi als Server und Client funktionieren sollten. Das kann der MQTT-Client Adapter nicht, der kann ja nur senden. -
@djmarc75 sagte: beide quasi als Server
Es kann nur einen geben!
@djmarc75 sagte in MQTT Datenaustausch in beide Richtungen ?:
Das kann der MQTT-Client Adapter nicht, der kann ja nur senden.
Der kann auch "subscriben".
-
Immer wieder das Verständnisproblem, dass ein Mqtt-Server Broker nichts !!! aktiv sendet, sondern nur die Informationen verwaltet. 2 Server machen also überhaupt keinen Sinn. In Deinem Fall müsste halt der RPI 2 Client alles subscriben- Du solltest aber immer alle Haken rausmachten, sonst hast du ganz schnell Endlosschleifen. Man kann es so probieren- ganz sauber ist es aber auch nicht. Theoretisch sollte auf dem RPI1 auch noch ein Client laufen und nur dort werden die Werte geändert. Der Server ist eigentlich immer der passive Informationsverwalter, der gepublishte Information entgegennimmt und nur an Clients, die topic subscribed hat, über aktualisierte Werte informiert.
Im Prinzip würde ich in diesem Beispiel sogar den Broker/Server ganz auslagern, z. Bsp als mosquitto Broker und ggf. jeden iobroker unter einem eigenen Präfix publishen lassen, do dass Du immer Kontrolle darüber hast, von wem welche Änderungen stammen.
-
@djmarc75 sagte in MQTT Datenaustausch in beide Richtungen ?:
Nur möchte ich ja dass sich beide RPI per MQTT "austauschen" also beide quasi als Server und Client funktionieren sollten
Missverständnis!
das hat nix mit Server und Client zu tun.
MQTT benötigt einen Server (=Broker) um den Datenverkehr zu regeln.
Jeder Client kann Senden (publish) und Empfangen (subscribe) -
Puh, erstmal danke für den Input @Homoran @paul53 @mickym
Da werd ich mich mal reinknien.
@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
den Broker/Server ganz auslagern, z. Bsp als mosquitto Broker
Hm, wohin "auslagern" ?
-
@djmarc75 halt gesondert auf Deinem RPI1 installieren- also den Broker nicht im iobroker betreiben.
Mit dem publishen unter unterschiedlichen Präfixen, würdest Du halt in jedem Fall Endlosschleifen vermeiden, da jeder Client einen eigenen Bereich zum Veröffentlichen hat und gleichzeitig den Namensraum des kompletten Baums des Partners abonnieren kann
Würde aber trotzdem den Client/Server Adapter verwenden. Ich mag den anderen nicht, aber ich weiß @Homoran verwendet den anderen und ist glücklich.
-
@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
also den Broker nicht im iobroker betreiben.
ok, wie wird der dann Konfiguriert ? Per SSH ? Oder gibbed da auch eine schöne bunte Oberfläche?
-
@djmarc75 per ssh.
sudo apt install mosquitto.
Konfiguriert wird das über Konfigdatei ist aber easy.. https://mosquitto.org/man/mosquitto-conf-5.html
Du kannst es aber auch erst mal mit 2 Instanzen des mqtt Adapters probieren, wenn Du nicht willst. Eine Instanz als Server und eine als Client. Bin mir halt nicht sicher, ob das sauber funktioniert. Wäre insofern aber auch eine Zwischenlösung, weil man den Broker dann auch später noch auslagern könnte.
-
@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
u kannst es aber auch erst mal mit 2 Instanzen des mqtt Adapters probieren
Daran hab ich auch gedacht aber gleich wieder verworfen wegen den Ordnernamen dann "mqtt.0" und "mqtt.1"
Ich mach mich mal an die "Auslagerung",
kann ja nicht so schwer sein.@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
ist aber easy.. https://mosquitto.org/man/mosquitto-conf-5.html
Heiliges Blechle - ganz easy? Naja, es soll ja heute nicht ganz soo heiss werden, dann kann man das mal machen.
-
@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
Eine Instanz als Server und eine als Client. Bin mir halt nicht sicher, ob das sauber funktioniert.
war damals kein Problem. Hab das genau so gemacht.
@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
weil man den Broker dann auch später noch auslagern könnte.
nur dewegen habe ich einen MQTT Multihost client.
da ich meine Geräte (hier 2x Raumsensoren auf Basis von Teensy LC) nicht programmieren kann, muss ich jetzt immer die alte IP nutzen.
Auf dem Client ist nur der Broker -
@djmarc75 sagte in MQTT Datenaustausch in beide Richtungen ?:
@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
u kannst es aber auch erst mal mit 2 Instanzen des mqtt Adapters probieren
Daran hab ich auch gedacht aber gleich wieder verworfen wegen den Ordnernamen dann "mqtt.0" und "mqtt.1"
Ich mach mich mal an die "Auslagerung", kann ja nicht so schwer sein.
Na ich habe mehrere Instanzen - das ist doch nicht schlimm.
Aber ansonsten halte es einfach und der Broker ist easy zu installieren. Die Clients brauchst ja nicht. Hier mal eine kleine Anleitung meines NodeRed- Professors:
-
@djmarc75 sagte in MQTT Datenaustausch in beide Richtungen ?:
Heiliges Blechle - ganz easy? Naja, es soll ja heute nicht ganz soo heiss werden, dann kann man das mal machen.
Na das sind Möglichkeiten, aber doch kein muss.
Wenn Du nur via ssh
sudo apt install mosquitto
den Broker installiert hast - geht ja ratz fatz - schau nur, dass Du Deinen iobroker Server Adapter stoppst - 2 Broker auf der gleichen Maschine mit dem gleichen Port mögen sich nicht
würde ich die Standardkonfiguration behalten und eine eigene Konfig-Datei anlegen (hier mal meine Struktur):
$cd /etc/mosquitto $ ls aclfile.example ca_certificates certs conf.d mosquitto.conf pskfile.example pwfile pwfile.bak pwfile.example $cat mosquitto.conf # Place your local configuration in /etc/mosquitto/conf.d/ # # A full description of the configuration file is at # /usr/share/doc/mosquitto/examples/mosquitto.conf.example pid_file /run/mosquitto/mosquitto.pid persistence true persistence_location /var/lib/mosquitto/ log_dest file /var/log/mosquitto/mosquitto.log include_dir /etc/mosquitto/conf.d
Das heißt Du machst Dir die Konfigurationsdatei unter /etc/mosquitto/conf.d
Prüfen ob der Broker läuft:
$ systemctl status mosquitto ● mosquitto.service - Mosquitto MQTT Broker Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-08-03 22:20:15 CEST; 1 day 13h ago Docs: man:mosquitto.conf(5) man:mosquitto(8) Process: 511 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS) Process: 542 ExecStartPre=/bin/chown mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS) Process: 544 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS) Process: 552 ExecStartPre=/bin/chown mosquitto /run/mosquitto (code=exited, status=0/SUCCESS) Process: 24355 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS) Main PID: 561 (mosquitto) Tasks: 1 (limit: 4915) CPU: 6min 35.243s CGroup: /system.slice/mosquitto.service └─561 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf Aug 03 22:20:13 MWHome systemd[1]: Starting Mosquitto MQTT Broker... Aug 03 22:20:14 MWHome mosquitto[561]: 1659558014: Loading config file /etc/mosquitto/conf.d/mwhome.conf Aug 03 22:20:14 MWHome mosquitto[561]: 1659558014: Warning: Error resolving bridge address: Temporary failure in name r> Aug 03 22:20:15 MWHome systemd[1]: Started Mosquitto MQTT Broker.
Wie Du siehst heisst meine Konfigdatei mwhome.conf - kannst Du natürlich nennen wie Du willst - muss halt nur in dem Verzeichnis stehen.
-
@mickym kann ich den eigentlich auch auf einem ganz anderen RPI installieren ? Wieviel Ressourcen benötigt der ?
Ich frage deshalb weil ich auf einem RPI3B+ im LAN-Netz PiHole, Influx, Grafana und Tautulli am Laufen habe.
Könnte ich den MQTT dort draufmachen ?! Hätte ja den Vorteil dass ich weitere ioB Installationen dann auch dort bequem einbinden kann. Oder sehe ich das falsch ? -
@djmarc75 Klar kannst Du das und der broker ist auch genügsam, das sollte mE schon funktionieren und ist sicher eine gute Idee. Es sollte trotzdem nicht unbedingt eine Maschine sein, die direkt vom Internet erreichbar ist.
-
@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
die direkt vom Internet erreichbar ist
Du meinst mit so offenen Ports usw ? Ich frage für einen Freund
-
@djmarc75 sagte in MQTT Datenaustausch in beide Richtungen ?:
@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
die direkt vom Internet erreichbar ist
Du meinst mit so offenen Ports usw ? Ich frage für einen Freund
Ja genau mit sowas.
-
@mickym sagte in MQTT Datenaustausch in beide Richtungen ?:
Ja genau mit sowas
Gibbed bei mir nicht
Na dann weiss ich ja wie ich den Nachmittag verbringen werde.Danke fürs Erste an alle für die vielen tollen Tips !
-
So hier mal meine Konf-Datei:
$ cat mwhome.conf allow_anonymous false password_file /etc/mosquitto/pwfile listener 1883
Im Prinzip kannst Du erst mal allow_anonymous auf true machen. Dann ist mit den 2 Zeilen, der Broker schon einsatzbereit. Falls Du es mit user und Passwort absichern willst, musst Du eben noch eine Passwortdatei erstellen.