MQTT und Homegear Variablen

Hallo,

ich habe MQTT mit Mosquitto als Broker am Laufen.

Was mich als erstes wundert ist, dass entgegen der Dokumentation (https://doc.homegear.eu/data/homegear/communication_protocols.html#variable-changes) die Infos im Topic …/event/… ankommen und nicht in den Topics …/plain/…, …/json/… und …/jsonobj/…:

homegear/1234-5678-9abc/event/6/2/POWER [0]
homegear/1234-5678-9abc/event/6/2/VOLTAGE [230.3]
...

Ich habe nun eine Variable in Homegear angelegt:

was auch ein entsprechendes Topic erzeugt:

homegear/1234-5678-9abc/event/0/-1/Kinomode [true]

Und auch mein OpenHab reagiert entsprechend der Items-Konfiguration (Switch ändert seinen Zustand):

Switch TestKinomode {mqtt=">[mosquitto:homegear/1234-5678-9abc/set/0/-1/Kinomode:command:*:MAP(mqtt.map)],
                           <[mosquitto:homegear/1234-5678-9abc/event/0/-1/Kinomode:state:MAP(mqtt.map)]" }

mqtt.map sieht folgendermaßen aus:

[false]=OFF
[true]=ON
OFF=[false]
ON=[true]

Nur habe ich beim Setzen von OpenHab Probleme. Das Topic, welches bei Mosquitto ankommt sieht richtig aus:

homegear/1234-5678-9abc/set/0/-1/Kinomode [false]

Doch Homegear bekommt davon nichts mit. Ich bekomme für die Variable immer nur den Wert 1:

homegear -e rc 'print($hg->getSystemVariable("Kinomode"));'
1

Hat jemand eine Idee, warum Homegear nicht auf das Topic reagiert?

Hi,

installiert bitte mal homegear 0.7. Die Doku betrifft leider schon die neue Version.

“set” ist ein rein schreibendes Topic. Wenn du unabhängig von homegear auf mqtt kommunizieren willst, kannst du dir deine eigenen Topicstruktur ausdenken. Zb “szenen/wz/kino/”.

so long,
p

Danke für den Tipp. Ich baue homegear aus dem git-Repository. Ist der Development Branch die Version 0.7? Das letzte Tag ist Version 0.6.7: github.com/Homegear/Homegear/releases

Ah, die neusten Änderungen sind im Master. Ich werde es mal neu compilieren, bin mir nicht sicher, wie alt mein Build ist.
Aber eine offizielle Version 0.7.0 existiert noch nicht?

“Offiziell” nur über die Nightlies: homegear.eu/index.php/Downloads#Nightlies

Habe nun ein Update durchgeführt. Die Topics sind nun richtig.

Habe aber weiterhin das Problem, dass Homegear nicht auf das Setzen der Variable reagiert.
Wenn ich über MQTT Set aufrufe würde ich gleich danach ein Publish von Homegear über die aktualisierte Variable erwarten. Es kommt aber nichts:

homegear/1234-5678-9abc/set/0/-1/Kinomode false

Homegear bekommt aber was mit:

RPC Server (Port 2001): Info: RPC Method called: setValue Parameters: (Integer) 0 (Integer) -1 (String) Kinomode (Boolean) 0

Hallo avanc,

erst einmal sorry für die sehr späte Antwort. Mit Systemvariablen und Metadaten ging “set” auch noch nicht. Da hättest du “setSystemVariable” aufrufen müssen. Jetzt aber habe ich die Unterstützung eingebaut. Ist im nächsten Nightly.

Viele Grüße

Sathya

Danke für den Hinweis. Habe heute die aktuellste Version compiliert. Aber ich sehe immer noch nicht das erwartete verhalten :-/

mosquitto_pub -t "homegear/1234-5678-9abc/set/0/-1/Kinomode" -m true

Die Nachricht wird von Homegear interpretiert:
10/07/16 21:45:05.989 Info: MQTT RPC call received. Method: setValue
10/07/16 21:45:05.989 RPC Server (Port 2001): Info: RPC Method called: setValue Parameters:
(Integer) 0
(Integer) -1
(String) Kinomode
(Boolean) 1

Jedoch sendet Homegear danach keine MQTT-Botschaft zurück:

homegear/1234-5678-9abc/set/0/-1/Kinomode true

Eigentlich würde ich sowas erwarten:

homegear/1234-5678-9abc/set/0/-1/Kinomode true
homegear/1234-5678-9abc/json/0/-1/Kinomode [true]
homegear/1234-5678-9abc/plain/0/-1/Kinomode true
homegear/1234-5678-9abc/jsonobj/0/-1/Kinomode {"value":true}

Warum published Homegear nicht, wenn die Variable über MQTT geändert wurde? Wenn ich es über Homegear mache, kommen die erwarteten Nachrichten:

homegear -e rc '$hg->setSystemVariable("Kinomode", true);'
> homegear/1234-5678-9abc/json/0/-1/Kinomode [true]
> homegear/1234-5678-9abc/plain/0/-1/Kinomode true
> homegear/1234-5678-9abc/jsonobj/0/-1/Kinomode {"value":true}

Hallo @avanc,

wie ist deine Versionsnummer? Hast du die dev-Branch kompiliert? Bei mir sieht das Ganze so aus:

10/07/16 22:20:09.916 Info: MQTT RPC call received. Method: setSystemVariable
10/07/16 22:20:09.916 RPC Server (Port 2001): Info: RPC Method called: setSystemVariable Parameters:
(String) Kinomode
(Boolean) 1
10/07/16 22:20:09.918 Info: Publishing topic homegear/1234-5678-9abc/json/0/-1/Kinomode
10/07/16 22:20:09.919 Info: Publishing topic homegear/1234-5678-9abc/plain/0/-1/Kinomode
10/07/16 22:20:09.919 Info: Publishing topic homegear/1234-5678-9abc/jsonobj/0/-1/Kinomode

Es sollte also eigentlich funktionieren.

Viele Grüße

Sathya

homegear -v gibt folgende Infos:

Git commit SHA of libhomegear-base: -
Git branch of libhomegear-base:     -
Git commit SHA of Homegear:         332158d2060e01ad5c060512337e3f4797875ee1

Git branch of Homegear:             master

Compiliert aus dem Git. Mich wundert, warum libhomegear-base keinen SHA hat.

Mit welchem Kommando verschickst Du das MQTT-Paket?
Bei Dir steht

Info: MQTT RPC call received. Method: setSystemVariable 

bei mir

Info: MQTT RPC call received. Method: setValue

Hallo @avanc,

du kompilierst aus dem Master-Zweig. Das ist der “stable”-Zweig. Kompilier aus dem dev-Zweig, dann geht es. Deswegen steht bei dir auch “setValue” und nicht “setSystemVariable”. Den SHA siehst du nicht, weil dafür die Repositories in einer bestimmten Art in der Verzeichnisstruktur abgelegt werden müssen.

Viele Grüße

Sathya

Besten Dank!
Jetzt läuft alles wie erwartet.