HM-LC-SW1-FM state per MQTT setzten

Hallo zusammen,

derzeit kämpfe ich damit den (Schalt-) Status meines Homematic Aktors per MQTT zu setzten. Folgendes habe ich versucht…

Mein Aktor hat die ID 3, deshalb verwende ich das Topic:
homegear/rpi/set/3/1/state

Als Nachricht habe ich folgendes probiert (natürlich einzeln):
{ "value": true }
{ "value": "true" }
true

Aber mein Aktor schaltet nicht.

By the way wenn ich den Aktor mit einem Taster triggere dann bekomme ich Nachrichten über den State über den MQTT.

Hey @Weinschenk,

nutz doch bitte die Formatierungsfunktion des Forums. Du kannst deinen Beitrag nachträglich editieren…
grafik


Das mit dem set-Topic ist in jedem fall schon mal richtig. Zeig doch bitte mal deine mqtt.conf. Welche Version von Homegear setzt du ein?

Ich hatte vor längerem mal grob beschrieben, wie das mit dem MQTT und Homegear funktioniert: https://allgeek.de/2017/07/09/homematic-mit-node-red-ueber-homegear/

Aus meiner node-red Installation setze ich die Schalter folgendermaßen:

var groups = global.get("heating_groups");
var pre = 'homegear/0/set/';
var post = '/1/STATE';
var hm_vars = global.get("homegear_global_vars");

groups.forEach(function(group){
    var status = 0;
    group.forEach(function(id){
        device_id = id;
        msg.group_id = global.get("heater_" + groups.indexOf(group));
        global_sT = global.get(id + '_SET_TEMPERATURE');
        global_cT = global.get(id + '_ACTUAL_TEMPERATURE');
        global_VS = global.get(id + '_VALVE_STATE');
        global_ur = global.get(id + '_UNREACH');
        
        msg.topic = (pre + global.get("heater_" + groups.indexOf(group)) + post);
        
        if(global_VS > 6 && global_ur !== true){
        //msg.payload = 'true';
            status = status + 1;
        }
    });
    if(status > 0){
        msg.payload = 'true';
    } else {
        msg.payload = 'false';
    }
    msg.info = status;
    node.send(msg);
});

Also in homegear/0/set/3/1/STATE payload:true publishen. Ich denke dein Problem liegt einfach nur bei “value”. Ersetz das durch payload und es müsste funktionieren.

Also zumindest wenn es hier kein Schreibfehler ist, liegt das Problem wohl daran, dass die Variable STATE (GROSSgeschrieben und nicht state (kleingeschrieben) heißt. Folglich muss Du nach homegear/rpi/set/3/1/STATE publishen. Dann geht es auch mit { "value": true } oder einfach nur true als Payload.

2 Likes

Kannst du bitte mal das komplette msg-object zeigen, was aus deinem function-node raus kommt?

Und wie gesagt, die mqtt.conf wäre hilfreich…

Sorry, ich bin länger nicht dazu gekommen, mich dem ganzen Anzunehmen.

@DasKleingedruckte war ein Typo, ich habe es schon mit ‘STATE’ probiert.

@pmayer anbei die mqtt config. mqtt.zip (1,5 KB)

Ich teste das Ganze gerade direkt von eine MQTT Client aus. als Payload habe ich schon das JSON Objeckt und auch den Plain Wert getestet.

Wenn ich den Aktor per Taster auslöse bekomme ich die Nachricht auch über auf den MQTT…
{“STATE”:true,“WORKING”:false}

(Topic ist homegear/rpi/set/3/1/STATE)

Hallo @Weinschenk,

du kannst einmal Loglevel 5 aktivieren und schauen, ob beim Setzen des Topics überhaupt etwas in Homegear ankommt. Poste hier mal den entsprechenden Logausschnitt.

Viele Grüße

Sathya

Das homegear.log spuckt folgendes aus:

09/30/18 08:28:38.454 Debug: MQTT packet received: 3020001A686F6D65676561722F7270692F7365742F392F312F535441544574727565
09/30/18 08:28:38.454 MQTT Client: Debug: Packet received: 3020001A686F6D65676561722F7270692F7365742F392F312F535441544574727565
09/30/18 08:28:38.455 Info: MQTT RPC call received. Method: setValue

Wenn ich Fantasiewerte schicke sehe ich es auch:
09/30/18 08:44:25.591 MQTT Client: Error in file MQTT/Mqtt.cpp line 632 in function void Mqtt::processPublish(std::vector<char>&): Tried to decode invalid number. Payload was: 62756D

Hallo @Weinschenk,

sorry für die späte Antwort. Das sieht soweit eigentlich gut aus. Hast du noch die nächsten paar Logzeilen auf Loglevel 5 für mich? Der RPC-Server müsste eigentlich noch die an setValue übergebenen Parameter loggen. Funktioniert auf der Konsole folgendes:

homegear -e rc '$hg->setValue(3, 1, "STATE", true);'

?

Viele Grüße

Sathya