eq3 firmware check funkioniert nicht mehr

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

Vorheriges Thema - Nächstes Thema

yersinia

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

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 (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.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

Zitat von: yersinia am 27 November 2020, 10:24:09
Erledigt
Danke!

ZitatDa sehe ich bisher keinen Bedarf für. Bisher gibt es sieben (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 ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

yersinia

Seh' ich grundsätzlich ähnlich und hab es als Wunsch in die Feature-Wunschliste mit aufgenommen.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

yersinia

#183
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 - Danke @betateilchen
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

frank

stefan hat letztens im httpmod modul "aufgeräumt".
dabei sind einige internals verschwunden.
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

yersinia

#186
Korrekt, das Internal TRIGGERTIME_FMT ist im httpmod weggefallen ([1], [2]) - das hatte ich im httpmod Thread aber auch mehrfach überlesen. ::)
Ich hab es jetzt in #183 (und im template) auskommentiert. Mir ist noch nicht ganz klar, wie man den Zeitpunkt des nächsten checks berechnen kann - und ob es überhaupt jemanden interessiert.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

betateilchen

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


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

yersinia

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! ;)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

betateilchen

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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

yersinia

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.

viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

yersinia

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 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: 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. :)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Frini

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!

yersinia

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.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl