Anwendungsbeispiel JsonMod #6: eq3 / homematic firmware check

Begonnen von yersinia, 16 April 2020, 13:08:51

Vorheriges Thema - Nächstes Thema

yersinia

Hallo zusammen,

es gibt bereits einen eq-3 firmware check basierend auf HTTPMOD (auch als httmod template). Da eq-3 einen JsonP String der Firmware-Versionen liefert, warum dann nicht JsonMod nutzen?

Vorbedingung ist die JsonMod.pm Version ab heute morgen heute morgen (Rev. 22651).

Anbei die RAW Definition (Dank an @mcp für den HmIP Input & Dank an @dennisk für die HMCCUCHN-Erweiterung):
defmod homematic_fw_check JsonMod https://update.homematic.com/firmware/api/firmware/search/DEVICE
attr homematic_fw_check userattr updatableDevicesMode:onlyUpdatable,all useFwAliasMode:normal,convert2Alias
attr homematic_fw_check interval 0 12 * * *
attr homematic_fw_check readingList multi(jsonPath('$[*]'), uc(property('type')), property('version'));;
attr homematic_fw_check stateFormat { my $ret = "";;\
my $highlightcolor = "DarkSlateGray";;\
my $lastCheck = ReadingsTimestamp($name,".computedReadings",0);;\
my $nextCheck = InternalVal($name,"NEXT","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 => ';;\
$ret .= $lastCheck;;\
$ret .= '</div>';;\
if(AttrVal($name,"updatableDevicesMode","") eq "all") {\
$ret .= "<div>Attribute <font style=\"color:yellow;;\">updatableDevicesMode</font> is set to <font style=\"color:yellow;;font-weight:bold;;\">all</font> = <font style=\"font-style:italic;;\">all found Devices</font> will be displayed.</div>";;\
}\
if(AttrVal($name,"useFwAliasMode","") eq "convert2Alias") {\
$ret .= "<div>Attribute <font style=\"color:yellow;;\">useFwAliasMode</font> is set to <font style=\"color:yellow;;font-weight:bold;;\">convert2Alias</font> = Device model is replaced where applicable.</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 .= '<br /><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,$readingStr) = $devStr =~ m/([^\s]+)[(]([^\s]+)[)]/;;\
        #my $md = AttrVal($dev,"model","?");;\
my $md = $readingStr;;\
        my $ofw = InternalVal($dev,"firmware",ReadingsVal($dev,"D-firmware",AttrVal($dev,"firmware","0.0")));;\
        my $nfw = ReadingsVal($name,$md,"none");;\
my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;\
$ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" onmouseout="this.style.background=\'transparent\';;">';;\
$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:40%;;font-weight:bold;;color:lightgrey;;">';;\
        $ret .= $md;;\
        $ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;color:lightgrey;;">';;\
        $ret .= $ofw;;\
        $ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;">';;\
        $ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank"';;\
if($nfw ne "none") {\
        my ($oh, $ol, $op) = split('\.',$ofw);;\
$op //= "0";;\
        my ($nh, $nl, $np) = split('\.',$nfw);;\
if(($nh > $oh) || (($nh == $oh) && ($nl > $ol)) || (($nh == $oh) && ($nl == $ol) && ($np > $op))) {\
  $ret .= ' style="color:red !important;;"';;\
            }\
}\
        $ret .= '>'.$nfw;;\
        $ret .= '</a></div>';;\
$ret .= '</div>';; #row\
      }\
  $ret .= '</div><br \/>';; #table\
    }\
$ret .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
$ret .= '</div>';;\
  return $ret;;\
}
attr homematic_fw_check updatableDevicesMode onlyUpdatable
attr homematic_fw_check update-on-start 0
attr homematic_fw_check useFwAliasMode normal
attr homematic_fw_check userReadings newFwForDevices {\
  my $ret = "";;\
  my $newfwonly = AttrVal($name,"updatableDevicesMode","");;\
  my $fwaliasmode = AttrVal($name,"useFwAliasMode","");;\
  my %modelalias = qw(HM-LC-JAPBU-FM HM-LC-BL1PBU-FM\
  HM-LC-SW2PBU-FM HM-LC-BL1PBU-FM\
  HM-LC-SW1-DR HM-LC-BL1PBU-FM);; #cur_model fw_alias\
  if (ReadingsVal($name,".computedReadings","none") ne "none") {\
  my @devices = split(',',ReadingsVal($name,".computedReadings","none"));;\
foreach my $dev (devspec2array("TYPE=CUL_HM|HMCCUDEV|HMCCUCHN:FILTER=DEF=(......|..............|................):FILTER=subType!=virtual")) {\
  my $md = uc(InternalVal($dev,"ccutype",AttrVal($dev,"model","?")));;\
  if(($fwaliasmode eq "convert2Alias") && (exists($modelalias{$md}))) {\
  $md = $modelalias{$md};;\
  }\
  my $v = InternalVal($dev,"firmware",ReadingsVal($dev,"D-firmware",AttrVal($dev,"firmware","0.0")));;\
  my ($h,$l) = split('\.',$v);;\
  if ((ReadingsVal($name,$md,"none") ne "none") || ($newfwonly eq "all")) {\
my $fwv = ReadingsVal($name,$md,"0.0");;\
my ($fwh, $fwl) = split('\.',$fwv);;\
if(($newfwonly eq "all") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
  $ret .= $dev."(".$md.") ";;\
}\
  }\
}\
  } else {\
$ret = "error => no or wrong data from eq3-server!";;\
  }\
  return ($ret eq "")?"no fw-updates needed!":$ret;;\
}
attr homematic_fw_check verbose 3
attr homematic_fw_check webCmd reread


Die Funktion entspricht grundsätzlich dem Httpmod template. Es gibt auch hier ein user Attribute updatableDevicesMode - beim Standard onlyUpdatable werden nur solche Devices, für die eine neue firmware gefunden worden ist, angezeigt; bei all werden alle HM-Devices im FHEM mit der gefundenen Firmware Version angezeigt. Dadurch können auch Devices auftauchen, für die es idR keine Updates geben würde (zB HM-SEC-SCO). Mit dem Update vom 25.11.'20 werden sowohl HM als auch HmIP Devices angezeigt.

Das user Attribut useFwAliasMode bewirkt ein Ersetzen des Device models bei der Prüfung - dazu muss der Wert vom Standard normal auf convert2Alias geändert werden. Folgende Alias sind in dem Template derzeit definiert:
HM-LC-JAPBU-FM -> HM-LC-BL1PBU-FM
HM-LC-SW2PBU-FM -> HM-LC-BL1PBU-FM
HM-LC-SW1-DR -> HM-LC-BL1PBU-FM

Die Änderung greift erst nach einem erneuten Update.

Das Interval ist auf täglich, 12 Uhr gesetzt und kann/sollte nach Bedarf angepasst werden:
attr homematic_fw_check interval 0 12 * * *

Bei der Erstausführung des Devices kann es zu einer Fehlermeldung kommen. Über die WebCmd Funktion reread können die Daten neu eingelesen werden. Ein reload über temporäres anpassen des Intervals ist möglich, zB für alle zwei Minuten. Zurückstellen nicht vergessen.

Die Versionsprüfung basiert bei den HM-Devices auf zwei Attributen: model und firmware (bei HmIP sind es die Internals ccutype 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.
Die Firmware des FHEM Devices hat nur zwei Positionen: x.y; eq-3 liefert allerdings drei Positionen: x.y.z. Dadurch kann es zu Ungenauigkeiten kommen.

Das Device kann auch nur solche Geräte anzeigen, die in der Quelle zur Verfügung gestellt werden. So gibt es zB für den HM-ES-PMSW1-PL (oder den oben erwähnten HM-SEC-SCO) keine Firmware Einträge.

EDIT 2020-04-16: fixed typo im interval
EDIT 2020-04-19: weg vom <pre> zu mehr responsive design (<div>-Tabelle); typo in der 'doku'
EDIT 2020-04-24: row-highlighting bei onmouseover hinzugefügt; die Farbe ist DodgerBlue; kann im stateFormat Attribut angepasst/ersetzt werden
EDIT 2020-04-30: Attribute showNewFWOnly durch updatableDevicesMode; uppercase Model-Bezeichnung Konflikt gelöst
EDIT 2020-08-24: mit der Revision 22651 und neuen JsonMod Funktionen, konnte ich den Code etwas optimieren; neue Funktion/user Attribut useFwAliasMode hinzugefügt
EDIT 2020-11-26: Vielen Dank an @mcp für den HmIP Input sowie Test
EDIT 2020-12-03: Änderung der Datum-/Zeitanzeige (Letzte Aktualisierung, nächste Aktualisierung) zurück auf FHEM Standard: YYYY-MM-DD hh:mm:ss
EDIT 2021-07-18: Vielen Dank an @dennisk für die HMCCUCHN-Erweiterung sowie Test
EDIT 2022-11-01: Aufnahme des readings D-firmware für die Firmware-Version
EDIT 2022-11-02: fix Perl-Warnings
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

wendeling

Hallo,
bin auf Zufall , da ich ein Update für Homatic Geräte gesucht habe hier gelandet.

Habe Dein letzte Skript eingespielt.
Bekomme folgende Meldung :

Zur Info, habe zuvor ein komplettes Update von FHEM und Raspberry durchgeführt.
Was mache ich falsch ?

mfg
Wendelin



yersinia

Wenn das Device angelegt worden ist, dauert es ein paar Sekunden bis das Device das JsonP verarbeitet hat.
Einfach nochmal in das Device schauen, ob sich was getan hat.
(du siehst es zB an dem
Zitatlast homeatic-fw-check => 01.01. 00:00
-> da sollte Datum und Uhrzeit des letzten Laufs stehen)

Wenn sich immernoch nichts tut, benötige ich ein list des Devices
list homematic_fw_check
und die version von JsonMod
version JsonMod
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

wendeling

Hallo,
hier das homatic list :


Internals:
   CFGFN     
   DEF        https://update.homematic.com/firmware/api/firmware/search/DEVICE
   FUUID      5e9fe73f-f33f-d27b-0d21-611d5bee33eb6cd8
   NAME       homematic_fw_check
   NEXT       2020-04-22 12:00:00
   NOTIFYDEV  global
   NR         1820
   NTFY_ORDER 50-homematic_fw_check
   STATE      <div style="text-align:left;">last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html" rel="noopener noreferrer" target="_blank">homematic</a>-fw-check => 01.01. 00:00<br /><br /><div style="color:red;font-weight:bold;">error => no or wrong data from eq3-server!</div><br /><div style="text-align:left;">(next check: 22.04. 12:00)</div></div>
   SVN        21711 2020-04-17 23:29:22 UTC
   TYPE       JsonMod
   .userReadings:
     HASH(0x5555b58)
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://update.homematic.com/firmware/api/firmware/search/DEVICE
     SECRET:
   READINGS:
Attributes:
   icon       hm_ccu
   interval   0 12 */1 * *
   readingList multi(jsonPath('$[*]'), property('type'), property('version'));
   room       Z_WHICHROOM
   showNewFWOnly yes
   stateFormat { my $ret = "";
my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));
my $nextCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(InternalVal($name,"NEXT","2000-01-01 00:00:00"))));
my $cellstyle = "padding:3pt;border-bottom:1px dotted lightgray;";
$ret .= '<div style="text-align:left;">';
$ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html" rel="noopener noreferrer" target="_blank">homematic</a>-fw-check => ';
$ret .= $lastCheck;
$ret .= '<br />';
if(AttrVal($name,"showNewFWOnly","yes") eq "no") {
$ret .= "Attribute <font style=\"color:yellow;\">showNewFWOnly</font> is set to <font style=\"color:yellow;font-weight:bold;\">no</font> = <font style=\"font-style:italic;\">all found Devices</font> will be displayed.";
}
$ret .= '<br />';
    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 .= '<br /><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:30%;font-weight:bold;">model</div>';
  $ret .= '<div style="display:table-cell;'.$cellstyle.'width:10%;font-weight:bold;">current</div>';
  $ret .= '<div style="display:table-cell;'.$cellstyle.'width:10%;font-weight:bold;">new</div>';
$ret .= '</div>'; #header
      my @devices = split(' ',$check);
      foreach my $dev (@devices) {
        my $md = AttrVal($dev,"model","?");
        my $ofw = AttrVal($dev,"firmware","0.0");
        my $nfw = ReadingsVal($name,$md,"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;;
}
   update-on-start 1
   userReadings newFwForDevices {
  my $ret = "";;
  my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;
  if (ReadingsVal($name,".computedReadings","none") ne "none") {
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);;
  if ((ReadingsVal($name,$md,"none") ne "none") || ($newfwonly eq "no")) {
my $fwv = ReadingsVal($name,$md,"0.0");;
my ($fwh, $fwl) = split('\.',$fwv);;
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {
  $ret .= $dev." ";;
}
  }
}
  } else {
$ret = "error => no or wrong data from eq3-server!";;
  }
  return ($ret eq "")?"no fw-updates needed!":$ret;;
}
   userattr   showNewFWOnly:yes,no


und die Version .

es hat sich nichts verändert !




Otto123

#4
Moin,
Zitatdauert es ein paar Sekunden bis das Device das JsonP verarbeitet hat.
kann ich bestätigen, nach ein paar Minuten war dann alles da. Danke!

Aber jetzt die Frage: meine HM-TC-IT-WM-W-EU  zeigen mir jetzt an es gäbe eine neue Firmware 1.3 -> 1.4.2
Aber wo bekomme ich die her? siehe weiter unten
auf der Seite wo das JsonMod jetzt sucht bin ich zu doof zum finden  ::)

Hast Du da noch einen Tipp

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

carlos

Also bei mir funktioniert der Tasmota check auch nicht.
Der ESPEasy check geht seit heute. Da war es genau so
Irgendwas mit dem Datum bzw. Zeit stimmt wohl ncht.
Siehe screen shot.
Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

wendeling

Hallo,
also doch jetzt mit dieser Anzeige:

Wie bekomme ich die große Ansicht ?


MadMax-FHEM

Zitat von: Otto123 am 22 April 2020, 09:22:47
Moin,kann ich bestätigen, nach ein paar Minuten war dann alles da. Danke!

Aber jetzt die Frage: meine HM-TC-IT-WM-W-EU  zeigen mir jetzt an es gäbe eine neue Firmware 1.3 -> 1.4.2
Aber wo bekomme ich die her? auf der Seite wo das JsonMod jetzt sucht bin ich zu doof zum finden  ::)

Hast Du da noch einen Tipp

Gruß Otto

Wenn du sie nicht findest, kann ich sie später mal hier einstellen...
...die gibt es schon lange.

Ich hab sie mir "damals" noch von der "alten" Seite runtergeladen...

EDIT: oder das mal probieren https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=HM-TC-IT-WM-W-EU stammt aus "meinem" HTTPMOD-FW-Check...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

#8
Hallo Joachim,

ja das ist sicher eine Lösung, aber generell: Wie kann man denn mit dem JsonMod Tool die Firmware Unterschiede finden wenn die Firmware selbst scheinbar gar nicht da ist? Was haben die da für ne Seite gebastelt? Oder muss man hier einfach noch einen Anderen Link propagieren? Das Tool hier aus dem Thread zeigt den Link in der letzten Spalte  ;D
Im HTTPMOD Tool haben wir ja sogar die Links zur Firmware mit reingebaut.

Edit: Ja genau, jetzt hat sich unsere Editiererei überschnitten :)

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

herrmannj

JsonMod hat ein attribut bekommen "update-on-start". Wenn man das auf '1' setzt dann werden die Daten beim "starten" bereits das erste mal gelesen, sonst das erste mal wenn das intervall erreicht ist. Das Verhalten ist "neu" / etwa eine Woche.

Dies: "meine HM-TC-IT-WM-W-EU  zeigen mir jetzt an es gäbe eine neue Firmware 1.3 -> 1.4.2" steht bei EQ3 tatsächlich so in der Datei. Da steht drin 1.4.2

Otto123

Daran hab ich nicht gezweifelt. Ich glaube das HTTPMOD Tool hat mir die letzte Zeit (Jahre?) da nie was gezeigt. Wahrscheinlich war es schon in irgendeiner Art "kaputt".
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

yersinia

#11
Zitat von: Otto123 am 22 April 2020, 09:22:47Aber jetzt die Frage: meine HM-TC-IT-WM-W-EU  zeigen mir jetzt an es gäbe eine neue Firmware 1.3 -> 1.4.2
Aber wo bekomme ich die her? auf der Seite wo das JsonMod jetzt sucht bin ich zu doof zum finden  ::)
Entweder wie MadMax-FHEM schreibt direkt aufrufen oder du klickst auf den Link der neuen, rot eingefärbten firmware Version (letzte Spalte).

Zitat von: carlos am 22 April 2020, 09:42:58Also bei mir funktioniert der Tasmota check auch nicht.
Der ESPEasy check geht seit heute. Da war es genau so
Irgendwas mit dem Datum bzw. Zeit stimmt wohl ncht.
JsonMod muss anscheinend einmal richtig laden. Man könnte das Interval temporär auf */2 * * * * (alle zwei Minuten) setzen. Für ESPEasy und tasmota fw check gibt es einen eigenen Thread:
Anwendungsfall JsonMod #7: github api für firmware update checks nutzen

Zitat von: wendeling am 22 April 2020, 09:45:23Wie bekomme ich die große Ansicht ?
siehe post #1:
Zitat von: yersinia am 16 April 2020, 13:08:51Es gibt auch hier ein user Attribute showNewFWOnly - beim Standard yes werden nur solche Devices, für die eine neue firmware gefunden worden ist, angezeigt; bei no werden alle HM-Devices im FHEM mit der gefundenen Firmware Version angezeigt.
Setze das Attribut showNewFWOnly auf no

Zitat von: Otto123 am 22 April 2020, 09:58:58ja das ist sicher eine Lösung, aber generell: Wie kann man denn mit dem JsonMod Tool die Firmware Unterschiede finden wenn die Firmware selbst scheinbar gar nicht da ist? Was haben die da für ne Seite gebastelt? Oder muss man hier einfach noch einen Anderen Link propagieren? Im HTTPMOD Tool haben wir ja sogar die Links zur Firmware mit reingebaut.
In der rechten Spalte gibt es den Link direkt auf die neue, rot eingefärbte firmware Version (letzte Spalte). ;)

Zitat von: herrmannj am 22 April 2020, 10:16:57
JsonMod hat ein attribut bekommen "update-on-start". Wenn man das auf '1' setzt dann werden die Daten beim "starten" bereits das erste mal gelesen, sonst das erste mal wenn das intervall erreicht ist. Das Verhalten ist "neu" / etwa eine Woche.
ist im Template enthalten:
attr homematic_fw_check update-on-start 1

Ich möchte noch auf eine kleine Diskrepanz hinweisen:
Zitat von: yersinia am 16 April 2020, 13:08:51Die 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.
Das ist noch nicht gefixt im JsonMod; kann aber temporär mit dem Attribut showNewFWOnly no umschifft werden.

Zitat von: Otto123 am 22 April 2020, 10:20:24Daran hab ich nicht gezweifelt. Ich glaube das HTTPMOD Tool hat mir die letzte Zeit (Jahre?) da nie was gezeigt. Wahrscheinlich war es schon in irgendeiner Art "kaputt".
Nicht wirklich, die model Bezeichnungen von FHEM und eq-3 sind unterschiedlich. Ich hatte das im httmod eq3-fw check Thread aktualisiert
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

Otto123

ZitatEntweder wie MadMax-FHEM weiter unten schreibt direkt aufrufen oder du klickst auf den Link der neuen, rot eingefärbten firmware Version (letzte Spalte).
Ach komm, so einfach ? Der war doch gestern noch nicht da  :P
Danke!

Sonnige Grüße
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

yersinia

Zitat von: Otto123 am 22 April 2020, 10:35:23Ach komm, so einfach ? Der war doch gestern noch nicht da  :P
Neee, das haben wir auch Wellenartig implentiert, Leibzsch war letzte Nacht dran afaik. ;D
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

wendeling

Hallo,
habe jetzt noch das Problem , dass meine Schaltsteckdose(n)  HM-ES-PMSW1-PL in der Abfrage nicht erscheint !?
Model steht so in FHEM !

Gruß
Wendelin

yersinia

Zitat von: wendeling am 22 April 2020, 11:20:10habe jetzt noch das Problem , dass meine Schaltsteckdose(n)  HM-ES-PMSW1-PL in der Abfrage nicht erscheint !?
Model steht so in FHEM !
Ist bekannt.
Zitat von: yersinia am 22 April 2020, 10:25:52Ich möchte noch auf eine kleine Diskrepanz hinweisen:
Zitat von: yersinia am 16 April 2020, 13:08:51Die 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.
Das ist noch nicht gefixt im JsonMod; kann aber temporär mit dem Attribut showNewFWOnly no umschifft werden.

Die model Bezeichnungen von FHEM und eq-3 sind unterschiedlich. Ich hatte das im httmod eq3-fw check Thread aktualisiert
Für JsonMod warte ich noch auf einen fix um die Readings nachbearbeiten zu können.
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


MadMax-FHEM

#17
Zitat von: wendeling am 22 April 2020, 11:20:10
Hallo,
habe jetzt noch das Problem , dass meine Schaltsteckdose(n)  HM-ES-PMSW1-PL in der Abfrage nicht erscheint !?
Model steht so in FHEM !

Gruß
Wendelin

Die tauchen aber auch bei meinem (noch funktionierenden, siehe FW-Link ;)  ) HTTPMOD nicht auf...

In der "Modul-Liste" (JsonMod) tauchen nur folgende auf:

HM-ES-PMSw1-Pl-DN-R1
HM-ES-PMSw1-Pl-DN-R2
HM-ES-PMSw1-Pl-DN-R3
HM-ES-PMSw1-Pl-DN-R4
HM-ES-PMSw1-Pl-DN-R5

Nachfolger!?

Siehe auch: https://homematic-forum.de/forum/viewtopic.php?t=29975&start=10

EDIT:
ZitatDas ist noch nicht gefixt im JsonMod; kann aber temporär mit dem Attribut showNewFWOnly no umschifft werden.
habe ich gesetzt...

EDIT: aber auf dem fhem mit dem JsonMod-Modul aktuell nat. keinen HM-ES-PMSw1-Pl (ist nur ein Testsystem) ;) / leider auch grad keinen "über" um das mal zu testen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

#18
ZitatHallo,
habe jetzt noch das Problem , dass meine Schaltsteckdose(n)  HM-ES-PMSW1-PL in der Abfrage nicht erscheint !?
Model steht so in FHEM !

Gruß
Wendelin
Klappt aber bei mir ?
| PSD1                                     | HM-ES-PMSW1-PL          |    2.5 |   none |
| PSD2                                     | HM-ES-PMSW1-PL          |    2.5 |   none |
| PSD3                                     | HM-ES-PMSW1-PL          |    2.5 |   none |


Da gab die letzte Welle doch mehr her? :)
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

herrmannj

ZitatFür JsonMod warte ich noch auf einen fix um die Readings nachbearbeiten zu können.
yepp, cih schua mal das ich da heute was liefere. Im Kern einmal 'uc' und 'lc' analog zu 'concat'

ZitatJsonMod muss anscheinend einmal richtig laden. Man könnte das Interval temporär auf */2 * * * * (alle zwei Minuten) setzen.
Bitte kurze Erläuterung damit ich das verstehe, vielleicht kann man etwas dagegen tun.

Interval auf 2 Minuten setzen "sollte eigentlich" nicht notwendig sein (auch nichts ändern).

Geplantes Verhalten:
Wenn "update-on-start" gesetzt ist wird direkt nach dem FHEM Start (bzw nach dem define des device) eine Abfrage "ausser der Zeit" gestartet. Die Abfrage erfolgt asynchron und wird (wie sonst auch) im Fehlerfall unbegrenzt oft (mit Pausen) wiederholt.

Es kann also passieren das man im Frontend auf F5 drücken muss um die erzeugten readings zu sehen, aber sowas wie erstmal warmlaufen oder so gibt es nicht (wenn update-on-start gesetzt ist). Daher "sollte" eigentlich kein Bedarf für "Interval temporär auf */2 * * * * " bestehen.

Passt das mit dem beobachteten Verhalten ?

wendeling

Hallo,
ok, hier scheint es so dass ich alte Geräte! habe .

Habe erst diese Woche ein Update von 1.6 auf 2.5 aufgespielt (hatte ich hier gefunden) .
Hat auch funktioniert.
Aber wenn ich jetzt sehe, dass es schon die 2.6 gibt, halt nur mit dem Zusatz DNx.
Was kann ich tun ? Passt da evtl auch eine für meine Geräte ?

Gruß
Wendelin

Otto123

Zitat von: wendeling am 22 April 2020, 11:42:05
Aber wenn ich jetzt sehe, dass es schon die 2.6 gibt, halt nur mit dem Zusatz DNx.
Was kann ich tun ? Passt da evtl auch eine für meine Geräte ?
Ich würde sagen nein!
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

yersinia

#22
Zitat von: MadMax-FHEM am 22 April 2020, 11:31:38
In der "Modul-Liste" (JsonMod) tauchen nur folgende auf:

HM-ES-PMSw1-Pl-DN-R1
HM-ES-PMSw1-Pl-DN-R2
HM-ES-PMSw1-Pl-DN-R3
HM-ES-PMSw1-Pl-DN-R4
HM-ES-PMSw1-Pl-DN-R5

EDIT: aber auf dem fhem mit dem JsonMod-Modul aktuell nat. keinen HM-ES-PMSw1-Pl (ist nur ein Testsystem) ;) / leider auch grad keinen "über" um das mal zu testen...
Zitat von: wendeling am 22 April 2020, 11:42:05
Habe erst diese Woche ein Update von 1.6 auf 2.5 aufgespielt (hatte ich hier gefunden) .
Aber wenn ich jetzt sehe, dass es schon die 2.6 gibt, halt nur mit dem Zusatz DNx.
Was kann ich tun ? Passt da evtl auch eine für meine Geräte ?
Schaut mal hier: https://forum.fhem.de/index.php/topic,109449.0.html

Afaik ggibt es in der Quelle keinen Eintrag für HM-ES-PMSw1-Pl - da kann dann weder HTTMOD noch JsonMod was finden. ;)
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

#23
Zitat von: herrmannj am 22 April 2020, 11:38:53Bitte kurze Erläuterung damit ich das verstehe, vielleicht kann man etwas dagegen tun.

Interval auf 2 Minuten setzen "sollte eigentlich" nicht notwendig sein (auch nichts ändern).

Geplantes Verhalten:
Wenn "update-on-start" gesetzt ist wird direkt nach dem FHEM Start (bzw nach dem define des device) eine Abfrage "ausser der Zeit" gestartet. Die Abfrage erfolgt asynchron und wird (wie sonst auch) im Fehlerfall unbegrenzt oft (mit Pausen) wiederholt.

Es kann also passieren das man im Frontend auf F5 drücken muss um die erzeugten readings zu sehen, aber sowas wie erstmal warmlaufen oder so gibt es nicht (wenn update-on-start gesetzt ist). Daher "sollte" eigentlich kein Bedarf für "Interval temporär auf */2 * * * * " bestehen.

Passt das mit dem beobachteten Verhalten ?
Das passt zumindest mit dem bei mir beobachteten Verhalten. Es passiert erstmal gar nichts nachdem man das Device definiert hat - bis man das Interval anpasst (zB alle zwei Minuten; bei homematic muss man imho vorsichtig sein, die haben anscheinend eine sensible DDOS Erkennung, wer zu oft fragt wird geblockt...) und/oder NEXT eintrifft.

EDIT: Ich wünsche mir dazu noch ein set reread; analog zum httpmod; dann kann man auch ein webcmd reread anbieten. :)

Ich weiss auch noch nicht ganz, ob und welche events man steuern sollte. event-on-change-reading .computedReadings evtl?

[OT]
Die cron Notation ist mal eine megageile sache! Vielleicht findet das noch weitere Nachahmer.
[/OT]
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

Otto123

Zitat von: yersinia am 22 April 2020, 11:45:26
Schaut mal hier: https://forum.fhem.de/index.php/topic,109449.0.html

Afaik ggibt es in der Quelle keinen Eintrag für HM-ES-PMSw1-Pl - da kann dann weder HTTMOD noch JsonMod was finden. ;)
Ach so ok, er zeigt meinen Aktor mit Firmware an, wird aber keine andere/neue finden.

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

wendeling

folgende HM Geräte werden bei mir nicht gefunden nicht gefunden :

HM-SEN-MDIR-O-3
HM-MOD-EM-8
HM-SEN-RD-O
HM-WDS30-OT2-SM
HM-SEN-WA-OD
HM-WDS100-C6-O-2

und wie sieht es mit HM-wired aus ?

Gruß
Wendelin

yersinia

Zitat von: Otto123 am 22 April 2020, 11:55:49
Ach so ok, er zeigt meinen Aktor mit Firmware an, wird aber keine andere/neue finden.
Richtig, das Device soll dann alle gefunden HM Aktoren anzeigen, unabhängig davon ob es neue fw gibt oder nicht. Obwohl die neue fw mit 'none' angezeigt wird, wird der Link trozdem generiert. In einem Fehlerfall (im Device code; wie aktuell mit den model Bezeichnungen) könnte man so die aktuelle fw immernoch laden, sofern vorhanden.
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

wendeling

#27
update:

jetzt werden die Geräte angezeigt , aber natürlich keine HMW Geräte !

aber alle mit "none" 

Im Anhang die Übersicht nur über die Steckdosen :





Gruß

yersinia

Zitat von: wendeling am 22 April 2020, 11:57:45
folgende HM Geräte werden bei mir nicht gefunden nicht gefunden :

HM-SEN-MDIR-O-3
HM-MOD-EM-8
HM-SEN-RD-O
HM-WDS30-OT2-SM
HM-SEN-WA-OD
HM-WDS100-C6-O-2

Werden sie über
list TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)
gefunden?

Wenn ja, sind Attr model und firmware der Devices gepflegt?

Wenn ja, kann es nur sein, dass es entweder an dem model-Bezeichnung-Unterschied liegt oder sie von eq-3 nicht zur Verfügung stehen.
HM-SEN-MDIR-O-3 -> nicht vorhanden
HM-MOD-EM-8 -> nicht vorhanden
HM-SEN-RD-O -> nicht vorhanden
HM-WDS30-OT2-SM -> nicht vorhanden
HM-SEN-WA-OD -> nicht vorhanden
HM-WDS100-C6-O-2 -> nicht vorhanden

Zitat von: wendeling am 22 April 2020, 11:57:45und wie sieht es mit HM-wired aus ?
Schlecht, liefert afaik die Quelle nicht.
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

Zitat von: wendeling am 22 April 2020, 12:03:02
aber alle mit "none" 

Im Anhang die Übersicht nur über die Steckdosen:
Siehe post weiter oben:
Zitat von: yersinia am 22 April 2020, 11:45:26
Schaut mal hier: https://forum.fhem.de/index.php/topic,109449.0.html

Afaik ggibt es in der Quelle keinen Eintrag für HM-ES-PMSw1-Pl - da kann dann weder HTTMOD noch JsonMod was finden. ;)
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

wendeling

ok, ich sehe schon für die nicht IP Geräte werden wohl bald keine updates mehr angeboten.
Aber dann sollten die auch den Verkauf stoppen !

Versändnisfrage:
IP Geräte funktionieren ja nicht direkt mit FHEM wie die normalen Homatic Gerte ?!

richtig ?

Gruß
Wendelin

yersinia

#31
Zitat von: wendeling am 22 April 2020, 12:15:26
ok, ich sehe schon für die nicht IP Geräte werden wohl bald keine updates mehr angeboten.
Aber dann sollten die auch den Verkauf stoppen !
NEIN! Die nicht HmIP HM Geräte sollen schön im Verkauf bleiben, da es gut funktioniert, imho.
Denn: nicht für alle HM Geräte benötigt man zwingend immer neuere Firmware, zb für den HM-SEC-SCO. Was willste da mit neuer Firmware?

Zitat von: wendeling am 22 April 2020, 12:15:26Versändnisfrage:IP Geräte funktionieren ja nicht direkt mit FHEM wie die normalen Homatic Gerte ?!
Für diese Frage bitte einmal das Wiki bzw. das Board Homematic bemühen, das wird hier sonst OT. Für die HmIP Geräte hast du dann sowieso eine CCU die das mit der fw für dich regelt.
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

Zitat von: yersinia am 16 April 2020, 13:08:51Hier 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.
Ich hab es geschafft, dieses Problem zu umgehen und kann nun eine bessere Lösung anbieten. Aktualisiertes RAW und erweiterte Details im ersten post.
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

Seit heute morgen gibt es eine neue JsonMod Revision 22651 mit neuen Funktionen.
Dies ermöglicht ein kleines Update zum homematic firmware check - post #1 ist aktualisiert.
Dank geht an herrmannj für die Weiterentwicklung von JsonMod! :)
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

paul79

Hallo,

ich habe es wie vorn beschrieben eingerichtet und bekomme folgende Fehler:

2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $name in substitution (s///) at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode.pm line 105.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $name in exists at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode.pm line 108.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $name in lc at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode.pm line 109.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $find in exists at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode/Alias.pm line 25.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $find in hash element at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode/Alias.pm line 26.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $find in pattern match (m//) at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode/Alias.pm line 31.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $find in lc at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode/Alias.pm line 40.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $find in string eq at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode/Alias.pm line 44.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $find in hash element at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode/Alias.pm line 57.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $find in lc at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode/Alias.pm line 58.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $find in hash element at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode/Alias.pm line 77.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $name in string ne at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode.pm line 114.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $name in hash element at /usr/lib/arm-linux-gnueabihf/perl/5.24/Encode.pm line 118.
2020.11.24 21:43:48 1: PERL WARNING: Use of uninitialized value $a[1] in subtraction (-) at ./FHEM/99_Utils.pm line 21.


Weiß jemand was ich die Fehler weg bekomme?

Gruß Paul
FHEM5.7 auf Pi3
Busware CUL433 (IT), JeeLink Lacrosse, HM-MOD-RPI-PCB, HM, TabletUI

yersinia

Ich sehe erstmal keinen Zusammenhang zu diesem Template noch zu JsonMod. Mich wundert auch diese Pfadangabe:
/usr/lib/arm-linux-gnueabihf/perl/5.24/
Welches OS und Perl-Version nutzt du?

Kannst du bitte mal verbose auf 5 stellen und stacktrace einschalten sowie die Log-Ausgabe mit diesen Warnings posten?
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

mcp

Hallo yersinia,

ich habe das von Dir mal für mich umgebaut damit HmIP Updates gefunden werden, ich habe nur Homematic IP Geräte, nichts von Homematic.

Ebenso musste ich an einer Stelle uc() benutzen da sonst das aktuelle Update für HmIP-FALMOT-C12 nicht gefunden wurde, sondern nur das für HMIP-PSM. Die Groß-/Kleinschreibung ist leider nicht durchweg konstant. Evtl. sollte man besser case-insensitive matchen.

Lange Rede kurzer Sinn: evtl. kannst Du das ja noch erweitern so daß Homematic und Homematic IP gemeinsam funktionieren können.

anyway, vielen Dank dafür :)
Maintainer: 98_vitoconnect.pm
Raspberry Pi 4B, 4 GB RAM, 32 GB SD Karte
Raspbian Bullseye 32-bit, FHEM up2date

yersinia

Danke für das wertvolle Feedback mcp!  :) Da ich kein HomematicIP habe, war mir das gar nicht bewusst.

Zitat von: mcp am 25 November 2020, 15:09:22Ebenso musste ich an einer Stelle uc() benutzen da sonst das aktuelle Update für HmIP-FALMOT-C12 nicht gefunden wurde, sondern nur das für HMIP-PSM. Die Groß-/Kleinschreibung ist leider nicht durchweg konstant. Evtl. sollte man besser case-insensitive matchen.

Lange Rede kurzer Sinn: evtl. kannst Du das ja noch erweitern so daß Homematic und Homematic IP gemeinsam funktionieren können.
Ich ging davon aus, dass alle Homematic-Devices, welche über CUL_HM definiert werden, eine Modellbezeichnung in Großbuchstaben haben (Quelle). Oder wird HmIP nicht über CUL_HM abgebildet?

Mich interessiert, was du wie umgebaut hast, damit es bei dir funktioniert.
Ich hätte jetzt einfach die Modellabfrage ebenfalls in uc() gepackt im userReadings Attribut (Zeile 11):
my $md = uc(AttrVal($dev,"model","?"));
Da Readings als auch das Device-model dann in Großbuchstaben sind, sollte das besser funktionieren.
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

mcp

Hallo yersinia,

das Model und die Firmware sind bei HmIP in den Internals gespeichert, daher habe ich aus AttrVal InternalVal gemacht, die Abfrage der Devices mittels TYPE=HMCCUDEV und das DEF auf 14 Stellen erweitert, und ja, $md habe ich auch uppercased ... Sieht dann aber im Listing nicht mehr sooo schön aus, ich finde die Schreibweise HmIP sieht deutlich besser aus als HMIP - aber ist Geschmackssache :)

Hier ein Diff zwischen Deinem Code und meinen Änderungen:


--- old.txt     2020-11-25 15:30:49.572562527 +0100
+++ new.txt     2020-11-25 15:32:41.097183803 +0100
@@ -31,15 +31,15 @@ attr homematic_fw_check stateFormat {       my
          $ret .= '<br /><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:30%;;font-weight:bold;;">model</div>';;\
-                 $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">current</div>';;\
-                 $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">new</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,$readingStr) = $devStr =~ m/([^\s]+)[(]([^\s]+)[)]/;;\
                my $md = $readingStr;;\
-        my $ofw = AttrVal($dev,"firmware","0.0");;\
+        my $ofw = InternalVal($dev,"firmware","0.0");;\
         my $nfw = ReadingsVal($name,$md,"none");;\
                my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;\
                $ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" onmouseout="this.style.background=\'transparent\';;">';;\
@@ -61,7 +61,7 @@ attr homematic_fw_check stateFormat { my
       }\
          $ret .= '</div>';; #table\
     }\
-       $ret .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
+       $ret .= "<br><div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
        $ret .= '</div>';;\
   return $ret;;\
}
@@ -77,12 +77,12 @@ attr homematic_fw_check userReadings new
                                        HM-LC-SW1-DR HM-LC-BL1PBU-FM);; #cur_model fw_alias\
   if (ReadingsVal($name,".computedReadings","none") ne "none") {\
        my @devices = split(',',ReadingsVal($name,".computedReadings","none"));;\
-       foreach my $dev (devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)")) {\
-         my $md = AttrVal($dev,"model","?");;\
+       foreach my $dev (devspec2array("TYPE=HMCCUDEV:FILTER=DEF=..............:FILTER=subType!=(virtual)")) {\
+         my $md = uc(InternalVal($dev,"ccutype","?"));;\
          if(($fwaliasmode eq "convert2Alias") && (exists($modelalias{$md}))) {\
                $md = $modelalias{$md};;\
          }\
-         my $v = AttrVal($dev,"firmware","0.0");;\
+         my $v = InternalVal($dev,"firmware","0.0");;\
          my ($h,$l) = split('\.',$v);;\
          if ((ReadingsVal($name,$md,"none") ne "none") || ($newfwonly eq "all")) {\
                my $fwv = ReadingsVal($name,$md,"0.0");;\



die erste Änderung im Diff ist nur damit es besser aussieht. Der Name HMIP-FALMOT-C12 ist zu lang für 30% ;)
die 3te Änderung mit dem <br> finde ich persönlich hübscher, dann ist der next check Text nicht direkt an dem Device Listing mit dran.

Maintainer: 98_vitoconnect.pm
Raspberry Pi 4B, 4 GB RAM, 32 GB SD Karte
Raspbian Bullseye 32-bit, FHEM up2date

yersinia

Cool. Danke. :) Das hab ich 1:1 so übernommen, aber als eigenes Template - mir ist noch nicht klar, wie man die beiden Selektionen zusammenführen könnte:
devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)")
devspec2array("TYPE=HMCCUDEV:FILTER=DEF=..............:FILTER=subType!=(virtual)")
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

mcp

TYPE=CUL_HM|HMCCUDEV:FILTER=DEF=(......|..............):FILTER=subType!=virtual

die Pipe nach virtual kann IMHO so oder so weg.

und dann evtl. in der Schleife via InternalVal abfragen ob TYPE CUL_HM oder HMCCUDEV ist und dann entsprechend AttrVal oder InternalVal für Model und Firmware Version abfragen.

oder AttrVal abfragen und wenn das leer ist InternalVal abfragen und wenn das auch leer ist erst einen default setzen.

... irgendwie so.

oder halt 2 Templates :)

Danke Dir.
Maintainer: 98_vitoconnect.pm
Raspberry Pi 4B, 4 GB RAM, 32 GB SD Karte
Raspbian Bullseye 32-bit, FHEM up2date

yersinia

#42
Zitat von: mcp am 25 November 2020, 16:30:15
TYPE=CUL_HM|HMCCUDEV:FILTER=DEF=(......|..............):FILTER=subType!=virtual

und dann evtl. in der Schleife via InternalVal abfragen ob TYPE CUL_HM oder HMCCUDEV ist und dann entsprechend AttrVal oder InternalVal für Model und Firmware Version abfragen.

oder AttrVal abfragen und wenn das leer ist InternalVal abfragen und wenn das auch leer ist erst einen default setzen.

oder halt 2 Templates :)
ja, sowas dachte ich auch! :) Kannst du das hier mal bei dir testen? Da pack ich die beiden devspec2array zusammen
defmod homematic_fw_check_TEST JsonMod https://update.homematic.com/firmware/api/firmware/search/DEVICE
attr homematic_fw_check_TEST userattr updatableDevicesMode:onlyUpdatable,all useFwAliasMode:normal,convert2Alias
attr homematic_fw_check_TEST interval 0 12 * * *
attr homematic_fw_check_TEST readingList multi(jsonPath('$[*]'), uc(property('type')), property('version'));;
attr homematic_fw_check_TEST room fw-checks
attr homematic_fw_check_TEST stateFormat { my $ret = "";;\
my $highlightcolor = "DarkSlateGray";;\
my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
my $nextCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(InternalVal($name,"NEXT","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" rel="noopener noreferrer" target="_blank">homematic</a>-fw-check => ';;\
$ret .= $lastCheck;;\
$ret .= '</div>';;\
if(AttrVal($name,"updatableDevicesMode","") eq "all") {\
$ret .= "<div>Attribute <font style=\"color:yellow;;\">updatableDevicesMode</font> is set to <font style=\"color:yellow;;font-weight:bold;;\">all</font> = <font style=\"font-style:italic;;\">all found Devices</font> will be displayed.</div>";;\
}\
if(AttrVal($name,"useFwAliasMode","") eq "convert2Alias") {\
$ret .= "<div>Attribute <font style=\"color:yellow;;\">useFwAliasMode</font> is set to <font style=\"color:yellow;;font-weight:bold;;\">convert2Alias</font> = Device model is replaced where applicable.</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 .= '<br /><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,$readingStr) = $devStr =~ m/([^\s]+)[(]([^\s]+)[)]/;;\
        #my $md = AttrVal($dev,"model","?");;\
my $md = $readingStr;;\
        my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
        my $nfw = ReadingsVal($name,$md,"none");;\
my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;\
$ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" onmouseout="this.style.background=\'transparent\';;">';;\
$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:40%;;font-weight:bold;;color:lightgrey;;">';;\
        $ret .= $md;;\
        $ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;color:lightgrey;;">';;\
        $ret .= $ofw;;\
        $ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;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><br \/>';; #table\
    }\
$ret .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
$ret .= '</div>';;\
  return $ret;;\
}
attr homematic_fw_check_TEST updatableDevicesMode all
attr homematic_fw_check_TEST update-on-start 0
attr homematic_fw_check_TEST useFwAliasMode normal
attr homematic_fw_check_TEST userReadings newFwForDevices {\
  my $ret = "";;\
  my $newfwonly = AttrVal($name,"updatableDevicesMode","");;\
  my $fwaliasmode = AttrVal($name,"useFwAliasMode","");;\
  my %modelalias = qw(HM-LC-JAPBU-FM HM-LC-BL1PBU-FM\
  HM-LC-SW2PBU-FM HM-LC-BL1PBU-FM\
  HM-LC-SW1-DR HM-LC-BL1PBU-FM);; #cur_model fw_alias\
  if (ReadingsVal($name,".computedReadings","none") ne "none") {\
  my @devices = split(',',ReadingsVal($name,".computedReadings","none"));;\
my @hmdevs = devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=virtual");;\
my @hmipdevs = devspec2array("TYPE=HMCCUDEV:FILTER=DEF=..............:FILTER=subType!=virtual");;\
push(@hmdevs, @hmipdevs);;\
foreach my $dev (@hmdevs) {\
  my $md = uc(InternalVal($dev,"ccutype",AttrVal($dev,"model","?")));;\
  if(($fwaliasmode eq "convert2Alias") && (exists($modelalias{$md}))) {\
  $md = $modelalias{$md};;\
  }\
  my $v = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
  my ($h,$l) = split('\.',$v);;\
  if ((ReadingsVal($name,$md,"none") ne "none") || ($newfwonly eq "all")) {\
my $fwv = ReadingsVal($name,$md,"0.0");;\
my ($fwh, $fwl) = split('\.',$fwv);;\
if(($newfwonly eq "all") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
  $ret .= $dev."(".$md.") ";;\
}\
  }\
}\
  } else {\
$ret = "error => no or wrong data from eq3-server!";;\
  }\
  return ($ret eq "")?"no fw-updates needed!":$ret;;\
}
attr homematic_fw_check_TEST verbose 3
attr homematic_fw_check_TEST webCmd reread

Ich hab das bei mir getestet und das sieht erstmal gut aus.

Oder noch etwas einfacher (mit deinem devspec Vorschlag):
defmod homematic_fw_check_TEST JsonMod https://update.homematic.com/firmware/api/firmware/search/DEVICE
attr homematic_fw_check_TEST userattr updatableDevicesMode:onlyUpdatable,all useFwAliasMode:normal,convert2Alias
attr homematic_fw_check_TEST interval 0 12 * * *
attr homematic_fw_check_TEST readingList multi(jsonPath('$[*]'), uc(property('type')), property('version'));;
attr homematic_fw_check_TEST room fw-checks
attr homematic_fw_check_TEST stateFormat { my $ret = "";;\
my $highlightcolor = "DarkSlateGray";;\
my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
my $nextCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(InternalVal($name,"NEXT","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" rel="noopener noreferrer" target="_blank">homematic</a>-fw-check => ';;\
$ret .= $lastCheck;;\
$ret .= '</div>';;\
if(AttrVal($name,"updatableDevicesMode","") eq "all") {\
$ret .= "<div>Attribute <font style=\"color:yellow;;\">updatableDevicesMode</font> is set to <font style=\"color:yellow;;font-weight:bold;;\">all</font> = <font style=\"font-style:italic;;\">all found Devices</font> will be displayed.</div>";;\
}\
if(AttrVal($name,"useFwAliasMode","") eq "convert2Alias") {\
$ret .= "<div>Attribute <font style=\"color:yellow;;\">useFwAliasMode</font> is set to <font style=\"color:yellow;;font-weight:bold;;\">convert2Alias</font> = Device model is replaced where applicable.</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 .= '<br /><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,$readingStr) = $devStr =~ m/([^\s]+)[(]([^\s]+)[)]/;;\
        #my $md = AttrVal($dev,"model","?");;\
my $md = $readingStr;;\
        my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
        my $nfw = ReadingsVal($name,$md,"none");;\
my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;\
$ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" onmouseout="this.style.background=\'transparent\';;">';;\
$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:40%;;font-weight:bold;;color:lightgrey;;">';;\
        $ret .= $md;;\
        $ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;font-weight:bold;;color:lightgrey;;">';;\
        $ret .= $ofw;;\
        $ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:5%;;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><br \/>';; #table\
    }\
$ret .= "<div style=\"text-align:left;;\">(next check: ".$nextCheck.")</div>";;\
$ret .= '</div>';;\
  return $ret;;\
}
attr homematic_fw_check_TEST updatableDevicesMode all
attr homematic_fw_check_TEST update-on-start 0
attr homematic_fw_check_TEST useFwAliasMode normal
attr homematic_fw_check_TEST userReadings newFwForDevices {\
  my $ret = "";;\
  my $newfwonly = AttrVal($name,"updatableDevicesMode","");;\
  my $fwaliasmode = AttrVal($name,"useFwAliasMode","");;\
  my %modelalias = qw(HM-LC-JAPBU-FM HM-LC-BL1PBU-FM\
  HM-LC-SW2PBU-FM HM-LC-BL1PBU-FM\
  HM-LC-SW1-DR HM-LC-BL1PBU-FM);; #cur_model fw_alias\
  if (ReadingsVal($name,".computedReadings","none") ne "none") {\
  my @devices = split(',',ReadingsVal($name,".computedReadings","none"));;\
foreach my $dev (devspec2array("TYPE=CUL_HM|HMCCUDEV:FILTER=DEF=(......|..............):FILTER=subType!=virtual")) {\
  my $md = uc(InternalVal($dev,"ccutype",AttrVal($dev,"model","?")));;\
  if(($fwaliasmode eq "convert2Alias") && (exists($modelalias{$md}))) {\
  $md = $modelalias{$md};;\
  }\
  my $v = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));;\
  my ($h,$l) = split('\.',$v);;\
  if ((ReadingsVal($name,$md,"none") ne "none") || ($newfwonly eq "all")) {\
my $fwv = ReadingsVal($name,$md,"0.0");;\
my ($fwh, $fwl) = split('\.',$fwv);;\
if(($newfwonly eq "all") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
  $ret .= $dev."(".$md.") ";;\
}\
  }\
}\
  } else {\
$ret = "error => no or wrong data from eq3-server!";;\
  }\
  return ($ret eq "")?"no fw-updates needed!":$ret;;\
}
attr homematic_fw_check_TEST verbose 3
attr homematic_fw_check_TEST webCmd reread

Scheint bei mir auch zu funktionieren.
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

mcp

#43
habe die 2te Variante getestet, klappt out-of-the-box :)

wenn das für dich auch klappt würde ich sagen haben wir nun HM und HmIP in einem :)

Herzlichen Dank.

Wollte es eigentlich noch bei einem Freund testen der HM-only hat, aber sein FHEM ist leider asbach-uralt, das funktioniert da nicht wirklich - muss er halt mal updaten (Chris: update doch mal ;-))
Maintainer: 98_vitoconnect.pm
Raspberry Pi 4B, 4 GB RAM, 32 GB SD Karte
Raspbian Bullseye 32-bit, FHEM up2date

yersinia

Zitat von: mcp am 25 November 2020, 16:55:50habe die 2te Variante getestet, klappt out-of-the-box :)

wenn das für dich auch klappt würde ich sagen haben wir nun HM und HmIP in einem :)
DANK DIR für das Feedback, Input und Testen! :D

Hab den ersten Post entsprechend aktualisiert.
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

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

dennisk

Ich habe den Code aus dem ersten Post seit einigen Monaten drin und es wurde immer richtigerweise "no fw update needed" angezeigt. Heute hat mir meine Raspberrymatic angezeigt, dass für den HMIP-FSI16 ein Update bereitsteht. Der Firmware-Check aus dem ersten Post zeigt aber immer noch "no fw update needed" an. Das passiert, wenn "updateableDevicesMode" auf "onlyUpdatable" steht. Setze ich das Attribut auf "all", dann wird mir das Update für den HMIP-FSI16 korrekt angezeigt. Allerdings eben auch nur das Update für dieses eine Device, alle anderen HMIP-Devices, für die kein Update bereitsteht, werden nicht angezeigt - nach meinem Verständnis sollten in diesem Fall doch eigentlich alle Devices angezeigt werden, oder?

Liegt das an mir, oder am Code? Kann ich noch irgendwelche weiteren Infos liefern?

Danke schon mal und Grüße

dennisk

Einen Teil des Problems konnte ich lösen, indem ich die Zeile mit dem devspec2array angepasst habe: foreach my $dev (devspec2array("TYPE=CUL_HM|HMCCUDEV|HMCCUCHN:FILTER=DEF=(......|..............|................):FILTER=subType!=virtual")) {
Was mir jetzt noch fehlt, ist eine Möglichkeit, dass die Version derjenigen Devices, für die ein Update vorliegt, in Rot angezeigt wird. Hat da noch einer einen Tipp für mich?

dennisk

Das Anzeigen einer höheren Version in Rot habe ich folgendermaßen hinbekommen (im Folgenden das angepasste stateFormat):

{ my $ret = "";
my $highlightcolor = "DarkSlateGray";
my $lastCheck = ReadingsTimestamp($name,".computedReadings",0);
my $nextCheck = InternalVal($name,"NEXT","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 => ';
$ret .= $lastCheck;
$ret .= '</div>';
if(AttrVal($name,"updatableDevicesMode","") eq "all") {
$ret .= "<div>Attribute <font style=\"color:yellow;\">updatableDevicesMode</font> is set to <font style=\"color:yellow;font-weight:bold;\">all</font> = <font style=\"font-style:italic;\">all found Devices</font> will be displayed.</div>";
}
if(AttrVal($name,"useFwAliasMode","") eq "convert2Alias") {
$ret .= "<div>Attribute <font style=\"color:yellow;\">useFwAliasMode</font> is set to <font style=\"color:yellow;font-weight:bold;\">convert2Alias</font> = Device model is replaced where applicable.</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 .= '<br /><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,$readingStr) = $devStr =~ m/([^\s]+)[(]([^\s]+)[)]/;
        #my $md = AttrVal($dev,"model","?");
my $md = $readingStr;
        my $ofw = InternalVal($dev,"firmware",AttrVal($dev,"firmware","0.0"));
        my $nfw = ReadingsVal($name,$md,"none");
my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;
$ret .= '<div style="display:table-row;" onmouseover="this.style.background=\''.$highlightcolor.'\';" onmouseout="this.style.background=\'transparent\';">';
$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:40%;font-weight:bold;color:lightgrey;">';
        $ret .= $md;
        $ret .= '</div>';
$ret .= '<div style="display:table-cell;'.$cellstyle.'width:5%;font-weight:bold;color:lightgrey;">';
        $ret .= $ofw;
        $ret .= '</div>';
        my ($oh,$ol,$op) = split('\.',$ofw);
        my ($nh, $nl, $np) = split('\.',$nfw);
        $ret .= '<div style="display:table-cell;'.$cellstyle.'width:5%;font-weight:bold;color:red;">';
        if((($nh > $oh) || (($nh == $oh) && ($nl > $ol)) || (($nh == $oh) && ($nl == $ol) && ($np > $op)))) {
  $ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank" style="color:red!important;">';
                }
        else {
                  $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><br \/>'; #table
    }
$ret .= "<div style=\"text-align:left;\">(next check: ".$nextCheck.")</div>";
$ret .= '</div>';
  return $ret;
}


@yersinia Eventuell kannst Du das ja übernehmen - falls die Änderungen keine Nebenwirkungen haben? Testen kann ich leider nur mit HMIP.

yersinia

Zitat von: dennisk am 18 Juli 2021, 18:40:08Einen Teil des Problems konnte ich lösen, indem ich die Zeile mit dem devspec2array angepasst habe: foreach my $dev (devspec2array("TYPE=CUL_HM|HMCCUDEV|HMCCUCHN:FILTER=DEF=(......|..............|................):FILTER=subType!=virtual")) {
Danke, das habe ich so 1:1 übernommen. :)

Zitat von: dennisk am 18 Juli 2021, 18:40:08Was mir jetzt noch fehlt, ist eine Möglichkeit, dass die Version derjenigen Devices, für die ein Update vorliegt, in Rot angezeigt wird. Hat da noch einer einen Tipp für mich?
Zitat von: dennisk am 18 Juli 2021, 19:35:43Das Anzeigen einer höheren Version in Rot habe ich folgendermaßen hinbekommen
Ich verstehe den Anwendungsfall nicht ganz. Normalerweise sollte bei gesetztem Attribut updatableDevicesMode onlyUpdatable nur solche Devices angezeigt werden, die auch tatsächlich ein Firmware-Update haben. Optisch ist es ein nettes Gimmick. Dein Code erzeugt aber in beiden Fällen ein die Schriftfarbe rot - ist das beabsichtigt?
        if((($nh > $oh) || (($nh == $oh) && ($nl > $ol)) || (($nh == $oh) && ($nl == $ol) && ($np > $op)))) {
  $ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank" style="color:red!important;">';
                }
        else {
                  $ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank" style="color:red;">';
                };

Ich würde es eher so versuchen:
$ret .= '<div style="display:table-cell;'.$cellstyle.'width:5%;font-weight:bold;">';
        $ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank"';
        my ($oh,$ol,$op) = split('\.',$ofw);
        my ($nh, $nl, $np) = split('\.',$nfw);
        if((($nh > $oh) || (($nh == $oh) && ($nl > $ol)) || (($nh == $oh) && ($nl == $ol) && ($np > $op)))) {
  $ret .= ' style="color:red;"';
            }
        $ret .= '>'.$nfw;

Wenn du das testen könntest und OK findest, übernehme ich das.
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

dennisk

Zitat von: yersinia am 18 Juli 2021, 20:41:14
Danke, das habe ich so 1:1 übernommen. :)
Gerne und danke!
Zitat von: yersinia am 18 Juli 2021, 20:41:14
Ich verstehe den Anwendungsfall nicht ganz. Normalerweise sollte bei gesetztem Attribut updatableDevicesMode onlyUpdatable nur solche Devices angezeigt werden, die auch tatsächlich ein Firmware-Update haben. Optisch ist es ein nettes Gimmick. Dein Code erzeugt aber in beiden Fällen ein die Schriftfarbe rot - ist das beabsichtigt?
        if((($nh > $oh) || (($nh == $oh) && ($nl > $ol)) || (($nh == $oh) && ($nl == $ol) && ($np > $op)))) {
  $ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank" style="color:red!important;">';
                }
        else {
                  $ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank" style="color:red;">';
                };
Stimmt, im else-Zweig kann das red natürlich weg - wobei das aus Deiner Vorlage aus dem ersten Post kommt. Bei mir waren die Zahlen allerdings noch nie rot, weshalb ich das im if-Zweig dann um ein !important ergänzt habe, womit es dann funktioniert.

Zitat von: yersinia am 18 Juli 2021, 20:41:14Ich würde es eher so versuchen:
$ret .= '<div style="display:table-cell;'.$cellstyle.'width:5%;font-weight:bold;">';
        $ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank"';
        my ($oh,$ol,$op) = split('\.',$ofw);
        my ($nh, $nl, $np) = split('\.',$nfw);
        if((($nh > $oh) || (($nh == $oh) && ($nl > $ol)) || (($nh == $oh) && ($nl == $ol) && ($np > $op)))) {
  $ret .= ' style="color:red;"';
            }
        $ret .= '>'.$nfw;

Wenn du das testen könntest und OK findest, übernehme ich das.
Das habe ich probiert, scheint soweit zu klappen. Und ist definitiv weniger redundanter Code ;-) Wobei es bei mir eben nur mit color:red!important funktioniert.

yersinia

Normalerweise sollten alle gefundenen 'neuen' firmware-Versionen rot sein. Interessant ist, dass bei dir noch ein zusätzliches !important gesetzt werden muss - soweit ich weiss ist inlineCSS, wenn definiert, die zu bevorzugende Definition. Möglicherweise liegt dies an deiner Style/Frontend-Auswahl oder den benutzten Browser. Ich kann es jdfs nicht nachstellen (ich nutze den FHEMWEB dark style), von daher bin ich auf Hilfe angewiesen.
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

dennisk

Hab es grade mal mit dark ausprobiert und es funktioniert dann auch ohne !important. Habe bisher immer den default style (momentan f18) verwendet und die anderen styles ehrlich gesagt noch nie ausprobiert. Unter f18 sind die neuen Versionen übrigens dunkelgrün - egal ob  style="color:red;" gesetzt ist oder nicht; mit  style="color:red!important;" werden sie dann eben rot dargestellt. Wie man das jetzt aber am besten theme-unabhängig einbauen könnte, hab ich spontan keine Idee.

Was den Anwendungsfall angeht, so wäre es für mich logischer, dass nur bei den Geräten, für die tatsächlich eine neuere Version bereitsteht, die neue Version rot dargestellt wird. Rot im Sinne von "STOP! Handlungsbedarf!". So sticht der Eintrag auch dann hervor, wenn updatableDevicesMode auf all gesetzt ist.

yersinia

f18 ist der neuere/moderne Style für FHEMWEB imho - dark ist eigtl depricated.

Zitat von: dennisk am 19 Juli 2021, 09:23:32Wie man das jetzt aber am besten theme-unabhängig einbauen könnte, hab ich spontan keine Idee.
Das wäre mAn inlineCSS. ;)

Zitat von: dennisk am 19 Juli 2021, 09:23:32Was den Anwendungsfall angeht, so wäre es für mich logischer, dass nur bei den Geräten, für die tatsächlich eine neuere Version bereitsteht, die neue Version rot dargestellt wird. Rot im Sinne von "STOP! Handlungsbedarf!". So sticht der Eintrag auch dann hervor, wenn updatableDevicesMode auf all gesetzt ist.
So sehe ich das auch, daher ist der Standardwert des Attributs auch updatableDevicesMode onlyUpdatable und zeigt auch nur dann einen Eintrag an, wenn für ein Device ein Update gefunden worden ist. Und dann ist die (neue) firmware-Version sowieso rot bzw. wollte es sein. Wie gesagt, wenn man updatableDevicesMode auf all setzt (und ein reread durchführt), werden alle gefundenen Devices und deren Firmware-Versionen (alt/neu) angezeigt - hier würde man dann solche einfärben, wo es ein Update geben würde. Dafür würde die Code-Ergänzung sorgen.
$ret .= '<div style="display:table-cell;'.$cellstyle.'width:5%;font-weight:bold;">';
        $ret .= '<a title="download firmware file" href="'.$fw_link.'" rel="noopener noreferrer" target="_blank"';
        my ($oh,$ol,$op) = split('\.',$ofw);
        my ($nh, $nl, $np) = split('\.',$nfw);
        if((($nh > $oh) || (($nh == $oh) && ($nl > $ol)) || (($nh == $oh) && ($nl == $ol) && ($np > $op)))) {
  $ret .= ' style="color:red;"';
        }
        $ret .= '>'.$nfw;
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

fhemler

Hi zusammen,

seit heute Nacht 3:00 startete fhem auf meinem Rasperry 3 immer wieder neu.
Nach checken des Logfiles und debuggen des Starts von fhem habe ich herausgefunden, dass es an jsonmod und damit an diesem Homematic Firmware Check liegt.
Die folgende Fehlermeldung erscheint und fhem startet neu:
Month '12' out of range 0..11 at ./FHEM/98_JsonMod.pm line 1519.
Ich weiß nicht, woher der Monat "13" (wird ja in der Funktion um 1 verringert) kommt, auf der Webseite (https://www.eq-3.de/service/downloads.html) habe ich nichts gefunden.

Ich habe die ganze Definition des Firmwarechecks aus meiner fhem.cfg entfernt und fhem startet jetzt wieder wie gewohnt.
Ich wollte das nur mal als Info hierlassen, falls jemand anderes auch noch das Problem hat.

yersinia

Bist du dir 100% sicher, dass es mit dem hier bereitgestellten Auszug zu einem Month-Fehler kommt?
Irgendwie finde ich keine Variable Month. Hast du Details?
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

fhemler

Naja, was ich definitiv sagen kann, ist dass dein Code der einzige in meiner config ist, der was mit jsonmod zu tun hat.
Und nachdem ich das aus der fhem.cfg entfernt habe startete mein fhem wieder wie gewohnt (also ohne die o.g. Fehlermeldung).
Zur weiteren Nachforschung bin ich aufgrund von Ferien/Feiertagen und Family noch nicht gekommen. Ich bin froh, dass fhem wieder läuft  :D

yersinia

Dann würde mich ein list des Devices sowie die Versionen von perl und jsonmod interessieren.
Den einzigen Bezug zu Month sehe ich im Interval, dieser ist aber (im Standard) mit
attr homematic_fw_check interval 0 12 * * *
unauffällig.
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