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