[gelöst] Alexa + homebridgeMapping für Steuerung einer Klimaanlage mit ON/OFF

Begonnen von fireball, 29 Juli 2025, 14:23:38

Vorheriges Thema - Nächstes Thema

fireball

Moinsen Freunde,

ich versuche gerade meine Klimaanlage, welche über MQTT eingebunden ist mit Alexa zu steuern.
Ich habe schon div. Dinge hier gelesen, komme aber nicht 100% an mein Ziel.

Meine Klimaanalge ist als genericDeviceType=thermostat eingebunden mit einem homebridgeMapping.
Laut AlexaSeite gibt es folgende Einstellungen.

Das ist mein Device:


Internals:
   CID        klimaanlage_dc4f222c8068
   DEF        klimaanlage_dc4f222c8068
   FUUID      6824d5e0-f33f-0804-e91e-f95511439fc1fe47
   IODev      MyBroker
   LASTInputDev MyBroker
   MSGCNT     1548
   MyBroker_CONN MyBroker_192.168.178.33_60168
   MyBroker_MSGCNT 1548
   MyBroker_TIME 2025-07-29 13:48:06
   NAME       Klimaanlage
   NR         715
   STATE      online
<br>
auto
   TYPE       MQTT2_DEVICE
   eventCount 632
   READINGS:
     2025-07-29 12:43:18   IODev           MyBroker
     2025-05-21 11:48:49   act_t           klimaanlage/climate/mitsubishi_klimaanlage/action/state
     2025-07-29 13:32:35   auto_sub_mode   AUTO_LEADER
     2025-07-29 13:32:35   avty_t          klimaanlage/status
     2025-07-29 13:32:34   board           d1_mini
     2025-07-29 13:32:35   bssid           3C:A6:2F:5C:16:45
     2025-07-29 13:32:35   cmd_t           klimaanlage/button/restart_mitsubishi_klimaanlage/command
     2025-05-21 11:48:49   curr_temp_t     klimaanlage/climate/mitsubishi_klimaanlage/current_temperature/state
     2025-07-29 13:48:00   current_temperature 21.5
     2025-05-19 08:31:24   debug           ␛[0;32m[I][CN105:010]: setupUART() with baudrate  2400 ␛[0m
     2025-07-29 13:32:35   dev_cla         restart
     2025-07-29 13:32:35   dev_cns_1_1     mac
     2025-07-29 13:32:35   dev_cns_1_2     dc4f222c8068
     2025-07-29 13:32:35   dev_ids         dc4f222c8068
     2025-07-29 13:32:35   dev_mdl         d1_mini
     2025-07-29 13:32:35   dev_mf          Espressif
     2025-07-29 13:32:35   dev_name        Mitsubishi_Klimaanlage
     2025-07-29 13:32:35   dev_sw          2025.4.2 (May 21 2025, 15:01:46)
     2025-07-29 13:32:35   ent_cat         config
     2025-07-29 13:32:35   esphome_version 2025.4.2 May 21 2025, 15:01:46
     2025-07-29 13:48:00   fan_mode        low
     2025-05-21 11:48:49   fan_mode_cmd_t  klimaanlage/climate/mitsubishi_klimaanlage/fan_mode/command
     2025-05-21 11:48:49   fan_mode_stat_t klimaanlage/climate/mitsubishi_klimaanlage/fan_mode/state
     2025-05-21 11:48:49   fan_modes_1     auto
     2025-05-21 11:48:49   fan_modes_2     low
     2025-05-21 11:48:49   fan_modes_3     medium
     2025-05-21 11:48:49   fan_modes_4     high
     2025-05-21 11:48:49   fan_modes_5     middle
     2025-05-21 11:48:49   fan_modes_6     quiet
     2025-07-29 13:32:34   friendly_name   Mitsubishi_Klimaanlage
     2025-07-29 13:32:35   ic              mdi:restart
     2025-07-29 13:32:35   ip              192.168.178.33
     2025-07-29 13:32:34   mac             dc4f222c8068
     2025-05-21 11:48:49   max_hum         99
     2025-05-21 11:48:49   max_temp        31
     2025-05-21 11:48:49   min_hum         30
     2025-05-21 11:48:49   min_temp        15
     2025-07-29 13:48:00   mode            auto
     2025-05-21 11:48:49   mode_cmd_t      klimaanlage/climate/mitsubishi_klimaanlage/mode/command
     2025-05-21 11:48:49   mode_stat_t     klimaanlage/climate/mitsubishi_klimaanlage/mode/state
     2025-05-21 11:48:49   modes_1         auto
     2025-05-21 11:48:49   modes_2         off
     2025-05-21 11:48:49   modes_3         cool
     2025-05-21 11:48:49   modes_4         heat
     2025-05-21 11:48:49   modes_5         fan_only
     2025-05-21 11:48:49   modes_6         dry
     2025-07-29 13:32:35   name            Restart Mitsubishi_Klimaanlage
     2025-07-29 13:32:34   network         wifi
     2025-05-21 11:48:48   ops_1           AUTO
     2025-05-21 11:48:48   ops_2           ↑↑
     2025-05-21 11:48:48   ops_3           ↑
     2025-05-21 11:48:48   ops_4           —
     2025-05-21 11:48:48   ops_5           ↓
     2025-05-21 11:48:48   ops_6           ↓↓
     2025-05-21 11:48:48   ops_7           SWING
     2025-07-29 13:48:00   outside_temperature 20.0
     2025-07-29 13:32:34   platform        ESP8266
     2025-07-29 13:32:34   port            6053
     2025-05-21 11:48:49   precision       0.5
     2025-07-29 13:32:35   ssid            WLAN24
     2025-07-29 13:32:35   stage           GENTLE
     2025-05-21 11:48:48   stat_cla        measurement
     2025-05-21 11:48:49   stat_t          klimaanlage/sensor/auto_sub_mode/state
     2025-07-29 13:48:00   state           118.9
     2025-07-29 13:32:35   status          online
     2025-07-29 13:32:35   sub_mode        NORMAL
     2025-07-29 13:48:00   swing_mode      vertical
     2025-05-21 11:48:49   swing_mode_cmd_t klimaanlage/climate/mitsubishi_klimaanlage/swing_mode/command
     2025-05-21 11:48:49   swing_mode_stat_t klimaanlage/climate/mitsubishi_klimaanlage/swing_mode/state
     2025-05-21 11:48:49   swing_modes_1   off
     2025-05-21 11:48:49   swing_modes_2   both
     2025-05-21 11:48:49   swing_modes_3   vertical
     2025-05-21 11:48:49   swing_modes_4   horizontal
     2025-07-29 13:48:00   target_temperature 20
     2025-05-21 11:48:49   temp_cmd_t      klimaanlage/climate/mitsubishi_klimaanlage/target_temperature/command
     2025-05-21 11:48:49   temp_stat_t     klimaanlage/climate/mitsubishi_klimaanlage/target_temperature/state
     2025-05-21 11:48:49   temp_step       1
     2025-05-21 11:48:49   temp_unit       C
     2025-07-29 13:32:35   uniq_id         ESPbuttonrestart_mitsubishi_klimaanlage
     2025-05-21 11:48:48   unit_of_meas    °C
     2025-07-29 13:47:22   uptime          46820
     2025-07-29 13:32:34   version         2025.4.2
     2025-07-29 13:48:06   wifi_signal     -47
Attributes:
   alexaName  Klimaanlage
   autocreate 0
   devStateIcon online:FS20.on offline:FS20.off heat:FS20.off@red cool:FS20.off@blue fan_only:Ventilator_wind
   event-on-change-reading .*
   genericDeviceType thermostat
   homebridgeMapping CurrentTemperature=current_temperature
TargetTemperature=Temperatur::Temperatur,minValue=19,maxValue=30,minStep=1
CurrentHeatingCoolingState=mode,values=off:OFF;;heat:HEAT;;cool:COOL;;auto:AUTO
TargetHeatingCoolingState=Betrieb_Modus,values=off:OFF;;HEAT:heat;;COOL:cool;;auto:AUTO,cmds=OFF:Betrieb_Modus+off;;HEAT:Heizen;;COOL:Kühlen;;AUTO:Betrieb_Modus+auto
   icon       sani_heating_heatpump
   readingList klimaanlage_dc4f222c8068:klimaanlage/status:.* status
klimaanlage_dc4f222c8068:esphome/discover/klimaanlage:.* { json2nameValue($EVENT) }
klimaanlage_dc4f222c8068:klimaanlage/climate/mitsubishi_klimaanlage/mode/state:.* mode
klimaanlage_dc4f222c8068:klimaanlage/climate/mitsubishi_klimaanlage/target_temperature/state:.* target_temperature
klimaanlage_dc4f222c8068:klimaanlage/climate/mitsubishi_klimaanlage/action/state:.* state
klimaanlage_dc4f222c8068:klimaanlage/climate/mitsubishi_klimaanlage/fan_mode/state:.* fan_mode
klimaanlage_dc4f222c8068:klimaanlage/climate/mitsubishi_klimaanlage/swing_mode/state:.* swing_mode
klimaanlage_dc4f222c8068:klimaanlage/climate/mitsubishi_klimaanlage/current_temperature/state:.* current_temperature
klimaanlage_dc4f222c8068:klimaanlage/sensor/bssid/state:.* bssid
klimaanlage_dc4f222c8068:klimaanlage/sensor/ssid/state:.* ssid
klimaanlage_dc4f222c8068:klimaanlage/sensor/ip/state:.* ip
klimaanlage_dc4f222c8068:klimaanlage/sensor/wifi_signal/state:.* wifi_signal
klimaanlage_dc4f222c8068:klimaanlage/sensor/input_power/state:.* state
klimaanlage_dc4f222c8068:klimaanlage/sensor/energy_usage/state:.* state
klimaanlage_dc4f222c8068:klimaanlage/sensor/outside_air_temp/state:.* outside_temperature
klimaanlage_dc4f222c8068:klimaanlage/sensor/stage/state:.* stage
klimaanlage_dc4f222c8068:klimaanlage/sensor/sub_mode/state:.* sub_mode
klimaanlage_dc4f222c8068:klimaanlage/sensor/auto_sub_mode/state:.* auto_sub_mode
klimaanlage_dc4f222c8068:klimaanlage/sensor/uptime/state:.* uptime
klimaanlage_dc4f222c8068:klimaanlage/sensor/esphome_version/state:.* esphome_version
##klimaanlage_dc4f222c8068:klimaanlage/select/vertical_vane/state:.* state
##klimaanlage_dc4f222c8068:klimaanlage/debug:.* debug

klimaanlage_dc4f222c8068:homeassistant/button/klimaanlage/restart_mitsubishi_klimaanlage/config:.* { json2nameValue($EVENT) }

   room       FLUR
   setList    Aus:noArg klimaanlage/climate/mitsubishi_klimaanlage/mode/command off
Heizen:noArg klimaanlage/climate/mitsubishi_klimaanlage/mode/command heat
Ventilator:noArg klimaanlage/climate/mitsubishi_klimaanlage/mode/command fan_only
Trocknen:noArg klimaanlage/climate/mitsubishi_klimaanlage/mode/command dry
Kühlen:noArg klimaanlage/climate/mitsubishi_klimaanlage/mode/command cool
Betrieb_Modus:off,heat,fan_only,dry,cool,auto klimaanlage/climate/mitsubishi_klimaanlage/mode/command $EVTPART1
Temperatur:slider,19.00,1.00,30.00 klimaanlage/climate/mitsubishi_klimaanlage/target_temperature/command $EVTPART1
Ventilator_Modus:auto,quiet,low,medium,high klimaanlage/climate/mitsubishi_klimaanlage/fan_mode/command $EVTPART1
Swing_Modus:AUTO,↑↑,↑,—,↓,↓↓,SWING klimaanlage/select/vertical_vane/command $EVTPART1

   stateFormat status
<br>
mode
   verbose    0

Mir macht der TargetHeatingCoolingState Probleme. Das Auslesen der aktuellen Temperatur, das setzen einer Zieltemperatur und der aktuelle Status geht.

Am Anfang hatte ich keinen "Betrieb_Modus" und konnte daher bei TargetHeatingCoolingState auch kein Readings als Mapping eintragen und weiß auch nicht, ob das leer bleiben kann!?

Ich wollte die verschiedenen Modi direkt schalten, also set Klimanalage Heizen/Kühlen/Aus .
Das hat aber irgendwie nicht geklappt, daher habe ich dann noch "Betrieb_Modus" als set eingebaut, sodass ich das Mapping komplett anlegen konnte:
TargetHeatingCoolingState=Betrieb_Modus,values=off:OFF;;HEAT:heat;;COOL:cool;;auto:AUTO,cmds=OFF:Betrieb_Modus+off;;HEAT:Heizen;;COOL:Kühlen;;AUTO:Betrieb_Modus+auto
Wenn ich Alexa sage geh auf Heizen/Kühlen, dann wird der Modus geschaltet.
Wenn ich Aus sage, sagt Alexa, dass das Gerät das nicht unterstützt (in der Alexa APP ist das Device als Typ Klimaanlage eingerichtet)
Wenn ich auf Auto gehe, wird auto gesetzt, aber sofort wieder in Kühlen geschaltet?!

1. Größtes Problem ist also Aus! Warum geht das nicht?!
2. Wozu sind die values, wenn die cmds ausgeführt werden, egal was da steht?!
3. Kann man auch 2 Befehle bei den cmds angeben?! Also zB bei Heat:Heizen;Temperatur+25 ? Also stelle auf Heizen und die Temperatur auf 25 Grad?!

VG+Danke
René

passibe

Das ist jetzt vielleicht keine super vollständige Antwort (habe selbst leider kein Klimagerät eingebunden dessen HomebridgeMapping ich teilen kann), aber vielleicht bringt dich das etwas näher ans Ziel:

Zuerst mal brauchst du da schon ein Reading, das existiert. Einfach das nicht existierende Betrieb_Modus nehmen funktioniert nicht. Vermutlich passt es, wenn du auch da einfach mode nimmst.

Den Link zur Amazon-Developer-Seite für die Values, die es gibt, hattest du ja schon gefunden. Ich habe die vorsichtige Vermutung, dass das aber auch ohne values=-Teil funktioniert, weil das ja nur Groß-/Kleinschreibung betrifft und ich meine, dass alexa-fhem schlau genug ist, das direkt richtig zu parsen. Das müsstest du dann aber im Log nachlesen, ob das richtig geparst wird (siehe dazu unten).



Für die cmd=-Syntax bitte hier lesen: https://github.com/justme-1968/homebridge-fhem?tab=readme-ov-file#homekit---fhem-parameters
(es geht ja darum, dass alexa etwas zu FHEM übergibt, deshalb ist der Teil "Homekit -> FHEM" relevant)

Zwei Kommandos gleichzeitig geht glaube ich nicht. Das dann vielleicht über die setList lösen und dort ein extra-Kommando für alexa erstellen, in dem zwei MQTT-Befehle abgesendet werden (ich glaube, das geht; aber nicht sicher bzw. weiß aus dem Kopf jetzt nicht wie – im Zweifel richtet es ein notify/DOIF, das bei Statusänderung off -> heat direkt die richtige Temperatur einstellt).



Generell eignet sich zum debuggen aber das alexa-fhem Log. Wenn du einen reload oder restart von alexa-fhem ausführst wird dir nämlich genau angezeigt, welche Characteristics wie geparst werden und was welche Werte bedeuten (das ist die Richtung FHEM -> Alexa bzw. im GitHub-README "FHEM -> Homekit"). Erstmal, wie oben beschrieben, values= weglassen und schauen was passiert. Falls es nicht passt, values= so lange anpassen, bis da was sinnvolles rauskommt.

Zum debuggen der Gegenrichtung (Alexa -> FHEM bzw. im GitHub-README "Homekit -> FHEM") kannst du dann einfach den jeweiligen Befehl aus Alexa absenden und siehst dann an der URL im alexa-fhem-Log welcher set-Befehl an FHEM übermittelt wird. Dann cmds= so lange anpassen, bis es passt.

fireball

Hi,

vielen Dank für deine Rückmeldung... Was soll ich sagen... ich glaube an den Punkte war ich überall schon...
Ich habe nochmal den "Betriebs_Modus" gegen mode getauscht. Ich hatte das eh nur eingeführt, weil ich gelesen hatte, dass TargetHeatingCoolingState einen Bezug braucht, so wie bei "TargetTemperature [Temperatur]" und daher dann mit div. Kombinationen rumgespielt.

Egal was ich aktuell mache... Aus geht nicht.
Im Alexa Log steht:

[14.8.2025, 14:27:35] [FHEM] Klimaanlage is thermostat
[14.8.2025, 14:27:35] [FHEM] Klimaanlage has
[14.8.2025, 14:27:35] [FHEM]   CurrentHeatingCoolingState [mode]
[14.8.2025, 14:27:35] [FHEM]   CurrentTemperature [current_temperature]
[14.8.2025, 14:27:35] [FHEM]   TargetTemperature [Temperatur]
[14.8.2025, 14:27:35] [FHEM]   TargetHeatingCoolingState [mode]
[14.8.2025, 14:27:35] [FHEM] Klimaanlage will not send proactive events
[14.8.2025, 14:27:35] [FHEM] Klimaanlage uses ID: 6824d5e0-f33f-
  2025-08-14 14:27:35 caching: Klimaanlage-mode: cool
  2025-08-14 14:27:35 caching: Klimaanlage-current_temperature: 22.0


Wenn ich sage Heizen, Kühlen, Auto oder eine Temperaturangabe mache, dann kommen die Logs und das entsprechende Mapping:


[14.8.2025, 14:28:37] [FHEM] Klimaanlage: executing set cmd for TargetHeatingCoolingState with value HEAT
[14.8.2025, 14:28:37] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20Klimaanlage%20HEAT&fwcsrf=csrf_558054201106990&XHR=1


[14.8.2025, 14:29:04] [FHEM] Klimaanlage: executing set cmd for TargetHeatingCoolingState with value AUTO
[14.8.2025, 14:29:04] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20Klimaanlage%20AUTO&fwcsrf=csrf_558054201106990&XHR=1


[14.8.2025, 14:29:16] [FHEM] Klimaanlage: executing set cmd for TargetHeatingCoolingState with value COOL
[14.8.2025, 14:29:16] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20Klimaanlage%20COOL&fwcsrf=csrf_558054201106990&XHR=1


[14.8.2025, 14:29:43] [FHEM] Klimaanlage: executing set cmd for TargetTemperature with value 23
[14.8.2025, 14:29:43] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20Klimaanlage%20Temperatur%2023&fwcsrf=csrf_558054201106990&XHR=1


[14.8.2025, 14:30:31] [FHEM] Klimaanlage: executing set cmd for TargetTemperature with value 19
[14.8.2025, 14:30:31] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20Klimaanlage%20Temperatur%2019&fwcsrf=csrf_558054201106990&XHR=1


Aber wenn ich sage "Alexa, schalte Klimaanlage aus" dann kommt nur Thermostat/Klimaanlage unterstützt das nicht...
Es gibt ja ein set Klimaanalage Aus, ich habe auch unter den Values ein Mapping OFF:Aus

Aber NOTHING... wenn wenigstens sowas kommen würde:

[14.8.2025, 14:29:16] [FHEM] Klimaanlage: executing set cmd for TargetHeatingCoolingState with value AUS/OFF/WHATEVER
dann könnte man ja reagieren, aber Alexa selber sendet ihr erst gar nichts.

Ich bin da irgendwie noch auf dem Holzweg... ich glaube ich habe irgendwas in der Konfig drin oder nicht drin, dass beim Anlegen in der Alexa nicht mitgibt, dass es OFF gibt.
Auch div. valueOFF /cmdOFF haben bisher nicht funktioniert.

VG
René

passibe

#3
Bitte änder mal dein HomebridgeMapping wie folgt (an der setList musst du nichts verändern):
clear
On=mode,valueOn=/heat|cool|auto/,valueOff=off,cmdOn=Betrieb_Modus+auto,cmdOff=Betrieb_Modus+off
CurrentTemperature=current_temperature
TargetTemperature=target_temperature,minValue=19,maxValue=30,minStep=1,cmd=Temperatur
CurrentHeatingCoolingState=mode,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO
TargetHeatingCoolingState=mode,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO,cmds=OFF:Betrieb_Modus+off;HEAT:Betrieb_Modus+heat;COOL:Betrieb_Modus+cool;AUTO:Betrieb_Modus+auto

Dann einen reload und dann sollte es funktionieren. Wenn das der Fall ist, schreib gerne auch noch ein Update in den anderen Thread, vielleicht gibt es ja noch mehr Leute, die das gleiche Problem haben.

Der Befehl, der bei "Alexa, schalte Klimaanlage ein" gesendet wird, ist dabei frei konfigurierbar. Habe es aktuell auf auto gestellt, du könntest da aber in der setList auch eine andere beliebige Logik umsetzen, z.B., dass abhängig von Unterschied zwischen target_temperature und current_temperature (negativ oder nicht) oder gar abhängig von der Jahreszeit o.ä. in heat oder cool geschaltet wird.

Mein Lösungsprozess sah so aus:



Zitat von: fireball am 14 August 2025, 15:04:58[14.8.2025, 14:28:37] [FHEM] Klimaanlage: executing set cmd for TargetHeatingCoolingState with value HEAT
[14.8.2025, 14:28:37] [FHEM]  executing: http://127.0.0.1:8083/fhem?cmd=set%20Klimaanlage%20HEAT&fwcsrf=csrf_558054201106990&XHR=1
Das hier passt aber nicht, oder? Also die ganzen Befehle senden ja set Klimaanlage HEAT bzw. set Klimaanlage <MODUS>, das ist in deiner setList nicht abgebildet, außer ich übersehe etwas? Wenn du in der FHEM-Befehlszeile set Klimaanlage HEAT eingibst, dürfte eigentlich nichts passieren. Richtig müsste sein set Klimaanlage Betrieb_Modus heat.

Der Einfachheit halber würde ich vorschlagen deine setList zu ändern, dass nur lowercase gesendet wird:
Betrieb_Modus:off,heat,fan_only,dry,cool,auto { my $mode = lc($EVTPART1); return qq {klimaanlage/climate/mitsubishi_klimaanlage/mode/command $mode};}
Dann spart man sich nämlich den cmds=-Teil des Mappings und kann einfach mit cmd= arbeiten:
TargetHeatingCoolingState=Betrieb_Modus,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO,cmd=Betrieb_Modus


Ok, ich habe es gerade mal mit einem "dummy"-Gerät getestet:
defmod klima_test MQTT2_DEVICE klima_test
attr klima_test alexaName Klimaanlage
attr klima_test devicetopic test/klimaanlage
attr klima_test genericDeviceType thermostat
attr klima_test homebridgeMapping clear\
CurrentTemperature=current_temperature\
TargetTemperature=target_temperature,minValue=19,maxValue=30,minStep=1,cmd=Temperatur\
CurrentHeatingCoolingState=mode,values=off:OFF;;heat:HEAT;;cool:COOL;;auto:AUTO\
TargetHeatingCoolingState=mode,values=off:OFF;;heat:HEAT;;cool:COOL;;auto:AUTO,cmd=Betrieb_Modus
attr klima_test readingList $DEVICETOPIC/mode/state:.* mode\
$DEVICETOPIC/target_temperature/state:.* target_temperature\
$DEVICETOPIC/current_temperature/state:.* current_temperature
attr klima_test setList Temperatur:slider,19.00,1.00,30.00 $DEVICETOPIC/target_temperature/command $EVTPART1\
Betrieb_Modus:off,heat,fan_only,dry,cool,auto { my $mode = lc($EVTPART1);; return qq {$DEVICETOPIC/mode/command $mode};;}

In der Tat funktioniert das nur mit Kühlen und Heizen, aber bei "Alexa, schalte Klimaanlage aus" kommt bei mir nun auch "Klimaanlage unterstützt das nicht".

Stutzig geworden bin ich, als ich gesehen habe, dass man auch in der App nur hinsichtlich der Temperatur eine Auswahlmöglichkeit hat. Der Status Off/Auto/Heat/Cool wird zwar richtig angezeigt und auch aktualisiert, wenn man das Reading aktualisiert, aber es ist quasi "ausgegraut".

In der Dokumentation (siehe auch hier) bin ich dann fündig geworden: https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-thermostatcontroller.html#properties
ZitatThe Alexa.ThermostatController interface defines the following reportable properties. You identify the properties that you support in your discovery response.

Und in der discovery response, die alexa-fhem sendet steht nur:
{"type":"AlexaInterface","interface":"Alexa.ThermostatController","version":"3","properties":{"supported":[{"name":"targetSetpoint"}],"configuration":{"supportsScheduling":false},"proactivelyReported":false,"retrievable":true}}
Eigentlich müsste das supported-Objekt heißen:
[{"name":"targetSetpoint"}, {"name":"thermostatMode"}]
Der für das setzen der properties verantwortliche Code findet sich in lib/server.js ab Zeile 3569. Dort wird standardmäßig bei jedem Device das TargetTemperature kann die targetSetpoint property gesetzt, aber dass die thermostatMode-Property gesetzt wird, ist abhängig von der Bedingung (Zeile 3588)
mappings.TargetHeatingCoolingState && mappings.TargetHeatingCoolingState.cmds
Das heißt, es muss das Mapping TargetHeatingCoolingState geben und das muss auch das Objekt cmds haben. Meine "verschlankte" Definition von oben funktioniert also nicht.

Darüberhinaus gibt es in Zeile 3590 noch eine Regex, die die cmds nur übernimmt, wenn sie auch zu ^(AUTO|COOL|ECO|HEAT|OFF|CUSTOM):.* passen.

Insofern habe ich meine Minimaldefinition angepasst:
TargetHeatingCoolingState=mode,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO,cmds=OFF:Betrieb_Modus+off;HEAT:Betrieb_Modus+heat;COOL:Betrieb_Modus+cool;AUTO:Betrieb_Modus+autoUnd siehe da, die properties werden richtig reported, auch mit den richtigen supportedModes:
"properties":{"supported":[{"name":"targetSetpoint"},{"name":"thermostatMode"}],"configuration":{"supportsScheduling":false,"supportedModes":["OFF","HEAT","COOL","AUTO"]},
Interessanterweise geht das Schalten aber immer noch nicht, weder über die App (nach wie vor ausgegraut), noch über einen Sprachbefehl (nach wie vor "Klimaanlage unterstützt das leider nicht"). Der Fehler muss also anderswo liegen, außerdem hattest du ja auch in deinem ursprünglichen HomebridgeMapping cmds= gesetzt.



Liest man noch ein bisschen weiter in der Dokumentation, kommt man dann zu diesem Abschnitt:
ZitatTypically air conditioners support a single setpoint, and only have a cooling mode. Unlike thermostats, which are usually on all the time, users turn air conditioners on and off. For an air conditioner, Amazon recommends that you also implement the Alexa.PowerController interface, and keep the PowerController synchronized with the ThermostatController as shown in the following list:
  • When the thermostat controller mode is set to COOL, the power controller power state is set to ON.
  • When the thermostat controller mode is set to OFF, the power controller power state is set to OFF.

Die Lösung ist es also, einen PowerController einzufügen. Das geht über die Characteristic On=, sodass man insgesamt nun folgendes HomebridgeMapping hat:clear
On=mode,valueOn=/heat|cool|auto/,valueOff=off,cmdOn=Betrieb_Modus+auto,cmdOff=Betrieb_Modus+off
CurrentTemperature=current_temperature
TargetTemperature=target_temperature,minValue=19,maxValue=30,minStep=1,cmd=Temperatur
CurrentHeatingCoolingState=mode,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO
TargetHeatingCoolingState=mode,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO,cmds=OFF:Betrieb_Modus+off;HEAT:Betrieb_Modus+heat;COOL:Betrieb_Modus+cool;AUTO:Betrieb_Modus+auto

Damit funktioniert dann auch endlich "Alexa schalte Klimaanlage aus". In der Alexa-App wird dann in der Übersicht auch ein Blauer "On/Off"-Button angezeigt, der Modus lässt sich aber immer noch nicht über die App (und damit auch nicht über Routinen) schalten. Wieso das so ist und ob man das beheben kann ist aber etwas für ein andermal ...

Der_Tom

#4
Lies mal diesen Thread (komplett) , da haben wir uns schonmal damit beschäftigt

https://forum.fhem.de/index.php?topic=135513.msg1291674#msg1291674

Es funktioniert nur dann, wenn das Gerät Heizung heisst, ..... warum auch immer.

Hat damals aber nicht wirklich jemanden interessiert.

Gruss Tom

fireball

Hi passibe/Tom,

gleich vorweg!!! ES GEHT... ON/OFF... ein ganzes Wochenende einen schwarzen Bildschirm und jetzt gehts.

Also ich habe ja echt viel umgespielt und auch TOMs alten Lösungsansatz gesehen und probiert, aber bei mir ging nix...

Das du dich noch tiefer in die Alexa-Seiten reingelesen hast, DANKE! Ich war bei der Tabelle weiter oben mit den STATS einfach stehen geblieben.
Das ist doch mal ne Lösung!


Also nochmal kurz zurück...
1. Das mit dem Log oben und das du meintest, dass mit HEAT/COOL/AUTO kann gar nicht gehen, richtig, das war weil ich die setList gar nicht mehr hatte, nachdem Versuch, wo du meinstest, lösche mal alle values raus...
Aber das ging davor ja.

2. Warum setzt du eigentlich die values genau anders rum!?
Ich hatte: values=OFF:Aus;;HEAT:heat;;COOL:cool;;AUTO:auto und das ging auch...
Bei dir: values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO

Spielt die Reihenfolge des Mappings keine Rolle?!


Jetzt nochmal zur Lösung: Diese Variante funktioniert mit Thermostat und ON/OFF. In der Alexa-APP wird der Modus angezeigt, aber lässt sich nur per Sprache ändern, nicht per Klick
clear
On=mode,valueOn=/heat|cool|auto/,valueOff=off,cmdOn=Betrieb_Modus+auto,cmdOff=Betrieb_Modus+off
CurrentTemperature=current_temperature
TargetTemperature=target_temperature,minValue=19,maxValue=30,minStep=1,cmd=Temperatur
CurrentHeatingCoolingState=mode,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO
TargetHeatingCoolingState=mode,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO,cmds=OFF:Betrieb_Modus+off;HEAT:Betrieb_Modus+heat;COOL:Betrieb_Modus+cool;AUTO:Betrieb_Modus+auto


Alexa Debug Log startet:
[15.8.2025, 12:27:10] [FHEM] Klimaanlage is thermostat
[15.8.2025, 12:27:10] [FHEM] Klimaanlage has
[15.8.2025, 12:27:10] [FHEM]  On [mode;Betrieb_Modus auto,Betrieb_Modus off]
[15.8.2025, 12:27:10] [FHEM]  CurrentTemperature [current_temperature]
[15.8.2025, 12:27:10] [FHEM]  TargetTemperature [target_temperature]
[15.8.2025, 12:27:10] [FHEM]  CurrentHeatingCoolingState [mode]
[15.8.2025, 12:27:10] [FHEM]  TargetHeatingCoolingState [mode]
[15.8.2025, 12:27:10] [FHEM] Klimaanlage will not send proactive events
[15.8.2025, 12:27:10] [FHEM] Klimaanlage uses ID: 6824d5e0-f33f-0804-e91e-f95511439fc1fe47
  2025-08-15 12:27:10 caching: Klimaanlage-mode: cool
  2025-08-15 12:27:10 caching: Klimaanlage-current_temperature: 22.5
  2025-08-15 12:27:10 caching: Klimaanlage-target_temperature: 20


Alexa kann also bei ON und OFF am mode erkennen, wenn auto/heat/cool ist, ist die Klima an, wenn off ist aus.
Beim Einschalten kommt auto und beim Ausschalten off. => PERFEKT.



ON/OFF sieht so aus:
2025-08-15 12:31:26 caching: Klimaanlage-current_temperature: 22.0
[15.8.2025, 12:31:26] [FHEM]    caching: CurrentTemperature: 22.0 (as string; from '22.0')
  2025-08-15 12:31:44 caching: Klimaanlage-current_temperature: 22.5
[15.8.2025, 12:31:44] [FHEM]    caching: CurrentTemperature: 22.5 (as string; from '22.5')
[15.8.2025, 12:31:48] >>>> [ssh] {"directive":{"header":{"messageId":"f5b08d69-a96d-41fd-9250-e9a052e1e6fc","namespace":"Alexa.PowerController","name":"TurnOff","payloadVersion":"3","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"93450804-8CEBDA47494588A0"},"endpointId":"6824d5e0-f33f-0804-e91e-f95511439fc1fe47","cookie":{"device":"Klimaanlage","fuuid":"6824d5e0-f33f-0804-e91e-f95511439fc1fe47"}},"payload":{}}}
[15.8.2025, 12:31:48] [FHEM] Klimaanlage: executing set cmd for On with value 0
[15.8.2025, 12:31:48] [FHEM]  executing: http://127.0.0.1:8083/fhem?cmd=set%20Klimaanlage%20Betrieb_Modus%20off&fwcsrf=csrf_517824394479954&XHR=1
[15.8.2025, 12:31:48] <<<< [ssh] {"context":{"properties":[{"namespace":"Alexa.PowerController","name":"powerState","value":"OFF","timeOfSample":"2025-08-15T10:31:48.996Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"namespace":"Alexa","name":"Response","payloadVersion":"3","messageId":"4ce1cf1c-36b1-4d4d-96d0-b4474faa1346","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"93450804-8CEBDA47494588A0"},"endpointId":"6824d5e0-f33f-0804-e91e-f95511439fc1fe47"},"payload":{}}}
  2025-08-15 12:31:49 caching: Klimaanlage-mode: off
[15.8.2025, 12:31:49] [FHEM]    caching: On: 0 (as number; from 'off')
[15.8.2025, 12:31:49] [FHEM]    caching: CurrentHeatingCoolingState: OFF (as string; from 'off')
[15.8.2025, 12:31:49] [FHEM]    caching: TargetHeatingCoolingState: OFF (as string; from 'off')



[15.8.2025, 12:33:17] >>>> [ssh] {"directive":{"header":{"messageId":"38cf6208-fceb-4795-83a1-87b7ebaff7cd","namespace":"Alexa.PowerController","name":"TurnOn","payloadVersion":"3","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"93450804-8CEBDA47494588A0"},"endpointId":"6824d5e0-f33f-0804-e91e-f95511439fc1fe47","cookie":{"device":"Klimaanlage","fuuid":"6824d5e0-f33f-0804-e91e-f95511439fc1fe47"}},"payload":{}}}
[15.8.2025, 12:33:17] [FHEM] Klimaanlage: executing set cmd for On with value 1
[15.8.2025, 12:33:17] [FHEM]  executing: http://127.0.0.1:8083/fhem?cmd=set%20Klimaanlage%20Betrieb_Modus%20auto&fwcsrf=csrf_517824394479954&XHR=1
[15.8.2025, 12:33:17] <<<< [ssh] {"context":{"properties":[{"namespace":"Alexa.PowerController","name":"powerState","value":"ON","timeOfSample":"2025-08-15T10:33:17.788Z","uncertaintyInMilliseconds":500}]},"event":{"header":{"namespace":"Alexa","name":"Response","payloadVersion":"3","messageId":"5eaf247e-922c-4f89-abfd-9653788d581b","correlationToken":"-"},"endpoint":{"scope":{"type":"BearerToken","token":"93450804-8CEBDA47494588A0"},"endpointId":"6824d5e0-f33f-0804-e91e-f95511439fc1fe47"},"payload":{}}}
  2025-08-15 12:33:17 caching: Klimaanlage-mode: auto
[15.8.2025, 12:33:17] [FHEM]    caching: On: 1 (as number; from 'auto')
[15.8.2025, 12:33:17] [FHEM]    caching: CurrentHeatingCoolingState: AUTO (as string; from 'auto')
[15.8.2025, 12:33:17] [FHEM]    caching: TargetHeatingCoolingState: AUTO (as string; from 'auto')


Vielen Dank nochmal für die Unterstützung, ich denke ich habe beim Thema Alexa auch wieder etwas mehr dazu gelernt.
Viell. kann ich jetzt auch den Betrieb_Modus wieder rauswerfen, mal schauen, den brauch ich ja eigentlich gar nicht, weil die setList schon alle Befehle enthält.
VG René

passibe

Zitat von: fireball am 15 August 2025, 13:02:32ein ganzes Wochenende einen schwarzen Bildschirm und jetzt gehts.
;D

Zitat von: fireball am 15 August 2025, 13:02:322. Warum setzt du eigentlich die values genau anders rum!?
Im entsprechenden README steht:
Zitatmapping of reading values to homekit values [...] a : separated pair of from and to values
Wir mappen hier ja "from" FHEM "to" Alexa, d.h. es muss $FHEMReading:$AlexaReading sein.
Wieso das trotzdem funktioniert, ich vermute, weil hier nur die Groß-/Kleinschreibung anders ist und alexa-fhem schlau genug ist, das auch so zu erkennen bzw. hier automatisch die Großschreibung vornimmt, wenn der kleingeschriebene Wert zum bekannten/"erlaubten" großgeschriebenen passt. Hier also eher Glück, weil das nichts obskures ist, ich weiß nicht, ob das für alle Geräte funktioniert hätte.

Zitat von: fireball am 15 August 2025, 13:02:32Vielen Dank nochmal für die Unterstützung
Gerne!
Zitat von: fireball am 15 August 2025, 13:02:32Viell. kann ich jetzt auch den Betrieb_Modus wieder rauswerfen, mal schauen, den brauch ich ja eigentlich gar nicht, weil die setList schon alle Befehle enthält.
Ja, wobei "richtig" im Sinne von MQTT2_DEVICE wäre es, wenn setList und readingList Hand in Hand gehen, d.h. der Befehl, mit dem sich das Reading mode ändert, auch mode heißt und dann mit attr setStateList mode auch eine Zustandsrückmeldung geliefert wird.

  • Ausführen von set Klimaanlage mode auto setzt das Reading mode auf set_auto
  • Eingehende MQTT-Nachricht von der Klimaanlage überschreibt set_auto dann mit auto
  • -> Zustandsänderung wurde bestätigt

Aber ehrlicherweise ist das auch nur kosmetisch, solange alles funktioniert, ist das egal.