diff --git a/fhem/FHEM/lib/AttrTemplate/mqtt2.template b/fhem/FHEM/lib/AttrTemplate/mqtt2.template
index ccc424459..05e533f83 100644
--- a/fhem/FHEM/lib/AttrTemplate/mqtt2.template
+++ b/fhem/FHEM/lib/AttrTemplate/mqtt2.template
@@ -1443,6 +1443,75 @@ attr DEVICE,DEVICE_CH2 model tasmota_4ch_two_shutters_invert_0
setreading DEVICE,DEVICE_CH2 attrTemplateVersion 20210607
set DEVICE,DEVICE_CH2 attrTemplate speechcontrol_type_blind
+name:tasmota_2ch_shutter_venetian_invert_0
+filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd|stat).*
+desc:Configures a dual chanel tasmota device as venetian shutter; needs Tasmota version 10.0.0.1 or higher, see Tasmota wiki
and Forum Thread
NOTE: This template will configure the shutter in Homematic-style device pct 100% = open.
+order:A_02b3
+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:IO_DEV;Currently used IO;{ AttrVal('DEVICE','IODev',InternalVal('DEVICE','IODev',undef)->{NAME}) }
+par:CALLSPEECHRECOGN;Set this to 0 to not set any speech recogn. related attributes;{ 1 }
+par:BCKLGCMND;Send out configuration command via backlog?;{ 1 }
+par:ICON;ICON as set, defaults to fts_shutter_updown;{ AttrVal('DEVICE','icon','fts_shutter_updown') }
+set DEVICE attrTemplate tasmota_set_lowercase_texts_and_state1
+attr DEVICE icon ICON
+option:{BCKLGCMND}
+set IO_DEV publish CMNDTOPIC/Backlog LedState 2; SetOption80 1; Interlock 1,2; Interlock ON; SetOption81 1; SetOption80 1; PowerOnState 0; switchmode1 3; switchmode2 3; PulseTime1 0; PulseTime2 0; SaveData 1;
+set IO_DEV publish CMNDTOPIC/Restart 1
+option:global
+attr DEVICE setList \
+ close:noArg CMNDTOPIC/ShutterClose1\
+ open:noArg CMNDTOPIC/ShutterOpen1\
+ half:noArg CMNDTOPIC/ShutterPosition1 50\
+ pct:slider,0,1,100 CMNDTOPIC/ShutterPosition1 $EVTPART1\
+ stop:noArg CMNDTOPIC/ShutterStop1\
+ closeSlat:noArg CMNDTOPIC/ShutterClose2\
+ openSlat:noArg CMNDTOPIC/ShutterOpen2\
+ halfSlat:noArg CMNDTOPIC/ShutterPosition2 50\
+ pctSlat:slider,0,1,100 CMNDTOPIC/ShutterPosition2 $EVTPART1\
+ stopSlat:noArg CMNDTOPIC/ShutterStop2\
+ resetClose:noArg CMNDTOPIC/ShutterSetClose1\
+ resetCloseSlat:noArg CMNDTOPIC/ShutterSetClose2
+ x_configuration CMNDTOPIC/$EVTPART1 $EVTPART2
+attr DEVICE readingList \
+ 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\
+ STATTOPIC/SHUTTER2:.* stateSlat\
+ STATTOPIC/SHUTTER2:.* pctSlat\
+ TELETOPIC/RESULT:.* { json2nameValue($EVENT) }\
+ TELETOPIC/STATE:.* { json2nameValue($EVENT) }\
+ TELETOPIC/SENSOR:.* { json2nameValue($EVENT) }\
+ TELETOPIC/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ? json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }\
+ 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
+attr DEVICE eventMap open:opens close:closes
+attr DEVICE stateFormat \
+LWT\
+\
+state
+deletereading -q DEVICE (?!associatedWith|IODev).*
+attr DEVICE setStateList open close half stop pct
+attr DEVICE comment After applying the template set "ShutterOpenDuration1", "ShutterCloseDuration1" and "shuttertiltconfig1" first.\
+Use the "set x_configuration" Option. Example: "set x_configuration ShutterOpenDuration1 35"\
+Shutter specific commands available: ShutterOpenDuration1, ShutterCloseDuration1, ShutterRelay1, ShutterSetHalfway1, ShutterSetClose1, ShutterInvert1, ShutterMotordelay1, ShutterCalibration1; you may use this for general setOptions in tasmota also.\
+commands may need restart to take effect.\
+For calibration, use of more than one shutter device and further information on the available commands see Tasmota wiki.
+attr DEVICE model tasmota_2ch_shutter_venetian_invert_0
+setreading DEVICE attrTemplateVersion 20211110
+option:{ CALLSPEECHRECOGN }
+set DEVICE attrTemplate speechcontrol_type_blind
+
+
# based on a proposal by twdotnet, https://forum.fhem.de/index.php/topic,94495.msg1137400.html#msg1137400
# shelly i3 3 channel input switches
# shelly i3 3 channel input switches with device configuration
@@ -2469,10 +2538,52 @@ attr DEVICE comment To get appropriate loadState values: Change the default limi
attr DEVICE model shelly1_w_energy_measuring_washer_example
setreading DEVICE attrTemplateVersion 20200831
+name:shelly2em
+filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
+order:A_10c
+desc:Applies to Shelly 2em devices.
See https://forum.fhem.de/index.php/topic,123920.msg1185387.html#msg1185387
+par:DEVNAME;Shelly device name in the topic;{ AttrVal('DEVICE','readingList','') =~ m,shellies/([^/]*)/, ? $1 : undef }
+par:RADIO_SETUSERREADING;Set userreading for total energy consumption;{ undef }
+par:RADIO_DONOTSETUSERREADING;Do not set userreading for total energy consumption;{ undef }
+par:NEWUSERREADINGS;NEWUSERREADINGS as set if emeter_0_energy_total is included, otherwise it will be added;{ my $tobeadded = q(emeter_0_energy_total:emeter_0_energy:.* monotonic {ReadingsNum($name,'emeter_0_energy',0)}, emeter_1_energy_total:emeter_1_energy:.* monotonic {ReadingsNum($name,'emeter_1_energy',0)}); my $old = AttrVal('DEVICE','userReadings',undef); !defined $old ? $tobeadded : $old =~ m,emeter_0_energy_total:emeter_0_energy.*, ? $old : $old." $tobeadded" }
+set DEVICE attrTemplate shelly1_w_energy_measuring \RADIO_SETUSERREADING=RADIO_SETUSERREADING \RADIO_DONOTSETUSERREADING=RADIO_DONOTSETUSERREADING
+attr DEVICE devStateIcon {my $onl = ReadingsVal($name,'online','false') eq 'true'?'10px-kreis-gruen':'10px-kreis-rot'; my $light = ReadingsVal($name,'state','off'); my $cons1 = ReadingsVal($name,'emeter_0_power','unknown'); my $cons2 = ReadingsVal($name,'emeter_1_power','unknown'); my my $total1 = ReadingsVal($name,'emeter_0_kWh','unknown'); my $total2 = ReadingsVal($name,'emeter_1_kWh','unknown'); my $total_sum = $total1+$total2; ''.FW_makeImage($onl)." ".FW_makeImage($light)."