EMS Bus Gateway - Heizungssteuerung via MQTT - IPSymcon Einbindung/Modul ?

Wir hatten bis die Buderus Therme durch eine WP abgelöst wurde BBQKees zum Auslesen und zum Schreiben im Einsatz.

Das Auslesen funktionierte über ein „MQTT Server Gerät“

Das Schreiben war etwas trickig. Es ging letztendlich über eine eigene Instanz zum Schreiben mit einem Zweizeiler als Skript:

image

<?php

$cmd = IPS_GetObject($_IPS['VARIABLE'])['ObjectIdent'];

RequestAction(51941, json_encode(['cmd'=> $cmd, 'value' => $_IPS['VALUE']]));

Dieses Skript war dann bei den zu schreibenden Variablen als Aktionsskript eingetragen:

Damit lief es einige Jahre problemlos.

1 „Gefällt mir“

Der neue Wert (48) taucht zwar links auf, ändert sich aber nicht.

$topic1 = 'ems-esp/boiler/seltemp/';
$value = '55';

funktioniert, war der Tipp vom aistudio :smiley:

Ob und wie es verarbeitet wird kann man im Webinterface des EMS-ESP unter „Status“ → „System Log“ sehen.

Funktioniert leider auch nicht.
Der MQTT-Explorer sieht zwar die Sendung entsprechend,
der ems-Status sagt aber weiterhin nur:
2026-03-17T14:29:01.635 WARNING 419: [mqtt] MQTT disconnected: TCP
2026-03-17T14:29:03.656 INFO 420: [mqtt] MQTT connected

Der seltemp-Wert ändert sich nicht.

Bei mir funktioniert es

<?php
require('phpMQTT.php');

$server = 'localhost';     // change if necessary
$port = 1885;                     // change if necessary
$username = '';                   // set your username
$password = '';                   // set your password
$client_id = 'phpMQTT-publisher'; // make sure this is unique for connecting to sever - you could use uniqid()

$topic1 = 'ems-esp/boiler/seltemp/';
$value = '55';

$mqtt = new Bluerhinos\phpMQTT($server, $port, $client_id);

$debug = false;
$debug = true;               

if ($value) {
    if ($mqtt->connect(true, NULL, $username, $password)) {
        if ($debug)
            IPS_LogMessage(IPS_GetName($_IPS['SELF']), "MQTT connect, topic " . $topic1 . ", value " . $value);
        // WICHTIG: QoS auf 0, Retain auf false belassen (Commands sollten bei EMS-ESP nicht retained werden)
        $mqtt->publish($topic1, $value, 0, false);
        $mqtt->close();
    } else {
        if ($debug) {
                IPS_LogMessage(IPS_GetName($_IPS['SELF']), "MQTT Time out!");
        }
    }
}

grafik

dann hast du noch ein anderes Problem.

Liegt es vielleicht an meiner Datenstruktur?

Die Struktur in Symcon ist für das Senden über das Script egal, da es direkt an den MQTT Server sendet.

Deine Code Beispiele enthalten unterschiedliche Informationen, bei $value fehlen die Hochkommas und bei $server hast du falsche “Hochkommas” :wink: .

Wenn du einen anderen MQTT Server benutzt als den Symcon-Server, dann eventuell mal ohne username/passwort versuchen, Sonderzeichen im Passwort können auch ein Problem sein und so sollte es aussehen

$server = '192.168.178.36';     // change if necessary
$port = 1885;                     // change if necessary
$username = '';                   // set your username
$password = '';                   // set your password
$client_id = 'phpMQTT-publisher'; // make sure this is unique for connecting to sever - you could use uniqid()

$topic1 = 'ems-esp/boiler/seltemp/';
$value = '55';

wenn der MQTT Server auf deinem Symcon-Server läuft, dann geht localhost, aber mit korrekten Hochkommas

$server = 'localhost';

topic und value funktionieren genau so und unter Status/Systemprotokolle sollte bei ausführen des Scripts auftauchen

2026-03-17T20:11:07.037    INFO 85:     [command]    Called command boiler/seltemp (selected temperature) with value 55

und im Symcon kann es einen Moment dauern, bis der Wert korrekt angezeigt wird.