Raspberry Pi als MQTT Client

Moin, ich habe eine Verständnisfrage.

Ich würde gerne mit einem RaspberryPi Werte vom Symcon-Server abfragen. Aktuell versuche ich es mit einem Python-Script via MQTT. Das klappt auch ganz gut, aber ich muß für jeden Wert, den ich abfragen möchte, eine eigene Instanz als MQTT-Client anlegen.

Können die Werte nicht unter einer Instanz zusammengefasst werden? Wie es z. Bsp bei den Shellies läuft?

Grüße Detlev

Hi,

Entweder du erstellst ein eigenes modul, oder dein script muss die werte gesammelt per json schicken…

Viele Grüße

Wenn es nur um die spätere Darstellung im Frontend geht; Dummy Modul erstellen und die Variablen per Link dort einsortieren.
Jedes Topic ist halt eine Instanz.
Michael

HI,

danke für die Info.
Ein eigenes Modul ist mir dann doch zu aufwendig.
Grüße Detlev.

Schau dir mal mein mein Modul an: [Modul] MQTTSync.

Grüße,
Kai

Hallo Kai,

das trifft es genau auf den Kopf. Ist ja wie ein Weihnachtsgeschenk.
Ich habe aktuell den MQTT-Sync-Server installiert, ein paar Objekte inkl. MQTT-Topic konfiguriert, und schon kann mein Raspi die Werte via MQTT auslesen.

Falls jemand auch auf der Suche ist:

Objekte konfigurieren und Topi festlegen

MQTT-Explorer:

Configuration enthält die Objekt-Info, die unter symcon hängenden Topcis die Variablen-Werte.

Danke Dir und eine angenehme Weihnachtszeit.
Grüße Detlev.

Sehr gerne, das Modul ist eig. um zwei System zu syncen, aber dafür kannst du es halt auch verwenden. :smiley:

Dir auch eine schöne Weihnachtszeit. :slight_smile:

Grüße,
Kai

kann es sein, das der Retain-Switch nicht die gewünschte Wirkung hat?

wenn ich es richtig verstanden habe, sollten doch Werte die mit Retain gekennzeichnet sind, bei einem subscribe auf das entsprechende Topic sofort ausgeliefert werden.

Mit meinem Python-Script bekomme ich aber nur Änderungen übermittelt.

# !/usr/bin/python 

# MQTT
import paho.mqtt.client as mqtt 
import json

# MQTT-Broker
BROKER_ADDRESS = "192.168.5.145" 
PORT = 1883 

def on_message(client, userdata, msg):
    print(msg.topic + "|" + str(msg.payload.decode("utf-8")))
    message= json.loads(msg.payload.decode("utf-8"))
    print (message)
    print(message[0]['Value'])
    print("got new value")

## Konfiguriere MQTT-Client
client = mqtt.Client() 
client.connect(BROKER_ADDRESS, PORT) 
client.subscribe("mqttsync/symcon/display/pvsum")
client.subscribe("mqttsync/symcon/display/battery")
client.on_message = on_message
client.loop_forever()

Ich glaube, ich habe es selbst gefunden.
Ich nutze für die Kommunikation nicht den integrierten MQTT-Server sondern den Mosquitto auf dem Raps. Wenn ich Dein Modul mit dem Symcon MQTT verbinde, klappt alles.

Blöd nur, das mein python Script sich nicht mit Port 1024 (auf dem läuft der Symcon MQTT) verbinden will. Aber aktuell haben wir genau das richtige Wetter um der Sache auf den Grund zu gehen.
Grüße aus dem weihnachtlichen Knödelkoma

Das Python-Script war gar nicht schuld, doch zu viele Knödel, nun läuft alles wie ich es gerne haben möchte.

Also funktioniert alles, wie du es gerne hättest?

Grüße,
Kai

Ja, alles läuft bestens.
Ich habe mich nur gefragt, warum Dein Modul an einen anderen MQTT-Broker kein Retain setzen kann. In meinem Fall war ein Mosquitto auf meinem RaspberryPi im Einsatz.
Grüße Detlev