From e7983acb9aeb8b1b03e7170364362f6ddb0b07db Mon Sep 17 00:00:00 2001 From: Beta-User Date: Tue, 7 May 2019 17:13:16 +0000 Subject: [PATCH] mqtt2.template: tasmota: change readingList regex, add rf template git-svn-id: https://svn.fhem.de/fhem/trunk@19345 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/lib/AttrTemplate/mqtt2.template | 272 ++++++++++++---------- 1 file changed, 153 insertions(+), 119 deletions(-) diff --git a/fhem/FHEM/lib/AttrTemplate/mqtt2.template b/fhem/FHEM/lib/AttrTemplate/mqtt2.template index 51c11adc1..02f43e374 100644 --- a/fhem/FHEM/lib/AttrTemplate/mqtt2.template +++ b/fhem/FHEM/lib/AttrTemplate/mqtt2.template @@ -389,21 +389,21 @@ attr DEVICE model L_14_aqara_cube name:A_01a_tasmota_basic_state_power1 filter:TYPE=MQTT2_DEVICE desc:Applies to Sonoff Basic, S20 using POWER1-topic for relay state
NOTE: The format the device is sending data will also be changed to lowercase!
NOTE: This template is intended to configure also channel one of multi-channel tasmota devices -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +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 } attr DEVICE stateFormat POWER1 -#attr DEVICE userReadings state:POWER1:.* { lc(ReadingsVal($name,"POWER1","")) } -#attr DEVICE eventMap { dev=>{'^(.*)POWER(.?): OFF$'=>'$1POWER$2: off', '^(.*)POWER(.?): ON$'=>'$1POWER$2: on'} } -set DEVICE attrTemplate A_01z_tasmota_set_lowercase_texts_and_state1 +set DEVICE attrTemplate A_01z_tasmota_set_lowercase_texts_and_state1_nF attr DEVICE setList \ - off:noArg cmnd/DEVNAME/POWER1 0\ - on:noArg cmnd/DEVNAME/POWER1 1\ - toggle:noArg cmnd/DEVNAME/POWER1 2 + off:noArg CMNDTOPIC/POWER1 0\ + on:noArg CMNDTOPIC/POWER1 1\ + toggle:noArg CMNDTOPIC/POWER1 2 attr DEVICE readingList \ - tele/DEVNAME/LWT:.* LWT\ - tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\ - stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) } + TELETOPIC/LWT:.* LWT\ + TELETOPIC/STATE:.* { json2nameValue($EVENT) }\ + TELETOPIC/SENSOR:.* { json2nameValue($EVENT) }\ + TELETOPIC/INFO.:.* { json2nameValue($EVENT) }\ + STATTOPIC/RESULT:.* { json2nameValue($EVENT) } deletereading -q DEVICE (?!associatedWith).* attr DEVICE setStateList on off toggle attr DEVICE autocreate 0 @@ -416,30 +416,33 @@ desc:Applies to Sonoff 1 Channel devices using POWER-topic for relay state
N set DEVICE attrTemplate A_01a_tasmota_basic_state_power1 name:A_01x_tasmota_clear_readings_reset_readingsList_and_reboot -filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* +filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd|stat).* desc: replaces the readingList with defaults, clears the readingList and reboots to get all readings -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +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:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")} attr DEVICE readingList \ - tele/DEVNAME/LWT:.* LWT\ - tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/UPTIME:.* { json2nameValue($EVENT) }\ - stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) } + TELETOPIC/LWT:.* LWT\ + TELETOPIC/STATE:.* { json2nameValue($EVENT) }\ + TELETOPIC/SENSOR:.* { json2nameValue($EVENT) }\ + TELETOPIC/INFO.:.* { json2nameValue($EVENT) }\ + TELETOPIC/UPTIME:.* { json2nameValue($EVENT) }\ + STATTOPIC/RESULT:.* { json2nameValue($EVENT) } deletereading -q DEVICE (?!associatedWith).* -set IO_DEV publish cmnd/DEVNAME/Restart 1 +set IO_DEV publish CMNDTOPIC/Restart 1 attr DEVICE autocreate 0 name:A_01x_tasmota_prefix_clearing_and_reboot filter:TYPE=MQTT2_DEVICE::FILTER=readingList=.*(tele|cmnd).* desc:Applies to all tasmota devices
NOTE: This template will delete some readings and clear the readingList from prefix use when expanding json.
When applying the template the tasmota device is rebooted to get all readings -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef } par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")} par:READINGLISTCLEARED;cleared from prefixes;{ AttrVal("DEVICE","readingList","") =~ s/, '[^_]+[_]'/, ''/g, ? $1 : undef } attr DEVICE readingList READINGLISTCLEARED deletereading -q DEVICE (?!associatedWith).* -set IO_DEV publish cmnd/DEVNAME/Restart 1 +set IO_DEV publish CMNDTOPIC/Restart 1 attr DEVICE autocreate 0 # tasmota device with one relay, one motion sensor via switch @@ -447,11 +450,11 @@ name:A_01b_tasmota_1ch+motion+SI7021 desc:tasmota device with one relay, one motion sensor via switch and one SI7021 combined temperature and humidity sensor.
Configures a single device including all readings filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* set DEVICE attrTemplate A_01a_tasmota_basic_state_power1 -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef } attr DEVICE setList \ - off:noArg cmnd/DEVNAME/POWER1 0\ - on:noArg cmnd/DEVNAME/POWER1 1\ - toggle:noArg cmnd/DEVNAME/POWER1 2 + off:noArg CMNDTOPIC/POWER1 0\ + on:noArg CMNDTOPIC/POWER1 1\ + toggle:noArg CMNDTOPIC/POWER1 2 attr DEVICE stateFormat {\ ReadingsVal($name, "POWER1", "off") . " "\ ReadingsVal($name, "POWER2", "off") . " "\ @@ -485,19 +488,20 @@ attr DEVICE model A_01c_tasmota_POW name:A_01d_tasmota_ir desc:Demonstrates multiple options how to configure tasmota devices as IR remote control extension.
Forum Thread
Tasmota IRremote Commands
Simple IR-circuit
set irsend filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +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:POWERCMD;needed command to be sent like in example dec '{"protocol":"NEC","bits":32,"data":551489775}' (without '');{ undef } par:VOLUMEUPCMD;needed command to be sent like in example raw '0,926,844,958,832,1798,868,902,848,900,870,900,852,908,918,958,794,934,874,928,1738,934,856,1764' (without '');{ undef } par:MULTIPLE1CMD;needed command to be sent like in example hex '{"Protocol":"NEC","Bits":32,"Data":0x8166817E}' (without '');{ undef } par:MULTIPLE2CMD;needed command to be sent like in example hex '{"Protocol":"NEC","Bits":32,"Data":0x8166817E}' (without '');{ undef } attr DEVICE setList \ - power:noArg cmnd/DEVNAME/IRsend POWERCMD\ - volumeup:noArg cmnd/DEVNAME/IRsend VOLUMEUPCMD\ - 11:noArg cmnd/DEVNAME/Backlog IRsend MULTIPLE1CMD;cmnd/DEVNAME/delay 8;cmnd/DEVNAME/IRsend MULTIPLE2CMD\ - irsend:textField cmnd/DEVNAME/irsend {"Protocol":"$EVTPART1","Bits":$EVTPART2,"Data":"0x$EVTPART3"} + power:noArg CMNDTOPIC/IRsend POWERCMD\ + volumeup:noArg CMNDTOPIC/IRsend VOLUMEUPCMD\ + 11:noArg CMNDTOPIC/Backlog IRsend MULTIPLE1CMD;CMNDTOPIC/delay 8;CMNDTOPIC/IRsend MULTIPLE2CMD\ + irsend:textField CMNDTOPIC/irsend {"Protocol":"$EVTPART1","Bits":$EVTPART2,"Data":"0x$EVTPART3"} attr DEVICE readingList \ - tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/RESULT:.* { $EVENT =~ m,..IrReceived....Protocol...([A-Za-z0-9]+)...Bits..([\d]+)..Data...([A-Za-z0-9]+)..., ? {"$1_$2"=>$3} : json2nameValue($EVENT) } + TELETOPIC/INFO.:.* { json2nameValue($EVENT) }\ + TELETOPIC/RESULT:.* { $EVENT =~ m,..IrReceived....Protocol...([A-Za-z0-9]+)...Bits..([\d]+)..Data...([A-Za-z0-9]+)..., ? {"$1_$2"=>$3} : json2nameValue($EVENT) } attr DEVICE stateFormat state\
\ IPAddress @@ -505,26 +509,53 @@ attr DEVICE event-on-change-reading .* attr DEVICE icon IR attr DEVICE model A_01d_tasmota_ir +#tasmota device with rf-circuit +name:A_01d_tasmota_rf +desc:Demonstrates multiple options how to configure tasmota devices as rf remote control extension.
Forum Thread
NOTE: still widely untested... +filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd|stat).* +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:POWERCMD;needed command to be sent like in example dec '{"protocol":"NEC","bits":32,"data":551489775}' (without '');{ undef } +#par:VOLUMEUPCMD;needed command to be sent like in example raw '0,926,844,958,832,1798,868,902,848,900,870,900,852,908,918,958,794,934,874,928,1738,934,856,1764' (without '');{ undef } +#par:MULTIPLE1CMD;needed command to be sent like in example hex '{"Protocol":"NEC","Bits":32,"Data":0x8166817E}' (without '');{ undef } +#par:MULTIPLE2CMD;needed command to be sent like in example hex '{"Protocol":"NEC","Bits":32,"Data":0x8166817E}' (without '');{ undef } +attr DEVICE setList \ + power:noArg CMNDTOPIC/RFsend POWERCMD\ + volumeup:noArg CMNDTOPIC/RFsend VOLUMEUPCMD\ + rfsend:textField CMNDTOPIC/RFsend {"Protocol":"$EVTPART1","Bits":$EVTPART2,"Data":"0x$EVTPART3"} +attr DEVICE readingList \ + TELETOPIC/INFO.:.* { json2nameValue($EVENT) }\ +# TELETOPIC/RESULT:.* /SmartHome/Interface/Bridge/tele/RESULT:.* { $EVENT =~ m,..RfReceived....Sync..([A-Za-z0-9]+)..Low..([\d]+)..High..([\d]+)..Data...([A-Za-z0-9]+)...RfKey...([^"]+)..., ? {'$1_$2_$3'=>"$4"} : json2nameValue($EVENT) }\ + TELETOPIC/RESULT:.* { $EVENT =~ m,..RfReceived....Sync..([A-Za-z0-9]+)..Low..([\d]+)..High..([\d]+)..Data...([A-Za-z0-9]+)...RfKey...([^"]+)..., ? {"json_raw"=>$EVENT} : undef }\ + TELETOPIC/RESULT:.* { $EVENT =~ m,..RfReceived....Sync..([A-Za-z0-9]+)..Low..([\d]+)..High..([\d]+)..Data...([A-Za-z0-9]+)...RfKey...([^"]+)..., ? {"Data"=>"$4"} : undef } +attr DEVICE stateFormat state\ +
\ +IPAddress +attr DEVICE event-on-change-reading .* +attr DEVICE model A_01d_tasmota_rf + # tasmota 2ch as one FHEM device. name:A_02a_tasmota_2ch_unified filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* desc:Configures a single device including all readings set DEVICE attrTemplate A_01a_tasmota_basic_state_power1 -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +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 } attr DEVICE setList \ - POWER1:on,off,toggle cmnd/DEVNAME/POWER1 $EVTPART1\ - POWER2:on,off,toggle cmnd/DEVNAME/POWER2 $EVTPART1 + POWER1:on,off,toggle CMNDTOPIC/POWER1 $EVTPART1\ + POWER2:on,off,toggle CMNDTOPIC/POWER2 $EVTPART1 attr DEVICE webCmd POWER1 on:POWER1 off:POWER2 on:POWER2 off attr DEVICE devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot 1.on:on:POWER1+off 1.off:off:POWER1+on 2.on:on:POWER2+off 2.off:off:POWER2+on attr DEVICE readingList \ - tele/DEVNAME/LWT:.* LWT\ - tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\ - stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/UPTIME:.* { json2nameValue($EVENT) }\ - stat/DEVNAME/POWER1:.* POWER1\ - stat/DEVNAME/POWER2:.* POWER2 + TELETOPIC/LWT:.* LWT\ + TELETOPIC/STATE:.* { json2nameValue($EVENT) }\ + TELETOPIC/SENSOR:.* { json2nameValue($EVENT) }\ + TELETOPIC/INFO.:.* { json2nameValue($EVENT) }\ + STATTOPIC/RESULT:.* { json2nameValue($EVENT) }\ + TELETOPIC/UPTIME:.* { json2nameValue($EVENT) }\ + STATTOPIC/POWER1:.* POWER1\ + STATTOPIC/POWER2:.* POWER2 attr DEVICE stateFormat LWT\ 1:POWER1\ 2:POWER2\ @@ -538,8 +569,7 @@ name:A_02_tasmota_2channel_split filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* desc:sonoff 2 channel device flashed with Tasmota.
NOTE: a second device will be created for the second channel set DEVICE attrTemplate A_01a_tasmota_basic_state_power1 -#par:COMMAND;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\btele(/.*)?/LWT:, ? "${1}cmnd$2" : undef } -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef } attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2 copy DEVICE DEVICE_CH2 attr DEVICE_CH2 stateFormat POWER2 @@ -547,9 +577,9 @@ attr DEVICE_CH2 stateFormat POWER2 attr DEVICE_CH2 comment Channel 2 for DEVICE setreading DEVICE_CH2 associatedWith DEVICE attr DEVICE_CH2 setList \ - off:noArg cmnd/DEVNAME/POWER2 0\ - on:noArg cmnd/DEVNAME/POWER2 1\ - toggle:noArg cmnd/DEVNAME/POWER2 2 + off:noArg CMNDTOPIC/POWER2 0\ + on:noArg CMNDTOPIC/POWER2 1\ + toggle:noArg CMNDTOPIC/POWER2 2 attr DEVICE_CH2 setStateList on off toggle attr DEVICE model A_02_tasmota_2channel_split attr DEVICE_CH2 model A_02_tasmota_2channel_split @@ -559,34 +589,34 @@ attr DEVICE_CH2 model A_02_tasmota_2channel_split name:A_02b_tasmota_2ch_shutter_invert_1 filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* desc:Configures a dual chanel tasmota device as shutter; needs a special firmware version to operate.
Forum Thread
NOTE: This template will configure the shutter in ROLLO style with pct 0% = open shutter. Use template A_02b_tasmota_2ch_shutter_invert_0, if you need a Homematic-style device pct 100% = open. -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef } par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")} set DEVICE attrTemplate A_01z_tasmota_set_lowercase_texts_and_state1 -set IO_DEV publish cmnd/DEVNAME/Backlog LedState 2; SetOption80 1; SetOption14 1; SetOption81 1; switchmode1 3; switchmode2 3; SaveData 1; -set IO_DEV publish cmnd/DEVNAME/Restart 1 -defmod configure_DEVICEattrTemplate_at at +00:00:20 set IO_DEV publish cmnd/DEVNAME/Backlog SHUTTEROPENDURATION 20;; SHUTTERCLOSEDURATION 20;; SHUTTERINVERT 1;; GROUPTOPIC Rollos;; SaveData 1;; +set IO_DEV publish CMNDTOPIC/Backlog LedState 2; SetOption80 1; SetOption14 1; SetOption81 1; switchmode1 3; switchmode2 3; SaveData 1; +set IO_DEV publish CMNDTOPIC/Restart 1 +defmod configure_DEVICEattrTemplate_at at +00:00:20 set IO_DEV publish CMNDTOPIC/Backlog SHUTTEROPENDURATION 20;; SHUTTERCLOSEDURATION 20;; SHUTTERINVERT 1;; GROUPTOPIC Rollos;; SaveData 1;; attr DEVICE setList \ - close:noArg cmnd/DEVNAME/SHUTTERCLOSE\ - open:noArg cmnd/DEVNAME/SHUTTEROPEN\ - half:noArg cmnd/DEVNAME/SHUTTERPOSITION 50\ - pct:slider,0,1,100 cmnd/DEVNAME/SHUTTERPOSITION $EVTPART1\ - stop:noArg cmnd/DEVNAME/SHUTTERSTOP\ - resetClose:noArg cmnd/DEVNAME/SHUTTERSETCLOSE\ - x_configuration cmnd/DEVNAME/$EVTPART1 $EVTPART2 + close:noArg CMNDTOPIC/SHUTTERCLOSE\ + open:noArg CMNDTOPIC/SHUTTEROPEN\ + half:noArg CMNDTOPIC/SHUTTERPOSITION 50\ + pct:slider,0,1,100 CMNDTOPIC/SHUTTERPOSITION $EVTPART1\ + stop:noArg CMNDTOPIC/SHUTTERSTOP\ + resetClose:noArg CMNDTOPIC/SHUTTERSETCLOSE\ + x_configuration CMNDTOPIC/$EVTPART1 $EVTPART2 attr DEVICE readingList \ - tele/DEVNAME/LWT:.* LWT\ - stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\ - stat/DEVNAME/POWER1:.* POWER1\ - stat/DEVNAME/POWER1:on {{'state' => 'opening'}}\ - stat/DEVNAME/POWER2:.* POWER2\ - stat/DEVNAME/POWER2:on {{'state' => 'closing'}}\ - stat/DEVNAME/SHUTTER1:.* state\ - stat/DEVNAME/SHUTTER1:.* pct\ - tele/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/UPTIME:.* { json2nameValue($EVENT) } + TELETOPIC/LWT:.* LWT\ + STATTOPIC/RESULT:.* { json2nameValue($EVENT) }\ + STATTOPIC/POWER1:.* POWER1\ + STATTOPIC/POWER1:on {{'state' => 'opening'}}\ + STATTOPIC/POWER2:.* POWER2\ + STATTOPIC/POWER2:on {{'state' => 'closing'}}\ + STATTOPIC/SHUTTER1:.* state\ + STATTOPIC/SHUTTER1:.* pct\ + TELETOPIC/RESULT:.* { json2nameValue($EVENT) }\ + TELETOPIC/STATE:.* { json2nameValue($EVENT) }\ + TELETOPIC/SENSOR:.* { json2nameValue($EVENT) }\ + TELETOPIC/INFO.:.* { json2nameValue($EVENT) }\ + TELETOPIC/UPTIME:.* { json2nameValue($EVENT) } attr DEVICE devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red Online:10px-kreis-gruen Offline:10px-kreis-rot 100:fts_shutter_100 0:fts_shutter_10 9\d.*:fts_shutter_90 8\d.*:fts_shutter_80 7\d.*:fts_shutter_70 6\d.*:fts_shutter_60 5\d.*:fts_shutter_50 4\d.*:fts_shutter_40 3\d.*:fts_shutter_30 2\d.*:fts_shutter_20 1\d.*:fts_shutter_10 \b\d\b.*:fts_shutter_10 set_.*:fts_shutter_updown attr DEVICE cmdIcon open:fts_shutter_up close:fts_shutter_down stop:fts_shutter_manual half:fts_shutter_50 attr DEVICE webCmd :open:close:half:stop:pct @@ -608,10 +638,10 @@ attr DEVICE model A_02b_tasmota_2ch_shutter_invert_1 name:A_02b_tasmota_2ch_shutter_invert_0 filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* desc:Configures a dual chanel tasmota device as shutter; needs a special firmware version to operate.
Forum Thread
NOTE: This template will configure the shutter in Homematic-style with pct 100% = open. For ROLLO style device with pct 0% = open shutter. Use template A_02b_tasmota_2ch_shutter_invert_1 instead. -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef } par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")} set DEVICE attrTemplate A_02b_tasmota_2ch_shutter_invert_1 -defmod configure_DEVICEattrTemplate_at at +00:00:20 set IO_DEV publish cmnd/DEVNAME/Backlog SHUTTEROPENDURATION 20;; SHUTTERCLOSEDURATION 20;; SHUTTERINVERT 0;; GROUPTOPIC Rollos;; SaveData 1;; +defmod configure_DEVICEattrTemplate_at at +00:00:20 set IO_DEV publish CMNDTOPIC/Backlog SHUTTEROPENDURATION 20;; SHUTTERCLOSEDURATION 20;; SHUTTERINVERT 0;; GROUPTOPIC Rollos;; SaveData 1;; attr DEVICE devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red Online:10px-kreis-gruen Offline:10px-kreis-rot 100:fts_shutter_10 0:fts_shutter_100 9\d.*:fts_shutter_10 8\d.*:fts_shutter_20 7\d.*:fts_shutter_30 6\d.*:fts_shutter_40 5\d.*:fts_shutter_50 4\d.*:fts_shutter_60 3\d.*:fts_shutter_70 2\d.*:fts_shutter_80 1\d.*:fts_shutter_90 \b\d\b.*:fts_shutter_90 attr DEVICE model A_02b_tasmota_2ch_shutter_invert_0 @@ -620,25 +650,26 @@ name:A_04b_tasmota_4ch_unified_icon filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* desc:Configures a single device including all readings
NOTE: Clicking on icons will issue a corresponding toggle command set DEVICE attrTemplate A_01a_tasmota_basic_state_power1 -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +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 } attr DEVICE setList \ - POWER1:on,off,toggle cmnd/DEVNAME/POWER1 $EVTPART1\ - POWER2:on,off,toggle cmnd/DEVNAME/POWER2 $EVTPART1\ - POWER3:on,off,toggle cmnd/DEVNAME/POWER3 $EVTPART1\ - POWER4:on,off,toggle cmnd/DEVNAME/POWER4 $EVTPART1 + POWER1:on,off,toggle CMNDTOPIC/POWER1 $EVTPART1\ + POWER2:on,off,toggle CMNDTOPIC/POWER2 $EVTPART1\ + POWER3:on,off,toggle CMNDTOPIC/POWER3 $EVTPART1\ + POWER4:on,off,toggle CMNDTOPIC/POWER4 $EVTPART1 attr DEVICE devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot 1.on:on:POWER1+off 1.off:off:POWER1+on 2.on:on:POWER2+off 2.off:off:POWER2+on 3.on:on:POWER3+off 3.off:off:POWER3+on 4.on:on:POWER4+off 4.off:off:POWER4+on -#attr DEVICE userReadings state:POWER.*:.* { lc(ReadingsVal($name,"POWER1","") . " " . ReadingsVal($name,"POWER2","") . " " . ReadingsVal($name,"POWER3","") . " " . ReadingsVal($name,"POWER4","")) } attr DEVICE readingList \ - tele/DEVNAME/LWT:.* LWT\ - tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\ - stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/UPTIME:.* { json2nameValue($EVENT) }\ - stat/DEVNAME/POWER1:.* POWER1\ - stat/DEVNAME/POWER2:.* POWER2\ - stat/DEVNAME/POWER3:.* POWER3\ - stat/DEVNAME/POWER4:.* POWER4 + TELETOPIC/LWT:.* LWT\ + TELETOPIC/STATE:.* { json2nameValue($EVENT) }\ + TELETOPIC/SENSOR:.* { json2nameValue($EVENT) }\ + TELETOPIC/INFO.:.* { json2nameValue($EVENT) }\ + STATTOPIC/RESULT:.* { json2nameValue($EVENT) }\ + TELETOPIC/UPTIME:.* { json2nameValue($EVENT) }\ + STATTOPIC/POWER1:.* POWER1\ + STATTOPIC/POWER2:.* POWER2\ + STATTOPIC/POWER3:.* POWER3\ + STATTOPIC/POWER4:.* POWER4 attr DEVICE stateFormat LWT\ 1:POWER1\ 2:POWER2\ @@ -654,19 +685,20 @@ name:A_04a_tasmota_4ch_unified_basic_text desc:Configures a single device filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* set DEVICE attrTemplate A_01a_tasmota_basic_state_power1 -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } -#attr DEVICE userReadings state:POWER.*:.* { lc(ReadingsVal($name,"POWER1","") . " " . ReadingsVal($name,"POWER2","") . " " . ReadingsVal($name,"POWER3","") . " " . ReadingsVal($name,"POWER4","")) } +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 } attr DEVICE readingList \ - tele/DEVNAME/LWT:.* LWT\ - tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\ - stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) } + TELETOPIC/LWT:.* LWT\ + TELETOPIC/STATE:.* { json2nameValue($EVENT) }\ + TELETOPIC/SENSOR:.* { json2nameValue($EVENT) }\ + TELETOPIC/INFO.:.* { json2nameValue($EVENT) }\ + STATTOPIC/RESULT:.* { json2nameValue($EVENT) } attr DEVICE setList \ - POWER1:on,off,toggle cmnd/DEVNAME/POWER1 $EVTPART1\ - POWER2:on,off,toggle cmnd/DEVNAME/POWER2 $EVTPART1\ - POWER3:on,off,toggle cmnd/DEVNAME/POWER3 $EVTPART1\ - POWER4:on,off,toggle cmnd/DEVNAME/POWER4 $EVTPART1 + POWER1:on,off,toggle CMNDTOPIC/POWER1 $EVTPART1\ + POWER2:on,off,toggle CMNDTOPIC/POWER2 $EVTPART1\ + POWER3:on,off,toggle CMNDTOPIC/POWER3 $EVTPART1\ + POWER4:on,off,toggle CMNDTOPIC/POWER4 $EVTPART1 attr DEVICE setStateList on off toggle attr DEVICE stateFormat P1: POWER1 P2: POWER2 P3: POWER3 P4: POWER4 attr DEVICE webCmd POWER1 toggle:POWER2 toggle:POWER3 toggle:POWER4 toggle @@ -677,18 +709,20 @@ name:A_05a_tasmota_rgb_led_controller filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* desc:Tasmota RGB controller tested with RGB variant of Magichome, arilux LC-01 ,etc... -> https://github.com/arendst/Sonoff-Tasmota/wiki/MagicHome-LED-strip-controller set DEVICE attrTemplate A_01a_tasmota_basic_state_power1 -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +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 } attr DEVICE setList\ - off:noArg cmnd/DEVNAME/POWER1 0\ - on:noArg cmnd/DEVNAME/POWER1 1\ - toggle:noArg cmnd/DEVNAME/POWER1 2\ - Color:colorpicker,RGB cmnd/DEVNAME/COLOR + off:noArg CMNDTOPIC/POWER1 0\ + on:noArg CMNDTOPIC/POWER1 1\ + toggle:noArg CMNDTOPIC/POWER1 2\ + Color:colorpicker,RGB CMNDTOPIC/COLOR attr DEVICE readingList \ - tele/DEVNAME/LWT:.* LWT\ - stat/DEVNAME/POWER:.* POWER\ - tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\ - stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\ - tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) } + TELETOPIC/LWT:.* LWT\ + STATTOPIC/POWER:.* POWER\ + TELETOPIC/STATE:.* { json2nameValue($EVENT) }\ + STATTOPIC/RESULT:.* { json2nameValue($EVENT) }\ + TELETOPIC/INFO.:.* { json2nameValue($EVENT) } deletereading -q DEVICE (?!associatedWith).* attr DEVICE autocreate 0 attr DEVICE devStateIcon {Color::devStateIcon($name,"rgb","Color","state")} @@ -700,24 +734,24 @@ attr DEVICE model A_05a_tasmota_rgb_led_controller name:A_01z_tasmota_set_lowercase_texts_and_state1 filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* desc:Applies to all tasmota devices
NOTE: This template will change ON, OFF etc. sent from tasmota side to lowercase.
After applying the template you might consider to delete or change stateFormat, eventMap and/or userReadings attribute values -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef } par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")} -set IO_DEV publish cmnd/DEVNAME/Backlog StateText1 off; StateText2 on; StateText3 toggle; StateText4 hold; SetOption26 1; SaveData 1 +set IO_DEV publish CMNDTOPIC/Backlog StateText1 off; StateText2 on; StateText3 toggle; StateText4 hold; SetOption26 1; SaveData 1 name:A_01z_tasmota_set_uppercase_texts_and_state1 filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* desc:Applies to all tasmota devices
NOTE: This template will change on, off etc. sent from tasmota side to uppercase. NOTE: this template only exists for compability reasons to older MQTT implementations; not recommended for other user groups -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef } par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")} -set IO_DEV publish cmnd/DEVNAME/Backlog StateText1 OFF; StateText2 ON; StateText3 TOGGLE; StateText4 HOLD; SetOption26 1 +set IO_DEV publish CMNDTOPIC/Backlog StateText1 OFF; StateText2 ON; StateText3 TOGGLE; StateText4 HOLD; SetOption26 1 attr DEVICE userReadings state:POWER1:.* { lc(ReadingsVal($name,"POWER1","")) } name:A_01z_tasmota_set_power1_state_to_power filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).* desc:Applies to single relay tasmota devices
NOTE: this template only exists for compability reasons to other HA solutions; not recommended for usage in FHEM context -par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef } +par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]*)\b(tele|cmnd|stat)(/.*)?/LWT:, ? "${1}cmnd$3" : undef } par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")} -set IO_DEV publish cmnd/DEVNAME/SetOption26 0 +set IO_DEV publish CMNDTOPIC/SetOption26 0 attr DEVICE userReadings state:POWER:.* { lc(ReadingsVal($name,"POWER","")) }