WThermostat Beca MQTT

Begonnen von Turtle, 03 Oktober 2021, 09:37:02

Vorheriges Thema - Nächstes Thema

Turtle

und in dem Dropdown Menü kann ich zwischen "auto" und "cool" auswählen. Beide schalten das Thermostat ein, aber ändern keinen Modus am Thermostat.

Beta-User

Hmm, also:
- Es gibt erst mal keine neuen Einträge in der readingList. Von daher könntest du auch das aktuelle attrTemplate "testen", wobei das nicht viel mehr bringt wie alte Readings zu löschen. Das ginge auch direkt mit "deletereading MQTT2_wthermostat_4213660 .* 86400";
- auto/cool müßte man evtl. noch mit "off" ergänzen*;
- Was das mit der "Glühbirne" angeht, ist ein Ausrufezeichen der Hinweis, dass ein Befehl entweder nicht ausgeführt wurde, oder die Rückmeldung nicht zum erwarteten paßt. Hier kommt über einen JSON-Blob das "state=>cooling" zurück, soweit ich das beurteilen kann. Das ist was anderes wie "on", was dann als "off" gewertet wird => also toggelt es dann auf "on"*; eigentlich sollte daraus nach meinem Verständnis eher "mode"=>"cool" werden...

*Um diese Feinheiten auch noch rauszubekommen, müßtest du etwas mehr mit dem Gerät "spielen" und v.a. dann direkt auf den MQTT-Verkehr zugreifen (ich nutze dazu in der Regel mosquitto_sub aus mosquitto-clients (bitte nicht das Server-Paket mosquitto installieren!); es geht aber auch anders, dabei die Parameter so setzen, dass auch die Topics mit ausgegeben werden). Nur da sieht man, wo was letztendlich herkommt. (Alternative wäre, die JSON-Blobs zusätzlich unausgepackt in "sprechende Readings" zu überführen und dann das zu loggen). Leider ist es dabei manchmal so, dass sich die firmwares auch nicht immer in sich konsistent verhalten.

Vorschlag: Du machst dich erst mal fit, was die Nutzung von mosquitto_sub auf der Linux-Kommandozeile angeht?
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

Turtle

Zitat von: Beta-User am 07 Oktober 2021, 09:34:57
Vorschlag: Du machst dich erst mal fit, was die Nutzung von mosquitto_sub auf der Linux-Kommandozeile angeht?

Alles klar, ich werde ein bisschen rumprobieren  :)

mirror

Ich versuche erstmalig ein attrTemplate anzuwenden und stehe etwas auf dem Schlauch. Ich habe das WThermostatBeca ausgewählt und nach set kommt eine Box hoch, die Eingaben erfordert:
Specify the unknown parameters for MQTT2_MyBroker/WThermostatBeca:
Command topic prefix, without trailing /
info topic prefix, without trailing /
ack topic prefix, without trailing /


Wo kann ich da was finden? Das topic meines Gerätes ist z.B. Thermostat_Bad. Wäre das der einzugebene topic?

Beta-User

Hmm, eigentlich sollte da sowas wie ein LWT-Topic vorher da sein. Das scheint bei dir nicht der Fall gewesen zu sein... Vielleicht mal abbrechen und dann den Thermostat neu booten, dass das kommt.
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

mirror

Was ist LWT-topic?

Habe den Thermostat neu gebootet.

Ich habe jetzt einfach mal Thermostat_Bad für die 3 Prefixe eingegeben. Die Pfade sehen erstmal gar nicht so unsinnig aus:
Internals:
   CFGFN     
   CID        MyBroker
   DEF        MyBroker
   FUUID      XYZ...............
   IODev      MyBroker
   LASTInputDev MyBroker
   MSGCNT     571
   MyBroker_MSGCNT 571
   MyBroker_TIME 2022-11-08 17:25:57
   NAME       MQTT2_MyBroker
   NR         14572
   STATE      ???
   TYPE       MQTT2_DEVICE
   eventCount 577
   JSONMAP:
     deviceOn   0
     targetTemperature 0
   OLDREADINGS:
   READINGS:
     2022-11-07 16:42:10   IODev           MyBroker
     2022-11-08 16:34:20   attrTemplateVersion 20211006
     2022-11-08 17:23:24   properties_alive true
     2022-11-08 17:23:24   properties_deviceOn true
     2022-11-08 17:23:19   properties_epochTime 1667928199
     2022-11-08 17:23:19   properties_epochTimeFormatted 2022-11-08 17:23:19
     2022-11-08 17:23:24   properties_firmware 1.25beta
     2022-11-08 17:23:24   properties_idx  Thermostat_Bad
     2022-11-08 17:23:24   properties_ip   19x.cc.a.qwe
     2022-11-08 17:23:24   properties_locked false
     2022-11-08 17:23:19   properties_ntpServer pool.ntp.org
     2022-11-08 17:23:24   properties_schedulesMode off
     2022-11-08 17:23:24   properties_sensorSelection internal
     2022-11-08 17:23:24   properties_systemMode heat
     2022-11-08 17:23:24   properties_targetTemperature 22.00
     2022-11-08 17:23:24   properties_temperature 21.00
     2022-11-08 17:23:19   properties_timeZoneServer http://worldtimeapi.org/api/ip
     2022-11-08 17:23:19   properties_timezone Europe/Berlin
     2022-11-08 17:23:19   properties_validTime true
     2022-11-08 17:23:20   schedules_a1h   08:00
     2022-11-08 17:23:20   schedules_a1t   22.00
     2022-11-08 17:23:20   schedules_a2h   23:00
     2022-11-08 17:23:20   schedules_a2t   15.00
     2022-11-08 17:23:20   schedules_w1h   06:00
     2022-11-08 17:23:20   schedules_w1t   20.00
     2022-11-08 17:23:20   schedules_w2h   08:00
     2022-11-08 17:23:20   schedules_w2t   15.00
     2022-11-08 17:23:20   schedules_w3h   11:30
     2022-11-08 17:23:20   schedules_w3t   15.00
     2022-11-08 17:23:20   schedules_w4h   12:30
     2022-11-08 17:23:20   schedules_w4t   15.00
     2022-11-08 17:23:20   schedules_w5h   17:00
     2022-11-08 17:23:20   schedules_w5t   22.00
     2022-11-08 17:23:20   schedules_w6h   22:00
     2022-11-08 17:23:20   schedules_w6t   15.00
Attributes:
   devStateIcon <a href="http://ip" target="_blank">
LWT
</a>
state
   getList    desired-temp:noArg desired-temp Thermostat_Bad/things/thermostat/properties
   icon       hm-tc-it-wm-w-eu
   jsonMap    targetTemperature:0 deviceOn:0
   model      WThermostatBeca
   readingList Thermostat_Bad/LWT:.* LWT
  devices/(network|clock|thermostat|logging):.* {}
  Thermostat_Bad/things/network/properties:.* { json2nameValue($EVENT,'net_',$JSONMAP) }
  Thermostat_Bad/things/thermostat/properties:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; json2nameValue($EVENT,'',$JSONMAP) }
  Thermostat_Bad/things/logging/properties:.* { json2nameValue($EVENT,'log_',$JSONMAP) }
  Thermostat_Bad/things/clock/properties:.* { json2nameValue($EVENT,'clock_',$JSONMAP) }
  Thermostat_Bad/things/thermostat/deviceOn:.* {{state => $EVENT eq 'false' ? 'off' : 'on'}}
  Thermostat_Bad/things/thermostat/targetTemperature:.* desired-temp
MyBroker:Thermostat_Bad/clock/properties:.* { json2nameValue($EVENT, 'properties_', $JSONMAP) }
MyBroker:Thermostat_Bad/thermostat/properties:.* { json2nameValue($EVENT, 'properties_', $JSONMAP) }
MyBroker:Thermostat_Bad/thermostat/properties/schedules:.* { json2nameValue($EVENT, 'schedules_', $JSONMAP) }
   room       MQTT2_DEVICE
   setList    on:noArg Thermostat_Bad/things/thermostat/properties/deviceOn true
  off:noArg Thermostat_Bad/things/thermostat/properties/deviceOn false
  desired-temp:slider,5.0,0.5,35.0,1 Thermostat_Bad/things/thermostat/properties/targetTemperature $EVTPART1
  mode:heat,auto,cool Thermostat_Bad/things/thermostat/properties/mode $EVTPART1
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_Beca_weekprofile($NAME, $EVTPART1, $EVTPART2, 'Thermostat_Bad/things/thermostat/schedules') }
  x_send_mcucommand:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(Thermostat_Bad/things/thermostat/mcucommand $payload)}
   setStateList on off weekprofile
   userattr   weekprofile
   webCmd     mode:desired-temp
   weekprofile MQTT2_MyBroker


Die Readings stimmen. Aber wenn ich get desired-temp drücke kommt Time out.
Und die Fragezeichen im state kann ich mir auch nicht erklären.

Kannst Du mal auf das Listing schauen und vielleicht einen Tip geben.

Beta-User

Zitat von: mirror am 08 November 2022, 17:36:17
Was ist LWT-topic?
LWT=Last Will and Testament.

Dein list sieht aber komisch aus und anders als man das von einem Tasmota-Gerät erwarten würde (zumindest wertet das attrTemplate was aus, was in diese Richtung geht).

ZitatDie Pfade sehen erstmal gar nicht so unsinnig aus:
Die sehen eher so aus, als würde das, was du manuell eingegeben hast nicht verwendet, sondern was anderes. UND: Das ganze richt nach externem MQTT-Server und MQTT2_CLIENT.

Falls das so ist: Es ist keine gute Idee, sich mit einem "unbekannten" oder schwierigen Gerät in MQTT einzufuchsen, schon gleich nicht mit externem Server. Würde das (zumindest zum Einarbeiten) überdenken und ggf. einen MQTT2_SERVER parallel auf einem anderen Port aufsetzen. Umziehen ist dann relativ einfach, wenn mal klar ist, wie das Device aussehen muss.
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

mirror

Es handelt sich um das Gerät wie im Betreff, welches auch bei der Thread Eröffnung angegeben wurde.

Alle Readings sind per autocreate gekommen und richtig. Da ist nichts manuell eingegeben. Und ja, es ist ein externer server auf dem gleiche pi.

Ich werde erstmal alles löschen und dann ohne attrTemplate nochmal versuchen. Den FHEM mqtt2 server kann ich dann immer noch nutzen.

mirror

Ich trau mich nochmal aus der Deckung.

Das Gerät ist ein Thermostat Avatto ME81AH welches ich mit der Firmware von https://github.com/AlbertWeterings/WThermostatBeca geflasht habe. Es ist nicht ganz so komplex wie das Gerät des Themeneröffners, was mir aber reicht. Ich brauche eigentlich nur die Temperatur lesen und die Zieltemperatur einstellen.

Angehangen ist ein Screenshot vom MQTT Explorer (ebenso mit mosquitto_pub / -sub).

Folgendes Listing des Devices ergibt sich bei autocreate des MTTQ2_CLIENT:
Internals:
   CFGFN     
   CID        MyBroker
   DEF        MyBroker
   FUUID      637558c7-f33f-333b-6282-f007634750e4bbcf
   IODev      MyBroker
   LASTInputDev MyBroker
   MSGCNT     1161
   MyBroker_MSGCNT 1161
   MyBroker_TIME 2022-11-17 11:52:44
   NAME       MQTT2_MyBroker
   NR         1602
   STATE      ???
   TYPE       MQTT2_DEVICE
   eventCount 1169
   READINGS:
     2022-11-16 22:40:23   IODev           MyBroker
     2022-11-17 11:44:51   TargetTemperature 22.00
     2022-11-17 11:52:44   Temperature     21.00
     2022-11-17 11:44:51   deviceOn        true
     2022-11-17 11:50:29   epochTime       1668685828
     2022-11-17 11:50:29   epochTimeFormatted 2022-11-17 11:50:28
     2022-11-17 11:44:51   locked          false
     2022-11-17 11:50:29   ntpServer       pool.ntp.org
     2022-11-17 11:44:51   schedulesMode   off
     2022-11-17 11:44:51   sensorSelection internal
     2022-11-17 11:44:51   systemMode      heat
     2022-11-17 11:50:29   timeZoneServer  http://worldtimeapi.org/api/ip
     2022-11-17 11:50:29   timezone        Europe/Berlin
     2022-11-17 11:50:29   validTime       true
Attributes:
   readingList MyBroker:Thermostat_Bad/clock/properties:.* { json2nameValue($EVENT) }
MyBroker:Thermostat_Bad/thermostat/properties/Temperature:.* Temperature
MyBroker:Thermostat_Bad/thermostat/properties/TargetTemperature:.* TargetTemperature
MyBroker:Thermostat_Bad/thermostat/properties/deviceOn:.* deviceOn
MyBroker:Thermostat_Bad/thermostat/properties/schedulesMode:.* schedulesMode
MyBroker:Thermostat_Bad/thermostat/properties/locked:.* locked
MyBroker:Thermostat_Bad/thermostat/properties/systemMode:.* systemMode
MyBroker:Thermostat_Bad/thermostat/properties/sensorSelection:.* sensorSelection
   room       MQTT2_DEVICE

Die Anzeige der Readings ist korrekt und wird erneuert.

Jetzt habe ich mal versucht das bestehende attrTemplate WThermostatBeca zu kopieren und anzupassen:
# Thermostat ME81AH Wifi
name:WThermostatME81AH
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd|stat).*
desc: First version for <a href="https://github.com/AlbertWeterings/WThermostatBeca">WThermostat ME81AH</a>. <br>Not yet tested... <br> see <a href="https://forum.fhem.de/index.php/topic,123212.0.html">Forum Thread</a>. Might also be ok for original firmware from https://github.com/klausahrenberg/WThermostatBeca
order:E_05b
par:TELETOPIC;info topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}tele$3" : undef }
par:ICON;ICON as set, defaults to hm-tc-it-wm-w-eu;{ AttrVal("DEVICE","icon","hm-tc-it-wm-w-eu") }
par:WPNAME;weekprofile attr value, defaults to device name;{ AttrVal('DEVICE','weekprofile','DEVICE') }
{ Svn_GetFile("contrib/AttrTemplate/99_attrT_z2m_thermostat_Utils.pm", "FHEM/99_attrT_z2m_thermostat_Utils.pm", sub(){ CommandReload(undef, "99_attrT_z2m_thermostat_Utils.pm") }) }
attr DEVICE icon ICON
attr DEVICE userattr weekprofile
attr DEVICE weekprofile WPNAME
attr DEVICE devStateIcon <a href="http://ip" target="_blank">\
LWT\
</a>\
state
attr DEVICE setStateList on off weekprofile
attr DEVICE readingList TELETOPIC/LWT:.* LWT\
  devices/(clock|thermostat):.* {}\
  DEVICE/clock/properties:.* { json2nameValue($EVENT,'clock_',$JSONMAP) }\
  DEVICE/thermostat/properties:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; json2nameValue($EVENT,'',$JSONMAP) }\
  DEVICE/thermostat/properties/deviceOn:.* {{state => $EVENT eq 'false' ? 'off' : 'on'}}\
  DEVICE/thermostat/properties/TargetTemperature:.* desired-temp
attr DEVICE setList on:noArg DEVICE/thermostat/set/deviceOn true\
  off:noArg DEVICE/thermostat/set/deviceOn false\
  desired-temp:slider,5.0,1.0,35.0,1 DEVICE/thermostat/set/TargetTemperature $EVTPART1\
  systemMode:heat,auto,cool DEVICE/thermostat/set/systemMode $EVTPART1\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_ME81AH_weekprofile($NAME, $EVTPART1, $EVTPART2, 'DEVICE/thermostat/schedules') }
attr DEVICE getList desired-temp:noArg TargetTemperature DEVICE/thermostat/properties
attr DEVICE jsonMap TargetTemperature:0 deviceOn:0
attr DEVICE webCmd systemMode:desired-temp
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE model WThermostatME81AH
setreading DEVICE attrTemplateVersion 20221115


Die Substitution des DEVICE in Thermostat_Bad für das mqtt handling klappt nicht richtig. Und der info Eintrag tele ist, wie man aus dem Bild sieht, völlig anders. Deshalb gibt es wohl auch keinen vernünftigen STATE.

@BETA_USER: Könntest Du mal ein paar Tips für das attrTemplate geben. Brauchst Du dazu weitere Infos?


Beta-User

Zitat von: mirror am 17 November 2022, 18:19:09
Ich trau mich nochmal aus der Deckung.

[...]
@BETA_USER: Könntest Du mal ein paar Tips für das attrTemplate geben. Brauchst Du dazu weitere Infos?
Sorry, war mir irgendwie raus...

Vermutlich muss man das "from the scratch" machen, und mit sowas wie filter dann warten, bis man ziemlich fertig ist. Würde vorschlagen, das erst mal "im Klartext" anzufangen (also nicht gleich per attrTemplate), und dann erst den Transfer in ein attrTemplate vorzunehmen.

Magst du einen neuen Thread dazu aufmachen? Und am besten mal den recht neuen Thread zum Shelly-TRV überfliegen. Das ist zwar komplizierter, aber die Schritte sind da einigermaßen stringent nacheinander nachzuvollziehen, wenn ich das noch richtig im Kopf habe.

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

mirror

#25
Danke erstmal für die Antwort.

Die erste code Einfügung in meiner Antwort oben war ein listing ohne template Anwendung. Also so wie es der client vom broker bekommt.

Meine perl Kenntnisse sind zu gering. Es hapert schon daran, den device Namen aus der readinglist zu greppen.

Aber mir ist aufgefallen, daß es doch nicht so leicht ist ein eigenes template versuchsweise einzubinden, wie Du es in Deinem Einleitungsthread beschrieben hast. Also File.template rüberkopieren in /opt/fhem/FHEM/lib/AtrrTemplate und dann { use AttrTemplate } und { AttrTemplate_Initialize() } ausführen machen mein template in der Liste nicht sichtbar.

EDIT: Welchen Thread meinst Du mit Shelly-TRV?

Beta-User

Zitat von: mirror am 23 November 2022, 19:57:40
Die erste code Einfügung in meiner Antwort oben war ein listing ohne template Anwendung. Also so wie es der client vom broker bekommt.
Das ist mir klar, ich bevorzuge in dem neuen Thread dann aber bitte ein "raw"-list (list -r oder der Knopf unten in der Detailansicht etc.)

Zitat
Meine perl Kenntnisse sind zu gering. Es hapert schon daran, den device Namen aus der readinglist zu greppen.
Deswegen ja der Ansatz, das erst mal in einem gesonderten Thread im "Klartext" auszuentwickeln, und dann erst (irgendwann) den Schritt zu machen. Beim Ermitteln der Parameter habe ich dann schon etwas Übung, die ich auch einbringen würde ;) .

Zitat
Aber mir ist aufgefallen, daß es doch nicht so leicht ist ein eigenes template versuchsweise einzubinden, wie Du es in Deinem Einleitungsthread beschrieben hast. Also File.template rüberkopieren in /opt/fhem/FHEM/lib/AtrrTemplate und dann { use AttrTemplate } und { AttrTemplate_Initialize() } ausführen machen mein template in der Liste nicht sichtbar.
Das ist logisch, wenn du gleich ein (unpassendes) filter-Argument einbaust. Ansonsten ist es wirklich relativ einfach...

Zitat
EDIT: Welchen Thread meinst Du mit Shelly-TRV?
https://forum.fhem.de/index.php/topic,129394.0.html
Aber ist der so schwer zu finden? Habe nur Shelly und TRV benutzt...
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

mirror

#27
Ich denke, ich bin ein Stück weitergekommen, s.u.

Dies ist ein raw listing des devices:

define Thermostat_Bad MQTT2_DEVICE MyBroker
attr Thermostat_Bad userattr weekprofile
attr Thermostat_Bad devStateIcon <a href="http://ip" target="_blank">\
LWT\
</a>\
state
attr Thermostat_Bad getList TargetTemperature:noArg TargetTemperature Thermostat_Bad/thermostat/properties/TargetTemperature
attr Thermostat_Bad icon hm-tc-it-wm-w-eu
attr Thermostat_Bad jsonMap TargetTemperature:0 deviceOn:0
attr Thermostat_Bad model WThermostatME81AH
attr Thermostat_Bad readingList Thermostat_Bad/thermostat/properties/deviceOn:.* LWT\
  devices/(clock|thermostat):.* {}\
  Thermostat_Bad/clock/properties:.* { json2nameValue($EVENT,'clock_',$JSONMAP) }\
  Thermostat_Bad/thermostat/properties:.* { $EVENT =~ s/true/"on"/g;;;; $EVENT =~ s/false/"off"/g;;;; json2nameValue($EVENT,'',$JSONMAP) }\
  Thermostat_Bad/thermostat/properties/deviceOn:.* {{state => $EVENT eq 'true' ? 'on' : 'off'}}\
  Thermostat_Bad/thermostat/properties/systemMode:.* systemMode\
  Thermostat_Bad/thermostat/properties/sensorSelection:.* sensorSelection\
  Thermostat_Bad/thermostat/properties/Temperature:.* Temperature\
  Thermostat_Bad/thermostat/properties/TargetTemperature:.* TargetTemperature
attr Thermostat_Bad room MQTT2_DEVICE
attr Thermostat_Bad setList on:noArg Thermostat_Bad/thermostat/set/deviceOn true\
  off:noArg Thermostat_Bad/thermostat/set/deviceOn false\
  TargetTemperature:slider,5.0,1.0,35.0,1 Thermostat_Bad/thermostat/set/TargetTemperature $EVTPART1\
  schedulesMode:off,auto Thermostat_Bad/thermostat/set/schedulesMode $EVTPART1\
  sensorSelection:internal,floor,both Thermostat_Bad/thermostat/set/sensorSelection $EVTPART1\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_Beca_weekprofile($NAME, $EVTPART1, $EVTPART2, 'Thermostat_Bad/thermostat/schedules') }
attr Thermostat_Bad setStateList on off weekprofile
attr Thermostat_Bad webCmd deviceOn:TargetTemperature
attr Thermostat_Bad weekprofile Thermostat_Bad

setstate Thermostat_Bad on
setstate Thermostat_Bad 2022-11-24 09:15:50 IODev MyBroker
setstate Thermostat_Bad 2022-11-25 13:53:23 LWT true
setstate Thermostat_Bad 2022-11-25 13:53:23 TargetTemperature 21.00
setstate Thermostat_Bad 2022-11-25 13:53:23 Temperature 22.00
setstate Thermostat_Bad 2022-11-25 13:38:35 alive on
setstate Thermostat_Bad 2022-11-25 13:25:04 attrTemplateVersion 20221115
setstate Thermostat_Bad 2022-11-25 13:53:35 clock_epochTime 1669384415
setstate Thermostat_Bad 2022-11-25 13:53:35 clock_epochTimeFormatted 2022-11-25 13:53:35
setstate Thermostat_Bad 2022-11-25 13:53:35 clock_ntpServer pool.ntp.org
setstate Thermostat_Bad 2022-11-25 13:53:35 clock_timeZoneServer http://worldtimeapi.org/api/ip
setstate Thermostat_Bad 2022-11-25 13:53:35 clock_timezone Europe/Berlin
setstate Thermostat_Bad 2022-11-25 13:53:35 clock_validTime true
setstate Thermostat_Bad 2022-11-25 13:38:35 idx Thermostat_Bad
setstate Thermostat_Bad 2022-11-25 13:38:35 ip 192.168.178.22
setstate Thermostat_Bad 2022-11-25 13:53:23 sensorSelection internal
setstate Thermostat_Bad 2022-11-25 13:53:23 state on
setstate Thermostat_Bad 2022-11-25 13:53:23 systemMode cool


Das Weglassen des Filters hat noch nicht ganz gereicht, Ein zusätzlicher File im folder wird zwar erkannt als 255. template, aber ich kann es nicht auswählen.

EDIT:
Bekomme immer:
Unknown template_entry_name WThermostatME81AH

Habe erstmal mit einfügen in Deinen mqtt2.template file gearbeitet. Ist schon klar dass es verschwindet bei Update.

Das folgende template macht eigentlich so die wichtigsten Sachen, die ich benötige:

# Thermostat ME81AH Wifi
name:WThermostatME81AH
#filter:TYPE=MQTT2_DEVICE
desc: First version for <a href="https://github.com/AlbertWeterings/WThermostatBeca">WThermostat ME81AH</a>. <br>Not yet tested... <br> see <a href="https://forum.fhem.de/index.php/topic,123212.0.html">Forum Thread</a>. Might also be ok for original firmware from https://github.com/klausahrenberg/WThermostatBeca
order:E_05b
par:DEVNAME;Device's name in the topic tree;{ AttrVal('DEVICE','readingList','') =~ m,^\s*([^:]+/[^/]+)/clock/properties:,m ? $1 : "Thermostat_Bad" }
par:ICON;ICON as set, defaults to hm-tc-it-wm-w-eu;{ AttrVal("DEVICE","icon","hm-tc-it-wm-w-eu") }
par:WPNAME;weekprofile attr value, defaults to device name;{ AttrVal('DEVICE','weekprofile','DEVICE') }
{ Svn_GetFile("contrib/AttrTemplate/99_attrT_z2m_thermostat_Utils.pm", "FHEM/99_attrT_z2m_thermostat_Utils.pm", sub(){ CommandReload(undef, "99_attrT_z2m_thermostat_Utils.pm") }) }
attr DEVICE icon ICON
attr DEVICE userattr weekprofile
attr DEVICE weekprofile WPNAME
attr DEVICE devStateIcon <a href="http://ip" target="_blank">\
LWT\
</a>\
state
attr DEVICE setStateList on off weekprofile
attr DEVICE readingList DEVNAME/thermostat/properties/deviceOn:.* LWT\
  devices/(clock|thermostat):.* {}\
  DEVNAME/clock/properties:.* { json2nameValue($EVENT,'clock_',$JSONMAP) }\
  DEVNAME/thermostat/properties:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; json2nameValue($EVENT,'',$JSONMAP) }\
  DEVNAME/thermostat/properties/deviceOn:.* {{state => $EVENT eq 'true' ? 'on' : 'off'}}\
  DEVNAME/thermostat/properties/systemMode:.* systemMode\
  DEVNAME/thermostat/properties/sensorSelection:.* sensorSelection\
  DEVNAME/thermostat/properties/Temperature:.* Temperature\
  DEVNAME/thermostat/properties/TargetTemperature:.* TargetTemperature
attr DEVICE setList on:noArg DEVNAME/thermostat/set/deviceOn true\
  off:noArg DEVNAME/thermostat/set/deviceOn false\
  TargetTemperature:slider,5.0,1.0,35.0,1 DEVNAME/thermostat/set/TargetTemperature $EVTPART1\
  schedulesMode:off,auto DEVNAME/thermostat/set/schedulesMode $EVTPART1\
  sensorSelection:internal,floor,both DEVNAME/thermostat/set/sensorSelection $EVTPART1\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_Beca_weekprofile($NAME, $EVTPART1, $EVTPART2, 'DEVICE/thermostat/schedules') }
attr DEVICE getList TargetTemperature:noArg TargetTemperature DEVNAME/thermostat/properties/TargetTemperature
attr DEVICE jsonMap TargetTemperature:0 deviceOn:0
attr DEVICE webCmd deviceOn:TargetTemperature
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE model WThermostatME81AH
setreading DEVICE attrTemplateVersion 20221115


Die Firmware hat zwar sowas wie LWT, hier "alive" genannt. Ist aber nur beim booten auf true, danach false. Anfrage dazu läuft.
Hab mich mit dem Einschaltzustand "deviceOn" beholfen.
Das Gerät und die Firmware haben sowas wie ein Tagesprofile, welches über web interface und Gerät konfigurierbar ist. Bisher ist es mir nicht gelungen da über mqtt ranzukommen. Also die Einträge für weekprofile sind nur Platzhalter und können weg.
Ich nutze ja einen externen Server und in FHEM einen MQTT2_CLIENT (MyBroker). Wenn ich bei dem autocreate anlasse, tauche nach gewisser Zeit MyBroker:Thermostat_Bad Einträge im readingList auf, also nochmal die, die schon vorhanden sind.
Noch schlimmer ist, daß sich auch Readings von meinem einzigen zweiten mqtt Gerät, eine Tasmota Steckdose, mit einmischen. Aber das sind wohl andere Probleme.
Vielleicht gibt es ja noch Verbesserungsmöglichkeiten am template - wäre dankbar.
EDIT:
Ein Problem ist den Device Namen aus dem readingList zu greppen, z.B.:
MyBroker:Thermostat_Bad/clock/properties:.* { json2nameValue($EVENT) }

mit
par:DEVNAME;Device's name in the topic tree;{ AttrVal('DEVICE','readingList','') =~ m,^\s*([^:]+/[^/]+)/clock/properties:,m ? $1 : undef }


klappt das nicht, weil "MyBroker:" (mein MQTT2_CLIENT) davor steht. Hab schon diverse matchings probiert. Aber da hapert es halt.

Beta-User

Ein paar kurze Anmerkungen:
Zitat von: mirror am 25 November 2022, 14:28:55
  TargetTemperature:slider,5.0,1.0,35.0,1 Thermostat_Bad/thermostat/set/TargetTemperature $EVTPART1\
[/code]
Statt "TargetTemperature" würde ich "desired-temp" sehen, und da erst mal den Kreis schließen (passendes jsonMap). Du versuchst m.E. zu viel auf einmal und übersiehst dann die (mAn.) wichtigen Dinge (z.B. auch bzgl. "guter" Reading-Namen).

ZitatDas Weglassen des Filters hat noch nicht ganz gereicht
Da hast du das Kind mit dem Bade ausgekippt, der TYPE darf m.E. stressfrei stehen bleiben.

Keine Ahnung, warum es mit der separaten file nicht klappen sollte. Wird an anderer Stelle auch so gemacht.


ZitatIch nutze ja einen externen Server und in FHEM einen MQTT2_CLIENT (MyBroker). Wenn ich bei dem autocreate anlasse, tauche nach gewisser Zeit MyBroker:Thermostat_Bad Einträge im readingList auf, also nochmal die, die schon vorhanden sind.
Für MQTT2_CLIENT schaust du bitte mal ins Wiki? Es gibt da ein spezielles attrTemplate, das gewisse "Defizite" beseitigt, über die du hier zu stolpern scheinst.

ZitatEin Problem ist den Device Namen aus dem readingList zu greppen, z.B.:
MyBroker:Thermostat_Bad/clock/properties:.* { json2nameValue($EVENT) }
Es gibt einige Beispiele in der attrTemplate-File, die das Problem bereits gelöst haben.
Hier das passende für Tasmota:
par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal('DEVICE','readingList','') =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef }
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

mirror

Ok, das ist wenig zielführend hier. Ich beende mal diese Aktivität. Falls jemand Interesse hat, hier mein letzter Stand, mit dem ich ganz gut zurecht komme, auch wenn da natürlich noch Schwächen drin sind:

# Thermostat ME81AH Wifi
name:WThermostatME81AH
filter:TYPE=MQTT2_DEVICE
desc: First version for <a href="https://github.com/AlbertWeterings/WThermostatBeca">WThermostat ME81AH</a>. <br>Not yet tested... <br> see <a href="https://forum.fhem.de/index.php/topic,123212.0.html">Forum Thread</a>. Might also be ok for original firmware from https://github.com/klausahrenberg/WThermostatBeca
order:E_05b
par:DEVNAME;Device's name in the topic tree;{ AttrVal('DEVICE','readingList','') =~ m,thermostat_1766228:([^/]*)/, ? $1 : undef }
par:ICON;ICON as set, defaults to hm-tc-it-wm-w-eu;{ AttrVal("DEVICE","icon","hm-tc-it-wm-w-eu") }
par:WPNAME;weekprofile attr value, defaults to device name;{ AttrVal('DEVICE','weekprofile','DEVICE') }
{ Svn_GetFile("contrib/AttrTemplate/99_attrT_z2m_thermostat_Utils.pm", "FHEM/99_attrT_z2m_thermostat_Utils.pm", sub(){ CommandReload(undef, "99_attrT_z2m_thermostat_Utils.pm") }) }
attr DEVICE icon ICON
attr DEVICE userattr weekprofile
attr DEVICE weekprofile WPNAME
attr DEVICE devStateIcon <a href="http://ip" target="_blank">\
LWT\
</a>\
state
attr DEVICE setStateList on off weekprofile
attr DEVICE readingList DEVNAME/thermostat/properties/deviceOn:.* LWT\
  devices/(clock|thermostat):.* {}\
  DEVNAME/clock/properties:.* { json2nameValue($EVENT,'clock_',$JSONMAP) }\
  DEVNAME/thermostat/properties:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; json2nameValue($EVENT,'',$JSONMAP) }\
  DEVNAME/thermostat/properties/deviceOn:.* {{state => $EVENT eq 'true' ? 'on' : 'off'}}\
  DEVNAME/thermostat/properties/systemMode:.* systemMode\
  DEVNAME/thermostat/properties/sensorSelection:.* sensorSelection\
  DEVNAME/thermostat/properties/Temperature:.* Temperature\
  DEVNAME/thermostat/properties/TargetTemperature:.* desired-temp
attr DEVICE setList on:noArg DEVNAME/thermostat/set/deviceOn true\
  off:noArg DEVNAME/thermostat/set/deviceOn false\
  desired-temp:slider,5.0,1.0,35.0,1 DEVNAME/thermostat/set/TargetTemperature $EVTPART1\
  schedulesMode:off,auto DEVNAME/thermostat/set/schedulesMode $EVTPART1\
  sensorSelection:internal,floor,both DEVNAME/thermostat/set/sensorSelection $EVTPART1\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_Beca_weekprofile($NAME, $EVTPART1, $EVTPART2, 'DEVICE/thermostat/schedules') }
attr DEVICE getList desired-temp:noArg desired-temp DEVNAME/thermostat/properties/TargetTemperature
attr DEVICE jsonMap TargetTemperature:0 deviceOn:0
attr DEVICE webCmd deviceOn:desired-temp
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE model WThermostatME81AH
setreading DEVICE attrTemplateVersion 20221115


Wenn man in mein raw listing guckt, sieht man schon, daß es sich nicht um Tasmota handelt.

Und anstatt

Zitat
Da hast du das Kind mit dem Bade ausgekippt, der TYPE darf m.E. stressfrei stehen bleiben.

Keine Ahnung, warum es mit der separaten file nicht klappen sollte. Wird an anderer Stelle auch so gemacht.

mal die eigenen init Kommandos zu verraten, außer { AttrTemplate_Initialize() } ausführen, wäre hilfreicher gewesen.

Danke trotzdem der Aufmerksamkeit.