From 09e91b9fd9bcc55573411c3f5fef87b95b07d5f2 Mon Sep 17 00:00:00 2001 From: Beta-User <> Date: Thu, 23 Apr 2020 08:15:56 +0000 Subject: [PATCH] httpmod.template: changes to hm-firmware-check and heizoel git-svn-id: https://svn.fhem.de/fhem/trunk@21760 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/lib/AttrTemplate/httpmod.template | 136 ++++++++++++-------- 1 file changed, 83 insertions(+), 53 deletions(-) diff --git a/fhem/FHEM/lib/AttrTemplate/httpmod.template b/fhem/FHEM/lib/AttrTemplate/httpmod.template index 2cd5f2730..cbcf7346e 100644 --- a/fhem/FHEM/lib/AttrTemplate/httpmod.template +++ b/fhem/FHEM/lib/AttrTemplate/httpmod.template @@ -72,15 +72,17 @@ desc: checks fuel oil prices via easyoil.com
Define a HTTPMOD device like
order:order: 100005 par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )} par:INTERVAL;Actual interval for updating, defaults to hourly (3600s); {InternalVal("DEVICE","Interval",3600)} -defmod Heizoelpreis HTTPMOD https://www.esyoil.com/preisausgabe.php?pr-unloading-points=%%ENTLADESTELLEN%%&pr-product=8&pr-payment-type=2&%%ANHAENGER%%&pr-hose-length=%%SCHLAUCHLAENGE%%&pr-app=1&pr-zip=%%PLZ%%&pr-amount=%%MENGE%%&submit= INTERVAL +defmod DEVICE HTTPMOD https://www.esyoil.com/preisausgabe.php?pr-unloading-points=%%ENTLADESTELLEN%%&pr-product=8&pr-payment-type=2&%%ANHAENGER%%&pr-hose-length=%%SCHLAUCHLAENGE%%&pr-app=1&pr-zip=%%PLZ%%&pr-amount=%%MENGE%%&submit= INTERVAL attr DEVICE userattr reading010Name reading010OExpr reading010Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value +attr DEVICE DbLogExclude .* attr DEVICE enableControlSet 1 +attr DEVICE group Spritpeise attr DEVICE reading010Name Heizoelpreis attr DEVICE reading010OExpr $val =~ s/,/\./;; $val;; attr DEVICE reading010Regex ([\d\,]+)[\s]+€ attr DEVICE replacement01Mode text attr DEVICE replacement01Regex %%PLZ%% -attr DEVICE replacement01Value 40764 +attr DEVICE replacement01Value 12345 attr DEVICE replacement02Mode text attr DEVICE replacement02Regex %%MENGE%% attr DEVICE replacement02Value 3000 @@ -89,13 +91,22 @@ attr DEVICE replacement03Regex %%ENTLADESTELLEN%% attr DEVICE replacement03Value 1 attr DEVICE replacement04Mode text attr DEVICE replacement04Regex %%SCHLAUCHLAENGE%% -attr DEVICE replacement04Value 40 +attr DEVICE replacement04Value 40m attr DEVICE replacement05Mode text attr DEVICE replacement05Regex %%ANHAENGER%% attr DEVICE replacement05Value pr-truck-type=short_vehicle attr DEVICE room WHICHROOM -attr DEVICE stateFormat {"
".ReadingsTimestamp($name,"Heizoelpreis","-")." \ -".ReadingsVal($name,"Heizoelpreis","-")."€;/100l
"} +attr DEVICE stateFormat { my $price = 0.0;;\ + $price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\ + my $ret = "
".ReadingsTimestamp($name,"Heizoelpreis","-");;\ + $ret .= " ;";;\ + $ret .= ReadingsVal($name,"Heizoelpreis","-");;\ + $ret .= "€;/100l";;\ + $ret .= " ;(".AttrVal($name,"replacement02Value","0")."l = ";;\ + $ret .= sprintf("%.2f",$price);;\ + $ret .= "€;)
";;\ + return $ret;;\ +} attr DEVICE webCmd reread attr DEVICE model fuel_oil_check @@ -503,15 +514,18 @@ attr DEVICE model resol_solar ################################# #Show updates for CUL_HM devices, Forum: https://forum.fhem.de/index.php/topic,78501.msg972144.html#msg972144 -#Contributed by Pfriemler & yersinia, see https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327 -name:homematic_fw_check_v2 +#Contributed by Pfriemler & yersinia, see https://forum.fhem.de/index.php/topic,78501.msg1043080.html#msg1043080 +name:hm_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 86400
Source: Forum +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 attr DEVICE userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no +attr DEVICE DbLogExclude .* +attr DEVICE alignTime 14:02 +attr DEVICE do_not_notify 1 attr DEVICE enableControlSet 1 attr DEVICE icon hm_ccu attr DEVICE reading01AutoNumLen 2 @@ -528,70 +542,86 @@ attr DEVICE room WHICHROOM attr DEVICE showError 1 attr DEVICE showMatched 1 attr DEVICE showNewFWOnly yes -attr DEVICE stateFormat { my $ret ="";;;;\ - my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;;;\ - $ret .= '
';;;;\ - $ret .= 'last homematic-fw-check => '.$lastCheck;;;;\ - $ret .= '

';;;;\
-    $ret .= "| device                         | model                   | cur_fw | new_fw |
";;;;\ - $ret .= "------------------------------------------------------------------------------
";;;;\ - my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;;;\ +attr DEVICE stateFormat { my $ret ="";;\ + my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,"MATCHED_READINGS","2000-01-01 00:00:00"))));;\ + my $nextCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(InternalVal($name,"TRIGGERTIME_FMT","2000-01-01 00:00:00"))));;\ + my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;";;\ + $ret .= '
';;;;\ + $ret .= 'last homematic-fw-check => '.$lastCheck;;\ + $ret .= '
';;\ + my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;\ if($check eq "no fw-updates needed!") {\ - $ret .= '| ';;;;\ - $ret .= sprintf("%-74s",$check);;;;\ - $ret .= ' |';;;;\ + $ret .= '
';;\ + $ret .= $check;;\ + $ret .= '
';;\ } elsif($check eq "error => no or wrong data from eq3-server!") {\ - $ret .= '| ';;;;\ - $ret .= sprintf("%-74s",$check);;;;\ - $ret .= ' |';;;;\ + $ret .= '
';;\ + $ret .= $check;;\ + $ret .= '
';;\ } else {\ - my @devices = split(',',$check);;;;\ + $ret .= '
';;\ + $ret .= '
';;\ + $ret .= '
device
';;\ + $ret .= '
model
';;\ + $ret .= '
current
';;\ + $ret .= '
new
';;\ + $ret .= '
';; #header\ + my @devices = split(',',$check);;\ foreach my $devStr (@devices) {\ - my ($dev,$md,$idx,$ofw,$nfw) = $devStr =~ m/([^\s]+)\s[(]([^\s]+)\s[(](\d+)[)]\sofw_([\d\.]+)\s=>\snfw_([\d\.]+)/;;;;\ - my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;;;\ - $ret .= '| ';;;;\ - $ret .= sprintf("%-30s",$dev);;;;\ - $ret .= ' | ';;;;\ - $ret .= '';;;;\ - $ret .= sprintf("%-23s",$md);;;;\ - $ret .= ' | ';;;;\ - $ret .= '';;;;\ - $ret .= sprintf("%6s",$ofw);;;;\ - $ret .= ' | ';;;;\ - $ret .= '';;;;\ - $ret .= sprintf("%6s",$nfw);;;;\ - $ret .= ' | ';;;;\ - $ret .= "
";;;;\ + #my ($dev,$md,$idx,$ofw,$nfw) = $devStr =~ m/([^\s]+)\s[(]([^\s]+)\s[(](\d+)[)]\sofw_([\d\.]+)\s=>\snfw_([\d\.]+)/;;\ + my ($dev,$idx) = $devStr =~ m/([^\s]+)\s[(](\d+)[)]/;;\ + my $md = ReadingsVal($name,("hmfw-type-".$idx),"?");;\ + my $ofw = AttrVal($dev,"firmware","?");;\ + my $nfw = ReadingsVal($name,("hmfw-version-".$idx),"none");;\ + my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;\ + $ret .= '
';;\ + $ret .= '';;\ + $ret .= '
';;\ + $ret .= $md;;\ + $ret .= '
';;\ + $ret .= '
';;\ + $ret .= $ofw;;\ + $ret .= '
';;\ + $ret .= '';;\ + $ret .= '
';; #row\ }\ + $ret .= '
';; #table\ }\ - $ret .= '
';;;;\ - return $ret;;;;\ + $ret .= "
(next check: ".$nextCheck.")
";;\ + $ret .= '';;\ + return $ret;;\ } attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\ - my $ret = "";;;;\ - my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;;;\ + my $ret = "";;\ + my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;\ if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\ my @eq3FwList = map { \ - sprintf(ReadingsVal($name,"hmfw-type-".$_,"?").":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;;;\ - } ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d)/g;;;;\ + sprintf(uc(ReadingsVal($name,"hmfw-type-".$_,"?")).":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;\ + } ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\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);;;;\ + 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 ($fwmd, $fwv, $idx) = $newFW =~ m/([^:]+):(\d+[.]\d+[.]\d+):(\d+)$/;;;;\ - my ($fwh, $fwl) = split('\.',$fwv);;;;\ + my ($fwmd, $fwv, $idx) = $newFW =~ m/([^:]+):(\d+[.]\d+[.]\d+):(\d+)$/;;\ + my ($fwh, $fwl) = split('\.',$fwv);;\ if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\ - $ret .= "," if($ret ne "");;;;\ - $ret .= $dev." (".$md." (".$idx.") ofw_".$v." => nfw_".$fwv.")";;;;\ + $ret .= "," if($ret ne "");;\ + $ret .= $dev." (".$idx.")";;\ }\ }\ }\ } else {\ - $ret = "error => no or wrong data from eq3-server!";;;;\ + $ret = "error => no or wrong data from eq3-server!";;\ }\ - return ($ret eq "")?"no fw-updates needed!":$ret;;;;\ + return ($ret eq "")?"no fw-updates needed!":$ret;;\ } attr DEVICE webCmd reread attr DEVICE model homematic_fw_check_v2