WThermostat Beca MQTT

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

Vorheriges Thema - Nächstes Thema

Beta-User

?

Du hast als einziges weiteres MQTT-Gerät ein Tasmota-Ding. Das wird (wegen fehlendem Sortier-Template) mit da reingemischt (korrekterweise: es wurde, jetzt ist plötzlich eine andere ClientId im Spiel, also MQTT2_SERVER).

Und solange der Code im svn nichts passendes tut (um Profile aufzubereiten und zu versenden), macht es auch keinen Sinn, den runterzuladen....

Aber ok, wenn es für dich paßt, ist ja erst mal alles gut, es wird schon ggf. zu gegebener Zeit jemand hier weitermachen (bzw. sowieso besser in einem neuen Thread).
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

Hallo,
ich hab mich nochmal versucht an den Attributen. Hier noch mal das Raw listing:
define MQTT2_thermostat_1766228 MQTT2_DEVICE thermostat_1766228
attr MQTT2_thermostat_1766228 readingList thermostat_1766228:Thermostat_Bad/thermostat/properties/Temperature:.* Temperature\
thermostat_1766228:Thermostat_Bad/thermostat/properties/systemMode:.* systemMode\
thermostat_1766228:Thermostat_Bad/clock/properties:.* { json2nameValue($EVENT) }\
thermostat_1766228:Thermostat_Bad/thermostat/properties/TargetTemperature:.* TargetTemperature\
thermostat_1766228:Thermostat_Bad/thermostat/properties/deviceOn:.* deviceOn\
thermostat_1766228:Thermostat_Bad/thermostat/properties/schedulesMode:.* schedulesMode\
thermostat_1766228:Thermostat_Bad/thermostat/properties/locked:.* locked\
thermostat_1766228:Thermostat_Bad/thermostat/properties/sensorSelection:.* sensorSelection\
thermostat_1766228:Thermostat_Bad/thermostat/properties:.* { json2nameValue($EVENT) }\
thermostat_1766228:Thermostat_Bad:.* { json2nameValue($EVENT) }\
thermostat_1766228:Thermostat_Bad/thermostat/properties/schedules:.* { json2nameValue($EVENT) }
attr MQTT2_thermostat_1766228 room MQTT2_DEVICE

setstate MQTT2_thermostat_1766228 2023-01-08 11:45:09 IODev myBroker
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 TargetTemperature 22.00
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 Temperature 22.50
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 a1h 05:00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 a1t 23.00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 a2h 11:00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 a2t 22.00
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 alive true
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 deviceOn true
setstate MQTT2_thermostat_1766228 2023-01-08 13:02:16 epochTime 1673182936
setstate MQTT2_thermostat_1766228 2023-01-08 13:02:16 epochTimeFormatted 2023-01-08 13:02:16
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:29 error Timeout: waiting for Wifi Working Mode response
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 firmware 1.0.11 Beta
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 idx Thermostat_Bad
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 ip x.x.x.x
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 locked false
setstate MQTT2_thermostat_1766228 2023-01-08 13:02:16 ntpServer pool.ntp.org
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 schedulesMode auto
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 sensorSelection internal
setstate MQTT2_thermostat_1766228 2023-01-08 11:45:09 subscriptions Thermostat_Bad/#
setstate MQTT2_thermostat_1766228 2023-01-08 13:01:05 systemMode cool
setstate MQTT2_thermostat_1766228 2023-01-08 13:02:16 timeZoneServer http://worldtimeapi.org/api/ip
setstate MQTT2_thermostat_1766228 2023-01-08 13:02:16 timezone Europe/Berlin
setstate MQTT2_thermostat_1766228 2023-01-08 13:02:16 validTime true
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w1h 05:00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w1t 23.00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w2h 09:00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w2t 22.00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w3h 11:30
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w3t 21.00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w4h 12:30
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w4t 21.00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w5h 17:00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w5t 23.00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w6h 21:00
setstate MQTT2_thermostat_1766228 2023-01-08 12:32:27 w6t 21.00


Das Ganze (desired-temp, manuell/automatic Einstellen, Anzeige des Heizzustandes) funktioniert schon sehr gut mit folgenden Attributen

Internals:
   CFGFN     
   CID        thermostat_1766228
   DEF        thermostat_1766228
   FUUID      63bac1d1-f33f-333b-2802-248215f68c1aafd1
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     890
   NAME       Thermostat_Bad
   NR         3546
   STATE      off
   TYPE       MQTT2_DEVICE
   eventCount 922
   myBroker_CONN myBroker_x.x.x.x_64798
   myBroker_MSGCNT 890
   myBroker_TIME 2023-01-08 21:06:05
   JSONMAP:
     TargetTemperature 0
   OLDREADINGS:
   READINGS:
     2023-01-08 14:14:57   IODev           myBroker
     2023-01-08 20:50:47   LWT             true
     2023-01-08 14:23:40   attrTemplateVersion 20221115
     2023-01-08 21:06:05   clock_epochTime 1673211964
     2023-01-08 21:06:05   clock_epochTimeFormatted 2023-01-08 21:06:04
     2023-01-08 21:06:05   clock_ntpServer pool.ntp.org
     2023-01-08 21:06:05   clock_timeZoneServer http://worldtimeapi.org/api/ip
     2023-01-08 21:06:05   clock_timezone  Europe/Berlin
     2023-01-08 21:06:05   clock_validTime true
     2023-01-08 20:50:47   desired-temp    22.00
     2023-01-08 20:50:47   locked          false
     2023-01-08 20:50:47   schedulesMode   auto
     2023-01-08 20:50:47   sensorSelection internal
     2023-01-08 20:50:47   state           off
     2023-01-08 21:05:10   temp_mean       22.50
     2023-01-08 21:05:10   temperature     22.50
Attributes:
   devStateIcon <a href="http://ip" target="_blank">
LWT
</a>
state
   event-aggregator temp_mean:300:linear:mean
   getList    desired-temp:noArg desired-temp Thermostat_Bad/thermostat/properties/TargetTemperature
   icon       hm-tc-it-wm-w-eu
   jsonMap    TargetTemperature:0
   model      WThermostatME81AH
   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/systemMode:.* {{state => $EVENT eq 'heat' ? 'on' : 'off'}}
  Thermostat_Bad/thermostat/properties/Temperature:.* temperature
  Thermostat_Bad/thermostat/properties/TargetTemperature:.* desired-temp
thermostat_1766228:Thermostat_Bad/thermostat/properties/schedulesMode:.* schedulesMode
thermostat_1766228:Thermostat_Bad/thermostat/properties/locked:.* locked
thermostat_1766228:Thermostat_Bad/thermostat/properties/sensorSelection:.* sensorSelection
   room       MQTT2_DEVICE
   setList    on:noArg Thermostat_Bad/thermostat/set/deviceOn true
  off:noArg Thermostat_Bad/thermostat/set/deviceOn false
  desired-temp:slider,5.0,1.0,35.0,1 Thermostat_Bad/thermostat/set/TargetTemperature $EVTPART1
  schedulesMode:auto,off Thermostat_Bad/thermostat/set/schedulesMode $EVTPART1
  systemMode:heat,cool,fan_only Thermostat_Bad/thermostat/set/systemMode $EVTPART1
  sensorSelection:internal,floor,both Thermostat_Bad/thermostat/set/sensorSelection $EVTPART1
   setStateList on off
   userReadings temp_mean:temperature:.* {ReadingsVal($name,"temperature",0)}
   webCmd     schedulesMode:desired-temp
   weekprofile Thermostat_Bad

Das Gerät liefert leider keinen state. Ich möchte, daß die Birne leuchtet, wenn das Relais angezogen hat und die Heizung an ist, statt nur anzuzeigen das der Thermostat an ist (deviceOn). Deshalb habe ich die einzige Variable, die den Zustand anzeigt, systemMode per reading auf state gelegt. Das klappt auch sehr gut.
Das Problem ist nun daß ich weder systemMode noch state in den FileLog bekomme. FileLog von systemMode ohne Umlegen auf state klappt, aber dann habe ich keinen state zum Umschalten der Birne. Ich habe versucht per userReading eine Kopie von state anzulegen, das klappt auch nicht:
userReadings temp_mean:temperature:.* {ReadingsVal($name,"temperature",0)},mystate:state:.* {ReadingsVal($name,"state",0)}
Warum kann man eigentlich state nicht loggen, es wird normal als Reading angezeigt? systemMode natürlich nicht mehr, ist ja umgebogen.


mirror

Ich glaube die Lösung gefunden zu haben.
Ich habe 2 verschiedene Thermostate. Der erste ist ein Avatto ME81AH und mit folgendem Attr-template versehen:
# Thermostat Avatto 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_05c
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 DEVICE/thermostat/properties/deviceOn:.* 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/systemMode:.* {{state => $EVENT eq 'heat' ? 'on' : 'off'}}\
  DEVICE/thermostat/properties/Temperature:.* temperature\
  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\
  schedulesMode:auto,off DEVICE/thermostat/set/schedulesMode $EVTPART1\
  systemMode:heat,cool,fan_only DEVICE/thermostat/set/systemMode $EVTPART1\
  sensorSelection:internal,floor,both DEVICE/thermostat/set/sensorSelection $EVTPART1
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_Beca_weekprofile($NAME, $EVTPART1, $EVTPART2, 'DEVICE/thermostat/set/schedules') }\
attr DEVICE getList desired-temp:noArg desired-temp DEVICE/thermostat/properties/TargetTemperature
attr DEVICE jsonMap TargetTemperature:0 Temperature:0
attr DEVICE webCmd schedulesMode:desired-temp
attr DEVICE userReadings temp_mean:temperature:.* {ReadingsVal($name,"temperature",0)},state:systemMode:.* {ReadingsVal($name,"systemMode",0)}
attr DEVICE event-aggregator temp_mean:300:linear:mean
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE model WThermostatME81AH
setreading DEVICE attrTemplateVersion 20221115


Der zweite Thermostat ist ein Moes BHT-002 GALW und fast identisch zu dem vom thread Eröffner und das template sehr ähnlich zum schon vorhandenen WThermostatBeca template:
# Thermostat Moes BHT-002 GALW Wifi
name:WThermostatBHT002
filter:TYPE=MQTT2_DEVICE
desc: First version for <a href="https://github.com/fashberg/WThermostatBeca">WThermostat BHT-002 GALW</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:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef }
par:TELETOPIC;info topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}tele$3" : undef }
par:STATTOPIC;ack topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}stat$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/(network|clock|thermostat|logging):.* {}\
  STATTOPIC/things/network/properties:.* { json2nameValue($EVENT,'net_',$JSONMAP) }\
  STATTOPIC/things/thermostat/properties:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; json2nameValue($EVENT,'',$JSONMAP) }\
  STATTOPIC/things/logging/properties:.* { json2nameValue($EVENT,'log_',$JSONMAP) }\
  STATTOPIC/things/clock/properties:.* { json2nameValue($EVENT,'clock_',$JSONMAP) }\
  STATTOPIC/things/thermostat/targetTemperature:.* desired-temp\
  STATTOPIC/things/thermostat/properties/state:.* {{state => $EVENT eq 'heating' ? 'on' : 'off'}}
attr DEVICE setList on:noArg CMNDTOPIC/things/thermostat/properties/deviceOn true\
  off:noArg CMNDTOPIC/things/thermostat/properties/deviceOn false\
  desired-temp:slider,5.0,0.5,35.0,1 CMNDTOPIC/things/thermostat/properties/targetTemperature $EVTPART1\
  mode:heat,auto,off CMNDTOPIC/things/thermostat/properties/mode $EVTPART1\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_Beca_weekprofile($NAME, $EVTPART1, $EVTPART2, 'CMNDTOPIC/things/thermostat/schedules') }\
  x_send_mcucommand:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(CMNDTOPIC/things/thermostat/mcucommand $payload)}
attr DEVICE getList desired-temp:noArg desired-temp CMNDTOPIC/things/thermostat/properties/targetTemperature
attr DEVICE jsonMap targetTemperature:0
attr DEVICE webCmd mode:desired-temp
attr DEVICE userReadings temp_mean:temperature:.* {ReadingsVal($name,"temperature",0)}
attr DEVICE event-on-change-reading .*
attr DEVICE event-min-interval .*:300
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE model WThermostatBHT002
setreading DEVICE attrTemplateVersion 20220108


Die Bedienung habe ich bei Beiden gerinfügig verändert, so daß man zwischen Manuell und Schedule Automatik umschalten kann. Das loggen wurde durch das userreading beschränkt, ist aber vielleicht noch verbesserungswürdig.
Das getList im WThermostatBeca hat nicht funktioniert, und musste so gemacht werden wie oben angezeigt.

Das Testen war sehr umständlich, weil das Ablegen der Einzelfiles im lib Verzeichnis nicht funktioniert, trotz Attr_Initialize() und anders mehr. Nur Einfügen in den große tempalte File hat funktioniert.

Beta-User

Zitat von: mirror am 12 Januar 2023, 18:51:07
Interesse das in Deiner template lib mit aufzunehmen?
"Meiner" ist gut, das ist eher "unsere" oder (von mir aus gesehen) "eure" ;) ...

Ja, schon. Allerdings wäre es klasse, wenn du kurz zusammenfassen könntest, wo eigentlich die Unterschiede zum Ausgangs-attrTemplate (und zueinander) liegen. Vielleicht wäre es sinnvoll, alle zu einem zusammenzufassen und per "RADIO"-Option zu fragen, welche Variante dass es eigentlich ist?

Und dann ist mir nicht klar, warum du per jsonMap die Readings erdest. Eines davon sollte eigentlich die Rückmeldung zu "desired-temp" sein, oder?

(Etwas MQTT-Verkehr würde die Sache vielleicht für mich erhellen, falls die obigen Fragen nicht halbwegs klar sind).
(Ich komme grade leider nicht dazu, mir das selbst zusammenzufrickeln).
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

Ja, OK - ich mache mal eine Gegenüberstellung vom Ausgangstemplate zu meinem WThermostatBHT002 (dem Ersteren).

Zum Erden:
Bin ja noch Anfänger! Werde mal versuchen das Mapping von targetTemperature auf desired-temp schon im json read zu machen. Dann spare ich mir die Einstellung, daß die Thermostate die MQTT Werte noch mal zusätzlich schicken. Weniger traffic! Hoffentlich klappt es.

Beta-User

Zitat von: mirror am 12 Januar 2023, 20:46:36
Ja, OK - ich mache mal eine Gegenüberstellung vom Ausgangstemplate zu meinem WThermostatBHT002 (dem Ersteren).
Vielleicht solltest du weniger nach der Hardware differenzieren. Das eine scheint mit Tasmota geflasht zu sein, und das andere mit irgendwas anderem. Vermutlich "ticken" alle (fast) gleich, die jeweils diese firmwares verwenden...

Zitat
Zum Erden:
Bin ja noch Anfänger! Werde mal versuchen das Mapping von targetTemperature auf desired-temp schon im json read zu machen. Dann spare ich mir die Einstellung, daß die Thermostate die MQTT Werte noch mal zusätzlich schicken. Weniger traffic! Hoffentlich klappt es.
Möglich. Ob da überhaupt was kommt, kann ich von hier aus nicht sagen. Zum Testen kannst du auch einfach
jsonMap mit "TargetTemperature:desired-temp" setzen und den anderen Zweig "erden" (leere Perl-Anweisung, {}).
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

Ja, hat geklappt, desired-temp wird schon im json auf targetTemperature gemapt. Die zusätzlichen Senden der properties in separaten MQTT messages ist im Gerät abgeschaltet:
# Thermostat Moes BHT-002 GALW Wifi
name:WThermostatBHT002
filter:TYPE=MQTT2_DEVICE
desc: First version for <a href="https://github.com/fashberg/WThermostatBeca">WThermostat BHT-002 GALW</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:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef }
par:TELETOPIC;info topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}tele$3" : undef }
par:STATTOPIC;ack topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}stat$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/(network|clock|thermostat|logging):.* {}\
  STATTOPIC/things/network/properties:.* { json2nameValue($EVENT,'net_',$JSONMAP) }\
  STATTOPIC/things/thermostat/properties:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; $EVENT =~ s/heating/on/g;; $EVENT =~ s/cooling/off/g;; json2nameValue($EVENT,'',$JSONMAP) }\
  STATTOPIC/things/logging/properties:.* { json2nameValue($EVENT,'log_',$JSONMAP) }\
  STATTOPIC/things/clock/properties:.* { json2nameValue($EVENT,'clock_',$JSONMAP) }
attr DEVICE setList on:noArg CMNDTOPIC/things/thermostat/properties/deviceOn true\
  off:noArg CMNDTOPIC/things/thermostat/properties/deviceOn false\
  desired-temp:slider,5.0,0.5,35.0,1 CMNDTOPIC/things/thermostat/properties/targetTemperature $EVTPART1\
  mode:heat,auto,off CMNDTOPIC/things/thermostat/properties/mode $EVTPART1\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_Beca_weekprofile($NAME, $EVTPART1, $EVTPART2, 'CMNDTOPIC/things/thermostat/schedules') }\
  x_send_mcucommand:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(CMNDTOPIC/things/thermostat/mcucommand $payload)}
attr DEVICE getList desired-temp:noArg desired-temp CMNDTOPIC/things/thermostat/properties
attr DEVICE jsonMap targetTemperature:desired-temp
attr DEVICE webCmd mode:desired-temp
attr DEVICE userReadings temp_mean:temperature:.* {ReadingsVal($name,"temperature",0)}
attr DEVICE event-on-change-reading .*
attr DEVICE event-min-interval .*:300
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE model WThermostatBHT002
setreading DEVICE attrTemplateVersion 20220108


Der Hauptunterschied zum Ursprungstemplate ist, daß ich statt den Thermostaten abschalten jetzt den Mode Manuell/Automatisch (d.h. schedule) umschalten kann. Sehe ich als sinnvoller an.

mirror

Ich hätte noch einmal ein paar Fragen.
Du hattest es zwar schon mal vorn erklärt, aber ich verstehe dieses erden von
devices/(network|clock|thermostat|logging):.* {}\
in der readinglist nicht. Was verbirgt sich hinter devices? mqtt messages wie "devices/thermostat" tauchen bei mir nie auf. Oder ist das schon die Wirkung?

Stattdessen habe ich viele Readings mit vorn dem CID, z.B.:
wthermostat_3343395:Thermostat_JulZi/stat/things/thermostat/targetTemperature:.* targetTemperature
Die könnte man doch eigentlich skippen, da ich jetzt alle Informationen aus der json Struktur hole. Wie?

In Deinem Vorbild template Beca könnten die beiden readings
  STATTOPIC/things/thermostat/deviceOn:.* {{state => $EVENT eq 'false' ? 'off' : 'on'}}\
  STATTOPIC/things/thermostat/targetTemperature:.* desired-temp

doch auch über jsonMap aus der json Struktur kommen. Richtig? Die Konversion zu on/off wird da schon gemacht.

Warum hast Du das substitute mit Ausrufezeichen versehen? Z.B.: $EVENT =~ s/true/"on"/g;; Die kommen jetzt doppelt.

Die Situation bzgl. der Nutzung von eigenen Files im FHEM/lib/AttrTemplate Verzeichnis ist sehr hinderlich. Immer wieder den großen File updaten, hin her kopieren und Rechte anpassen macht keinen Spaß.

Danke nochmal für Deine Hilfe.

Beta-User

Zitat von: mirror am 13 Januar 2023, 17:03:22
Ich hätte noch einmal ein paar Fragen.
Du hattest es zwar schon mal vorn erklärt, aber ich verstehe dieses erden von
devices/(network|clock|thermostat|logging):.* {}\
in der readinglist nicht. Was verbirgt sich hinter devices? mqtt messages wie "devices/thermostat" tauchen bei mir nie auf. Oder ist das schon die Wirkung?
Sorry, mir fehlt im Moment etwas der Gesamtüberblick über das, was bei dir kommt. An sich sollten Messages deswegen nicht nicht kommen, sondern einfach nur keine Readings erzeugt werden, falls (!) Messages zu der betreffenden Topic-Regex passen.

Zitat
Stattdessen habe ich viele Readings mit vorn dem CID, z.B.:
wthermostat_3343395:Thermostat_JulZi/stat/things/thermostat/targetTemperature:.* targetTemperature
Die könnte man doch eigentlich skippen, da ich jetzt alle Informationen aus der json Struktur hole. Wie?
Skippen wäre:
Thermostat_JulZi/stat/things/thermostat/targetTemperature:.* {}
Aber: ich bin nicht sicher, ob das (nur) der Antwort-topic auf explizite Anfragen ist. Wenn ja, wäre es besser, die Rückmeldung (nochmal) in das richtige Reading zu schreiben:
Thermostat_JulZi/stat/things/thermostat/targetTemperature:.* desired-temp
Zitat
In Deinem Vorbild template Beca könnten die beiden readings
  STATTOPIC/things/thermostat/deviceOn:.* {{state => $EVENT eq 'false' ? 'off' : 'on'}}\
  STATTOPIC/things/thermostat/targetTemperature:.* desired-temp

doch auch über jsonMap aus der json Struktur kommen. Richtig? Die Konversion zu on/off wird da schon gemacht.
Das kann ich nicht mehr beantworten, ohne die alten Beiträge nochmal durchzulesen, vermutlich war es ein timing-Thema (welche Info kommt wann, aus welchem Anlass und wo), oder einfach ein Versehen/unbedacht...

Zitat
Warum hast Du das substitute mit Ausrufezeichen versehen? Z.B.: $EVENT =~ s/true/"on"/g;; Die kommen jetzt doppelt.
"sauberes" JSON packt bestimmte Infos nicht in Anführungszeichen. Wenn die Quelle unsauber ist, muss man an der Stelle besser nicht nacharbeiten...

ZitatDie Situation bzgl. der Nutzung von eigenen Files im FHEM/lib/AttrTemplate Verzeichnis ist sehr hinderlich. Immer wieder den großen File updaten, hin her kopieren und Rechte anpassen macht keinen Spaß.
Da bin ich weiter ziemlich sicher, dass das Problem an sich nicht die zusätzlichen files sind, sondern irgendwas anderes, eventuell die Codierung und/oder Zeilenenden, die nicht unix-kompatibel sind. files wie diese unter Windows zu bearbeiten ist in der Regel "tödlich", ich mache das z.B. in der Regel nur mit Linux-Tools auf dem Zielrechner (per mcedit aus dem Paket mc) oder unter Win dann mit einem Editor, der diese Art "Probleme" kennt (notepad++).

Zitat
Danke nochmal für Deine Hilfe.
Gerne, sorry, dass das jetzt etwas gedauert hat.
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

Nur zum Ladeproblem:

Ich sehe im logfile daß 2 templates mehr erscheinen, also geladen werden. Ich sehe sie nur nicht in der Listenbox und auch die Anwendung in der commandline funktionert nicht. Neustart auch nicht.

Die Files haben unix Zeilenendung, also nur LF. Die Files habe gleiche owner/group/maske wie auch die anderen Files.

Kann es irgendwas mit dem Filter sein?

# Thermostat Avatto ME81AH Wifi
name:WThermostatME81AH
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*thermostat.*
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_05c


und der andere Thermostat:
# Thermostat Moes BHT-002 GALW Wifi
name:WThermostatBHT002
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd|stat).*
desc: First version for <a href="https://github.com/fashberg/WThermostatBeca">WThermostat BHT-002 GALW</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

Beta-User

Also wenn 2 mehr geladen werden, wurde die file auch gelesen, von daher sollte es auch kein Codierungsthema (UTF-8) oä. sein.

filter: bewirkt "nur", dass man das attrTemplate nicht sieht, per FHEM-Kommandofeld geht es dann eigentlich trotzdem mit der Anwendung desselben.

Zum Testen würde ich das mit dem Filter trotzdem mal weitestgehend rausnehmen (filter:TYPE=MQTT2_DEVICE sollte ok sein), es reicht dann auch, den Befehl für das neu-Einlesen abzusetzen (AttrTemplate_Initialize()).

Sonst habe ich grade keine Idee, zumal ich in der Regel ja grade die Integration in die Haupt-file haben will/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

Turtle

Für alle die das Template verwenden es funktioniert nur mit dieser Version !!! https://github.com/fashberg/WThermostatBeca/releases/tag/v1.19.beta1-fas

mirror

Zitat von: Turtle am 10 Juni 2023, 22:25:24Für alle die das Template verwenden es funktioniert nur mit dieser Version !!! https://github.com/fashberg/WThermostatBeca/releases/tag/v1.19.beta1-fas

Also bei mir laufen 6 Thermostate mit der letzten Version Version 1.22.

Was konkret hindert Dich an der Nutzung einer neueren Firmware Version?