From cc1c1f09f445203ab9cfa6e75ff0efcba49d5302 Mon Sep 17 00:00:00 2001
From: Beta-User <>
Date: Sun, 8 Sep 2019 10:43:48 +0000
Subject: [PATCH] httpmod.template: add eq3 firmware downloader, forum #78501
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@20133 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
FHEM/lib/AttrTemplate/httpmod.template | 89 ++++++++++++++++++++++++++
1 file changed, 89 insertions(+)
diff --git a/FHEM/lib/AttrTemplate/httpmod.template b/FHEM/lib/AttrTemplate/httpmod.template
index 89eef132b..490212b01 100644
--- a/FHEM/lib/AttrTemplate/httpmod.template
+++ b/FHEM/lib/AttrTemplate/httpmod.template
@@ -410,3 +410,92 @@ attr DEVICE stateFormat Dachtemperatur: Temperatur_Sensor1 Drehzahl Pumpe: Drehz
attr DEVICE timeout 5ercent="([\d\.]+)
attr DEVICE model C_01a_resol_solar
+#################################
+#Show updates for CUL_HM devices, Forum: https://forum.fhem.de/index.php/topic,78501.msg972144.html#msg972144
+name:X_01a_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
+defmod DEVICE HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
+attr DEVICE userattr enableControlSet event-on-change-reading event-on-update-reading reading01AutoNumLen reading01Format reading01Name reading01RegOpt reading01RegOpt:s,i,g reading01Regex readingMaxAge readingMaxAgeReplacementMode readingMaxAgeReplacementMode:text,expression,delete readingMaxAgeReplacementMode:text,reading,internal,expression,delete requestData.* showError showMatched stateFormat userReadings webCmd
+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 gi
+attr DEVICE reading01Regex no or wrong data from eq3-server!");; \
+ if($check eq "no fw-updates needed!") {\
+ $ret .= '| ';;\
+ $ret .= '';;\
+ $ret .= sprintf("%-80s",$check);;\
+ $ret .= '';;\
+ $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,$nfw,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\)$/;;\
+ my $link = ReadingsVal($name,"fw_link-".$idx,"");;\
+ $ret .= '| ';;\
+ $ret .= sprintf("%-23s",$dev);;\
+ $ret .= ' | ';;\
+ $ret .= sprintf("%-23s",$md);;\
+ $ret .= ' | ';;\
+ $ret .= sprintf("%6s",$ofw);;\
+ $ret .= ' | ';;\
+ $ret .= sprintf("%6s",$nfw);;\
+ $ret .= ' | ';;\
+ $ret .= sprintf("%-10s",$date);;\
+ $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