diff --git a/fhem/FHEM/lib/AttrTemplate/mqtt2.template b/fhem/FHEM/lib/AttrTemplate/mqtt2.template index bf8684be6..2bebf8bc8 100644 --- a/fhem/FHEM/lib/AttrTemplate/mqtt2.template +++ b/fhem/FHEM/lib/AttrTemplate/mqtt2.template @@ -21,14 +21,14 @@ name:MQTT2_CLIENT_general_bridge filter:TYPE=MQTT2_DEVICE desc:recommended to use this as general bridgeing device when using MQTT2_CLIENT as IO to get around missing CID info for distinguishing different popular devices
NOTE:
This might create a new MQTT2-device or change existing ones, especially destroy readingList attributes! order:000001 -par:IODEVNAME;Name of the IO-Device; { AttrVal("DEVICE","IODev",undef) } -par:DEVTYPE;TYPE of the device; { InternalVal("DEVICE","TYPE",undef)} -par:DEVCID;CID of the device as written in the DEF; { InternalVal(AttrVal("DEVICE","IODev",""),"clientId","mosquitto") eq InternalVal("DEVICE","DEF","mosquitto") ? "MQTT2_GeneralBridge" : InternalVal("DEVICE","DEF","mosquitto")} -par:NEWDEVROOM;Room of the calling device; {AttrVal("DEVCID","room","MQTT2_\DEVICE" )} +#par:IODEVNAME;Name of the IO-Device; { AttrVal("DEVICE","IODev",undef) } +#par:DEVTYPE;TYPE of the device; { InternalVal("DEVICE","TYPE",undef)} +#par:DEVCID;CID of the device as written in the DEF; { InternalVal(AttrVal("DEVICE","IODev",""),"clientId","mosquitto") eq InternalVal("DEVICE","DEF","mosquitto") ? "MQTT2_GeneralBridge" : InternalVal("DEVICE","DEF","mosquitto")} +#par:NEWDEVROOM;Room of the calling device; {AttrVal("DEVCID","room","MQTT2_\DEVICE" )} par:ICON;ICON as set, defaults to mqtt_bridge_2;{ AttrVal("DEVICE","icon","mqtt_bridge_2") } attr DEVICE icon ICON -defmod DEVCID MQTT2_\DEVICE DEVCID -attr DEVCID bridgeRegexp \ +#defmod DEVCID MQTT2_\DEVICE DEVCID +attr DEVICE bridgeRegexp \ (tele|stat)[/]([^/]+)[/].*:.* "$2"\ shellies[/]([^/]+)[/].*:.* "$1"\ (zigbee2mqtt)[/].*:.* "$1"\ @@ -42,21 +42,22 @@ attr DEVCID bridgeRegexp \ Advantech[/]([^/]+)[/].*:.* "$1"\ sonos[/](RINCON_[A-Z0-9]+):.* "$1"\ (sonos)[/][^/]+/.* "$1"\ - (tvheadend)[/][^/:]+.* "$1" -attr DEVCID autocreate 1 -attr DEVCID comment Do not use very open bridgeRegexp expressions! This might lead to irritating results... -attr DEVCID room NEWDEVROOM -attr DEVICE icon mqtt_bridge_2 -attr DEVCID setStateList on off -deleteattr DEVICE readingList -deletereading -q DEVICE (?!associatedWith).* -deleteattr DEVCID readingList -deletereading -q DEVCID (?!associatedWith).* -setreading DEVCID associatedWith DEVICE -{ fhem "trigger $FW_wname JS:location.href='$FW_ME?detail=DEVCID'" if($cl && $cl->{TYPE} eq "FHEMWEB") } + (tvheadend)[/][^/:]+.* "$1"\ + homeassistant/.*/config:.* "" +#attr DEVCID autocreate 1 +attr DEVICE comment Do not use very open bridgeRegexp expressions! This might lead to irritating results... +#attr DEVCID room NEWDEVROOM +#attr DEVICE icon mqtt_bridge_2 +attr DEVICE setStateList on off +#deleteattr DEVICE readingList +#deletereading -q DEVICE (?!associatedWith).* +#deleteattr DEVCID readingList +#deletereading -q DEVCID (?!associatedWith).* +#setreading DEVCID associatedWith DEVICE +#{ fhem "trigger $FW_wname JS:location.href='$FW_ME?detail=DEVCID'" if($cl && $cl->{TYPE} eq "FHEMWEB") } farewell:template has been applied successfully. Be carefull when extending the brigeRegexp! attr DEVCID model MQTT2_CLIENT_general_bridge -setreading DEVCID attrTemplateVersion 20200603 +setreading DEVCID attrTemplateVersion 20200619 ############### #MQTT2 IO ignoreRegexp @@ -3291,6 +3292,57 @@ mowerErrorTxt:mowerErrorIndex.* { my %errorCodes = (\ attr DEVICE model worx_landroid_mover setreading DEVICE attrTemplateVersion 20200609 +########################################### +# Instar 8015HD. +# contributed by ToM_ToM +#source post: https://forum.fhem.de/index.php/topic,94495.msg1065779.html#msg1065779 + +name:InstarCam +filter:TYPE=MQTT2_DEVICE +desc:for Instar Camera, source post: +order:X_10 +par:DEVNAME;MAC address in the topic;{ AttrVal("DEVICE","readingList","") =~ m,instar/([^/]*)/, ? $1 : undef } +attr DEVICE eventMap 0:off 1:on +attr DEVICE jsonMap area1val:area1 area1sensitivityval:area1sensitivity area2val:area2 area2sensitivityval:area2sensitivity area3val:area3 area3sensitivityval:area3sensitivity area4val:area4 area4sensitivityval:area4sensitivity pirval:pir alarmserverval:alarmserver alarmserveraddressval:alarmserveraddress alarmserverportval:alarmserverport alarmserverpathval:alarmserverpath alarmsignalval:alarmsignal audioalarmval:audioalarm audioalarmsensitivityval:audioalarmsensitivity power_ledval:power_led wifi_ledval:wifi_led + +attr DEVICE readingList instar/DEVNAME/status/alarm/actions/pir/enable:.* { json2nameValue($EVENT, 'pir', $JSONMAP) }\ + instar/DEVNAME/status/alarm/area1/enable:.* { json2nameValue($EVENT, 'area1', $JSONMAP) }\ + instar/DEVNAME/status/alarm/area1/sensitivity:.* { json2nameValue($EVENT, 'area1sensitivity', $JSONMAP) }\ + instar/DEVNAME/status/alarm/area2/enable:.* { json2nameValue($EVENT, 'area2', $JSONMAP) }\ + instar/DEVNAME/status/alarm/area2/sensitivity:.* { json2nameValue($EVENT, 'area2sensitivity', $JSONMAP) }\ + instar/DEVNAME/status/alarm/area3/enable:.* { json2nameValue($EVENT, 'area3', $JSONMAP) }\ + instar/DEVNAME/status/alarm/area3/sensitivity:.* { json2nameValue($EVENT, 'area3sensitivity', $JSONMAP) }\ + instar/DEVNAME/status/alarm/area4/enable:.* { json2nameValue($EVENT, 'area4', $JSONMAP) }\ + instar/DEVNAME/status/alarm/area4/sensitivity:.* { json2nameValue($EVENT, 'area4sensitivity', $JSONMAP) }\ + instar/DEVNAME/status/alarm/alarmserver/enable:.* { json2nameValue($EVENT, 'alarmserver', $JSONMAP) }\ + instar/DEVNAME/status/alarm/alarmserver/address:.* { json2nameValue($EVENT, 'alarmserveraddress', $JSONMAP) }\ + instar/DEVNAME/status/alarm/alarmserver/port:.* { json2nameValue($EVENT, 'alarmserverport', $JSONMAP) }\ + instar/DEVNAME/status/alarm/alarmserver/path:.* { json2nameValue($EVENT, 'alarmserverpath', $JSONMAP) }\ + instar/DEVNAME/status/alarm/actions/alarmsignal:.* { json2nameValue($EVENT, 'alarmsignal', $JSONMAP) }\ + instar/DEVNAME/status/alarm/actions/audioalarm:.* { json2nameValue($EVENT, 'audioalarm', $JSONMAP) }\ + instar/DEVNAME/status/alarm/actions/audioalarmsensitivity:.* { json2nameValue($EVENT, 'audioalarmsensitivity', $JSONMAP) }\ + instar/DEVNAME/status/features/indicator/power:.* { json2nameValue($EVENT, 'power_led', $JSONMAP) }\ + instar/DEVNAME/status/features/indicator/wifi:.* { json2nameValue($EVENT, 'wifi_led', $JSONMAP) } +attr DEVICE setList pir:on,off instar/DEVNAME/alarm/actions/pir/enable/raw $EVTPART1\ + area1:on,off instar/DEVNAME/alarm/area1/enable/raw $EVTPART1\ + area1sensitivity:slider,1,1,100 instar/DEVNAME/alarm/area1/sensitivity/raw $EVTPART1\ + area2:on,off instar/DEVNAME/alarm/area2/enable/raw $EVTPART1\ + area2sensitivity:slider,1,1,100 instar/DEVNAME/alarm/area2/sensitivity/raw $EVTPART1\ + area3:on,off instar/DEVNAME/alarm/area3/enable/raw $EVTPART1\ + area3sensitivity:slider,1,1,100 instar/DEVNAME/alarm/area3/sensitivity/raw $EVTPART1\ + area4:on,off instar/DEVNAME/alarm/area4/enable/raw $EVTPART1\ + area4sensitivity:slider,1,1,100 instar/DEVNAME/alarm/area4/sensitivity/raw $EVTPART1\ + alarmserver:on,off instar/DEVNAME/alarm/alarmserver/enable/raw $EVTPART1\ + alarmsignal:on,off instar/DEVNAME/alarm/actions/alarmsignal/raw $EVTPART1\ + audioalarm:on,off instar/DEVNAME/alarm/actions/audioalarm/raw $EVTPART1\ + audioalarmsensitivity:slider,10,10,100 instar/DEVNAME/alarm/actions/audioalarmsensitivity/raw $EVTPART1\ + power_led:on,off instar/DEVNAME/features/indicator/power/raw $EVTPART1\ + wifi_led:on,off instar/DEVNAME/features/indicator/wifi/raw $EVTPART1 +attr DEVICE model InstarCam +setreading DEVICE attrTemplateVersion 20200619 + + +################################# # source: https://forum.fhem.de/index.php/topic,105222.0.html name:wallpanel_app filter:TYPE=MQTT2_DEVICE @@ -3410,7 +3462,7 @@ par:BASE_TOPIC;base topic set in configuration.yaml of the sonos2mqtt bridge;{ A par:ICON;ICON as set, defaults to mqtt_bridge_2;{ AttrVal("DEVICE","icon","mqtt_bridge_2") } attr DEVICE icon ICON attr DEVICE bridgeRegexp\ - BASE_TOPIC/(RINCON_[A-Z0-9]+):.* "$1" + BASE_TOPIC/(RINCON_[A-Z0-9]+)[:/].* "$1" attr DEVICE readingList\ BASE_TOPIC/connected:.* connected\ homeassistant/music_player/RINCON_([0-9A-Z]+)/sonos/config:.* { $TOPIC =~ m,(RINCON_[0-9A-Z]+),; { "config_$1"=>$EVENT }}\ @@ -3421,7 +3473,7 @@ setreading DEVICE attrTemplateVersion 20200603 name:sonos2mqtt_speaker -desc:A sonos2mqtt speaker device +desc:A sonos2mqtt speaker device without input selector. Suitable e.g. for Sonos Play 1 and Sonos Play One filter:TYPE=MQTT2_DEVICE order:M_05a par:BASE_TOPIC;base topic set in configuration.yaml of the sonos2mqtt bridge;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,[\b]?([^\/:]+)[\/].+, ? $1 : undef } @@ -3430,6 +3482,55 @@ par:ALIAS;friendly name as set in sonos gadget itself;{ ReadingsVal("DEVICE","na par:DEVNAME;friendly name, used for topic in lowercase;{ lc(ReadingsVal("DEVICE","name","unknown")) } par:ICON;ICON as set, defaults to audio_volume_low;{ AttrVal("DEVICE","icon","audio_volume_low") } attr DEVICE icon ICON +attr DEVICE alias ALIAS +attr DEVICE jsonMap volume_Master:volume mute_Master:mute transportState:state +attr DEVICE devStateIcon 0:10px-kreis-rot 1:10px-kreis-gelb 2:10px-kreis-gruen (0|1).(STOPPED|PAUSED_PLAYBACK):rc_BLANK 2.(STOPPED|PAUSED_PLAYBACK):rc_PLAY@green:play 2.(pause|stop):rc_STOP@red:play 2.PLAYING:rc_STOP@red:stop 2.(TRANSITIONING|play):rc_PLAY@yellow:stop 2.mute:audio_volume_mute@yellow:stop 2.volume:audio_volume_mid@yellow:stop 2.volumeDown:audio_volume_low@yellow:stop 2.volumeUp:audio_volume_high@yellow:stop 2.next:rc_NEXT@yellow:stop 2.previous:rc_PREVIOUS@yellow:stop (STOPPED|PAUSED_PLAYBACK).(false|previous|next|volumeDown|volumeUp|[0-9]+|CURRENT.*|NEXT.*|PAUSED_PLAYBACK):rc_BLANK \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.previous:rc_PREVIOUS:previous \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.next:rc_NEXT:next \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.volumeDown:rc_VOLDOWN:volumeDown \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.volumeUp:rc_VOLUP:volumeUp \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.false:rc_VOLUP:mute+true \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.true:rc_MUTE:mute+false +attr DEVICE readingList\ + BASE_TOPIC/status/DEVNAME/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }\ + BASE_TOPIC/status/DEVNAME/renderingcontrol:.* { json2nameValue($EVENT,'REND_',$JSONMAP) }\ + BASE_TOPIC/DEV_ID:.* { json2nameValue($EVENT,'',$JSONMAP) }\ + BASE_TOPIC/connected:.* bridgeConnected\ + BASE_TOPIC/DEV_ID/error:.* { json2nameValue($EVENT) } +attr DEVICE setList\ + stop:noArg BASE_TOPIC/DEV_ID/control { "command": "stop" }\ + play:noArg BASE_TOPIC/DEV_ID/control { "command": "play" }\ + pause:noArg BASE_TOPIC/DEV_ID/control { "command": "pause" }\ + toggle:noArg BASE_TOPIC/DEV_ID/control { "command": "toggle" }\ + volumeUp:noArg BASE_TOPIC/DEV_ID/control { "command": "volumeup" }\ + volumeDown:noArg BASE_TOPIC/DEV_ID/control { "command": "volumedown" }\ + volume:slider,0,1,100 BASE_TOPIC/DEV_ID/control { "command": "volume", "input": $EVTPART1 }\ + mute:iconSwitch,false,rc_MUTE,true,rc_VOLUP { my $value = $EVTPART1 eq "true" ? "mute" : "unmute";; qq(BASE_TOPIC/DEV_ID/control { "command": "$value" } ) }\ + next:noArg BASE_TOPIC/DEV_ID/control { "command": "next" }\ + previous:noArg BASE_TOPIC/DEV_ID/control { "command": "previous" }\ + joinGroup:textField BASE_TOPIC/DEV_ID/control { "command": "joingroup", "input": "$EVTPART1"}\ + leaveGroup:noArg { my $value = ReadingsVal("DEV_ID","groupName","all"); qq(BASE_TOPIC/DEV_ID/control { "command": "leavegroup", "input": "$value" } ) }\ + setAVTUri:textField BASE_TOPIC/DEV_ID/control { "command": "setavtransporturi", "input": "$EVTPART1"}\ + notify:textField BASE_TOPIC/DEV_ID/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}\ + x_raw_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(BASE_TOPIC/DEV_ID/control $payload)} +attr DEVICE stateFormat [$name:bridgeConnected]\ +[$name:bridgeConnected].[$name:state]\ +[$name:state].previous\ +[$name:state].next\ +[$name:state].volumeDown\ +[$name:state].volumeUp\ +   \ +[$name:state].[$name:mute]\ +
[$name:state] CURRENT: [$name:AV_CurrentTrackMetaData_Artist] - [$name:AV_CurrentTrackMetaData_Title] - ([$name:currentTrack_Duration])\ +
[$name:state] NEXT:       [$name:AV_NextTrackMetaData_Artist] - [$name:AV_NextTrackMetaData_Title] - ([$name:nextTrack_Duration]) +attr DEVICE model sonos2mqtt_speaker +setreading DEVICE attrTemplateVersion 20200621 + + +name:sonos2mqtt_linein_speaker +desc:A sonos2mqtt speaker device with input choice option like +filter:TYPE=MQTT2_DEVICE +order:M_05b +par:BASE_TOPIC;base topic set in configuration.yaml of the sonos2mqtt bridge;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,[\b]?([^\/:]+)[\/].+, ? $1 : undef } +par:DEV_ID;techname of the device ;{ AttrVal("DEVICE","readingList","") =~ m,[^\/]+[\/](RINCON_[0-9A-Z]+):.*, ? $1 : undef } +par:ALIAS;friendly name as set in sonos gadget itself;{ ReadingsVal("DEVICE","name","unknown") } +par:DEVNAME;friendly name, used for topic in lowercase;{ lc(ReadingsVal("DEVICE","name","unknown")) } +par:ICON;ICON as set, defaults to audio_volume_low;{ AttrVal("DEVICE","icon","audio_volume_low") } +attr DEVICE icon ICON attr DEVICE jsonMap volume_Master:volume mute_Master:mute transportState:state attr DEVICE readingList\ BASE_TOPIC/status/DEVNAME/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }\ @@ -3442,9 +3543,7 @@ attr DEVICE setList\ toggle:noArg BASE_TOPIC/DEV_ID/control { "command": "toggle" }\ volumeUp:noArg BASE_TOPIC/DEV_ID/control { "command": "volumeup" }\ volumeDown:noArg BASE_TOPIC/DEV_ID/control { "command": "volumedown" }\ - switchToQueue:noArg BASE_TOPIC/DEV_ID/control { "command": "switchtoqueue" }\ - switchToTv:noArg BASE_TOPIC/DEV_ID/control { "command": "switchtotv" }\ - switchToLine:noArg BASE_TOPIC/DEV_ID/control { "command": "switchtoline" }\ + input:Queue,TV,Line_In { my $value = $EVTPART1 eq "Queue" ? "queue" : $EVTPART1 eq "TV" ? "tv" : "line";; qq(sonos/RINCON_7828CAF4289001400/control { "command": "switchto$value" } ) }\ volume:slider,0,1,100 BASE_TOPIC/DEV_ID/control { "command": "volume", "input": $EVTPART1 }\ mute:on,off { my $value = $EVTPART1 eq "on" ? "mute" : "unmute"; qq(BASE_TOPIC/DEV_ID/control { "command": "$value" } ) }\ next:noArg BASE_TOPIC/DEV_ID/control { "command": "next" }\ @@ -3454,10 +3553,10 @@ attr DEVICE setList\ leaveGroup:noArg { my $value = ReadingsVal("DEV_ID","groupName","all"); qq(BASE_TOPIC/DEV_ID/control { "command": "leavegroup", "input": "$value" } ) }\ setAVTUri:textField BASE_TOPIC/DEV_ID/control { "command": "setavtransporturi", "input": "$EVTPART1"}\ notify:textField BASE_TOPIC/DEV_ID/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}} -attr DEVICE model sonos2mqtt_speaker +attr DEVICE model sonos2mqtt_linein_speaker attr DEVICE alias ALIAS -setreading DEVICE attrTemplateVersion 20200609 - +setreading DEVICE attrTemplateVersion 20200621 + ########################################### #source post: https://forum.fhem.de/index.php/topic,109946.0.html