MQTT und ebusd

Hallo zusammen,

ich konnte endlich meine Heizung mit einem RPI ebusd Modul anbinden und kann auch alle Werte auslesen. Nun wollte ich nicht
den Weg über den Client Socket gehen sondern über MQTT. Leider bin ich hier noch nicht so fit. Das Modul IPS-KS-MQTT könnte man dafür sicher nutzen, nur weiß ich nicht wie ich einen Get Befehl per Script absetzen kann. Vielleicht kann mir da jemand helfen.
Der Befehl sieht auf der Console des Brokers (gleicher Rechner wie IPS ) so aus :

mosquitto_pub -q 2 -t ebusd/700/HwcTempDesired/get -m "r -f HwcTempDesired"

Den müsste ich nun aus IPS heraus starten. Mit einem Shell Befehl könnte ich das lösen, aber geht das ggf. direkt über den KS-MQTT?

Danke Thomas

Läuft bei mir:

  • ebusd auf RASPI (mit mqtt Parameter gestartet)
  • mqtt Broker auf RASPI
  • Kai’s (modifiziertes?) Modul empfängt und sendet Heizungsdaten

Bei Bedarf kann ich Ende nächster Woche Details geben.

Gruss Michael

Hallo Michael,

ja soweit bin ich auch schon und läuft auch. Also Daten kommen an über Kai´s Modul.
Mir fehlt momentan einfach der Ansatz wie ich das Modul verwende, aber am Wochenende
werde ich mich mal einlesen. Wäre trotzdem schön, wenn du mir mal 1-2 Beispiele zeigst,
wie du liest und schreibst.

Danke Thomas

Hab es hinbekommen. Muss mir nun noch einen sinnvollen Weg suchen die Abfragen zu sortieren usw… Fragst du die
dich interessierenden Werte alle einzeln ab? Ich will ja nur die Kerndaten nicht alles was eBus hergibt.

Gruss Thomas

Horche und frage auch einzeln ab… hab erst nächste Woche wieder Zugriff auf IPS, melde mich dann
Gruss Michael

Seid ihr hier weitergekommen? Ich rufe die Daten aktuell noch über shell_exec ab - was sauber funktioniert, aber vielleicht bekomme ich es über MQTT ein bisschen eleganter hin?

Hallo,

also ich löse es mit MQTT. Ein Teil der Werte wird quasi vom EBUSD gepollt, die greife ich teilweise ab und werte diese aus.
Den anderen Teil muss man quasi per MQTT abfragen und dann die Antwort auswerten. Inzwischen schalte ich so die Heizung auch per IPS auf Sommer oder Winter oder Warmwasser komplett aus, wenn ich im Urlaub bin. All zu viel wollte ich da nicht eingreifen, geht nur um Sachen, welche ich sonst an der Heizung direkt umgestellt hab.

Die Auswertung der einzelnen Temperaturen ist zwar nett, braucht aber normal kein Mensch.

Thomas

Wie sieht denn der Abruf bei dir aus?

Bei mir aktuell so:

ebusctl --port=8889 r -f HwcTemp

Wie sieht das mit MQTT aus, ist das dann auch in einem Skript?

Hallo Peter,

bei MQTT musst du ja nicht ein externes Programm aufrufen, sondern sendest die Daten über MQTT ( ich habe das MQTT Modul von Kai verwendet ). Hier ein Beispiel der Abfrage welche ich dann aller x Min. starte. ( Der Auswertscript empfängt die Daten dann und schreibt Sie in die Variablen )


$msg = "";

$abfrage =  array ( 
           1 => "PrEnergySumHcThisMonth",
		   2 => "PrEnergySumHwcThisMonth",
		   3 => "PrEnergySumHc",
		   4 => "PrEnergySumHwc",
		   5 => "DisplayedOutsideTemp",
		   6 => "Hc1ActualFlowTempDesired",
		   7 => "HwcStorageTemp",
		   8 => "HwcOpMode",
		   9 => "Hc1CircuitType",
		   11 => "HwcTempDesired",
		   12 => "ccTimer.Monday",

		   );

foreach ($abfrage as $key1 => $value ) {
  $topic = "ebusd/700/".$abfrage[$key1]."/get";
  KSMQTT_Publish(47938,$topic,$msg,0,0); 
  IPS_Sleep(50);
}

Funktioniert bei mir zumindest seit Monaten einwandfrei. Du musst halt einen EBusd mit MQTT installiert haben. Dieser sendet dann an den Broker, welcher bei mir auf dem gleichen Rechner wie IPS läuft. Ist noch nicht der in IPS integrierte, weil es den damals noch nicht gab. Wenn du mehr Details brauchst schreib ich das dir gern mal zusammen, aktuell ist die Zeit nur etwas knapp.

Thomas

Hi,

das wäre großartig, wenn du das gerne hier zusammenschreiben würdest.
Ich habe die aktuelle ebusd 3.3 mit MQTT installiert, nutze aber noch die alten Befehle. Ebenso nutze ich MQTT bereits für die Shelly-Module, aber da muss ich gar nix machen :slight_smile:

Mir reicht es schon zu wissen, wie ich ebusd im MQTT-Modus starten kann und dann eben meine vorhandenen Variablen (z.B. Warmwasser-Temperatur) per MQTT füllen kann, und eben nicht über das Skript. Königsdisziplin ist dann, Werte in die Anlage zu schreiben, z.B. die Leistung der Zirkulationspumpe. Ich nehme an, dass zumindest die Strings aus den CSVs gleich sind?

Hallo Peter,

Wenn du das per mqtt am laufen hast und die log‘s lieferst könnte man daraus auch ein Modul bauen. Ich würde da mal Kais fragen[emoji23]

Gesendet von iPhone mit Tapatalk

Klar, sehr gerne!

Hallo,

ich hänge auch gerade an diesem Thema, bin mir aber nicht sicher, ob ich in diesem Thread richtig bin.

Ich habe einen Raspberry mit ebusd laufen und kann auf dem über ebusctl auf alle Daten des Brenners (BAI) und der Regelung (700) zugreifen. Soweit sind die Grundlagen geschaffen …
Auch die MQTT Verbindung zu IPS funktioniert und es kommen Daten an (MQTT Server und MQTT Device). Allerdings frage ich mich, wie ich die Daten refreshen oder setzen kann.

In der Doku zu ebusd steht im Kapitel MQTT:

Due to the subscription to the topic, ebusd also allows actively sending messages on the eBUS. This is supported by using a specific suffix to the topic:

[ul]
[li]/get: initiates an active refresh of a read message from the eBUS.[/li]> When the message was read, ebusd send the corresponding topic to MQTT.
[li]/set: allows to send a write message to the eBUS (if the access level allows it, see above).[/li]> [li]/list: publishes all messages known so far (according to access level, see above).[/li]> [/ul]

For /get and /set suffixes, the optional message payload can be used to transfer additional input data, e.g. the values to be set for a write message or the needed input for a read message, separated by semicolon.

In der IPS Doku zu MQTT steht ein Beispiel wie man über die Instanzkonfiguration oder über RequestAction einen Wert setzen kann. Aber das funktioniert hier nicht. Wenn ich den Wert über ‚/GET‘ aktualisieren möchte, dann steht anschließend ‚/GET‘ in der Statusvariablen :confused:

MQTT ist noch neu für mich, daher denke ich, dass ich sicherlich irgendetwas überlesen habe. Könnte mir hier jemand weiterhelfen?

Gruß

Burkhard

Ich glaube die meinen, dass du am Topic ein /get anhängen musst. D.h. du willst eine neue MQTT Instanz erstellen die mit irgendwas/get endet. Dort dann ein RequestAction auf die Variable (Inhalt wahrscheinlich egal)

paresy

Ah, in die Richtung geht es. Ich werde es mal ausprobieren. Es scheint mir aber sehr umständlich zu sein, für die /get und /set Variante jeweils neue Instanzen erstellen zu müssen.
Ist das vielleicht noch ein offenes Thema bei der IPS Implementierung von MQTT, oder lässt sich so etwas dann wohl nur über ein eigenes Modul sinnvoll lösen?

Das lässt sich über ein Modul eigentlich sehr sinnvoll lösen.
Beim Shelly Modul mache ich es ja auch nicht anders.

API Reference
Da zum Beispiel ist der Unterschied /relay oder /roller.

Das dürfte eigentlich in etwas da selbe sein, oder nicht?

Grüße,
Kai

Genau. Das ist ein Fall für ein Modul. Die MQTT Device Instanz soll wirklich nur die Basics abbilden.

paresy

Dann versuche ich es doch einfach mal :slight_smile:

Welches deiner MQTT Module (Tasmota, Shelly, Zigbee, …) könnte ich mir denn am besten mal zum Einstieg ansehen?

Zigbee2MQTT wird wahrscheinlich am übersichtlichsten sein.
Bei Fragen melde dich einfach.

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Heißt das, ihr baut dafür ein Modul? Das wäre Weltklasse :grin: