Forum: Mikrocontroller und Digitale Elektronik MQTT erste Schritte Nachrichten können nicht empfangen werden


von H. C. (sunshine)


Lesenswert?

Ich habe auf meinem Raspberry folgendes Testprogramm am Laufen:
https://www.dinotools.de/2015/04/12/mqtt-mit-python-nutzen

Dies läuft auf meinem Raspberry lokal und ich kann die Nachrichten auch 
empfangen.

Nun habe ich beim Broker statt "localhost" die IP meines 
Windows-Rechners angegeben und auf dem Windows-Rechner MQTTBox 
installiert.
Beim Client habe ich unter Host die IP des Raspberry eingegeben und 
unter Will-Topic: test/temperature
Als Protokoll: mqtt/tcp
Nun bekomme ich die Verbindung als "Connected" angezeigt, aber ich sehe 
keine Nachrichten :-(

Ich hab's ebenso mit meinem Android Handy versucht und in der App (IoT 
MQTT Dashboard) die Settings entsprechend eingestellt. Doch egal was ich 
in der App einstelle, so erhalte ich beim Start des Python Skriptes nur 
die Meldung "[Errno 111] Connection refused.

Könnt ihr euch vorstellen, was ich noch falsch mache?

von Daniel (Gast)


Lesenswert?

Sollte beim broker nicht "local host" stehen bleiben?

von R. R. (elec-lisper)


Lesenswert?

H. C. schrieb:
> Nun habe ich beim Broker statt "localhost" die IP meines
> Windows-Rechners angegeben und auf dem Windows-Rechner MQTTBox
> installiert.

Meinst du "bind_address <windows-pc-ip>" statt "bind_address localhost"?
Da musst die IP des Raspberrys (des Moquito-Broker Rechners) rein.

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

H. C. schrieb:
> Nun habe ich beim Broker statt "localhost" die IP meines
> Windows-Rechners angegeben und auf dem Windows-Rechner MQTTBox
> installiert.

Was genau meinst du mit "beim Broker"? Wo hast du das angegeben? Hast du 
in der Konfiguration des Brokers irgendwo was angegeben? Wenn ja, warum? 
Oder hast du deinem Client gesagt, der Broker sei jetzt auf dem 
Windows-Rechner? Dann muss da auch einer laufen. MQTTBox ist soweit ich 
das verstehe keiner.

> Beim Client habe ich unter Host die IP des Raspberry eingegeben und
> unter Will-Topic: test/temperature
> Als Protokoll: mqtt/tcp

Und beim anderen Client?

Vielleicht hast du die Architektur noch nicht ganz verstanden? Der 
Broker ist ein zentraler Server, mit dem sich Clients verbinden können. 
Willst du eine Kommunikation aufbauen, dann brauchst du auf deinem Raspi 
einen Client und auf deinem Windows-PC, und auf einem der beiden Geräte 
(oder irgendeinem anderen im Netzwerk) muss der Broker laufen. Die 
beiden Clients müssen sich jeweils mit dem Broker verbinden. Ein Client 
kann dann Nachrichten mit einem bestimmten Topic an den Broker senden, 
und der verteilt diese an alle verbundenen Clients, die sich für diesen 
Topic interessieren. Dem Broker selber muss man keine IP-Adressen 
nennen, die ergeben sich automatisch durch die verbundenen Clients.

von Michael U. (amiga)


Lesenswert?

Hallo,

habe im Moment wenig Zeit:

möglichst die Version Version 1.4.5 installieren, ich weiß nicht ob die 
inzwischen direkt angeboten wird.

Unter Windows habe ich zum Test mqtt.fx installiert, gibt es wohl für 
etliche andere System auch.
Dann zum Test alles abbonieren, also subscribe # angeben.
Wenn dann unter publish irgendwas geschickt wird z.B. an test, sollte 
das im subscribe-Window ankommen.

In der config von Mosquitto habe ich nicht geändert, glaube ich 
zumindest...
Wenn dor eine IP angebunden wird statt localhost muß es natürlich die 
vom RasPi sein, auf dem Mosquitto läuft.
1
# Optional, wer den aktuellsten 1.4.5 MQTT Broker haben will, muss ihn wie folgt aus dem mosquitto Repo installieren:
2
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
3
sudo apt-key add mosquitto-repo.gpg.key
4
cd /etc/apt/sources.list.d/
5
sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
6
# oder für jessie
7
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
8
sudo apt-get update
9
sudo apt-get install mosquitto

aus http://blog.wenzlaff.de/?p=6487

Gruß aus Berlin
Michael

von H. C. (sunshine)


Lesenswert?

Also ich hab auf dem Broker (meinem Raspberry) das Python Skript laufen 
mit
1
...
2
3
client.connect("localhost", 1883, 60)
4
...
5
    client.publish("test/temperature", "test")

Muss ich hier jetzt der Connect-Funktion "localhost" oder die IP-Adresse 
des Empfängers angeben.
Heißt das, dass jeder im Netzwerk die Nachrichten abfangen kann, der das
Topic und die IP des Sender=Brokers weiß?
Ich möchte ja, dass die Nachrichten innerhalb des Netzwerks versendet 
werden, ohne dass das Internet funktioniert, geht das dann automatisch 
oder muss ich was beachten?

von Johannes S. (Gast)


Lesenswert?

H. C. schrieb:
> Muss ich hier jetzt der Connect-Funktion "localhost" oder die IP-Adresse
> des Empfängers angeben.
> Heißt das, dass jeder im Netzwerk die Nachrichten abfangen kann, der das
> Topic und die IP des Sender=Brokers weiß?

Das ist doch der Sinn des Brokers (Nachrichten-Verteiler): der ist 
Zentral und bekommt alles. Und wenn sich jemand für die Nachrichten 
interessiert kann er die abonnieren. Also z.B. genau wie der Twitter 
Dienst, nur das der Broker nicht im Internet sein muss sondern in deinem 
lokalen Netz. Aus Sicherheitsgründen wohl meist eher nicht im 
Internet...
Und zum Test erstmal einfach mit dem Wildcard '#' alles abonnieren. 
Sogar fürs Smartphone gibt es MQTT Clients die dir jede Message im Netz 
melden können.

von H. C. (sunshine)


Lesenswert?

Super, es läuft nun bei mir!! Am PC sowie auf dem Handy!
Ist das nun per default nur im LAN?
Was müsste ich umstellen / ändern, wenn ich die Nachrichten auch übers 
Internet bekommen möchte?

Kennt ihr ne App bzw. Win-Software, die ständig im Hintergrund lauscht 
und die mich im Alarmfall lautstark benachrichtigt?

von R. R. (elec-lisper)


Lesenswert?

H. C. schrieb:
> Was müsste ich umstellen / ändern, wenn ich die Nachrichten auch übers
> Internet bekommen möchte?

Du musst bei deiner FritzBox bzw. DSL-Router eine Dyn-DNS konfigurieren
(dafür brauchst du wiederum eine Domain, z.B. von Strato),
damit du deinen Internet-Anschluss von außen erreichen kannst.
Dann musst du Port-Forwardung auf der FritzBox/DSL-Router einrichten für 
den TCP-Port von MQTT und auf die IP deines MQTT-Brokers. Dann kannst du 
im Handy den DNS-Namen deines Anschlusses eingeben und es sollte laufen.

Geh aber sicher, dass du Authentifizierung bei MQTT aktivierst, sonst 
kann da jeder alles Abfragen und ggf. den MQTT-Broker hacken wenn da 
Exploits bekannt sind.
Man kann auch ein VPN einrichten, das müsste man aber vorher aufm Handy 
aktivieren.

EDIT: Hacken könnte man theoretisch natürlich auch mit 
Authentifizierung, je nach Sicherheitslücke beim Broker-Server.

: 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.