Toon bedienen via MQTT / Node Red

Ik gebruik MQTT en Node Red als dashboard voor mijn Homey.
Het lukt mij echter niet om mijn Toon thermostaat in de stellen via het dasboard.

Ik gebruik deze code voor het instellen van de temperatuur.
[{"id":"dcba660e.2ba438","type":"ui_text","z":"38914d4e.f05182","group":"8f596028.dd42d","order":1,"width":3,"height":2,"name":"Ingestelde temperatuur","label":"Ingestelde temperatuur","format":"{{msg.payload}}","layout":"col-center","x":830,"y":640,"wires":[]},{"id":"2f322bfb.18b704","type":"mqtt in","z":"38914d4e.f05182","name":"Ingestelde temperatuur","topic":"homie/homey-topic/toon/target-temperature","qos":"2","datatype":"auto","broker":"d094d3b7.a558a8","nl":false,"rap":true,"rh":0,"x":500,"y":680,"wires":[["dcba660e.2ba438","9ef77f16.c8724"]]},{"id":"9ef77f16.c8724","type":"ui_slider","z":"38914d4e.f05182","name":"Temperature Slider","label":"Temperature Slider","tooltip":"Stel temperatuur in","group":"8f596028.dd42d","order":3,"width":6,"height":2,"passthru":false,"outs":"end","topic":"homie/homey-topic/toon/target-temperature/set","topicType":"msg","min":"16","max":"22","step":"0.5","x":810,"y":720,"wires":[["c8685aa.de57ca8"]]},{"id":"c8685aa.de57ca8","type":"mqtt out","z":"38914d4e.f05182","name":"Set Temp","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"d094d3b7.a558a8","x":1040,"y":720,"wires":[]},{"id":"8f596028.dd42d","type":"ui_group","name":"Left","tab":"70aa66e7.6f3b38","order":1,"disp":true,"width":"6","collapse":false},{"id":"d094d3b7.a558a8","type":"mqtt-broker","name":"Homey MQTT","broker":"192.168.99.99","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""},{"id":"70aa66e7.6f3b38","type":"ui_tab","name":"Climate","icon":"dashboard","order":2,"disabled":false,"hidden":false}]

De input-zijde werkt perfect. Zodra ik de temperatuur verander (op de toon thermostaat, of via Homey > Apparaten) dan veranderd de slider van mijn dasboard vrijwel direct mee naar de ingestelde temperatuur.

Zodra ik de slider zelf aanpas naar een andere temperatuur, dan zie ik in een externe MQTT client dat het bericht is aangekomen in het juiste topic, en dat ook de waarde van dit topic is aangepast naar de nieuw ingestelde temperatuur.

So far, so good, zou je zeggen…
Echter doet Homey niks met de informatie die nu opgeslagen is in het TOON topic op de broker/server.

Dus als ik de slider (topic: homie/homey-topic/toon/target-temperature/set) aanpas van 20 naar 17grdn, dan slaat hij netjes 17grdn op in het topic homie/homey-topic/toon/target-temperature.

Als ik echter in de Homey App naar apparaten ga, dan zie je bij de Toon de ingestelde temperatuur nog steeds op 20 graden staan.

Ik dacht eerst dat dit misschien te maken had met de “standen” van de Toon. Maar ook als ik de toon op manuele modus staat maakt dit geen verschil.

Heeft iemand een idee waarom Homey (of de MQTT Hub) de ingestelde temperatuur niet aanpast?

Wat gebeurt er als je de waarde via de developer console aanpast?
https://tools.developer.homey.app/tools/devices

In dat geval past hij de temperatuur keurig ook, zowel in Homey als op de Toon zelf.

Ik had ook al getest met een simpele flow, om de ingestelde temperatuur aan te passen, en dat werkt ook.

Nadat ik via de developer console de temp op 17grdn heb gezet ziet mijn data er als volgt uit.
Boven de Node RED flow editor
Rechts onder mijn dashboard met slider
Links onder zie je mijn MQTT Client (van een andere PC dan waar de server op draait)

En hier mijn data nadat ik de temperatuur via de slider op 19grn heb gezet.

Dus vervolgens is de nieuwe ingestelde temperatuur netjes aangekomen op de MQTT server, en opgeslagen in het topic, echter zoals hieronder te zien doet Homey niks met deze info en wordt er ook niks doorgegeven aan de Toon.

De /set topic is rechtstreeks gekoppeld aan de ‘capability’. Een bericht sturen op dit topic zou dus (in theorie) dezelfde uitwerking moeten hebben als de aanpassing doen in de Homey developer console.

Stuur je het bericht wel naar …/target-temperature/set?
Heb je geprobeerd de beide apps te herstarten (client & hub)?

Mocht dat niets uithalen, dan is er misschien iets te achterhalen uit de logs van zowel de mqtt cliënt als de hub (via app settings).

Als je de waarde verstuurd hebt naar het commando topic (…/target-temperature/set) en je ziet vervolgens de nieuwe waarde in het state topic terug komen (…/target-temperature), dan lijkt het bericht correct te zijn afgehandeld.

Ik stuur het bericht inderdaad naar /set
En het klopt dat de nieuwe waarde vervolgens in het state topic terug komt.

Het opnieuw opstarten van beiden apps geeft geen ander resultaat.

Waar kan ik die log precies maken?
Ik zie in de app settings in de homey app alleen “maak diagnostisch rapport”, maar zie hier geen mogelijkheid om een actie te loggen oid.

Beide apps hebben een log functionaliteit in de App settings.

Bijzonder…

In beide gevallen is de waarde van de target_temperature aangepast. Het ‘state topic’ luistert namelijk naar een change event van Homey en stuurt bij iedere wijziging een bericht uit.

Ik kan dit nog niet verklaren. Misschien dat er iets te vinden is in de logs. En mogelijk dat de app developer iets kan roepen (als het een community app is).

Zo ziet de MQTT Hub log er uit nadat ik 2 keer te temperatuur heb aangepast op het dashboard.

En zo ziet de MQTT Client log er uit na een paar keer schuiven.

In mijn dasboard heb ik ook knoppen om de “stand” van de toon aan te passen.

Die knoppen werken wel!
Lijkt dus geen interface probleem te zijn.

De ingestelde temperatuur komt nu binnen als msg.payload
In het topic van de Toon kan ik zien dat de waarde van het type “float” is.

De nieuwe waarde wordt ingesteld door de ingebouwde slider van het homey dashboard.
Kan het zijn dat het dashboard de waarde niet als “float” maar “Integer” uit stuurt?

En een float is toch gewoon een “number”?

Probleem is opgelost!

In de instellingen van de slider heb ik target/set gekozen als topic. Maar hij gebruikt dit ook als input topic om de slider aan te passen als deze (elders) aangepast is.

Ik merkte daarbij ineens op dat hij de “target” wel aanpastte, maar de “set” niet.
Ik heb nu de “/set” weggehaald uit de eigenschappen van de slider.

En vervolgens in de MQTT Ouput eigenschappen opnieuw het “te posten” topic gedefineerd met het “/set” commando er achter.

Nu werkt het wel. :slight_smile:
In ieder geval bedankt voor de hulp en het meedenken!!

1 Like