mqtt Ergebnis in Variable schreiben

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: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Was ist denn dieses andere Skript? Normalerweise verarbeitet man die Daten direkt in on_message.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

OK stimmt.
Dann werde ich das so machen.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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?
Antworten