eq3 firmware check funkioniert nicht mehr

Begonnen von slor, 25 Oktober 2017, 23:34:14

Vorheriges Thema - Nächstes Thema

frank

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?  :(
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

gloob

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

Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Nobby1805

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
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

Beta-User

@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 ...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

frank

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
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

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

@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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

frank

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.
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

Beta-User

 :) 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).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

frank

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, ...........
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

Beta-User

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 :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Nobby1805

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  ;)
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

OdfFhem

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;
}


frank

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.
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

Beta-User

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 :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors