From b8261f677c4975b9400f32a0570cc4b92f029416 Mon Sep 17 00:00:00 2001 From: Beta-User <> Date: Fri, 7 Feb 2020 14:05:12 +0000 Subject: [PATCH] mqtt2.template: change roborock template, add ESPurna template, other small changes; httpmod.template bugfix in homematic-updates git-svn-id: https://svn.fhem.de/fhem/trunk@21138 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/lib/AttrTemplate/httpmod.template | 112 +------------------- fhem/FHEM/lib/AttrTemplate/mqtt2.template | 46 +++++++- 2 files changed, 46 insertions(+), 112 deletions(-) diff --git a/fhem/FHEM/lib/AttrTemplate/httpmod.template b/fhem/FHEM/lib/AttrTemplate/httpmod.template index f419e0372..fba54e182 100644 --- a/fhem/FHEM/lib/AttrTemplate/httpmod.template +++ b/fhem/FHEM/lib/AttrTemplate/httpmod.template @@ -502,117 +502,15 @@ attr DEVICE model resol_solar ################################# #Show updates for CUL_HM devices, Forum: https://forum.fhem.de/index.php/topic,78501.msg972144.html#msg972144 -name:CUL_HM_firmware_update_downloader -filter:TYPE=HTTPMOD -desc: Check eQ3 homepage for available new firmware files; provides also links for direct downloads
Define a HTTPMOD device like
define eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
Source: Forum
Wiki -order:X_01a -par:WHICHROOM;Actual room of the device; {AttrVal("DEVICE","room","CUL_HM" )} -par:INTERVAL;Actual interval for updating, defaults to one week; {InternalVal("DEVICE","Interval","604800")} -defmod DEVICE HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php INTERVAL -attr DEVICE userattr reading01AutoNumLen reading01Format reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02OExpr reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete -attr DEVICE alignTime 00:45 -attr DEVICE enableControlSet 1 -attr DEVICE event-on-change-reading .* -attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS -attr DEVICE httpVersion 1.1 -attr DEVICE reading01AutoNumLen 2 -attr DEVICE reading01Format https://www.eq-3.de%s -attr DEVICE reading01Name fw_link -attr DEVICE reading01RegOpt g -attr DEVICE reading01Regex (?i) no or wrong data from eq3-server!");;\ - if($check eq "no fw-updates needed!") {\ - $ret .= '| ';;\ - $ret .= sprintf("%-80s",$check);;\ - $ret .= ' |';;\ - } elsif($check eq "error => no or wrong data from eq3-server!") {\ - $ret .= '| ';;\ - $ret .= sprintf("%-80s",$check);;\ - $ret .= ' |';;\ - } else {\ - my @devices = split(',',$check);;\ - foreach my $devStr (@devices) {\ - my ($dev,$md,$ofw,$idx_fw,$nfw,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\)$/;;\ - my $fw_link = ReadingsVal($name,"fw_link-".$idx_fw,"???");;\ - my $cl_link = ReadingsVal($name,"changeLog_link-".$idx_fw,"???");;\ - $ret .= '| ';;\ - $ret .= sprintf("%-23s",$dev);;\ - $ret .= ' | ';;\ - $ret .= '';;\ - $ret .= sprintf("%-23s",$md);;\ - $ret .= ' | ';;\ - $ret .= '';;\ - $ret .= sprintf("%6s",$ofw);;\ - $ret .= ' | ';;\ - $ret .= '';;\ - $ret .= sprintf("%6s",$nfw);;\ - $ret .= ' | ';;\ - $ret .= (($cl_link ne "none")?'':'');;\ - $ret .= sprintf("%-10s",$date);;\ - $ret .= (($cl_link ne "none")?'':'');;\ - $ret .= " |
";;\ - }\ - }\ - $ret .= '';;\ - return $ret;;\ -} -attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\ - my $ret = "";;\ - my @data;;\ - if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\ - my @eq3FwList = map{\ - @data = ReadingsVal($name,"fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_v([\d_]+)_(\d\d)(\d\d)(\d\d)/i;;\ - $data[0] =~ s/_/-/g;;\ - sprintf("%s:%s:%s.%s.%s:%s",$data[0],$data[1],$data[4],$data[3],"20".$data[2],$_);;\ - } ReadingsVal($name,"MATCHED_READINGS","?") =~ m/fw_link-(\d\d)/g;;\ -\ - foreach my $dev (devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)")) {\ - my $md = AttrVal($dev,"model","?");;\ - my $v = AttrVal($dev,"firmware","0.0");;\ - my ($h,$l) = split('\.',$v);;\ - foreach my $newFw (grep m/^${md}:/i,@eq3FwList) {\ - my ($nh,$nl,$no,$date,$idx) = $newFw =~ m/^[^:]+:(\d+)_(\d+)_?(\d*):([^:]+):(\d\d)$/;;\ - if(($nh > $h) || (($nh == $h) && ($nl > $l))) {\ - $ret .= "," if($ret ne "");;\ - $ret .= $dev." (".$md." | fw_".$v." => fw".$idx."_".$nh.".".$nl.($no?sprintf(".%d",$no):"")." | ".$date.")";;\ - }\ - }\ - }\ - } else {\ - $ret = "error => no or wrong data from eq3-server!";;\ - }\ - return ($ret eq "")?"no fw-updates needed!":$ret;;\ -} -attr DEVICE webCmd reread -attr DEVICE model CUL_HM_firmware_update_downloader - #Contributed by Pfriemler & yersinia, see https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327 -name:hm_fw_check_v2 +name:homematic_fw_check_v2 filter:TYPE=HTTPMOD -desc: check for homematic firmware updates; based on new link provided by Pfriemler (switch from eq-3.de to update.homematic.com)
Define a HTTPMOD device like
define hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400Source: Forum -order:X_01a1 +desc: check for homematic firmware updates; based on new link provided by Pfriemler (switch from eq-3.de to update.homematic.com)
Define a HTTPMOD device like
define hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
Source: Forum +order:X_01a par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )} par:INTERVAL;Actual interval for updating, defaults to one day (86400s); {InternalVal("DEVICE","Interval",86400)} -defmod DEVICE HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE INTERVAL +defmod DEVICE HTTPMOD https://update.homematic.com/firmware/api/firmware/search/\DEVICE INTERVAL attr DEVICE userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no attr DEVICE enableControlSet 1 attr DEVICE icon hm_ccu @@ -696,7 +594,7 @@ attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\ return ($ret eq "")?"no fw-updates needed!":$ret;;;;\ } attr DEVICE webCmd reread -attr DEVICE model hm_fw_check_v2 +attr DEVICE model homematic_fw_check_v2 #Contributed by OdfFHEM, see https://forum.fhem.de/index.php/topic,97694.msg992348.html#msg992348 diff --git a/fhem/FHEM/lib/AttrTemplate/mqtt2.template b/fhem/FHEM/lib/AttrTemplate/mqtt2.template index ef2d631f3..82382a08d 100644 --- a/fhem/FHEM/lib/AttrTemplate/mqtt2.template +++ b/fhem/FHEM/lib/AttrTemplate/mqtt2.template @@ -77,11 +77,9 @@ filter:TYPE=MQTT2_DEVICE:FILTER=CID=speechrecognTesting order:100003 option:{my @devices=devspec2array("TYPE=(siri|alexa|gassistant)");;return 1 if $devices[0];;return 0} set DEVICE attrTemplate mqtt2_speech_recognition_type_light -par:NEWUSERREADINGS;NEWUSERREADINGS as set if sr_brightness is included, otherwise it will be added;{ my $old = AttrVal("DEVICE","userReadings",undef);; !defined $old ? 'sr_brightness:brightness.* {sprintf("%.0f", ReadingsNum("$name","brightness",0)/255*100)}' : $old =~ m,sr_brightness:brightness.*, ? $old : $old.', sr_brightness:brightness.* {sprintf("%.0f", ReadingsNum("$name","brightness",0)/255*100)}' } +#par:NEWUSERREADINGS;NEWUSERREADINGS as set if sr_brightness is included, otherwise it will be added;{ my $old = AttrVal("DEVICE","userReadings",undef);; !defined $old ? 'sr_brightness:brightness.* {sprintf("%.0f", ReadingsNum("$name","brightness",0)/255*100)}' : $old =~ m,sr_brightness:brightness.*, ? $old : $old.', sr_brightness:brightness.* {sprintf("%.0f", ReadingsNum("$name","brightness",0)/255*100)}' } attr DEVICE genericDeviceType light -attr DEVICE homebridgeMapping Brightness=brightness::brightness,minValue=0,maxValue=100,max=255 -#attr DEVICE homebridgeMapping Brightness=sr_brightness,cmd=brightness,max=255,minValue=0,maxValue=100 -#attr DEVICE userReadings sr_brightness:brightness.* {sprintf("%.0f", ReadingsNum("$name","brightness",0)/255*100)} +attr DEVICE homebridgeMapping Brightness=brightness::brightness,minValue=0,maxValue=255,max=255,factor=0.39216 #attr DEVICE userReadings NEWUSERREADINGS option:TYPE=siri option:TYPE=alexa @@ -1797,6 +1795,42 @@ set DEVICE x_mqttcom announce set DEVICE attrTemplate mqtt2_speech_recognition_type_light attr DEVICE model shellydimmer + +########################################### +# ESPurna +# +# ESP8266 devices using ESPurna firmware. +# See project page for details: https://github.com/xoseperez/espurna/wiki +name:ESPurna_single_relay +filter:TYPE=MQTT2_DEVICE +desc:ESPurna is a alternative firmware comparable to tasmota, see project page wiki.
NOTE: First experimental version, to contribute see Forum Thread. +order:A_30 +par:DEVNAME;Device's name in the topic tree;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+)/([^/]+)/, ? $1 : undef } +attr DEVICE readingList DEVNAME/relay/0:.* relay_0\ + DEVNAME/relay/0:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\ + DEVNAME/app:.* app\ + DEVNAME/version:.* version\ + DEVNAME/board:.* board\ + DEVNAME/host:.* host\ + DEVNAME/ssid:.* ssid\ + DEVNAME/ip:.* ip\ + DEVNAME/mac:.* mac\ + DEVNAME/rssi:.* rssi\ + DEVNAME/uptime:.* uptime\ + DEVNAME/datetime:.* datetime\ + DEVNAME/freeheap:.* freeheap\ + DEVNAME/vcc:.* vcc\ + DEVNAME/status:.* status\ + DEVNAME/loadavg:.* loadavg +attr DEVICE setList on DEVNAME/relay/0/set 1\ + off DEVNAME/relay/0/set 0\ + toggle DEVNAME/relay/0/set 2 +attr DEVICE setStateList on off toggle +attr DEVICE event-on-change-reading .* +set DEVICE attrTemplate mqtt2_speech_recognition_type_switch +attr DEVICE model ESPurna_single_relay + + ############### #ebusd # @@ -1970,7 +2004,9 @@ attr DEVICE readingList \ BASE_ID/updates/REMOTE_ID/BULB_TYPE/0:.* { json2nameValue($EVENT) } attr DEVICE setList\ on:noArg BASE_ID/REMOTE_ID/BULB_TYPE/GROUP_ID {"status":"ON"}\ + on_transition:slider,3,10,3600 BASE_ID/REMOTE_ID/BULB_TYPE/GROUP_ID {"status":"ON","transition":$EVTPART1}\ off:noArg BASE_ID/REMOTE_ID/BULB_TYPE/GROUP_ID {"status":"OFF"}\ + off_transition:slider,3,10,3600 BASE_ID/REMOTE_ID/BULB_TYPE/GROUP_ID {"status":"OFF","transition":$EVTPART1}\ brightness:colorpicker,BRI,0,15,255 BASE_ID/REMOTE_ID/BULB_TYPE/GROUP_ID {"$EVTPART0":"$EVTPART1"}\ hue:colorpicker,HUE,0,1,359 BASE_ID/REMOTE_ID/BULB_TYPE/GROUP_ID {"$EVTPART0":"$EVTPART1"}\ command:uzsuSelectRadio,Weiss,Nacht BASE_ID/REMOTE_ID/BULB_TYPE/GROUP_ID {"$EVTPART0":"$EVTPART1"} @@ -2360,7 +2396,7 @@ attr DEVICE setList start:noArg BASE_ID/DEVNAME/command start\ store_map BASE_ID/DEVNAME/custom_command {"command":"store_map","name":"$EVTPART1"} attr DEVICE setStateList charge locate pause stop start attr DEVICE comment For original code for "attrTmqtt2_roborock_valetudo2svg()" see this forum thread. To display generated map seperately, define a weblink device:
define valetudo_map weblink htmlCode -farewell:template has been applied successfully.
NOTE: additional code has been downloaded from svn (contrib).
Generated map will be shown as devStateIcon or define a weblink device: define valetudo_map weblink htmlCode .
For details, see this forum thread. NOTE: For use with rand256-Valetudo variant of the code, change "svg" in devStateIcon code to "png" and the following line:
BASE_ID/DEVNAME/map:.* { WriteFile("www/images/DEVNAME_map.png",$EVENT);; {map=>"images/DEVNAME_map.png"} } +farewell:template has been applied successfully.
NOTE: additional code has been downloaded from svn (contrib).
Generated map will be shown as devStateIcon or define a weblink device: define valetudo_map weblink htmlCode .
For details, see this forum thread. NOTE: For use with rand256-Valetudo variant of the code with external map generator, change "svg" in devStateIcon code to "png", change readingList entry for map_data to "BASE_ID/DEVNAME/map_data:.* {}" and add the following line:
BASE_ID/DEVNAME/map:.* { WriteFile("www/images/DEVNAME_map.png",$EVENT);; {map=>"images/DEVNAME_map.png"} } attr DEVICE model roborock # source: https://forum.fhem.de/index.php/topic,105222.0.html