1
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-07 22:29:19 +00:00

httpmod.template: changes to hm-firmware-check and heizoel

git-svn-id: https://svn.fhem.de/fhem/trunk@21760 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Beta-User 2020-04-23 08:15:56 +00:00
parent 47e342ae48
commit 09e91b9fd9

View File

@ -72,15 +72,17 @@ desc: checks fuel oil prices via easyoil.com<br>Define a HTTPMOD device like<br>
order:order: 100005 order:order: 100005
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )} 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)} 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 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 enableControlSet 1
attr DEVICE group Spritpeise
attr DEVICE reading010Name Heizoelpreis attr DEVICE reading010Name Heizoelpreis
attr DEVICE reading010OExpr $val =~ s/,/\./;; $val;; attr DEVICE reading010OExpr $val =~ s/,/\./;; $val;;
attr DEVICE reading010Regex ([\d\,]+)[\s]+€ attr DEVICE reading010Regex ([\d\,]+)[\s]+€
attr DEVICE replacement01Mode text attr DEVICE replacement01Mode text
attr DEVICE replacement01Regex %%PLZ%% attr DEVICE replacement01Regex %%PLZ%%
attr DEVICE replacement01Value 40764 attr DEVICE replacement01Value 12345
attr DEVICE replacement02Mode text attr DEVICE replacement02Mode text
attr DEVICE replacement02Regex %%MENGE%% attr DEVICE replacement02Regex %%MENGE%%
attr DEVICE replacement02Value 3000 attr DEVICE replacement02Value 3000
@ -89,13 +91,22 @@ attr DEVICE replacement03Regex %%ENTLADESTELLEN%%
attr DEVICE replacement03Value 1 attr DEVICE replacement03Value 1
attr DEVICE replacement04Mode text attr DEVICE replacement04Mode text
attr DEVICE replacement04Regex %%SCHLAUCHLAENGE%% attr DEVICE replacement04Regex %%SCHLAUCHLAENGE%%
attr DEVICE replacement04Value 40 attr DEVICE replacement04Value 40m
attr DEVICE replacement05Mode text attr DEVICE replacement05Mode text
attr DEVICE replacement05Regex %%ANHAENGER%% attr DEVICE replacement05Regex %%ANHAENGER%%
attr DEVICE replacement05Value pr-truck-type=short_vehicle attr DEVICE replacement05Value pr-truck-type=short_vehicle
attr DEVICE room WHICHROOM attr DEVICE room WHICHROOM
attr DEVICE stateFormat {"<div>".ReadingsTimestamp($name,"Heizoelpreis","-")." \ attr DEVICE stateFormat { my $price = 0.0;;\
<b>".ReadingsVal($name,"Heizoelpreis","-")."&euro;;</b>/100l</div>"} $price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $ret = "<div>".ReadingsTimestamp($name,"Heizoelpreis","-");;\
$ret .= "&nbsp;;<b><a href=\"".InternalVal($name,"displayurl","https://www.esyoil.com")."\" rel=\"noopener noreferrer\" target=\"_blank\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a></b>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr DEVICE webCmd reread attr DEVICE webCmd reread
attr DEVICE model fuel_oil_check 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 #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 #Contributed by Pfriemler & yersinia, see https://forum.fhem.de/index.php/topic,78501.msg1043080.html#msg1043080
name:homematic_fw_check_v2 name:hm_fw_check_v2
filter:TYPE=HTTPMOD 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)<br>Define a HTTPMOD device like <br>define hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400<br /><a href="https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327">Source: Forum</a> desc: check for homematic firmware updates; based on new link provided by Pfriemler (switch from eq-3.de to update.homematic.com)<br />Define a HTTPMOD device like <br>define hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400<br /><a href="https://forum.fhem.de/index.php/topic,78501.msg1043080.html#msg1043080">Source: Forum</a>
order:X_01a order:X_01a
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )} 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)} 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 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 enableControlSet 1
attr DEVICE icon hm_ccu attr DEVICE icon hm_ccu
attr DEVICE reading01AutoNumLen 2 attr DEVICE reading01AutoNumLen 2
@ -528,70 +542,86 @@ attr DEVICE room WHICHROOM
attr DEVICE showError 1 attr DEVICE showError 1
attr DEVICE showMatched 1 attr DEVICE showMatched 1
attr DEVICE showNewFWOnly yes attr DEVICE showNewFWOnly yes
attr DEVICE stateFormat { my $ret ="";;;;\ attr DEVICE stateFormat { my $ret ="";;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;;;\ my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,"MATCHED_READINGS","2000-01-01 00:00:00"))));;\
$ret .= '<div style="text-align:left">';;;;\ my $nextCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(InternalVal($name,"TRIGGERTIME_FMT","2000-01-01 00:00:00"))));;\
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;;;\ my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;";;\
$ret .= '<br><br><pre>';;;;\ $ret .= '<div style="text-align:left;;">';;;;\
$ret .= "| device | model | cur_fw | new_fw |<br>";;;;\ $ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;\
$ret .= "------------------------------------------------------------------------------<br>";;;;\ $ret .= '<br />';;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;;;\ my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;\
if($check eq "no fw-updates needed!") {\ if($check eq "no fw-updates needed!") {\
$ret .= '| <b style="color:green">';;;;\ $ret .= '<div style="color:limegreen;;font-weight:bold;;">';;\
$ret .= sprintf("%-74s",$check);;;;\ $ret .= $check;;\
$ret .= '</b> |';;;;\ $ret .= '</div>';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\ } elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;;;\ $ret .= '<div style="color:red;;font-weight:bold;;">';;\
$ret .= sprintf("%-74s",$check);;;;\ $ret .= $check;;\
$ret .= '</b> |';;;;\ $ret .= '</div>';;\
} else {\ } else {\
my @devices = split(',',$check);;;;\ $ret .= '<br /><div style="display:table;;width:100%;;">';;\
$ret .= '<div style="display:table-row;;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:50%;;font-weight:bold;;">device</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;font-weight:bold;;">model</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">current</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">new</div>';;\
$ret .= '</div>';; #header\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\ foreach my $devStr (@devices) {\
my ($dev,$md,$idx,$ofw,$nfw) = $devStr =~ m/([^\s]+)\s[(]([^\s]+)\s[(](\d+)[)]\sofw_([\d\.]+)\s=>\snfw_([\d\.]+)/;;;;\ #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;;;;\ my ($dev,$idx) = $devStr =~ m/([^\s]+)\s[(](\d+)[)]/;;\
$ret .= '| <a href="/fhem?detail='.$dev.'" target="_blank"><b>';;;;\ my $md = ReadingsVal($name,("hmfw-type-".$idx),"?");;\
$ret .= sprintf("%-30s",$dev);;;;\ my $ofw = AttrVal($dev,"firmware","?");;\
$ret .= '</b></a> | ';;;;\ my $nfw = ReadingsVal($name,("hmfw-version-".$idx),"none");;\
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow;;"':' style="color:lightgray;;"').'>';;;;\ my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;\
$ret .= sprintf("%-23s",$md);;;;\ $ret .= '<div style="display:table-row;;">';;\
$ret .= '</b> | ';;;;\ $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:50%;;">';;\
$ret .= '<b'.(($ofw eq "0.0")?' title="missing attribute firmware => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray;;"').'>';;;;\ $ret .= '<a href="/fhem?detail='.$dev.'" target="_blank">';;\
$ret .= sprintf("%6s",$ofw);;;;\ $ret .= AttrVal($dev,"alias",$dev);;\
$ret .= '</b> | ';;;;\ $ret .= '</a></div>';;\
$ret .= '<a title="download firmware file" href="'.$fw_link.'" target="_blank"><b style="color:red;;">';;;;\ $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;font-weight:bold;;color:lightgrey;;">';;\
$ret .= sprintf("%6s",$nfw);;;;\ $ret .= $md;;\
$ret .= '</b></a> | ';;;;\ $ret .= '</div>';;\
$ret .= "<br />";;;;\ $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;color:lightgrey;;">';;\
$ret .= $ofw;;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;color:red;;">';;\
$ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank" style="color:red;;">';;\
$ret .= $nfw;;\
$ret .= '</a></div>';;\
$ret .= '</div>';; #row\
}\ }\
$ret .= '</div>';; #table\
}\ }\
$ret .= '</pre></div>';;;;\ $ret .= "<br /><div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
return $ret;;;;\ $ret .= '</div>';;\
return $ret;;\
} }
attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\ attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\
my $ret = "";;;;\ my $ret = "";;\
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;;;\ my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;\
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\ if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
my @eq3FwList = map { \ my @eq3FwList = map { \
sprintf(ReadingsVal($name,"hmfw-type-".$_,"?").":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;;;\ sprintf(uc(ReadingsVal($name,"hmfw-type-".$_,"?")).":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;\
} ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d)/g;;;;\ } ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d)/g;;\
\ \
foreach my $dev (devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)")) {\ foreach my $dev (devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)")) {\
my $md = AttrVal($dev,"model","?");;;;\ my $md = AttrVal($dev,"model","?");;\
my $v = AttrVal($dev,"firmware","0.0");;;;\ my $v = AttrVal($dev,"firmware","0.0");;\
my ($h,$l) = split('\.',$v);;;;\ my ($h,$l) = split('\.',$v);;\
foreach my $newFW (grep m/^${md}:/i,@eq3FwList) {\ foreach my $newFW (grep m/^${md}:/i,@eq3FwList) {\
my ($fwmd, $fwv, $idx) = $newFW =~ m/([^:]+):(\d+[.]\d+[.]\d+):(\d+)$/;;;;\ my ($fwmd, $fwv, $idx) = $newFW =~ m/([^:]+):(\d+[.]\d+[.]\d+):(\d+)$/;;\
my ($fwh, $fwl) = split('\.',$fwv);;;;\ my ($fwh, $fwl) = split('\.',$fwv);;\
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\ if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
$ret .= "," if($ret ne "");;;;\ $ret .= "," if($ret ne "");;\
$ret .= $dev." (".$md." (".$idx.") ofw_".$v." => nfw_".$fwv.")";;;;\ $ret .= $dev." (".$idx.")";;\
}\ }\
}\ }\
}\ }\
} else {\ } 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 webCmd reread
attr DEVICE model homematic_fw_check_v2 attr DEVICE model homematic_fw_check_v2