Seite 1 von 1

mqtt Ergebnis in Variable schreiben

Verfasst: Sonntag 26. April 2020, 10:52
von egon11
Ich komme leider nicht weiter.
Mein Ziel ist, auf meinen Server wird jede Minute einmal ein Datenstring zum mqtt broker geschickt.

Der client mqtt soll immer durch 'client.loop_forever()' laufen.

Mein Zeil ist, dass ich durch ein anderes Script auf die Variable "push" zugreifen möchte und die letzten Daten, die der Server geschickt hat,zuzugreifen.

Leider läuft auch das Script immer durch.

Ich möchte einfach auf die Variable des Clientpush zugreifen.

Wie kann man das realisieren?

Mein Client Script:

Code: Alles auswählen

#!/usr/bin/python3
 #-*- coding: utf-8 -*-
import time
import paho.mqtt.client as mqtt
push = ""
def on_message(client, userdata, msg):
    print(str(msg.payload))
    push = str(msg.payload)

   

client = mqtt.Client()
client.on_message = on_message
client.connect("localhost", 56)
#client.loop_start()
client.subscribe("daten")
client.loop_forever()
#time.sleep(10)
#client.loop_stop()


def ergebnis():
    return push

Re: mqtt Ergebnis in Variable schreiben

Verfasst: Sonntag 26. April 2020, 11:03
von __deets__
Wenn du in loop_forever steckst, dann wird danach kein Code mehr ausgefuehrt. Und was du willst, klingt wenig sinnvoll. Skripte sind nicht irgendwie magisch ueber ihren Zustand miteinander verbindbar.

Wenn du etwas machen willst mit dem Ergebnis der Nachricht, dann ruf einfach den Code auf, der etwas damit macht. Das kann auch aus einem anderen Skript importiert werden, wenn das denn sinnvoll ist.

Re: mqtt Ergebnis in Variable schreiben

Verfasst: Sonntag 26. April 2020, 11:12
von egon11
Naja ich möchte im Prinzip die Daten in einer Variable haben.
Heißt es werden vom Server minütlich Daten zum broker geschickt.
Die soll der Client empfangen, dann weiter verarbeiten.
Aber durch den loop_forever() komme ich dann nicht mehr raus.

Man könnte doch in der "on_message" Funktion die Daten in eine Datei schreiben und von da abgreifen.
Oder macht das auch wenig Sinn?

Re: mqtt Ergebnis in Variable schreiben

Verfasst: Sonntag 26. April 2020, 11:33
von Sirius3
Was ist denn dieses andere Skript? Normalerweise verarbeitet man die Daten direkt in on_message.

Re: mqtt Ergebnis in Variable schreiben

Verfasst: Sonntag 26. April 2020, 12:21
von egon11
OK stimmt.
Dann werde ich das so machen.

Re: mqtt Ergebnis in Variable schreiben

Verfasst: Sonntag 26. April 2020, 20:05
von egon11
So das gelingt gut wenn ich den code in der Funktion einbaue.
Was ich festgestellt habe, wenn ich das script mit loop ausführe, und den Server , also den Broker(in dem Fall raspberry) neustarte etc., dann bekommt der Client an Hardware 2 keine Daten mehr. Auch wenn der Server wieder aktiv ist und Daten an den Broker verschickt werden kommt beim Clienten nichts mehr an?
Warum "hängt" es sich dann auf?