Chapter 7

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.

10 minutes Last verified: 22.09.2026 DE EN

Check this first

Is your bridge set to two-way?
Chapter 4 offered the option of replacing 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.

One command, then wait
Never send two commands straight after one another. The second overwrites the first, and depending on the combination you end up with something quite different from what you meant.

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.

/config/packages/campmatic.yaml — under mqtt: sensor: yaml Download
    - 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:

/config/packages/campmatic.yaml — under template: yaml Download
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"
Figure 7.1This is how it looks on the dashboard afterwards: the switch for on and off, below it the slider for the target temperature. Heat level and energy mix arrive on their own. Screenshot from the German edition.
Why the slider starts at 5 °C
For the living space the Truma knows 5 to 30 °C. Anything below that means „off" — there is no 3 °C. Send a 3 anyway and the heater switches off, while the card briefly claims it is „heating to 3 °C". That is why the slider starts at 5 and there is a separate switch for turning 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.

It says „Lüftermodus", but it is not a fan
The name is misleading: this is not about a blower, it is the heat level. On most devices the options are Off, Eco, High and Boost.
Careful: the selector switches the heater
Pick a level while the heater is off and it comes on — at 5 °C, the lowest step. Conversely Off switches the heater off entirely, not just a blower.

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.

These entities show the real state text
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
Important for automations
If you build a frost-protection automation, check the operating state — not merely whether the switch says „on". Otherwise you believe a vehicle is being heated while the command never actually arrived.
The CampMatic app keeps switching too
App and Home Assistant both talk to the same heater. There is no precedence — the last command wins. If you automate in Home Assistant, keep two things in mind: schedules in the app and the built-in timer on the control panel carry on independently. And the CampMatic app notifies you on every change of state — including the ones your own automation caused.
Before you move on
  • The bridge is set to both and the program has been restarted
  • number.heating_setpoint_control and switch.heating exist
  • You know that two commands need a pause between them