Guten Morgen,
auf einem ubuntu System habe ich einen MQTT Broker am Laufen. Nun soll
via python Skript mit einem MQTT Client auf dem ubuntu System eine
Nachricht veröffentlicht werden. Sobald die folgende Zeile ausgeführt
wird
Vielleicht wäre es sinnvoll, die entsprechenden Skripte zu
veröffentlichen. Wie soll man es sonst beurteilen können, wenn man sich
die Zeilen nicht angucken kann.
Linux schrieb:> Weiß jemand wo da das Problem liegen könnte?
Da Du lediglich eine einzige Programmzeile gepostet hast, kann man
eigentlich nur in's Blaue raten.
Und mein Rateversuch wäre:
"BROKER_ADDRESS" ist "127.0.0.1" oder "localhost" oder so.
Erste Vermutung: Auf dem Pi läuft eine andere Python Version oder auf
dem Ubuntu System sind Module nicht installiert. Also erstmal die
Version überprüfen, dann dein Skript veröffentlichen.
Wenn ich die IP Adresse "127.0.0.1" dann wird mein Skript nicht mit
einer Fehlermeldung abgebrochen. Wenn ich nun von einem anderen Rechner
subscribe und publish ausführen will, welche IP Adresse müsste ich da
verwenden? Ist es die Adresse "127.0.0.1"?
Ok eines habe ich vergessen mit zu teilen.
Auf dem pi verwende ich den Aufruf: sudo python PythonSkriptTest.py
Auf dem ubuntu System: sudo python3 PythonSkriptTest.py
Linux schrieb:> Ok eines habe ich vergessen mit zu teilen.
Du hast noch mehr vergessen:
Eric schrieb:> Vielleicht wäre es sinnvoll, die entsprechenden Skripte zu> veröffentlichen.
Connection Refused -> kein MQTT Broker hat sich auf der angegebenen
Adresse registiert (IP-Adresse und Port). Läuft der Broker überhaupt ?
Auf dem Raspberry und Ubuntu eventuell laufen unterschiedliche Versionen
eines MQTT Brokers (z.B mosquitto ?) oder die Konfigurationsdateien sind
unterschiedlich eingestellt. Die Pakete auf dem Rapsberry sind eventuell
auch für die häufigsten Anwendungsfälle vorkonfiguriert (auf Ubuntu eher
nicht).
Bei Mosquitto haben sich zwischen den 1.x und 2.x Versionen die
Defaultwerte für die Listener geändert. Das muss eventuell manuell
angepasst werden.
Linux schrieb:> Auf dem pi verwende ich den Aufruf: sudo python PythonSkriptTest.py> Auf dem ubuntu System: sudo python3 PythonSkriptTest.py
Ich habe dir doch bereits gesagt, Du sollst die jeweilige Python Version
nennen:
python --version
Linux schrieb:> ConnectionRefusedError: [Errno 111] Connection refused
Das heißt, dass der Broker unter BROKER_ADDRESS (was immer da dahinter
stehen mag) und Port 1883 nicht erreichbar ist.
Linux schrieb:> Ok eines habe ich vergessen mit zu teilen.>> Auf dem pi verwende ich den Aufruf: sudo python PythonSkriptTest.py> Auf dem ubuntu System: sudo python3 PythonSkriptTest.py
Das sudo sollte man sich in dem Fall dringend abgewöhnen.
Falls MQTT Broker nicht am selber Rechner läuft: Nachsehen auf welcher
Adresse der MQTT Broker hört. 127.0.0.1 ist die Adresse des "Loopback
Interfaces", die ist von aussen nicht erreichbar. Standard-Praxis unter
linux ist, dass solche Server-Prozesse ohne Änderung der Konfiguration
von aussen nicht erreichbar sind, das hat (auch) Sicherheitsgründe.
Firewall aktiv?
Was meldet netstat, ist ein process listening auf 1883?
Was soll die Python Version mit der Fehlermeldung zu tun haben, die sagt
was schon geschrieben wurde.
Denke es ist die neue Version von Mosquitto. Die lehnt Anfragen, die
nicht von Localhost kommen, von Haus aus ab.
Du musst die Konfiguration anpassen. Weiss jetzt aber auf die Schnelle
nicht mehr genau, was. Kann es dir aber iwann raussuchen.
Johannes S. schrieb:> Was soll die Python Version mit der Fehlermeldung zu tun haben, die sagt> was schon geschrieben wurde.
Da der TO uns ja nicht verrät ob er per TCP oder über die sockets.py
kommunizieren will, darf man unterschiede in der entsprechenden
sockets.py vermuten.
Ausserdem wissen wir nicht, wie und wo der Broker läuft. In einem Docker
Container wäre localhost zum Beispiel nicht das lo.
Mit dem derzeitigen Informationen ist eine Hilfestellung schwer zu
leisten.
Linux schrieb:> Abgespeckte Skript:
Ja, das erkennt man...
Wie gesagt, Du machst Dir keine Mühe, notwendige Infos zur Verfügung zu
stellen.
BM? Container? Python Version? Absolut nichts.
Ehrlich gesagt habe ich da auch keine grosse Lust mehr, dir zu helfen.
Sorry.
Linux schrieb:> Hallo Tam H., das vermute ich auch, dass die Anfragen die nicht von> localhost kommen abgelehnt werden.
Ich gehe mittlerweile davon aus, dass Tam H. tatsächlich voll in's
Schwarze getroffen haben mit seiner Vermutung, was die Ursache des
Problems ist.
Nämlich, dass der MQTT-Broker "mosquitto" ist, auf dem Raspberry Pi
selbst läuft - und nur über das loopback-Interface zu erreichen ist,
weil es eine aktuelle Version von mosquitto >= 2.0.0 ist und Du die
Default-Konfiguration nicht geändert hast.
Und er hat auch bereits klar gesagt, was Du in diesem Fall tun musst, um
das Problem zu beheben: Die mosquitto-Konfigurationsdatei eben
dahingehend ändern, dass mosquitto nicht nur auf dem loopback-Interface
horcht.
Ich zitiere mal das mosquitto-Changelog:
1
Breaking changes:
2
- When the Mosquitto broker is run without configuring any listeners it will
3
now bind to the loopback interfaces 127.0.0.1 and/or ::1. This means that
4
only connections from the local host will be possible.
5
6
Running the broker as `mosquitto` or `mosquitto -p 1883` will bind to the
7
loopback interface.
8
9
Running the broker with a configuration file with no listeners configured
10
will bind to the loopback interface with port 1883.
11
12
Running the broker with a listener defined will bind by default to `0.0.0.0`
13
/ `::` and so will be accessible from any interface. It is still possible to
14
bind to a specific address/interface.
15
16
If the broker is run as `mosquitto -c mosquitto.conf -p 1884`, and a
17
listener is defined in the configuration file, then the port defined on the
18
command line will be IGNORED, and no listener configured for it.
19
- All listeners now default to `allow_anonymous false` unless explicitly set
20
to true in the configuration file. This means that when configuring a
21
listener the user must either configure an authentication and access control
22
method, or set `allow_anonymous true`. When the broker is run without a
23
configured listener, and so binds to the loopback interface, anonymous
24
connections are allowed.
Hättest Du von Anfang an ein paar mehr Informationen herausgerückt,
statt uns in bester Salami-Taktik immer nur minimale unvollständige
Informations-Häppchen hinzuwerfen, hätte man Dir schneller helfen
können.
Ich habe nun mal in der mosquitto.conf Datei den EIntrag hinzugefügt:
listener 1883 xxx.xxx.xxx.xxx
(xxx.xxx.xxx.xxx = IP-Adresse Broker)
Das Programm stützt schonmal nicht mehr ab.
Linux schrieb:> include_dir /etc/mosquitto/conf.d
Und, was findet sich dort?
Linux schrieb:> Ich habe nun mal in der mosquitto.conf Datei den EIntrag hinzugefügt:
Also entgegen dieser Empfehlung:
Linux schrieb:> # Place your local configuration in /etc/mosquitto/conf.d/
So wie es nun aussieht gibt es wohl noch ein weiteres Problem. Das
ubuntu System kann keine udp Pakete empfangen. Auch ein Mqtt Connect zu
dem Broker funktioniert von außen nicht.
Udo schrieb:> mosquitto.conf:>> listener 1883> allow_anonymous true>> half bei mir als Anfang des Jahres kein Client mehr connecten konnte.
Wegen der Umstellung von 1 auf 2