Funktionsanfrage: hminfo erweiterungen firmware Versionsprüfung

Begonnen von no_Legend, 18 Januar 2016, 11:44:07

Vorheriges Thema - Nächstes Thema

frank

@knochenmuehle

sieht doch gut aus.

Zitatno fw-updates needed!
dann sind deine devices alle up-to-date. es werden nur welche angezeigt, für die es eine neuere fw gibt. zum testen könntest du bei einem rt zb das attr firmware auf eine ältere version setzen => 1.0 und einen neuen check starten.

oder vermisst du ein bestimmtes update?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

knochenmuehle


frank

es gibt nur eine fw 2.8.2 für dieses model => HM-LC-Bl1PBU-FM.
da bei dir nichts angezeigt wird, hat dein 2.5'er aktor das falsche model und die anderen sind sowieso zu neu, da nur auf die ersten 2 ziffern verglichen werden kann.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

mrfloppy

Hallo

Also ich wollte mir ein neues HTTPMOD definieren.
Sobald ich das aber mit der Alpha Version die hier gebraucht wird mache, schmiert mir Fhem ab.
Wen ich die Originale wieder einspiele kann ich ohne Probleme definieren.

Auch kommt der bei mir Ohne FW vorhandene Wassermelder wieder zum Vorschein nach einiger Zeit.

LG Thomas

RaspiMatic, RFXtrx433 E USB, Div. Thermostate, CUL433, Fhemduino, Signalduino, Temp/luftfeuchesensoren,Fensterkontakte,Intertechno Schalter,....... HM-IP

frank

ZitatAlso ich wollte mir ein neues HTTPMOD definieren.
Sobald ich das aber mit der Alpha Version die hier gebraucht wird mache, schmiert mir Fhem ab.
hm..., was kann ich mit dieser aussage sinnvolles anfangen.

ich würde in fhem.log schauen, was genau passiert. notfalls verbose hochdrehen, um mehr zu sehen.

fhem ist natürlich tagesaktuell und nach dem einspielen der alpha version wurde ein restart gemacht.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

SlrG

Hallo,

hat sich in FHEM irgendwas geändert, so dass die Abfrage der Firmwareversionen nicht mehr richtig funktioniert? Ich bekomme seit ein paar Tagen immer nur "no fw-updates needed!" angezeigt (auch bei Klick auf reread) und bin aber sicher, dass nicht alle Geräte die aktuelle Firmware besitzen.
Vielen Dank für alle Hinweise.

SlrG

frank

bei mir funktioniert es.

hast du die httpmod alpha-version mit einem update vernichtet?. falls ja, dann mach noch ein update. die version ist gerade eingecheckt.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

cjung

Hallo Frank,

kann es sein das eq3 die URL http://www.eq-3.de/db_action/download_suche.php  abgeschaltet hat und die Firmware suche darauf basiert ?
Mit FF und Chrome komme ich nicht mehr auf die URL.

Gruß
Christoph
Raspberry Pi 2 B
Funk: HM_CFG_USB2, HM-CFG-LAN 8*HM_CC_RT_DN, 3*HM-SEC-SD, 3*HM_TC_IT_WM_W_EU, 1*HM-LC-Dim1TPBU-FM,5*HM-SEC-SC-2, 1*HM-SEC-SCo
Wired: HMW: CFG-LAN, 8*LC_Bl1_DR, LC_Dim1L_DR

volschin

kannst Du von ausgehen, wenn Du die Meldung im Modul anschaust:
HTTP/1.1 404 Not Found Date: Sat, 12 Mar 2016 08:32:02 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 Connection: close Content-Type: text/html; charset=UTF-8 File not found.
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

frank

Zitat von: cjung am 12 März 2016, 11:52:03
Hallo Frank,

kann es sein das eq3 die URL http://www.eq-3.de/db_action/download_suche.php  abgeschaltet hat und die Firmware suche darauf basiert ?
Mit FF und Chrome komme ich nicht mehr auf die URL.

Gruß
Christoph
richtig, da hat sich leider einiges geändert.

1. die url im DEF von httpmod ändern in
http://www.eq-3.de/ajax/downloads.php
2. attr requestData.* ändern in
suchtext=&suche_in=2&downloadart=11

damit kommen schon mal wieder daten in fhem an.
aber die daten scheinen teilweise buggy zu sein im vergleich zu bisher, sodass die readings und das resultat noch nicht passen.

ich bleibe dran und melde mich wieder.

gruss frank
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

volschin

Die regex mit tgz muss man auch erweitern, da die neuen FW mit tar.gz eingestellt sind. Ich habe das mit

tgz|tar.gz|

Gelöst.
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

ph1959de

#56
Zitat von: volschin am 15 März 2016, 07:09:17
Die regex mit tgz muss man auch erweitern, da die neuen FW mit tar.gz eingestellt sind. Ich habe das mit

tgz|tar.gz|

Gelöst.
Bei der reading01Regex ist es etwas komplizierter. Der "neue" (komplette) Wert, der bei mir funktioniert:
reading01Regex href=\"([^\.]+\.tgz|[^\.]+\.tar.gz)\"
Ohne diese Änderung werden nicht alle fw_link-xx gefunden/gesetzt.

Bei reading[02|03|04|05]Regex ist "nur" - wie von volschin schon geschrieben
tgz|
durch
tgz|tar.gz|
zu ersetzen.

Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

no_Legend

Bei mir geht es so wieder.
Leider muss ich jetzt schon wieder ein Update machen  :o

Da sieht man mal wieder wieviel arbeit sowas macht.

Danke und Gruß Robert

Anbei mal das ganze aus der FHEM Config von mir, damit andere es funktionierend einbinden können:


define eq3 HTTPMOD http://www.eq-3.de/ajax/downloads.php 86400
attr eq3 userattr enableControlSet event-on-change-reading event-on-update-reading reading01AutoNumLen reading01Format reading01Name reading01RegOpt reading01RegOpt:s,i,g reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02RegOpt:s,i,g reading02Regex reading03AutoNumLen reading03Name reading03RegOpt reading03RegOpt:s,i,g reading03Regex reading04AutoNumLen reading04Name reading04RegOpt reading04RegOpt:s,i,g reading04Regex reading05AutoNumLen reading05Format reading05Name reading05RegOpt reading05RegOpt:s,i,g reading05Regex readingMaxAge readingMaxAgeReplacementMode readingMaxAgeReplacementMode:text,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 group Firmware-Check
attr eq3 reading01AutoNumLen 2
attr eq3 reading01Format http://www.eq-3.de%s
attr eq3 reading01Name fw_link
attr eq3 reading01RegOpt g
attr eq3 reading01Regex href=\"([^\.]+\.tgz|[^\.]+\.tar.gz)\"
attr eq3 reading02AutoNumLen 2
attr eq3 reading02Name fw_model
attr eq3 reading02RegOpt g
attr eq3 reading02Regex (?s)<p.class=\"name\">(?=.*?datum.*?href=\"[^\.]+\.(?:tgz|tar.gz|(*SKIP)(*FAIL))\").*?Kurz.Bez.:.([a-zA-Z0-9\-]+)
attr eq3 reading03AutoNumLen 2
attr eq3 reading03Name fw_version
attr eq3 reading03RegOpt g
attr eq3 reading03Regex (?s)<p.class=\"name\">(?=.*?datum.*?href=\"[^\.]+\.(?:tgz|tar.gz|(*SKIP)(*FAIL))\").*?Firmware.V([\d\.]+)
attr eq3 reading04AutoNumLen 2
attr eq3 reading04Name fw_release
attr eq3 reading04RegOpt g
attr eq3 reading04Regex (?s)<p.class=\"name\">(?=.*?datum.*?href=\"[^\.]+\.(?:tgz|tar.gz|(*SKIP)(*FAIL))\").*?datum..(\d\d\.\d\d\.\d\d\d\d)
attr eq3 reading05AutoNumLen 2
attr eq3 reading05Format http://www.eq-3.de%s
attr eq3 reading05Name fw_text
attr eq3 reading05RegOpt g
attr eq3 reading05Regex (?s)<p.class=\"name\">(?=.*?datum.*?href=\"[^\.]+\.(?:tgz|tar.gz|(*SKIP)(*FAIL))\").*?href=\"([^\.]+\.txt)\"
attr eq3 readingMaxAge 10
attr eq3 readingMaxAgeReplacementMode delete
attr eq3 requestData.* suchtext=&suche_in=2&downloadart=11
attr eq3 room 9.03_Tech
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/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) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=>\sfw(\d\d)_([\d\.]+)\)$/;; my $link = ReadingsVal($name,"fw_link-".$idx,"???");; my $date = ReadingsVal($name,"fw_release-".$idx,"???");; my $text = ReadingsVal($name,"fw_text-".$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 recieve missing data" style="color:yellow"':' style="color:light gray"').'>';;  $ret .= sprintf("%-23s",$md);; $ret .= '</b>';;  $ret .= " | ";;  $ret .= '<b'.(($ofw eq "0.0")?' title="missing attribute firmware => set device in teach mode to recieve missing data" style="color:yellow"':' style="color:light gray"').'>';;  $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 .= '<a title="eq3-changelog.txt" href="'.$text.'">';;  $ret .= sprintf("%-10s",$date);; $ret .= '</a>';;  $ret .= " |\n";;  } } $ret .= '</pre>';; $ret .= '</div>';; return $ret;; }
attr eq3 userReadings newFwForDevices:MATCHED_READINGS {\
my $ret = "";;\
my @eq3FwList = map { ReadingsVal("eq3","fw_model-".$_,"?").":".ReadingsVal("eq3","fw_version-".$_,"?").":".$_\
} 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}:/,@eq3FwList) {\
my ($nh,$nl,$no,$idx) = $newFw =~ m/^[^:]+:(\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?$no:"").")";;\
}\
}\
}\
return ($ret eq "")?"no fw-updates needed!":$ret;;\
}
attr eq3 webCmd reread
Docker FHEM immer aktuell,4x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
Homematic, Shelly, Tasmota, MQTT, Unifi Network usw.

frank

da die daten nun nicht mehr konsistent sind, habe ich etwas umgebaut, und extrahiere die notwendigen daten nun aus dem jeweiligen namen des fw-files. dafür ist das httpmod device jetzt ziehmlich "schmal" geworden.  :)

define eq3 HTTPMOD http://www.eq-3.de/ajax/downloads.php 86400
attr eq3 userattr enableControlSet event-on-change-reading event-on-update-reading reading01AutoNumLen reading01Format reading01Name reading01RegOpt reading01RegOpt:s,i,g reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02RegOpt:s,i,g reading02Regex reading03AutoNumLen reading03Name reading03RegOpt reading03RegOpt:s,i,g reading03Regex reading04AutoNumLen reading04Name reading04RegOpt reading04RegOpt:s,i,g reading04Regex reading05AutoNumLen reading05Format reading05Name reading05RegOpt reading05RegOpt:s,i,g reading05Regex readingMaxAge readingMaxAgeReplacementMode readingMaxAgeReplacementMode:text,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 reading01AutoNumLen 2
attr eq3 reading01Format http://www.eq-3.de%s
attr eq3 reading01Name fw_link
attr eq3 reading01RegOpt g
attr eq3 reading01Regex <a.href=\"(\/Downloads\/Software\/Firmware\/[^"]+)\"
attr eq3 readingMaxAge 10
attr eq3 readingMaxAgeReplacementMode delete
attr eq3 requestData.* suchtext=&suche_in=2&downloadart=11
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/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 recieve 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 recieve 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;; }
attr 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)/;; \
$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;;\
}
attr eq3 webCmd reread


ich schätze, dass das nicht die letzte anpassung war.  ;)

gruss frank
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

ph1959de

Herzlichen Dank, Frank.

Sehe gerade, dass die "new_fw" jetzt dreistellig ausgegeben wird - auch gut. 

Ich möchte gern das "eq3" Device ins Wiki übernehmen (ich denke, ein neuer Abschnitt in http://www.fhemwiki.de/wiki/HomeMatic_Firmware_Update wäre ein guter Platz dafür) - es sei denn, Du möchtest das nicht oder möchtest es selbst machen.

Außerdem halte ich Deine Arbeit immer noch für ein sehr gutes Beispiel für den Einsatz (und vor allem auch für die Verdeutlichung der Möglichkeiten) des HTTPMOD Moduls (würde es auf jeden Fall dann auch von HTTPMOD aus verlinken).

Gruß, Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"