2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-07 16:59:18 +00:00

mqtt2.template: tasmota: change readingList regex, add rf template

git-svn-id: https://svn.fhem.de/fhem/trunk@19345 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Beta-User 2019-05-07 17:13:16 +00:00
parent ca0f4375e4
commit 90a4195b52

View File

@ -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 <br>NOTE: The format the device is sending data will also be changed to lowercase!<br>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 <br>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 <br>NOTE: This template will delete some readings and clear the readingList from prefix use when expanding json. <br>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. <br>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.<br><a href="https://forum.fhem.de/index.php/topic,67316.0.html">Forum Thread</a><br><a href=https://github.com/arendst/Sonoff-Tasmota/wiki/Commands#irremote">Tasmota IRremote Commands</a><br><a href="https://github.com/altelch/SonoffIR">Simple IR-circuit</a><br><a href="https://forum.fhem.de/index.php/topic,98723.msg920946.html#msg920946">set <devicename> irsend</a>
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\
<br>\
<a href="http://IPAddress" target="_blank">IPAddress</a>
@ -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.<br><a href=<br><a href="https://forum.fhem.de/index.php/topic,99042.0.html">Forum Thread</a><br>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\
<br>\
<a href="http://IPAddress" target="_blank">IPAddress</a>
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. <br>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.<br><a href="https://forum.fhem.de/index.php/topic,98366.msg917091.html#msg917091">Forum Thread</a><br>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.<br><a href="https://forum.fhem.de/index.php/topic,98366.msg917091.html#msg917091">Forum Thread</a><br>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 <br>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 <br>NOTE: This template will change ON, OFF etc. sent from tasmota side to lowercase. <br>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 <br>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 <br>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","")) }