Autor Thema: Werte-Mapping  (Gelesen 219 mal)

Offline beaune

  • Full Member
  • ***
  • Beiträge: 110
Werte-Mapping
« am: 12 Juli 2021, 12:53:53 »
Hallo,

ich würde gerne in fhemweb andere Werte darstellen als die, die im JSON-Telegramm übertragen werden, also ein Wertemapping durchführen. Dabei hatten ich an etwas gedacht, wie es z.B. in HTTPMOD gelöst ist:
set01IMap  false:off, true:onWie sollte man so etwas in einem MQTT2-Device lösen?

Konkreter Anwendungsfall:
In der getList ist dieses Reading definiert:
Hc1SFMode:noArg Hc1SFMode_0_value ebusd/f47/Hc1SFMode/get
Und in der setList:
Hc1SFMode_0_value:none,onedayholiday,onedaybankholiday  ebusd/f47/Hc1SFMode/set $EVTPART1Ziel ist jetzt, dass man in fhemWeb deutsche Begriffe als Auswahlliste bekommt, so wie sie auch der Heizungsregler anzeigt, also z.B. "Ein Tag außer Haus", was "onedayholiday" entsprechen würde.

Wie kamm man sowas elegant für ein MQTT2-Device in fhem abbilden? Hab da spontan nichts gefunden...

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16303
Antw:Werte-Mapping
« Antwort #1 am: 12 Juli 2021, 13:27:45 »
Moin.

Vorab: Es wäre hilfreich, wenn du immer eine RAW-Definition (einschließlich setstate-Zeilen) liefern könntest (und hier optimalerweise auch Info, über welchen Topic ggf. welche Antwort kommt).

Was du hier ansprichst, sind m.E. zwei unterschiedliche Aspekte:
a) jsonMap = Ändern der "key"-Namen der eingehenden Nachrichten und (vielleicht?)
b) Umwandeln von eingehenden Werten, die in den "keys" stehen.

Teil a) könnte (auszugsweise, bezogen auf den Beispiel) so aussehen:attr DEVICE jsonMap Hc1SFMode_0_value:Hc1SFMode
attr DEVICE getList Hc1SFMode:noArg Hc1SFMode ebusd/f47/Hc1SFMode/get
attr DEVICE setList Hc1SFMode:none,onedayholiday,onedaybankholiday  ebusd/f47/Hc1SFMode/set $EVTPART1
Zu Teil b) gibt es einige wenige Beispiele in mqtt2.template. Die Codes sind nicht unbedingt selbsterklärend, im Kern geht es darum, den JSON-String "vorzubehandeln" und die Werte "FHEM-like" zu ändern, bevor sie durch json2nameValue() (j2nv) aufgedröselt werden. MAn. "einfacher" ist 6channel_ethernet_board_6input_split, es gibt dann noch was komplizierteres, aber ebenfalls (bzgl. ebus) nicht uninteressantes z.B. in tasmota_zigbee2tasmota_light_dimmer: Da wird nur der "innere JSON" an j2nv() übergeben ;) .
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

 

decade-submarginal