MQTT Discovery Home Assistant unknown

Hey hey,

ich habe meinen Viessmann-Gasbrennwertkessel über einen Optolink-Switch mittels Raspberry Pi und MQTT in Home Assistant eingebunden. Das funktioniert grundsätzlich auch: Ich kann Werte lesen und schreiben.
Allerdings komme ich bei der Einstellung des Betriebsmodus nicht weiter – hier wird mir nur „unknown“ zurückgegeben.

MQTT Discovery:

{
  "domain": "select",
  "name": "betriebsart_heizung",
  "unique_id": "betriebsart_heizung",
  "icon": "mdi:fire",
  "state_topic": "betriebsart_heizung",
  "command_topic": "cmnd",
  "options": ["aus", "warmwasser", "heizung_und_ww"],
  "retain": true,
  "qos": 0,
  "availability_topic": "LWT",
  "payload_available": "online",
  "payload_not_available": "offline",
  "state_value_template": "{{ 'aus' if value == '0' else 'warmwasser' if value == '1' else 'heizung_und_ww' if value == '2' else 'unknown' }}",
  "command_template": "{% if value == 'aus' %}w;0x2323;1;0{% elif value == 'warmwasser' %}w;0x2323;1;1{% elif value == 'heizung_und_ww' %}w;0x2323;1;2{% endif %}"
},

Der MQTT-Auszug aus Home Assistant zeigt auch den korrekten Payload. Daher vermute ich eher einen Fehler im state_value_template oder etwas in dieser Richtung.

Vitotronic H01C betriebsart_heizung (select.vito_betriebsart_heizung)
MQTT discovery data:
Topic: homeassistant/select/betriebsart_heizung/config
Payload
object_id: vito_betriebsart_heizung
unique_id: betriebsart_heizung
device:
  identifiers:
    - vitotronic_h01c
  model: VScot H01C
  manufacturer: Viessmann
  name: Vitotronic H01C
availability_topic: vito/LWT
state_topic: vito/betriebsart_heizung
icon: mdi:fire
command_topic: vito/cmnd
options:
  - aus
  - warmwasser
  - heizung_und_ww
retain: true
qos: 0
payload_available: online
payload_not_available: offline
state_value_template: >-
  {{ 'aus' if value == '0' else 'warmwasser' if value == '1' else
  'heizung_und_ww' if value == '2' else 'unknown' }}
command_template: >-
  {% if value == 'aus' %}w;0x2323;1;0{% elif value == 'warmwasser'
  %}w;0x2323;1;1{% elif value == 'heizung_und_ww' %}w;0x2323;1;2{% endif %}
name: betriebsart_heizung
Subscribed topics:
vito/LWT
1 zuletzt empfangene Nachricht
vito/betriebsart_heizung
10 zuletzt empfangene Nachrichten
Received 00:43:29
QoS: 0
Payload: 0
Received 00:43:59
QoS: 0
Payload: 0
Received 00:44:29
QoS: 0
Payload: 0
Received 00:44:59
QoS: 0
Payload: 0
Received 00:45:29
QoS: 0
Payload: 0

Wäre klasse, wenn ich hier von dem ein oder anderen Experten Unterstützung bekommen würde. Danke

Ich würde das state_value_template so schreiben:

{% if value == '0'  %} 'aus' {% elif value == '1' %} 'warmwasser' {% elif value == '2' %} 'heizung_und_ww' {% else %} 'unknown' {% endif %}

Edit: Leerzeichen und Tippfehler beseitigt

vielen Dank für deine Antwort, leider bleibt der Status auf unknown.

state_value_template: >-
  {% set v = value | trim | int %}
  {{ 'aus' if v == 0 else 'warmwasser' if v == 1 else 'heizung_und_ww' if v == 2 else 'unknown' }}
command_template: >-
  {% set s = value | trim %}
  {% if s == 'aus' %}w;0x2323;1;0
  {% elif s == 'warmwasser' %}w;0x2323;1;1
  {% elif s == 'heizung_und_ww' %}w;0x2323;1;2
  {% endif %}

Dann musst du dich Schritt für Schritt mit dem if/else annähern. Wenn du das value direkt ausgibst, stehen dann die Werte drin, nach denen per if/else unterschieden wird?