Hallo zusammen,
irgendwie zeigt der Firmwarecheck nichts mehr an. (siehe angehänger screenshot)
Hab dem mit dem Wiki abgeglichen und sieht gleich aus. Es werden auch Readings aktualisiert.
Hier ein List des Geräts. Ohne den riesen HTML Block. Der hat nicht in den Beitrag gepasst.
Internals:
BUSY 0
DEF http://www.eq-3.de/service/downloads.html 86400
Interval 86400
LASTSEND 1508965913.82958
MainURL http://www.eq-3.de/service/downloads.html
MaxAgeEnabled 1
ModuleVersion 3.4.0 - 9.9.2017
NAME HM_Firmwarecheck
NR 398
STATE <div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/downloads.html">homematic</a>-fw-check => ???<br><br><pre>| device | model | old_fw | new_fw | release |
------------------------------------------------------------------------------------
| <a href="/fhem?detail="> </a> | <b style="color:lightgray"> </b> | <b style="color:lightgray"> </b> | <a title="eq3-firmware.tgz" href="???"><b style="color:red"> </b></a> | |
</pre></div>
TRIGGERTIME 1509051576.8372
TRIGGERTIME_FMT 2017-10-26 22:59:36
TYPE HTTPMOD
addr http://www.eq-3.de:80
buf HTTP/1.1 200 OK
Date: Wed, 25 Oct 2017 21:11:53 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.1e-fips mod_fcgid/2.3.9
X-Powered-By: PHP/5.6.5
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Expires: Fri, 06 Jun 1975 15:10:00 GMT
Vary: User-Agent
Set-Cookie: PHPSESSID=9g3v2cqpn5fc4tql9lhgov8ed6; path=/; HttpOnly
Set-Cookie: BE_USER_AUTH=8ad9b796f6aeacba7ac2ab52acdf7577bd5e02c6; expires=Tue, 24-Oct-2017 21:11:53 GMT; Max-Age=-86400; path=/; httponly
Set-Cookie: FE_USER_AUTH=8ac0cf168eeb0bb45e0cdfac9e5409010c47b81e; expires=Tue, 24-Oct-2017 21:11:53 GMT; Max-Age=-86400; path=/; httponly
Last-Modified: Wed, 25 Oct 2017 21:11:54 GMT
QUEUE:
READINGS:
2017-10-24 21:41:33 LAST_ERROR read from http://www.eq-3.de:80 timed out
2017-10-25 23:11:54 LAST_REQUEST update
2017-10-25 23:11:54 MATCHED_READINGS fw_link-01 fw_link-02 fw_link-03 fw_link-04 fw_link-05 fw_link-06 fw_link-07 fw_link-08 fw_link-09 fw_link-10 fw_link-11 fw_link-12 fw_link-13 fw_link-14 fw_link-15 fw_link-16 fw_link-17 fw_link-18 fw_link-19 fw_link-20
2017-10-25 23:11:54 UNMATCHED_READINGS
2017-10-25 23:11:54 fw_link-01 http://www.eq-3.de/Downloads/Software/Firmware/hm-mod-re-8_update_V1_2_150911.tgz
2017-10-25 23:11:54 fw_link-02 http://www.eq-3.de/Downloads/Software/Firmware/HM-LC-Bl1PBU-FM_update_V2_11_1_161212.tgz
2017-10-25 23:11:54 fw_link-03 http://www.eq-3.de/Downloads/Software/Firmware/hm_dis_ep_wm55_update_V1_2_170129.tgz
2017-10-25 23:11:54 fw_link-04 http://www.eq-3.de/Downloads/Software/Firmware/HM-ES-PMSw1-Pl-DN-R1_update_V2_5_0009_150217.tgz
2017-10-25 23:11:54 fw_link-05 http://www.eq-3.de/Downloads/Software/Firmware/HM-Sen-MDIR-WM55_update_V1_2_0_160825.tgz
2017-10-25 23:11:54 fw_link-06 http://www.eq-3.de/Downloads/Software/Firmware/HM-ES-TX-WM_update_V1_2_160628.tgz
2017-10-25 23:11:54 fw_link-07 http://www.eq-3.de/Downloads/Software/Firmware/hm-ou-cfm-tw_update_V1_3_160620.tgz
2017-10-25 23:11:54 fw_link-08 http://www.eq-3.de/Downloads/Software/Firmware/HM-ES-TX-WM_update_V1_1_160318.tgz
2017-10-25 23:11:54 fw_link-09 http://www.eq-3.de/Downloads/Software/Firmware/HM-LC-Dim1PWM-CV_update_V2_9_0005_150730.tar.gz
2017-10-25 23:11:54 fw_link-10 http://www.eq-3.de/Downloads/Software/Firmware/HM-LC-Dim1L-Pl-3_update_V2_9_0007_150803.tar.gz
2017-10-25 23:11:54 fw_link-11 http://www.eq-3.de/Downloads/Software/Firmware/HM-LC-Dim1TPBU-FM_update_V2_9_0005_150730.tar.gz
2017-10-25 23:11:54 fw_link-12 http://www.eq-3.de/Downloads/Software/Firmware/HM-LC-Dim1T-Pl-3_update_V2_9_0005_150730.tar.gz
2017-10-25 23:11:54 fw_link-13 http://www.eq-3.de/Downloads/Software/Firmware/hm-mod-re-8_update_V1_2_150911.tgz
2017-10-25 23:11:54 fw_link-14 http://www.eq-3.de/Downloads/Software/Firmware/hm_tc_it_wm_w_eu_update_V1_3_002_150827.tgz
2017-10-25 23:11:54 fw_link-15 http://www.eq-3.de/Downloads/Software/Firmware/HM-LC-Sw1PBU-FM_update_V2_8_2_150713.tgz
2017-10-25 23:11:54 fw_link-16 http://www.eq-3.de/Downloads/Software/Firmware/HM-Sen-MDIR-WM55_update_V1_1_2_150413.tgz
2017-10-25 23:11:54 fw_link-17 http://www.eq-3.de/Downloads/Software/Firmware/HM-ES-PMSw1-Pl_update_V2_5_0009_150217.tgz
2017-10-25 23:11:54 fw_link-18 http://www.eq-3.de/Downloads/Software/Firmware/hm_cc_rt_dn_update_V1_4_001_141020.tgz
2017-10-25 23:11:54 fw_link-19 http://www.eq-3.de/Downloads/Software/Firmware/hm-sen-rd-o_update_V1_4_003_130930.tgz
2017-10-25 23:11:54 fw_link-20 http://www.eq-3.de/Downloads/Software/Firmware/HM-LC-Bl1PBU-FM_update_V2_3_0002_131204.tgz
2017-10-25 23:11:54 newFwForDevices no fw-updates needed!
REQUEST:
data suchtext=&suche_in=2&downloadart=11
header
ignoreredirects 0
retryCount 0
type update
url http://www.eq-3.de/service/downloads.html
value 0
defptr:
readingBase:
fw_link-01 reading
fw_link-02 reading
fw_link-03 reading
fw_link-04 reading
fw_link-05 reading
fw_link-06 reading
fw_link-07 reading
fw_link-08 reading
fw_link-09 reading
fw_link-10 reading
fw_link-11 reading
fw_link-12 reading
fw_link-13 reading
fw_link-14 reading
fw_link-15 reading
fw_link-16 reading
fw_link-17 reading
fw_link-18 reading
fw_link-19 reading
fw_link-20 reading
readingNum:
fw_link-01 01
fw_link-02 01
fw_link-03 01
fw_link-04 01
fw_link-05 01
fw_link-06 01
fw_link-07 01
fw_link-08 01
fw_link-09 01
fw_link-10 01
fw_link-11 01
fw_link-12 01
fw_link-13 01
fw_link-14 01
fw_link-15 01
fw_link-16 01
fw_link-17 01
fw_link-18 01
fw_link-19 01
fw_link-20 01
readingOutdated:
readingSubNum:
fw_link-01 -1
fw_link-02 -2
fw_link-03 -3
fw_link-04 -4
fw_link-05 -5
fw_link-06 -6
fw_link-07 -7
fw_link-08 -8
fw_link-09 -9
fw_link-10 -10
fw_link-11 -11
fw_link-12 -12
fw_link-13 -13
fw_link-14 -14
fw_link-15 -15
fw_link-16 -16
fw_link-17 -17
fw_link-18 -18
fw_link-19 -19
fw_link-20 -20
requestReadings:
update:
fw_link-01 reading 01-1
fw_link-02 reading 01-2
fw_link-03 reading 01-3
fw_link-04 reading 01-4
fw_link-05 reading 01-5
fw_link-06 reading 01-6
fw_link-07 reading 01-7
fw_link-08 reading 01-8
fw_link-09 reading 01-9
fw_link-10 reading 01-10
fw_link-11 reading 01-11
fw_link-12 reading 01-12
fw_link-13 reading 01-13
fw_link-14 reading 01-14
fw_link-15 reading 01-15
fw_link-16 reading 01-16
fw_link-17 reading 01-17
fw_link-18 reading 01-18
fw_link-19 reading 01-19
fw_link-20 reading 01-20
sslargs:
Attributes:
enableControlSet 1
event-on-change-reading .*
event-on-update-reading LAST_ERROR,MATCHED_READINGS
reading01AutoNumLen 2
reading01Format http://www.eq-3.de/%s
reading01Name fw_link
reading01RegOpt g
reading01Regex <a.href="(Downloads\/Software\/Firmware\/[^"]+)
readingMaxAge 10
readingMaxAgeReplacementMode delete
requestData.* suchtext=&suche_in=2&downloadart=11
room System
showError 1
showMatched 1
stateFormat {eq3StateFormat()}
userReadings newFwForDevices:MATCHED_READINGS:.* {
my $ret = "";
my @data;
my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/Firmware\/(.*?)_update_V([\d_]+)_(\d\d)(\d\d)(\d\d)/;
$data[0] =~ s/_/-/g;
sprintf("%s:%s:%s.%s.%s:%s",$data[0],$data[1],$data[4],$data[3],"20".$data[2],$_);
} ReadingsVal("eq3","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.")";
}
}
}
return ($ret eq "")?"no fw-updates needed!":$ret;
}
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
webCmd reread
Fheler im fhem Log:
2017.10.25 23:09:36 1: PERL WARNING: Subroutine eq3StateFormat redefined at ./FHEM/99_myUtilseq3StateFormat.pm line 20.
2017.10.25 23:09:52 1: PERL WARNING: Use of uninitialized value $idx in concatenation (.) or string at ./FHEM/99_myUtilseq3StateFormat.pm line 38.
2017.10.25 23:09:52 1: PERL WARNING: Use of uninitialized value $dev in concatenation (.) or string at ./FHEM/99_myUtilseq3StateFormat.pm line 40.
2017.10.25 23:09:52 1: PERL WARNING: Use of uninitialized value $dev in sprintf at ./FHEM/99_myUtilseq3StateFormat.pm line 41.
2017.10.25 23:09:52 1: PERL WARNING: Use of uninitialized value $md in string eq at ./FHEM/99_myUtilseq3StateFormat.pm line 44.
2017.10.25 23:09:52 1: PERL WARNING: Use of uninitialized value $md in sprintf at ./FHEM/99_myUtilseq3StateFormat.pm line 45.
2017.10.25 23:09:52 1: PERL WARNING: Use of uninitialized value $ofw in string eq at ./FHEM/99_myUtilseq3StateFormat.pm line 48.
2017.10.25 23:09:52 1: PERL WARNING: Use of uninitialized value $ofw in sprintf at ./FHEM/99_myUtilseq3StateFormat.pm line 49.
2017.10.25 23:09:52 1: PERL WARNING: Use of uninitialized value $nfw in sprintf at ./FHEM/99_myUtilseq3StateFormat.pm line 54.
2017.10.25 23:09:52 1: PERL WARNING: Use of uninitialized value $date in sprintf at ./FHEM/99_myUtilseq3StateFormat.pm line 58.
99_myUtilseq3StateFormat
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
sub eq3StateFormat() {
my $name = "eq3";
my $ret ="";
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");
$ret .= '<div style="text-align:left">';
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/downloads.html">homematic</a>-fw-check => '.$lastCheck;
$ret .= '<br><br>';
$ret .= '<pre>';
$ret .= "| device | model | old_fw | new_fw | release |\n";
$ret .= "------------------------------------------------------------------------------------\n";
my $check = ReadingsVal($name,"newFwForDevices","???");
if($check eq "no fw-updates needed!") {
$ret .= '| '.$check.' |';
} 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 .= '<a href="/fhem?detail='.$dev.'">';
$ret .= sprintf("%-23s",$dev);
$ret .= '</a>';
$ret .= " | ";
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';
$ret .= sprintf("%-23s",$md);
$ret .= '</b>';
$ret .= " | ";
$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 .= sprintf("%6s",$ofw);
$ret .= '</b>';
$ret .= " | ";
$ret .= '<a title="eq3-firmware.tgz" href="'.$link.'">';
$ret .= '<b style="color:red">';
$ret .= sprintf("%6s",$nfw);
$ret .= '</b>';
$ret .= '</a>';
$ret .= " | ";
$ret .= sprintf("%-10s",$date);
$ret .= " |\n";
}
}
$ret .= '</pre>';
$ret .= '</div>';
return $ret;
}
1;
Hast du denn Geräte mit "alter" FW?
Bei mir wird (auch) nur angezeigt, wenn eine neue(re) FW für ein verwendetes Gerät da ist...
Dachte auch zunächst es wär "kaputt" aber ich hab für mich beschlossen, dass es so gedacht ist/war...
Gruß, Joachim
Der Firmware check ist abhängig von der Struktur der Download Seite bei eq3. Wenn sich die ändert, muss auch der Check angepasst werden. Das könnte nun der Fall sein (ohne das jetzt geprüft zu haben).
Bei mir zeigt er noch Geräte an...
Grad getestet...
Aber nur welche für die es aktuellere FWs gibt...
Das genügt mir...
Gruß, Joachim
@slor
Du solltest mal Dein Devicenamen anpassen.
Dein HTTPMOD Device heist HM_Firmwarecheck. Du gibst aber über all an des er Readings und Co aus dem Device eq3 lesen soll.
sub eq3StateFormat() {
my $name = "eq3";
userReadings newFwForDevices:MATCHED_READINGS:.* {
my $ret = "";
my @data;
my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/Firmware\/(.*?)_update_V([\d_]+)_(\d\d)(\d\d)(\d\d)/;
das war es.
in eq3 umbenannt und es läuft wieder. Danke!
Hallo zusammen, darf ich diesen Beitrag mal aus der Versenkung holen ?
Ich habe genau das gleiche Problem, allerdings heißt mein HTTPMOD "eq3"
Und ich bin mir sicher das min. 1 Gerät "HM-SEN-MDIR-WM55" ein Firmwareupdate benötigt. Wurde auch bis vor kurzem angezeigt. Firmware alt = 1.1 / Firmware neu = 1.2
Ich habe insgesamt 4 von den "HM-SEN-MDIR-WM55", 3 hatte ich bereits mit Firmwareupdates versehen, den 4ten wollte ich irgendwann nachholen.
get hm param -d D-firmware:
OG.Bewegungsmelder.Diele.1 : 1.2
OG.Bewegungsmelder.Diele.2 : 1.2
OG.Bewegungsmelder.Diele.3 : 1.2
OG.Bewegungsmelder.Treppe.1 : 1.1
hier mal ein paar listings.....
list OG.Bewegungsmelder.Treppe.1:
Internals:
DEF 4A1DDC
FUUID 5c5ecff4-f33f-c561-e609-d9c456f049db9601
HM_LAN_TCP_MSGCNT 18
HM_LAN_TCP_RAWMSG 050000339BA4414A1DDC460586039B9050
HM_LAN_TCP_RSSI -51
HM_LAN_TCP_TIME 2019-09-02 17:36:13
IODev HM_LAN_TCP
LASTInputDev HM_LAN_TCP
MSGCNT 18
NAME OG.Bewegungsmelder.Treppe.1
NOTIFYDEV global
NR 210
NTFY_ORDER 50-OG.Bewegungsmelder.Treppe.1
STATE CMDs_pending
TYPE CUL_HM
channel_01 OG.Bewegungsmelder.Treppe.1_Btn_01
channel_02 OG.Bewegungsmelder.Treppe.1_Btn_02
channel_03 OG.Bewegungsmelder.Treppe.1_Motion
lastMsg No:9B - t:41 s:4A1DDC d:460586 039B9050
protCmdPend 7 CMDs_pending
protLastRcv 2019-09-02 17:36:13
protRcv 18 last_at:2019-09-02 17:36:13
protState CMDs_pending
rssi_at_HM_LAN_TCP cnt:18 min:-56 max:-50 avg:-52.44 lst:-51
READINGS:
2018-10-11 16:25:40 CommandAccepted yes
2018-10-11 16:25:56 D-firmware 1.1
2018-10-11 16:25:56 D-serialNr MEQ1849962
2018-10-11 16:17:19 PairedTo 0x071267
2018-10-11 15:02:02 R-pairCentral 0x071267
2019-09-02 17:36:13 battery ok
2018-10-11 17:13:15 brightness 120
2018-10-11 17:13:15 cover closed
2019-09-02 12:39:34 motion off
2018-10-11 17:13:15 powerOn 2018-10-11 17:13:15
2018-10-11 17:13:15 recentStateType info
2019-09-02 17:35:29 state CMDs_pending
cmdStack:
++A0010712674A1DDC00040000000000
++A0010712674A1DDC01040000000001
++A0010712674A1DDC0103
++A0010712674A1DDC02040000000001
++A0010712674A1DDC0203
++A0010712674A1DDC03040000000001
++A0010712674A1DDC0303
helper:
HM_CMDNR 155
mId 00DB
peerFriend
peerOpt -:motionAndBtn
regLst 0
rxType 28
supp_Pair_Rep 0
ack:
expert:
def 1
det 1
raw 0
tpl 0
io:
newChn +4A1DDC,02,00,00
nextSend 1567438573.33525
rxt 2
vccu VCCU
p:
4A1DDC
00
00
00
prefIO:
HM_LAN_TCP
mRssi:
mNo 9B
io:
HM_LAN_TCP:
-45
-45
prt:
bErr 0
sProc 2
sleeping 1
q:
qReqConf
qReqStat
role:
dev 1
rssi:
at_HM_LAN_TCP:
avg -52.4444444444444
cnt 18
lst -51
max -50
min -56
tmpl:
Attributes:
DbLogExclude .*
IODev HM_LAN_TCP
IOgrp VCCU:HM_LAN_TCP
autoReadReg 4_reqStatus
expert 1_allReg
firmware 1.1
group Bewegungsmelder
icon hm-sen-mdir-wm55
model HM-SEN-MDIR-WM55
room Extras
serialNr MEQ1849962
subType motionAndBtn
webCmd getConfig:clear msgEvents
list eq3:
Internals:
BUSY 0
DEF http://www.eq-3.de/service/downloads.html 86400
FUUID 5c5ecff2-f33f-c561-6617-3f10011a61e8713b
Interval 86400
LASTSEND 1567439444.45883
MainURL http://www.eq-3.de/service/downloads.html
MaxAgeEnabled 1
ModuleVersion 3.5.9 - 13.2.2019
NAME eq3
NOTIFYDEV global
NR 36
NTFY_ORDER 50-eq3
STATE <div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => 2019-09-02 17:50:44<br><br><pre>| device | model | old_fw | new_fw | release |
------------------------------------------------------------------------------------
| no fw-updates needed! |</pre></div>
TRIGGERTIME 1567525812.1355
TRIGGERTIME_FMT 2019-09-03 17:50:12
TYPE HTTPMOD
addr https://www.eq-3.de:443
auth 0
code 500
compress 1
conn
data suchtext=&suche_in=2&downloadart=11
displayurl https://www.eq-3.de/service/downloads.html
header
host www.eq-3.de
httpheader HTTP/1.1 500 Internal Server Error
Date: Mon, 02 Sep 2019 15:50:44 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9
Cache-Control: private, must-revalidate
x-powered-by: PHP/7.1.15
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer-when-downgrade, strict-origin-when-cross-origin
pragma: no-cache
expires: -1
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Set-Cookie: PHPSESSID=lf623isplhsemst4t52v51vkbo; path=/; HttpOnly
Strict-Transport-Security: max-age=15768000
Connection: close
Content-Type: text/html; charset=UTF-8
httpversion 1.0
hu_blocking 0
hu_filecount 8
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /service/downloads.html
protocol https
redirects 1
timeout 2
url https://www.eq-3.de/service/downloads.html
value 0
QUEUE:
READINGS:
2019-06-29 11:17:24 LAST_ERROR read from https://www.eq-3.de:443 timed out
2019-09-02 17:50:44 LAST_REQUEST update
2019-09-02 17:50:44 MATCHED_READINGS
2019-09-02 17:50:44 UNMATCHED_READINGS fw_link
2019-09-02 17:50:44 newFwForDevices no fw-updates needed!
REQUEST:
data suchtext=&suche_in=2&downloadart=11
header
ignoreredirects 0
retryCount 0
type update
url http://www.eq-3.de/service/downloads.html
value 0
defptr:
readingBase:
readingOutdated:
sslargs:
Attributes:
DbLogExclude .*
enableControlSet 1
event-on-change-reading .*
event-on-update-reading LAST_ERROR,MATCHED_READINGS
icon audio_repeat
reading01AutoNumLen 2
reading01Format http://www.eq-3.de/%s
reading01Name fw_link
reading01RegOpt g
reading01Regex <a.href="(Downloads\/Software\/Firmware\/[^"]+)
readingMaxAge 10
readingMaxAgeReplacementMode delete
requestData.* suchtext=&suche_in=2&downloadart=11
room System
showError 1
showMatched 1
stateFormat {eq3StateFormat}
userReadings newFwForDevices:MATCHED_READINGS:.* {
my $ret = "";
my @data;
my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/Firmware\/(.*?)_update_V([\d_]+)_(\d\d)(\d\d)(\d\d)/;
$data[0] =~ s/_/-/g;
sprintf("%s:%s:%s.%s.%s:%s",$data[0],$data[1],$data[4],$data[3],"20".$data[2],$_);
} ReadingsVal("eq3","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.")";
}
}
}
return ($ret eq "")?"no fw-updates needed!":$ret;
}
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
webCmd reread
sub eq3StateFormat: (in 99_myUtils.pm)
sub eq3StateFormat() {
my $name = "eq3";
my $ret ="";
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");
$ret .= '<div style="text-align:left">';
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;
$ret .= '<br><br>';
$ret .= '<pre>';
$ret .= "| device | model | old_fw | new_fw | release |\n";
$ret .= "------------------------------------------------------------------------------------\n";
my $check = ReadingsVal($name,"newFwForDevices","???");
if($check eq "no fw-updates needed!") {
$ret .= '| '.$check.' |';
} 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 .= '<a href="/fhem?detail='.$dev.'">';
$ret .= sprintf("%-23s",$dev);
$ret .= '</a>';
$ret .= " | ";
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';
$ret .= sprintf("%-23s",$md);
$ret .= '</b>';
$ret .= " | ";
$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 .= sprintf("%6s",$ofw);
$ret .= '</b>';
$ret .= " | ";
$ret .= '<a title="eq3-firmware.tgz" href="'.$link.'">';
$ret .= '<b style="color:red">';
$ret .= sprintf("%6s",$nfw);
$ret .= '</b>';
$ret .= '</a>';
$ret .= " | ";
$ret .= sprintf("%-10s",$date);
$ret .= " |\n";
}
}
$ret .= '</pre>';
$ret .= '</div>';
return $ret;
}
Könnt Ihr evtl. hier einen Fehler finden?
Besten Dank
eq3 hat einiges umgebaut.
ich schau mir das mal an.
probier mal folgende änderungen im httpmod device:
1. url in der DEF ändern:
https://www.eq-3.de/ajax/downloads/downloads_eq3.php
2. folgende 3 attribute ändern:
reading01Format http://www.eq-3.de%s
reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
funktioniert bei mir
Soll ich das ins Wiki übernehmen?
https://wiki.fhem.de/wiki/HomeMatic_Firmware_Update#Basis-Definitionen_f.C3.BCr_Device_eq3
Gruß Otto
Zitat von: Otto123 am 02 September 2019, 22:03:25
funktioniert bei mir
Soll ich das ins Wiki übernehmen?
https://wiki.fhem.de/wiki/HomeMatic_Firmware_Update#Basis-Definitionen_f.C3.BCr_Device_eq3
Gruß Otto
ja, das wäre gut.
das interval könntest du auch gleich auf zb eine woche (604800) verlängern. dann nerven wir eq3 deutlich weniger.
gruss frank
Hab ich gemacht. Ist aber jetzt schon ein bisschen Flickenteppich. Könnte man mal noch etwas polieren :)
Zitat von: frank am 02 September 2019, 20:36:54
probier mal folgende änderungen im httpmod device:
1. url in der DEF ändern:
https://www.eq-3.de/ajax/downloads/downloads_eq3.php
2. folgende 3 attribute ändern:
reading01Format http://www.eq-3.de%s
reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
hab ich gemacht, aber leider nein, funktioniert nicht.
zeig mal ein aktuelles list.
list eq3:
Internals:
BUSY 0
DEF https://www.eq-3.de/ajax/downloads/downloads_eq3.php 86400
FUUID 5c5ecff2-f33f-c561-6617-3f10011a61e8713b
Interval 86400
LASTSEND 1567492138.83758
MainURL https://www.eq-3.de/ajax/downloads/downloads_eq3.php
MaxAgeEnabled 1
ModuleVersion 3.5.9 - 13.2.2019
NAME eq3
NOTIFYDEV global
NR 36
NTFY_ORDER 50-eq3
STATE <div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => 2019-09-03 08:28:59<br><br><pre>| device | model | old_fw | new_fw | release |
-----------------------------------------------------------------------------------
| no fw-updates needed! |</pre></div>
TRIGGERTIME 1567577634.35381
TRIGGERTIME_FMT 2019-09-04 08:13:54
TYPE HTTPMOD
addr https://www.eq-3.de:443
auth 0
code 200
compress 1
conn
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
displayurl https://www.eq-3.de/ajax/downloads/downloads_eq3.php
header
host www.eq-3.de
httpheader HTTP/1.1 200 OK
Date: Tue, 03 Sep 2019 06:28:58 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9
X-Powered-By: PHP/7.1.15
Strict-Transport-Security: max-age=15768000
Connection: close
Content-Type: text/html; charset=UTF-8
httpversion 1.0
hu_blocking 0
hu_filecount 13
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /ajax/downloads/downloads_eq3.php
protocol https
redirects 0
timeout 2
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
QUEUE:
READINGS:
2019-06-29 11:17:24 LAST_ERROR read from https://www.eq-3.de:443 timed out
2019-09-03 08:28:59 LAST_REQUEST update
2019-09-03 08:28:59 MATCHED_READINGS
2019-09-03 08:28:59 UNMATCHED_READINGS fw_link
2019-09-03 08:28:59 newFwForDevices no fw-updates needed!
REQUEST:
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
header
ignoreredirects 0
retryCount 0
type update
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
defptr:
readingBase:
readingOutdated:
sslargs:
Attributes:
DbLogExclude .*
enableControlSet 1
event-on-change-reading .*
event-on-update-reading LAST_ERROR,MATCHED_READINGS
icon audio_repeat
reading01AutoNumLen 2
reading01Format http://www.eq-3.de%s
reading01Name fw_link
reading01RegOpt g
reading01Regex reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
readingMaxAge 10
readingMaxAgeReplacementMode delete
requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
room System
showError 1
showMatched 1
stateFormat {eq3StateFormat}
userReadings newFwForDevices:MATCHED_READINGS:.* {
my $ret = "";
my @data;
my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/Firmware\/(.*?)_update_V([\d_]+)_(\d\d)(\d\d)(\d\d)/;
$data[0] =~ s/_/-/g;
sprintf("%s:%s:%s.%s.%s:%s",$data[0],$data[1],$data[4],$data[3],"20".$data[2],$_);
} ReadingsVal("eq3","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.")";
}
}
}
return ($ret eq "")?"no fw-updates needed!":$ret;
}
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
webCmd reread
Hi,
bei mir funktioniert mit den aktuellen Einstellungen der Abruf ... es werden etliche fw_link Readings angelegt, aber als Ergebnis kommt | device | model | old_fw | new_fw | release |
------------------------------------------------------------------------------------
| no fw-updates needed! |
obwohl es einen HM-TC-WM-W-EU mit Version 1.1 gibt und das Redaing Version 1.3 als aktuell ergibtfw_link-13
http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz
2019-09-03 11:45:00
Gruss Nobby, der gerade einiges neu in Fhem einbaut ;)
Ich kann auch bestätigen, dass das Abrufen der Daten von EQ3 funtioniert mit den aktuellen Änderungen.
Bestünde die Möglichkeit generell alle Homematikkomponenten mit der dazugehörigen aktuellen Version und der neusten Version anzuzeigen.
Evtl. farblich gekennzeichnet wenn Version die neuste ist grün, wenn älter dann rot.
[[[EDIT]]]
Im Wiki fehlt noch die Änderung in der MyUtils99 vom Link nach http://www.eq-3.de/service/downloads.html
Gruß Knallkopp_02
mit "get hm param -d D-firmware" kann ich mir alle Homematic Geräte inkl. Firmware Version anzeigen lassen
param done:
param list
entity : D-firmware |
Brightness_Sensor : 1.1
EG.Heizung.Diele : 1.4
EG.Heizung.Esszimmer : 1.4
EG.Heizung.WC : 1.4
EG.Heizung.Wohnzimmer_1 : 1.4
EG.Heizung.Wohnzimmer_2 : 1.4
EG.Rollo.Buero.Fenster : 2.11
EG.Rollo.Diele_1.Fenster : 2.11
EG.Rollo.Diele_2.Fenster : 2.11
EG.Rollo.Esszimmer.Fenster : 2.11
EG.Rollo.Esszimmer.Tuer : 2.11
EG.Rollo.G_WC.Fenster : 2.11
EG.Rollo.Wohnzimmer.Fenster : 2.11
EG.Rollo.Wohnzimmer.Terrassenfenster : 2.11
EG.Rollo.Wohnzimmer.Terrassentuer : 2.11
Garagentor : 2.5
HM_MOD_Em_8 : 1.1
HM_Messsteckdose_1 : 2.5
HM_Messsteckdose_2 : 2.5
HM_Schaltsteckdose_1 : 2.6
HM_Schaltsteckdose_2 : 2.6
HM_Schaltsteckdose_3 : 2.6
HM_Schaltsteckdose_4 : 2.6
HM_Schaltsteckdose_5 : 2.6
KG.FensterKontakt.Waschkeller : 2.4
KG.Heizung.Waschkeller : 1.4
OG.Bewegungsmelder.Diele.1 : 1.2
OG.Bewegungsmelder.Diele.2 : 1.2
OG.Bewegungsmelder.Diele.3 : 1.2
OG.Bewegungsmelder.Treppe.1 : 1.1
OG.Dimmer.Buero : 2.9
OG.Dimmer.Diele : 2.9
OG.Dimmer.Henna : 2.9
OG.Dimmer.Kinderbad : 2.9
OG.Dimmer.Schlafzimmer : 2.9
OG.Dimmer.Shirin : 2.9
OG.Dimmer.Treppe : 2.9
OG.FensterKontakt.Diele : 2.4
OG.FensterKontakt.Henna : 2.4
OG.FensterKontakt.Kinderbad : 2.4
OG.FensterKontakt.Schlafzimmer : 2.4
OG.FensterKontakt.Shirin : 2.4
OG.Heizung.Buero : 1.4
OG.Heizung.Diele : 1.4
OG.Heizung.Henna : 1.4
OG.Heizung.Kinderbad : 1.4
OG.Heizung.Schlafzimmer : 1.4
OG.Heizung.Shirin : 1.4
OG.RemoteDimmer.Diele.1 : 1.0
OG.RemoteDimmer.Diele.2 : 1.0
OG.RemoteDimmer.Diele.3 : 1.1
OG.RemoteDimmer.Schlafzimmer.1 : 1.0
OG.RemoteDimmer.Schlafzimmer.2 : 1.0
OG.RemoteDimmer.Treppe.1 : 1.0
OG.Rollo.Buero.Tuer : 2.11
OG.Rollo.Diele.Fenster : 2.11
OG.Rollo.Elternbad.Fenster.Links : 2.11
OG.Rollo.Elternbad.Fenster.Rechts : 2.11
OG.Rollo.Henna.Fenster : 2.11
OG.Rollo.Kinderbad.Fenster : 2.11
OG.Rollo.Schlafzimmer.Fenster : 2.11
OG.Rollo.Schlafzimmer.Tuer : 2.11
OG.Rollo.Shirin.Fenster : 2.11
OG.Rollo.Treppe.Fenster : 2.11
OG.TuerKontakt.Buero : 2.4
ZirkulationsPumpe : 2.8
bei den Bewegungsmeldern ist wohl die Version 1.2 die neuste
OG.Bewegungsmelder.Diele.1 : 1.2
OG.Bewegungsmelder.Diele.2 : 1.2
OG.Bewegungsmelder.Diele.3 : 1.2
OG.Bewegungsmelder.Treppe.1 : 1.1
Im userReadings muss noch der Suchstring geändert werden!?
m/firmware\/(.*?)_update_v([\d_]+)_(\d\d)(\d\d)(\d\d)/;
Damit findet er bei mir wieder die notwendige Firmware.
In der eq3stateformat in 99_myUtils habe ich jetzt
https://www.eq-3.de/service/downloads.html
als allgemeinen download link eingetragen.
Wiki aktualisiert. https://wiki.fhem.de/wiki/HomeMatic_Firmware_Update
Gruß Otto
Nö, bei mir nicht ... aber die Ferhlermeldungen im Log sind jetzt weg
leider nein, keine Anzeige
ich kanns aktuell nicht testen, da alles aktuell ist, so wie es aussieht,
kann man irgendwie generell alle HM Komponenten mit Aktueller und zur Verfügung stehender FW anzeigen lassen, irgendwas einfaches im UserReading ändern?
Gruß
Zitat von: ms_steini am 03 September 2019, 12:35:34
leider nein, keine Anzeige
Zitat von: Nobby1805 am 03 September 2019, 12:32:38
Nö, bei mir nicht ... aber die Ferhlermeldungen im Log sind jetzt weg
Funktioniert bei mir. Ich habe einfach bei zwei Geräten das Firmware attribute verändert.
Zitatlast homematic-fw-check => 2019-09-03 12:35:54
| device | model | old_fw | new_fw | release |
------------------------------------------------------------------------------------
| PSD3 | HM-ES-PMSW1-PL | 2.1 | 2.5.9 | 17.02.2015 |
| SensorR1 | HM-TC-IT-WM-W-EU | 1.1 | 1.3.2 | 27.08.2015 |
reread
Habt ihr das userReadings so wie im Wiki geändert?
Also von der Sache her mussten da zur alten Version nur zwei Buchstaben von Groß auf klein geändert werden
ok
habe jetzt die von Dir nachgeschobene Änderung in 99_myUtils gemacht und das UserReadings noch einmal komplett aus dem Wiki übernommen ... jetzt ist alles OK
Zitat von: Nobby1805 am 03 September 2019, 12:52:58
ok
habe jetzt die von Dir nachgeschobene Änderung in 99_myUtils gemacht und das UserReadings noch einmal komplett aus dem Wiki übernommen ... jetzt ist alles OK
Schön :)
99_myUtils war aber eigentlich mehr Kosmetik :) ich bin da noch nicht sicher wegen dem Link.
Zitat von: Otto123 am 03 September 2019, 12:37:49
Funktioniert bei mir. Ich habe einfach bei zwei Geräten das Firmware attribute verändert.Habt ihr das userReadings so wie im Wiki geändert?
Also von der Sache her mussten da zur alten Version nur zwei Buchstaben von Groß auf klein geändert werden
ja, userReadings geändert, firmware attribute von 2.11 auf 1.11 geändert, ohne erfolg, es wird nichts angezeigt!
naja in deinem list / Device muss was nicht stimmen. Da gibt es schon keine matched readings und keine firmware links. Die hätte es nach der Änderung von Frank gestern geben müssen. Ich sehe es leider (noch) nicht.
Zitat von: ms_steini am 03 September 2019, 08:55:12
reading01Regex reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
Das kann so nicht funktionieren!
Gruß
Dan
au man >:(
ich hab eq3 mal gelöscht und neu angelegt. jetzt gehts auch. hab vor lauter Bäume den Wald nicht mehr gesehen
| device | model | old_fw | new_fw | release |
------------------------------------------------------------------------------------
| EG.Rollo.Buero.Fenster | HM-LC-BL1PBU-FM | 1.11 | 2.11.1 | 12.12.2016 |
| EG.Rollo.Buero.Fenster | HM-LC-BL1PBU-FM | 1.11 | 2.3.2 | 04.12.2013 |
| OG.Bewegungsmelder.Treppe.1 | HM-SEN-MDIR-WM55 | 1.1 | 1.2 | 25.08.2016 |
Super, Dank Euch
Irgendetwas passt da immer noch nicht ganz ... liefert eq-3 da im php inkonsistente Informationen?
HM_4D106F | HM-ES-TX-WM | 1.0 | 1.2 | 28.06.2016
Aktuell ist aber 2.2 von heute ;) oder laut Changelog vom 19.6.19Funk-Sender für Energiezähler-Sensor Firmware 2.2
Kurz-Bez.: HM-ES-TX-WM
Downloads-Art: Firmware
Artikel-Nr.: 140143
Changelog
03.09.2019
61,65 KB
Der File heisst im downloadlink
2019-09-03 12:42:37 fw_link-06 http://www.eq-3.de/downloads/software/firmware/hm-es-tx-wm_update_v1_2_160628.tgz
Daraus macht das Tool nach allen regeln der Kunst 1.2
Sie bieten im Service Bereich beide an. Und die 2.2 von Heute, vielleicht müssen wir warten bis sie von a nach b kommt? Vielleicht hat Frank dazu ne Idee - ich weiß nicht ganz wie er in den neuen Bereich gekommen ist :)
Sag ich ja ... Problem bei eq-3 ;)https://www.eq-3.de/downloads/software/firmware/HM-ES-TX-WM_update_V2_2_190619_1.tgz
Das heisst auch, wir sollten https verwenden:reading01Format https://www.eq-3.de%s
;)
1. fehlende readings
httpmod meldet jetzt bei dir schon mal "HTTP/1.1 200 OK". allerdings werden keine fw_link-readings generiert. aktuell müssten 19 solcher readings kommen. gestern abend gab es noch 20.
eventuell hattest du heute morgen pech, da gerade wieder am server gearbeitet wurde.
versuche mal ein "set eq3 reread" und schaue, ob die readings nun kommen.
wenn nicht, probiere erneut ein reread mit zusätzlichem attribut httpVersion, das bei mir gesetzt ist:
attr eq3 httpVersion 1.1
2. fw prüfung
damit die prüfung auf neue fw funktioniert, muss nun auch das attribut userreadings geändert werden. :
newFwForDevices:MATCHED_READINGS.* {
my $ret = "";
my @data;
my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_v([\d_]+)_(\d\d)(\d\d)(\d\d)/;
$data[0] =~ s/_/-/g;
sprintf("%s:%s:%s.%s.%s:%s",$data[0],$data[1],$data[4],$data[3],"20".$data[2],$_);
} ReadingsVal("eq3","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.")";
}
}
}
return ($ret eq "")?"no fw-updates needed!":$ret;
}
da das userreading nun auch einen fehler meldet, falls der eq3-server keine oder falsche daten liefert, muss zusätzlich auch das attrttribut stateformat geändert werden. wer mit einer sub funktion in der 99_myUtils arbeitet, muss natürlich dort die sub ändern:
{
my $ret ="";
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");
$ret .= '<div style="text-align:left">';
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;
$ret .= '<br><br>';
$ret .= '<pre>';
$ret .= "| device | model | cur_fw | new_fw | release |<br>";
$ret .= "------------------------------------------------------------------------------------<br>";
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");
if($check eq "no fw-updates needed!") {
$ret .= '| ';
$ret .= '<b style="color:green">';
$ret .= sprintf("%-80s",$check);
$ret .= '</b>';
$ret .= ' |';
} elsif($check eq "error => no or wrong data from eq3-server!") {
$ret .= '| ';
$ret .= '<b style="color:red">';
$ret .= sprintf("%-80s",$check);
$ret .= '</b>';
$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 .= '<a href="/fhem?detail='.$dev.'">';
$ret .= sprintf("%-23s",$dev);
$ret .= '</a>';
$ret .= " | ";
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';
$ret .= sprintf("%-23s",$md);
$ret .= '</b>';
$ret .= " | ";
$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 .= sprintf("%6s",$ofw);
$ret .= '</b>';
$ret .= " | ";
$ret .= '<a title="eq3-firmware.tgz" href="'.$link.'">';
$ret .= '<b style="color:red">';
$ret .= sprintf("%6s",$nfw);
$ret .= '</b>';
$ret .= '</a>';
$ret .= " | ";
$ret .= sprintf("%-10s",$date);
$ret .= " |<br>";
}
}
$ret .= '</pre>';
$ret .= '</div>';
return $ret;
}
edit: na hier war ja was los. ihr habt ja fast schon alles gefunden.
mit dieser regex kommt auch die nagelneue fw 2.2 für den tx. somit sind es aktuell wieder 20 fw-files bei mir.
<a.href="(\/downloads\/software\/firmware\/[hH][mM][^"]+)
ich habe gerade gesehen, dass das userreading noch mal geändert werden muss, da eq3 bei der neuen firmware das "v" im link nun auch wieder gross schreibt. was ist da bei denen bloss los.
newFwForDevices:MATCHED_READINGS.* {
my $ret = "";
my @data;
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {
my @eq3FwList = map{@data = ReadingsVal($name,"fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_[vV]([\d_]+)_(\d\d)(\d\d)(\d\d)/;
$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;
}
zu diesem userreading braucht man auch noch das stateformat aus meinem vorherigen post, damit die neue fehlermeldung angezeigt werden kann.
"Gegenvorschlag":
m/Firmware\/(.*?)_update_V([\d_]+)_(\d\d)(\d\d)(\d\d)/i;
Zitati
Do case-insensitive pattern matching. For example, "A" will match "a" under /i .
Da könnten sie in Zukunft Update groß schreiben :)
mit "i" klappt es bei mir gerade nicht. ich hätte eigentlich 5 neue fw. nun nichts mehr.
warum funktioniert bei dir eigentlich das gross geschriebene "Firmware" am anfang der regex?
ausserdem habe ich noch im neuen fw link, hinter dem datum, ein "_1" gesehen. was ist das nun wieder?
jemand mit tx device und alter fw müsste das mal testen. also nobby?
Zitat von: frank am 03 September 2019, 15:26:04
warum funktioniert bei dir eigentlich das gross geschriebene "Firmware" am anfang der regex?
Sorry für die Verwirrung, ich wollte dokumentieren mit /i brauchen wir nichts weiter im "Original" ändern.
Das klappt bei mir nur wenn ich /i anfüge. mmmh warum geht das bei Dir nicht? Ich hatte vorhin auch mal den Zustand auf einem anderen System, aber gerade nochmal getestet, das funktioniert.
sorry, "i" funktioniert nun doch. ich hatte aus versehen, das "v" ganz rausgeschmissen. :)
"i" funktioniert so gut, dass ich die regex auch gleich noch geändert habe.
reading01RegOpt gi
reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
jetzt müssen sie sich aber schon anstrengen, um uns zu ärgern. 8)
Zitat von: frank am 03 September 2019, 15:26:04
jemand mit tx device und alter fw müsste das mal testen. also nobby?
Ich musste noch eine weitere Änderung machen 8)
Entweder kam nur die Neue Version vom TX und sonst nichts oder es kamen alle, bis auf die V2.2. des TX ;D
Im Userreading habe ich jetzt [vV] eingebaut, dann klappt es ... wieso funktioniert die i-Option nicht innerhalb des Userreadings?
| HM_4D106F | HM-ES-TX-WM | 1.0 | 2.2 | 19.06.2019 |
| HM_4D106F | HM-ES-TX-WM | 1.0 | 1.2 | 28.06.2016 |
| Innen | HM-TC-IT-WM-W-EU | 1.1 | 1.3.2 | 27.08.2015 |
| Innen2 | HM-TC-IT-WM-W-EU | 1.2 | 1.3.2 | 27.08.2015 |
| Innen3 | HM-TC-IT-WM-W-EU | 1.2 | 1.3.2 | 27.08.2015 |
| Innen4 | HM-TC-IT-WM-W-EU | 1.1 | 1.3.2 | 27.08.2015 |
| Innen5 | HM-TC-IT-WM-W-EU | 1.2 | 1.3.2
nur zur Info,
Ihr dürft keine SVG mit gleichem Namen wie der HTTPMOD haben, dann gib's ne ganz schlimme Anzeige!
Zitat von: frank am 03 September 2019, 15:26:04
ausserdem habe ich noch im neuen fw link, hinter dem datum, ein "_1" gesehen. was ist das nun wieder?
jemand mit tx device und alter fw müsste das mal testen. also nobby?
Aber im Tester funktioniert das einwandfrei:
https://regex101.com/r/9qZxph/1
Und bei mir auch bei allen Geräten wo ich testen kann.
Im Übrigen zum Testen von eq3 HTTPMOD, quasi jedes beliebige HM Gerät:)
define HM_test CUL_HM AAFFEE
attr HM_test firmware 1.0
attr HM_test modelForce HM-ES-TX-WM
attr HM_test room CUL_HM
Tja, ich habe mich auch gewundert ... er zeigte entweder 6 (mit kleinem v) oder 1 (mit großen V) Updates an ... erst mit [vV] waren es dann 7
Zitat von: ms_steini am 03 September 2019, 17:05:53
nur zur Info,
Ihr dürft keine SVG mit gleichem Namen wie der HTTPMOD haben, dann gib's ne ganz schlimme Anzeige!
Kannst Du da noch etwas ausholen? Wo gibt es ne schlimme Anzeige?
Zitat von: Nobby1805 am 03 September 2019, 17:20:34
Tja, ich habe mich auch gewundert ... er zeigte entweder 6 (mit kleinem v) oder 1 (mit großen V) Updates an ... erst mit [vV] waren es dann 7
mit /i
| HM_30D124 | HM-LC-BL1PBU-FM | 2.8 | 2.11.1 | 12.12.2016 |
| HM_test | HM-ES-TX-WM | 1.0 | 2.2 | 19.06.2019 |
| HM_test | HM-ES-TX-WM | 1.0 | 1.2 | 28.06.2016 |
Kannst Du das nochmal als list zeigen? Wegen beschlagener Monitorscheiben oder so :)
Mei, hier ist echt was los... Jetzt wollte ich das jedenfalls auch mal wissen (nachdem ich eigentlich angenommen hatte, dass sowieso alles aktuell ist, war ich überrascht, dass v.a. meine ganzen Rollladenaktoren NICHT auf der 2.11.1 zu sein scheinen ??? ...)
Wie dem auch sei, mit folgendem RAW-Code (ohne myUtils-Code) bekomme ich eine Ausgabe und hoffe, allen input einigermaßen (evtl. bis auf das vV-Thema, das eigentlich mit dem "i" erledigt sein sollte) verarbeitet zu haben:
defmod eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
attr eq3 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 eq3 enableControlSet 1
attr eq3 event-on-change-reading .*
attr eq3 event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr eq3 httpVersion 1.1
attr eq3 reading01AutoNumLen 2
attr eq3 reading01Format http://www.eq-3.de%s
attr eq3 reading01Name fw_link
attr eq3 reading01RegOpt gi
attr eq3 reading01Regex <a.href="(\/downloads\/software\/firmware\/[hH][mM][^"]+)
attr eq3 readingMaxAge 10
attr eq3 readingMaxAgeReplacementMode delete
attr eq3 requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
attr eq3 room Steuerung->Z_CUL_HM_intern
attr eq3 showError 1
attr eq3 showMatched 1
attr eq3 stateFormat { my $ret ="";; \
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","");; \
$ret .= '<div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;; \
$ret .= '<br><br><pre>';; \
$ret .= "| device | model | cur_fw | new_fw | release |<br>";; \
$ret .= "------------------------------------------------------------------------------------<br>";; \
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");; \
if($check eq "no fw-updates needed!") {\
$ret .= '| ';;\
$ret .= '<b style="color:green">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b>';;\
$ret .= ' |';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b> |';;\
} 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 .= '| <a href="/fhem?detail='.$dev.'">';; \
$ret .= sprintf("%-23s",$dev);; \
$ret .= '</a> | <b';; \
$ret .= (($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';; \
$ret .= sprintf("%-23s",$md);; \
$ret .= '</b> | <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 .= sprintf("%6s",$ofw);; \
$ret .= '</b> | <a title="eq3-firmware.tgz" href="'.$link.'"><b style="color:red">';; \
$ret .= sprintf("%6s",$nfw);; \
$ret .= '</b></a> | ';; \
$ret .= sprintf("%-10s",$date);; \
$ret .= " |<br>";; \
} \
} \
$ret .= '</pre></div>';; \
return $ret;;\
}
attr eq3 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_[vV]([\d_]+)_(\d\d)(\d\d)(\d\d)/;;\
$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 eq3 webCmd reread
Kleine Anmerkung von meiner Seite (weniger an die betroffenen User..)
Zitat von: slor am 27 Oktober 2017, 16:40:55
das war es.
in eq3 umbenannt und es läuft wieder. Danke!
"Wenn man schon" myUtils-Code verwendet, warum dann nicht den Namen des aufrufenden Devices übergeben? Dann erübrigen sich solche Probleme, bevor sie entstanden sind...
Könnte dann so aussehen (könnte man noch aufhübschen):
defmod HM_firmwarecheck HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
attr HM_firmwarecheck 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 HM_firmwarecheck enableControlSet 1
attr HM_firmwarecheck event-on-change-reading .*
attr HM_firmwarecheck event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr HM_firmwarecheck httpVersion 1.1
attr HM_firmwarecheck reading01AutoNumLen 2
attr HM_firmwarecheck reading01Format http://www.eq-3.de%s
attr HM_firmwarecheck reading01Name fw_link
attr HM_firmwarecheck reading01RegOpt gi
attr HM_firmwarecheck reading01Regex <a.href="(\/downloads\/software\/firmware\/[hH][mM][^"]+)
attr HM_firmwarecheck readingMaxAge 10
attr HM_firmwarecheck readingMaxAgeReplacementMode delete
attr HM_firmwarecheck requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
attr HM_firmwarecheck room Steuerung->Z_CUL_HM_intern
attr HM_firmwarecheck showError 1
attr HM_firmwarecheck showMatched 1
attr HM_firmwarecheck stateFormat {hm_firmware_update_httpmod_stateFormat($name)}
attr HM_firmwarecheck userReadings newFwForDevices:MATCHED_READINGS.* {hm_firmware_update_httpmod_newFwForDevices($name)}
attr HM_firmwarecheck webCmd reread
sub hm_firmware_update_httpmod_stateFormat ($) {
my $name = shift @_;
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","");
my $ret .= '<div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;
$ret .= '<br><br><pre>';
$ret .= "| device | model | cur_fw | new_fw | release |<br>";
$ret .= "------------------------------------------------------------------------------------<br>";
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");
if($check eq "no fw-updates needed!") {
$ret .= '| ';
$ret .= '<b style="color:green">';
$ret .= sprintf("%-80s",$check);
$ret .= '</b> |';
} elsif($check eq "error => no or wrong data from eq3-server!") {
$ret .= '| <b style="color:red">';
$ret .= sprintf("%-80s",$check);
$ret .= '</b> |';
} 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 .= '| <a href="/fhem?detail='.$dev.'">';
$ret .= sprintf("%-23s",$dev);
$ret .= '</a> | <b';
$ret .= (($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';
$ret .= sprintf("%-23s",$md);
$ret .= '</b> | <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 .= sprintf("%6s",$ofw);
$ret .= '</b> | <a title="eq3-firmware.tgz" href="'.$link.'"><b style="color:red">';
$ret .= sprintf("%6s",$nfw);
$ret .= '</b></a> | ';
$ret .= sprintf("%-10s",$date);
$ret .= " |<br>";
}
}
$ret .= '</pre></div>';
return $ret;
}
sub hm_firmware_update_httpmod_newFwForDevices ($) {
my $name = shift @_;
my $ret = "";
my @data;
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {
my @eq3FwList = map{@data = ReadingsVal($name,"fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_[vV]([\d_]+)_(\d\d)(\d\d)(\d\d)/;
$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;
}
Ich könnte den HTTPMOD ohne externes Coding in die attrTemplate-File zu HTTPMOD aufnehmen. Macht das aus eurer Sicht Sinn (dann könnte man Tippfelher minimieren und ggf. updates einfacher ausliefern...)?
Aber finden wird das sowieso nur der, der nach sowas sucht, nehme ich an (oder die file einfach interessehalber mal durchflözt).
Zitat von: Otto123 am 03 September 2019, 17:26:10
Kannst Du da noch etwas ausholen? Wo gibt es ne schlimme Anzeige?
Und was hast Du da für ein svg? Ich versuche es zu verstehen :o
das SVG heißt "eq3.svg" UND eq3 heißt der HTTPMOD.
Wenn ich das eq3.svg in eq_3.svg rename habe ich eine normale Anzeige
oder ich rename den HTTMOD in einen anderen namen, das geht auch, dürfen nur nicht gleich sein.
Kannst du ja mal testen, rename mal ein svg file in den gleiche namen wie dein HTTPMOD, dann solltest du es sehen
P.S. shutdown restart erforderlich
Zitat von: Otto123 am 03 September 2019, 17:33:05
mit /i
| HM_30D124 | HM-LC-BL1PBU-FM | 2.8 | 2.11.1 | 12.12.2016 |
| HM_test | HM-ES-TX-WM | 1.0 | 2.2 | 19.06.2019 |
| HM_test | HM-ES-TX-WM | 1.0 | 1.2 | 28.06.2016 |
Kannst Du das nochmal als list zeigen? Wegen beschlagener Monitorscheiben oder so :)
Du meinst ein list von eq3? Bitte sehr
Internals:
BUSY 0
DEF https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
FUUID 5d6e28a3-f33f-092f-d33a-bf75520d17d0bad3
Interval 604800
LASTSEND 1567523086.87303
MainURL https://www.eq-3.de/ajax/downloads/downloads_eq3.php
MaxAgeEnabled 1
ModuleVersion 3.5.9 - 13.2.2019
NAME eq3
NOTIFYDEV global
NR 482
NTFY_ORDER 50-eq3
STATE <div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => 2019-09-03 17:04:47<br><br><pre>| device | model | old_fw | new_fw | release |<br>------------------------------------------------------------------------------------<br>| <a href="/fhem?detail=HM_4D106F">HM_4D106F </a> | <b style="color:lightgray">HM-ES-TX-WM </b> | <b style="color:lightgray"> 1.0</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/HM-ES-TX-WM_update_V2_2_190619_1.tgz"><b style="color:red"> 2.2</b></a> | 19.06.2019 |<br>| <a href="/fhem?detail=HM_4D106F">HM_4D106F </a> | <b style="color:lightgray">HM-ES-TX-WM </b> | <b style="color:lightgray"> 1.0</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm-es-tx-wm_update_v1_2_160628.tgz"><b style="color:red"> 1.2</b></a> | 28.06.2016 |<br>| <a href="/fhem?detail=Innen">Innen </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.1</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br>| <a href="/fhem?detail=Innen2">Innen2 </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.2</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br>| <a href="/fhem?detail=Innen3">Innen3 </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.2</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br>| <a href="/fhem?detail=Innen4">Innen4 </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.1</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br>| <a href="/fhem?detail=Innen5">Innen5 </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.2</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br></pre></div>
TRIGGERTIME 1568112371.91473
TRIGGERTIME_FMT 2019-09-10 12:46:11
TYPE HTTPMOD
addr https://www.eq-3.de:443
auth 0
code 200
compress 1
conn
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
displayurl https://www.eq-3.de/ajax/downloads/downloads_eq3.php
header
host www.eq-3.de
httpheader HTTP/1.1 200 OK
Date: Tue, 03 Sep 2019 15:04:47 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9
X-Powered-By: PHP/7.1.15
Strict-Transport-Security: max-age=15768000
Connection: close
Content-Type: text/html; charset=UTF-8
httpversion 1.0
hu_blocking 0
hu_filecount 14
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /ajax/downloads/downloads_eq3.php
protocol https
redirects 0
timeout 2
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
QUEUE:
READINGS:
2019-09-03 17:04:47 LAST_REQUEST update
2019-09-03 17:04:47 MATCHED_READINGS fw_link-01 fw_link-02 fw_link-03 fw_link-04 fw_link-05 fw_link-06 fw_link-07 fw_link-08 fw_link-09 fw_link-10 fw_link-11 fw_link-12 fw_link-13 fw_link-14 fw_link-15 fw_link-16 fw_link-17 fw_link-18 fw_link-19 fw_link-20
2019-09-03 17:04:47 UNMATCHED_READINGS
2019-09-03 17:04:47 fw_link-01 http://www.eq-3.de/downloads/software/firmware/HM-ES-TX-WM_update_V2_2_190619_1.tgz
2019-09-03 17:04:47 fw_link-02 http://www.eq-3.de/downloads/software/firmware/hm-mod-re-8_update_v1_2_150911.tgz
2019-09-03 17:04:47 fw_link-03 http://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_11_1_161212.tgz
2019-09-03 17:04:47 fw_link-04 http://www.eq-3.de/downloads/software/firmware/hm_dis_ep_wm55_update_v1_2_170129.tgz
2019-09-03 17:04:47 fw_link-05 http://www.eq-3.de/downloads/software/firmware/hm-es-pmsw1-pl-dn-r1_update_v2_5_0009_150217.tgz
2019-09-03 17:04:47 fw_link-06 http://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_2_0_160825.tgz
2019-09-03 17:04:47 fw_link-07 http://www.eq-3.de/downloads/software/firmware/hm-es-tx-wm_update_v1_2_160628.tgz
2019-09-03 17:04:47 fw_link-08 http://www.eq-3.de/downloads/software/firmware/hm-ou-cfm-tw_update_v1_3_160620.tgz
2019-09-03 17:04:47 fw_link-09 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1pwm-cv_update_v2_9_0005_150730.tar.gz
2019-09-03 17:04:47 fw_link-10 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1tpbu-fm_update_v2_9_0005_150730.tar.gz
2019-09-03 17:04:47 fw_link-11 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1l-pl-3_update_v2_9_0007_150803.tar.gz
2019-09-03 17:04:47 fw_link-12 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1t-pl-3_update_v2_9_0005_150730.tar.gz
2019-09-03 17:04:47 fw_link-13 http://www.eq-3.de/downloads/software/firmware/hm-mod-re-8_update_v1_2_150911.tgz
2019-09-03 17:04:47 fw_link-14 http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz
2019-09-03 17:04:47 fw_link-15 http://www.eq-3.de/downloads/software/firmware/hm-lc-sw1pbu-fm_update_v2_8_2_150713.tgz
2019-09-03 17:04:47 fw_link-16 http://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_1_2_150413.tgz
2019-09-03 17:04:47 fw_link-17 http://www.eq-3.de/downloads/software/firmware/hm-es-pmsw1-pl_update_v2_5_0009_150217.tgz
2019-09-03 17:04:47 fw_link-18 http://www.eq-3.de/downloads/software/firmware/hm_cc_rt_dn_update_v1_4_001_141020.tgz
2019-09-03 17:04:47 fw_link-19 http://www.eq-3.de/downloads/software/firmware/hm-sen-rd-o_update_v1_4_003_130930.tgz
2019-09-03 17:04:47 fw_link-20 http://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_3_0002_131204.tgz
2019-09-03 17:04:47 newFwForDevices HM_4D106F (HM-ES-TX-WM | fw_1.0 => fw01_2.2 | 19.06.2019),HM_4D106F (HM-ES-TX-WM | fw_1.0 => fw07_1.2 | 28.06.2016),Innen (HM-TC-IT-WM-W-EU | fw_1.1 => fw14_1.3.2 | 27.08.2015),Innen2 (HM-TC-IT-WM-W-EU | fw_1.2 => fw14_1.3.2 | 27.08.2015),Innen3 (HM-TC-IT-WM-W-EU | fw_1.2 => fw14_1.3.2 | 27.08.2015),Innen4 (HM-TC-IT-WM-W-EU | fw_1.1 => fw14_1.3.2 | 27.08.2015),Innen5 (HM-TC-IT-WM-W-EU | fw_1.2 => fw14_1.3.2 | 27.08.2015)
REQUEST:
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
header
ignoreredirects 0
retryCount 0
type update
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
defptr:
readingBase:
fw_link-01 reading
fw_link-02 reading
fw_link-03 reading
fw_link-04 reading
fw_link-05 reading
fw_link-06 reading
fw_link-07 reading
fw_link-08 reading
fw_link-09 reading
fw_link-10 reading
fw_link-11 reading
fw_link-12 reading
fw_link-13 reading
fw_link-14 reading
fw_link-15 reading
fw_link-16 reading
fw_link-17 reading
fw_link-18 reading
fw_link-19 reading
fw_link-20 reading
readingNum:
fw_link-01 01
fw_link-02 01
fw_link-03 01
fw_link-04 01
fw_link-05 01
fw_link-06 01
fw_link-07 01
fw_link-08 01
fw_link-09 01
fw_link-10 01
fw_link-11 01
fw_link-12 01
fw_link-13 01
fw_link-14 01
fw_link-15 01
fw_link-16 01
fw_link-17 01
fw_link-18 01
fw_link-19 01
fw_link-20 01
readingOutdated:
readingSubNum:
fw_link-01 -1
fw_link-02 -2
fw_link-03 -3
fw_link-04 -4
fw_link-05 -5
fw_link-06 -6
fw_link-07 -7
fw_link-08 -8
fw_link-09 -9
fw_link-10 -10
fw_link-11 -11
fw_link-12 -12
fw_link-13 -13
fw_link-14 -14
fw_link-15 -15
fw_link-16 -16
fw_link-17 -17
fw_link-18 -18
fw_link-19 -19
fw_link-20 -20
requestReadings:
update:
fw_link-01 reading 01-1
fw_link-02 reading 01-2
fw_link-03 reading 01-3
fw_link-04 reading 01-4
fw_link-05 reading 01-5
fw_link-06 reading 01-6
fw_link-07 reading 01-7
fw_link-08 reading 01-8
fw_link-09 reading 01-9
fw_link-10 reading 01-10
fw_link-11 reading 01-11
fw_link-12 reading 01-12
fw_link-13 reading 01-13
fw_link-14 reading 01-14
fw_link-15 reading 01-15
fw_link-16 reading 01-16
fw_link-17 reading 01-17
fw_link-18 reading 01-18
fw_link-19 reading 01-19
fw_link-20 reading 01-20
sslargs:
Attributes:
enableControlSet 1
event-on-change-reading .*
event-on-update-reading LAST_ERROR,MATCHED_READINGS
reading01AutoNumLen 2
reading01Format http://www.eq-3.de%s
reading01Name fw_link
reading01RegOpt gi
reading01Regex <a.href="(\/downloads\/software\/firmware\/[hH][mM][^"]+)
readingMaxAge 10
readingMaxAgeReplacementMode delete
requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
room eq3
showError 1
showMatched 1
stateFormat {eq3StateFormat}
userReadings newFwForDevices:MATCHED_READINGS:.* {
my $ret = "";
my @data;
my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_[Vv]([\d_]+)_(\d\d)(\d\d)(\d\d)/;
$data[0] =~ s/_/-/g;
sprintf("%s:%s:%s.%s.%s:%s",$data[0],$data[1],$data[4],$data[3],"20".$data[2],$_);
} ReadingsVal("eq3","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.")";
}
}
}
return ($ret eq "")?"no fw-updates needed!":$ret;
}
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
webCmd reread
Zitat von: Nobby1805 am 03 September 2019, 18:34:20
Du meinst ein list von eq3? Bitte sehr
Naja ich meinte eher von der Variante mit /i die "nicht geht" :)
@ms_steini Da wird wohl was in der eq3StateFormat Routine aus irgendeinem Grund auf den Namen matchen. Das ist nicht schön - mal sehen ob man das findet.
@Otto123,
das ist, wenn du ein Device anlegst und mit dessen namen schon ein SVG existiert, bekommt das Device automatisch ein devStateIcon zugewiesen, allerdings ohne das attr devStateIcon zu verwenden.
erstell mal ein Dummy, "define hc_wht_regler dummy" der bekommt automatisch als icon das hc_wht_regler.svg zugewiesen
Zitat von: Otto123 am 03 September 2019, 19:02:18
Naja ich meinte eher von der Variante mit /i die "nicht geht" :)
kleines v
Internals:
BUSY 0
DEF https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
FUUID 5d6e28a3-f33f-092f-d33a-bf75520d17d0bad3
Interval 604800
LASTSEND 1567531018.3329
MainURL https://www.eq-3.de/ajax/downloads/downloads_eq3.php
MaxAgeEnabled 1
ModuleVersion 3.5.9 - 13.2.2019
NAME eq3
NOTIFYDEV global
NR 482
NTFY_ORDER 50-eq3
STATE <div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => 2019-09-03 19:17:02<br><br><pre>| device | model | old_fw | new_fw | release |<br>------------------------------------------------------------------------------------<br>| <a href="/fhem?detail=HM_4D106F">HM_4D106F </a> | <b style="color:lightgray">HM-ES-TX-WM </b> | <b style="color:lightgray"> 1.0</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm-es-tx-wm_update_v1_2_160628.tgz"><b style="color:red"> 1.2</b></a> | 28.06.2016 |<br>| <a href="/fhem?detail=Innen">Innen </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.1</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br>| <a href="/fhem?detail=Innen2">Innen2 </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.2</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br>| <a href="/fhem?detail=Innen3">Innen3 </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.2</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br>| <a href="/fhem?detail=Innen4">Innen4 </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.1</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br>| <a href="/fhem?detail=Innen5">Innen5 </a> | <b style="color:lightgray">HM-TC-IT-WM-W-EU </b> | <b style="color:lightgray"> 1.2</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz"><b style="color:red"> 1.3.2</b></a> | 27.08.2015 |<br></pre></div>
TRIGGERTIME 1568112371.91473
TRIGGERTIME_FMT 2019-09-10 12:46:11
TYPE HTTPMOD
addr https://www.eq-3.de:443
auth 0
code 200
compress 1
conn
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
displayurl https://www.eq-3.de/ajax/downloads/downloads_eq3.php
header
host www.eq-3.de
httpheader HTTP/1.1 200 OK
Date: Tue, 03 Sep 2019 17:17:01 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9
X-Powered-By: PHP/7.1.15
Strict-Transport-Security: max-age=15768000
Connection: close
Content-Type: text/html; charset=UTF-8
httpversion 1.0
hu_blocking 0
hu_filecount 15
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /ajax/downloads/downloads_eq3.php
protocol https
redirects 0
timeout 2
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
QUEUE:
READINGS:
2019-09-03 19:17:02 LAST_REQUEST update
2019-09-03 19:17:02 MATCHED_READINGS fw_link-01 fw_link-02 fw_link-03 fw_link-04 fw_link-05 fw_link-06 fw_link-07 fw_link-08 fw_link-09 fw_link-10 fw_link-11 fw_link-12 fw_link-13 fw_link-14 fw_link-15 fw_link-16 fw_link-17 fw_link-18 fw_link-19 fw_link-20
2019-09-03 19:17:02 UNMATCHED_READINGS
2019-09-03 19:17:02 fw_link-01 http://www.eq-3.de/downloads/software/firmware/HM-ES-TX-WM_update_V2_2_190619_1.tgz
2019-09-03 19:17:02 fw_link-02 http://www.eq-3.de/downloads/software/firmware/hm-mod-re-8_update_v1_2_150911.tgz
2019-09-03 19:17:02 fw_link-03 http://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_11_1_161212.tgz
2019-09-03 19:17:02 fw_link-04 http://www.eq-3.de/downloads/software/firmware/hm_dis_ep_wm55_update_v1_2_170129.tgz
2019-09-03 19:17:02 fw_link-05 http://www.eq-3.de/downloads/software/firmware/hm-es-pmsw1-pl-dn-r1_update_v2_5_0009_150217.tgz
2019-09-03 19:17:02 fw_link-06 http://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_2_0_160825.tgz
2019-09-03 19:17:02 fw_link-07 http://www.eq-3.de/downloads/software/firmware/hm-es-tx-wm_update_v1_2_160628.tgz
2019-09-03 19:17:02 fw_link-08 http://www.eq-3.de/downloads/software/firmware/hm-ou-cfm-tw_update_v1_3_160620.tgz
2019-09-03 19:17:02 fw_link-09 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1pwm-cv_update_v2_9_0005_150730.tar.gz
2019-09-03 19:17:02 fw_link-10 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1tpbu-fm_update_v2_9_0005_150730.tar.gz
2019-09-03 19:17:02 fw_link-11 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1l-pl-3_update_v2_9_0007_150803.tar.gz
2019-09-03 19:17:02 fw_link-12 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1t-pl-3_update_v2_9_0005_150730.tar.gz
2019-09-03 19:17:02 fw_link-13 http://www.eq-3.de/downloads/software/firmware/hm-mod-re-8_update_v1_2_150911.tgz
2019-09-03 19:17:02 fw_link-14 http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz
2019-09-03 19:17:02 fw_link-15 http://www.eq-3.de/downloads/software/firmware/hm-lc-sw1pbu-fm_update_v2_8_2_150713.tgz
2019-09-03 19:17:02 fw_link-16 http://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_1_2_150413.tgz
2019-09-03 19:17:02 fw_link-17 http://www.eq-3.de/downloads/software/firmware/hm-es-pmsw1-pl_update_v2_5_0009_150217.tgz
2019-09-03 19:17:02 fw_link-18 http://www.eq-3.de/downloads/software/firmware/hm_cc_rt_dn_update_v1_4_001_141020.tgz
2019-09-03 19:17:02 fw_link-19 http://www.eq-3.de/downloads/software/firmware/hm-sen-rd-o_update_v1_4_003_130930.tgz
2019-09-03 19:17:02 fw_link-20 http://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_3_0002_131204.tgz
2019-09-03 19:17:02 newFwForDevices HM_4D106F (HM-ES-TX-WM | fw_1.0 => fw07_1.2 | 28.06.2016),Innen (HM-TC-IT-WM-W-EU | fw_1.1 => fw14_1.3.2 | 27.08.2015),Innen2 (HM-TC-IT-WM-W-EU | fw_1.2 => fw14_1.3.2 | 27.08.2015),Innen3 (HM-TC-IT-WM-W-EU | fw_1.2 => fw14_1.3.2 | 27.08.2015),Innen4 (HM-TC-IT-WM-W-EU | fw_1.1 => fw14_1.3.2 | 27.08.2015),Innen5 (HM-TC-IT-WM-W-EU | fw_1.2 => fw14_1.3.2 | 27.08.2015)
REQUEST:
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
header
ignoreredirects 0
retryCount 0
type update
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
defptr:
readingBase:
fw_link-01 reading
fw_link-02 reading
fw_link-03 reading
fw_link-04 reading
fw_link-05 reading
fw_link-06 reading
fw_link-07 reading
fw_link-08 reading
fw_link-09 reading
fw_link-10 reading
fw_link-11 reading
fw_link-12 reading
fw_link-13 reading
fw_link-14 reading
fw_link-15 reading
fw_link-16 reading
fw_link-17 reading
fw_link-18 reading
fw_link-19 reading
fw_link-20 reading
readingNum:
fw_link-01 01
fw_link-02 01
fw_link-03 01
fw_link-04 01
fw_link-05 01
fw_link-06 01
fw_link-07 01
fw_link-08 01
fw_link-09 01
fw_link-10 01
fw_link-11 01
fw_link-12 01
fw_link-13 01
fw_link-14 01
fw_link-15 01
fw_link-16 01
fw_link-17 01
fw_link-18 01
fw_link-19 01
fw_link-20 01
readingOutdated:
readingSubNum:
fw_link-01 -1
fw_link-02 -2
fw_link-03 -3
fw_link-04 -4
fw_link-05 -5
fw_link-06 -6
fw_link-07 -7
fw_link-08 -8
fw_link-09 -9
fw_link-10 -10
fw_link-11 -11
fw_link-12 -12
fw_link-13 -13
fw_link-14 -14
fw_link-15 -15
fw_link-16 -16
fw_link-17 -17
fw_link-18 -18
fw_link-19 -19
fw_link-20 -20
requestReadings:
update:
fw_link-01 reading 01-1
fw_link-02 reading 01-2
fw_link-03 reading 01-3
fw_link-04 reading 01-4
fw_link-05 reading 01-5
fw_link-06 reading 01-6
fw_link-07 reading 01-7
fw_link-08 reading 01-8
fw_link-09 reading 01-9
fw_link-10 reading 01-10
fw_link-11 reading 01-11
fw_link-12 reading 01-12
fw_link-13 reading 01-13
fw_link-14 reading 01-14
fw_link-15 reading 01-15
fw_link-16 reading 01-16
fw_link-17 reading 01-17
fw_link-18 reading 01-18
fw_link-19 reading 01-19
fw_link-20 reading 01-20
sslargs:
Attributes:
enableControlSet 1
event-on-change-reading .*
event-on-update-reading LAST_ERROR,MATCHED_READINGS
reading01AutoNumLen 2
reading01Format http://www.eq-3.de%s
reading01Name fw_link
reading01RegOpt gi
reading01Regex <a.href="(\/downloads\/software\/firmware\/[hH][mM][^"]+)
readingMaxAge 10
readingMaxAgeReplacementMode delete
requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
room eq3
showError 1
showMatched 1
stateFormat {eq3StateFormat}
userReadings newFwForDevices:MATCHED_READINGS:.* {
my $ret = "";
my @data;
my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_v([\d_]+)_(\d\d)(\d\d)(\d\d)/;
$data[0] =~ s/_/-/g;
sprintf("%s:%s:%s.%s.%s:%s",$data[0],$data[1],$data[4],$data[3],"20".$data[2],$_);
} ReadingsVal("eq3","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.")";
}
}
}
return ($ret eq "")?"no fw-updates needed!":$ret;
}
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
webCmd reread
großes V
Internals:
BUSY 0
DEF https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
FUUID 5d6e28a3-f33f-092f-d33a-bf75520d17d0bad3
Interval 604800
LASTSEND 1567531135.17392
MainURL https://www.eq-3.de/ajax/downloads/downloads_eq3.php
MaxAgeEnabled 1
ModuleVersion 3.5.9 - 13.2.2019
NAME eq3
NOTIFYDEV global
NR 482
NTFY_ORDER 50-eq3
STATE <div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => 2019-09-03 19:18:55<br><br><pre>| device | model | old_fw | new_fw | release |<br>------------------------------------------------------------------------------------<br>| <a href="/fhem?detail=HM_4D106F">HM_4D106F </a> | <b style="color:lightgray">HM-ES-TX-WM </b> | <b style="color:lightgray"> 1.0</b> | <a title="eq3-firmware.tgz" href="http://www.eq-3.de/downloads/software/firmware/HM-ES-TX-WM_update_V2_2_190619_1.tgz"><b style="color:red"> 2.2</b></a> | 19.06.2019 |<br></pre></div>
TRIGGERTIME 1568112371.91473
TRIGGERTIME_FMT 2019-09-10 12:46:11
TYPE HTTPMOD
addr https://www.eq-3.de:443
auth 0
code 200
compress 1
conn
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
displayurl https://www.eq-3.de/ajax/downloads/downloads_eq3.php
header
host www.eq-3.de
httpheader HTTP/1.1 200 OK
Date: Tue, 03 Sep 2019 17:18:55 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9
X-Powered-By: PHP/7.1.15
Strict-Transport-Security: max-age=15768000
Connection: close
Content-Type: text/html; charset=UTF-8
httpversion 1.0
hu_blocking 0
hu_filecount 16
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /ajax/downloads/downloads_eq3.php
protocol https
redirects 0
timeout 2
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
QUEUE:
READINGS:
2019-09-03 19:18:55 LAST_REQUEST update
2019-09-03 19:18:55 MATCHED_READINGS fw_link-01 fw_link-02 fw_link-03 fw_link-04 fw_link-05 fw_link-06 fw_link-07 fw_link-08 fw_link-09 fw_link-10 fw_link-11 fw_link-12 fw_link-13 fw_link-14 fw_link-15 fw_link-16 fw_link-17 fw_link-18 fw_link-19 fw_link-20
2019-09-03 19:18:55 UNMATCHED_READINGS
2019-09-03 19:18:55 fw_link-01 http://www.eq-3.de/downloads/software/firmware/HM-ES-TX-WM_update_V2_2_190619_1.tgz
2019-09-03 19:18:55 fw_link-02 http://www.eq-3.de/downloads/software/firmware/hm-mod-re-8_update_v1_2_150911.tgz
2019-09-03 19:18:55 fw_link-03 http://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_11_1_161212.tgz
2019-09-03 19:18:55 fw_link-04 http://www.eq-3.de/downloads/software/firmware/hm_dis_ep_wm55_update_v1_2_170129.tgz
2019-09-03 19:18:55 fw_link-05 http://www.eq-3.de/downloads/software/firmware/hm-es-pmsw1-pl-dn-r1_update_v2_5_0009_150217.tgz
2019-09-03 19:18:55 fw_link-06 http://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_2_0_160825.tgz
2019-09-03 19:18:55 fw_link-07 http://www.eq-3.de/downloads/software/firmware/hm-es-tx-wm_update_v1_2_160628.tgz
2019-09-03 19:18:55 fw_link-08 http://www.eq-3.de/downloads/software/firmware/hm-ou-cfm-tw_update_v1_3_160620.tgz
2019-09-03 19:18:55 fw_link-09 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1pwm-cv_update_v2_9_0005_150730.tar.gz
2019-09-03 19:18:55 fw_link-10 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1tpbu-fm_update_v2_9_0005_150730.tar.gz
2019-09-03 19:18:55 fw_link-11 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1l-pl-3_update_v2_9_0007_150803.tar.gz
2019-09-03 19:18:55 fw_link-12 http://www.eq-3.de/downloads/software/firmware/hm-lc-dim1t-pl-3_update_v2_9_0005_150730.tar.gz
2019-09-03 19:18:55 fw_link-13 http://www.eq-3.de/downloads/software/firmware/hm-mod-re-8_update_v1_2_150911.tgz
2019-09-03 19:18:55 fw_link-14 http://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz
2019-09-03 19:18:55 fw_link-15 http://www.eq-3.de/downloads/software/firmware/hm-lc-sw1pbu-fm_update_v2_8_2_150713.tgz
2019-09-03 19:18:55 fw_link-16 http://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_1_2_150413.tgz
2019-09-03 19:18:55 fw_link-17 http://www.eq-3.de/downloads/software/firmware/hm-es-pmsw1-pl_update_v2_5_0009_150217.tgz
2019-09-03 19:18:55 fw_link-18 http://www.eq-3.de/downloads/software/firmware/hm_cc_rt_dn_update_v1_4_001_141020.tgz
2019-09-03 19:18:55 fw_link-19 http://www.eq-3.de/downloads/software/firmware/hm-sen-rd-o_update_v1_4_003_130930.tgz
2019-09-03 19:18:55 fw_link-20 http://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_3_0002_131204.tgz
2019-09-03 19:18:55 newFwForDevices HM_4D106F (HM-ES-TX-WM | fw_1.0 => fw01_2.2 | 19.06.2019)
REQUEST:
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
header
ignoreredirects 0
retryCount 0
type update
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
defptr:
readingBase:
fw_link-01 reading
fw_link-02 reading
fw_link-03 reading
fw_link-04 reading
fw_link-05 reading
fw_link-06 reading
fw_link-07 reading
fw_link-08 reading
fw_link-09 reading
fw_link-10 reading
fw_link-11 reading
fw_link-12 reading
fw_link-13 reading
fw_link-14 reading
fw_link-15 reading
fw_link-16 reading
fw_link-17 reading
fw_link-18 reading
fw_link-19 reading
fw_link-20 reading
readingNum:
fw_link-01 01
fw_link-02 01
fw_link-03 01
fw_link-04 01
fw_link-05 01
fw_link-06 01
fw_link-07 01
fw_link-08 01
fw_link-09 01
fw_link-10 01
fw_link-11 01
fw_link-12 01
fw_link-13 01
fw_link-14 01
fw_link-15 01
fw_link-16 01
fw_link-17 01
fw_link-18 01
fw_link-19 01
fw_link-20 01
readingOutdated:
readingSubNum:
fw_link-01 -1
fw_link-02 -2
fw_link-03 -3
fw_link-04 -4
fw_link-05 -5
fw_link-06 -6
fw_link-07 -7
fw_link-08 -8
fw_link-09 -9
fw_link-10 -10
fw_link-11 -11
fw_link-12 -12
fw_link-13 -13
fw_link-14 -14
fw_link-15 -15
fw_link-16 -16
fw_link-17 -17
fw_link-18 -18
fw_link-19 -19
fw_link-20 -20
requestReadings:
update:
fw_link-01 reading 01-1
fw_link-02 reading 01-2
fw_link-03 reading 01-3
fw_link-04 reading 01-4
fw_link-05 reading 01-5
fw_link-06 reading 01-6
fw_link-07 reading 01-7
fw_link-08 reading 01-8
fw_link-09 reading 01-9
fw_link-10 reading 01-10
fw_link-11 reading 01-11
fw_link-12 reading 01-12
fw_link-13 reading 01-13
fw_link-14 reading 01-14
fw_link-15 reading 01-15
fw_link-16 reading 01-16
fw_link-17 reading 01-17
fw_link-18 reading 01-18
fw_link-19 reading 01-19
fw_link-20 reading 01-20
sslargs:
Attributes:
enableControlSet 1
event-on-change-reading .*
event-on-update-reading LAST_ERROR,MATCHED_READINGS
reading01AutoNumLen 2
reading01Format http://www.eq-3.de%s
reading01Name fw_link
reading01RegOpt gi
reading01Regex <a.href="(\/downloads\/software\/firmware\/[hH][mM][^"]+)
readingMaxAge 10
readingMaxAgeReplacementMode delete
requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
room eq3
showError 1
showMatched 1
stateFormat {eq3StateFormat}
userReadings newFwForDevices:MATCHED_READINGS:.* {
my $ret = "";
my @data;
my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_V([\d_]+)_(\d\d)(\d\d)(\d\d)/;
$data[0] =~ s/_/-/g;
sprintf("%s:%s:%s.%s.%s:%s",$data[0],$data[1],$data[4],$data[3],"20".$data[2],$_);
} ReadingsVal("eq3","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.")";
}
}
}
return ($ret eq "")?"no fw-updates needed!":$ret;
}
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
webCmd reread
hth Nobby
und mit dieser Zeile ? my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_v([\d_]+)_(\d\d)(\d\d)(\d\d)/i;
statt Deiner in beiden Fällen ohne /i ?
Zitat von: ms_steini am 03 September 2019, 19:14:09
@Otto123,
das ist, wenn du ein Device anlegst und mit dessen namen schon ein SVG existiert, bekommt das Device automatisch ein devStateIcon zugewiesen, allerdings ohne das attr devStateIcon zu verwenden.
erstell mal ein Dummy, "define hc_wht_regler dummy" der bekommt automatisch als icon das hc_wht_regler.svg zugewiesen
Oh da hat der Groschen bei mir jetzt lange gebraucht. Du redest vom Icon! :o
Ich war bei SVG auf dem Plot Trip!
Ok dann ist das ne andere Schiene auf der man suchen muss. Dann wird also der Code für Stateformat irgendwie mit dem Icon gemischt? Ich habe keine Idee wo man da suchen sollte ....
Zitat von: Otto123 am 03 September 2019, 19:30:47
und mit dieser Zeile ? my @eq3FwList = map{@data = ReadingsVal("eq3","fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_v([\d_]+)_(\d\d)(\d\d)(\d\d)/i;
statt Deiner in beiden Fällen ohne /i ?
dann klappt es :)
Zitat von: Otto123 am 03 September 2019, 19:39:38
Ok dann ist das ne andere Schiene auf der man suchen muss. Dann wird also der Code für Stateformat irgendwie mit dem Icon gemischt? Ich habe keine Idee wo man da suchen sollte ....
Meine Vermutung dazu: Das kommt aus FHEMWEB, genauer gesagt aus der Multiline-Variante der devStateIcon-Auswertung von STATE. Da scheint es eine Prio für Icons zu geben, also jede Zeile (?), die genau den Text enthält wie ein Iconname, wird umgewandelt. Da hier das SVG vorhanden ist, aber die HTML-Auswertung per <pre>(?)-Tag untersagt, kommt hier eben der Text... Nur dürfte der Anzeigebereich zu klein sein, um alles unterzubringen ;) .
Kurzum: wir sollten dem user mehr Gestaltungsmöglichkeiten bei der Namenswahl geben ;) .
Zitat von: Beta-User am 03 September 2019, 17:46:13
Mei, hier ist echt was los... Jetzt wollte ich das jedenfalls auch mal wissen (nachdem ich eigentlich angenommen hatte, dass sowieso alles aktuell ist, war ich überrascht, dass v.a. meine ganzen Rollladenaktoren NICHT auf der 2.11.1 zu sein scheinen ??? ...)
Wie dem auch sei, mit folgendem RAW-Code (ohne myUtils-Code) bekomme ich eine Ausgabe und hoffe, allen input einigermaßen (evtl. bis auf das vV-Thema, das eigentlich mit dem "i" erledigt sein sollte) verarbeitet zu haben:
defmod eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
attr eq3 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 eq3 enableControlSet 1
attr eq3 event-on-change-reading .*
attr eq3 event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr eq3 httpVersion 1.1
attr eq3 reading01AutoNumLen 2
attr eq3 reading01Format http://www.eq-3.de%s
attr eq3 reading01Name fw_link
attr eq3 reading01RegOpt gi
attr eq3 reading01Regex <a.href="(\/downloads\/software\/firmware\/[hH][mM][^"]+)
attr eq3 readingMaxAge 10
attr eq3 readingMaxAgeReplacementMode delete
attr eq3 requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
attr eq3 room Steuerung->Z_CUL_HM_intern
attr eq3 showError 1
attr eq3 showMatched 1
attr eq3 stateFormat { my $ret ="";; \
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","");; \
$ret .= '<div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;; \
$ret .= '<br><br><pre>';; \
$ret .= "| device | model | cur_fw | new_fw | release |<br>";; \
$ret .= "------------------------------------------------------------------------------------<br>";; \
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");; \
if($check eq "no fw-updates needed!") {\
$ret .= '| ';;\
$ret .= '<b style="color:green">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b>';;\
$ret .= ' |';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b> |';;\
} 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 .= '| <a href="/fhem?detail='.$dev.'">';; \
$ret .= sprintf("%-23s",$dev);; \
$ret .= '</a> | <b';; \
$ret .= (($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';; \
$ret .= sprintf("%-23s",$md);; \
$ret .= '</b> | <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 .= sprintf("%6s",$ofw);; \
$ret .= '</b> | <a title="eq3-firmware.tgz" href="'.$link.'"><b style="color:red">';; \
$ret .= sprintf("%6s",$nfw);; \
$ret .= '</b></a> | ';; \
$ret .= sprintf("%-10s",$date);; \
$ret .= " |<br>";; \
} \
} \
$ret .= '</pre></div>';; \
return $ret;;\
}
attr eq3 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_[vV]([\d_]+)_(\d\d)(\d\d)(\d\d)/;;\
$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 eq3 webCmd reread
Leider wirft das HTTPMOD bei mir nur einen Fehlen:
setstate eq3 2019-09-04 15:15:16 newFwForDevices Error evaluating eq3 userReading newFwForDevices: Unmatched ) in regex;; marked by <-- HERE in m/^[^:]+:(\d+)_(\d+)_?(\d*)[^:]+) <-- HERE \d\d)$/ at (eval 2359436) line 15.\
Zitat von: gloob am 04 September 2019, 15:20:50
Leider wirft das HTTPMOD bei mir nur einen Fehlen:
setstate eq3 2019-09-04 15:15:16 newFwForDevices Error evaluating eq3 userReading newFwForDevices: Unmatched ) in regex;; marked by <-- HERE in m/^[^:]+:(\d+)_(\d+)_?(\d*)[^:]+) <-- HERE \d\d)$/ at (eval 2359436) line 15.\
??? :o :(
Verflixte Axt, da hatte ich an dem bestehenden HTTPMOD rumgebastelt, den Code auf "Device only" umgestellt und nicht gemerkt, dass es danach nicht mehr funktionierte (sah' auf den ersten Blick ok aus)... Was ein Mist. (Vielleicht kann mir das irgendwann mal jemand erklären, warum das mit derselben Regex in myUtils funktioniert, aber nicht, wenn man denselben Code direkt in die Konfiguration packt?!?). Na jedenfalls habe ich derzeit keine Idee, wie man das direkt funktional bekäme :'( .
Wenn man sowieso myUtils-Code braucht, sollte man dennoch besser zum einen $name übergeben (in dem stateFormat-Aufruf) und zum anderen dann auch den anderen Teil auslagern; die aktuelle Mischform ist - na ja - unschön.
Den 2. HTTPMOD mit den beiden myUtils-Funktionen stand am Ende der gestrigen Mühen, und den habe ich übrigens derzeit auch im Einsatz, _der_ funktioniert ::) ...
Btw.: es wäre eigentlich noch schicker, wenn da statt des href-links ein system-wget-Aufruf stünde, der einem die eq3-Datei gleich ausgepackt mit den richtigen Rechten in den firmware-Ordner packt. Ist mir aber im Moment zu hoch, vielleicht hat jemand eine Idee...?
Zitat von: Beta-User am 04 September 2019, 16:24:44
??? :o :(
Verflixte Axt, da hatte ich an dem bestehenden HTTPMOD rumgebastelt, den Code auf "Device only" umgestellt und nicht gemerkt, dass es danach nicht mehr funktionierte (sah' auf den ersten Blick ok aus)... Was ein Mist. (Vielleicht kann mir das irgendwann mal jemand erklären, warum das mit derselben Regex in myUtils funktioniert, aber nicht, wenn man denselben Code direkt in die Konfiguration packt?!?). Na jedenfalls habe ich derzeit keine Idee, wie man das direkt funktional bekäme :'( .
bei mir funktioniert alles, ich finde keine warnings im log und ich nutze keine myutils funktionen.
meine vermutung ist, dass du die fhem.cfg editierst. 8)
da solltest du eigentlich keinen support bekommen, oder wie wird das aktuell behandelt?
finde den unterschied:1. original zeile, die bei mir funktioniert:
my ($nh,$nl,$no,$date,$idx) = $newFw =~ m/^[^:]+:(\d+)_(\d+)_?(\d*):([^:]+):(\d\d)$/;
2. deine gepostete zeile:
my ($nh,$nl,$no,$date,$idx) = $newFw =~ m/^[^:]+:(\d+)_(\d+)_?(\d*)[^:]+)\d\d)$/;
ich frage mich, wie du das "unbeabsichtigt" hinbekommen hast.
deine myutils sieht sicherlich auch anders aus.
edit: eventuell wird die zeichenfolge aus doppelpunkt und klammer irgendwo als smily interpretiert? :(
Vielleicht Dank, damit geht es bei mir:
defmod eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
attr eq3 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 eq3 enableControlSet 1
attr eq3 event-on-change-reading .*
attr eq3 event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr eq3 httpVersion 1.1
attr eq3 reading01AutoNumLen 2
attr eq3 reading01Format http://www.eq-3.de%s
attr eq3 reading01Name fw_link
attr eq3 reading01RegOpt gi
attr eq3 reading01Regex <a.href="(\/downloads\/software\/firmware\/[hH][mM][^"]+)
attr eq3 readingMaxAge 10
attr eq3 readingMaxAgeReplacementMode delete
attr eq3 requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
attr eq3 room CUL_HM
attr eq3 showError 1
attr eq3 showMatched 1
attr eq3 stateFormat { my $ret ="";; \
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","");; \
$ret .= '<div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;; \
$ret .= '<br><br><pre>';; \
$ret .= "| device | model | cur_fw | new_fw | release |<br>";; \
$ret .= "------------------------------------------------------------------------------------<br>";; \
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");; \
if($check eq "no fw-updates needed!") {\
$ret .= '| ';;\
$ret .= '<b style="color:green">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b>';;\
$ret .= ' |';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b> |';;\
} 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 .= '| <a href="/fhem?detail='.$dev.'">';; \
$ret .= sprintf("%-23s",$dev);; \
$ret .= '</a> | <b';; \
$ret .= (($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';; \
$ret .= sprintf("%-23s",$md);; \
$ret .= '</b> | <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 .= sprintf("%6s",$ofw);; \
$ret .= '</b> | <a title="eq3-firmware.tgz" href="'.$link.'"><b style="color:red">';; \
$ret .= sprintf("%6s",$nfw);; \
$ret .= '</b></a> | ';; \
$ret .= sprintf("%-10s",$date);; \
$ret .= " |<br>";; \
} \
} \
$ret .= '</pre></div>';; \
return $ret;;\
}
attr eq3 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_[vV]([\d_]+)_(\d\d)(\d\d)(\d\d)/;;\
$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 eq3 webCmd reread
Zitat von: frank am 05 September 2019, 13:09:54
meine vermutung ist, dass du die fhem.cfg editierst. 8)
da solltest du eigentlich keinen support bekommen, oder wie wird das aktuell behandelt?
aus dem Wiki:
Zitatim wesentlichen über das Webinterface eingebbar (können aber auch "en bloc" in die fhem.cfg eingetragen werden - auch wenn das eigentlich nicht empfohlen ist)
ich hatte mir trotzdem die Mühe gemacht und jede Zeile einzeln mit cut/paste ausgeführt ... ::) :P
@frank
Danke für's Überprüfen. Das war ein configDB-System, direktes cfg-Editieren fällt also definitiv weg...
(Vermutlich war tatsächlich das smily-copy-paste schuld; ich hatte das mehrfach aus dem Wiki in FHEM, und dort mehrfach hin- und herkopiert - alles unter Linux, und dabei eigentlich nur die vielen Einzelzeilen etwas komprimiert... Von daher bestand auch keine Veranlassung zu intensiverer/doppelter Prüfung. "Eigentlich" ... :( .)
Dann packe ich das mal bei Gelegenheit in die HTTPMOD-attrTemplate-file; vor dem Hochladen teste ich dann nochmal ausgiebiger ;D ...
Zitat von: Beta-User am 05 September 2019, 13:53:46
Dann packe ich das mal bei Gelegenheit in die HTTPMOD-attrTemplate-file; vor dem Hochladen teste ich dann nochmal ausgiebiger ;D ...
dann aber bitte noch mit folgenden änderungen:
1. wenn regOpt mit "i"
attr eq3 reading01RegOpt gi
dann auch Regex ändern in
attr eq3 reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
2. die "[vV]" zeile im userreading auf "insensitiv" umstellen, also ändern in
my @eq3FwList = map{@data = ReadingsVal($name,"fw_link-".$_,"?") =~ m/firmware\/(.*?)_update_v([\d_]+)_(\d\d)(\d\d)(\d\d)/i;
3. die fw links funktionieren scheinbar auch mit https, also Format ändern in
attr eq3 reading01Format https://www.eq-3.de%s
gruss frank
Ich habe die jetzige Version mehrfach getestet und für gut befunden. Deshalb mal ins Wiki eingearbeitet und diesen Abschnitt dabei fast neu gemacht.
Schaut euch das bitte mal an, ob es so nachvollziehbar ist.
Ich wollte den Code nur einmal darstellen und habe das Ganze etwas Modular für "Frank's" Variante (ohne 99_myUtils) und "meine" (mit 99_myUtils) dargestellt.
Ist jetzt nichts für copy & Paste ohne etwas nachzudenken ;)
https://wiki.fhem.de/wiki/HomeMatic_Firmware_Update#Tool_zur_Firmware_Versionspr.C3.BCfung
Bitte anschauen, meckern oder selbst ändern :)
Gruß Otto
@Otto: Danke!
Ich versuche dann mal, zackig das template nachzuziehen, vorbereitet ist es, und auch kurz angetestet :) .
Das folgende einfach an's Ende der file httpmod.template im Verzeichnis lib/AttrTemplate pappen, {AttrTemplate_Initialize()} ausführen, dann einen beliebigen HTTPMOD erstellen und dort "set ... attrTemplate ?" aufrufen :) .
#################################
#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<br>Define a HTTPMOD device like <br>define eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800<br><a href="https://https://forum.fhem.de/index.php/topic,78501.msg972144.html#msg972144">Source: Forum</a><br><a href="https://wiki.fhem.de/wiki/HomeMatic_Firmware_Update#Basis-Definitionen_f.C3.BCr_Device_eq3">Wiki</a>
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 <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
attr DEVICE readingMaxAge 10
attr DEVICE readingMaxAgeReplacementMode delete
attr DEVICE requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
attr DEVICE room CUL_HM
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">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;; \
$ret .= '<br><br><pre>';; \
$ret .= "| device | model | cur_fw | new_fw | release |<br>";; \
$ret .= "------------------------------------------------------------------------------------<br>";; \
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");; \
if($check eq "no fw-updates needed!") {\
$ret .= '| ';;\
$ret .= '<b style="color:green">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b>';;\
$ret .= ' |';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b> |';;\
} 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 .= '| <a href="/fhem?detail='.$dev.'">';;\
$ret .= sprintf("%-23s",$dev);;\
$ret .= '</a> | <b';;\
$ret .= (($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';;\
$ret .= sprintf("%-23s",$md);;\
$ret .= '</b> | <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 .= sprintf("%6s",$ofw);;\
$ret .= '</b> | <a title="eq3-firmware.tgz" href="'.$link.'"><b style="color:red">';;\
$ret .= sprintf("%6s",$nfw);;\
$ret .= '</b></a> | ';;\
$ret .= sprintf("%-10s",$date);;\
$ret .= " |<br>";;\
}\
}\
$ret .= '</pre></div>';;\
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
ich habe meine version gerade mit zusätzlichen readings für die links der changeLogs erweitert.
so kann man bequem den link markieren und mit rechtem mausklick im browser das changeLog-file öfnen.
einfach folgende 5 attr ergänzen:
attr eq3 reading02AutoNumLen 2
attr eq3 reading02Format https://www.eq-3.de%s
attr eq3 reading02Name changeLog_link
attr eq3 reading02RegOpt gi
attr eq3 reading02Regex <a.href="(\/downloads\/software\/firmware\/changelog_hm[^"]+)
da 5 devices keinen link bereithalten, gibt es aktuell 20 fw_link-readings und nur 15 changeLog_link-readings.
in der kürze der zeit habe ich noch keine negativen auswirkungen feststellen können.
eventuell erweitere ich bei gelegenheit noch das stateformat entsprechend.
:) Klingt gut.
Wenn weitere Tester das für gut befinden, bau ich's auch gleich noch in das template ein.
Wie schaut es aus, gleich die eq3-file in den firmware-Ordner zu entpacken statt "nur" die Links zu den gepackten Dateien? Müßte eigentlich über einen shell-Befehl zu machen sein, Aufruf wäre z.B. aus dem hier abzuleiten:
<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">
(Damit würde man irgendwelche Rechte-Themen auf dem Weg vom aktuellen Rechner auf den Server vermeiden).
ZitatWie schaut es aus, gleich die eq3-file in den firmware-Ordner zu entpacken statt "nur" die Links zu den gepackten Dateien?
vorsicht, da bräuchte es wohl etwas mehr.
oder willst du bei jedem reread 20 dateien runterladen, die du wahrscheinlich schon hast.
dann gibt es noch unterschiedliche files (tgz und tar.gz), oder sind die identisch?
man bräuchte eher eine dateiverwaltung, die nur neue fw-files hinzulädt, diese dann nach models sortiert, da es eventuell bereits fw zum entsprechenden model gibt. in den fw-files sind teilweise auch noch zusätzliche dateien (changelog, bda, icons, ...).
eventuell noch ein attribut für einen persönlichen pfad. dazu fehlerhandling, wenn der speicher nicht reicht oder der pfad nicht erreichbar ist, ...........
Mag sein, dass das nicht zuende gedacht ist...
Aber an sich soll ja weiter nur ein Link bereitgestellt werden, nur eben mit einem anderen Ziel (nämlich den system-Kommandoaufruf, z.B. mit einem wget). Dass also plötzlich unbeabsichtigt ganz viele Dateien angelegt werden, war jedenfalls nie das Ziel.
Das firmware-Verzeichnis als Unterverzeichnis zu ./FHEM ist in der Regel vorhanden (da sind auch files für Signalduino, Arducounter und Jeelinkdrin, z.B.), aber du hast recht, man sollte checken, was passiert, wenn es nicht da (...) ist und/oder ggf. konfigurierbar machen. Schließlich kommen "die Leute" ja auf die abstrusesten Gedanken :) .
Zitat von: Beta-User am 05 September 2019, 16:08:57
Wenn weitere Tester das für gut befinden, bau ich's auch gleich noch in das template ein.
ja funktioniert bei mir auch ... jetzt muss es nur noch in die Ausgabe eingebaut werden ;)
Um die neuen Readings bzgl. changeLog auch in der Ausgabe verfügbar zu machen, habe ich einige Änderungen an den beiden Routinen für userReadings bzw. stateFormat vorgenommen. Damit wird das release-Datum zu einem Link umfunktioniert, falls ein passender changeLog-Eintrag verfügbar ist.
Neue Attribute gemäß Antwort 05 September 2019, 15:58:46
attr eq3 reading02AutoNumLen 2
attr eq3 reading02Format https://www.eq-3.de%s
attr eq3 reading02Name changeLog_link
attr eq3 reading02RegOpt gi
attr eq3 reading02Regex <a.href="(\/downloads\/software\/firmware\/changelog_hm[^"]+)
Attribut-Definition für userReadings
attr eq3 userReadings newFwForDevices:MATCHED_READINGS:.* {eq3_userReadings($NAME)}
userReadings-Routine für 99_myUtils.pm
sub eq3_userReadings($) {
my ($NAME) = @_;
my $ret = "";
my @data;
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;
my @eq3ChList = map{@data = ReadingsVal("$NAME","changeLog_link-".$_,"?") =~ m/Firmware\/changelog_(.*?)_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/changeLog_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))) {
my $idx4ch = undef;
foreach my $newCh (grep m/^${md}:/i,@eq3ChList) {
my ($ch_nh,$ch_nl,$ch_no,$ch_date,$ch_idx) = $newCh =~ m/^[^:]+:(\d+)_(\d+)_?(\d*):([^:]+):(\d\d)$/;
if (($ch_nh == $nh) && ($ch_nl == $nl) && ($ch_no == $no) && ($ch_date eq $date)) {
$idx4ch = $ch_idx;
last;
}
}
$ret .= "," if($ret ne "");
$ret .= $dev." (".$md." | fw_".$v." => fw".$idx."_".$nh.".".$nl.($no?sprintf(".%d",$no):"")." | ".$date." | ch".($idx4ch?$idx4ch:"00").")";
}
}
}
return ($ret eq "")?"no fw-updates needed!":$ret;
}
Attribut-Definition für stateFormat
attr eq3 stateFormat {eq3_stateFormat($name)}
stateFormat-Routine für 99_myUtils.pm
sub eq3_stateFormat($) {
my ($name) = @_;
my $ret ="";
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");
$ret .= '<div style="text-align:left">';
$ret .= 'last <a title="eq3-downloads" href="https://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;
my $check = ReadingsVal($name,"newFwForDevices","???");
if($check eq "no fw-updates needed!") {
$ret .= ' => '.$check;
} else {
$ret .= '<br/><br/>';
$ret .= '<pre>';
$ret .= "| device | model | old_fw | new_fw | release |<br/>";
$ret .= "------------------------------------------------------------------------------------<br/>";
my @devices = split(',',$check);
foreach my $devStr (@devices) {
my ($dev,$md,$ofw,$idx,$nfw,$date,$idx4ch) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\s\|\sch(\d\d)\)$/;
my $link = ReadingsVal($name,"fw_link-".$idx,"???");
my $link4ch = ReadingsVal($name,"changeLog_link-".$idx4ch,undef);
$ret .= '| ';
$ret .= '<a href="/fhem?detail='.$dev.'">';
$ret .= sprintf("%-23s",$dev);
$ret .= '</a>';
$ret .= " | ";
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';
$ret .= sprintf("%-23s",$md);
$ret .= '</b>';
$ret .= " | ";
$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 .= sprintf("%6s",$ofw);
$ret .= '</b>';
$ret .= " | ";
$ret .= '<a title="eq3-firmware.tgz" href="'.$link.'">';
$ret .= '<b style="color:red">';
$ret .= sprintf("%6s",$nfw);
$ret .= '</b>';
$ret .= '</a>';
$ret .= " | ";
if (defined($link4ch)) { $ret .= '<a href="'.$link4ch.'">'; }
$ret .= sprintf("%-10s",$date);
if (defined($link4ch)) { $ret .= '</a>'; }
$ret .= " |<br/>";
}
$ret .= '</pre>';
}
$ret .= '</div>';
return $ret;
}
meine aktuelle testversion sah am anfang ähnlich aus.
ich hab deine version nicht probiert, aber ich vermisse diverse "sonderlocken" der changelog links. zb:
1. datum als vergleich nicht nutzbar, da teilweise unterschiedlich.
2. sw1pbu hat nur model im file.
3. es müsste auch warnings in fhem.log geben, denke ich.
Zitat von: Nobby1805 am 05 September 2019, 17:43:29
ja funktioniert bei mir auch ... jetzt muss es nur noch in die Ausgabe eingebaut werden ;)
Danke für die Rückmeldung; habe es jetzt in dem getesteten Zwischenstand ins svn eingeckeckt.
Sollte es einen konsolidierten neuen Stand geben, pack' ich die Ergänzungen gerne dazu :) .
Zitat von: frank am 08 September 2019, 12:39:57https://forum.fhem.de/index.php/topic,78501.msg972863.html#msg972863 (https://forum.fhem.de/index.php/topic,78501.msg972863.html#msg972863)
Zitat
1. datum als vergleich nicht nutzbar, da teilweise unterschiedlich.
2. sw1pbu hat nur model im file.
3. es müsste auch warnings in fhem.log geben, denke ich.
zu1) Das ist mir auch aufgefallen, aber ich habe mich für die Theorie entschieden: Entweder passen die relevanten Parameter alle oder der changeLog-Eintrag kann nicht zugeordnet werden.
zu 2) s. 1)
zu 3) Warnings im Log tauchen bei mir nicht auf. Ausnahme war beim (einmaligen) Übergang von altem zu neuem userReadings ...
Bei 1) bzw. 2) sehe ich zunächst auch nur die Möglichkeit, else-Fälle zu integrieren, die eine immer weiter abgeschwächte Übereinstimmung erfordern. Ob der changeLog-Eintrag dann wirklich passt, ist - insbesondere im Fall sw1pbu - Glückssache. Auf das Datum hingegen kann man wahrscheinlich auch verzichten, wenn der komplette Versions-Vergleich positiv ausfällt.
hiermit sollten alle changelog files funktionieren.
defmod eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 86400
attr eq3 enableControlSet 1
attr eq3 event-on-change-reading .*
attr eq3 event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr eq3 httpVersion 1.1
attr eq3 reading01AutoNumLen 2
attr eq3 reading01Format https://www.eq-3.de%s
attr eq3 reading01Name fw_link
attr eq3 reading01RegOpt gi
attr eq3 reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
attr eq3 reading02AutoNumLen 2
attr eq3 reading02Name changeLog_link
attr eq3 reading02OExpr $val=~m/(\/downloads\/software\/firmware\/[^"]+)/?"https://www.eq-3.de".$1:"none"
attr eq3 reading02RegOpt gis
attr eq3 reading02Regex (.{300})<a.href="\/downloads\/software\/firmware\/hm[^"]+
attr eq3 readingMaxAge 10
attr eq3 readingMaxAgeReplacementMode delete
attr eq3 requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
attr eq3 room eq3
attr eq3 showError 1
attr eq3 showMatched 1
attr eq3 stateFormat {\
my $ret ="";; \
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");; \
$ret .= '<div style="text-align:left">';; \
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;; \
$ret .= '<br><br>';; \
$ret .= '<pre>';; \
$ret .= "| device | model | cur_fw | new_fw | release |<br>";; \
$ret .= "------------------------------------------------------------------------------------<br>";; \
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");; \
if($check eq "no fw-updates needed!") {\
$ret .= '| ';;\
$ret .= '<b style="color:green">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b>';;\
$ret .= ' |';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| ';;\
$ret .= '<b style="color:red">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b>';;\
$ret .= ' |';;\
} else { \
my @devices = split(',',$check);; \
foreach my $devStr (@devices) { \
my ($dev,$md,$ofw,$idx_fw,$nfw,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\)$/;;\
my $fw_link = ReadingsVal($name,"fw_link-".$idx_fw,"???");; \
my $cl_link = ReadingsVal($name,"changeLog_link-".$idx_fw,"???");; \
$ret .= '| ';; \
$ret .= '<a href="/fhem?detail='.$dev.'">';; \
$ret .= sprintf("%-23s",$dev);; \
$ret .= '</a>';; \
$ret .= " | ";; \
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';; \
$ret .= sprintf("%-23s",$md);; \
$ret .= '</b>';; \
$ret .= " | ";; \
$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 .= sprintf("%6s",$ofw);; \
$ret .= '</b>';; \
$ret .= " | ";; \
$ret .= '<a title="download firmware file" href="'.$fw_link.'">';; \
$ret .= '<b style="color:red">';; \
$ret .= sprintf("%6s",$nfw);; \
$ret .= '</b>';; \
$ret .= '</a>';; \
$ret .= " | ";; \
$ret .= '<a title="open changeLog file" href="'.$cl_link.'"><b style="color:red">' if($cl_link ne "none");; \
$ret .= sprintf("%-10s",$date);; \
$ret .= '</b></a>' if($cl_link ne "none");; \
$ret .= " |<br>";; \
} \
} \
$ret .= '</pre>';; \
$ret .= '</div>';; \
return $ret;; \
}
attr eq3 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 eq3 webCmd reread
geändert haben sich eigentlich nur die attr reading02.... und stateformat.
@frank
Die Lösung mit dem Verbrauchen der Nummern bei Nichtvorhandensein eines Changelog gefällt mir sehr gut; dadurch entfällt das Rückwärtszuordnen vollständig und man hat erst gar keine Problemfälle.
Und das Beste: es funktioniert und man versteht es fast vollständig ;-)
Wichtig für den schnellen Test war bei mir noch, das alte Attribut reading02Format zu löschen; ansonsten gibt es Probleme.
Vielen Dank erst einmal für die deutlich kürzere Lösungsvariante.
jo, passt :D
@Frank Da bist Du Deiner eigenen Empfehlung aber untreu geworden ;)
Zitatdefmod eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 86400
Und es hat mich keiner korrigiert das ich im Wiki im userReadings nicht eq3 durch $name ersetzt habe :-[ :'(
mist, erwischt. :)
Hallo zusammen,
anbei mal die nächste Fassung für die httpmod.template-Datei (incl. alignTime) usw.. Vorteil: der Raum bleibt ggf. erhalten => das sollte also auch ohne weiteres dazu dienen können, zukünftig updates zu verteilen, man muß dann "nur" einfach das template nochmal anwenden...
Ich habe damit aber noch ein "Problemchen" bzw. eine Sache, bei der hier evtl. jemand weiß, ob und wie das geht (s.u.).#################################
#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<br>Define a HTTPMOD device like <br><a href="/fhem?cmd.dummy=defmod%20eq3%20HTTPMOD%20https://www.eq-3.de/ajax/downloads/downloads_eq3.php%20604800&XHR=1">define eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800</a><br><a href="https://https://forum.fhem.de/index.php/topic,78501.msg972144.html#msg972144">Source: Forum</a><br><a href="https://wiki.fhem.de/wiki/HomeMatic_Firmware_Update#Basis-Definitionen_f.C3.BCr_Device_eq3">Wiki</a>
par:WHICHROOM;Room of the calling device; {AttrVal("DEVICE","room","CUL_HM" )}
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 alignTime 00:45
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 <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
attr DEVICE reading02AutoNumLen 2
attr DEVICE reading02Name changeLog_link
attr DEVICE reading02OExpr $val=~m/(\/downloads\/software\/firmware\/[^"]+)/?"https://www.eq-3.de".$1:"none"
attr DEVICE reading02RegOpt gis
attr DEVICE reading02Regex (.{300})<a.href="\/downloads\/software\/firmware\/hm[^"]+
attr DEVICE readingMaxAge 10
attr DEVICE readingMaxAgeReplacementMode delete
attr DEVICE requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
attr DEVICE room WHICHROOM
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="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;; \
$ret .= '<br><br>';; \
$ret .= '<pre>';; \
$ret .= "| device | model | cur_fw | new_fw | release |<br>";; \
$ret .= "------------------------------------------------------------------------------------<br>";; \
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");; \
if($check eq "no fw-updates needed!") {\
$ret .= '| ';;\
$ret .= '<b style="color:green">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b>';;\
$ret .= ' |';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| ';;\
$ret .= '<b style="color:red">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b>';;\
$ret .= ' |';;\
} else { \
my @devices = split(',',$check);; \
foreach my $devStr (@devices) { \
my ($dev,$md,$ofw,$idx_fw,$nfw,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\)$/;;\
my $fw_link = ReadingsVal($name,"fw_link-".$idx_fw,"???");; \
my $cl_link = ReadingsVal($name,"changeLog_link-".$idx_fw,"???");; \
$ret .= '| ';; \
$ret .= '<a href="/fhem?detail='.$dev.'">';; \
$ret .= sprintf("%-23s",$dev);; \
$ret .= '</a>';; \
$ret .= " | ";; \
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';; \
$ret .= sprintf("%-23s",$md);; \
$ret .= '</b>';; \
$ret .= " | ";; \
$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 .= sprintf("%6s",$ofw);; \
$ret .= '</b>';; \
$ret .= " | ";; \
$ret .= '<a title="download firmware file" href="'.$fw_link.'">';; \
$ret .= '<b style="color:red">';; \
$ret .= sprintf("%6s",$nfw);; \
$ret .= '</b>';; \
$ret .= '</a>';; \
$ret .= " | ";; \
$ret .= '<a title="open changeLog file" href="'.$cl_link.'"><b style="color:red">' if($cl_link ne "none");; \
$ret .= sprintf("%-10s",$date);; \
$ret .= '</b></a>' if($cl_link ne "none");; \
$ret .= " |<br>";; \
} \
} \
$ret .= '</pre>';; \
$ret .= '</div>';; \
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
Was nicht geht: Bei "set <irgendein HTTPMOD> attrTemplate ?" erhält man eine Übersichtsliste, was es so alles gibt, mit links ins Wiki, forum usw.. Da wird jetzt bei diesem template ein cmd.dummy-Link angeboten, über den man das Device optimalerweise gleich anlegen lassen kann. Der Link ist da, aber leider nicht funktional. Kann sein, dass sowas gar nicht geht, aber wenn es nur an einer Kleinigkeit hinge, wäre das als allgemeine Funktion (auch für die anderen attrTemplates in HTTPMOD) "nett"...
@Otto: Was hältsts du davon, den Code im Wiki (für die Variante ohne myUtils) gar nicht mehr reinzunehmen und dafür die zwei Zeilen Code für das define und Anwenden des template?
Zitat von: Beta-User am 12 September 2019, 13:41:22
@Otto: Was hältsts du davon, den Code im Wiki (für die Variante ohne myUtils) gar nicht mehr reinzunehmen und dafür die zwei Zeilen Code für das define und Anwenden des template?
Spontan nichts - weil ICH die Sache mit den Templates nicht verstehe, bzw. einfach noch nie angeschaut habe. ;D
Mich stören da momentan 3 Meldungen in meiner Definition:
Immer wenn ich reread mache: 2019.09.12 13:54:56 2: AttrTemplates: got 98 entries
Muss das immer kommen, auch wenn ich es gar nicht verwende?
Beim Start von FHEM kommen die zwei Meldungen: :-\
2019.09.12 12:53:11 3: eq3: Defined with URL https://www.eq-3.de/ajax/downloads/downloads_eq3.php and interval 604800 featurelevel 5.9
2019.09.12 12:53:11 3: eq3: added hint :text,reading,internal,expression,delete to attr readingMaxAgeReplacementMode in userattr list
;D ;D ;D
Dann wird's aber mal Zeit...
Im Ernst, das ist keine große Sache:
Bei allen Modulen, die SetExtensions unterstützen, gibt es die Option, dazu attrTemplates zu haben, bei HTTPMOD wurde es extra (unabhängig von SetExtensions(?)) eingebaut.
Dahinter verbirgt sich die Idee, dass die Devices mancher Module stark von der Konfiguration durch Attribute abhängen (insbes. MQTT2_DEVICE und auch HTTPMOD), und daher sehr davon profitieren können, wenn man das zentral verteilt und die user das nicht von überall her zusammensuchen müssen, dabei Fehler machen usw..
Im Prinzip ist es also gesammelter RAW-Code, wobei "vorneweg" eben "etwas Perl" ausgeführt werden kann, v.a., um Variablen zu füllen. Hier wird das z.B. genutzt nachzusehen, ob das room-Attribut schon nutzerseitig anders belegt ist (dann wird der aktuelle Inhalt übernommen). Dazu eine kleine Beschreibung (für das "?") und ggf. etwas "farewell", also Hinweise an den Anwender, was jetzt passieren soll, das war es auch schon :) .
Guter Hinweis! Dann werde ich wohl die Defaults von HMCCU mal nach attrtemplates migrieren. Hatte zwar schon davon gelesen, mich aber noch nicht im Detail damit beschäftigt. 😎
Zitat von: zap am 12 September 2019, 16:34:35
Guter Hinweis! Dann werde ich wohl die Defaults von HMCCU mal nach attrtemplates migrieren. Hatte zwar schon davon gelesen, mich aber noch nicht im Detail damit beschäftigt. 😎
Wenn du Hilfe dazu brauchst: Einfach melden, und evtl. einen Thread dazu aufmachen, diesen in dem Ankündigungs-Thread von Rudi dann verlinken.
Hintergrund: Hin und wieder gibt/gab es noch Bedarf an zusätzlicher Funktionalität, und in der Vergangenheit hat Rudi da immer wieder nochmal "eins draufgesetzt". Es gibt auch einige features, die nur vorbereitet sind, u.A. kann man auch "bedingte Zweige" haben, könnte also ein Subset von Attributen nur setzen, wenn bestimmte Bedingungen gegeben sind usw.. Auch farewell ist bisher nur "wenig" genutzt.
Gut finde ich auch die Option, direkt aus "?" (z.B.) ins Wiki zu verlinken.
Heute morgen bin ich endlich dazu gekommen, die neuen Änderungen mal zu testen, vorallem mit em template eine sehr schöne Sache. Evtl sollte man das noch mit ins Wiki übernehmen.
Bei mir läuft alles.
BTW, eine Frage habe ich aber noch, die Änderungen in der 99_myUtils.cfg für das setState, kann dann gelöscht werden, wenn ich das richtig sehe, oder?
Großes Lob an Alle die das so schnell hinbekommen haben.
Gruß Knallkopp_02
Zitat von: Knallkopp_02 am 15 September 2019, 10:24:27
Heute morgen bin ich endlich dazu gekommen, die neuen Änderungen mal zu testen, vorallem mit em template eine sehr schöne Sache. Evtl sollte man das noch mit ins Wiki übernehmen.
Danke für die Rückmeldung. Ich nehme mal an, dass Otto so freundlich ist, das dann ins Wiki zu übernehmen, sobald er dazu gekommen ist, das mit den attrTemplate mal auszutesten ;D ::) 8) .
ZitatBTW, eine Frage habe ich aber noch, die Änderungen in der 99_myUtils.cfg für das setState, kann dann gelöscht werden, wenn ich das richtig sehe, oder?
Bei dem "Einheitsdevice" brauchst du den (doppelten) Code in myUtils nicht mehr, kannst das aber natürlich umstellen, wenn dir das lieber ist.
Das mit dem Template finde ich genial, auch wenn ich absolut keine Probleme habe die Quelltexte zu kopieren. Aber so hat man mit der Erstellung des Httpmod und der Aktivierung des Templates mit 2 Klicks das ganze Ding aktiv.
Echt klasse, so viele Daumen kann ich garnicht geben
Gruß
Hallo Beta-User,
ich habe heute eine Gosund SP111 Steckdose mit tuya-convert auf Tasmota geflashed, mqtt2 eingerichtet und mit attrTemplate die Steckdose in nullkommanix zum laufen gebracht. Damit hast Du mich gegriffen mein Lieber ;D ;D ;D
Wie "versprochen" habe ich mich dann mit der attrTemplate Definition aus diesem Thread beschäftigt getestet und ins Wiki eingebaut.
Der Artikel muss insgesamt noch überarbeitet werden, aber heute nicht mehr :)
Gruß Otto
@Otto:
Danke für's Austesten und die Einarbeitung in's Wiki, THX for reporting your experience with attrTemplate ;D .
[OT @all]
- Es wundert mich etwas, dass das Thema grade bei HTTPMOD so ruhig ist... Eingentlich wäre das ein guter Weg, "sich bekannt" zu machen für viele tolle Sachen, die heute "irgendwo" im Wiki vorhanden sind.
(Shame on me: manches aus dem template-file funktioniert leider nicht ganz so, wie ich mir das wünsche; vielleicht mag sich mal einer um ORF-Wetter kümmern (es gibt mWm. noch eines, bei dem die regexe nicht so hinhauen, es gibt einen Thread dazu, wenn jemand Interesse hat, der Link dahin ist über attrTemplate bei jedem HTTPMOD zu erhalten).
- Wenn jemand das file als Maintainer (ganz oder mit) übernehmen möchte: gerne melden :) , ich bin leider eher nur fortgeschrittener Anfänger beim regexen, und daher keine Optimalbesetzung für diesen Job...
[/OT]
Gruß, Beta-User
Ich habe mich betreffend Firmware Update der HM Geräte hier und auf dem Wiki durchgewurstelt.
Dabei dürfte ich einen Fehler gemacht haben den ich nicht mehr wegbekomme.
Bei mir werden aktuell nur 18 fw_link-readings und nur 18 changeLog_link-readings angezeigt, und es werden keine Firmwareupdates durchgeführt, obwohl es welche geben müsste.
get HMinfo param -d D-firmware
param done:
param list
entity : D-firmware |
Aerosol Difusor HM-LC-SW1-BA-PCB
AB_FR_AD : 1.7
Raumthermostat HM-CC-RT-DN
EG_BA_HZG_RT : 1.4
EG_KU_HZG_RT : 1.4
EG_SL_HZG_RT : 1.4
EG_STH_HZG_RT : 1.4
EG_WC_HZG_RT : 1.4
EG_WI_HZG_RT : 1.4
EG_WZ_HZG_RT : 1.4
OG1_KI_HZG_RT : 1.4
OG1_KU_HZG_RT : 1.4
OG1_SL_HZG_RT : 1.4
OG1_STH_HZG_RT : 1.4
OG1_WC_HZG_RT : 1.4
OG1_WZ_HZG_RT : 1.4
OG2_BU1_HZG_RT : 1.4
OG2_BU2_HZG_RT1 : 1.4
OG2_BU2_HZG_RT2 : 1.4
OG2_WC_HZG_RT : 1.4
Temperatur Controler HM-TC-IT-WM-W-EU
EG_BA_HZG_TC : 1.3
EG_KU_HZG_TC : 1.3
EG_SL_HZG_TC : 1.3
EG_WI_HZG_TC : 1.4
EG_WZ_HZG_TC : 1.3
OG1_KI_HZG_TC : 1.3
OG1_KU_HZG_TC : 1.3
OG1_SL_HZG_TC : 1.3
OG1_WZ_HZG_TC : 1.3
OG2_BU1_HZG_TC : 1.3
OG2_BU2_HZG_TC : 1.3
Bewässerung | Kühlung HM-LC-SW4-BA-PCB
AB_BKTR_BW : 1.1
AB_SG_BW : 1.1
AB_VG_BW : 1.1
OG2_B1_KG : 1.1
Bewegungssensor HM-SEN-MDIR-O-3
AB_SG_BLGOBWS : 1.7
AB_SG_BLWSBWS : 1.7
Audioausgabe HM-OU-CFM-TW
AB_FR_AAM : 1.3
EG_KUE_AAM : 1.3
EG_STH_AAM : 1.3
OG1_VR_AAM : 1.3
OG2_BU1_AAM : 1.3
Fernbedienung Verriegelung HM-RC-KEY4-2
EG_STH_T1_FB : 1.2
Verriegelung HM-SEC-KEY-S
EG_STH_T1_VG : 2.5
Taster HM-PB-2-WM55
AB_SA_NT : 1.4
EG_STH_T1_VGT : 1.4
Taster HM-LC-SW1PBU-FM
OG1_WZ_BL_VIO : 2.8
Regensensor HM-SEN-RD-O
AB_WST_RSI : 1.4
Pegelstand Mühlbach HM-SEN-WA-OD
AB_MB_PS : 1.3
Feuchtesensor HM-SEC-WDS-2
AB_GAO_FS1_SSPPWTI : 1.4
KG_FS1_HAI : 1.4
OG1_KUE_FS1_OAI : 1.4
Aktor HM-LC-SW1PBU-FM HM-LC-SW1PBU-FM
OG1_KUE_FS1_OAFGO : 2.8
Rauchmelder HM-SEC-SD-2
AB_FR_RM : 1.0
AB_GAO_RM : 1.0
EG_KUE_RM : 1.0
EG_SL_RM : 1.0
EG_VR_RM : 1.0
EG_WR_RM : 1.0
EG_WZ_RM : 1.0
OG1_KI_RM : 1.0
OG1_KUE_RM : 1.0
OG1_SL_RM : 1.0
OG1_STH_RM : 1.0
OG1_VR_RM : 1.0
OG1_WZ_RM : 1.0
OG2_BU1_RM : 1.0
OG2_BU2_RM : 1.0
OG2_DB_RM : 1.0
OG2_EDV_RM : 1.0
OG2_VR_RM : 1.0
RGB Beleuchtung HM-LC-RGBW-WM
RGB_AB_FR : 1.0
RGB_OG1_WZ : 1.0
Fenster Sensoren HM-SEC-SCO
UESF1_AB_FR : 1.0
UESF1_AB_GAO : 1.0
UESF1_EG_BA : 1.0
UESF1_EG_KUE : 1.0
UESF1_EG_SL : 1.0
UESF1_EG_STH : 1.0
UESF1_EG_WC : 1.0
UESF1_EG_WI : 1.0
UESF1_EG_WZ : 1.0
UESF1_OG1_BA : 1.0
UESF1_OG1_KI : 1.0
UESF1_OG1_KUE : 1.0
UESF1_OG1_SL : 1.0
UESF1_OG1_WC : 1.0
UESF1_OG1_WZ : 1.0
UESF1_OG2_BUE1_N : 1.0
UESF1_OG2_BUE2_N : 1.0
UESF1_OG2_BUE2_W : 1.0
UESF1_OG2_DB : 1.0
UESF1_OG2_DBN : 1.0
UESF2_AB_GAO : 1.0
UESF2_EG_SL : 1.0
UESF2_EG_STH : 1.0
UESF2_EG_WZ : 1.0
UESF2_OG1_SL : 1.0
UESF2_OG1_WZ : 1.0
UESF2_OG2_BUE1_N : 1.0
UESF2_OG2_BUE2_N : 1.0
UESF2_OG2_BUE2_W : 1.0
UESF2_OG2_DBN : 1.0
UESF3_OG1_STH : 1.0
UESF3_OG2_BUE1_N : 1.0
UESF3_OG2_BUE2_W : 1.0
UESF3_OG2_DBN : 1.0
UESF4_OG1_STH : 1.0
UESF5_OG2_STH : 1.0
UEST1_AB_FR : 1.0
UEST1_AB_GAO : 1.0
UEST1_AB_GTW : 1.0
UEST1_AB_SA : 1.0
UEST1_EG_BA : 1.0
UEST1_EG_KUE : 1.0
UEST1_EG_STH : 1.0
UEST1_OG1_KUE : 1.0
UEST1_OG2_EDV : 1.0
UEST2_AB_GAO : 1.0
Eine Verständnisfrage habe ich zum Eintrag in der 99_myUtils.pm der userReadings und stateFormat Definition laut Wiki.
attr eQ3 stateFormat {eq3StateFormat($name)}
attr eQ3 userReadings newFwForDevices:MATCHED_READINGS:.* {eq3Attr($name)}
Warum definiert man diese in der 99_myUtils.pm wenn sie ohnehin wieder in die userReadings und stateFormat ausgelagert werden.
######## eQ3 Firmware Update ###################
### 2019.10.19
sub eq3Attr{
my $name = shift @_;
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;
}
#####################
sub eq3StateFormat($) {
my $name = shift @_;
my $ret ="";
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");
$ret .= '<div style="text-align:left">';
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;
$ret .= '<br><br>';
$ret .= '<pre>';
$ret .= "| device | model | cur_fw | new_fw | release |<br>";
$ret .= "------------------------------------------------------------------------------------<br>";
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");
if($check eq "no fw-updates needed!") {
$ret .= '| ';
$ret .= '<b style="color:green">';
$ret .= sprintf("%-80s",$check);
$ret .= '</b>';
$ret .= ' |';
} elsif($check eq "error => no or wrong data from eq3-server!") {
$ret .= '| ';
$ret .= '<b style="color:red">';
$ret .= sprintf("%-80s",$check);
$ret .= '</b>';
$ret .= ' |';
} else {
my @devices = split(',',$check);
foreach my $devStr (@devices) {
my ($dev,$md,$ofw,$idx_fw,$nfw,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\)$/;
my $fw_link = ReadingsVal($name,"fw_link-".$idx_fw,"???");
my $cl_link = ReadingsVal($name,"changeLog_link-".$idx_fw,"???");
$ret .= '| ';
$ret .= '<a href="/fhem?detail='.$dev.'">';
$ret .= sprintf("%-23s",$dev);
$ret .= '</a>';
$ret .= " | ";
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';
$ret .= sprintf("%-23s",$md);
$ret .= '</b>';
$ret .= " | ";
$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 .= sprintf("%6s",$ofw);
$ret .= '</b>';
$ret .= " | ";
$ret .= '<a title="download firmware file" href="'.$fw_link.'">';
$ret .= '<b style="color:red">';
$ret .= sprintf("%6s",$nfw);
$ret .= '</b>';
$ret .= '</a>';
$ret .= " | ";
$ret .= '<a title="open changeLog file" href="'.$cl_link.'"><b style="color:red">' if($cl_link ne "none");
$ret .= sprintf("%-10s",$date);
$ret .= '</b></a>' if($cl_link ne "none");
$ret .= " |<br>";
}
}
$ret .= '</pre>';
$ret .= '</div>';
return $ret;
}
list eQ3
Internals:
BUSY 0
CFGFN /media/hdd/fhem/mycfg/HM/hm_rasp01.cfg
DEF https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
FUUID 5c45b04f-f33f-f4d2-e8ac-6e95ed4c33510da6
Interval 604800
LASTSEND 1571506945.31442
MainURL https://www.eq-3.de/ajax/downloads/downloads_eq3.php
MaxAgeEnabled 1
ModuleVersion 3.5.9 - 13.2.2019
NAME eQ3
NOTIFYDEV global
NR 4212
NTFY_ORDER 50-eq3
STATE <div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => 2019-10-19 19:42:25<br><br><pre>| device | model | cur_fw | new_fw | release |<br>------------------------------------------------------------------------------------<br>| <b style="color:green">no fw-updates needed! </b> |</pre></div>
TRIGGERTIME 1572043500
TRIGGERTIME_FMT 2019-10-26 00:45:00
TYPE HTTPMOD
TimeAlign 1571438700
TimeAlignFmt 2019-10-19 00:45:00
addr https://www.eq-3.de:443
auth 0
buf
code 200
compress 1
conn
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
displayurl https://www.eq-3.de/ajax/downloads/downloads_eq3.php
header
host www.eq-3.de
httpheader HTTP/1.1 200 OK
Date: Sat, 19 Oct 2019 17:42:25 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9
X-Powered-By: PHP/7.1.15
Strict-Transport-Security: max-age=15768000
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
httpversion 1.1
hu_blocking 0
hu_filecount 2
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /ajax/downloads/downloads_eq3.php
protocol https
redirects 0
timeout 2
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
QUEUE:
READINGS:
2019-10-19 19:42:25 LAST_REQUEST update
2019-10-19 19:42:25 MATCHED_READINGS fw_link-01 fw_link-02 fw_link-03 fw_link-04 fw_link-05 fw_link-06 fw_link-07 fw_link-08 fw_link-09 fw_link-10 fw_link-11 fw_link-12 fw_link-13 fw_link-14 fw_link-15 fw_link-16 fw_link-17 fw_link-18 changeLog_link-01 changeLog_link-02 changeLog_link-03 changeLog_link-04 changeLog_link-05 changeLog_link-06 changeLog_link-07 changeLog_link-08 changeLog_link-09 changeLog_link-10 changeLog_link-11 changeLog_link-12 changeLog_link-13 changeLog_link-14 changeLog_link-15 changeLog_link-16 changeLog_link-17 changeLog_link-18
2019-10-19 19:42:25 UNMATCHED_READINGS
2019-10-19 19:42:25 changeLog_link-01 https://www.eq-3.de/downloads/software/firmware/changelog_HM-ES-TX-WM_update_V2_2_190619_1.txt
2019-10-19 19:42:25 changeLog_link-02 https://www.eq-3.de/downloads/software/firmware/changelog_hm-mod-re-8_update_v1_2_150911.txt
2019-10-19 19:42:25 changeLog_link-03 https://www.eq-3.de/downloads/software/firmware/changelog_hm_dis_ep_wm55_update_v1_2_170129.txt
2019-10-19 19:42:25 changeLog_link-04 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-bl1pbu-fm_update_v2_11_1_161212.txt
2019-10-19 19:42:25 changeLog_link-05 https://www.eq-3.de/downloads/software/firmware/changelog_hm-es-pmsw1-pl-dn-r1_update_v2_5_0009_150217.txt
2019-10-19 19:42:25 changeLog_link-06 https://www.eq-3.de/downloads/software/firmware/changelog_hm-sen-mdir-wm55_update_v1_2_0_160825.txt
2019-10-19 19:42:25 changeLog_link-07 https://www.eq-3.de/downloads/software/firmware/changelog_hm-es-tx-wm_update_v1_2_160628.txt
2019-10-19 19:42:25 changeLog_link-08 https://www.eq-3.de/downloads/software/firmware/changelog_hm-ou-cfm-tw_update_v1_3_160620.txt
2019-10-19 19:42:25 changeLog_link-09 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-dim1t-pl-3_update_v2_9_0005_160113.txt
2019-10-19 19:42:25 changeLog_link-10 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-dim1l-pl-3_update_v2_9_0007_160113.txt
2019-10-19 19:42:25 changeLog_link-11 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-dim1tpbu-fm_update_v2_9_0005_160113.txt
2019-10-19 19:42:25 changeLog_link-12 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-dim1pwm-cv_update_v2_9_0005_160113g.txt
2019-10-19 19:42:25 changeLog_link-13 https://www.eq-3.de/downloads/software/firmware/changelog_hm_tc_it_wm_w_eu_update_v1_3_002_150827.txt
2019-10-19 19:42:25 changeLog_link-14 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-sw1pbu-fm.txt
2019-10-19 19:42:25 changeLog_link-15 none
2019-10-19 19:42:25 changeLog_link-16 none
2019-10-19 19:42:25 changeLog_link-17 none
2019-10-19 19:42:25 changeLog_link-18 none
2019-10-19 19:42:25 fw_link-01 https://www.eq-3.de/downloads/software/firmware/HM-ES-TX-WM_update_V2_2_190619_1.tgz
2019-10-19 19:42:25 fw_link-02 https://www.eq-3.de/downloads/software/firmware/hm-mod-re-8_update_v1_2_150911.tgz
2019-10-19 19:42:25 fw_link-03 https://www.eq-3.de/downloads/software/firmware/hm_dis_ep_wm55_update_v1_2_170129.tgz
2019-10-19 19:42:25 fw_link-04 https://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_11_1_161212.tgz
2019-10-19 19:42:25 fw_link-05 https://www.eq-3.de/downloads/software/firmware/hm-es-pmsw1-pl-dn-r1_update_v2_5_0009_150217.tgz
2019-10-19 19:42:25 fw_link-06 https://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_2_0_160825.tgz
2019-10-19 19:42:25 fw_link-07 https://www.eq-3.de/downloads/software/firmware/hm-es-tx-wm_update_v1_2_160628.tgz
2019-10-19 19:42:25 fw_link-08 https://www.eq-3.de/downloads/software/firmware/hm-ou-cfm-tw_update_v1_3_160620.tgz
2019-10-19 19:42:25 fw_link-09 https://www.eq-3.de/downloads/software/firmware/hm-lc-dim1t-pl-3_update_v2_9_0005_150730.tar.gz
2019-10-19 19:42:25 fw_link-10 https://www.eq-3.de/downloads/software/firmware/hm-lc-dim1l-pl-3_update_v2_9_0007_150803.tar.gz
2019-10-19 19:42:25 fw_link-11 https://www.eq-3.de/downloads/software/firmware/hm-lc-dim1tpbu-fm_update_v2_9_0005_150730.tar.gz
2019-10-19 19:42:25 fw_link-12 https://www.eq-3.de/downloads/software/firmware/hm-lc-dim1pwm-cv_update_v2_9_0005_150730.tar.gz
2019-10-19 19:42:25 fw_link-13 https://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz
2019-10-19 19:42:25 fw_link-14 https://www.eq-3.de/downloads/software/firmware/hm-lc-sw1pbu-fm_update_v2_8_2_150713.tgz
2019-10-19 19:42:25 fw_link-15 https://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_1_2_150413.tgz
2019-10-19 19:42:25 fw_link-16 https://www.eq-3.de/downloads/software/firmware/hm_cc_rt_dn_update_v1_4_001_141020.tgz
2019-10-19 19:42:25 fw_link-17 https://www.eq-3.de/downloads/software/firmware/hm-sen-rd-o_update_v1_4_003_130930.tgz
2019-10-19 19:42:25 fw_link-18 https://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_3_0002_131204.tgz
2019-10-19 19:42:25 newFwForDevices no fw-updates needed!
REQUEST:
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
header
ignoreredirects 0
retryCount 0
type update
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
defptr:
readingBase:
changeLog_link-01 reading
changeLog_link-02 reading
changeLog_link-03 reading
changeLog_link-04 reading
changeLog_link-05 reading
changeLog_link-06 reading
changeLog_link-07 reading
changeLog_link-08 reading
changeLog_link-09 reading
changeLog_link-10 reading
changeLog_link-11 reading
changeLog_link-12 reading
changeLog_link-13 reading
changeLog_link-14 reading
changeLog_link-15 reading
changeLog_link-16 reading
changeLog_link-17 reading
changeLog_link-18 reading
fw_link-01 reading
fw_link-02 reading
fw_link-03 reading
fw_link-04 reading
fw_link-05 reading
fw_link-06 reading
fw_link-07 reading
fw_link-08 reading
fw_link-09 reading
fw_link-10 reading
fw_link-11 reading
fw_link-12 reading
fw_link-13 reading
fw_link-14 reading
fw_link-15 reading
fw_link-16 reading
fw_link-17 reading
fw_link-18 reading
readingNum:
changeLog_link-01 02
changeLog_link-02 02
changeLog_link-03 02
changeLog_link-04 02
changeLog_link-05 02
changeLog_link-06 02
changeLog_link-07 02
changeLog_link-08 02
changeLog_link-09 02
changeLog_link-10 02
changeLog_link-11 02
changeLog_link-12 02
changeLog_link-13 02
changeLog_link-14 02
changeLog_link-15 02
changeLog_link-16 02
changeLog_link-17 02
changeLog_link-18 02
fw_link-01 01
fw_link-02 01
fw_link-03 01
fw_link-04 01
fw_link-05 01
fw_link-06 01
fw_link-07 01
fw_link-08 01
fw_link-09 01
fw_link-10 01
fw_link-11 01
fw_link-12 01
fw_link-13 01
fw_link-14 01
fw_link-15 01
fw_link-16 01
fw_link-17 01
fw_link-18 01
readingOutdated:
readingSubNum:
changeLog_link-01 -1
changeLog_link-02 -2
changeLog_link-03 -3
changeLog_link-04 -4
changeLog_link-05 -5
changeLog_link-06 -6
changeLog_link-07 -7
changeLog_link-08 -8
changeLog_link-09 -9
changeLog_link-10 -10
changeLog_link-11 -11
changeLog_link-12 -12
changeLog_link-13 -13
changeLog_link-14 -14
changeLog_link-15 -15
changeLog_link-16 -16
changeLog_link-17 -17
changeLog_link-18 -18
fw_link-01 -1
fw_link-02 -2
fw_link-03 -3
fw_link-04 -4
fw_link-05 -5
fw_link-06 -6
fw_link-07 -7
fw_link-08 -8
fw_link-09 -9
fw_link-10 -10
fw_link-11 -11
fw_link-12 -12
fw_link-13 -13
fw_link-14 -14
fw_link-15 -15
fw_link-16 -16
fw_link-17 -17
fw_link-18 -18
requestReadings:
update:
changeLog_link-01 reading 02-1
changeLog_link-02 reading 02-2
changeLog_link-03 reading 02-3
changeLog_link-04 reading 02-4
changeLog_link-05 reading 02-5
changeLog_link-06 reading 02-6
changeLog_link-07 reading 02-7
changeLog_link-08 reading 02-8
changeLog_link-09 reading 02-9
changeLog_link-10 reading 02-10
changeLog_link-11 reading 02-11
changeLog_link-12 reading 02-12
changeLog_link-13 reading 02-13
changeLog_link-14 reading 02-14
changeLog_link-15 reading 02-15
changeLog_link-16 reading 02-16
changeLog_link-17 reading 02-17
changeLog_link-18 reading 02-18
fw_link-01 reading 01-1
fw_link-02 reading 01-2
fw_link-03 reading 01-3
fw_link-04 reading 01-4
fw_link-05 reading 01-5
fw_link-06 reading 01-6
fw_link-07 reading 01-7
fw_link-08 reading 01-8
fw_link-09 reading 01-9
fw_link-10 reading 01-10
fw_link-11 reading 01-11
fw_link-12 reading 01-12
fw_link-13 reading 01-13
fw_link-14 reading 01-14
fw_link-15 reading 01-15
fw_link-16 reading 01-16
fw_link-17 reading 01-17
fw_link-18 reading 01-18
sslargs:
Attributes:
alias eQ3
alignTime 00:45
enableControlSet 1
event-on-change-reading .*
event-on-update-reading LAST_ERROR,MATCHED_READINGS
eventMap reread:Neuanfrage
group .Firmware Updates
httpVersion 1.1
model CUL_HM_firmware_update_downloader
reading01AutoNumLen 2
reading01Format https://www.eq-3.de%s
reading01Name fw_link
reading01RegOpt gi
reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
reading02AutoNumLen 2
reading02Name changeLog_link
reading02OExpr $val=~m/(\/downloads\/software\/firmware\/[^"]+)/?"https://www.eq-3.de".$1:"none"
reading02RegOpt gis
reading02Regex (.{300})<a.href="\/downloads\/software\/firmware\/hm[^"]+
readingMaxAge 10
readingMaxAgeReplacementMode delete
requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
room _HM
showError 1
showMatched 1
stateFormat { my $ret ="";;
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;
$ret .= '<div style="text-align:left">';;
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;
$ret .= '<br><br><pre>';;
$ret .= "| device | model | cur_fw | new_fw | release |<br>";;
$ret .= "------------------------------------------------------------------------------------<br>";;
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;
if($check eq "no fw-updates needed!") {
$ret .= '| <b style="color:green">';;
$ret .= sprintf("%-80s",$check);;
$ret .= '</b> |';;
} elsif($check eq "error => no or wrong data from eq3-server!") {
$ret .= '| <b style="color:red">';;
$ret .= sprintf("%-80s",$check);;
$ret .= '</b> |';;
} else {
my @devices = split(',',$check);;
foreach my $devStr (@devices) {
my ($dev,$md,$ofw,$idx_fw,$nfw,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\)$/;;
my $fw_link = ReadingsVal($name,"fw_link-".$idx_fw,"???");;
my $cl_link = ReadingsVal($name,"changeLog_link-".$idx_fw,"???");;
$ret .= '| <b><a href="/fhem?detail='.$dev.'">';;
$ret .= sprintf("%-23s",$dev);;
$ret .= '</a> | ';;
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';;
$ret .= sprintf("%-23s",$md);;
$ret .= '</b> | ';;
$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 .= sprintf("%6s",$ofw);;
$ret .= '</b> | ';;
$ret .= '<a title="download firmware file" href="'.$fw_link.'">';;
$ret .= '<b style="color:red">';;
$ret .= sprintf("%6s",$nfw);;
$ret .= '</b></a> | <b>';;
$ret .= '<a title="open changeLog file" href="'.$cl_link.'"><b style="color:red">' if($cl_link ne "none");;
$ret .= sprintf("%-10s",$date);;
$ret .= '</b></a>' if($cl_link ne "none");;
$ret .= " |<br>";;
}
}
$ret .= '</pre></div>';;
return $ret;;
}
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;;
}
userattr enableControlSet event-on-change-reading event-on-update-reading reading01AutoNumLen reading01Format reading01Name reading01RegOpt reading01RegOpt:s,i,g reading01Regex reading02AutoNumLen reading02Name reading02OExpr reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode readingMaxAgeReplacementMode:text,expression,delete readingMaxAgeReplacementMode:text,reading,internal,expression,delete requestData.* showError showMatched stateFormat userReadings webCmd
verbose 0
webCmd reread
Wo muss ich noch ansetzten damit alle Links geprüft werden und die Updates auch ausgeführt werden?
Es gibt doch mittlerweile ein Template für HTTPMOD: https://forum.fhem.de/index.php/topic,78501.msg974716.html#msg974716
Da sollte myUtils etc. unnötig sein...
Gruß, Joachim
Zitat von: Burny4600 am 19 Oktober 2019, 20:39:38
Eine Verständnisfrage habe ich zum Eintrag in der 99_myUtils.pm der userReadings und stateFormat Definition laut Wiki.
....
Warum definiert man diese in der 99_myUtils.pm wenn sie ohnehin wieder in die userReadings und stateFormat ausgelagert werden.
Ev. missverstehst Du da was? Im Wiki sind zwei Varianten dargestellt:
Entweder macht man einen Aufruf in die 99_myUtils
oder man kopiert den kompletten Code in die Attribute. Je nach dem wie man es schöner findet.
Und ein Firmware Update macht dieses Anzeige Tool doch nicht? Es zeigt Dir an welche gemacht werden könnten.
Da habe ich wirklich einiges falsch verstanden.
Nur das Tool zeigt mir keine Updates an.
Das sollte es ja auf jedenfall machen.
Hallo Chris,
gib mal bitte ein Beispiel. Ich kann auf Anhieb keines Erkennen, da ich nicht alle Deine Geräte hab.
Gruß Otto
die links der fw für rt (1.5) und tc (1.4) habe ich dir in deinem anderen thread extra rausgesucht, da sie nicht bei eq3 zu finden sind.
@frank
Danke für die Links. Ich werde die Updates bei den Geräten testen ob sich eine Verbesserung ergibt.
@Otto
Das im Wiki zwei unterschiedliche Konfigurationen gibt habe ich verstanden.
Die erste Kurzfassung mit der Konfiguration
define eq3test HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
und anschließendem
set eq3test attrTemplate CUL_HM_firmware_update_downloader
vervollständigt die Attribute
list eq3test
Internals:
BUSY 0
CFGFN
DEF https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
FUUID 5dac4614-f33f-21bc-ca77-26bc71a8ded742cb
Interval 604800
LASTSEND 1571571222.46031
MainURL https://www.eq-3.de/ajax/downloads/downloads_eq3.php
MaxAgeEnabled 1
ModuleVersion 3.5.9 - 13.2.2019
NAME eq3test
NOTIFYDEV global
NR 11766
NTFY_ORDER 50-eq3test
STATE <div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => ???<br><br><pre>| device | model | cur_fw | new_fw | release |<br>------------------------------------------------------------------------------------<br>| <b style="color:red">error => no or wrong data from eq3-server! </b> |</pre></div>
TRIGGERTIME 1572129900
TRIGGERTIME_FMT 2019-10-27 00:45:00
TYPE HTTPMOD
TimeAlign 1571525100
TimeAlignFmt 2019-10-20 00:45:00
addr https://www.eq-3.de:443
auth 0
code 200
compress 1
conn
data
displayurl https://www.eq-3.de/ajax/downloads/downloads_eq3.php
header
host www.eq-3.de
httpheader HTTP/1.1 200 OK
Date: Sun, 20 Oct 2019 11:33:43 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9
X-Powered-By: PHP/7.1.15
Strict-Transport-Security: max-age=15768000
Connection: close
Content-Type: text/html; charset=UTF-8
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /ajax/downloads/downloads_eq3.php
protocol https
redirects 0
timeout 2
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
QUEUE:
READINGS:
REQUEST:
data
header
ignoreredirects 0
retryCount 0
type update
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
sslargs:
Attributes:
alignTime 00:45
enableControlSet 1
event-on-change-reading .*
event-on-update-reading LAST_ERROR,MATCHED_READINGS
httpVersion 1.1
model CUL_HM_firmware_update_downloader
reading01AutoNumLen 2
reading01Format https://www.eq-3.de%s
reading01Name fw_link
reading01RegOpt gi
reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
reading02AutoNumLen 2
reading02Name changeLog_link
reading02OExpr $val=~m/(\/downloads\/software\/firmware\/[^"]+)/?"https://www.eq-3.de".$1:"none"
reading02RegOpt gis
reading02Regex (.{300})<a.href="\/downloads\/software\/firmware\/hm[^"]+
readingMaxAge 10
readingMaxAgeReplacementMode delete
requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
room CUL_HM
showError 1
showMatched 1
stateFormat { my $ret ="";;
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;
$ret .= '<div style="text-align:left">';;
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;
$ret .= '<br><br><pre>';;
$ret .= "| device | model | cur_fw | new_fw | release |<br>";;
$ret .= "------------------------------------------------------------------------------------<br>";;
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;
if($check eq "no fw-updates needed!") {
$ret .= '| <b style="color:green">';;
$ret .= sprintf("%-80s",$check);;
$ret .= '</b> |';;
} elsif($check eq "error => no or wrong data from eq3-server!") {
$ret .= '| <b style="color:red">';;
$ret .= sprintf("%-80s",$check);;
$ret .= '</b> |';;
} else {
my @devices = split(',',$check);;
foreach my $devStr (@devices) {
my ($dev,$md,$ofw,$idx_fw,$nfw,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\)$/;;
my $fw_link = ReadingsVal($name,"fw_link-".$idx_fw,"???");;
my $cl_link = ReadingsVal($name,"changeLog_link-".$idx_fw,"???");;
$ret .= '| <b><a href="/fhem?detail='.$dev.'">';;
$ret .= sprintf("%-23s",$dev);;
$ret .= '</a> | ';;
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';;
$ret .= sprintf("%-23s",$md);;
$ret .= '</b> | ';;
$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 .= sprintf("%6s",$ofw);;
$ret .= '</b> | ';;
$ret .= '<a title="download firmware file" href="'.$fw_link.'">';;
$ret .= '<b style="color:red">';;
$ret .= sprintf("%6s",$nfw);;
$ret .= '</b></a> | <b>';;
$ret .= '<a title="open changeLog file" href="'.$cl_link.'"><b style="color:red">' if($cl_link ne "none");;
$ret .= sprintf("%-10s",$date);;
$ret .= '</b></a>' if($cl_link ne "none");;
$ret .= " |<br>";;
}
}
$ret .= '</pre></div>';;
return $ret;;
}
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;;
}
userattr enableControlSet event-on-change-reading event-on-update-reading reading01AutoNumLen reading01Format reading01Name reading01RegOpt reading01RegOpt:s,i,g reading01Regex reading02AutoNumLen reading02Name reading02OExpr reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode readingMaxAgeReplacementMode:text,expression,delete readingMaxAgeReplacementMode:text,reading,internal,expression,delete requestData.* showError showMatched stateFormat userReadings webCmd
webCmd reread
Mir ist aufgefallen, dass die Commandref Anleitung zu
set eq3 attrTemplate CUL_HM_firmware_update_downloader
als Information nicht korrekt ist.
Bei der Variante mit der manuellen Konfiguration.
list eQ3
Internals:
BUSY 0
CFGFN /media/hdd/fhem/mycfg/HM/hm_rasp01.cfg
DEF https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
FUUID 5c45b04f-f33f-f4d2-e8ac-6e95ed4c33510da6
Interval 604800
LASTSEND 1571572157.87573
MainURL https://www.eq-3.de/ajax/downloads/downloads_eq3.php
MaxAgeEnabled 1
ModuleVersion 3.5.9 - 13.2.2019
NAME eQ3
NOTIFYDEV global
NR 4212
NTFY_ORDER 50-eQ3
STATE <div style="text-align:left">last <a title="eq3-downloads" href="https://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => 2019-10-20 13:49:20<br><br><pre>| device | model | cur_fw | new_fw | release |<br>------------------------------------------------------------------------------------<br>| <b style="color:green">no fw-updates needed! </b> |</pre></div>
TRIGGERTIME 1572129900
TRIGGERTIME_FMT 2019-10-27 00:45:00
TYPE HTTPMOD
TimeAlign 1571525100
TimeAlignFmt 2019-10-20 00:45:00
addr https://www.eq-3.de:443
auth 0
buf
code 200
compress 1
conn
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
displayurl https://www.eq-3.de/ajax/downloads/downloads_eq3.php
header
host www.eq-3.de
httpheader HTTP/1.1 200 OK
Date: Sun, 20 Oct 2019 11:49:19 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9
X-Powered-By: PHP/7.1.15
Strict-Transport-Security: max-age=15768000
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
httpversion 1.1
hu_blocking 0
hu_filecount 4
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /ajax/downloads/downloads_eq3.php
protocol https
redirects 0
timeout 2
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
QUEUE:
READINGS:
2019-10-20 13:23:12 LAST_ERROR read from https://www.eq-3.de:443 timed out
2019-10-20 13:49:20 LAST_REQUEST update
2019-10-20 13:49:20 MATCHED_READINGS fw_link-01 fw_link-02 fw_link-03 fw_link-04 fw_link-05 fw_link-06 fw_link-07 fw_link-08 fw_link-09 fw_link-10 fw_link-11 fw_link-12 fw_link-13 fw_link-14 fw_link-15 fw_link-16 fw_link-17 fw_link-18 changeLog_link-01 changeLog_link-02 changeLog_link-03 changeLog_link-04 changeLog_link-05 changeLog_link-06 changeLog_link-07 changeLog_link-08 changeLog_link-09 changeLog_link-10 changeLog_link-11 changeLog_link-12 changeLog_link-13 changeLog_link-14 changeLog_link-15 changeLog_link-16 changeLog_link-17 changeLog_link-18
2019-10-20 13:49:20 UNMATCHED_READINGS
2019-10-20 13:49:20 changeLog_link-01 https://www.eq-3.de/downloads/software/firmware/changelog_HM-ES-TX-WM_update_V2_2_190619_1.txt
2019-10-20 13:49:20 changeLog_link-02 https://www.eq-3.de/downloads/software/firmware/changelog_hm-mod-re-8_update_v1_2_150911.txt
2019-10-20 13:49:20 changeLog_link-03 https://www.eq-3.de/downloads/software/firmware/changelog_hm_dis_ep_wm55_update_v1_2_170129.txt
2019-10-20 13:49:20 changeLog_link-04 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-bl1pbu-fm_update_v2_11_1_161212.txt
2019-10-20 13:49:20 changeLog_link-05 https://www.eq-3.de/downloads/software/firmware/changelog_hm-es-pmsw1-pl-dn-r1_update_v2_5_0009_150217.txt
2019-10-20 13:49:20 changeLog_link-06 https://www.eq-3.de/downloads/software/firmware/changelog_hm-sen-mdir-wm55_update_v1_2_0_160825.txt
2019-10-20 13:49:20 changeLog_link-07 https://www.eq-3.de/downloads/software/firmware/changelog_hm-es-tx-wm_update_v1_2_160628.txt
2019-10-20 13:49:20 changeLog_link-08 https://www.eq-3.de/downloads/software/firmware/changelog_hm-ou-cfm-tw_update_v1_3_160620.txt
2019-10-20 13:49:20 changeLog_link-09 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-dim1t-pl-3_update_v2_9_0005_160113.txt
2019-10-20 13:49:20 changeLog_link-10 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-dim1l-pl-3_update_v2_9_0007_160113.txt
2019-10-20 13:49:20 changeLog_link-11 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-dim1tpbu-fm_update_v2_9_0005_160113.txt
2019-10-20 13:49:20 changeLog_link-12 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-dim1pwm-cv_update_v2_9_0005_160113g.txt
2019-10-20 13:49:20 changeLog_link-13 https://www.eq-3.de/downloads/software/firmware/changelog_hm_tc_it_wm_w_eu_update_v1_3_002_150827.txt
2019-10-20 13:49:20 changeLog_link-14 https://www.eq-3.de/downloads/software/firmware/changelog_hm-lc-sw1pbu-fm.txt
2019-10-20 13:49:20 changeLog_link-15 none
2019-10-20 13:49:20 changeLog_link-16 none
2019-10-20 13:49:20 changeLog_link-17 none
2019-10-20 13:49:20 changeLog_link-18 none
2019-10-20 13:49:20 fw_link-01 https://www.eq-3.de/downloads/software/firmware/HM-ES-TX-WM_update_V2_2_190619_1.tgz
2019-10-20 13:49:20 fw_link-02 https://www.eq-3.de/downloads/software/firmware/hm-mod-re-8_update_v1_2_150911.tgz
2019-10-20 13:49:20 fw_link-03 https://www.eq-3.de/downloads/software/firmware/hm_dis_ep_wm55_update_v1_2_170129.tgz
2019-10-20 13:49:20 fw_link-04 https://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_11_1_161212.tgz
2019-10-20 13:49:20 fw_link-05 https://www.eq-3.de/downloads/software/firmware/hm-es-pmsw1-pl-dn-r1_update_v2_5_0009_150217.tgz
2019-10-20 13:49:20 fw_link-06 https://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_2_0_160825.tgz
2019-10-20 13:49:20 fw_link-07 https://www.eq-3.de/downloads/software/firmware/hm-es-tx-wm_update_v1_2_160628.tgz
2019-10-20 13:49:20 fw_link-08 https://www.eq-3.de/downloads/software/firmware/hm-ou-cfm-tw_update_v1_3_160620.tgz
2019-10-20 13:49:20 fw_link-09 https://www.eq-3.de/downloads/software/firmware/hm-lc-dim1t-pl-3_update_v2_9_0005_150730.tar.gz
2019-10-20 13:49:20 fw_link-10 https://www.eq-3.de/downloads/software/firmware/hm-lc-dim1l-pl-3_update_v2_9_0007_150803.tar.gz
2019-10-20 13:49:20 fw_link-11 https://www.eq-3.de/downloads/software/firmware/hm-lc-dim1tpbu-fm_update_v2_9_0005_150730.tar.gz
2019-10-20 13:49:20 fw_link-12 https://www.eq-3.de/downloads/software/firmware/hm-lc-dim1pwm-cv_update_v2_9_0005_150730.tar.gz
2019-10-20 13:49:20 fw_link-13 https://www.eq-3.de/downloads/software/firmware/hm_tc_it_wm_w_eu_update_v1_3_002_150827.tgz
2019-10-20 13:49:20 fw_link-14 https://www.eq-3.de/downloads/software/firmware/hm-lc-sw1pbu-fm_update_v2_8_2_150713.tgz
2019-10-20 13:49:20 fw_link-15 https://www.eq-3.de/downloads/software/firmware/hm-sen-mdir-wm55_update_v1_1_2_150413.tgz
2019-10-20 13:49:20 fw_link-16 https://www.eq-3.de/downloads/software/firmware/hm_cc_rt_dn_update_v1_4_001_141020.tgz
2019-10-20 13:49:20 fw_link-17 https://www.eq-3.de/downloads/software/firmware/hm-sen-rd-o_update_v1_4_003_130930.tgz
2019-10-20 13:49:20 fw_link-18 https://www.eq-3.de/downloads/software/firmware/hm-lc-bl1pbu-fm_update_v2_3_0002_131204.tgz
2019-10-20 13:49:20 newFwForDevices no fw-updates needed!
REQUEST:
data suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
header
ignoreredirects 0
retryCount 0
type update
url https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value 0
defptr:
readingBase:
changeLog_link-01 reading
changeLog_link-02 reading
changeLog_link-03 reading
changeLog_link-04 reading
changeLog_link-05 reading
changeLog_link-06 reading
changeLog_link-07 reading
changeLog_link-08 reading
changeLog_link-09 reading
changeLog_link-10 reading
changeLog_link-11 reading
changeLog_link-12 reading
changeLog_link-13 reading
changeLog_link-14 reading
changeLog_link-15 reading
changeLog_link-16 reading
changeLog_link-17 reading
changeLog_link-18 reading
fw_link-01 reading
fw_link-02 reading
fw_link-03 reading
fw_link-04 reading
fw_link-05 reading
fw_link-06 reading
fw_link-07 reading
fw_link-08 reading
fw_link-09 reading
fw_link-10 reading
fw_link-11 reading
fw_link-12 reading
fw_link-13 reading
fw_link-14 reading
fw_link-15 reading
fw_link-16 reading
fw_link-17 reading
fw_link-18 reading
readingNum:
changeLog_link-01 02
changeLog_link-02 02
changeLog_link-03 02
changeLog_link-04 02
changeLog_link-05 02
changeLog_link-06 02
changeLog_link-07 02
changeLog_link-08 02
changeLog_link-09 02
changeLog_link-10 02
changeLog_link-11 02
changeLog_link-12 02
changeLog_link-13 02
changeLog_link-14 02
changeLog_link-15 02
changeLog_link-16 02
changeLog_link-17 02
changeLog_link-18 02
fw_link-01 01
fw_link-02 01
fw_link-03 01
fw_link-04 01
fw_link-05 01
fw_link-06 01
fw_link-07 01
fw_link-08 01
fw_link-09 01
fw_link-10 01
fw_link-11 01
fw_link-12 01
fw_link-13 01
fw_link-14 01
fw_link-15 01
fw_link-16 01
fw_link-17 01
fw_link-18 01
readingOutdated:
readingSubNum:
changeLog_link-01 -1
changeLog_link-02 -2
changeLog_link-03 -3
changeLog_link-04 -4
changeLog_link-05 -5
changeLog_link-06 -6
changeLog_link-07 -7
changeLog_link-08 -8
changeLog_link-09 -9
changeLog_link-10 -10
changeLog_link-11 -11
changeLog_link-12 -12
changeLog_link-13 -13
changeLog_link-14 -14
changeLog_link-15 -15
changeLog_link-16 -16
changeLog_link-17 -17
changeLog_link-18 -18
fw_link-01 -1
fw_link-02 -2
fw_link-03 -3
fw_link-04 -4
fw_link-05 -5
fw_link-06 -6
fw_link-07 -7
fw_link-08 -8
fw_link-09 -9
fw_link-10 -10
fw_link-11 -11
fw_link-12 -12
fw_link-13 -13
fw_link-14 -14
fw_link-15 -15
fw_link-16 -16
fw_link-17 -17
fw_link-18 -18
requestReadings:
update:
changeLog_link-01 reading 02-1
changeLog_link-02 reading 02-2
changeLog_link-03 reading 02-3
changeLog_link-04 reading 02-4
changeLog_link-05 reading 02-5
changeLog_link-06 reading 02-6
changeLog_link-07 reading 02-7
changeLog_link-08 reading 02-8
changeLog_link-09 reading 02-9
changeLog_link-10 reading 02-10
changeLog_link-11 reading 02-11
changeLog_link-12 reading 02-12
changeLog_link-13 reading 02-13
changeLog_link-14 reading 02-14
changeLog_link-15 reading 02-15
changeLog_link-16 reading 02-16
changeLog_link-17 reading 02-17
changeLog_link-18 reading 02-18
fw_link-01 reading 01-1
fw_link-02 reading 01-2
fw_link-03 reading 01-3
fw_link-04 reading 01-4
fw_link-05 reading 01-5
fw_link-06 reading 01-6
fw_link-07 reading 01-7
fw_link-08 reading 01-8
fw_link-09 reading 01-9
fw_link-10 reading 01-10
fw_link-11 reading 01-11
fw_link-12 reading 01-12
fw_link-13 reading 01-13
fw_link-14 reading 01-14
fw_link-15 reading 01-15
fw_link-16 reading 01-16
fw_link-17 reading 01-17
fw_link-18 reading 01-18
sslargs:
Attributes:
alias eQ3
alignTime 00:45
enableControlSet 1
event-on-change-reading .*
event-on-update-reading LAST_ERROR,MATCHED_READINGS
eventMap reread:Neuanfrage
group .Firmware Updates
httpVersion 1.1
model CUL_HM_firmware_update_downloader
reading01AutoNumLen 2
reading01Format https://www.eq-3.de%s
reading01Name fw_link
reading01RegOpt gi
reading01Regex <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
reading02AutoNumLen 2
reading02Name changeLog_link
reading02OExpr $val=~m/(\/downloads\/software\/firmware\/[^"]+)/?"https://www.eq-3.de".$1:"none"
reading02RegOpt gis
reading02Regex (.{300})<a.href="\/downloads\/software\/firmware\/hm[^"]+
readingMaxAge 10
readingMaxAgeReplacementMode delete
requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
room CUL_HM,_HM
showError 1
showMatched 1
stateFormat {eq3StateFormat($name)}
userReadings newFwForDevices:MATCHED_READINGS:.* {eq3Attr($name)}
userattr enableControlSet event-on-change-reading event-on-update-reading reading01AutoNumLen reading01Format reading01Name reading01RegOpt reading01RegOpt:s,i,g reading01Regex reading02AutoNumLen reading02Name reading02OExpr reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode readingMaxAgeReplacementMode:text,expression,delete readingMaxAgeReplacementMode:text,reading,internal,expression,delete requestData.* showError showMatched stateFormat userReadings webCmd
verbose 0
webCmd reread
Bei beiden Konfiguration gibt es drei Links wo meine Gerätetypen vorhanden sind.
HM-OU-CFM-TW
HM-LC-SW1PBU-FM
HM-SEN-RD-O
Ich bin davon ausgegangen das zumindest diese drei Typen auch geprüft werden und auch bei dem Prüftool angezeigt werden.
Die restlichen Gerätetypen sind nicht in der Überprüfung vorhanden. Ist halt so.
Wie findet man die eQ3 Firmware die nicht auf der öffentklichen Seite angeführt werden?
Danke für den Hinweis, ich habe das im Wiki korrigiert :D
@Beta-User
Hallo,
unten habe ich eine leicht angepasste template-Version für
CUL_HM_firmware_update_downloader bereitgestellt:
- Attribut userattr wurde verändert:
- viele unnütze Attributnamen (z.B. event-on-change-reading) gelöscht, da sie zum Standard gehören.
- sämtliche reading02-Attributnamen (z.B. reading02Name) ergänzt, da sie nicht zum Standard gehören und somit fehlten.
- da es aktuell (wohl) ein Problem mit readingMaxAgeReplacementMode gibt, wurde der parameterlose Attributname gelöscht - die parametriesierte Variante für den gleichen Attributnamen blieb erhalten. Das Problem ist auch der Grund, warum die userattr-Zuweisung ans Template-Ende gewandert ist; letztlich wird der fehlerhaft generierte Attributwert im finalen Schritt noch einmal korrigiert.
- Attribut stateFormat wurde verändert:
- für die erste Spalte (device) fehlte der abschließende b-Tag.
- die letzte Spalte (release) hatte ein überflüssiges, öffnendes b-Tag.
- alle Spalten werden fett und normalerweise in lightgray dargestellt. Andersfarbig wird ein Eintrag nur dann, wenn er anklickbar ist oder einen Hinweis darstellt.
Vielleicht finden die Änderungen so oder so ähnlich ihren Weg ins offizielle Update ...
Viele Grüße
#################################
#Show updates for CUL_HM devices, Forum: https://forum.fhem.de/index.php/topic,78501.msg972144.html#msg972144
name:CUL_HM_firmware_update_downloader
filter:TYPE=HTTPMOD
desc: Check eQ3 homepage for available new firmware files; provides also links for direct downloads<br>Define a HTTPMOD device like <br>define eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800<br><a href="https://https://forum.fhem.de/index.php/topic,78501.msg972144.html#msg972144">Source: Forum</a><br><a href="https://wiki.fhem.de/wiki/HomeMatic_Firmware_Update#Basis-Definitionen_f.C3.BCr_Device_eq3">Wiki</a>
order:X_01a
par:WHICHROOM;Actual room of the device; {AttrVal("DEVICE","room","CUL_HM" )}
defmod DEVICE HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
attr DEVICE alignTime 00:45
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 <a.href="(\/downloads\/software\/firmware\/hm[^"]+)
attr DEVICE reading02AutoNumLen 2
attr DEVICE reading02Name changeLog_link
attr DEVICE reading02OExpr $val=~m/(\/downloads\/software\/firmware\/[^"]+)/?"https://www.eq-3.de".$1:"none"
attr DEVICE reading02RegOpt gis
attr DEVICE reading02Regex (.{300})<a.href="\/downloads\/software\/firmware\/hm[^"]+
attr DEVICE readingMaxAge 10
attr DEVICE readingMaxAgeReplacementMode delete
attr DEVICE requestData.* suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
attr DEVICE room WHICHROOM
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="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;\
$ret .= '<br><br><pre>';;\
$ret .= "| device | model | cur_fw | new_fw | release |<br>";;\
$ret .= "------------------------------------------------------------------------------------<br>";;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;\
if($check eq "no fw-updates needed!") {\
$ret .= '| <b style="color:green">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b> |';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;\
$ret .= sprintf("%-80s",$check);;\
$ret .= '</b> |';;\
} else {\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$md,$ofw,$idx_fw,$nfw,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\)$/;;\
my $fw_link = ReadingsVal($name,"fw_link-".$idx_fw,"???");;\
my $cl_link = ReadingsVal($name,"changeLog_link-".$idx_fw,"???");;\
$ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
$ret .= sprintf("%-23s",$dev);;\
$ret .= '</b></a> | ';;\
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray"').'>';;\
$ret .= sprintf("%-23s",$md);;\
$ret .= '</b> | ';;\
$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 .= sprintf("%6s",$ofw);;\
$ret .= '</b> | ';;\
$ret .= '<a title="download firmware file" href="'.$fw_link.'"><b style="color:red">';;\
$ret .= sprintf("%6s",$nfw);;\
$ret .= '</b></a> | ';;\
$ret .= (($cl_link ne "none")?'<a title="open changeLog file" href="'.$cl_link.'"><b style="color:black">':'<b style="color:lightgray">');;\
$ret .= sprintf("%-10s",$date);;\
$ret .= (($cl_link ne "none")?'</b></a>':'</b>');;\
$ret .= " |<br>";;\
}\
}\
$ret .= '</pre></div>';;\
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
attr DEVICE model CUL_HM_firmware_update_downloader
attr DEVICE userattr reading01AutoNumLen reading01Format reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02OExpr reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete
Ich finde das mit den Templates ja grandios!
Vielen Dank dafür!
Allerdings habe ich eine Frage:
wenn es ein Update gibt und ich fhem update...
...wird dann automatisch das neue Template aktiv/aktiviert (also klar ich muss es mind. schon einmal wo verwendet haben ;) )?
Oder was muss ich tun, damit ich die Neuerung(en) des Templates nach update "erhalte"!?
(und wenn ich manuell was tun muss: wie bekomme ich mit, dass es für eines von mir verwendeter Templates ein Update gibt?)
Danke, Joachim
Danke für die Rückmeldung zum Thema attrTemplate :) .
Finde auch super, was Rudi da als Framework bereitgestellt hat!
ABER: Es funktioniert nichts automatisch, attrTemplate wird nur auf User-Initiative aktiv (es ist ein Eingriff in die Konfiguration! Attribute - dafür ist es eigentlich gemacht - gehören qua Definition dem user...). Und ich habe nicht bei allen template-Änderungen zu großen Wert auf Rückwärtskompabilität gelegt (in der Regel ist das aber auch kein Problem, das betraf tendenziell die Anfangszeit bei den Tasmotas, jetzt evtl. mal die zigbee2mqtt-Geschichten, weil ich am Überlegne bin, ob z.B. beim contact-Sensor nicht "contact" zu "state" werden sollte).
Um updates zu verfolgen, hilft (zumindest derzeit) nur der Blick in das Changelog des betreffenden template-files, Versionsangaben usw. werden derzeit nicht gepflegt und können auch nicht ausgewertet werden.
"An sich" sollte es auch so sein, dass das Device nach Anwendung des templates dann so ist, wie du dir das vorstellst (bzw. du dann auf der Basis weitermachst), also gar kein Bedarf besteht, das nochmal anzufassen...
@OdfFhem: Thx, werde das testen, sieht nach einem sinnvollen Vorschlag aus. Wenn jemand anderes nach Test sein OK gibt, kommt's auch gerne direkt in's svn.
(Btw. @all: ich bin nach wie vor nicht der Regex- oder HTTPMOD-Experte, wenn also jemand da (v.a. für HTTPMOD mit) als Maintainer einspringen will: sehr gerne! Ich habe bisher auch eher "kuratiert" als "developer" gespielt, vielleicht abgesehen von ein paar Anregungen, die Rudi dann in Code umgewandelt hat... ::) . Das ganze ist also kein Hexenwerk, und man kann eigentlich auch keine laufende Installation ohne weiteres mit templates "zerschießen", s.o.. Höchstens mal eben nicht funktionierenden Konfigurationscode ausliefern, was mir schon gelegentlich untergekommen ist ::) ::) ::) ...)
update ist im svn.
Guten Morgen,
ich bin zufällig über diesen Thread gestolpert. Ich habe irgendwann mal das alte Beispiel im Wiki probiert, da kam aber (wie hier am Anfang geschrieben) eine Fehlermeldung. Hab das Device dann gelöscht und nicht mehr drüber nachgedacht. Hab dann, nachdem ich den Thread hier gelesen habe, noch mal einen neuen Versuch gestartet mit
define eq3 HTTPMOD https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
und dann laut Wiki
set eq3 attrTemplate X_01a_CUL_HM_firmware_update_downloader
Wenn ich das richtig verstehe im Wiki sind die Skripts in der myUtils nicht mehr nötig?
Auf jeden Fall meldet jetzt das Device keinen Fehler meld, sondern
no fw-updates needed!
Ich hab jetzt nicht so viele verschiedene original HM Geräte, vor allem aber die HM-LC-BI1BPU-FM.
Laut Device-Reading habe ich die D-firmware2.11
auf den Aktoren, laut eq3 Seite gibt es aber schon eine 2.3 FW
Habe ich da noch was vergessen, das er die neue FW nicht erkennt?
Zitat von: Kai-Alfonso am 11 November 2019, 09:48:04
Laut Device-Reading habe ich die D-firmware2.11
auf den Aktoren, laut eq3 Seite gibt es aber schon eine 2.3 FW
Habe ich da noch was vergessen, das er die neue FW nicht erkennt?
Moin. MMn ist alles bestens, oder ist 2.11 nicht größer wie 2.3? (Kann sein, dass es auf der eQ3-Seite mehrere Firmwares gibt, aber schau ggf. auch mal das 2.11-er changelog an.)
Alles gut so. 2.11 ist die Letzte :) hab ich auch so.
Zitat von: Beta-User am 11 November 2019, 10:15:42
Moin. MMn ist alles bestens, oder ist 2.11 nicht größer wie 2.3? (Kann sein, dass es auf der eQ3-Seite mehrere Firmwares gibt, aber schau ggf. auch mal das 2.11-er changelog an.)
oh man - ja klar, 2.11 ist natürlich höher als 2.3. Hatte da ein Knoten im Hirn.
Bitte weitergehen, hier gibt es nix zu sehen 8) 8) 8)
Kann es sein, das schon wieder etwas geändert worden ist.
Bekomme folgende Meldung
error => no or wrong data from eq3-server!
Gruß Knallkopp_02
wahrscheinlich ist dein httpmod modul zu neu und hat gerade schwierigkeiten mit den regex.
schau mal nach warnings in fhem.log.
ich habe heute welche gesehen.
die anzeige im device habe ich jetzt erst gesehen. funktioniert ja gut. :)
bei mir funktioniert es mit httpmod (3.5.18 - 20.11.2019) und folgender änderung von 4 attributen (regex optionen i und s direkt in die regex einbauen):
attr eq3 reading01RegOpt g
attr eq3 reading01Regex (?i)<a.href="(\/downloads\/software\/firmware\/hm[^"]+)
attr eq3 reading02RegOpt g
attr eq3 reading02Regex (?si)(.{300})<a.href="\/downloads\/software\/firmware\/hm[^"]+
Thx, ist seit eben auch im svn...
Perfekt
ich bins schon wieder,
hätte da noch eine Frage bezüglich der Anzeige.
Wäre es möglich in der Anzeige trotz nicht vorhandenem Update alle Geräte mit deren Daten anzeigen zu lassen?
Beispiel:
device | model | cur_fw | new_fw | release
----------------------------------------------------------------------------------
no fw-updates needed!
----------------------------------------------------------------------------------
Liste aller vorhandenen Geräte
Gruß Knallkopp_02
Quick & Dirty - die if Bedingung im attribut userReadings auskommentieren
attr [HTTPMODNAME] 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;;;;\
}
Hallo,
das auskommentieren hat bei mir nicht den gewünschten Erfolg gebracht.
Viele Grüße
Jürgen
Das Auskommentieren sollte aber für das gewünschte Ergebnis sorgen; es sei denn, man hat keine passenden HM-Komponenten. Wichtig ist natürlich ein erneutes reread.
Haben eq3 hier wieder etwas an Ihrer Webseite verändert?
Die URL https://www.eq-3.de/ajax/downloads/downloads_eq3.php gibt es nicht mehr, dafür nun https://www.eq-3.de/service/downloads.html.
Mit der neuen URL funktioniert aber der Firmware check nicht mehr.
Gruß
Dan
ich denke du bist ziehmlich spät dran.
ist das nicht schon seit wochen so. ;)
mit fhem update solltest du über set attrTemplate alles aktuelle erhalten.
Morgen zusammen,
ich selbst habe grade das attrTemplate neu geladen -> Download der Daten geht.
was für mich aber auch nicht funktioniert ist das auskommentieren des 2. IF wenn man die Liste immer angezeigt haben will wie yersinia geschieben hat.
Gruß Knallkopp_02
[[[EDIT]]] muss mich korregieren, nun wird die Liste angezeigt, nach mehrmaligem neuladen
@betauser:
mir ist gerade der gedanke gekommen, dass es ganz nützlich wäre, wenn in der attrTemplate liste in den einträgen die jeweilige revisionsnummer angehängt wäre.
müsste es doch eigentlich für eingecheckte templates geben, oder nicht?
Hmm, verstehe grade noch nicht ganz, wie du dir das genau vorstellst. Es ist so, dass es eine revisions-Nummer für das ganze file gibt, aber im Moment sehe ich nicht so recht, wie man die "ans device" bringen könnte (so hatte ich die Anregung verstanden). Dazu bräuchte es wohl noch etwas code im attrTemplate-Modul und einen Ort, um das abzulegen (Attribut wie model). Nach model könnte man es zwar schieben, aber dann wäre jede Änderung ein neues model und damit statistics vermutlich kaum mehr zu gebrauchen.
Die Alternative wäre, jede Änderung am einzelnen Template händisch (z.B. nach model) einzupflegen. (Feiwillige vor..., mir "reicht" es auch so, was für mich an Aufwand mit attrTemplate verbunden ist).
(Anm.: wenn es ist wie hier, dass sich z.B. die URL ändert, und das im attrTemplate drin ist, _kann_ man ja auch einfach mal nachsehen, ob sich das template geändert hat (oder einfach austesten, ob was sinnvolles kommt, wenn man das neu drüberklatscht...).
Meistens ist das ansonsten doch eher statisch..
Zitat von: frank am 01 Dezember 2019, 10:49:25
ich denke du bist ziehmlich spät dran.
ist das nicht schon seit wochen so. ;)
mit fhem update solltest du über set attrTemplate alles aktuelle erhalten.
Das verwirrt mich etwas!
Habe ein aktuelles FHEM und über "set eq3 attrTemplate CUL_HM_firmware_update_downloader" das Device aktualisiert. Die URL ist dann "https://www.eq-3.de/ajax/downloads/downloads_eq3.php", also falsch. Ersetze ich diese durch "https://www.eq-3.de/service/downloads.html", funktioniert die Abfrage leider auch nicht.
Wenn es bei Euch funktioniert, woher bekomme ich denn dann so ein funktionierendes Template?
Gruß
Dan
Hmm, komisch, mit der ajax-Seite bekomme ich Daten. (template-file gestern morgen aktualisiert wg. der Kompabilität zu den letzten Versionen von HTTPMOD wie von frank im msg. 998229 vorgeschlagen).
Zitat von: Beta-User am 01 Dezember 2019, 15:18:47
Hmm, komisch, mit der ajax-Seite bekomme ich Daten. (template-file gestern morgen aktualisiert wg. der Kompabilität zu den letzten Versionen von HTTPMOD wie von frank im msg. 998229 vorgeschlagen).
Bei mir wurden seit Ende Oktober keine Daten mehr aktualisiert. Deshalb bin ich da heute drüber gestolpert.
Hab dann heute Vormittag probiert mit manuellem reread und immer keine Daten erhalten - Internetverbindung bestand aber.
Habe eben nochmal ein reread gemacht und bekomme nun wieder aktuellen Daten angezeigt. Keine Ahnung woran es lag.
Danke für's Überprüfen.
Gruß
Dan
Wenn ich das Template aktualisiere, dann wird doch die DEF mit dem ggf evralteten FW-Link nicht aktualisiert, oder? Zumindest war das bei mir bisher der Fall, wenn ich mich recht entsinne...
Das Template startet mit einem defmod, somit sollte also auch das DEF angepasst werden ...
Zitat von: Beta-User am 01 Dezember 2019, 13:44:34
(Anm.: wenn es ist wie hier, dass sich z.B. die URL ändert, und das im attrTemplate drin ist, _kann_ man ja auch einfach mal nachsehen, ob sich das template geändert hat (oder einfach austesten, ob was sinnvolles kommt, wenn man das neu drüberklatscht...).
Meistens ist das ansonsten doch eher statisch..
du hast mich richtig verstanden.
händisch eintragen hatte ich natürlich nicht im sinn.
war nur so eine idee, ohne das genaue verfahren zu kennen.
je nach "qualität" der templates kann es gerade zusammen mit httpmod zu schlecht erkennbarer "verminderter datenqualität" kommen. besonders, wenn sich die zu pollenden daten zb im internet selten verändern.
zb könnte jemand auf die idee kommen, die vorhandene zusätzliche datenquelle für eq3 fw-updates (rt und tc) in das template zu integrieren, wodurch die datenqualität der anwendung gesteigert würde.
mit einer echten revisionsnummer im templatenamen, die sogar ggf über userreading überwachbar wäre, könnte sich das device sogar ggf automatisch updaten.
die "schwarmintelligenz" von fhem hätte direkten einfluss auf die datenqualität.
Bei mir werden keine Updates mehr angezeigt (müssten aber, habe paar HM-CC-RT-DN mit v1.4, neuere haben v1.5).
Allerdings finde ich auch bei manueller Suche auf https://www.eq-3.de/service/downloads.html keine Firmware-Updates mehr für Homematic Devices außer CCUs. Nehme an, das ist die Ursache? Was nun?
Zitat von: Verkehrsrot am 25 Januar 2020, 16:10:58
Bei mir werden keine Updates mehr angezeigt (müssten aber, habe paar HM-CC-RT-DN mit v1.4, neuere haben v1.5).
Habe nun noch folgenden Fehler in den readings bemerkt, scheinbar klappt der Zugriff auf den eq3-Webserver nicht mehr?
LAST_ERROR
https://www.eq-3.de/ajax/downloads/downloads_eq3.php: Can't connect(2) to https://www.eq-3.de:443: SSL wants a read first
2020-01-25 16:59:49
Bei mir funktioniert das, muss bei Dir was lokales sein?
Hmm, woran liegt es? Ich poste hier mal die Device-Daten, erkennt jemand was?
ZitatBUSY
0
DEF
https://www.eq-3.de/ajax/downloads/downloads_eq3.php 604800
FUUID
5e2c4018-f33f-1fbf-735e-f48a18fe368a981d
Interval
604800
LASTSEND
1579969309.51162
MainURL
https://www.eq-3.de/ajax/downloads/downloads_eq3.php
MaxAgeEnabled
1
ModuleVersion
3.5.21 - 27.12.2019
NAME
eq3
NOTIFYDEV
global
NR
254
NTFY_ORDER
50-eq3
STATE
<div style="text-align:left">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => 2020-01-25 17:21:49<br><br><pre>| device | model | cur_fw | new_fw | release |<br>------------------------------------------------------------------------------------<br>| <b style="color:green">no fw-updates needed! </b> |</pre></div>
TRIGGERTIME
1580514300
TRIGGERTIME_FMT
2020-02-01 00:45:00
TYPE
HTTPMOD
TimeAlign
1579909500
TimeAlignFmt
2020-01-25 00:45:00
addr
https://www.eq-3.de:443
auth
0
buf
code
200
compress
1
conn
data
suchbegriff=&quelle=29&suchkategorie=3&themenbereich=1
displayurl
https://www.eq-3.de/ajax/downloads/downloads_eq3.php
header
host
www.eq-3.de
httpheader
HTTP/1.1 200 OK
Date: Sat, 25 Jan 2020 16:21:49 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9
X-Powered-By: PHP/7.1.15
Strict-Transport-Security: max-age=15768000
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
httpversion
1.1
hu_blocking
0
hu_filecount
1
hu_port
443
hu_portSfx
ignoreredirects
0
loglevel
4
path
/ajax/downloads/downloads_eq3.php
protocol
https
redirects
0
timeout
2
url
https://www.eq-3.de/ajax/downloads/downloads_eq3.php
value
0
Mit dem Template gibt es seit heute (Featurelevel 6) ein neues "Problem"
Zitatbad attribute name requestData.* (contains not A-Za-z/\d_\.- or is too long)
So richtig zuordnen kann ich es noch nicht.
Gruß Otto
entferne mal ".*" bei attr requestdata.
Ja da geht es auf den ersten Blick. Allerdings funktioniert irgendwas nicht mehr. Es gibt kaum noch Firmwarelinks.
mein letzter poll vom 15.1. zeigt 19 links.
ich kann gerade nichts weiter testen.
Ja, ich behaupte mal am Freitag/Samstag ging bei mir auch noch alles.
Diese Fehlermeldung gab es bei anderen HTTPMOD-Geräten auch, müßte den Thread suchen...
Scheinbar ist das dort aber nur eine einmalige Meldung gewesen, die bei späteren Starts verschwunden war (?).
Muß bei Gelegenheit auch mal testen...
Naja ich denke dieser Name requestData.* ist falsch.
Er steht so im Wiki im Template und ist wahrscheinlich historisch durchgeschleift. Ich verstehe allerdings nicht so richtig was er tut und ob es vielelicht
requestData .*
heissen muss, oder ob das .* wirklich einfach weg muss.
vermutlich hast du recht, dass das ".*" einfach weg muß, aber das Attribut an sich bleiben... Jedenfalls liest sich die commandref zu HTTPMOD so.
Vermutlich hat das ganze was damit zu tun, welche Attribute HTTPMOD zuläßt, und da sind zum Teil regex-Auswertungen drin, die dann auch in der Auswahlliste der setzbaren Attribute auftauchen. Schätze, so ist das da reingewandert?
Zitat von: Beta-User am 28 Januar 2020, 11:35:16
... Schätze, so ist das da reingewandert?
Vermute ich auch :) hat vielleicht nie gestört und auch nichts gemacht?
Rudi hats gemerkt ;)
Hab's jetzt auch aus dem template entfernt, nachdem das Ergebnis bei mir dasselbe war: no updates...
Ich hatte aber extra nicht alle updates ausgeführt, um noch testen zu können. Da aber auch die Auswahl beschränkt ist, wenn man über die normale Seite kommt (https://www.eq-3.de/service/downloads.html), entspricht das den von eQ-3 gesetzten Realitäten... (die regen mich auf! Was soll das?!?). Zum Glück sollte ich die aktuelleren firmwares zum größeren Teil irgendwo noch runtergeladen haben...
Zitat von: Otto123 am 27 Januar 2020, 22:49:32
Ja da geht es auf den ersten Blick. Allerdings funktioniert irgendwas nicht mehr. Es gibt kaum noch Firmwarelinks.
Das scheint mir daran zu liegen, dass man es auf der eq3 Download Webseite kaum noch welche gibt, sie sind dort verschwunden.
Naja nach vier Jahren, die die dort mindestens lagen, sollte ja jeder ein update gemacht haben. Das ist sicher auch der Anfang vom Support Ende für Classic :'(
uuh... die sind ja wirklich alle weg. Merde! Hätte ich mir mal alle auf Halde gelegt.
Weiß jemand alternative Quellen?
Zitat von: Pfriemler am 29 Januar 2020, 13:44:37
Weiß jemand alternative Quellen?
Man sollte den Entscheidern bei eQ-3 v.a. rückmelden, dass man in dieser Community hier eine transparentere Update-policy (RT-DN+1.5?) wünschen würde. (Gab es da nicht neulich eine von Rudi verbreitete Einladung zu einem Usertreff, bei dem der Wert der Community hier sehr hoch gehangen wurde...?)
Das "inoffizielle" Tauschen könnte ein copyright-Problem sein, vielleicht bekommt man auf eine kitische Rückfrage von diesem Unternehmen eventuell ja auch die "schlichte" Rückmeldung, dass mal wieder irgendein Umbau im Gange ist und man das asap reparieren wird (iVm. einem Gutscheinchen für's Melden des Problems?!?).
(Im Ernst: ich sehe meinen Entschluss bestätigt, bis auf weiteres nichts mehr von denen zu kaufen!)
[OT] Überhaupt updates: Auch manch anderem Hersteller/Zwischenhändler stünde da etwas mehr Entgegenkommen/Transparenz gut zu Gesicht. (ungeprüft) ein paar Beispiele aus dem Kopf:
Negativ:
fibaro bzgl. Z-Wave, Philips (bzgl. zigbee ohne Hue-Bridge), dto. für innr und Xiaomi, wenn es ohne deren ZigBee-Bridge gehen soll...
Positiv:
Osram und Ikea @ZigBee, scheint beides mit deconz zu laufen...
Vielleicht sollte man mal eine Seite aufmachen, wo man solche Infos abliefern kann, auch wenn sich grade mal irgendwo wieder der (unternehmenspolitische) Wind dreht?!?
[/OT]
Zitat von: Pfriemler am 29 Januar 2020, 13:44:37Weiß jemand alternative Quellen?
Dieses Forum? Einige Firmware ist verstreut, zB für HM-CC-RT-DN v1.5 und HM-TC-IT-W-EU v1.4 (https://forum.fhem.de/index.php/topic,93074.msg869315.html#msg869315).
Vielleicht ist es sinnvoll einen eigenen, angepinnten Thread im Homematic-Forum aufzumachen und die HM-fw dort zu sammeln/archivieren. Einige user haben bestimmt auch noch firmware files rumliegen.....
Edit meint, dass ich (neben den zwei verlinkten fw) noch folgende auf dem RasPi habe:
HM-ES-PMSw1-Pl_update_V2_5_0009_150217.eq3
HM-LC-Bl1PBU-FM_update_V2_11_1_161212.eq3
Dieses Skript liefert alle Firmwares (auch die von HM-IP).
https://homematic-forum.de/forum/viewtopic.php?f=27&t=56380#p560319
Wenn man jq (sudo apt-get install jq) nachinstalliert, tut's auch aufm Raspi.
Laut Auskunft im Homematic-Forum werden derzeit alle Firmwares mit erweiterten info.txt versehen, die die erforderlichen Mindest-Versionen für CCU2 und CCU3 listen. Meine soeben heruntergeladenen haben allesamt neuere info.txt, während die Firmware selbst sich mit meinen Backups deckt. Bin noch am Sortieren.
Danke! funktioniert wunderbar!
Gruß
Wolfgang
Zitat von: Pfriemler am 29 Januar 2020, 19:48:52
Dieses Skript liefert alle Firmwares (auch die von HM-IP).
https://homematic-forum.de/forum/viewtopic.php?f=27&t=56380#p560319
Uih, der Link https://update.homematic.com/firmware/api/firmware/search/DEVICE liefert ja anscheinend ein JSON (?):
homematic.com.setDeviceFirmwareVersions([
{"type":"HmIPW-WTH","version":"2.4.6"},
{"type":"HM-LC-Dim1L-Pl-3","version":"2.9.7"},
{"type":"HmIP-STHD","version":"2.2.2"},
{"type":"HmIPW-DRD3","version":"1.0.0"},
{"type":"HmIP-SMO","version":"1.2.8"},
{"type":"HmIP-SWO-PR","version":"1.0.18"},
{"type":"HmIP-FROLL","version":"1.2.0"},
{"type":"HM-LC-Sw1-Pl-DN-R3","version":"2.6.0"},
{"type":"HmIP-SWO-B","version":"1.0.18"},
{"type":"HM-LC-RGBW-WM","version":"1.0.0"},
{"type":"HmIP-SRH","version":"1.2.10"},
{"type":"HmIP-SPI","version":"1.4.0"},
{"type":"HmIP-PDT","version":"1.4.8"},
{"type":"HM-ES-PMSw1-Pl-DN-R3","version":"2.6.0"},
{"type":"HmIP-PSM-IT","version":"2.6.2"},
{"type":"HmIP-PSM","version":"2.6.2"},
{"type":"HmIP-KRCA","version":"1.10.0"},
{"type":"HmIP-PS","version":"2.6.2"},
{"type":"HmIP-MIOB","version":"1.6.4"},
{"type":"HM-CC-RT-DN","version":"1.5.3"},
{"type":"HmIP-BBL","version":"1.6.2"},
{"type":"HM-ES-PMSw1-Pl-DN-R2","version":"2.6.0"},
{"type":"HmIP-PSM-PE","version":"2.6.2"},
{"type":"HM-LC-Dim1T-Pl-3","version":"2.9.5"},
{"type":"HmIP-BSL","version":"1.0.2"},
{"type":"HM-LC-Sw1-Pl-DN-R1","version":"2.6.0"},
{"type":"HmIP-BSM","version":"1.12.6"},
{"type":"HmIP-eTRV-C","version":"1.2.4"},
{"type":"HmIP-PDT-UK","version":"1.4.8"},
{"type":"HmIP-SMI","version":"1.4.8"},
{"type":"HmIP-STH","version":"2.2.0"},
{"type":"HmIP-FDT","version":"1.4.8"},
{"type":"HM-Dis-EP-WM55","version":"1.2.0"},
{"type":"HmIP-SWDO-I","version":"1.16.10"},
{"type":"HM-ES-PMSw1-Pl-DN-R5","version":"2.6.0"},
{"type":"HmIP-WTH-2","version":"2.6.0"},
{"type":"HM-LC-Dim1T-DR","version":"1.1.0"},
{"type":"HM-LC-Sw1-Pl-DN-R4","version":"2.6.0"},
{"type":"HmIPW-STH","version":"2.4.6"},
{"type":"HmIP-WTH","version":"2.4.8"},
{"type":"HM-ES-PMSw1-Pl-DN-R4","version":"2.6.0"},
{"type":"HM-MOD-Re-8","version":"1.2.0"},
{"type":"HmIP-PSM-CH","version":"2.6.2"},
{"type":"HM-LC-Dim1TPBU-FM","version":"2.9.5"},
{"type":"HmIP-FBL","version":"1.8.12"},
{"type":"HmIP-BWTH","version":"1.2.4"},
{"type":"HM-TC-IT-WM-W-EU","version":"1.4.2"},
{"type":"HM-LC-Bl1PBU-FM","version":"2.11.1"},
{"type":"HM-OU-CFM-TW","version":"1.3.0"},
{"type":"HmIP-BWTH","version":"1.2.4"},
{"type":"HmIP-ASIR","version":"1.4.2"},
{"type":"HmIP-FSM","version":"1.6.2"},
{"type":"HmIP-eTRV","version":"2.2.8"},
{"type":"HmIP-BROLL","version":"1.6.2"},
{"type":"HmIP-SMO-A","version":"1.2.8"},
{"type":"HM-LC-Sw1-Pl-DN-R2","version":"2.6.0"},
{"type":"HmIP-eTRV-2","version":"2.2.8"},
{"type":"HmIP-SWDO","version":"1.16.8"},
{"type":"HmIP-PCBS","version":"2.10.2"},
{"type":"HmIP-PCBS2","version":"1.10.10"},
{"type":"HmIP-WTH-2","version":"2.0.2"},
{"type":"HM-LC-Sw1-Pl-DN-R5","version":"2.6.0"},
{"type":"HmIP-WTH","version":"2.2.0"},
{"type":"HmIP-BDT","version":"1.4.8"},
{"type":"HmIP-FSM16","version":"1.6.2"},
{"type":"HmIP-PSM-UK","version":"2.6.2"},
{"type":"HM-ES-PMSw1-Pl-DN-R1","version":"2.6.0"},
{"type":"HmIP-BBL","version":"1.8.10"},
{"type":"HmIPW-STHD","version":"2.4.8"},
{"type":"HM-LC-Dim1PWM-CV","version":"2.9.5"},
{"type":"HmIP-SWO-PL","version":"1.0.18"},
{"type":"HM-Sen-MDIR-WM55","version":"1.2.0"}]);
Das kann man sicher in HTTPMOD auslesen und mittels
https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=[DEVICE] einen link generieren bei Update.
Danke Pfriemler für den Tipp (https://forum.fhem.de/index.php/topic,78501.msg1018712.html#msg1018712).
Ich habe den bestehenden Code angepasst und jetzt funktioniert dies mit dem neuen Link:
defmod hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
attr hm_fw_check userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr hm_fw_check enableControlSet 1
attr hm_fw_check icon hm_ccu
attr hm_fw_check reading01AutoNumLen 2
attr hm_fw_check reading01Name hmfw-type
attr hm_fw_check reading01RegOpt g
attr hm_fw_check reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr hm_fw_check reading02AutoNumLen 2
attr hm_fw_check reading02Name hmfw-version
attr hm_fw_check reading02RegOpt g
attr hm_fw_check reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr hm_fw_check readingMaxAge 10
attr hm_fw_check readingMaxAgeReplacementMode delete
attr hm_fw_check room fw-checks
attr hm_fw_check showError 1
attr hm_fw_check showMatched 1
attr hm_fw_check showNewFWOnly yes
attr hm_fw_check stateFormat { my $ret ="";;;;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;;;\
$ret .= '<div style="text-align:left">';;;;\
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;;;\
$ret .= '<br><br><pre>';;;;\
$ret .= "| device | model | cur_fw | new_fw |<br>";;;;\
$ret .= "------------------------------------------------------------------------------<br>";;;;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;;;\
if($check eq "no fw-updates needed!") {\
$ret .= '| <b style="color:green">';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= '</b> |';;;;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= '</b> |';;;;\
} else {\
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 .= '| <a href="/fhem?detail='.$dev.'" target="_blank"><b>';;;;\
$ret .= sprintf("%-30s",$dev);;;;\
$ret .= '</b></a> | ';;;;\
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow;;"':' style="color:lightgray;;"').'>';;;;\
$ret .= sprintf("%-23s",$md);;;;\
$ret .= '</b> | ';;;;\
$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 .= sprintf("%6s",$ofw);;;;\
$ret .= '</b> | ';;;;\
$ret .= '<a title="download firmware file" href="'.$fw_link.'" target="_blank"><b style="color:red;;">';;;;\
$ret .= sprintf("%6s",$nfw);;;;\
$ret .= '</b></a> | ';;;;\
$ret .= "<br />";;;;\
}\
}\
$ret .= '</pre></div>';;;;\
return $ret;;;;\
}
attr hm_fw_check userReadings newFwForDevices:MATCHED_READINGS.* {\
my $ret = "";;;;\
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;;;\
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
my @eq3FwList = map { \
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);;;;\
foreach my $newFW (grep m/^${md}:/i,@eq3FwList) {\
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.")";;;;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;;;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;;;\
}
attr hm_fw_check webCmd reread
Ich habe ein userAttr showNewFWOnly eingepflegt, default ist yes. Setzt man dies auf no werden immer alle gefundenen firmware-versionen angezeigt - ansonsten -im default- werden nur neue Versionen angezeigt, wenn es auch welche gibt.
Ein Datum oder Changelog lassen sich so nicht extrahieren - die Daten liegen nicht vor.
Bitte mal testen, wenn es keine Probleme gibt könnte das als Template eingepflegt werden.
EDIT 2020-02-03: Beta-User (https://forum.fhem.de/index.php?action=profile;u=9229) hat es in die httpmod.templates (https://forum.fhem.de/index.php/topic,108051.0.html) übernommen
EDIT 2020-04-16: model gross/klein-Schreibung (https://forum.fhem.de/index.php/topic,110272.0.html) berücksichtigt.
Zitat von: yersinia am 31 Januar 2020, 10:43:01
Ich habe den bestehenden Code angepasst und jetzt funktioniert dies mit dem neuen Link:
Bitte mal testen, wenn es keine Probleme gibt könnte das als Template eingepflegt werden.
Danke dafür.
Sehe ich das richtig dass hierfür jetzt kein Code in der myUtils mehr notwendig ist.
Zitat von: Frank_Huber am 31 Januar 2020, 11:21:35
Sehe ich das richtig dass hierfür jetzt kein Code in der myUtils mehr notwendig ist.
Korrekt.
erst ein "error => no or wrong data from eq3-server!", nach einem reread:
hm_fw_check
last homematic-fw-check => 2020-01-31 12:51:03
| device | model | cur_fw | new_fw |
------------------------------------------------------------------------------
| HKThermostat1 | HM-CC-RT-DN | 1.4 | 1.5.3 |
| HKThermostat2 | HM-CC-RT-DN | 1.4 | 1.5.3 |
| HKThermostat3 | HM-CC-RT-DN | 1.4 | 1.5.3 |
| HM_2DBDB9 | HM-LC-BL1PBU-FM | 2.3 | 2.11.1 |
| HM_Universalschalter1 | HM-LC-SW1-PL-DN-R1 | 2.5 | 2.6.0 |
| KBadThermostat | HM-TC-IT-WM-W-EU | 1.3 | 1.4.2 |
| Treppenlichtdimmer | HM-LC-DIM1T-DR | 1.0 | 1.1.0 |
Grandios! die alte Routine hatte schon ewig nichts mehr gefunden (ist inwzischen auch klar warum). Gleich rückstandsfrei entsorgt.
Zitat von: yersinia am 31 Januar 2020, 10:43:01
Danke Pfriemler für den Tipp (https://forum.fhem.de/index.php/topic,78501.msg1018712.html#msg1018712).
Ich habe den bestehenden Code angepasst und jetzt funktioniert dies mit dem neuen Link:
defmod hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
attr hm_fw_check userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr hm_fw_check enableControlSet 1
attr hm_fw_check icon hm_ccu
attr hm_fw_check reading01AutoNumLen 2
attr hm_fw_check reading01Name hmfw-type
attr hm_fw_check reading01RegOpt g
attr hm_fw_check reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr hm_fw_check reading02AutoNumLen 2
attr hm_fw_check reading02Name hmfw-version
attr hm_fw_check reading02RegOpt g
attr hm_fw_check reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr hm_fw_check readingMaxAge 10
attr hm_fw_check readingMaxAgeReplacementMode delete
attr hm_fw_check room fw-checks
attr hm_fw_check showError 1
attr hm_fw_check showMatched 1
attr hm_fw_check showNewFWOnly yes
attr hm_fw_check stateFormat { my $ret ="";;;;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;;;\
$ret .= '<div style="text-align:left">';;;;\
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;;;\
$ret .= '<br><br><pre>';;;;\
$ret .= "| device | model | cur_fw | new_fw |<br>";;;;\
$ret .= "------------------------------------------------------------------------------<br>";;;;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;;;\
if($check eq "no fw-updates needed!") {\
$ret .= '| <b style="color:green">';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= '</b> |';;;;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= '</b> |';;;;\
} else {\
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 .= '| <a href="/fhem?detail='.$dev.'" target="_blank"><b>';;;;\
$ret .= sprintf("%-30s",$dev);;;;\
$ret .= '</b></a> | ';;;;\
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow;;"':' style="color:lightgray;;"').'>';;;;\
$ret .= sprintf("%-23s",$md);;;;\
$ret .= '</b> | ';;;;\
$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 .= sprintf("%6s",$ofw);;;;\
$ret .= '</b> | ';;;;\
$ret .= '<a title="download firmware file" href="'.$fw_link.'" target="_blank"><b style="color:red;;">';;;;\
$ret .= sprintf("%6s",$nfw);;;;\
$ret .= '</b></a> | ';;;;\
$ret .= "<br />";;;;\
}\
}\
$ret .= '</pre></div>';;;;\
return $ret;;;;\
}
attr hm_fw_check userReadings newFwForDevices:MATCHED_READINGS.* {\
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;;;;\
\
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 ($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.")";;;;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;;;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;;;\
}
attr hm_fw_check webCmd reread
Ich habe ein userAttr showNewFWOnly eingepflegt, default ist yes. Setzt man dies auf no werden immer alle gefundenen firmware-versionen angezeigt - ansonsten -im default- werden nur neue Versionen angezeigt, wenn es auch welche gibt.
Ein Datum oder Changelog lassen sich so nicht extrahieren - die Daten liegen nicht vor.
Bitte mal testen, wenn es keine Probleme gibt könnte das als Template eingepflegt werden.
EDIT 2020-02-03: Beta-User (https://forum.fhem.de/index.php?action=profile;u=9229) hat es in die httpmod.templates (https://forum.fhem.de/index.php/topic,108051.0.html) übernommen
Der Code als rawDefinition funktioniert!! :)
DANKE!! :)
Zitat
EDIT 2020-02-03: Beta-User (https://forum.fhem.de/index.php?action=profile;u=9229) hat es in die httpmod.templates (https://forum.fhem.de/index.php/topic,108051.0.html) übernommen
Allerdings habe ich vorher mal mit den Templates "rumgespielt", da wollte keines...
Bei einem kam ein Fehler (V2 / auch nach mehrfachem reread) und bei dem anderen kam: no Updates...
Oder ist es kein httpmod-Template!?
Dann weiß ich nicht wo wie suchen/einrichten... :-\
Gruß, Joachim
Zitat von: MadMax-FHEM am 08 Februar 2020, 09:23:05Bei einem kam ein Fehler (V2 / auch nach mehrfachem reread) und bei dem anderen kam: no Updates...
Oder ist es kein httpmod-Template!?
Ja, raw (https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327) funktioniert es, das httpmod.template funktioniert
e allerdings nicht; dies ist aber seit gestern gefixt (https://forum.fhem.de/index.php/topic,97694.msg1021839.html#msg1021839) und seit heute morgen im Update (https://forum.fhem.de/index.php/topic,108201.0.html).
Der Code ist ansonsten identisch.
Zitat von: yersinia am 08 Februar 2020, 09:29:48
Ja, raw (https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327) funktioniert es, das httpmod.template funktionierte allerdings nicht; dies ist aber seit gestern gefixt (https://forum.fhem.de/index.php/topic,97694.msg1021839.html#msg1021839) und seit heute morgen im Update (https://forum.fhem.de/index.php/topic,108201.0.html).
Der Code ist ansonsten identisch.
Mist, habe gestern extra ein update gemacht ;)
Tja, dann halt nochmal...
Danke, Joachim
Zitat von: yersinia am 31 Januar 2020, 10:43:01
Danke Pfriemler für den Tipp (https://forum.fhem.de/index.php/topic,78501.msg1018712.html#msg1018712).
Ich habe den bestehenden Code angepasst und jetzt funktioniert dies mit dem neuen Link:
defmod hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
attr hm_fw_check userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr hm_fw_check enableControlSet 1
attr hm_fw_check icon hm_ccu
attr hm_fw_check reading01AutoNumLen 2
attr hm_fw_check reading01Name hmfw-type
attr hm_fw_check reading01RegOpt g
attr hm_fw_check reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr hm_fw_check reading02AutoNumLen 2
attr hm_fw_check reading02Name hmfw-version
attr hm_fw_check reading02RegOpt g
attr hm_fw_check reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr hm_fw_check readingMaxAge 10
attr hm_fw_check readingMaxAgeReplacementMode delete
attr hm_fw_check room fw-checks
attr hm_fw_check showError 1
attr hm_fw_check showMatched 1
attr hm_fw_check showNewFWOnly yes
attr hm_fw_check stateFormat { my $ret ="";;;;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;;;\
$ret .= '<div style="text-align:left">';;;;\
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;;;\
$ret .= '<br><br><pre>';;;;\
$ret .= "| device | model | cur_fw | new_fw |<br>";;;;\
$ret .= "------------------------------------------------------------------------------<br>";;;;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;;;\
if($check eq "no fw-updates needed!") {\
$ret .= '| <b style="color:green">';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= '</b> |';;;;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= '</b> |';;;;\
} else {\
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 .= '| <a href="/fhem?detail='.$dev.'" target="_blank"><b>';;;;\
$ret .= sprintf("%-30s",$dev);;;;\
$ret .= '</b></a> | ';;;;\
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow;;"':' style="color:lightgray;;"').'>';;;;\
$ret .= sprintf("%-23s",$md);;;;\
$ret .= '</b> | ';;;;\
$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 .= sprintf("%6s",$ofw);;;;\
$ret .= '</b> | ';;;;\
$ret .= '<a title="download firmware file" href="'.$fw_link.'" target="_blank"><b style="color:red;;">';;;;\
$ret .= sprintf("%6s",$nfw);;;;\
$ret .= '</b></a> | ';;;;\
$ret .= "<br />";;;;\
}\
}\
$ret .= '</pre></div>';;;;\
return $ret;;;;\
}
attr hm_fw_check userReadings newFwForDevices:MATCHED_READINGS.* {\
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;;;;\
\
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 ($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.")";;;;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;;;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;;;\
}
attr hm_fw_check webCmd reread
Ich habe ein userAttr showNewFWOnly eingepflegt, default ist yes. Setzt man dies auf no werden immer alle gefundenen firmware-versionen angezeigt - ansonsten -im default- werden nur neue Versionen angezeigt, wenn es auch welche gibt.
Ein Datum oder Changelog lassen sich so nicht extrahieren - die Daten liegen nicht vor.
Bitte mal testen, wenn es keine Probleme gibt könnte das als Template eingepflegt werden.
EDIT 2020-02-03: Beta-User (https://forum.fhem.de/index.php?action=profile;u=9229) hat es in die httpmod.templates (https://forum.fhem.de/index.php/topic,108051.0.html) übernommen
Da muß noch etwas korrigiert werden.
Wenn ich das Attribut
showNewFWOnly yes definiere, dürften eigentlich nur die angezeigt werden für die ein neues Update vorhanden ist.
Ich vermute das der Bezug auf den Vergleichswert zwischen alter und neuer Firmware nicht passt.
Geräte Firmware ist zweistelllig. Abgerufene eQ3 Firmware ist aber dreistellig.
STATE wird erst aktualisiert, wenn es Änderungen der Readings gibt => reread nach Änderung des Attributs ausführen. Bei mir scheint das zu passen...
Ich habe es nochmals ausgeführt. Änderung nach dem dritten reread.
Jetzt passt es wieder!?
Zitat von: Burny4600 am 08 Februar 2020, 17:50:07Wenn ich das Attribut showNewFWOnly yes definiere, dürften eigentlich nur die angezeigt werden für die ein neues Update vorhanden ist.
Ich vermute das der Bezug auf den Vergleichswert zwischen alter und neuer Firmware nicht passt.
Geräte Firmware ist zweistelllig. Abgerufene eQ3 Firmware ist aber dreistellig.
Die HM devices liefern nur zweistelligen (a.b) Firmware code, die eq3 Webseite aber dreistelligen (a.b.c). Es ist dadurch natürlich unscharf. Das Attribut
showNewFWOnly no gibt einem die Möglichkeit, alle gefundenen firmware-Versionen zu den eigenen HM-Devices anzuzeigen, auch wenn nach Vergleichoperation keine neue Version vorhanden wäre.
Das Reread und Aktualisierung des STATES kann schon etwas dauern.
@yersinia
ZitatDas Reread und Aktualisierung des STATES kann schon etwas dauern.
Beim erstenmal dauert es sehr lange. Vieles muß erst eingelesen werden. Bei darauffolgenden Rereads geht es schneller.
Ich war da ein wenig zu schnell.
Was mir auffällt ist das es viele Geräte gibt die bei mir überhaupt nicht angezeigt werden.
Heißt das, dass nur Geräte angezeigt werden die auch eine Firmware Online angeboten bekommen?
Zitat von: Burny4600 am 10 Februar 2020, 17:16:09Was mir auffällt ist das es viele Geräte gibt die bei mir überhaupt nicht angezeigt werden.
Heißt das, dass nur Geräte angezeigt werden die auch eine Firmware Online angeboten bekommen?
Jaein.
eq3 liefert für sehr viele HM Devices die fw Version (siehe auch Post #148 (https://forum.fhem.de/index.php/topic,78501.msg1018940.html#msg1018940)), die Versionsprüfung beschränkt sich aber nur auf solche HM-Devices, die deinem FHEM bekannt sind. Dieses List entspricht dem Scope vom fw-check:
list TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)
Hat dein FHEM kein Device aus der Quelle, gibt es keinen Eintrag.
Sollte es ein Device in FHEM geben, dass nicht in der Quelle gelistet ist, gibt es keinen Eintrag.
Sollte die Versionsnummer gleich sein, gibt es keinen Eintrag (außer
showNewFWOnly ist auf
no gesetzt).
Danke für die Infos.
Klasse, das funktioniert wieder, DANKE!
Ich wollte mir nun ein DOIF basteln, mit dem die FW-Datei nach ./Download heruntergeladen wird aber wenn ich die FW-Datei aus dem Link mit FHEM herunterladen möchte, bekomme ich immer "Bad Request" obwohl es im Browser funktioniert.
Hat jemand bitte einen Tip für mich?
Ja, zeig mal Dein DOIF :)
:o ich bin aber noch am basteln ;D
Internals:
DEF ([$SELF:state] eq "update")
({
my $MODEL = "HM-TC-IT-WM-W-EU";
my $model = "hm_tc_it_wm_w_eu";
my $version = "V1_4_002";
my $file = $model."_update_".$version."_171018.tgz";
fhem ("setreading $SELF File $file");
## my $fw = "";
my $ls = `ls ./Downloads`;
if ($ls =~ $file) {
fhem ("setreading $SELF Downloadinfo Datei vorhanden, kein Download")
}
else {
## system("wget https://www.eq-3.de/Downloads/Software/Firmware/$file -P ./Downloads -o ./Downloads/HM_FwUpdate.dlinfo");
##neuer Link#https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=$model
system("wget https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=$model -P ./Downloads -o ./Downloads/HM_FwUpdate.dlinfo");
my $downloadinfo = `cat ./Downloads/HM_FwUpdate.dlinfo`;
fhem ("setreading $SELF Downloadinfo $downloadinfo");
## system("tar xvzf $file")
}
## fhem ("set HM_618409 fwUpdate ./Download/$fw")
})
FUUID 5e3ec562-f33f-0125-c815-cc801e115a89c0b2
MODEL FHEM
NAME HM_FwUpdate_doif
NOTIFYDEV HM_FwUpdate_doif,global
NR 897
NTFY_ORDER 50-HM_FwUpdate_doif
STATE initialized
TYPE DOIF
VERSION 20929 2020-01-10 09:44:35
.attraggr:
.attrminint:
READINGS:
2020-02-15 12:53:21 cmd 0
2020-02-08 19:43:36 downloadinfo Datei vorhanden, kein Download
2020-02-08 19:33:56 file HM-TC-IT-WM-W-EU-1.4.2.tgz
2020-02-15 12:53:21 mode enabled
2020-02-15 12:53:21 state initialized
Regex:
accu:
cond:
HM_FwUpdate_doif:
0:
state ^HM_FwUpdate_doif$:^state:
condition:
0 ::ReadingValDoIf($hash,'HM_FwUpdate_doif','state') eq "update"
do:
0:
0 { my $MODEL = "HM-TC-IT-WM-W-EU"; my $model = "hm_tc_it_wm_w_eu"; my $version = "V1_4_002"; my $file = $model."_update_".$version."_171018.tgz"; fhem ("setreading HM_FwUpdate_doif File $file"); my $ls = `ls ./Downloads`; if ($ls =~ $file) { fhem ("setreading HM_FwUpdate_doif Downloadinfo Datei vorhanden, kein Download") } else { #neuer Link#https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=$model system("wget https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=$model -P ./Downloads -o ./Downloads/HM_FwUpdate.dlinfo"); my $downloadinfo = `cat ./Downloads/HM_FwUpdate.dlinfo`; fhem ("setreading HM_FwUpdate_doif Downloadinfo $downloadinfo"); system("tar xvzf $file") } fhem ("set HM_618409 fwUpdate ./Download/$fw") }
1:
helper:
DEVFILTER ^global$|^HM_FwUpdate_doif$
NOTIFYDEV global|HM_FwUpdate_doif
globalinit 1
last_timer 0
sleeptimer -1
readings:
all HM_FwUpdate_doif:state
uiState:
uiTable:
Attributes:
hauptsächlich geht es um die Zeile mit dem wget
Naja deine zweite wget Zeile will die ccu3 Software laden? Und serial fehlt irgendwie :)
https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=HM-TC-IT-WM-W-EU
im Browser lädt er die Datei für HM-TC-IT-WM-W-EU herunter
vielleicht ist wget auch die falsche wahl ¯\_(ツ)_/¯
Naja da machen die irgendwas mit dem Browser...
Der Server sperrt ja auch den Zugriff nach drei Versuchen :(
ich habe noch das hier gefunden:
curl --output ./Downloads/HM-TC-IT-WM-W-EU-1.4.2.tgz 'http://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=HM-TC-IT-WM-W-EU'
damit lädt die aktuelle fw und wird auch gleich gespeichert wo ich möchte. In meinem DOIF also in der Art:
system("curl --output ./Downloads/$file 'http://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=$MODEL'");
manchmal steht man einfach auf dem Schlauch. DANKE
bleibt nur eins:
Trotz
attr <alle HMDevices> event-on-update-reading fwUpdate
wird das Reading fwUpdate auf "done" gesetzt ABER ohne EVENT.
Ich habe mir also erstmal ein notify für das Log geschrieben:
defmod HM_FwUpdate_notify notify .*CUL_HM.fwUpdate.completed set HM_FwUpdate_doif update_done
attr HM_FwUpdate_notify readLog 1
Hier noch einmal mein fertiges DOIF, mit sortby direkt unter das Firmware-HTTPMOD platziert. Hier erscheint immer ein Button mit der Aktion die als nächstes erfolgt und macht immer das Update für des erste, aufgelistete Gerät:
DEF
([$SELF:"^reread$"] or [eQ3:"^reread$"])
({
my $newFwForDev1 = (split(/,/m,ReadingsVal("eQ3","newFwForDevices","???")))[0];
## fhem ("setreading $SELF NewFwForDev1 $newFwForDev1");
if ($newFwForDev1 =~ "Keine") {
fhem ("defmod status_HM_FwUpdate_doif at +00:00:01 set $SELF Keine");
}
else {
my $HMDevice = (split(/ /m,$newFwForDev1))[0];
fhem ("setreading $SELF HMDevice $HMDevice");
my $HMAlias = AttrVal("$HMDevice","alias","???");
fhem ("setreading $SELF HMDeviceAlias $HMAlias")
}
}
trigger WEB JS:location.reload()
)
DOELSEIF ([$SELF:"^Keine$"])
(trigger WEB JS:location.reload())
DOELSEIF ([$SELF:"^update$"])
({
my $newFwForDev1 = (split(/,/m,ReadingsVal("eQ3","newFwForDevices","???")))[0];
## fhem ("setreading $SELF NewFwForDev1 $newFwForDev1");
my $HMDevice = (split(/ /m,$newFwForDev1))[0];
fhem ("setreading $SELF HMDevice $HMDevice");
my $HMAlias = AttrVal("$HMDevice","alias","???");
fhem ("setreading $SELF HMDeviceAlias $HMAlias");
my $HMSerial = ReadingsVal("$HMDevice","D-serialNr","???");
fhem ("setreading $SELF HMDeviceSerial $HMSerial");
my $MODEL = (split(/ /m,$newFwForDev1))[1];
$MODEL =~ s/\(//g;
my $VERSION = (split(/ /m,$newFwForDev1))[5];
$VERSION =~ s/nfw_//g;
$VERSION =~ s/\)//g;
my $file = $MODEL."-".$VERSION.".tgz";
## fhem ("setreading $SELF File $file");
my $fw = "???";
my $extraktinfo = "???";
my $ls = `ls ./Downloads`,1;
if ($ls =~ $file) {
fhem ("setreading $SELF Downloadinfo Datei vorhanden, kein erneuter Download")
}
else {
my $downloadinfo = `curl --output ./Downloads/$file 'http://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=$MODEL'`,1;
fhem ("setreading $SELF Downloadinfo $downloadinfo")
}
my $tar = `tar tf ./Downloads/$file`,1;
## fhem ("setreading $SELF TAR $tar");
my $tar0 = (split(/\n/m,$tar))[0];
## fhem ("setreading $SELF TAR0 $tar0");
my $tar1 = (split(/\n/m,$tar))[1];
## fhem ("setreading $SELF TAR1 $tar1");
my $tar2 = (split(/\n/m,$tar))[2];
## fhem ("setreading $SELF TAR2 $tar2");
if ($tar0 =~ ".eq3") {
$fw = "$tar0"
}
elsif ($tar1 =~ ".eq3") {
$fw = "$tar1"
}
elsif ($tar2 =~ ".eq3") {
$fw = "$tar2"
}
else {
$fw = "???"
}
## fhem ("setreading $SELF Firmware $fw");
my $link = "./Downloads/fw_$MODEL/"."$fw";
## fhem ("setreading $SELF FirmwareLink $link");
if ($ls =~ "fw_$MODEL") {
my $lsM = `ls ./Downloads/fw_$MODEL`,1;
## fhem ("setreading $SELF LsM $lsM");
if ($lsM =~ "$fw") {
$extraktinfo = "Firmware-Datei vorhanden, kein erneutes Entpacken"
}
else {
$extraktinfo = `tar vxf ./Downloads/$file -C ./Downloads/fw_$MODEL`,1
}
}
else {
system("mkdir ./Downloads/fw_$MODEL");
## tar vxf ./Downloads/HM-TC-IT-WM-W-EU-1.4.2.tgz -C ./Downloads/fw_HM-TC-IT-WM-W-EU
$extraktinfo = `tar vxf ./Downloads/$file -C ./Downloads/fw_$MODEL`,1
}
fhem ("setreading $SELF Extraktinfo $extraktinfo");
fhem ("set $HMDevice fwUpdate ./Downloads/fw_$MODEL/$fw")
}
trigger WEB JS:location.reload()
)
DOELSEIF (["^HM_......$:^fwUpdate:.done$"])
(trigger WEB JS:location.reload())
DOELSEIF ([$SELF:"^hmPairSerial$"])
({
fhem ("set VCCU hmPairSerial ".ReadingsVal("$SELF","HMDeviceSerial","HMDeviceSerial"))
})
(trigger WEB JS:location.reload())
DOELSEIF (["^HM_......$:^D-firmware:.*$"])
({
fhem ("set eQ3 reread")
})
Attributes
addStateEvent
1
cmdState
reread|update|update_done|hmPairSerial|D-firmware
event-on-update-reading
state,Downloadinfo,Extraktinfo
group
Homematic Update
room
Homematic,system
selftrigger
wait
setList
reread update hmPairSerial
sortby
2
uiTable
{$SHOWNODEVICELINE = "system";
sub RET_HM_FwUpdate_doif {
if (ReadingsVal("$SELF","state","") eq "reread") {
my $ret = ReadingsVal("$SELF","HMDevice","HMDevice")." ".ReadingsVal("$SELF","HMDeviceAlias","HMDeviceAlias");
return $ret
}
elsif (ReadingsVal("$SELF","state","") eq "update") {
my $ret = ReadingsVal("$SELF","HMDevice","HMDevice")." ".ReadingsVal("$SELF","HMDeviceAlias","HMDeviceAlias")." <b>updating<marquee width=20 direction=right>...</marquee></b>";
return $ret
}
elsif (ReadingsVal("$SELF","state","") eq "update_done") {
my $ret = ReadingsVal("$SELF","HMDevice","HMDevice").'<br>'.ReadingsVal("$SELF","HMDeviceAlias","HMDeviceAlias");
return $ret
}
elsif (ReadingsVal("$SELF","state","") eq "hmPairSerial") {
my $ret = "Zum Erkennen des neuen Softwarestandes, jetzt bitte die Anlerntaste am Homematic-Gerät ".ReadingsVal("$SELF","HMDevice","HMDevice")." ".ReadingsVal("$SELF","HMDeviceAlias","HMDeviceAlias")." drücken!";
return $ret
}
}
sub STA_HM_FwUpdate_doif {
if (ReadingsVal("$SELF","state","") eq "reread") {
return "update"
}
elsif (ReadingsVal("$SELF","state","") eq "update_done") {
return "hmPairSerial"
}
elsif (ReadingsVal("$SELF","state","") eq "hmPairSerial") {
return "reread"
}
elsif (ReadingsVal("$SELF","state","") eq "initialized") {
return "reread"
}
}
}
'<div style="text-align:justify">'.(RET_HM_FwUpdate_doif).'</div>'
WID([$SELF],"uzsuSelectRadio,".(STA_HM_FwUpdate_doif)."")
wait
1:0.1:0.1:0.1:0.1:0.1
Hallo,
dort sind aber nicht alle aufgelistet, oder? Mein HM-ES-TX-WM hat FW1.2 und es gibt eine 2.5 dafür.
Zitat von: Migul47 am 24 Februar 2020, 19:59:53Mein HM-ES-TX-WM hat FW1.2 und es gibt eine 2.5 dafür.
Was die Quelle (https://update.homematic.com/firmware/api/firmware/search/DEVICE) nicht hergibt (https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=HM-ES-TX-WM), kann auch das device nicht finden.
Allerdings gibt es diese bei eq-3 (https://www.eq-3.de/downloads/software/firmware/HM-ES-TX-WM_update_V2_5_191209.tgz).
Obacht: Für die Energiemonitore gibt es mit dem Sprung auf V2.x etliche Änderungen. Ein Update macht nur für IEC-Interfaces Sinn. Ferraris-Sensoren bzw. einfache Kontakte werden in 2.x. nicht mehr unterstützt.
Hallo,
Ich habe auch nicht vor ein Update zu machen. Solange es geht, lang es nicht an. Ich wollte nur daruf hinweisen, das dort nicht alle Firmware gelistet wird.
Zitat von: mar3d@RPi3 am 20 Februar 2020, 18:19:44
Hier noch einmal mein fertiges DOIF, mit sortby direkt unter das Firmware-HTTPMOD platziert. Hier erscheint immer ein Button mit der Aktion die als nächstes erfolgt und macht immer das Update für des erste, aufgelistete Gerät:
DEF
([$SELF:"^reread$"] or [eQ3:"^reread$"])
({
my $newFwForDev1 = (split(/,/m,ReadingsVal("eQ3","newFwForDevices","???")))[0];
## fhem ("setreading $SELF NewFwForDev1 $newFwForDev1");
if ($newFwForDev1 =~ "Keine") {
fhem ("defmod status_HM_FwUpdate_doif at +00:00:01 set $SELF Keine");
}
else {
my $HMDevice = (split(/ /m,$newFwForDev1))[0];
fhem ("setreading $SELF HMDevice $HMDevice");
my $HMAlias = AttrVal("$HMDevice","alias","???");
fhem ("setreading $SELF HMDeviceAlias $HMAlias")
}
}
trigger WEB JS:location.reload()
)
DOELSEIF ([$SELF:"^Keine$"])
(trigger WEB JS:location.reload())
DOELSEIF ([$SELF:"^update$"])
({
my $newFwForDev1 = (split(/,/m,ReadingsVal("eQ3","newFwForDevices","???")))[0];
## fhem ("setreading $SELF NewFwForDev1 $newFwForDev1");
my $HMDevice = (split(/ /m,$newFwForDev1))[0];
fhem ("setreading $SELF HMDevice $HMDevice");
my $HMAlias = AttrVal("$HMDevice","alias","???");
fhem ("setreading $SELF HMDeviceAlias $HMAlias");
my $HMSerial = ReadingsVal("$HMDevice","D-serialNr","???");
fhem ("setreading $SELF HMDeviceSerial $HMSerial");
my $MODEL = (split(/ /m,$newFwForDev1))[1];
$MODEL =~ s/\(//g;
my $VERSION = (split(/ /m,$newFwForDev1))[5];
$VERSION =~ s/nfw_//g;
$VERSION =~ s/\)//g;
my $file = $MODEL."-".$VERSION.".tgz";
## fhem ("setreading $SELF File $file");
my $fw = "???";
my $extraktinfo = "???";
my $ls = `ls ./Downloads`,1;
if ($ls =~ $file) {
fhem ("setreading $SELF Downloadinfo Datei vorhanden, kein erneuter Download")
}
else {
my $downloadinfo = `curl --output ./Downloads/$file 'http://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=$MODEL'`,1;
fhem ("setreading $SELF Downloadinfo $downloadinfo")
}
my $tar = `tar tf ./Downloads/$file`,1;
## fhem ("setreading $SELF TAR $tar");
my $tar0 = (split(/\n/m,$tar))[0];
## fhem ("setreading $SELF TAR0 $tar0");
my $tar1 = (split(/\n/m,$tar))[1];
## fhem ("setreading $SELF TAR1 $tar1");
my $tar2 = (split(/\n/m,$tar))[2];
## fhem ("setreading $SELF TAR2 $tar2");
if ($tar0 =~ ".eq3") {
$fw = "$tar0"
}
elsif ($tar1 =~ ".eq3") {
$fw = "$tar1"
}
elsif ($tar2 =~ ".eq3") {
$fw = "$tar2"
}
else {
$fw = "???"
}
## fhem ("setreading $SELF Firmware $fw");
my $link = "./Downloads/fw_$MODEL/"."$fw";
## fhem ("setreading $SELF FirmwareLink $link");
if ($ls =~ "fw_$MODEL") {
my $lsM = `ls ./Downloads/fw_$MODEL`,1;
## fhem ("setreading $SELF LsM $lsM");
if ($lsM =~ "$fw") {
$extraktinfo = "Firmware-Datei vorhanden, kein erneutes Entpacken"
}
else {
$extraktinfo = `tar vxf ./Downloads/$file -C ./Downloads/fw_$MODEL`,1
}
}
else {
system("mkdir ./Downloads/fw_$MODEL");
## tar vxf ./Downloads/HM-TC-IT-WM-W-EU-1.4.2.tgz -C ./Downloads/fw_HM-TC-IT-WM-W-EU
$extraktinfo = `tar vxf ./Downloads/$file -C ./Downloads/fw_$MODEL`,1
}
fhem ("setreading $SELF Extraktinfo $extraktinfo");
fhem ("set $HMDevice fwUpdate ./Downloads/fw_$MODEL/$fw")
}
trigger WEB JS:location.reload()
)
DOELSEIF (["^HM_......$:^fwUpdate:.done$"])
(trigger WEB JS:location.reload())
DOELSEIF ([$SELF:"^hmPairSerial$"])
({
fhem ("set VCCU hmPairSerial ".ReadingsVal("$SELF","HMDeviceSerial","HMDeviceSerial"))
})
(trigger WEB JS:location.reload())
DOELSEIF (["^HM_......$:^D-firmware:.*$"])
({
fhem ("set eQ3 reread")
})
Attributes
addStateEvent
1
cmdState
reread|update|update_done|hmPairSerial|D-firmware
event-on-update-reading
state,Downloadinfo,Extraktinfo
group
Homematic Update
room
Homematic,system
selftrigger
wait
setList
reread update hmPairSerial
sortby
2
uiTable
{$SHOWNODEVICELINE = "system";
sub RET_HM_FwUpdate_doif {
if (ReadingsVal("$SELF","state","") eq "reread") {
my $ret = ReadingsVal("$SELF","HMDevice","HMDevice")." ".ReadingsVal("$SELF","HMDeviceAlias","HMDeviceAlias");
return $ret
}
elsif (ReadingsVal("$SELF","state","") eq "update") {
my $ret = ReadingsVal("$SELF","HMDevice","HMDevice")." ".ReadingsVal("$SELF","HMDeviceAlias","HMDeviceAlias")." <b>updating<marquee width=20 direction=right>...</marquee></b>";
return $ret
}
elsif (ReadingsVal("$SELF","state","") eq "update_done") {
my $ret = ReadingsVal("$SELF","HMDevice","HMDevice").'<br>'.ReadingsVal("$SELF","HMDeviceAlias","HMDeviceAlias");
return $ret
}
elsif (ReadingsVal("$SELF","state","") eq "hmPairSerial") {
my $ret = "Zum Erkennen des neuen Softwarestandes, jetzt bitte die Anlerntaste am Homematic-Gerät ".ReadingsVal("$SELF","HMDevice","HMDevice")." ".ReadingsVal("$SELF","HMDeviceAlias","HMDeviceAlias")." drücken!";
return $ret
}
}
sub STA_HM_FwUpdate_doif {
if (ReadingsVal("$SELF","state","") eq "reread") {
return "update"
}
elsif (ReadingsVal("$SELF","state","") eq "update_done") {
return "hmPairSerial"
}
elsif (ReadingsVal("$SELF","state","") eq "hmPairSerial") {
return "reread"
}
elsif (ReadingsVal("$SELF","state","") eq "initialized") {
return "reread"
}
}
}
'<div style="text-align:justify">'.(RET_HM_FwUpdate_doif).'</div>'
WID([$SELF],"uzsuSelectRadio,".(STA_HM_FwUpdate_doif)."")
wait
1:0.1:0.1:0.1:0.1:0.1
Danke, war die Lösung. Nun funktioniert es.
Für Interessierte, es gibt dies jetzt auch als JsonMod Device: Anwendungsfall JsonMod #6: eq3 / homematic firmware check (https://forum.fhem.de/index.php/topic,110271.0.html)
btw, das dort beschriebene Problem trifft auch auf diese Versions-prüfung zu:
Zitat von: yersinia am 16 April 2020, 13:08:51
Die Versionsprüfung basiert bei den HM-Devices auf zwei Attributen: model und firmware. Hier kommt es in einem -mir bekannten- Fall zu einem Missmatch weil eq-3 HM-LC-Bl1PBU-FM definiert, das entsprechende HM Device aber HM-LC-BL1PBU-FM beinhaltet.
EDIT: hab einen Weg gefunden, das zu umschiffen (das gleiche RAW wie in meinen ursprünglichen post (https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327)):
defmod hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
attr hm_fw_check userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr hm_fw_check enableControlSet 1
attr hm_fw_check icon hm_ccu
attr hm_fw_check reading01AutoNumLen 2
attr hm_fw_check reading01Name hmfw-type
attr hm_fw_check reading01RegOpt g
attr hm_fw_check reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr hm_fw_check reading02AutoNumLen 2
attr hm_fw_check reading02Name hmfw-version
attr hm_fw_check reading02RegOpt g
attr hm_fw_check reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr hm_fw_check readingMaxAge 10
attr hm_fw_check readingMaxAgeReplacementMode delete
attr hm_fw_check room fw-checks
attr hm_fw_check showError 1
attr hm_fw_check showMatched 1
attr hm_fw_check showNewFWOnly yes
attr hm_fw_check stateFormat { my $ret ="";;;;\
my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;;;\
$ret .= '<div style="text-align:left">';;;;\
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;;;\
$ret .= '<br><br><pre>';;;;\
$ret .= "| device | model | cur_fw | new_fw |<br>";;;;\
$ret .= "------------------------------------------------------------------------------<br>";;;;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;;;\
if($check eq "no fw-updates needed!") {\
$ret .= '| <b style="color:green">';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= '</b> |';;;;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '| <b style="color:red">';;;;\
$ret .= sprintf("%-74s",$check);;;;\
$ret .= '</b> |';;;;\
} else {\
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 .= '| <a href="/fhem?detail='.$dev.'" target="_blank"><b>';;;;\
$ret .= sprintf("%-30s",$dev);;;;\
$ret .= '</b></a> | ';;;;\
$ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow;;"':' style="color:lightgray;;"').'>';;;;\
$ret .= sprintf("%-23s",$md);;;;\
$ret .= '</b> | ';;;;\
$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 .= sprintf("%6s",$ofw);;;;\
$ret .= '</b> | ';;;;\
$ret .= '<a title="download firmware file" href="'.$fw_link.'" target="_blank"><b style="color:red;;">';;;;\
$ret .= sprintf("%6s",$nfw);;;;\
$ret .= '</b></a> | ';;;;\
$ret .= "<br />";;;;\
}\
}\
$ret .= '</pre></div>';;;;\
return $ret;;;;\
}
attr hm_fw_check userReadings newFwForDevices:MATCHED_READINGS.* {\
my $ret = "";;;;\
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;;;\
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
my @eq3FwList = map { \
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);;;;\
foreach my $newFW (grep m/^${md}:/i,@eq3FwList) {\
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.")";;;;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;;;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;;;\
}
attr hm_fw_check webCmd reread
Anbei eine neuere Version, welche HmIP mit einschließt. Der HmIP-Input kommt von mcp (https://forum.fhem.de/index.php/topic,110271.msg1104330.html#msg1104330) aus dem JsonMod Thread.
defmod hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
attr hm_fw_check userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr hm_fw_check do_not_notify 1
attr hm_fw_check enableControlSet 1
attr hm_fw_check icon hm_ccu
attr hm_fw_check reading01AutoNumLen 2
attr hm_fw_check reading01Name hmfw-type
attr hm_fw_check reading01RegOpt g
attr hm_fw_check reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr hm_fw_check reading02AutoNumLen 2
attr hm_fw_check reading02Name hmfw-version
attr hm_fw_check reading02RegOpt g
attr hm_fw_check reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr hm_fw_check readingMaxAge 10
attr hm_fw_check readingMaxAgeReplacementMode delete
attr hm_fw_check room fw-checks
attr hm_fw_check showError 1
attr hm_fw_check showMatched 1
attr hm_fw_check showNewFWOnly yes
attr hm_fw_check 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 .= '<div style="text-align:left;;">';;;;\
$ret .= '<div>last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;\
$ret .= '</div>';;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;\
if($check eq "no fw-updates needed!") {\
$ret .= '<div style="color:limegreen;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '<div style="color:red;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} else {\
$ret .= '<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:40%;;font-weight:bold;;">model</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">current</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">new</div>';;\
$ret .= '</div>';; #header\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$idx) = $devStr =~ m/([^\s]+)\s[(](\d+)[)]/;;\
my $md = ReadingsVal($name,("hmfw-type-".$idx),"?");;\
#my $ofw = AttrVal($dev,"firmware","?");;\
my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
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 .= '<div style="display:table-row;;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:50%;;">';;\
$ret .= '<a href="/fhem?detail='.$dev.'" target="_blank">';;\
$ret .= AttrVal($dev,"alias",$dev);;\
$ret .= '</a></div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;font-weight:bold;;color:lightgrey;;">';;\
$ret .= $md;;\
$ret .= '</div>';;\
$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 .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
$ret .= '</div>';;\
return $ret;;\
}
attr hm_fw_check userReadings newFwForDevices:MATCHED_READINGS.* {\
my $ret = "";;\
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;\
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
my @eq3FwList = map { \
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|HMCCUDEV:FILTER=DEF=(......|..............):FILTER=subType!=virtual")) {\
my $md = uc(InternalVal($dev,"ccutype",AttrVal($dev,"model","?")));;\
my $v = InternalVal($dev,"firmware",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);;\
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$idx.")";;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;\
}
attr hm_fw_check webCmd reread
Ich hab es für Homematic-only (hab leider kein HmIP) getestet und es funktioniert wie zuvor.
Evtl. wäre es sinnvoll, das auch in dem "Vorschläge"-Thread zu posten; bin nicht sicher, ob der aktuelle Maintainer von httpmod.template hier mitliest ;) ...
(@yersinia: Möchtest du das Thema attrTemplate nicht evtl. nochmal bei JSONMOD anschieben und das übernehmen?)
Zitat von: Beta-User am 26 November 2020, 10:43:37Evtl. wäre es sinnvoll, das auch in dem "Vorschläge"-Thread zu posten;
Erledigt (https://forum.fhem.de/index.php/topic,97694.msg1104841.html#msg1104841)
Zitat von: Beta-User am 26 November 2020, 10:43:37(@yersinia: Möchtest du das Thema attrTemplate nicht evtl. nochmal bei JSONMOD anschieben und das übernehmen?)
Da sehe ich bisher keinen Bedarf für. Bisher gibt es neun (https://forum.fhem.de/index.php/topic,111489.msg1057154.html#msg1057154) (mir bekannte) Vorlagen, davon sind zwei Corona-spezifisch. Zumal herrmannj dies noch einbauen müsste - ich
glaube nicht, dass es hohe Priorität hätte derzeit.
Zitat von: yersinia am 27 November 2020, 10:24:09
Erledigt (https://forum.fhem.de/index.php/topic,97694.msg1104841.html#msg1104841)
Danke!
ZitatDa sehe ich bisher keinen Bedarf für. Bisher gibt es sieben (https://forum.fhem.de/index.php/topic,111489.msg1057154.html#msg1057154) (mir bekannte) Vorlagen, davon sind zwei Corona-spezifisch. Zumal herrmannj dies noch einbauen müsste - ich glaube nicht, dass es hohe Priorität hätte derzeit.
Na ja, der Aufwand, das grundsätzlich zu implementieren ist relativ gering (bei Bedarf suche ich den Patch für MQTT2_DEVICE raus, dürfte in <30 Min. erledigt sein).
Muss zugeben, dass ich auch bei MQTT2_DEVICE erst nicht gedacht hätte, dass es (so) großen Bedarf gäbe, und deine Sammlung ist sicher auch eine (gute!) Lösung, "best practice" vorzuhalten. Nur halt nur bedingt z.B. für englischsprachige User, die es ja durchaus auch gibt...
Andererseits: Wenn es (noch und relativ) wenige Beispiele gibt, ist der Pflegeaufwand für die templates auch nahezu null ;) .
Seh' ich grundsätzlich ähnlich und hab es als Wunsch in die Feature-Wunschliste (https://forum.fhem.de/index.php/topic,111489.msg1057154.html#msg1057154) mit aufgenommen.
Mir ist aufgefallen, dass eq-3 download-link wesentlich mehr Geräte (insb HmIP) enthält als dieses httpmod template abfragt, daher hier eine neu Version:
defmod hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
attr hm_fw_check userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr hm_fw_check do_not_notify 1
attr hm_fw_check enableControlSet 1
attr hm_fw_check icon hm_ccu
attr hm_fw_check reading01AutoNumLen 3
attr hm_fw_check reading01Name hmfw-type
attr hm_fw_check reading01RegOpt g
attr hm_fw_check reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr hm_fw_check reading02AutoNumLen 3
attr hm_fw_check reading02Name hmfw-version
attr hm_fw_check reading02RegOpt g
attr hm_fw_check reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr hm_fw_check readingMaxAge 10
attr hm_fw_check readingMaxAgeReplacementMode delete
attr hm_fw_check showError 1
attr hm_fw_check showMatched 1
attr hm_fw_check showNewFWOnly yes
attr hm_fw_check stateFormat { my $ret ="";;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $nextCheck = FmtDateTime(InternalVal($name,".TRIGGERTIME",0));;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;";;\
$ret .= '<div style="text-align:left;;">';;;;\
$ret .= '<div>last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;\
$ret .= '</div>';;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;\
if($check eq "no fw-updates needed!") {\
$ret .= '<div style="color:limegreen;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '<div style="color:red;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} else {\
$ret .= '<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:40%;;font-weight:bold;;">model</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">current</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">new</div>';;\
$ret .= '</div>';; #header\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$idx) = $devStr =~ m/([^\s]+)\s[(](\d+)[)]/;;\
my $md = ReadingsVal($name,("hmfw-type-".$idx),"?");;\
my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
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 .= '<div style="display:table-row;;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:50%;;">';;\
$ret .= '<a href="/fhem?detail='.$dev.'" target="_blank">';;\
$ret .= AttrVal($dev,"alias",$dev);;\
$ret .= '</a></div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;font-weight:bold;;color:lightgrey;;">';;\
$ret .= $md;;\
$ret .= '</div>';;\
$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 .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
$ret .= '</div>';;\
return $ret;;\
}
attr hm_fw_check userReadings newFwForDevices:MATCHED_READINGS.* {\
my $ret = "";;\
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;\
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
my @eq3FwList = map { \
sprintf(uc(ReadingsVal($name,"hmfw-type-".$_,"?")).":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;\
} ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d\d)/g;;\
\
foreach my $dev (devspec2array("TYPE=CUL_HM|HMCCUDEV:FILTER=DEF=(......|..............):FILTER=subType!=virtual")) {\
my $md = uc(InternalVal($dev,"ccutype",AttrVal($dev,"model","?")));;\
my $v = InternalVal($dev,"firmware",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);;\
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$idx.")";;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;\
}
attr hm_fw_check webCmd reread
EDIT 2020-12-03: Update nach #187 (https://forum.fhem.de/index.php/topic,78501.msg1106645.html#msg1106645) - Danke @betateilchen
Mir ist aufgefallen, dass "next_check" keine plausiblen Daten anzeigt.
InternalVal($name,"TRIGGERTIME_FMT","2000-01-01 00:00:00")
Wo soll denn das hier verwendete Internal herkommen? Beim Blick in 98_HTTPMOD.pm finde ich nirgends einen Hinweis darauf, dass dieses Internal überhaupt irgendwo verwendet wird.
stefan hat letztens im httpmod modul "aufgeräumt".
dabei sind einige internals verschwunden.
Korrekt, das Internal TRIGGERTIME_FMT ist im httpmod weggefallen ([1] (https://forum.fhem.de/index.php/topic,45176.msg1095872.html#msg1095872), [2] (https://forum.fhem.de/index.php/topic,45176.msg1102482.html#msg1102482)) - das hatte ich im httpmod Thread aber auch mehrfach überlesen. ::)
Ich hab es jetzt in #183 (https://forum.fhem.de/index.php/topic,78501.msg1106499.html#msg1106499) (und im template (https://forum.fhem.de/index.php/topic,97694.msg1106500.html#msg1106500)) auskommentiert. Mir ist noch nicht ganz klar, wie man den Zeitpunkt des nächsten checks berechnen kann - und ob es überhaupt jemanden interessiert.
Zitat von: yersinia am 02 Dezember 2020, 12:46:43
Mir ist noch nicht ganz klar, wie man den Zeitpunkt des nächsten checks berechnen kann
Man muss gar nix berechnen, der timestamp für den nächsten Check steht im Internal ".TRIGGERTIME".
Der timestamp müsste nur in einem lesbaren Format in das stateFormat ausgegeben werden.
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));
my $nextCheck = FmtDateTime(InternalVal($name,".TRIGGERTIME",0));
Zitat von: yersinia am 02 Dezember 2020, 12:46:43
und ob es überhaupt jemanden interessiert.
wohl eher nicht 8)
Warum man in dem stateFormat aber so komplizierte Zeit-Umrechnungen macht, anstatt einfach FHEM Funktionen zu verwenden, ist mir ein Rätsel.
--
Zitat von: betateilchen am 02 Dezember 2020, 17:35:57Man muss gar nix berechnen, der timestamp für den nächsten Check steht im Internal ".TRIGGERTIME".
Kann ich nicht bestätigen. Enthält bei meinen Tests die Zeit des letzten Events (?) des Devices.
Aber wenn es niemand braucht, dann ist die Diskussion auch überflüssig....also wech damit! ;)
Bei mir steht in .TRIGGERTIME definitiv ein timestamp von morgen.
Internals:
.LASTSEND 1606926757.30555
.LastUpdate 1606926757.30393
.MaxAgeEnabled 1
.TRIGGERTIME 1607013157.30393
.getList
.setList interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
BUSY 0
DEF https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
FUUID 5fbfc2ad-f33f-b166-d626-fac91657762a6aa6
Interval 86400
MainURL https://update.homematic.com/firmware/api/firmware/search/DEVICE
ModuleVersion 4.0.12 - 24.10.2020
Zitat von: betateilchen am 02 Dezember 2020, 17:35:57
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));
my $nextCheck = FmtDateTime(InternalVal($name,".TRIGGERTIME",0));
Warum man in dem stateFormat aber so komplizierte Zeit-Umrechnungen macht, anstatt einfach FHEM Funktionen zu verwenden, ist mir ein Rätsel.
Ich
persönlich finde das Format
YYYY-MM-DD hh:mm:ss unschön und für den Zweck schwer zu lesen. Daher die Konvertierung zu
DD.MM hh:mm.
Und ohne Entwickler zu sein, geschweigedenn Perl-Erfahrung zu haben, baut man auf dem auf, was man bekommen hat und ergänzt es um Dinge, die man so im Internet findet. Wenn es funktioniert, ist es gut. Ob das Hemdsärmlige Vorgehen gute Code-Qualität hervorbringt, wage ich zu bezweifeln.
Wenn es eine bessere, schnellere, effizientere Lösung gibt, immer her damit. :)
Zitat von: betateilchen am 02 Dezember 2020, 17:45:31Bei mir steht in .TRIGGERTIME definitiv ein timestamp von morgen.
Jup, mit der
FmtDateTime()-Funktion stimmt es auch bei mir.
Hey, wenn man davor schon einen englischen Text schreibt, kann man auch ein englischsprachiges Datums-/Zeitformat verwenden.
Ausserdem ist das eine in FHEM durchaus übliche und bekannte Darstellungsvariante.
Es funktioniert aber natürlich auch mit Deinem persönlichen Lieblingsformat ganz einfach:
my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(InternalVal($name,".LastUpdate",0)));
(identisch auf für $nextCheck verwendbar)
Zitat von: betateilchen am 02 Dezember 2020, 18:17:37Hey, wenn man davor schon einen englischen Text schreibt, kann man auch ein englischsprachiges Datums-/Zeitformat verwenden.
Ausserdem ist das eine in FHEM durchaus übliche und bekannte Darstellungsvariante.
Überzeugt. Folgen wir partiell der ISO 8601 (https://en.wikipedia.org/wiki/ISO_8601) und nutzen YYYY-MM-DD hh:mm:ss
(mir ist kein einheitlicher (iSv der globalen Sprachverteilung) Englischer Standard bekannt - da ist auch alles möglich (https://en.wikipedia.org/wiki/Date_format_by_country): YMD, DMY, MM/DD/YYYY, ...)
Zitat von: betateilchen am 02 Dezember 2020, 18:17:37Es funktioniert aber natürlich auch mit Deinem persönlichen Lieblingsformat ganz einfach:
my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(InternalVal($name,".LastUpdate",0)));
(identisch auf für $nextCheck verwendbar)
Thx für den Code, ich werde es aktualisieren. :)
Hallo,
hat eq3 hier die Server-Struktur geändert?
Ich bekomme hier nur noch folgende Rückmeldung:
error => no or wrong data from eq3-server!
Kann ich nicht bestätigen, letzte Aktualisierung bei mir um 14Uhr und lief.
Welche Version des Templates hast du? Ein list von deinem Device bitte.
Mein altes eq3 Device hat auch keine Daten mehr geholt.
Offensichtlich hat sich dort einiges geändert. Habe das Device gelöscht, neu angelegt und attrTemplate drüber gesetzt.
Ergebnis: funktioniert wieder einwandfrei!
Gruß
Dan
Ich habs jetzt auch noch einmal gelöscht und neu angelegt. Wie oben beschrieben. Jetzt kommen die Daten wieder. Schande über mein Haupt.
Es gibt doch tatsächlich für ein Homematic classic Device (HM-ES-PMSw1-Pl) noch ein Update - auch wenn die Firmware von 2015 ist.
Zitat von: yersinia am 03 März 2021, 14:26:19
Es gibt doch tatsächlich für ein Homematic classic Device (HM-ES-PMSw1-Pl) noch ein Update - auch wenn die Firmware von 2015 ist.
Wow, hätte ich nicht damit gerechnet.
Wollte die Tage den FWcheck schon löschen weil da eh nie was kommt. ;-)
Darüber haben sie sich gestern im Homematic-Forum auch schon gewundert. Hier ein erfreulichicher Beweis, dass alles noch funktioniert.
Wie man sieht: dreifach ist einfach besser ;D ;D ;D
Das ich auch immer alles aufheben muss :o
Hi,
auch, wenn Ihr mich jetzt steinigt, aber wo kann ich die 2.6 für den HM-ES-PMSw1-Pl runter laden ?
Edit:
Ok, habs gefunden, war ja auch zu einfach ..
Ich habe zwei updates für meine HM Devices mit Hilfe diesen Tools gefunden und runtergeladen.
Nach dem entpacken steht in den "changelog.txt" Files immer eine Warnung drin, das man das update File nur in Verbindung mit einer CCU2/CCu3 durchführen darf.
Ist das so, oder kann ich diese eq3 Files auch wie vorher immer mit meinem HM-CFG-USB2 Stick zum updaten verwenden?
Gruß aus Köln
Norbert
Hallo Norbert,
wenn Du noch verrätst um welche Firmware und Geräte es sich handelt, könnte es sein das jemand konkrete Erfahrung dazu mitteilt. Es sind ja nicht alle changelog Leser :)
Gruß Otto
Also ich bin unsicher.
Zum einen habe ich einen HM-LC-Dim1T-DR durch ein Update via FHEM eingebüßt (zumindest war es das initiale Update, dort steht ebenfalls die Warnung) - hingegen bekomme ich aber mit dem Configstick und dem HM-Firmware-Updater die Firmware problemlos neu aufgespielt (allerdings arbeitet der Aktor danach immer noch nicht).
Das muss aber nicht damit zusammenhängen, sondern kann auch ein Fehler des Gerätes sein.
Daneben habe ich zwei HM-LC-Bl1PBU-FM, in deren Changelog ebenfalls die Warnung steht, diese sind bei mir teilweise seit Sommer 2016 im Einsatz und dort habe ich mit an Sicherheit grenzender Wahrscheinlichkeit nichts anderes als FHEM für das letzte Update verwendet (den Aktor hatte ich bevor das Firmwareupdate V2_11_1_161212 kam).
In den Changelogs zur letzten Firmware bei beiden Aktoren steht aber auch, dass man das Update genausogut mit dem Firmwareupdate-Tool 1.2 machen darf (das sich nach frischer Installation im Programm allerdings als 1.1.8.9105 ausweist). Ich nutze selbst den HM-CFG-USB-2 dafür (aber eben nicht aus FHEM).
jm2c
Ich habe bisher alle firmware-updates (für TC, DN und ES-PMSw1-Pl) mit den nanoCULs (a-culfw) und über FHEM geflasht. Bis auf einige Startschwierigkeiten (mehrere versuche bis man in den bootloader gekommen ist) lief das bei mir gut und erfolgreich durch. Ja, das kann unter anderen Bedingungen, bei anderen Benutzern, anders ablaufen. Wichtig ist, dass man sich und dem Funkprotokoll Zeit gibt und nicht den ganzen HM-Zoo in einem Rutsch versucht zu aktualisieren. Lieber ein paar Tage Zeit nehmen und die Devices sukzessive flashen.
Ich hatte zuvor eq3 angeschrieben wegen der beiden updates und bekam diese Antwort:
Zitatvielen Dank für Ihre Nachricht.
Die aktuellen Firmwaren werden nur noch und ausschließlich über die CCU Oberfläche angeboten. Gehen Sie dort auf die Starseite da wird im oberen rechten Bereich ein anstehendes Update angezeigt.
Also es handelt sich um diese zwei Aktoren, die ich mit dem USB Stick updaten möchte:
HM-ES-PMSw1-PL
HM-OU-CFM-PL
Gruß
Norbert
Vom HM-ES-PMSw1-PL habe ich letztens drei Stück am Stück :-) via FHEM ohne Probleme mit neuer Firmware versorgt. Mindestabstand war nötig, danach liefen alle drei durch, sogar einer durch zwei Geschossdecken in den Keller (dauerte gefühlt länger - ?) aber ohne Probleme. Bei dem steht im Changelog aber nix, meine ich gestern nachgesehen zu haben.
Für den HM-OU-CFM-PL habe ich nur eine frisch heruntergeladene FW aber schon von 2015. Da steht zwar was von "neuester CCU-Software", aber da würde ich mir weniger n Kopp machen.
Nachtrag: Meines Wissens verwenden der unsrige firmware check und die CCU die gleiche Quelle. Im offiziellen Downloadbereich fehlen immer mal welche. So ist das von meinem kaputten Dimmer dort nicht gelistet. Langsam ahne ich, die wissen warum >:(
Bin jetzt mal endlich dazu gekommen das Ganze auszuprobieren.
Software für USB Firmware Update installiert. Aktoren in Boot Modus gebracht und Firmware als .tar.gz überspielt.
Bei beiden Aktortypen hat es nur funktioniert wenn ich das Programm USB Firmware Update 2x gestartet habe und dann auf jeden Aktor 2x hintereinander die Firmware aufgespielt habe.
Beim ersten Start kommt ganz kurz die Eingabe Maske auf dem Desktop und verschwindet wieder und beim ersten update ändert sich nicht die Firmware Version.
Alles in Allem hat es funktioniert, man kann also die Firmware trotz Warnung 100% ig verwenden. Alle 4 Aktoren funktionieren einwandfrei und alle vorherigen Einstellungen sind auch noch vorhanden.
Vielen Dank für Eure Tipps.
Gruß
Norbert
Zitat von: cocojambo am 21 März 2021, 10:22:21
Beim ersten Start kommt ganz kurz die Eingabe Maske auf dem Desktop
Kenne ich. Habe aktuell im Rahmen meiner Rettungsversuche auf drei Rechnern (Win7 und 2x Win10) mehr oder weniger Schiffbruch mit dem Programm erlitten, du kannst von Glück reden, wenn es immer nur einmal kurz verschwindet...
Zitatbeim ersten update ändert sich nicht die Firmware Version.
Sicher? getVersion ausgelöst?
Updates haben - wenn der Upload einmal lief - bei mir immer im ersten Anlauf perfekt funktioniert (ich hatte anfangs fast ausschließlich die Soft verwendet, weil der zuerst bei mir benutzte HMLAN keine Updates kann).
Man kann übrigens auch am Flackern der Geräte-LED erkennen, dass die Updates über die Software weit stabilier übertragen werden - ein so gleichmäßiges Flickern habe ich aus FHEM nie gesehen. Nichtsdestotrotz scheint auch aus FHEM das Timing ausreichend genau für die Übertragung zu sein. Fehlerhafte Übertragungen würde der Aktor ohnehin zurückweisen.
Die Firmwareversion im Device in FHEM ändert ist erst nach dem man eine neue Anlernmessage ausgelöst hat!
ZitatDen neuen Eintrag (und damit die Erfolgsquittung) erhält man nur mit einer Anlernmessage:
set HMUART1 hmPairSerial <Serial des gerade aktualisierten Gerätes>
set <> getConfig
Alternativ, oder falls das nicht funktioniert, kann man die Configtaste drücken.
Hej,
wenn ich aus dem u.g. Code das "StateFormat" eingebe (Copy&Paste) kommt folgende Fehlermeldung:
Missing right curly or square bracket at (eval 3166) line 1, at end of line
syntax error at (eval 3166) line 1, at EOF
Alle anderen Attribute konnte ich Fehlerfrei hinzufügen.
Könnt Ihr mir sagen wie ich das mit dem StateFormat machen kann?
Vielen Dank,
Hoffi
Zitat von: yersinia am 02 Dezember 2020, 11:14:55
Mir ist aufgefallen, dass eq-3 download-link wesentlich mehr Geräte (insb HmIP) enthält als dieses httpmod template abfragt, daher hier eine neu Version:
defmod hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
attr hm_fw_check userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr hm_fw_check do_not_notify 1
attr hm_fw_check enableControlSet 1
attr hm_fw_check icon hm_ccu
attr hm_fw_check reading01AutoNumLen 3
attr hm_fw_check reading01Name hmfw-type
attr hm_fw_check reading01RegOpt g
attr hm_fw_check reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr hm_fw_check reading02AutoNumLen 3
attr hm_fw_check reading02Name hmfw-version
attr hm_fw_check reading02RegOpt g
attr hm_fw_check reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr hm_fw_check readingMaxAge 10
attr hm_fw_check readingMaxAgeReplacementMode delete
attr hm_fw_check showError 1
attr hm_fw_check showMatched 1
attr hm_fw_check showNewFWOnly yes
attr hm_fw_check stateFormat { my $ret ="";;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $nextCheck = FmtDateTime(InternalVal($name,".TRIGGERTIME",0));;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;";;\
$ret .= '<div style="text-align:left;;">';;;;\
$ret .= '<div>last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;\
$ret .= '</div>';;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;\
if($check eq "no fw-updates needed!") {\
$ret .= '<div style="color:limegreen;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '<div style="color:red;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} else {\
$ret .= '<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:40%;;font-weight:bold;;">model</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">current</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">new</div>';;\
$ret .= '</div>';; #header\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$idx) = $devStr =~ m/([^\s]+)\s[(](\d+)[)]/;;\
my $md = ReadingsVal($name,("hmfw-type-".$idx),"?");;\
my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
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 .= '<div style="display:table-row;;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:50%;;">';;\
$ret .= '<a href="/fhem?detail='.$dev.'" target="_blank">';;\
$ret .= AttrVal($dev,"alias",$dev);;\
$ret .= '</a></div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;font-weight:bold;;color:lightgrey;;">';;\
$ret .= $md;;\
$ret .= '</div>';;\
$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 .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
$ret .= '</div>';;\
return $ret;;\
}
attr hm_fw_check userReadings newFwForDevices:MATCHED_READINGS.* {\
my $ret = "";;\
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;\
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
my @eq3FwList = map { \
sprintf(uc(ReadingsVal($name,"hmfw-type-".$_,"?")).":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;\
} ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d\d)/g;;\
\
foreach my $dev (devspec2array("TYPE=CUL_HM|HMCCUDEV:FILTER=DEF=(......|..............):FILTER=subType!=virtual")) {\
my $md = uc(InternalVal($dev,"ccutype",AttrVal($dev,"model","?")));;\
my $v = InternalVal($dev,"firmware",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);;\
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$idx.")";;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;\
}
attr hm_fw_check webCmd reread
EDIT 2020-12-03: Update nach #187 (https://forum.fhem.de/index.php/topic,78501.msg1106645.html#msg1106645) - Danke @betateilchen
Ich kann den Fehler nicht nachstellen. Ich habe den Code
Zitat von: yersinia am 02 Dezember 2020, 11:14:55
defmod hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
attr hm_fw_check userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr hm_fw_check do_not_notify 1
attr hm_fw_check enableControlSet 1
attr hm_fw_check icon hm_ccu
attr hm_fw_check reading01AutoNumLen 3
attr hm_fw_check reading01Name hmfw-type
attr hm_fw_check reading01RegOpt g
attr hm_fw_check reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr hm_fw_check reading02AutoNumLen 3
attr hm_fw_check reading02Name hmfw-version
attr hm_fw_check reading02RegOpt g
attr hm_fw_check reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr hm_fw_check readingMaxAge 10
attr hm_fw_check readingMaxAgeReplacementMode delete
attr hm_fw_check showError 1
attr hm_fw_check showMatched 1
attr hm_fw_check showNewFWOnly yes
attr hm_fw_check stateFormat { my $ret ="";;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $nextCheck = FmtDateTime(InternalVal($name,".TRIGGERTIME",0));;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;";;\
$ret .= '<div style="text-align:left;;">';;;;\
$ret .= '<div>last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;\
$ret .= '</div>';;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;\
if($check eq "no fw-updates needed!") {\
$ret .= '<div style="color:limegreen;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '<div style="color:red;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} else {\
$ret .= '<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:40%;;font-weight:bold;;">model</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">current</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">new</div>';;\
$ret .= '</div>';; #header\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$idx) = $devStr =~ m/([^\s]+)\s[(](\d+)[)]/;;\
my $md = ReadingsVal($name,("hmfw-type-".$idx),"?");;\
my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
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 .= '<div style="display:table-row;;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:50%;;">';;\
$ret .= '<a href="/fhem?detail='.$dev.'" target="_blank">';;\
$ret .= AttrVal($dev,"alias",$dev);;\
$ret .= '</a></div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;font-weight:bold;;color:lightgrey;;">';;\
$ret .= $md;;\
$ret .= '</div>';;\
$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 .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
$ret .= '</div>';;\
return $ret;;\
}
attr hm_fw_check userReadings newFwForDevices:MATCHED_READINGS.* {\
my $ret = "";;\
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;\
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
my @eq3FwList = map { \
sprintf(uc(ReadingsVal($name,"hmfw-type-".$_,"?")).":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;\
} ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d\d)/g;;\
\
foreach my $dev (devspec2array("TYPE=CUL_HM|HMCCUDEV:FILTER=DEF=(......|..............):FILTER=subType!=virtual")) {\
my $md = uc(InternalVal($dev,"ccutype",AttrVal($dev,"model","?")));;\
my $v = InternalVal($dev,"firmware",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);;\
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$idx.")";;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;\
}
attr hm_fw_check webCmd reread
1:1 übernommen und das Device ist fehlerfrei inkl. stateFormat angelegt worden. Hast du den Code via Template übernommen oder hast du den Code kopiert? Wenn Letzteres, evtl Kopierfehler?
Zitat von: Thoffi1978 am 10 Mai 2021, 10:25:19
Könnt Ihr mir sagen wie ich das mit dem StateFormat machen kann?
Hi,
raw Definition auf, den Code in allen Zeilen kopieren:
attr hm_fw_check stateFormat { my $ret ="";;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $nextCheck = FmtDateTime(InternalVal($name,".TRIGGERTIME",0));;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;";;\
$ret .= '<div style="text-align:left;;">';;;;\
$ret .= '<div>last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;\
$ret .= '</div>';;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;\
if($check eq "no fw-updates needed!") {\
$ret .= '<div style="color:limegreen;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '<div style="color:red;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} else {\
$ret .= '<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:40%;;font-weight:bold;;">model</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">current</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">new</div>';;\
$ret .= '</div>';; #header\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$idx) = $devStr =~ m/([^\s]+)\s[(](\d+)[)]/;;\
my $md = ReadingsVal($name,("hmfw-type-".$idx),"?");;\
my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
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 .= '<div style="display:table-row;;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:50%;;">';;\
$ret .= '<a href="/fhem?detail='.$dev.'" target="_blank">';;\
$ret .= AttrVal($dev,"alias",$dev);;\
$ret .= '</a></div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;font-weight:bold;;color:lightgrey;;">';;\
$ret .= $md;;\
$ret .= '</div>';;\
$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 .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
$ret .= '</div>';;\
return $ret;;\
}
Execute und fertig ;D
Gruß Otto
Es war mein Fehler.
Direkt in der cfg passts natürlich.
Entschuldigung :-X
Hoffi
Mit dem HTTPMOD attrTemplate hm_firmware_check_v2 bekomme ich "no fw-updates needed" während die JsonMod Variante mir ein Update von 2.5 auf 2.6 für meine HM-ES-PMSW1-PL anzeigt. Woran könnte das liegen?
An einem fehlenden list des HTTPMOD Devices. ;)
Wenn ich mein httpmod device auf alle Firmwares anzeigen stelle (ich habe bereits die fw 2.6), finde ich einen Eintrag für einen HM-ES-PMSw1-Pl (https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=HM-ES-PMSw1-Pl).
Zitat von: yersinia am 18 November 2021, 07:42:48
... finde ich einen Eintrag für einen HM-ES-PMSw1-Pl (https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=HM-ES-PMSw1-Pl).
Ich auch und ich habe diese FW noch nicht aufgespielt...
...und auch sonst nichts groß am HTTPMOD "eingestellt" (zumindest kann ich mich nicht erinnern 8) )...
Gruß, Joachim
Hier der List des Devices:
[code]Internals:
BUSY 0
DEF https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
FUUID 5c59d11e-f33f-3bc6-cb21-b4392da77552bc03
Interval 86400
MainURL https://update.homematic.com/firmware/api/firmware/search/DEVICE
ModuleVersion 4.1.10 - 6.7.2021
NAME eq3
NOTIFYDEV global
NR 678
NTFY_ORDER 50-eq3
STATE <div style="text-align:left;"><div>last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => 2021-11-17 17:38:07</div><div style="color:limegreen;font-weight:bold;">no fw-updates needed!</div><div style="text-align:left;">(next check: 2021-11-18 16:21:50)</div></div>
TYPE HTTPMOD
value
CompiledRegexes:
HttpUtils:
NAME
addr https://update.homematic.com:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://update.homematic.com/firmware/api/firmware/search/DEVICE
header
host update.homematic.com
httpheader HTTP/1.1 200 OK
Server: nginx
Date: Wed, 17 Nov 2021 16:38:07 GMT
Content-Type: text/plain
Content-Length: 982
Connection: close
content-encoding: gzip
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: upgrade-insecure-requests
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /firmware/api/firmware/search/DEVICE
protocol https
redirects 0
timeout 2
url https://update.homematic.com/firmware/api/firmware/search/DEVICE
sslargs:
QUEUE:
READINGS:
2021-11-16 19:56:38 LAST_ERROR read from https://www.eq-3.de:443 timed out
2021-11-17 17:38:07 LAST_REQUEST update
2021-11-17 17:38:07 MATCHED_READINGS hmfw-type-001 hmfw-type-002 hmfw-type-003 hmfw-type-004 hmfw-type-005 hmfw-type-006 hmfw-type-007 hmfw-type-008 hmfw-type-009 hmfw-type-010 hmfw-type-011 hmfw-type-012 hmfw-type-013 hmfw-type-014 hmfw-type-015 hmfw-type-016 hmfw-type-017 hmfw-type-018 hmfw-type-019 hmfw-type-020 hmfw-type-021 hmfw-type-022 hmfw-type-023 hmfw-type-024 hmfw-type-025 hmfw-type-026 hmfw-type-027 hmfw-type-028 hmfw-type-029 hmfw-type-030 hmfw-type-031 hmfw-type-032 hmfw-type-033 hmfw-type-034 hmfw-type-035 hmfw-type-036 hmfw-type-037 hmfw-type-038 hmfw-type-039 hmfw-type-040 hmfw-type-041 hmfw-type-042 hmfw-type-043 hmfw-type-044 hmfw-type-045 hmfw-type-046 hmfw-type-047 hmfw-type-048 hmfw-type-049 hmfw-type-050 hmfw-type-051 hmfw-type-052 hmfw-type-053 hmfw-type-054 hmfw-type-055 hmfw-type-056 hmfw-type-057 hmfw-type-058 hmfw-type-059 hmfw-type-060 hmfw-type-061 hmfw-type-062 hmfw-type-063 hmfw-type-064 hmfw-type-065 hmfw-type-066 hmfw-type-067 hmfw-type-068 hmfw-type-069 hmfw-type-070 hmfw-type-071 hmfw-type-072 hmfw-type-073 hmfw-type-074 hmfw-type-075 hmfw-type-076 hmfw-type-077 hmfw-type-078 hmfw-type-079 hmfw-type-080 hmfw-type-081 hmfw-type-082 hmfw-type-083 hmfw-type-084 hmfw-type-085 hmfw-type-086 hmfw-type-087 hmfw-type-088 hmfw-type-089 hmfw-type-090 hmfw-type-091 hmfw-type-092 hmfw-type-093 hmfw-type-094 hmfw-type-095 hmfw-type-096 hmfw-type-097 hmfw-type-098 hmfw-type-099 hmfw-type-100 hmfw-type-101 hmfw-type-102 hmfw-type-103 hmfw-type-104 hmfw-type-105 hmfw-type-106 hmfw-type-107 hmfw-type-108 hmfw-type-109 hmfw-type-110 hmfw-type-111 hmfw-type-112 hmfw-type-113 hmfw-type-114 hmfw-type-115 hmfw-type-116 hmfw-type-117 hmfw-type-118 hmfw-type-119 hmfw-type-120 hmfw-type-121 hmfw-type-122 hmfw-type-123 hmfw-type-124 hmfw-type-125 hmfw-type-126 hmfw-version-001 hmfw-version-002 hmfw-version-003 hmfw-version-004 hmfw-version-005 hmfw-version-006 hmfw-version-007 hmfw-version-008 hmfw-version-009 hmfw-version-010 hmfw-version-011 hmfw-version-012 hmfw-version-013 hmfw-version-014 hmfw-version-015 hmfw-version-016 hmfw-version-017 hmfw-version-018 hmfw-version-019 hmfw-version-020 hmfw-version-021 hmfw-version-022 hmfw-version-023 hmfw-version-024 hmfw-version-025 hmfw-version-026 hmfw-version-027 hmfw-version-028 hmfw-version-029 hmfw-version-030 hmfw-version-031 hmfw-version-032 hmfw-version-033 hmfw-version-034 hmfw-version-035 hmfw-version-036 hmfw-version-037 hmfw-version-038 hmfw-version-039 hmfw-version-040 hmfw-version-041 hmfw-version-042 hmfw-version-043 hmfw-version-044 hmfw-version-045 hmfw-version-046 hmfw-version-047 hmfw-version-048 hmfw-version-049 hmfw-version-050 hmfw-version-051 hmfw-version-052 hmfw-version-053 hmfw-version-054 hmfw-version-055 hmfw-version-056 hmfw-version-057 hmfw-version-058 hmfw-version-059 hmfw-version-060 hmfw-version-061 hmfw-version-062 hmfw-version-063 hmfw-version-064 hmfw-version-065 hmfw-version-066 hmfw-version-067 hmfw-version-068 hmfw-version-069 hmfw-version-070 hmfw-version-071 hmfw-version-072 hmfw-version-073 hmfw-version-074 hmfw-version-075 hmfw-version-076 hmfw-version-077 hmfw-version-078 hmfw-version-079 hmfw-version-080 hmfw-version-081 hmfw-version-082 hmfw-version-083 hmfw-version-084 hmfw-version-085 hmfw-version-086 hmfw-version-087 hmfw-version-088 hmfw-version-089 hmfw-version-090 hmfw-version-091 hmfw-version-092 hmfw-version-093 hmfw-version-094 hmfw-version-095 hmfw-version-096 hmfw-version-097 hmfw-version-098 hmfw-version-099 hmfw-version-100 hmfw-version-101 hmfw-version-102 hmfw-version-103 hmfw-version-104 hmfw-version-105 hmfw-version-106 hmfw-version-107 hmfw-version-108 hmfw-version-109 hmfw-version-110 hmfw-version-111 hmfw-version-112 hmfw-version-113 hmfw-version-114 hmfw-version-115 hmfw-version-116 hmfw-version-117 hmfw-version-118 hmfw-version-119 hmfw-version-120 hmfw-version-121 hmfw-version-122 hmfw-version-123 hmfw-version-124 hmfw-version-125 hmfw-version-126
2021-11-17 17:38:07 UNMATCHED_READINGS
2021-11-17 16:21:29 attrTemplateVersion 20201206
2021-11-17 17:38:07 hmfw-type-001 http://www.eq-3.de/HmIPW-WTH
2021-11-17 17:38:07 hmfw-type-002 http://www.eq-3.de/HM-LC-Dim1L-Pl-3
2021-11-17 17:38:07 hmfw-type-003 http://www.eq-3.de/HmIPW-DRD3
2021-11-17 17:38:07 hmfw-type-004 http://www.eq-3.de/HmIP-FALMOT-C12
2021-11-17 17:38:07 hmfw-type-005 http://www.eq-3.de/HmIP-SWO-PR
2021-11-17 17:38:07 hmfw-type-006 http://www.eq-3.de/HM-ES-PMSw1-Pl
2021-11-17 17:38:07 hmfw-type-007 http://www.eq-3.de/HmIP-SWO-B
2021-11-17 17:38:07 hmfw-type-008 http://www.eq-3.de/HmIPW-FIO6
2021-11-17 17:38:07 hmfw-type-009 http://www.eq-3.de/HmIP-eTRV-E
2021-11-17 17:38:07 hmfw-type-010 http://www.eq-3.de/HmIP-PDT
2021-11-17 17:38:07 hmfw-type-011 http://www.eq-3.de/HM-ES-PMSw1-Pl-DN-R3
2021-11-17 17:38:07 hmfw-type-012 http://www.eq-3.de/HmIP-PSM-IT
2021-11-17 17:38:07 hmfw-type-013 http://www.eq-3.de/HmIP-PS
2021-11-17 17:38:07 hmfw-type-014 http://www.eq-3.de/HmIP-FROLL
2021-11-17 17:38:07 hmfw-type-015 http://www.eq-3.de/HmIP-FCI6
2021-11-17 17:38:07 hmfw-type-016 http://www.eq-3.de/HM-LC-Dim1TPBU-FM
2021-11-17 17:38:07 hmfw-type-017 http://www.eq-3.de/HmIPW-FAL230-C6
2021-11-17 17:38:07 hmfw-type-018 http://www.eq-3.de/HM-ES-PMSw1-Pl-DN-R2
2021-11-17 17:38:07 hmfw-type-019 http://www.eq-3.de/HmIP-SPDR
2021-11-17 17:38:07 hmfw-type-020 http://www.eq-3.de/HmIP-SFD
2021-11-17 17:38:07 hmfw-type-021 http://www.eq-3.de/HmIP-WHS2
2021-11-17 17:38:07 hmfw-type-022 http://www.eq-3.de/HM-LC-Sw1-Pl-DN-R1
2021-11-17 17:38:07 hmfw-type-023 http://www.eq-3.de/HmIP-STHD
2021-11-17 17:38:07 hmfw-type-024 http://www.eq-3.de/HmIP-eTRV-C
2021-11-17 17:38:07 hmfw-type-025 http://www.eq-3.de/HmIP-SMI
2021-11-17 17:38:07 hmfw-type-026 http://www.eq-3.de/HmIPW-DRI32
2021-11-17 17:38:07 hmfw-type-027 http://www.eq-3.de/HmIP-SWDO-I
2021-11-17 17:38:07 hmfw-type-028 http://www.eq-3.de/HmIP-STHO
2021-11-17 17:38:07 hmfw-type-029 http://www.eq-3.de/HmIP-PSM-UK
2021-11-17 17:38:07 hmfw-type-030 http://www.eq-3.de/HmIP-WTH-2
2021-11-17 17:38:07 hmfw-type-031 http://www.eq-3.de/HM-LC-Sw1-Pl-DN-R4
2021-11-17 17:38:07 hmfw-type-032 http://www.eq-3.de/HM-LC-Dim1T-DR
2021-11-17 17:38:07 hmfw-type-033 http://www.eq-3.de/HmIP-HAP
2021-11-17 17:38:07 hmfw-type-034 http://www.eq-3.de/HmIP-SCI
2021-11-17 17:38:07 hmfw-type-035 http://www.eq-3.de/HmIP-FAL230-C6
2021-11-17 17:38:07 hmfw-type-036 http://www.eq-3.de/HmIPW-SPI
2021-11-17 17:38:07 hmfw-type-037 http://www.eq-3.de/HmIP-ASIR
2021-11-17 17:38:07 hmfw-type-038 http://www.eq-3.de/HmIP-BWTH24
2021-11-17 17:38:07 hmfw-type-039 http://www.eq-3.de/HmIP-STHO-A
2021-11-17 17:38:07 hmfw-type-040 http://www.eq-3.de/HmIP-BBL
2021-11-17 17:38:07 hmfw-type-041 http://www.eq-3.de/HmIP-SMO-A
2021-11-17 17:38:07 hmfw-type-042 http://www.eq-3.de/HmIPW-FALMOT-C12
2021-11-17 17:38:07 hmfw-type-043 http://www.eq-3.de/HmIP-RC8
2021-11-17 17:38:07 hmfw-type-044 http://www.eq-3.de/HmIP-WRC6
2021-11-17 17:38:07 hmfw-type-045 http://www.eq-3.de/HmIP-FAL230-C10
2021-11-17 17:38:07 hmfw-type-046 http://www.eq-3.de/HmIP-RCB1
2021-11-17 17:38:07 hmfw-type-047 http://www.eq-3.de/HmIP-MIOB
2021-11-17 17:38:07 hmfw-type-048 http://www.eq-3.de/HmIP-DLS
2021-11-17 17:38:07 hmfw-type-049 http://www.eq-3.de/HM-LC-Sw1-Pl-DN-R5
2021-11-17 17:38:07 hmfw-type-050 http://www.eq-3.de/HmIP-PSM-PE
2021-11-17 17:38:07 hmfw-type-051 http://www.eq-3.de/HmIP-BDT
2021-11-17 17:38:07 hmfw-type-052 http://www.eq-3.de/HmIP-FSM16
2021-11-17 17:38:07 hmfw-type-053 http://www.eq-3.de/HmIP-BROLL
2021-11-17 17:38:07 hmfw-type-054 http://www.eq-3.de/HmIP-PSM-CH
2021-11-17 17:38:07 hmfw-type-055 http://www.eq-3.de/HM-OU-CFM-Pl
2021-11-17 17:38:07 hmfw-type-056 http://www.eq-3.de/HmIP-DLD
2021-11-17 17:38:07 hmfw-type-057 http://www.eq-3.de/HM-ES-PMSw1-Pl-DN-R1
2021-11-17 17:38:07 hmfw-type-058 http://www.eq-3.de/HmIP-SWO-PL
2021-11-17 17:38:07 hmfw-type-059 http://www.eq-3.de/HmIP-WRC2
2021-11-17 17:38:07 hmfw-type-060 http://www.eq-3.de/HmIPW-DRS4
2021-11-17 17:38:07 hmfw-type-061 http://www.eq-3.de/HmIP-STH
2021-11-17 17:38:07 hmfw-type-062 http://www.eq-3.de/HmIP-SMO
2021-11-17 17:38:07 hmfw-type-063 http://www.eq-3.de/HM-LC-Sw1-Pl-DN-R3
2021-11-17 17:38:07 hmfw-type-064 http://www.eq-3.de/HmIP-BSM
2021-11-17 17:38:07 hmfw-type-065 http://www.eq-3.de/HmIP-FCI1
2021-11-17 17:38:07 hmfw-type-066 http://www.eq-3.de/HmIP-SRD
2021-11-17 17:38:07 hmfw-type-067 http://www.eq-3.de/HmIP-SCTH230
2021-11-17 17:38:07 hmfw-type-068 http://www.eq-3.de/HM-LC-RGBW-WM
2021-11-17 17:38:07 hmfw-type-069 http://www.eq-3.de/HmIP-SRH
2021-11-17 17:38:07 hmfw-type-070 http://www.eq-3.de/HmIP-SPI
2021-11-17 17:38:07 hmfw-type-071 http://www.eq-3.de/HmIP-FAL24-C10
2021-11-17 17:38:07 hmfw-type-072 http://www.eq-3.de/HmIP-KRCA
2021-11-17 17:38:07 hmfw-type-073 http://www.eq-3.de/HmIP-MOD-OC8
2021-11-17 17:38:07 hmfw-type-074 http://www.eq-3.de/HmIPW-BRC2
2021-11-17 17:38:07 hmfw-type-075 http://www.eq-3.de/HM-CC-RT-DN
2021-11-17 17:38:07 hmfw-type-076 http://www.eq-3.de/HmIP-FSM
2021-11-17 17:38:07 hmfw-type-077 http://www.eq-3.de/HM-LC-Dim1T-Pl-3
2021-11-17 17:38:07 hmfw-type-078 http://www.eq-3.de/HmIP-BSL
2021-11-17 17:38:07 hmfw-type-079 http://www.eq-3.de/HmIP-MIO16-PCB
2021-11-17 17:38:07 hmfw-type-080 http://www.eq-3.de/HmIP-PDT-UK
2021-11-17 17:38:07 hmfw-type-081 http://www.eq-3.de/HmIP-STE2-PCB
2021-11-17 17:38:07 hmfw-type-082 http://www.eq-3.de/HmIP-FDT
2021-11-17 17:38:07 hmfw-type-083 http://www.eq-3.de/HM-Dis-EP-WM55
2021-11-17 17:38:07 hmfw-type-084 http://www.eq-3.de/HM-ES-PMSw1-Pl-DN-R5
2021-11-17 17:38:07 hmfw-type-085 http://www.eq-3.de/HmIPW-FAL24-C6
2021-11-17 17:38:07 hmfw-type-086 http://www.eq-3.de/HmIPW-STH
2021-11-17 17:38:07 hmfw-type-087 http://www.eq-3.de/HmIPW-DRBL4
2021-11-17 17:38:07 hmfw-type-088 http://www.eq-3.de/HmIP-WTH
2021-11-17 17:38:07 hmfw-type-089 http://www.eq-3.de/HM-ES-PMSw1-Pl-DN-R4
2021-11-17 17:38:07 hmfw-type-090 http://www.eq-3.de/HmIP-FAL24-C6
2021-11-17 17:38:07 hmfw-type-091 http://www.eq-3.de/HmIPW-WRC2
2021-11-17 17:38:07 hmfw-type-092 http://www.eq-3.de/HM-MOD-Re-8
2021-11-17 17:38:07 hmfw-type-093 http://www.eq-3.de/HmIP-FSI16
2021-11-17 17:38:07 hmfw-type-094 http://www.eq-3.de/HmIPW-DRAP
2021-11-17 17:38:07 hmfw-type-095 http://www.eq-3.de/HmIP-DRBLI4
2021-11-17 17:38:07 hmfw-type-096 http://www.eq-3.de/HmIPW-FAL24-C10
2021-11-17 17:38:07 hmfw-type-097 http://www.eq-3.de/HM-LC-Dim1TPBU-FM
2021-11-17 17:38:07 hmfw-type-098 http://www.eq-3.de/HmIP-FBL
2021-11-17 17:38:07 hmfw-type-099 http://www.eq-3.de/HmIP-MP3P
2021-11-17 17:38:07 hmfw-type-100 http://www.eq-3.de/HmIP-MOD-TM
2021-11-17 17:38:07 hmfw-type-101 http://www.eq-3.de/HmIP-BWTH
2021-11-17 17:38:07 hmfw-type-102 http://www.eq-3.de/HM-OU-CFM-TW
2021-11-17 17:38:07 hmfw-type-103 http://www.eq-3.de/HM-LC-Bl1PBU-FM
2021-11-17 17:38:07 hmfw-type-104 http://www.eq-3.de/HM-TC-IT-WM-W-EU
2021-11-17 17:38:07 hmfw-type-105 http://www.eq-3.de/HmIPW-FAL230-C10
2021-11-17 17:38:07 hmfw-type-106 http://www.eq-3.de/HmIP-eTRV
2021-11-17 17:38:07 hmfw-type-107 http://www.eq-3.de/HmIP-SWD
2021-11-17 17:38:07 hmfw-type-108 http://www.eq-3.de/HmIP-SWDO-PL
2021-11-17 17:38:07 hmfw-type-109 http://www.eq-3.de/HM-LC-Sw1PBU-FM
2021-11-17 17:38:07 hmfw-type-110 http://www.eq-3.de/HM-LC-Sw1-Pl-DN-R2
2021-11-17 17:38:07 hmfw-type-111 http://www.eq-3.de/HmIP-eTRV-2
2021-11-17 17:38:07 hmfw-type-112 http://www.eq-3.de/HmIPW-DRS8
2021-11-17 17:38:07 hmfw-type-113 http://www.eq-3.de/HmIP-PSM
2021-11-17 17:38:07 hmfw-type-114 http://www.eq-3.de/HmIP-SWDO
2021-11-17 17:38:07 hmfw-type-115 http://www.eq-3.de/HmIP-PCBS
2021-11-17 17:38:07 hmfw-type-116 http://www.eq-3.de/HmIP-PMFS
2021-11-17 17:38:07 hmfw-type-117 http://www.eq-3.de/HmIP-PCBS2
2021-11-17 17:38:07 hmfw-type-118 http://www.eq-3.de/HmIP-SLO
2021-11-17 17:38:07 hmfw-type-119 http://www.eq-3.de/HmIP-KRC4
2021-11-17 17:38:07 hmfw-type-120 http://www.eq-3.de/HmIP-eTRV-2-UK
2021-11-17 17:38:07 hmfw-type-121 http://www.eq-3.de/HmIPW-STHD
2021-11-17 17:38:07 hmfw-type-122 http://www.eq-3.de/HmIP-SMI55
2021-11-17 17:38:07 hmfw-type-123 http://www.eq-3.de/HmIP-WGC
2021-11-17 17:38:07 hmfw-type-124 http://www.eq-3.de/HM-LC-Dim1PWM-CV
2021-11-17 17:38:07 hmfw-type-125 http://www.eq-3.de/HM-Sen-MDIR-WM55
2021-11-17 17:38:07 hmfw-type-126 http://www.eq-3.de/HmIPW-DRI16
2021-11-17 17:38:07 hmfw-version-001 2.4.6
2021-11-17 17:38:07 hmfw-version-002 2.9.7
2021-11-17 17:38:07 hmfw-version-003 1.0.0
2021-11-17 17:38:07 hmfw-version-004 1.4.6
2021-11-17 17:38:07 hmfw-version-005 1.0.18
2021-11-17 17:38:07 hmfw-version-006 2.6.0
2021-11-17 17:38:07 hmfw-version-007 1.0.18
2021-11-17 17:38:07 hmfw-version-008 1.2.6
2021-11-17 17:38:07 hmfw-version-009 1.0.10
2021-11-17 17:38:07 hmfw-version-010 1.4.8
2021-11-17 17:38:07 hmfw-version-011 2.6.0
2021-11-17 17:38:07 hmfw-version-012 2.18.22
2021-11-17 17:38:07 hmfw-version-013 2.6.2
2021-11-17 17:38:07 hmfw-version-014 1.8.12
2021-11-17 17:38:07 hmfw-version-015 1.0.16
2021-11-17 17:38:07 hmfw-version-016 2.9.5
2021-11-17 17:38:07 hmfw-version-017 2.0.2
2021-11-17 17:38:07 hmfw-version-018 2.6.0
2021-11-17 17:38:07 hmfw-version-019 1.2.0
2021-11-17 17:38:07 hmfw-version-020 1.2.22
2021-11-17 17:38:07 hmfw-version-021 1.4.0
2021-11-17 17:38:07 hmfw-version-022 2.6.0
2021-11-17 17:38:07 hmfw-version-023 2.6.0
2021-11-17 17:38:07 hmfw-version-024 1.2.4
2021-11-17 17:38:07 hmfw-version-025 1.4.8
2021-11-17 17:38:07 hmfw-version-026 1.2.2
2021-11-17 17:38:07 hmfw-version-027 1.16.10
2021-11-17 17:38:07 hmfw-version-028 1.0.6
2021-11-17 17:38:07 hmfw-version-029 2.18.22
2021-11-17 17:38:07 hmfw-version-030 2.6.0
2021-11-17 17:38:07 hmfw-version-031 2.6.0
2021-11-17 17:38:07 hmfw-version-032 1.1.0
2021-11-17 17:38:07 hmfw-version-033 2.2.18
2021-11-17 17:38:07 hmfw-version-034 1.0.6
2021-11-17 17:38:07 hmfw-version-035 2.0.4
2021-11-17 17:38:07 hmfw-version-036 1.0.30
2021-11-17 17:38:07 hmfw-version-037 1.4.2
2021-11-17 17:38:07 hmfw-version-038 1.2.4
2021-11-17 17:38:07 hmfw-version-039 1.0.6
2021-11-17 17:38:07 hmfw-version-040 1.8.20
2021-11-17 17:38:07 hmfw-version-041 1.2.8
2021-11-17 17:38:07 hmfw-version-042 1.4.6
2021-11-17 17:38:07 hmfw-version-043 1.0.19
2021-11-17 17:38:07 hmfw-version-044 1.0.19
2021-11-17 17:38:07 hmfw-version-045 2.0.4
2021-11-17 17:38:07 hmfw-version-046 1.2.4
2021-11-17 17:38:07 hmfw-version-047 1.8.4
2021-11-17 17:38:07 hmfw-version-048 1.2.4
2021-11-17 17:38:07 hmfw-version-049 2.6.0
2021-11-17 17:38:07 hmfw-version-050 2.18.22
2021-11-17 17:38:07 hmfw-version-051 1.4.8
2021-11-17 17:38:07 hmfw-version-052 1.18.22
2021-11-17 17:38:07 hmfw-version-053 1.8.20
2021-11-17 17:38:07 hmfw-version-054 2.18.22
2021-11-17 17:38:07 hmfw-version-055 2.4.2
2021-11-17 17:38:07 hmfw-version-056 1.2.0
2021-11-17 17:38:07 hmfw-version-057 2.6.0
2021-11-17 17:38:07 hmfw-version-058 1.0.18
2021-11-17 17:38:07 hmfw-version-059 1.10.0
2021-11-17 17:38:07 hmfw-version-060 1.2.4
2021-11-17 17:38:07 hmfw-version-061 2.6.0
2021-11-17 17:38:07 hmfw-version-062 1.2.8
2021-11-17 17:38:07 hmfw-version-063 2.6.0
2021-11-17 17:38:07 hmfw-version-064 1.18.14
2021-11-17 17:38:07 hmfw-version-065 1.0.14
2021-11-17 17:38:07 hmfw-version-066 1.0.18
2021-11-17 17:38:07 hmfw-version-067 1.0.6
2021-11-17 17:38:07 hmfw-version-068 1.0.0
2021-11-17 17:38:07 hmfw-version-069 1.2.10
2021-11-17 17:38:07 hmfw-version-070 1.4.0
2021-11-17 17:38:07 hmfw-version-071 2.0.4
2021-11-17 17:38:07 hmfw-version-072 1.10.0
2021-11-17 17:38:07 hmfw-version-073 1.8.12
2021-11-17 17:38:07 hmfw-version-074 2.2.10
2021-11-17 17:38:07 hmfw-version-075 1.5.3
2021-11-17 17:38:07 hmfw-version-076 1.18.22
2021-11-17 17:38:07 hmfw-version-077 2.9.5
2021-11-17 17:38:07 hmfw-version-078 1.0.2
2021-11-17 17:38:07 hmfw-version-079 1.0.10
2021-11-17 17:38:07 hmfw-version-080 1.4.8
2021-11-17 17:38:07 hmfw-version-081 1.0.26
2021-11-17 17:38:07 hmfw-version-082 1.4.8
2021-11-17 17:38:07 hmfw-version-083 1.2.0
2021-11-17 17:38:07 hmfw-version-084 2.6.0
2021-11-17 17:38:07 hmfw-version-085 2.0.2
2021-11-17 17:38:07 hmfw-version-086 2.4.6
2021-11-17 17:38:07 hmfw-version-087 1.8.2
2021-11-17 17:38:07 hmfw-version-088 2.4.8
2021-11-17 17:38:07 hmfw-version-089 2.6.0
2021-11-17 17:38:07 hmfw-version-090 2.0.4
2021-11-17 17:38:07 hmfw-version-091 2.2.10
2021-11-17 17:38:07 hmfw-version-092 1.2.0
2021-11-17 17:38:07 hmfw-version-093 1.18.22
2021-11-17 17:38:07 hmfw-version-094 2.2.24
2021-11-17 17:38:07 hmfw-version-095 1.8.2
2021-11-17 17:38:07 hmfw-version-096 2.0.2
2021-11-17 17:38:07 hmfw-version-097 2.9.5
2021-11-17 17:38:07 hmfw-version-098 1.8.12
2021-11-17 17:38:07 hmfw-version-099 1.0.26
2021-11-17 17:38:07 hmfw-version-100 1.0.0
2021-11-17 17:38:07 hmfw-version-101 1.2.4
2021-11-17 17:38:07 hmfw-version-102 1.3.0
2021-11-17 17:38:07 hmfw-version-103 2.11.1
2021-11-17 17:38:07 hmfw-version-104 1.4.2
2021-11-17 17:38:07 hmfw-version-105 2.0.2
2021-11-17 17:38:07 hmfw-version-106 2.2.8
2021-11-17 17:38:07 hmfw-version-107 1.0.2
2021-11-17 17:38:07 hmfw-version-108 1.16.10
2021-11-17 17:38:07 hmfw-version-109 2.8.2
2021-11-17 17:38:07 hmfw-version-110 2.6.0
2021-11-17 17:38:07 hmfw-version-111 2.2.8
2021-11-17 17:38:07 hmfw-version-112 1.2.4
2021-11-17 17:38:07 hmfw-version-113 2.18.22
2021-11-17 17:38:07 hmfw-version-114 1.16.8
2021-11-17 17:38:07 hmfw-version-115 2.10.2
2021-11-17 17:38:07 hmfw-version-116 1.0.12
2021-11-17 17:38:07 hmfw-version-117 1.10.10
2021-11-17 17:38:07 hmfw-version-118 1.0.16
2021-11-17 17:38:07 hmfw-version-119 1.10.0
2021-11-17 17:38:07 hmfw-version-120 2.2.8
2021-11-17 17:38:07 hmfw-version-121 2.4.8
2021-11-17 17:38:07 hmfw-version-122 1.0.12
2021-11-17 17:38:07 hmfw-version-123 1.0.2
2021-11-17 17:38:07 hmfw-version-124 2.9.5
2021-11-17 17:38:07 hmfw-version-125 1.2.0
2021-11-17 17:38:07 hmfw-version-126 1.2.2
2021-11-17 17:38:07 newFwForDevices no fw-updates needed!
REQUEST:
context reading
data
header
ignoreredirects 0
num unknown
retryCount 0
type update
url https://update.homematic.com/firmware/api/firmware/search/DEVICE
defptr:
readingBase:
hmfw-type-001 reading
hmfw-type-002 reading
hmfw-type-003 reading
hmfw-type-004 reading
hmfw-type-005 reading
hmfw-type-006 reading
hmfw-type-007 reading
hmfw-type-008 reading
hmfw-type-009 reading
hmfw-type-010 reading
hmfw-type-011 reading
hmfw-type-012 reading
hmfw-type-013 reading
hmfw-type-014 reading
hmfw-type-015 reading
hmfw-type-016 reading
hmfw-type-017 reading
hmfw-type-018 reading
hmfw-type-019 reading
hmfw-type-020 reading
hmfw-type-021 reading
hmfw-type-022 reading
hmfw-type-023 reading
hmfw-type-024 reading
hmfw-type-025 reading
hmfw-type-026 reading
hmfw-type-027 reading
hmfw-type-028 reading
hmfw-type-029 reading
hmfw-type-030 reading
hmfw-type-031 reading
hmfw-type-032 reading
hmfw-type-033 reading
hmfw-type-034 reading
hmfw-type-035 reading
hmfw-type-036 reading
hmfw-type-037 reading
hmfw-type-038 reading
hmfw-type-039 reading
hmfw-type-040 reading
hmfw-type-041 reading
hmfw-type-042 reading
hmfw-type-043 reading
hmfw-type-044 reading
hmfw-type-045 reading
hmfw-type-046 reading
hmfw-type-047 reading
hmfw-type-048 reading
hmfw-type-049 reading
hmfw-type-050 reading
hmfw-type-051 reading
hmfw-type-052 reading
hmfw-type-053 reading
hmfw-type-054 reading
hmfw-type-055 reading
hmfw-type-056 reading
hmfw-type-057 reading
hmfw-type-058 reading
hmfw-type-059 reading
hmfw-type-060 reading
hmfw-type-061 reading
hmfw-type-062 reading
hmfw-type-063 reading
hmfw-type-064 reading
hmfw-type-065 reading
hmfw-type-066 reading
hmfw-type-067 reading
hmfw-type-068 reading
hmfw-type-069 reading
hmfw-type-070 reading
hmfw-type-071 reading
hmfw-type-072 reading
hmfw-type-073 reading
hmfw-type-074 reading
hmfw-type-075 reading
hmfw-type-076 reading
hmfw-type-077 reading
hmfw-type-078 reading
hmfw-type-079 reading
hmfw-type-080 reading
hmfw-type-081 reading
hmfw-type-082 reading
hmfw-type-083 reading
hmfw-type-084 reading
hmfw-type-085 reading
hmfw-type-086 reading
hmfw-type-087 reading
hmfw-type-088 reading
hmfw-type-089 reading
hmfw-type-090 reading
hmfw-type-091 reading
hmfw-type-092 reading
hmfw-type-093 reading
hmfw-type-094 reading
hmfw-type-095 reading
hmfw-type-096 reading
hmfw-type-097 reading
hmfw-type-098 reading
hmfw-type-099 reading
hmfw-type-100 reading
hmfw-type-101 reading
hmfw-type-102 reading
hmfw-type-103 reading
hmfw-type-104 reading
hmfw-type-105 reading
hmfw-type-106 reading
hmfw-type-107 reading
hmfw-type-108 reading
hmfw-type-109 reading
hmfw-type-110 reading
hmfw-type-111 reading
hmfw-type-112 reading
hmfw-type-113 reading
hmfw-type-114 reading
hmfw-type-115 reading
hmfw-type-116 reading
hmfw-type-117 reading
hmfw-type-118 reading
hmfw-type-119 reading
hmfw-type-120 reading
hmfw-type-121 reading
hmfw-type-122 reading
hmfw-type-123 reading
hmfw-type-124 reading
hmfw-type-125 reading
hmfw-type-126 reading
hmfw-version-001 reading
hmfw-version-002 reading
hmfw-version-003 reading
hmfw-version-004 reading
hmfw-version-005 reading
hmfw-version-006 reading
hmfw-version-007 reading
hmfw-version-008 reading
hmfw-version-009 reading
hmfw-version-010 reading
hmfw-version-011 reading
hmfw-version-012 reading
hmfw-version-013 reading
hmfw-version-014 reading
hmfw-version-015 reading
hmfw-version-016 reading
hmfw-version-017 reading
hmfw-version-018 reading
hmfw-version-019 reading
hmfw-version-020 reading
hmfw-version-021 reading
hmfw-version-022 reading
hmfw-version-023 reading
hmfw-version-024 reading
hmfw-version-025 reading
hmfw-version-026 reading
hmfw-version-027 reading
hmfw-version-028 reading
hmfw-version-029 reading
hmfw-version-030 reading
hmfw-version-031 reading
hmfw-version-032 reading
hmfw-version-033 reading
hmfw-version-034 reading
hmfw-version-035 reading
hmfw-version-036 reading
hmfw-version-037 reading
hmfw-version-038 reading
hmfw-version-039 reading
hmfw-version-040 reading
hmfw-version-041 reading
hmfw-version-042 reading
hmfw-version-043 reading
hmfw-version-044 reading
hmfw-version-045 reading
hmfw-version-046 reading
hmfw-version-047 reading
hmfw-version-048 reading
hmfw-version-049 reading
hmfw-version-050 reading
hmfw-version-051 reading
hmfw-version-052 reading
hmfw-version-053 reading
hmfw-version-054 reading
hmfw-version-055 reading
hmfw-version-056 reading
hmfw-version-057 reading
hmfw-version-058 reading
hmfw-version-059 reading
hmfw-version-060 reading
hmfw-version-061 reading
hmfw-version-062 reading
hmfw-version-063 reading
hmfw-version-064 reading
hmfw-version-065 reading
hmfw-version-066 reading
hmfw-version-067 reading
hmfw-version-068 reading
hmfw-version-069 reading
hmfw-version-070 reading
hmfw-version-071 reading
hmfw-version-072 reading
hmfw-version-073 reading
hmfw-version-074 reading
hmfw-version-075 reading
hmfw-version-076 reading
hmfw-version-077 reading
hmfw-version-078 reading
hmfw-version-079 reading
hmfw-version-080 reading
hmfw-version-081 reading
hmfw-version-082 reading
hmfw-version-083 reading
hmfw-version-084 reading
hmfw-version-085 reading
hmfw-version-086 reading
hmfw-version-087 reading
hmfw-version-088 reading
hmfw-version-089 reading
hmfw-version-090 reading
hmfw-version-091 reading
hmfw-version-092 reading
hmfw-version-093 reading
hmfw-version-094 reading
hmfw-version-095 reading
hmfw-version-096 reading
hmfw-version-097 reading
hmfw-version-098 reading
hmfw-version-099 reading
hmfw-version-100 reading
hmfw-version-101 reading
hmfw-version-102 reading
hmfw-version-103 reading
hmfw-version-104 reading
hmfw-version-105 reading
hmfw-version-106 reading
hmfw-version-107 reading
hmfw-version-108 reading
hmfw-version-109 reading
hmfw-version-110 reading
hmfw-version-111 reading
hmfw-version-112 reading
hmfw-version-113 reading
hmfw-version-114 reading
hmfw-version-115 reading
hmfw-version-116 reading
hmfw-version-117 reading
hmfw-version-118 reading
hmfw-version-119 reading
hmfw-version-120 reading
hmfw-version-121 reading
hmfw-version-122 reading
hmfw-version-123 reading
hmfw-version-124 reading
hmfw-version-125 reading
hmfw-version-126 reading
readingNum:
hmfw-type-001 01
hmfw-type-002 01
hmfw-type-003 01
hmfw-type-004 01
hmfw-type-005 01
hmfw-type-006 01
hmfw-type-007 01
hmfw-type-008 01
hmfw-type-009 01
hmfw-type-010 01
hmfw-type-011 01
hmfw-type-012 01
hmfw-type-013 01
hmfw-type-014 01
hmfw-type-015 01
hmfw-type-016 01
hmfw-type-017 01
hmfw-type-018 01
hmfw-type-019 01
hmfw-type-020 01
hmfw-type-021 01
hmfw-type-022 01
hmfw-type-023 01
hmfw-type-024 01
hmfw-type-025 01
hmfw-type-026 01
hmfw-type-027 01
hmfw-type-028 01
hmfw-type-029 01
hmfw-type-030 01
hmfw-type-031 01
hmfw-type-032 01
hmfw-type-033 01
hmfw-type-034 01
hmfw-type-035 01
hmfw-type-036 01
hmfw-type-037 01
hmfw-type-038 01
hmfw-type-039 01
hmfw-type-040 01
hmfw-type-041 01
hmfw-type-042 01
hmfw-type-043 01
hmfw-type-044 01
hmfw-type-045 01
hmfw-type-046 01
hmfw-type-047 01
hmfw-type-048 01
hmfw-type-049 01
hmfw-type-050 01
hmfw-type-051 01
hmfw-type-052 01
hmfw-type-053 01
hmfw-type-054 01
hmfw-type-055 01
hmfw-type-056 01
hmfw-type-057 01
hmfw-type-058 01
hmfw-type-059 01
hmfw-type-060 01
hmfw-type-061 01
hmfw-type-062 01
hmfw-type-063 01
hmfw-type-064 01
hmfw-type-065 01
hmfw-type-066 01
hmfw-type-067 01
hmfw-type-068 01
hmfw-type-069 01
hmfw-type-070 01
hmfw-type-071 01
hmfw-type-072 01
hmfw-type-073 01
hmfw-type-074 01
hmfw-type-075 01
hmfw-type-076 01
hmfw-type-077 01
hmfw-type-078 01
hmfw-type-079 01
hmfw-type-080 01
hmfw-type-081 01
hmfw-type-082 01
hmfw-type-083 01
hmfw-type-084 01
hmfw-type-085 01
hmfw-type-086 01
hmfw-type-087 01
hmfw-type-088 01
hmfw-type-089 01
hmfw-type-090 01
hmfw-type-091 01
hmfw-type-092 01
hmfw-type-093 01
hmfw-type-094 01
hmfw-type-095 01
hmfw-type-096 01
hmfw-type-097 01
hmfw-type-098 01
hmfw-type-099 01
hmfw-type-100 01
hmfw-type-101 01
hmfw-type-102 01
hmfw-type-103 01
hmfw-type-104 01
hmfw-type-105 01
hmfw-type-106 01
hmfw-type-107 01
hmfw-type-108 01
hmfw-type-109 01
hmfw-type-110 01
hmfw-type-111 01
hmfw-type-112 01
hmfw-type-113 01
hmfw-type-114 01
hmfw-type-115 01
hmfw-type-116 01
hmfw-type-117 01
hmfw-type-118 01
hmfw-type-119 01
hmfw-type-120 01
hmfw-type-121 01
hmfw-type-122 01
hmfw-type-123 01
hmfw-type-124 01
hmfw-type-125 01
hmfw-type-126 01
hmfw-version-001 02
hmfw-version-002 02
hmfw-version-003 02
hmfw-version-004 02
hmfw-version-005 02
hmfw-version-006 02
hmfw-version-007 02
hmfw-version-008 02
hmfw-version-009 02
hmfw-version-010 02
hmfw-version-011 02
hmfw-version-012 02
hmfw-version-013 02
hmfw-version-014 02
hmfw-version-015 02
hmfw-version-016 02
hmfw-version-017 02
hmfw-version-018 02
hmfw-version-019 02
hmfw-version-020 02
hmfw-version-021 02
hmfw-version-022 02
hmfw-version-023 02
hmfw-version-024 02
hmfw-version-025 02
hmfw-version-026 02
hmfw-version-027 02
hmfw-version-028 02
hmfw-version-029 02
hmfw-version-030 02
hmfw-version-031 02
hmfw-version-032 02
hmfw-version-033 02
hmfw-version-034 02
hmfw-version-035 02
hmfw-version-036 02
hmfw-version-037 02
hmfw-version-038 02
hmfw-version-039 02
hmfw-version-040 02
hmfw-version-041 02
hmfw-version-042 02
hmfw-version-043 02
hmfw-version-044 02
hmfw-version-045 02
hmfw-version-046 02
hmfw-version-047 02
hmfw-version-048 02
hmfw-version-049 02
hmfw-version-050 02
hmfw-version-051 02
hmfw-version-052 02
hmfw-version-053 02
hmfw-version-054 02
hmfw-version-055 02
hmfw-version-056 02
hmfw-version-057 02
hmfw-version-058 02
hmfw-version-059 02
hmfw-version-060 02
hmfw-version-061 02
hmfw-version-062 02
hmfw-version-063 02
hmfw-version-064 02
hmfw-version-065 02
hmfw-version-066 02
hmfw-version-067 02
hmfw-version-068 02
hmfw-version-069 02
hmfw-version-070 02
hmfw-version-071 02
hmfw-version-072 02
hmfw-version-073 02
hmfw-version-074 02
hmfw-version-075 02
hmfw-version-076 02
hmfw-version-077 02
hmfw-version-078 02
hmfw-version-079 02
hmfw-version-080 02
hmfw-version-081 02
hmfw-version-082 02
hmfw-version-083 02
hmfw-version-084 02
hmfw-version-085 02
hmfw-version-086 02
hmfw-version-087 02
hmfw-version-088 02
hmfw-version-089 02
hmfw-version-090 02
hmfw-version-091 02
hmfw-version-092 02
hmfw-version-093 02
hmfw-version-094 02
hmfw-version-095 02
hmfw-version-096 02
hmfw-version-097 02
hmfw-version-098 02
hmfw-version-099 02
hmfw-version-100 02
hmfw-version-101 02
hmfw-version-102 02
hmfw-version-103 02
hmfw-version-104 02
hmfw-version-105 02
hmfw-version-106 02
hmfw-version-107 02
hmfw-version-108 02
hmfw-version-109 02
hmfw-version-110 02
hmfw-version-111 02
hmfw-version-112 02
hmfw-version-113 02
hmfw-version-114 02
hmfw-version-115 02
hmfw-version-116 02
hmfw-version-117 02
hmfw-version-118 02
hmfw-version-119 02
hmfw-version-120 02
hmfw-version-121 02
hmfw-version-122 02
hmfw-version-123 02
hmfw-version-124 02
hmfw-version-125 02
hmfw-version-126 02
readingOutdated:
readingSubNum:
hmfw-type-001 -1
hmfw-type-002 -2
hmfw-type-003 -3
hmfw-type-004 -4
hmfw-type-005 -5
hmfw-type-006 -6
hmfw-type-007 -7
hmfw-type-008 -8
hmfw-type-009 -9
hmfw-type-010 -10
hmfw-type-011 -11
hmfw-type-012 -12
hmfw-type-013 -13
hmfw-type-014 -14
hmfw-type-015 -15
hmfw-type-016 -16
hmfw-type-017 -17
hmfw-type-018 -18
hmfw-type-019 -19
hmfw-type-020 -20
hmfw-type-021 -21
hmfw-type-022 -22
hmfw-type-023 -23
hmfw-type-024 -24
hmfw-type-025 -25
hmfw-type-026 -26
hmfw-type-027 -27
hmfw-type-028 -28
hmfw-type-029 -29
hmfw-type-030 -30
hmfw-type-031 -31
hmfw-type-032 -32
hmfw-type-033 -33
hmfw-type-034 -34
hmfw-type-035 -35
hmfw-type-036 -36
hmfw-type-037 -37
hmfw-type-038 -38
hmfw-type-039 -39
hmfw-type-040 -40
hmfw-type-041 -41
hmfw-type-042 -42
hmfw-type-043 -43
hmfw-type-044 -44
hmfw-type-045 -45
hmfw-type-046 -46
hmfw-type-047 -47
hmfw-type-048 -48
hmfw-type-049 -49
hmfw-type-050 -50
hmfw-type-051 -51
hmfw-type-052 -52
hmfw-type-053 -53
hmfw-type-054 -54
hmfw-type-055 -55
hmfw-type-056 -56
hmfw-type-057 -57
hmfw-type-058 -58
hmfw-type-059 -59
hmfw-type-060 -60
hmfw-type-061 -61
hmfw-type-062 -62
hmfw-type-063 -63
hmfw-type-064 -64
hmfw-type-065 -65
hmfw-type-066 -66
hmfw-type-067 -67
hmfw-type-068 -68
hmfw-type-069 -69
hmfw-type-070 -70
hmfw-type-071 -71
hmfw-type-072 -72
hmfw-type-073 -73
hmfw-type-074 -74
hmfw-type-075 -75
hmfw-type-076 -76
hmfw-type-077 -77
hmfw-type-078 -78
hmfw-type-079 -79
hmfw-type-080 -80
hmfw-type-081 -81
hmfw-type-082 -82
hmfw-type-083 -83
hmfw-type-084 -84
hmfw-type-085 -85
hmfw-type-086 -86
hmfw-type-087 -87
hmfw-type-088 -88
hmfw-type-089 -89
hmfw-type-090 -90
hmfw-type-091 -91
hmfw-type-092 -92
hmfw-type-093 -93
hmfw-type-094 -94
hmfw-type-095 -95
hmfw-type-096 -96
hmfw-type-097 -97
hmfw-type-098 -98
hmfw-type-099 -99
hmfw-type-100 -100
hmfw-type-101 -101
hmfw-type-102 -102
hmfw-type-103 -103
hmfw-type-104 -104
hmfw-type-105 -105
hmfw-type-106 -106
hmfw-type-107 -107
hmfw-type-108 -108
hmfw-type-109 -109
hmfw-type-110 -110
hmfw-type-111 -111
hmfw-type-112 -112
hmfw-type-113 -113
hmfw-type-114 -114
hmfw-type-115 -115
hmfw-type-116 -116
hmfw-type-117 -117
hmfw-type-118 -118
hmfw-type-119 -119
hmfw-type-120 -120
hmfw-type-121 -121
hmfw-type-122 -122
hmfw-type-123 -123
hmfw-type-124 -124
hmfw-type-125 -125
hmfw-type-126 -126
hmfw-version-001 -1
hmfw-version-002 -2
hmfw-version-003 -3
hmfw-version-004 -4
hmfw-version-005 -5
hmfw-version-006 -6
hmfw-version-007 -7
hmfw-version-008 -8
hmfw-version-009 -9
hmfw-version-010 -10
hmfw-version-011 -11
hmfw-version-012 -12
hmfw-version-013 -13
hmfw-version-014 -14
hmfw-version-015 -15
hmfw-version-016 -16
hmfw-version-017 -17
hmfw-version-018 -18
hmfw-version-019 -19
hmfw-version-020 -20
hmfw-version-021 -21
hmfw-version-022 -22
hmfw-version-023 -23
hmfw-version-024 -24
hmfw-version-025 -25
hmfw-version-026 -26
hmfw-version-027 -27
hmfw-version-028 -28
hmfw-version-029 -29
hmfw-version-030 -30
hmfw-version-031 -31
hmfw-version-032 -32
hmfw-version-033 -33
hmfw-version-034 -34
hmfw-version-035 -35
hmfw-version-036 -36
hmfw-version-037 -37
hmfw-version-038 -38
hmfw-version-039 -39
hmfw-version-040 -40
hmfw-version-041 -41
hmfw-version-042 -42
hmfw-version-043 -43
hmfw-version-044 -44
hmfw-version-045 -45
hmfw-version-046 -46
hmfw-version-047 -47
hmfw-version-048 -48
hmfw-version-049 -49
hmfw-version-050 -50
hmfw-version-051 -51
hmfw-version-052 -52
hmfw-version-053 -53
hmfw-version-054 -54
hmfw-version-055 -55
hmfw-version-056 -56
hmfw-version-057 -57
hmfw-version-058 -58
hmfw-version-059 -59
hmfw-version-060 -60
hmfw-version-061 -61
hmfw-version-062 -62
hmfw-version-063 -63
hmfw-version-064 -64
hmfw-version-065 -65
hmfw-version-066 -66
hmfw-version-067 -67
hmfw-version-068 -68
hmfw-version-069 -69
hmfw-version-070 -70
hmfw-version-071 -71
hmfw-version-072 -72
hmfw-version-073 -73
hmfw-version-074 -74
hmfw-version-075 -75
hmfw-version-076 -76
hmfw-version-077 -77
hmfw-version-078 -78
hmfw-version-079 -79
hmfw-version-080 -80
hmfw-version-081 -81
hmfw-version-082 -82
hmfw-version-083 -83
hmfw-version-084 -84
hmfw-version-085 -85
hmfw-version-086 -86
hmfw-version-087 -87
hmfw-version-088 -88
hmfw-version-089 -89
hmfw-version-090 -90
hmfw-version-091 -91
hmfw-version-092 -92
hmfw-version-093 -93
hmfw-version-094 -94
hmfw-version-095 -95
hmfw-version-096 -96
hmfw-version-097 -97
hmfw-version-098 -98
hmfw-version-099 -99
hmfw-version-100 -100
hmfw-version-101 -101
hmfw-version-102 -102
hmfw-version-103 -103
hmfw-version-104 -104
hmfw-version-105 -105
hmfw-version-106 -106
hmfw-version-107 -107
hmfw-version-108 -108
hmfw-version-109 -109
hmfw-version-110 -110
hmfw-version-111 -111
hmfw-version-112 -112
hmfw-version-113 -113
hmfw-version-114 -114
hmfw-version-115 -115
hmfw-version-116 -116
hmfw-version-117 -117
hmfw-version-118 -118
hmfw-version-119 -119
hmfw-version-120 -120
hmfw-version-121 -121
hmfw-version-122 -122
hmfw-version-123 -123
hmfw-version-124 -124
hmfw-version-125 -125
hmfw-version-126 -126
requestReadings:
update:
hmfw-type-001 reading 01-1
hmfw-type-002 reading 01-2
hmfw-type-003 reading 01-3
hmfw-type-004 reading 01-4
&
Uih, zu lang fürs Forum.
Aber es fällt schon was auf:
2021-11-17 17:38:07 hmfw-type-001 http://www.eq-3.de/HmIPW-WTH
hmfw-type-126 01
hmfw-version-001 02
Da stimmt etwas ganz und gar nicht.
Die Readings müssten eher so aussehen:
2021-11-18 14:50:52 hmfw-type-001 HmIPW-WTH
2021-11-18 14:50:52 hmfw-type-002 HM-LC-Dim1L-Pl-3
2021-11-18 14:50:52 hmfw-version-001 2.4.6
2021-11-18 14:50:52 hmfw-version-002 2.9.7
Zeig bitte mal ein raw listing von den Attributen
reading01.*
reading02.*
Hier ein funktionierendes RAW:
defmod HM_FW_Check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
attr HM_FW_Check userattr showNewFWOnly:yes,no
attr HM_FW_Check do_not_notify 1
attr HM_FW_Check enableControlSet 1
attr HM_FW_Check icon hm_ccu
attr HM_FW_Check reading01AutoNumLen 3
attr HM_FW_Check reading01Name hmfw-type
attr HM_FW_Check reading01RegOpt g
attr HM_FW_Check reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr HM_FW_Check reading02AutoNumLen 3
attr HM_FW_Check reading02Name hmfw-version
attr HM_FW_Check reading02RegOpt g
attr HM_FW_Check reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr HM_FW_Check readingMaxAge 10
attr HM_FW_Check readingMaxAgeReplacementMode delete
attr HM_FW_Check showError 1
attr HM_FW_Check showMatched 1
attr HM_FW_Check showNewFWOnly yes
attr HM_FW_Check stateFormat { my $ret ="";;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $nextCheck = FmtDateTime(InternalVal($name,".TRIGGERTIME",0));;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;";;\
$ret .= '<div style="text-align:left;;">';;;;\
$ret .= '<div>last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html" rel="noopener noreferrer" target="_blank">homematic</a>-fw-check => '.$lastCheck;;\
$ret .= '</div>';;\
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;\
if($check eq "no fw-updates needed!") {\
$ret .= '<div style="color:limegreen;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} elsif($check eq "error => no or wrong data from eq3-server!") {\
$ret .= '<div style="color:red;;font-weight:bold;;">';;\
$ret .= $check;;\
$ret .= '</div>';;\
} else {\
$ret .= '<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:40%;;font-weight:bold;;">model</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">current</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">new</div>';;\
$ret .= '</div>';; #header\
my @devices = split(',',$check);;\
foreach my $devStr (@devices) {\
my ($dev,$idx) = $devStr =~ m/([^\s]+)\s[(](\d+)[)]/;;\
my $md = ReadingsVal($name,("hmfw-type-".$idx),"?");;\
#my $ofw = AttrVal($dev,"firmware","?");;\
my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
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 .= '<div style="display:table-row;;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:50%;;">';;\
$ret .= '<a href="/fhem?detail='.$dev.'" target="_blank">';;\
$ret .= AttrVal($dev,"alias",$dev);;\
$ret .= '</a></div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;font-weight:bold;;color:lightgrey;;">';;\
$ret .= $md;;\
$ret .= '</div>';;\
$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 .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
$ret .= '</div>';;\
return $ret;;\
}
attr HM_FW_Check userReadings newFwForDevices:MATCHED_READINGS.* {\
my $ret = "";;\
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;\
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
my @eq3FwList = map { \
sprintf(uc(ReadingsVal($name,"hmfw-type-".$_,"?")).":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;\
} ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d\d)/g;;\
\
foreach my $dev (devspec2array("TYPE=CUL_HM|HMCCUDEV|HMCCUCHN:FILTER=DEF=(......|..............|................):FILTER=subType!=virtual")) {\
my $md = uc(InternalVal($dev,"ccutype",AttrVal($dev,"model","?")));;\
my $v = InternalVal($dev,"firmware",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);;\
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
$ret .= "," if($ret ne "");;\
$ret .= $dev." (".$idx.")";;\
}\
}\
}\
} else {\
$ret = "error => no or wrong data from eq3-server!";;\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;\
}
attr HM_FW_Check webCmd reread
Hier das Raw Listing der beiden Readings bei mir:
attr eq3 reading01AutoNumLen 3
attr eq3 reading01Format http://www.eq-3.de/%s
attr eq3 reading01Name hmfw-type
attr eq3 reading01RegOpt g
attr eq3 reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr eq3 reading02AutoNumLen 3
attr eq3 reading02Name hmfw-version
attr eq3 reading02RegOpt g
attr eq3 reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
Die RegEx sind identisch zu deiner funktionierenden Version, nur das Attribut "reading01Format" scheint bei mir zu viel gesetzt zu sein. Nachdem ich das gelöscht habe, stimmt jetzt auch die Ausgabe! Das Attribut ist wahrscheinlich noch von einer alten Version des Checks übrig geblieben.
Danke!
Hallo,
könnte mir jemand die Firmware 1.4 für die Thermostate HM-CC-RT-DN zusenden ?
Finde sie nirgends im Internet.
Hilft dir das Skript weiter?
https://forum.fhem.de/index.php/topic,119601.msg1140284.html#msg1140284
VG Helmut
Nicht sehr viel, ich weiß nicht wie ich den code ausführen soll.
Über die Raspberry shell und/oder direkt in Fhem gehts wohl nicht.
Das script liest ja auch nur die verfügbare Firmware aller Devices aus und lädt die enstprechend runter. In deinem Fall wäre dies die derzeit gültige v1.5 (https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=HM-CC-RT-DN).
Du bist mit deiner Frage aber hier eigentlich falsch; mach' einen neuen Thread im Homematic-Bereich auf und frag ob jemand die v1.4 für den HM-CC-RT-DN hat.
Zitat von: Kiter1988 am 18 September 2022, 12:22:55
Hallo,
könnte mir jemand die Firmware 1.4 für die Thermostate HM-CC-RT-DN zusenden ?
Finde sie nirgends im Internet.
hilft dies?
https://forum.fhem.de/index.php/topic,93074.msg1022259.html#msg1022259
Gruss
Enno
Da ich auch leider nach den Firmwares gesucht hab. Hier gibt es eine gute Anleitung wie man an die Firmware kommt: https://github.com/alexreinert/debmatic/issues/222
Für den RT-DN wäre es dann: https://ccu3-update.homematic.com:8443/firmware/download?cmd=download&serial=0&product=HM-CC-RT-DN
Gruß
geht das nicht mehr? error => no or wrong data from eq3-server!
Zitat von: kamp am 02 Juni 2023, 19:45:12geht das nicht mehr? error => no or wrong data from eq3-server!
Doch, funktioniert. Mehr Details hast du nicht?
wenn du mir sagst, wie ich mehr details aus dieser fehlermeldung vom device bekomme, dann gerne :)
Fangen wir doch mal mit einem List des Devices an!?
Darüber hinaus - hast du dies mal probiert => https://forum.fhem.de/index.php?topic=110271.0
Hallo, nein ein anderes Device habe ich nicht probiert, die Frage hier bezieht sich ja auf das httpmod hm_fw_check_v2 template, welches bei mir nicht mehr funktioniert.
Internals:
BUSY 0
CFGFN
DEF https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400
FUUID 6480b4b3-f33f-1b7d-306b-e0b11888038af228
Interval 86400
MainURL https://update.homematic.com/firmware/api/firmware/search/DEVICE
ModuleVersion 4.1.15 - 17.12.2022
NAME hm_fw_check
NOTIFYDEV global
NR 6502
NTFY_ORDER 50-hm_fw_check
STATE <div style="text-align:left;"><div>last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html" rel="noopener noreferrer" target="_blank">homematic</a>-fw-check => 2023-06-07 18:47:47</div><div style="color:red;font-weight:bold;">error => no or wrong data from eq3-server!</div><br /><div style="text-align:left;">(next check: 2023-06-08 18:47:47)</div></div>
TYPE HTTPMOD
value
CompiledRegexes:
HttpUtils:
NAME
addr https://update.homematic.com:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://update.homematic.com/firmware/api/firmware/search/DEVICE
header
host update.homematic.com
httpheader HTTP/1.1 200 OK
Server: nginx
Date: Wed, 07 Jun 2023 16:47:47 GMT
Content-Type: text/plain
Content-Length: 1288
Connection: close
content-encoding: gzip
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: upgrade-insecure-requests
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /firmware/api/firmware/search/DEVICE
protocol https
redirects 0
timeout 2
url https://update.homematic.com/firmware/api/firmware/search/DEVICE
sslargs:
QUEUE:
READINGS:
2023-06-07 18:48:20 attrTemplateVersion 20201206
REQUEST:
context reading
data
header
ignoreredirects 0
num unknown
retryCount 0
type update
url https://update.homematic.com/firmware/api/firmware/search/DEVICE
Attributes:
do_not_notify 1
enableControlSet 1
icon hm_ccu
model hm_fw_check_v2
reading01AutoNumLen 3
reading01Name hmfw-type
reading01RegOpt g
reading01Regex (?i)"type":"((?:\w+[-]*){1,})
reading02AutoNumLen 3
reading02Name hmfw-version
reading02RegOpt g
reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
readingMaxAge 10
readingMaxAgeReplacementMode delete
room HTTPMOD
showError 1
showMatched 1
showNewFWOnly yes
stateFormat { my $ret ="";
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));
my $nextCheck = FmtDateTime(InternalVal($name,".TRIGGERTIME",0));
my $cellstyle = "padding:3pt;border-bottom:1px dotted lightgray;";
$ret .= '<div style="text-align:left;">';
$ret .= '<div>last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html" rel="noopener noreferrer" target="_blank">homematic</a>-fw-check => '.$lastCheck;
$ret .= '</div>';
my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");
if($check eq "no fw-updates needed!") {
$ret .= '<div style="color:limegreen;font-weight:bold;">';
$ret .= $check;
$ret .= '</div>';
} elsif($check eq "error => no or wrong data from eq3-server!") {
$ret .= '<div style="color:red;font-weight:bold;">';
$ret .= $check;
$ret .= '</div>';
} else {
$ret .= '<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:40%;font-weight:bold;">model</div>';
$ret .= '<div style="display:table-cell;'.$cellstyle.'width:5%;font-weight:bold;">current</div>';
$ret .= '<div style="display:table-cell;'.$cellstyle.'width:5%;font-weight:bold;">new</div>';
$ret .= '</div>'; #header
my @devices = split(',',$check);
foreach my $devStr (@devices) {
my ($dev,$idx) = $devStr =~ m/([^\s]+)\s[(](\d+)[)]/;
my $md = ReadingsVal($name,("hmfw-type-".$idx),"?");
my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));
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 .= '<div style="display:table-row;">';
$ret .= '<div style="display:table-cell;'.$cellstyle.'width:50%;">';
$ret .= '<a href="/fhem?detail='.$dev.'" target="_blank">';
$ret .= AttrVal($dev,"alias",$dev);
$ret .= '</a></div>';
$ret .= '<div style="display:table-cell;'.$cellstyle.'width:30%;font-weight:bold;color:lightgrey;">';
$ret .= $md;
$ret .= '</div>';
$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 .= "<br \/><div style=\"text-align:left;\">(next check: ".$nextCheck.")</div>";
$ret .= '</div>';
return $ret;
}
userReadings newFwForDevices:MATCHED_READINGS.* {
my $ret = "";
my $newfwonly = AttrVal($name,"showNewFWOnly","yes");
if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {
my @eq3FwList = map {
sprintf(uc(ReadingsVal($name,"hmfw-type-".$_,"?")).":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);
} ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d\d)/g;
foreach my $dev (devspec2array("TYPE=CUL_HM|HMCCUDEV:FILTER=DEF=(......|..............):FILTER=subType!=virtual")) {
my $md = uc(InternalVal($dev,"ccutype",AttrVal($dev,"model","?")));
my $v = InternalVal($dev,"firmware",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);
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {
$ret .= "," if($ret ne "");
$ret .= $dev." (".$idx.")";
}
}
}
} else {
$ret = "error => no or wrong data from eq3-server!";
}
return ($ret eq "")?"no fw-updates needed!":$ret;
}
userattr showNewFWOnly:yes,no
webCmd reread
Ich würde gerne herausfinden, ob das httpmod template defekt ist und ggf. angepasst werden muss, damit es wieder läuft. Wenn das nichts wird, kann man ja nach alternativen weiter schauen :)
Mmh, soweit sieht dein List aus - bis auf, dass dir einige readings (LAST_REQUEST, MATCHED_READINGS) fehlen. Ich kann den Fehler auch nicht nachvollziehen. Ein neues Device mit dem Template liefert Daten nach einem reread.
Was wird dir angezeigt, wenn du
https://update.homematic.com/firmware/api/firmware/search/DEVICE
mal direkt aufrufst?
Möglicherweise ist dies ein Problem deines FHEMs - veraltete SSL, OS oder HTTPMOD Version?
Auf welchem OS läuft denn dein FHEM? Und welche FHEM Revision (Ausgabe von version in der FHEM Kommandozeile) hast du?
Die fehlenden Readings kann daran liegen, dass ich das Device kurz zuvor gelöscht und neu erstellt hatte, nur um sicher zu gehen. Wenn ich die URL in Edge auf meinem PC aufrufe, bekomme ich ein JSON. Auch mittels wget via ssh auf der FHEM-Maschine.
FHEM läuft auf einem proxmox-LXC mit Ubuntu 20.04, regelmäßige updates.
Latest Revision: 27642
File Rev Last Change
fhem.pl 27498 2023-04-30 08:50:41Z rudolfkoenig
98_HTTPMOD.pm 27065 2023-01-15 17:33:44Z StefanStrobel
Tja, da bin ich nun von hier aus ratlos. ::) Evtl weiss ein anderer Forist noch weiter.
Naja, es kommt ja ein HTTP 200 zurück, also ist der Aufruf erstmal ok.
Für eine Fehlersuche würde ich zuerst das Attribut showBody 1 setzen, damit man sehen kann, WAS da bei einem reread zurückkommt.
Edit: die Rückgabe scheint ok zu sein, bei mir kommt die gleiche content-length zurück:
httpheader HTTP/1.1 200 OK
Server: nginx
Date: Thu, 08 Jun 2023 21:28:30 GMT
Content-Type: text/plain
Content-Length: 1288
Connection: close
content-encoding: gzip
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: upgrade-insecure-requests
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /firmware/api/firmware/search/DEVICE
protocol https
redirects 0
timeout 2
url https://update.homematic.com/firmware/api/firmware/search/DEVICE
sslargs:
Das heißt, das Problem liegt wohl im Auswertungsteil selbst.
Bei mir funktioniert das device wie gehabt unauffällig.
Zitat von: betateilchen am 09 Juni 2023, 18:24:36Das heißt, das Problem liegt wohl im Auswertungsteil selbst.
Bei mir funktioniert das device wie gehabt unauffällig.
Nachtrag: ich verwende allerdings nicht attrTemplate, sondern habe das selbst eingepflegt.