MQTT Topics von externem Server empfangen ?

Überwachung der Solaranlage per eMail oder Pushover und Steuerung von Geräten mit Smart Home Zentralen. PV-Überschuss Steuerung verbunden mit Geräten und Tasmota Firmware. Wallbox Steuerungen und API Schnittstelle, über die Daten in die Solaranzeigen Datenbanken geschrieben und gelesen werden können. Alles, was man für Steuerungsaufgaben benötigt.

Moderator: Ulrich

Antworten
phguy
Beiträge: 7
Registriert: So 25. Feb 2024, 21:25
Danksagung erhalten: 2 Mal

MQTT Topics von externem Server empfangen ?

Beitrag von phguy »

Ziel: MQTT Messages von einen eigenen ESP32, der decodierte CAN-bus Messages versendet in die Influxdb zu bekommen
Der MQTT-Server, an den gesendet wird ist im lokalen Netzwerk unter hassio.local:1883
Von dort will ich u.a. auf den Topic "/phdata/solvis/msgs/T-Bad" subscriben, der z.B. Msgs wie "T-Bad = 19.4" liefert.
Bzw. alle gleichartigen Topics unter " "/phdata/solvis/msgs/*"

Dazu habe ich eine Verständnisfrage:
Beim Lesen der Doku zu MQTT empfangen steht:

Code: Alles auswählen

// Entweder ein einzelner Wert oder eine Reihe von Werten.
// Wichtig! Das Basis-Topic heißt immer 'solaranzeige'. Dann muss entweder befehl // oder anzeige kommen, dann die Gerätenummer und dann die Bezeichnung des
// Wertes. Die Gerätenummer ist immer 1, außer bei Multi-Regler-Versionen.
// Beispiel: solaranzeige/anzeige/1/PV-Spannung
Daraus verstehe ich nicht, wie ich mein Vorhaben realisieren könnte, da das Basis Topic immer 'solaranzeige' sein soll ?!?
Wer kann mir einen Tipp geben ?

Benutzeravatar
Ulrich
Administrator
Beiträge: 6081
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 153 Mal
Danksagung erhalten: 824 Mal
Kontaktdaten:

Re: MQTT Topics von externem Server empfangen ?

Beitrag von Ulrich »

Die Solaranzeige ist nicht dafür gedacht, Werte von einem Geräte per MQTT in die Influx Datenbank zu schreiben! Bitte ein anderes Programm für so etwas nutzen. Mit der Solaranzeige kann man nur einzelne Werte, wie z.B. eine Temperatur, so empfangen. Für alles andere ist Empfangsroutine nicht gedacht und viel zu langsam.
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]

phguy
Beiträge: 7
Registriert: So 25. Feb 2024, 21:25
Danksagung erhalten: 2 Mal

Re: MQTT Topics von externem Server empfangen ?

Beitrag von phguy »

Danke für die Info, Ulrich !

Inzwischen habe ich eine Super Lösung auf GitHub gefunden, die ich als Python-Entwickler leicht auf meine Bedürfnisse anpassen konnte:
MQTT-to-Influxdb.py auf GitHub.com von zufardhiyaulhaq
https://gist.github.com/zufardhiyaulhaq ... 341b935539

Das Python Programm läuft auf irgendeinem beliebigem Server (z.B.Raspi) im lokalen Netz und hört auf konfigurierbare MQTT-Topics eines MQTT-Brokers (ebenfalls im eigenen Netz) und schreibt die empfangenen Daten direkt in die Influxdb auf solaranzeige.local:8086
Hier ein Auszug zur Illustration:

Code: Alles auswählen

import paho.mqtt.client as mqtt
from influxdb import InfluxDBClient

INFLUXDB_ADDRESS = 'solaranzeige.local'
INFLUXDB_USER = ''
INFLUXDB_PASSWORD = ''
INFLUXDB_DATABASE = 'Solvis_CAN'

MQTT_ADDRESS = 'hassio.local'
MQTT_USER = 'mqttuser'
MQTT_PASSWORD = 'mymqttpasswd'
MQTT_TOPIC = '/phdata/solvis/msgs/+'  #
...
influxdb_client = InfluxDBClient(INFLUXDB_ADDRESS, 8086, INFLUXDB_USER, INFLUXDB_PASSWORD, None)
Jetzt würde ich das statt provisorisch auf meinem MacBook laufen zu lassen auf meinen Solaranzeige Raspi umziehen.
Dazu hab ich zunächst pip3 installiert, um damit die erforderlichen Python libraries paho.mqtt.client und influxdb zu installieren:

Code: Alles auswählen

sudo apt install python3-pip
sudo pip3 install influxdb --break-system-packages
sudo pip3 install paho-mqtt --break-system-packages
Die Option "--break-system-packages" ist nicht ganz ungefährlich und man hätte das vlt. besser per virtualenv umgehen können. Da ich es aber auf einer Spielwiese-Installation von Solaranzeige ausprobiert habe, war das ok für mich.
Und die Lösung funktioniert bei mir sehr gut !
Jetzt muss ich es nur noch in einen Autostart einbinden, damit es nach dem Booten automatisch startet.
Das muss natürlich zeitlich so erfolgen, daß die influxdb bereits läuft. Wo wird diese bei Solaranzeige gestartet ?

Benutzeravatar
mr.big
Beiträge: 595
Registriert: Mi 7. Sep 2022, 12:12
Wohnort: tief im Osten...
Hat sich bedankt: 15 Mal
Danksagung erhalten: 121 Mal

Re: MQTT Topics von externem Server empfangen ?

Beitrag von mr.big »

richte dir das ganze doch einfach als Dienst ein! wie das geht kannst du dir gern hier abschauen! Bei Fragen einfach melden!

phguy
Beiträge: 7
Registriert: So 25. Feb 2024, 21:25
Danksagung erhalten: 2 Mal

Re: MQTT Topics von externem Server empfangen ?

Beitrag von phguy »

das war ein Super Tipp von Mr.Big ;-)

... und ich meine das ganz im Ernst !

hier meine Lösung, falls jemand so etwas ähnliches umsetzten will:
zunächst hab ich eine virtualenv angelegt, um nicht die bestehende System Python-Installation mit der pip Option "--break-system-packages" zu gefährden:

Code: Alles auswählen

python3 -m venv mqtt_influx
source mqtt_influx/bin/activate
Anschliessend, nach ein paar Fehlschlägen beim Aufsetzen des service scripts, vor allem, da zunächst unklar war wie man virtualenv einbaut:

Code: Alles auswählen

sudo vi /lib/systemd/system/mqtt2influx.service

ist dies als funktionierend herausgekommen:

Code: Alles auswählen

Description= MQTT CAN 8byte msg to influxdb solaraanzeige.local
After=multi-user.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/python
ExecStart=/home/pi/python/mqtt_influx/bin/python3  MQTT_to_influxdb.py
Restart=on-abort

[Install]
WantedBy=multi-user.target
Nach dem Starten des Services mit zeigt sich, daß der Service erfolgreich läuft:

Code: Alles auswählen

sudo systemctl start mqtt2influx
sudo systemctl status mqtt2influx
● mqtt2influx.service
     Loaded: loaded (/lib/systemd/system/mqtt2influx.service; disabled; preset: enabled)
     Active: active (running) since Fri 2024-03-08 12:28:59 CET; 1h 53min ago
   Main PID: 142567 (python3)
      Tasks: 1 (limit: 3907)
        CPU: 3.041s
     CGroup: /system.slice/mqtt2influx.service
             └─142567 /home/pi/python/mqtt_influx/bin/python3 MQTT_to_influxdb.py

Antworten

Zurück zu „Überschuss Steuerung, Anlagenüberwachung, Anbindung an die Heizung, API Schnittstelle und vieles Andere mehr.“