httpmod.template: add ESPEasy, Tasmota and pihole update check

git-svn-id: https://svn.fhem.de/fhem/trunk@20504 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Beta-User
2019-11-13 06:38:25 +00:00
parent cd74d37e85
commit 96a39acd88

View File

@@ -564,3 +564,176 @@ attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\
} }
attr DEVICE webCmd reread attr DEVICE webCmd reread
attr DEVICE model CUL_HM_firmware_update_downloader attr DEVICE model CUL_HM_firmware_update_downloader
#Contributed by OdfFHEM, see https://forum.fhem.de/index.php/topic,97694.msg992348.html#msg992348
name:tasmota_firmware_updates
filter:TYPE=HTTPMOD
desc: Check Tasmota homepage for available new firmware files<br>Define a HTTPMOD device like <br>define tasmotaupdates HTTPMOD https://github.com/arendst/Tasmota/releases/latest 86400<a href="https://forum.fhem.de/index.php/topic,97694.msg992308.html#msg992308">Source: Forum</a>.
order:X_01e
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 1
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex <h2>Changelog</h2>[\w\W]*?<p>Version (\d*.\d*.\d*)\s\d*</p>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})(.{2})(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex <h2>Changelog</h2>[\w\W]*?<p>Version \d*.\d*.\d*\s(\d*)</p>
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat { my $ret ="";;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
$ret .= '<div style="text-align:left">';;\
$ret .= 'last <a title="versions" href="'.InternalVal($name,"MainURL","unknown").'">tasmota</a>-check => '.$lastCheck;;\
$ret .= '<br><br><pre>';;\
$ret .= "| device | current | new | released |<br>";;\
$ret .= "---------------------------------------------------------------------<br>";;\
my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
if($check eq "no updates needed!") {\
$ret .= '| <b style="color:green">';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= '</b> |';;\
} elsif($check eq "error => no or wrong data from server!") {\
$ret .= '| <b style="color:red">';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= '</b> |';;\
} else {\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
$ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
$ret .= sprintf("%-32s",$dev);;\
$ret .= '</b></a> | ';;\
$ret .= '<b style="color:lightgray">';;\
$ret .= sprintf("%7s",$old);;\
$ret .= '</b> | ';;\
$ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
$ret .= '<b style="color:red">';;\
$ret .= sprintf("%7s",$new);;\
$ret .= '</b></a> | ';;\
$ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
$ret .= '<b style="color:black">';;\
$ret .= sprintf("%-10s",$date);;\
$ret .= '</b></a>';;\
$ret .= " |<br>";;\
}\
}\
$ret .= '</pre></div>';;\
return $ret;;\
}
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
my $ret = "";;\
if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
$ret = "error => no or wrong data from server!";;\
} else {\
my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
my $DATE = ReadingsVal($name,"latestDate","unknown");;\
foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=INFO1_Version=.*\\(.*sonoff\\)")) {\
my $version = ReadingsVal($dev,"INFO1_Version","unknown");;\
$version =~ m/([0-9.]*).*/;;\
$version = $1;;\
if($version ne $VERSION) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
}\
}\
}\
return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model tasmota_firmware_updates
#Contributed by yersinia, see https://forum.fhem.de/index.php/topic,97694.msg992432.html#msg992432
name:ESPEasy_firmware_updates
filter:TYPE=HTTPMOD
desc: Check letscontrollit homepage for available new firmware files<br>Define a HTTPMOD device like <br>define ESPEasy_updates HTTPMOD https://github.com/letscontrolit/ESPEasy/releases 86400<a href="https://forum.fhem.de/index.php/topic,97694.msg992432.html#msg992432">Source: Forum</a>.
order:X_01f
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01Regex
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 1
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex Release mega-([\d]{8})
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat { my $ret ="";;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
$ret .= '<div style="text-align:left;;">';;\
$ret .= 'last <a href="https://github.com/letscontrolit/ESPEasy" title="ESPEasy" rel="noopener noreferrer" target="_blank">ESPEasy</a> version check => '.$lastCheck;;\
$ret .= '<br /><br /><pre>';;\
$ret .= "| device | current | new | <br />";;\
$ret .= "---------------------------------------------------------------------- <br />";;\
my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
if($check eq "no updates needed!") {\
$ret .= '| <b style="color:green">';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= '</b> |';;\
} elsif($check eq "error => no or wrong data from server!") {\
$ret .= '| <b style="color:red">';;\
$ret .= sprintf("%-65s",$check);;\
$ret .= '</b> |';;\
} else {\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$old,$new) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\)]+)\)$/;;\
$ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
$ret .= sprintf("%-44s",$dev);;\
$ret .= '</b></a> | ';;\
$ret .= '<b style="color:lightgray;;">';;\
$ret .= '<a href="https://github.com/letscontrolit/ESPEasy/releases/tag/mega-'.$old.'" title="ESPEasy Release mega-'.$old.'" rel="noopener noreferrer" target="_blank">';;\
$ret .= sprintf("%7s",$old);;\
$ret .= '</a></b> | ';;\
$ret .= '<a href="https://github.com/letscontrolit/ESPEasy/releases/tag/mega-'.$new.'" title="ESPEasy Release mega-'.$new.'" rel="noopener noreferrer" target="_blank">';;\
$ret .= '<b style="color:red;;">';;\
$ret .= sprintf("%7s",$new);;\
$ret .= '</b></a> |<br />';;\
}\
}\
$ret .= '</pre></div>';;\
return $ret;;\
}
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
my $ret = "";;\
if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
$ret = "error => no or wrong data from server!";;\
} else {\
my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
foreach my $dev (devspec2array("TYPE=ESPEasy:FILTER=HOST!=bridge")) {\
my $version = InternalVal($dev,"ESP_BUILD_GIT","unknown");;\
$version =~ m/([\d]{8})/;;\
$version = $1;;\
if($version ne $VERSION) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$version." | ".$VERSION.")";;\
}\
}\
}\
return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model ESPEasy_firmware_updates
#Contributed by yersinia, see
name:dnscrypt-proxy_updates
filter:TYPE=HTTPMOD
desc: Show updates for <a href="https://dnscrypt.info/">DNSCRYPT.</a><br>Define a HTTPMOD device like <br>defmod dnscrypt_proxy_version HTTPMOD https://api.github.com/repos/jedisct1/dnscrypt-proxy/releases/latest 86400<br><a href="https://forum.fhem.de/index.php/topic,97694.msg992002.html#msg992002">Source: Forum</a>
order:X_01x
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr userattr pihole_version
attr DEVICE extractAllJSON 1
attr DEVICE extractAllJSONFilter tag_name
attr DEVICE stateFormat {"<p align=\"left\">".ReadingsTimestamp($name,'tag_name','')."<br />Online: <a href=\"https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/ChangeLog\"\
title=\"ChangeLog\" rel=\"noopener noreferrer\" target=\"_blank\"><b>".ReadingsVal($name,'tag_name','')."</b></a><br />\
pihole: <b>".AttrVal($name,'pihole_version','')."</b></p>"}
attr DEVICE pihole_version 2.0.31
attr DEVICE room WHICHROOM
attr DEVICE enableControlSet 1
attr DEVICE model dnscrypt-proxy_updates