From 96a39acd8864dfb82ca91784f16a52ea79e08e79 Mon Sep 17 00:00:00 2001 From: Beta-User Date: Wed, 13 Nov 2019 06:38:25 +0000 Subject: [PATCH] httpmod.template: add ESPEasy, Tasmota and pihole update check git-svn-id: https://svn.fhem.de/fhem/trunk@20504 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/lib/AttrTemplate/httpmod.template | 173 ++++++++++++++++++++ 1 file changed, 173 insertions(+) diff --git a/fhem/FHEM/lib/AttrTemplate/httpmod.template b/fhem/FHEM/lib/AttrTemplate/httpmod.template index cc7a86b37..2cba0d372 100644 --- a/fhem/FHEM/lib/AttrTemplate/httpmod.template +++ b/fhem/FHEM/lib/AttrTemplate/httpmod.template @@ -564,3 +564,176 @@ attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\ } attr DEVICE webCmd reread 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
Define a HTTPMOD device like
define tasmotaupdates HTTPMOD https://github.com/arendst/Tasmota/releases/latest 86400Source: Forum. +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

Changelog

[\w\W]*?

Version (\d*.\d*.\d*)\s\d*

+attr DEVICE reading02Name latestDate +attr DEVICE reading02OExpr $val =~ m/^(.{4})(.{2})(.{2})$/ ;; "$3.$2.$1" +attr DEVICE reading02Regex

Changelog

[\w\W]*?

Version \d*.\d*.\d*\s(\d*)

+attr DEVICE showError 1 +attr DEVICE showMatched 1 +attr DEVICE stateFormat { my $ret ="";;\ + my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\ + $ret .= '
';;\ + $ret .= 'last tasmota-check => '.$lastCheck;;\ + $ret .= '

';;\
+    $ret .= "| device                           | current |   new   |  released  |
";;\ + $ret .= "---------------------------------------------------------------------
";;\ + my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\ + if($check eq "no updates needed!") {\ + $ret .= '| ';;\ + $ret .= sprintf("%-65s",$check);;\ + $ret .= ' |';;\ + } elsif($check eq "error => no or wrong data from server!") {\ + $ret .= '| ';;\ + $ret .= sprintf("%-65s",$check);;\ + $ret .= ' |';;\ + } 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 .= '| ';;\ + $ret .= sprintf("%-32s",$dev);;\ + $ret .= ' | ';;\ + $ret .= '';;\ + $ret .= sprintf("%7s",$old);;\ + $ret .= ' | ';;\ + $ret .= '';;\ + $ret .= '';;\ + $ret .= sprintf("%7s",$new);;\ + $ret .= ' | ';;\ + $ret .= '';;\ + $ret .= '';;\ + $ret .= sprintf("%-10s",$date);;\ + $ret .= '';;\ + $ret .= " |
";;\ + }\ + }\ + $ret .= '
';;\ + 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
Define a HTTPMOD device like
define ESPEasy_updates HTTPMOD https://github.com/letscontrolit/ESPEasy/releases 86400Source: Forum. +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 .= '
';;\ + $ret .= 'last ESPEasy version check => '.$lastCheck;;\ + $ret .= '

';;\
+    $ret .= "| device                                       | current  |   new    | 
";;\ + $ret .= "----------------------------------------------------------------------
";;\ + my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\ + if($check eq "no updates needed!") {\ + $ret .= '| ';;\ + $ret .= sprintf("%-65s",$check);;\ + $ret .= ' |';;\ + } elsif($check eq "error => no or wrong data from server!") {\ + $ret .= '| ';;\ + $ret .= sprintf("%-65s",$check);;\ + $ret .= ' |';;\ + } else {\ + my @devices = split(',',$check);;\ + foreach my $devStr (@devices) {\ + my ($dev,$old,$new) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\)]+)\)$/;;\ + $ret .= '| ';;\ + $ret .= sprintf("%-44s",$dev);;\ + $ret .= ' | ';;\ + $ret .= '';;\ + $ret .= '';;\ + $ret .= sprintf("%7s",$old);;\ + $ret .= ' | ';;\ + $ret .= '';;\ + $ret .= '';;\ + $ret .= sprintf("%7s",$new);;\ + $ret .= ' |
';;\ + }\ + }\ + $ret .= '
';;\ + 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 DNSCRYPT.
Define a HTTPMOD device like
defmod dnscrypt_proxy_version HTTPMOD https://api.github.com/repos/jedisct1/dnscrypt-proxy/releases/latest 86400
Source: Forum +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 {"

".ReadingsTimestamp($name,'tag_name','')."
Online: ".ReadingsVal($name,'tag_name','')."
\ +pihole: ".AttrVal($name,'pihole_version','')."

"} +attr DEVICE pihole_version 2.0.31 +attr DEVICE room WHICHROOM +attr DEVICE enableControlSet 1 +attr DEVICE model dnscrypt-proxy_updates