mqtt mit anderer ip

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich habe auf meinen Ubuntu Rechner per "pip3 install paho-mqtt" das mqtt Modul installiert.
Hier die die beiden minimal Scripte:
push-sender

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import paho.mqtt.client as mqtt
ip="
client = mqtt.Client()
client.connect("rpicloud.de", 1883, 60)

client.publish("t", "25 C")
client.disconnect() 
client:

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import paho.mqtt.client as mqtt

def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))

client = mqtt.Client()
client.on_message = on_message
client.connect("rpicloud.de",1883,60)
client.subscribe("t")
client.loop_forever()

Wenn ich aber jetzt die ip statt "rpicloud.de" durch "localhost" ersetze, kommt bei mir als Ausgabe immer "ConnectionRefusedError: [Errno 111] Connection refused".

Was läuft da falsch?

Möchte es später auch per dyndns erreichbar machen.
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

egon11 hat geschrieben: Samstag 18. April 2020, 10:27 Was läuft da falsch?
Läuft lokal denn ein Broker? Wenn ja, welcher und ist der korrekt konfiguriert?
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

nezzcarth hat geschrieben: Samstag 18. April 2020, 10:59 Läuft lokal denn ein Broker?
Ich habe das ganze so ausgeführt, wie die Script Beispiele oben und es hat funktioniert.

Edit:
habe gerade gesehen, mir ist oben ein Fehler unterlaufen, die Zeile ' ip=" 'gehört nicht dahin.
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

Wenn du eine Variable, die nicht verwendet wird, entfernst, macht das keinen Unterschied. Wenn du dich allerdings zu einem Server verbinden möchtest, den es nicht gibt, dann schon. :) Du kannst dich nicht "einfach so" per mqtt mit localhost verbinden, wenn da kein passender Server-Prozess, also ein mqtt-Broker, läuft. Wenn die Beispiele so, wie du sie gezeigt hast, funktionieren, dann tun sie das, weil sie sich mit fremden Servern verbinden, auf denen ein entsprechender Broker läuft.
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ahh ok. Habe gerade gelesen, dass man einen broker erst installieren muss.

Welcher wäre gut?
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Muss ich den mqtt-Broker extra installieren?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja.
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Welchen würdet ihr mir empfehlen?
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich habe jetzt "mosquitto" installiert und getestet, funktioniert.

Wenn ich aber permanent push Nachrichten verschicken möchte, muss ich das Client Script permanent laufen lassen, hoffe das frisst nicht so viel ressourcen.

Kann man die Nachrichten auch an anderen Diensten verschicken? Wie z.b. Pushbullet aufs Handy?
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich muss leider nochmal Fragen, ich möchte dass mqtt client py als Modul laufen lassen, heißt ich baue es mir als Modul, würde es als Variable speichern wollen und bei Bedarf auf das Modul zuzugreifen um an die Aktuellen Daten zu gelangen, die als letztes an den mqtt geschickt wurde.
Das Modul kann ja immer laufen, aber mein eigentliches Script braucht nur die aktuelle Variable.
So sieht mein Modul gerade aus:

Code: Alles auswählen

import paho.mqtt.client as mqtt
import time

def on_message(client, userdata, msg):
    print(str(msg.payload))

client = mqtt.Client()
client.on_message = on_message
client.connect("ip", port)
client.subscribe("temperatur")

def aussentemperatur():
    client.loop_forever()
#    client.loop_start()
#    time.sleep(5)
#    client.loop_stop()

Wenn ich jetzt mit ein Script das Modul `temperatur.aussentemperatur()` aufrufe, läuft durch das "loop", also Endlosschleife durch.
Es gibt ja noch 'client.loop_start()' und 'client.loop_stop()', aber das ist nicht was ich suche.
Antworten