The Qubino presents itself as a dimmer to the zwave controller and interprets the various levels as commands for the heater, as detailed in the little booklet that came with it. So I first defined an MQTT dimmer:
light:
- platform: mqtt
unique_id: qubino_chambre_etage
name: qubino_chambre_etage
command_topic: "zwave/nodeID_22/38/0/targetValue/set"
state_topic: "zwave/nodeID_22/38/0/currentValue"
state_value_template: "{{ 0 if (value | int) == 0 else 99 }}"
payload_on: 99
payload_off: 0
brightness_scale: 99
brightness_state_topic: "zwave/nodeID_22/38/0/currentValue"
brightness_command_topic: "zwave/nodeID_22/38/0/targetValue/set"
brightness_value_template: "{{ value | int }}"
on_command_type: brightness
optimistic: false
Replace the nodeID_22 part with however you called the Qubino in the zwavejs2mqtt panel, so that the topic gets routed to the right device. That yaml will create a new light entity light.qubino_chambre_etage, you can change its ‘intensity’ from Lovelace to the control levels, just to check if the device works. Later on this entity will stay invisible.
Some heaters will take a few seconds to follow the commands, so be patient once you send a command. It’s not always instant. My (expensive) Sauter heaters are pretty much instant after a command is sent, some cheapo noname thing I bought from Bricodépot the other day takes almost a minute to execute a command. Firmware fail.
Next, I created an input select with the appropriate heater commands:
input_select:
qubino5:
name: Chauffage Chambre Étage
options:
- Confort
- Confort - 1
- Confort - 2
- Eco
- Hors gel
- Arret
That also works over the UI now I think, but I did it in the yaml.
And finally you have to link the input select to the dimmer level with an automation, so that the Qubino level changes automatically to the right level whenever you change the input select option. I’m using pyscript, so you might have to adapt this to whatever you use as automation tool (inline Jinja / NodeRed / etc):
# Qubino percentage to Fil pilote order mapping
levels = { 'Arret' : 1, 'Hors gel' : 15, 'Eco' : 25, 'Confort - 2' : 35, 'Confort - 1' : 45, 'Confort' : 100 }
# Chauffage chambre étage
@state_trigger("input_select.qubino5")
def qubino5():
task.unique("qubino5")
t = input_select.qubino5
p = levels[t] if (t in levels ) else 25
light.turn_on(entity_id = "light.qubino_chambre_etage", brightness_pct = p)
#log.info("ch set to {}".format(p))
And I did not use the additional temp sensor, just the control commands.