How-to gesucht um komplexeres Device anzusprechen (Mitsubishi Klimaanlage)

Begonnen von Betonklotz, 24 Juni 2020, 10:03:50

Vorheriges Thema - Nächstes Thema

Betonklotz

Hallo,

das Haus wächst weiter, passend zum Sommer wurde die Klimaanlage in Betrieb genommen, wobei ich da gleich einen ESP (auf einem NodeMCU Board) drangehängt habe, Code stammt von hier: https://github.com/gysmo38/mitsubishi2MQTT. Wenn noch wer einen CN105 Stecker + Crimpkontakte für eine Mitsubishi Electric Klima benötigt: kann ich gegen Portoerstattung liefern (ein 100er Pack der Stecker + Kontakte war billiger als 3 einzelne...), habe noch 98 Stück rumliegen.
Das ganze läuft nach einer klitzekleinen Anpassung auch super, kann mich auf die beiden relevanten topics subscriben und bekomme auch jeweils Updates in JSON Format:

MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/state:{"roomTemperature":25,"temperature":23,"fan":"QUIET","vane":"SWING","action":"cooling","mode":"cool"}
MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/settings:{"temperature":24,"fan":"2","vane":"1","mode":"cool"}
MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/state:{"roomTemperature":24.5,"temperature":24,"fan":"2","vane":"1","action":"cooling","mode":"cool"}
MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/state:{"roomTemperature":24,"temperature":24,"fan":"2","vane":"1","action":"cooling","mode":"cool"}
MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/settings:{"temperature":24,"fan":"1","vane":"1","mode":"cool"}
MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/state:{"roomTemperature":24,"temperature":24,"fan":"1","vane":"1","action":"cooling","mode":"cool"}
MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/state:{"roomTemperature":23.5,"temperature":24,"fan":"1","vane":"1","action":"cooling","mode":"cool"}

Mein Problem liegt darin, wie ich das "vernünftig" ansteuern kann... Über setList und setStateList habe ich die Steuerung für den Modus (an aus, kühlen, heizen...) abgebildet und das funktioniert auch perfekt. Ich bräuchte jedoch quasi das ganze Konstrukt mehrfach, angefangen bei der Einstellung der Temperatur (in Gradschritten), Lüfter (1-4; AUTO; QUIET) und horizontalen/vertikalen Lamellen (1-5 SWING AUTO bzw. << < | > >>). Habe in setList und setStateList mal den Modus, mal die Lüfterstufe (im Beispiel oben den fan auf Stufe 2 und zurück auf Stufe 1) usw. eingetragen, das geht auch. Aber geht auch alles gleichzeitig zum Einstellen? Template nutze ich nicht, da habe ich leider keine (für mich) verständliche Anleitung gefunden :-(

Gruß, Robert

Noch das list vom device

Internals:
   CFGFN     
   CID        HVAC_C64E1A
   DEF        HVAC_C64E1A
   DEVICETOPIC MQTT2_HVAC_C64E1A
   FUUID      5ef1e804-f13f-a32b-ca0b-c43604eaf3b56dba
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_MSGCNT 2334
   MQTT2_FHEM_Server_TIME 2020-06-24 09:37:25
   MSGCNT     2334
   NAME       MQTT2_HVAC_C64E1A
   NR         13421
   STATE      set_COOL
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-06-24 09:37:25   action          off
     2020-06-23 17:55:22   action_template {{ value_json.action if (value_json is defined and value_json.action is defined and value_json.action|length) else 'idle' }}
     2020-06-23 17:55:22   action_topic    Klima/OG_C64E1A/state
     2020-06-23 17:55:22   curr_temp_t     Klima/OG_C64E1A/state
     2020-06-23 17:55:22   curr_temp_tpl   {{ value_json.roomTemperature if (value_json is defined and value_json.roomTemperature is defined and value_json.roomTemperature|int > 8.00) else '26.00' }}
     2020-06-23 17:55:22   device_ids      OG_C64E1A
     2020-06-23 17:55:22   device_mdl      HVAC MITSUBISHI
     2020-06-23 17:55:22   device_mf       MITSUBISHI ELECTRIC
     2020-06-23 17:55:22   device_name     OG_C64E1A
     2020-06-23 17:55:22   device_sw       Mitsubishi2MQTT 0.7.3
     2020-06-24 09:37:25   fan             AUTO
     2020-06-23 17:55:22   fan_mode_cmd_t  Klima/OG_C64E1A/fan/set
     2020-06-23 17:55:22   fan_mode_stat_t Klima/OG_C64E1A/state
     2020-06-23 17:55:22   fan_mode_stat_tpl {{ value_json.fan if (value_json is defined and value_json.fan is defined and value_json.fan|length) else 'AUTO' }}
     2020-06-23 17:55:22   fan_modes_1     AUTO
     2020-06-23 17:55:22   fan_modes_2     QUIET
     2020-06-23 17:55:22   fan_modes_3     1
     2020-06-23 17:55:22   fan_modes_4     2
     2020-06-23 17:55:22   fan_modes_5     3
     2020-06-23 17:55:22   fan_modes_6     4
     2020-06-23 17:55:22   max_temp        31
     2020-06-23 17:55:22   min_temp        16
     2020-06-24 09:37:25   mode            off
     2020-06-23 17:55:22   mode_cmd_t      Klima/OG_C64E1A/mode/set
     2020-06-23 17:55:22   mode_stat_t     Klima/OG_C64E1A/state
     2020-06-23 17:55:22   mode_stat_tpl   {{ value_json.mode if (value_json is defined and value_json.mode is defined and value_json.mode|length) else 'off' }}
     2020-06-23 17:55:22   modes_1         heat_cool
     2020-06-23 17:55:22   modes_2         cool
     2020-06-23 17:55:22   modes_3         dry
     2020-06-23 17:55:22   modes_4         heat
     2020-06-23 17:55:22   modes_5         fan_only
     2020-06-23 17:55:22   modes_6         off
     2020-06-23 17:55:22   name            OG_C64E1A
     2020-06-23 17:55:22   pow_cmd_t       Klima/OG_C64E1A/power/set
     2020-06-24 09:37:25   roomTemperature 27.5
     2020-06-23 18:32:00   state           set_COOL
     2020-06-23 14:39:33   subscriptions   Klima/OG_C64E1A/custom/send Klima/OG_C64E1A/debug/set Klima/OG_C64E1A/fan/set Klima/OG_C64E1A/mode/set Klima/OG_C64E1A/power/set Klima/OG_C64E1A/temp/set Klima/OG_C64E1A/vane/set
     2020-06-23 17:55:22   swing_mode_cmd_t Klima/OG_C64E1A/vane/set
     2020-06-23 17:55:22   swing_mode_stat_t Klima/OG_C64E1A/state
     2020-06-23 17:55:22   swing_mode_stat_tpl {{ value_json.vane if (value_json is defined and value_json.vane is defined and value_json.vane|length) else 'AUTO' }}
     2020-06-23 17:55:22   swing_modes_1   AUTO
     2020-06-23 17:55:22   swing_modes_2   1
     2020-06-23 17:55:22   swing_modes_3   2
     2020-06-23 17:55:22   swing_modes_4   3
     2020-06-23 17:55:22   swing_modes_5   4
     2020-06-23 17:55:22   swing_modes_6   5
     2020-06-23 17:55:22   swing_modes_7   SWING
     2020-06-23 17:55:22   temp_cmd_t      Klima/OG_C64E1A/temp/set
     2020-06-23 17:55:22   temp_stat_t     Klima/OG_C64E1A/state
     2020-06-23 17:55:22   temp_stat_tpl   {% if (value_json is defined and value_json.temperature is defined) %}{% if (value_json.temperature|int > 16.00 and value_json.temperature|int < 31.00) %}{{ value_json.temperature }}{% elif (value_json.temperature|int < 16.00) %}16.00{% elif (value_json.temperature|int > 31.00) %}31.00{% endif %}{% else %}22.00{% endif %}
     2020-06-23 17:55:22   temp_step       1
     2020-06-24 09:37:25   temperature     23
     2020-06-23 17:55:22   unique_id       C64E1A
     2020-06-24 09:37:25   vane            1
Attributes:
   IODev      MQTT2_FHEM_Server
   autocreate 0
   event-on-change-reading .*
   readingList HVAC_C64E1A:Klima/OG_C64E1A/state:.* { json2nameValue($EVENT) }
HVAC_C64E1A:Klima/OG_C64E1A/settings:.* { json2nameValue($EVENT) }
   room       Klimatest
   setList    AUTO:noArg Klima/OG_C64E1A/mode/set AUTO
HEAT:noArg Klima/OG_C64E1A/mode/set HEAT
COOL:noArg Klima/OG_C64E1A/mode/set COOL
DRY:noArg Klima/OG_C64E1A/mode/set DRY
FAN_ONLY:noArg Klima/OG_C64E1A/mode/set FAN_ONLY
OFF:noArg Klima/OG_C64E1A/mode/set OFF
ON:noArg Klima/OG_C64E1A/mode/set ON
   setStateList AUTO HEAT COOL DRY FAN_ONLY OFF ON

Beta-User

Moin,

das mit dem Howto kannst du gerne übernehmen...

Kannst du mal ein RAW einstellen? Vorab: Was die Readings angeht, sieht es danach aus, als wäre das autodiscovery für homeassistant mal aktiv gewesen? Diese Teile bitte vorher löschen...

Von der Zielrichtung her würde ich eher dazu neigen, (auch von der Funktionalität her) das WEB-Interface mit Mitteln von MQTT2_DEVICE abzubilden, das sollte nicht so schwierig sein, aber die setList wäre dann anders. Wegen des Grundaufbaus und dem Temperatur-Thema kannst du dir mal insbesondere das attrTeplate "ems-esp_thermostat_simple" ansehen (und den Entwicklungsthread dazu).

Folgendes würde ich mal auf die Schnelle vorschlagen:
setList    mode:AUTO,HEAT,COOL,DRY,FAN_ONLY Klima/OG_C64E1A/mode/set $EVTPART1\
off:noArg Klima/OG_C64E1A/mode/set OFF\
on:noArg Klima/OG_C64E1A/mode/set ON\
desired-temp:slider,15.0,0.5,30.0,1 Klima/OG_C64E1A/temp/set $EVTPART1
   setStateList on off

Dann müssen wir uns noch um jsonMap usw. kümmern, damit die Rückmeldungen auch zu der setList passen usw..
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Betonklotz

Hallo,

tja, nun oute ich und komme mit noch mehr Fragen um die Ecke...
Zitat von: Beta-User am 24 Juni 2020, 10:37:06
das mit dem Howto kannst du gerne übernehmen...
Ja, das kann ich übernehmen. ABER: aktuell habe ich null Plan von den Templates und bin da weder durch die Datei (ok, desc o.ä. einfache Dinge sind klar), noch in der Forums-Templatesammlung durchgestiegen. Für eine Anleitung müsste ich halt erst einmal verstehen was, wo, warum eingetragen wird.

Zitat von: Beta-User am 24 Juni 2020, 10:37:06
Kannst du mal ein RAW einstellen?
Wenn du mir sagst wie, bzw. was du haben möchtest? Ein pcap Trace/Sniff was auf dem Netzwerk langgeht? Im FHEM MQTT server verbose auf 5 hochdrehen? Bin sonst zu allen Schandtaten bereit...

Homeassistant, bzw. auch autocreate war per default aktiv, ist jetzt aus. Readings habe ich nun alle gelöscht, neues list anbei

deletereading MQTT2_HVAC_C64E1A .*

Internals:
   CFGFN     
   CID        HVAC_C64E1A
   DEF        HVAC_C64E1A
   DEVICETOPIC MQTT2_HVAC_C64E1A
   FUUID      5ef1e804-f13f-a32b-ca0b-c43604eaf3b56dba
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_MSGCNT 2887
   MQTT2_FHEM_Server_TIME 2020-06-24 13:58:16
   MSGCNT     2887
   NAME       MQTT2_HVAC_C64E1A
   NR         13421
   STATE      set_COOL
   TYPE       MQTT2_DEVICE
   OLDREADINGS:
   READINGS:
     2020-06-24 13:58:16   action          heating
     2020-06-24 13:58:16   fan             AUTO
     2020-06-24 13:58:16   mode            heat
     2020-06-24 13:58:16   roomTemperature 25.5
     2020-06-24 13:58:16   temperature     24
     2020-06-24 13:58:16   vane            1
Attributes:
   IODev      MQTT2_FHEM_Server
   autocreate 0
   event-on-change-reading .*
   readingList HVAC_C64E1A:Klima/OG_C64E1A/state:.* { json2nameValue($EVENT) }
HVAC_C64E1A:Klima/OG_C64E1A/settings:.* { json2nameValue($EVENT) }
   room       Klimatest
   setList    mode:AUTO,HEAT,COOL,DRY,FAN_ONLY Klima/OG_C64E1A/mode/set $EVTPART1\
off:noArg Klima/OG_C64E1A/mode/set OFF\
on:noArg Klima/OG_C64E1A/mode/set ON\
desired-temp:slider,16.0,1,31.0,1 OG_Klima_C64E1A/OG_Schlafzimmer_Klima_C64E1A/temp/set $EVTPART1\
fan:1,2,3,4,AUTO,QUIET\ Klima/OG_C64E1A/fan/set $EVTPART1\
vane:1,2,3,4,5,SWING,AUTO\ Klima/OG_C64E1A/vane/set $EVTPART1\
wideVane:<<,<,|,>,>> Klima/OG_C64E1A/wideVane/set $EVTPART1
   setStateList on off


Zitat von: Beta-User am 24 Juni 2020, 10:37:06
Wegen des Grundaufbaus und dem Temperatur-Thema kannst du dir mal insbesondere das attrTeplate "ems-esp_thermostat_simple" ansehen (und den Entwicklungsthread dazu).
mache ich doch glatt. Hoffe ich verstehe es...

Zitat von: Beta-User am 24 Juni 2020, 10:37:06

Folgendes würde ich mal auf die Schnelle vorschlagen:
setList    mode:AUTO,HEAT,COOL,DRY,FAN_ONLY Klima/OG_C64E1A/mode/set $EVTPART1\
off:noArg Klima/OG_C64E1A/mode/set OFF\
on:noArg Klima/OG_C64E1A/mode/set ON\
desired-temp:slider,15.0,0.5,30.0,1 Klima/OG_C64E1A/temp/set $EVTPART1
   setStateList on off

Das ist doch schon mal richtig super! So etwas habe ich gesucht, und es noch kurz wie folgt erweitert:

setList    mode:AUTO,HEAT,COOL,DRY,FAN_ONLY Klima/OG_C64E1A/mode/set $EVTPART1\
off:noArg Klima/OG_C64E1A/mode/set OFF\
on:noArg Klima/OG_C64E1A/mode/set ON\
desired-temp:slider,15.0,0.5,30.0,1 Klima/OG_C64E1A/temp/set $EVTPART1
fan:1,2,3,4,AUTO,QUIET\ Klima/OG_C64E1A/fan/set $EVTPART1\
vane:1,2,3,4,5,SWING,AUTO\ Klima/OG_C64E1A/vane/set $EVTPART1\
wideVane:<<,<,|,>,>> Klima/OG_C64E1A/wideVane/set $EVTPART1
   setStateList on off

Für mich zum Verständnis: warum hast du die Zustände on und off gesondert behandelt (und nicht mit im mode erfasst)?

Zum Zustand an sich: in FHEM sieht es optisch ganz nett aus, aber es passiert schlicht und ergreifend noch nichts/gibt keine Änderungen

Beta-User

Hmm, also:

zu attrTemplate gibt es einen (kurzen) Wiki-Artikel, da sind die "par:"-Anweisungen usw. kurz erläutert.

Bei einer Anleitung sollte es mAn. genau darum gehen zu erläutern, wo man anfängt und in welcher Reihenfolge man was am zweckmäßigsten macht. Das hat auch erst mal recht wenig mit attrTemplate zu tun, sondern da geht es eigentlich um reine Konfiguration in FHEMWEB, die zum Teil nicht mal spezifisch für MQTT2_DEVICE ist. (Eigentlich wäre mein Lieblingsdevice für diese Übung ein Shelly-Plug-S (mit Energiemessung).)

Was attrTemplate angeht, brauchst du vermutlich erst mal das "Aha", das sich vermutlich einstellt, wenn du mal die RAW-Ansicht deines Devices gesehen hast: einfach unten in dessen Detailansicht mal nach RAW suchen, oder hier nachlesen: https://wiki.fhem.de/wiki/Import_von_Code_Snippets.

Weiterer grundlegender Lesestoff dazu: https://wiki.fhem.de/wiki/DeviceOverview_anpassen und https://wiki.fhem.de/wiki/FHEMWEB/Widgets (Bitte teste den dummy aus, auf dem die dortige Darstellung beruht!).



Das list sieht jedenfalls schon mal viel übersichtlicher aus; wir haben es scheinbar mal wieder mit einem "ich sende immer alles"-Device zu tun  >:( (man sollte auch hier dem Autor des Diensts vorschlagen, (ggf. optional) nur Differenz-updates zu schicken. Das wäre hier besonders wichtig, da wir ja updates des Messwerts (roomTemperature) bei jeder Messung haben wollen (?)).

Mach' mal in readingList das hier rein:
readingList Klima/OG_C64E1A/state:.* { json2nameValue($EVENT,'',$JSONMAP) }\
Klima/OG_C64E1A/state:.* raw_json
und ergänze jsonMap, z.B. mit (du scheinst das Prinzip dann ja schnell zu verstehen und erweitern zu können):
attr MQTT2_HVAC_C64E1A jsonMap temperature:desired-temp
(dafür ist die Erweiterung der ersten Zeile, die zweite dient mir übergangsweise dazu einen Eindruck zu bekommen, wie die Datenstruktur der Rückgabe aussieht).
Die Sonderbehandlung von "on" und "off" hat mit "SetExtensions" zu tun (nicht erschrecken und das Stichwort hier nachschlagen: https://wiki.fhem.de/wiki/DevelopmentModuleIntro)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Betonklotz

Was die Anleitung angeht: ich stehe immer noch auf dem Holzweg was das Template macht... Ersetzt das im Grunde nur die Definitionen die ich gerade per Hand vornehme? Wie auch immer: die Abendlektüre auf dem Tablet (ems-esp_thermostat_simple ==> https://forum.fhem.de/index.php/topic,104968.0.html) ist gesichert, sind ja doch ein paar Seiten mit zusätzlich zig Verweisen...

Das du "nur" die raw Definition des Devices aus FHEM haben wolltest, hättest du doch gleich sagen können ;-) Wobei die Infos davon doch auch (bis auf das defmod) im list sein sollten, oder? Egal, anbei noch einmal die aktuelle raw Definition, wobei ich (wo sinnvoll) ein paar Dinge schon ergänzt habe wie sie wohl sein sollten (ja, an das StateFormat muss ich noch mal ran, keine Ahnung warum er "Lüfter" nicht mag und wie ich die Ersetzung bei Zustand & Modus unterbinde).
[edit] habe alles auf die engl. Bezeichnungen umgestellt, so ergibt sich das Problem nicht...

IST: measured-temp°C, SOLL: desired-temp°C, Ventilator: fan, Zustand: action, Modus: mode

[/edit]

defmod MQTT2_HVAC_C64E1A MQTT2_DEVICE HVAC_C64E1A
attr MQTT2_HVAC_C64E1A IODev MQTT2_FHEM_Server
attr MQTT2_HVAC_C64E1A autocreate 0
attr MQTT2_HVAC_C64E1A event-on-change-reading .*
attr MQTT2_HVAC_C64E1A jsonMap roomTemperature:IST-Raumtemperatur\
temperature:SOLL-Raumtemperatur\
fan:Lüfter\
vane:Lamellen-horizontal\
action:Zustand\
mode:Modus
attr MQTT2_HVAC_C64E1A readingList HVAC_C64E1A:Klima/OG_C64E1A/state:.* { json2nameValue($EVENT,'',$JSONMAP) }\
HVAC_C64E1A:Klima/OG_C64E1A/state:.* raw_json\
HVAC_C64E1A:Klima/OG_C64E1A/settings:.* { json2nameValue($EVENT) }\
HVAC_C64E1A:Klima/OG_C64E1A/debug:.* { json2nameValue($EVENT) }\

attr MQTT2_HVAC_C64E1A room MQTT2_DEVICE
attr MQTT2_HVAC_C64E1A setList Modus:select,heat_cool,heat,cool,dry,fan_only HVAC_C64E1A:Klima/OG_C64E1A/mode/set $EVTPART1\
off:noArg HVAC_C64E1A:Klima/OG_C64E1A/mode/set OFF\
on:noArg HVAC_C64E1A:Klima/OG_C64E1A/mode/set ON\
SOLL-Raumtemperatur:slider,16.0,1,31.0,1 HVAC_C64E1A:Klima/OG_C64E1A/temp/set $EVTPART1\
Lüfter:select,1,2,3,4,AUTO,QUIET HVAC_C64E1A:Klima/OG_C64E1A/fan/set $EVTPART1\
Lamellen-horizontal:select,1,2,3,4,5,SWING,AUTO HVAC_C64E1A:Klima/OG_C64E1A/vane/set $EVTPART1\
Lamellen-vertikal:select,<<,<,|,>,>> HVAC_C64E1A:Klima/OG_C64E1A/wideVane/set $EVTPART1
attr MQTT2_HVAC_C64E1A setStateList on off
attr MQTT2_HVAC_C64E1A stateFormat IST: IST-Raumtemperatur°C, SOLL: SOLL-Raumtemperatur°C, Lüfter: Lüfter, Zustand: Zustand, Modus: Modus

setstate MQTT2_HVAC_C64E1A IST: 25°C, SOLL: 24°C, Lüfter: Lüfter, cooling: cooling, cool: cool
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:44:55 IST-Raumtemperatur 25
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:44:55 Lamellen-horizontal 1
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:44:55 Lüfter AUTO
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:44:55 Modus cool
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:44:55 SOLL-Raumtemperatur 24
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:44:55 Zustand cooling
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:43:05 fan AUTO
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:43:05 mode cool
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:44:55 raw_json {"roomTemperature":25,"temperature":24,"fan":"AUTO","vane":"1","action":"cooling","mode":"cool"}
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:39:46 state set_on
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:43:05 temperature 24
setstate MQTT2_HVAC_C64E1A 2020-06-24 18:43:05 vane 1


Das Device schickt alle 30sec die IST-Raumtemperatur rum, wobei es aber nur ein topic mit dem aktuellen (Gesamt-)Zustand gibt und deshalb immer sämtliche Zustände übermittelt werden ==> ändere ich z.B. die Lüfterstufe (hier: von quiet auf Stufe 2), dann erhalte ich folgendes

MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/state:{"roomTemperature":25,"temperature":23,"fan":"QUIET","vane":"SWING","action":"cooling","mode":"cool"}
MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/settings:{"temperature":24,"fan":"2","vane":"1","mode":"cool"}
MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/state:{"roomTemperature":24.5,"temperature":24,"fan":"2","vane":"1","action":"cooling","mode":"cool"}

Ändert sich die angesprochene IST-Raumtemperatur (hier: von 24,5 auf 24°C), gibt es halt wieder die Ausgabe

MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/state:{"roomTemperature":24.5,"temperature":24,"fan":"2","vane":"1","action":"cooling","mode":"cool"}
MQTT2_SERVER MQTT2_FHEM_Server Klima/OG_C64E1A/state:{"roomTemperature":24,"temperature":24,"fan":"2","vane":"1","action":"cooling","mode":"cool"}

Also ja, man könnte es zum einen auf die Einzelwerte reduzieren, aber dafür müsste man für jeden Wert ein eigenes topic anlegen. Ob das so viel besser ist, weiß ich nicht. Und ja, sinnvoller wäre es vor allem zudem nur bei Änderungen ein Update zu schicken. Mal sehen ob das was wird. Bis dahin gibt es ein

event-on-change-reading .*

um Ruhe zu haben.
SetExtensions hört sich auch sinnvoll an, wenn man das duch die Sonderbehandlung quasi "gratis" mitbekommt, dann nehme ich das gerne um später einfach so Dinge wie kühlen für 1h umzusetzen.

Beta-User

Im Prinzip ist attrTemplate dazu gedacht, einen vorgefertigten Satz Attribute festzulegen, also genau das, was wir hier machen.
Von daher ist attrTemplates für ein MQTT2_DEVICE erstellen und ein MQTT2_DEVICE sauber zu konfigurieren im Prinzip dasselbe - nur ist das attrTemplate dann zentral verteilt und kann uU. ein paar mehr Varianten berücksichtigen, Nutzerrückfragen auslösen usw..

Das HowTo wäre daher aus meiner Sicht eben eine Art Sammlung von typischen Fragen (angefangen von on/off und was sollte nach "state" bzw. setStateList - falls du noch ein paar mehr suchst, wäre das Stichwort "sonos2mqtt" noch eine sinnvolle Erweiterung der Abendlektüre, wenn auch nicht mehr unmittelbar so relevant für dein konkretes Problem hier.

Zu dem event-on-change-Thema gibt es noch das 6-fach-Ethernet-Relais, da ist "hübscher" Perl-Code drin, den wir bei dieser Sache hier m.E. "nur" damit garnieren müßten, dass wir den JSON wegen der Ist-Temperatur immer auswerten (=> separeate Zeile in rList) und auch den Wert triggernd aktualisieren. (Vorschlag kann ich gerne dann machen, wenn du nicht alleine klarkommst, wir aber über das Vorgehen einig sind).

Das RAW ist deswegen einfacher, weil ich nichts groß umformatieren muß ;) .

Die Änderung von desired-temp in SOLL-Raumtemperatur finde ich nicht so toll, mein Vorschlag hatte einen sehr konkreten Hintergrund (siehe ems-esp), und überhaupt gehen Umlaute als Readingnamen gar nicht (zu sinnhaften Readingnamen steht etwas mehr im "sonos"-Thread; man kann dann eventMap nutzen, um es "einzudeutschen").

Der settings-Zweig scheint die Differenzrückmeldung bei erfolgreichem Setzen zu sein - sehr schön! Kann man dann gleich auch passend $JSONMAP-mappen und immer triggernd umsetzen...

Du siehst also: immer wieder dieselben Fragen bzw. logischen Stufen, die aufeinander aufbauen, "jemand" sollte es eben - bezogen auf MQTT2_DEVICE - mal Wiki-gerecht aufschreiben (das Übertragen in die Wiki-Sprache mache ich dann mit Freude, falls du dich da nicht eindenken willst - unformatierter und nur grob strukturierter Text wäre völlig ausreichend...).




Ergänzend evtl. noch:
https://forum.fhem.de/index.php/topic,93999.0.html ist ein Beispiel, wie man sowas mAn. völlig überkompliziert lösen kann, indem man die Informationen über mehrere Devices verteilt, die zueinander passen müssen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Betonklotz

Musst mir noch mal ~1Woche geben, werde die HW und SW komplett umbauen müssen:
- die Umsetzung hat zig Fehler (hatte jetzt schon einen Hänger und ein Reconnect) und Unschönheiten ("dauersenden", falsche Doku...)
- bis jetzt sind meine restlichen Sensoren an Tasmota, aber für ESPEasy gibt es auch schon was ==> flashe meine NodeMCUs um
- als zusätzliche HW kommt noch gleich ein BME280 (Temp, Druck, Feuchte), Tür-/Fensterkontakt (Klima hängt eh überm Sturz) und Radarsensor/Präsenzerkennung dazu
Danach geht es weiter

Betonklotz

Hallo,

entschuldige die Verzögerung, aber hat (mal wieder) alles länger gedauert als es sollte. Die HW hat zicken gemacht, dafür ist jetzt aus dem 1. Protoypen der 2. Protoyp entstanden der so langsam keine Wünsche mehr offen lässt:
- weiterhin ein NodeMCU Dev Board als Grundlage
- 3V3 <-> 5V Level Shifter zur Absicherung der IOs des ESP (ja, 5V geht meistens gut am ESP, aber kann auch schief gehen da die IOs nur 3V3 vertragen lt. Spec)
- BME280 (Temp, Druck, Feuchte) Sensor
- Tür-/Fensterkontakt über Reedkontakt/-Schalter
- Radarsensor zur Anwesenheitserkennung im Raum

Aus diesem Grund sehen die Topics nun ein wenig anders aus

defmod OG_SZ_Klima MQTT2_DEVICE Klima_OG_SZ
attr OG_SZ_Klima IODev MQTT2_FHEM_Server
attr OG_SZ_Klima autocreate 0
attr OG_SZ_Klima event-on-change-reading .*
attr OG_SZ_Klima jsonMap roomTemperature:measured-temp-aircon\
wideVane:horizontal-vane\
power:onoff\
mode:mode\
fan:fan\
vane:vertical-vane\
iSee:0\
temperature:desired-temp
attr OG_SZ_Klima readingList Klima_OG_SZ:Klima_OG_SZ/status/LWT:.* LWT\
Klima_OG_SZ:Klima_OG_SZ/aircon/settings:.* { json2nameValue($EVENT,'',$JSONMAP) }\
Klima_OG_SZ:Klima_OG_SZ/clima/Temperature:.* measured-temp\
Klima_OG_SZ:Klima_OG_SZ/clima/Humidity:.* Humidity\
Klima_OG_SZ:Klima_OG_SZ/clima/Pressure:.* Pressure\
Klima_OG_SZ:Klima_OG_SZ/presence/state:.* room-presence\
Klima_OG_SZ:Klima_OG_SZ/door/state:.* doorstate
attr OG_SZ_Klima room MQTT2_DEVICE
attr OG_SZ_Klima setList on:noArg Klima_OG_SZ/aircon/settings/cmd MitsubishiHP,power,ON\
off:noArg Klima_OG_SZ/aircon/settings/cmd MitsubishiHP,power,OFF\
desired-temp:slider,16.0,1,31.0,1 Klima_OG_SZ/aircon/settings/cmd MitsubishiHP,temperature,$EVTPART1\
mode:select,HEAT,COOL,FAN,DRY,AUTO Klima_OG_SZ/aircon/settings/cmd MitsubishiHP,mode,$EVTPART1\
fan:select,1,2,3,4,AUTO,QUIET Klima_OG_SZ/aircon/settings/cmd MitsubishiHP,fan,$EVTPART1\
horizontal-vane:select,1,2,3,4,5,SWING,AUTO Klima_OG_SZ/aircon/settings/cmd MitsubishiHP,vane,$EVTPART1\
vertical-vane:select,<<,<,|,>,>>,<>,SWING Klima_OG_SZ/aircon/settings/cmd MitsubishiHP,widevane,$EVTPART1
attr OG_SZ_Klima setStateList on off
attr OG_SZ_Klima stateFormat IST: measured-temp°C Humidity%, SOLL: desired-temp°C, Power: onoff, Modus: mode, Ventilator: fan, Lamellen: vertical-vane horizontal-vane

setstate OG_SZ_Klima IST: Temperature°C 51%, SOLL: 23.0°C, Power: OFF, Modus: COOL, Ventilator: AUTO, Lamellen: 1 SWING
setstate OG_SZ_Klima 2020-07-09 09:19:48 Humidity 51
setstate OG_SZ_Klima 2020-07-09 09:19:48 Pressure 1014
setstate OG_SZ_Klima 2020-07-08 23:38:26 desired-temp 23.0
setstate OG_SZ_Klima 2020-07-09 08:59:37 doorstate 1
setstate OG_SZ_Klima 2020-07-08 23:38:26 fan AUTO
setstate OG_SZ_Klima 2020-07-08 23:38:26 horizontal-vane SWING
setstate OG_SZ_Klima 2020-07-09 09:19:48 measured-temp 22.1
setstate OG_SZ_Klima 2020-07-08 23:38:26 measured-temp-aircon 23.0
setstate OG_SZ_Klima 2020-07-08 23:38:26 mode COOL
setstate OG_SZ_Klima 2020-07-08 23:38:26 onoff OFF
setstate OG_SZ_Klima 2020-07-09 09:19:03 room-presence 0
setstate OG_SZ_Klima 2020-07-06 19:39:02 state set_off
setstate OG_SZ_Klima 2020-07-08 23:38:26 vertical-vane 1

Muss mich jetzt durch die Abendlektüre kämpfen, dann geht es weiter

juemuc

Hallo,

welche Klimaanlage hast Du denn?
Bei uns ist ein MSZ-AP35 mit WLAN-Modul (Mel-Cloud) und ein MSZ-AP20 eingebaut.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Betonklotz

Hallo Jürgen,

in den kleinen Räumen auch die MSZ-AP20, sonst die 25er. Bei der kleinen ist es super praktisch, da kannst du unten rechts eine Ecke vom Gehäuse ausklinken und dort den WLAN Adapter unterbringen, eine Kabeldurchführung nach außen (bei mir: Türkontakt, Temp/Luftfeuchte und Radarsensor) ist auch gleich mit dabei. Bei dem großen Gerät kommt man dafür viel einfacher an den Anschluss auf der Platine, bei der kleinen 20er musste man den ganzen Deckel abschrauben...
Irgendwie hat Mitsubishi da unterschiedlcihe Geräte zusammengebastelt ;-) Aber mit einem ESP funktioniert es echt tip top. Nur die Rückmeldung dauert teilweise ~2sec, der Prozessor in der Klima ist da wohl nicht der schnellste, bzw. gibt Änderungen nicht sofort wieder aus (hatte mal nen Log/Sniff mitgeschrieben).
Da du die Melcloud hast: hat dein Außengerät auch eine Schnittstelle?

Gruß, Robert

juemuc

Hallo Robert,

nein das Aussengerät hat keine Schnittstelle. Es bedient ja die beiden Innengeräte  ;D
Für was nutzt Du die zusätzlichen Informationen Türkontakt, Temp/Luftfeuchte und Radarsensor ?
Ich nutze aktuell nur fertige "Schnittstellen"  ::) Dadurch habe ich aktuell natürlich keine Anbindung der der Klimanalgae  :-[ Aber jetzt weiß ich zumindest, dass es möglich ist  8)

Viele Grüße

Jürgen


3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

jurkub

Hallo allwissendes Forum,

ich hab es nun auch geschafft einen D1 mini an meine Klima zu pömplen  :-)

Der FHEMinterne MQTT Server läuft und die Devices kommen per Autokonfig.
Die Werte kann ich auch alle auslesen.

Was ich nicht schaffe ist alles so zu konfigurieren, dass ich die Werte auch ändern kann :-(

Könnte bitte jemand seine funktionierende Konfig hier poste oder mir schicken.

Vielen Dank & Grüße
Jürgen

jurkub

mir würde erstmal schon reichen zu wissen was und in welchem Format ich bei "setList" eintragen muss.

hab alles aus mögliche aus dem Wiki: "MQTT2-Module - Praxisbeispiele" probiert aber nix funktioniert :-(

rudolfkoenig

Womoeglich hilft die Dokumentation hier: http://fhem.de/commandref_modular.html#MQTT2_DEVICEattr:
ZitatsetList cmd [topic|perl-Expression] ...
When the FHEM command cmd is issued, publish the topic. Multiple tuples can be specified, each of them separated by newline, the newline does not have to be entered in the FHEMWEB frontend. Example:
  attr dev setList\
    on tasmota/sonoff/cmnd/Power1 on\
    off tasmota/sonoff/cmnd/Power1 off
This example defines 2 set commands (on and off), which both publish the same topic, but with different messages (arguments).
Notes:
arguments to the set command will be appended to the message published (not for the perl expression)
the command arguments are available as $EVENT, $EVTPART0, etc., the name of the device as $NAME, both in the perl expression and the "normal" topic variant.
the perl expression must return a string containing the topic and the message separated by a space.
SetExtensions is activated
if the topic name ends with :r, then the retain flag is set

Die Topics, auf dem dein Endgeraet hoert, sieht man im subscriptions Reading im Detailansicht.
Die exakte Topic-Bezeichnug, bzw. welche MQTT-Messages bei einem topic verarbeitet werden, kriegt man aus dem Geraetedokumentation raus.

jurkub

das ist mein subscriptions Reading:

mitsubishi2mqtt/GUESTklima/custom/send mitsubishi2mqtt/GUESTklima/debug/set mitsubishi2mqtt/GUESTklima/fan/set
mitsubishi2mqtt/GUESTklima/mode/set mitsubishi2mqtt/GUESTklima/power/set mitsubishi2mqtt/GUESTklima/remote_temp/set
mitsubishi2mqtt/GUESTklima/temp/set mitsubishi2mqtt/GUESTklima/vane/set


Das hab ich bei setList eingetragen, funktioniert aber nicht

off: mitsubishi2mqtt/GUESTklima/power/set {"state":"OFF"}\
on: mitsubishi2mqtt/GUESTklima/power/set {"state":"ON"}