Operating the heater
Now the heater itself — setting the temperature, switching it on and off. This is simpler than the hot water, because the heater uses an ordinary temperature range. There is one rule to follow, though, or you end up with something other than you intended.
Check this first
both with in in the bridge file — readings then only flow towards you and Home Assistant cannot operate anything. If you did that, change it back now:topic # both 0 campmatic/<GERAETE_ID>/ campmatic/<GERAETE_ID>/Then restart the Mosquitto program. Without this, nothing in this chapter has any effect — and you get no error message either.
The rule that matters
Your box cannot talk to the Truma whenever it likes. It collects commands and passes them on as soon as the control panel asks for them. That takes a moment — and during that time every command lands in the same batch.
After each command, wait until the state changes in Home Assistant — usually half a minute. Only then send the next.
In practice: the temperature alone is enough to switch on. Your heater comes on by itself, no separate switch-on command is needed — and it would overwrite the temperature you just set.
Creating the entities
Append the first block under your existing mqtt: sensor:, the other two under template:. Replace <GERAETE_ID> with your device number.
- name: "Heating Mode"
unique_id: campmatic_<GERAETE_ID>_heiz_mode
state_topic: "campmatic/<GERAETE_ID>/climate/truma_heizung/mode/state"
entity_category: diagnostic
expire_after: 2700
availability_topic: "campmatic/<GERAETE_ID>/status"
payload_available: "online"
payload_not_available: "offline"
And under template: — if you already have that section from chapter 6, these two simply join it:
template:
- number:
- name: "Heating Setpoint Control"
unique_id: campmatic_<GERAETE_ID>_heiz_ziel
unit_of_measurement: "°C"
device_class: temperature
icon: mdi:thermometer
min: 5
max: 30
step: 1
# With the heater off there is no setpoint. The slider then reads 5 —
# the lowest step the Truma knows.
state: >-
{% set s = states('sensor.heating_setpoint') %}
{{ 5 if s in ['unknown', 'unavailable'] else s }}
set_value:
# ONE command. The temperature switches the heater on by itself.
- action: mqtt.publish
data:
topic: "campmatic/<GERAETE_ID>/climate/truma_heizung/target_temperature/command"
payload: "{{ value | int }}"
- switch:
- name: "Heating"
unique_id: campmatic_<GERAETE_ID>_heiz_schalter
icon: mdi:radiator
state: "{{ states('sensor.heating_mode') == 'heat' }}"
availability: >-
{{ states('sensor.heating_mode') not in ['unavailable', 'unknown'] }}
turn_on:
# Switches on with whatever temperature the slider shows.
- action: mqtt.publish
data:
topic: "campmatic/<GERAETE_ID>/climate/truma_heizung/target_temperature/command"
payload: "{{ states('number.heating_setpoint_control') | int(20) }}"
turn_off:
- action: mqtt.publish
data:
topic: "campmatic/<GERAETE_ID>/climate/truma_heizung/mode/command"
payload: "off"
Then check the configuration and restart Home Assistant.
Heat level
Besides the temperature there is the heat level. It decides how hard the Truma works to reach the temperature you set. You do not need to create anything for it — the selector arrives on its own and is called select.<ENTITY>_truma_luftermodus.
The rule from above applies here too: do not send temperature and heat level straight after one another, or the level selection overwrites your temperature with 5 °C.
Did it work?
A command can vanish without effect — for instance when the Truma control panel is not answering at that moment. Home Assistant does not notice and shows the new value regardless. So do not rely on what the slider says.
sensor.<ENTITY>_truma_betriebsstatus what the heater is actually doing
sensor.<ENTITY>_truma_fehlercode 0 = all good
binary_sensor.<ENTITY>_truma_heizung_aktiv currently running
binary_sensor.<ENTITY>_truma_cp_plus_alive control panel responding
- The bridge is set to
bothand the program has been restarted number.heating_setpoint_controlandswitch.heatingexist- You know that two commands need a pause between them