httpmod.template: bugs, Fragen, Anregungen

Begonnen von Beta-User, 21 Februar 2019, 12:04:17

Vorheriges Thema - Nächstes Thema

Tueftler1983

Zitat von: Beta-User am 03 Dezember 2019, 12:24:52Na ja, viele Fragezeichen sind es nicht mehr...

Wenn "wir" das mit der firmware nicht in denselben HTTPMOD bekommen, würde ich vorschlagen, den Namen um "daemon" zu erweitern, das ganze ergäbe dann:
#Contributed by OdfFHEM, see https://forum.fhem.de/index.php/topic,97694.msg998835.html#msg998835
name:zigbee2mqtt_daemon_updates
filter:TYPE=HTTPMOD
desc: Check zigbee2mqtt homepage for new versions of the deamon software.<br>Define a HTTPMOD device like <br>define zigbee2mqtt_updates HTTPMOD https://github.com/Koenkk/zigbee2mqtt/tags 604800<br>
<a href="https://forum.fhem.de/index.php/topic,97694.msg998835.html#msg998835">Source: Forum</a>.
order:X_01f
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:INTERVAL;Actual interval for updating, defaults to one day; {InternalVal("DEVICE","Interval",604800)}
par:UPDATABLEDEVICESMODE;Actual mode for updatableDevices, defaults to onlyUpdatable; {AttrVal("DEVICE","updatableDevicesMode","onlyUpdatable")}
defmod DEVICE HTTPMOD https://github.com/Koenkk/zigbee2mqtt/tags INTERVAL
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex updatableDevicesMode:onlyUpdatable,all
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 0
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex commit-title">[\w\W]*?<a href=".*">[\w\W]*?(\d*\.\d*\.\d*)[\w\W]*?</a>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})-(.{2})-(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex relative-time[\w\W]*?datetime="(\d*-\d*-\d*)T\d*:\d*:\d*Z"
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat {   my $ret ="";;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
    $ret .= '<div style="text-align:left">';;\
    $ret .= 'last <a title="versions" href="'.InternalVal($name,"MainURL","unknown").'">ZigBee</a>-check => '.$lastCheck;;\
    $ret .= '<br><br><pre>';;\
    $ret .= "| device                           | current |   new   |  released  |<br>";;\
    $ret .= "---------------------------------------------------------------------<br>";;\
    my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
    if($check eq "no updates needed!") {\
      $ret .= '| <b style="color:green">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } elsif($check eq "error => no or wrong data from server!") {\
      $ret .= '| <b style="color:red">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } else {\
      my @devices = split(',',$check);;\
      foreach my $devStr (@devices) {\
        my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
        $ret .= sprintf("%-32s",$dev);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</b> | ';;\
        $ret .= '<a href="https://github.com/Koenkk/zigbee2mqtt/releases/tag/'.$new.'">';;\
        $ret .= '<b style="color:'.(($new eq $old)?'black':'red').'">';;\
        $ret .= sprintf("%7s",$new);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<a href="https://github.com/Koenkk/zigbee2mqtt/releases/tag/'.$new.'">';;\
        $ret .= '<b style="color:black">';;\
        $ret .= sprintf("%-10s",$date);;\
        $ret .= '</b></a>';;\
        $ret .= " |<br>";;\
      }\
    }\
    $ret .= '</pre></div>';;\
  return $ret;;\
}
attr DEVICE updatableDevicesMode UPDATABLEDEVICESMODE
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
  my $ret = "";;\
  if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
    $ret = "error => no or wrong data from server!";;\
  } else {\
    my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
    my $DATE = ReadingsVal($name,"latestDate","unknown");;\
    foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=permit_join!=")) {\
      my $version = ReadingsVal($dev,"version","0.0.0");;\
      $version =~ m/([0-9.]*).*/;;\
      $version = $1;;\
      if (AttrVal($name,"updatableDevicesMode","onlyUpdatable") eq "all" || $version ne $VERSION) {\
        $ret .= "," if($ret ne "");;\
        $ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
      }\
    }\
  }\
  return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model zigbee2mqtt_daemon_updates

In die mqtt2.template-file würde ich dann zu zigbee2mqtt_bridge noch folgendes anfügen?
attr DEVICE comment To check for new updates of the deamon software, you might want to use a separate HTTPMOD device. See HTTPMOD template zigbee2mqtt_daemon_updates for further details.

Leider bekomme ich das Device nicht angelegt, bzw angelegt wird es aber mit einem fehler habe es mit dem Template:

Unknown command <a, try help.
Es wird zwar das Datum des letzten Release angescheigt aber weder die aktuelle installierte Version noch die zuletzt verfügbare.

Tueftler1983

#241
Zitat von: 50watt am 30 Juni 2023, 12:50:22Ich schlage folgende Änderung für das HTTPMOD template "zigbee2mqtt_daemon_updates" vor:
Statt (templateVersion: 20201129)
attr DEVICE reading01Regex commit-title">[\w\W]*?[\w\W]*?(\d*\.\d*\.\d*)[\w\W]*?
das:
attr DEVICE reading01Regex <a href=\"\/Koenkk\/zigbee2mqtt\/releases\/tag\/*?(\d*\.\d*\.\d*)[\w\W]*?</a>
Damit funktioniert (für mich) die Abfrage für die "latestVersion" von zigbee2mqtt wieder.

Dank diesem Post funktioniert zumindest die Anzeige der aktuellsten Verfügbaren Version

Aber die aktuell installierte Version wird immer noch nicht angezeigt bzw steht bei mir auf 0.0.0 in Grau

oelidoc

zigbee2mqtt_daemon_updates

Zitat von: 50watt am 30 Juni 2023, 12:50:22Ich schlage folgende Änderung für das HTTPMOD template "zigbee2mqtt_daemon_updates" vor:
Statt (templateVersion: 20201129)
attr DEVICE reading01Regex commit-title">[\w\W]*?[\w\W]*?(\d*\.\d*\.\d*)[\w\W]*?
das:
attr DEVICE reading01Regex <a href=\"\/Koenkk\/zigbee2mqtt\/releases\/tag\/*?(\d*\.\d*\.\d*)[\w\W]*?</a>
Damit funktioniert (für mich) die Abfrage für die "latestVersion" von zigbee2mqtt wieder.

Leider ist das Template bei mir derzeit funktionslos: es wird weder die aktuelle noch eine neue Version angezeigt und LAST_ERROR read from https://github.com:443 timed out.Gibt es irgendwelche Veränderungen, die mir entgangen sind? Was müsste ich ändern?

Gruß

oelidoc

satprofi

hallo.
frage zu alignTime, seit uhrzeitumstellung klappt das nicht mehr.
habe 00:03 definiert, aber es startet jetzt immer um 23:03, warum ?
systemzeit etc. passt aber. wie schaffe ich es jetzt wieder um 00:03h zu starten ?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

amenomade

Zitat von: satprofi am 01 November 2025, 09:49:07systemzeit etc. passt aber. wie schaffe ich es jetzt wieder um 00:03h zu starten ?

Was sagt
{localtime()} ?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

satprofi

gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

amenomade

#246
Und
{qx(date)}auch? Steht da auch CEST?
Und liefert {$isdst} null?

Wenn alles richtig, würde ich die Frage im HTTPMOD Forum stellen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Tueftler1983

Hallo ich nochmal

Ich habe jetzt die Version 2.7.2 installiert, diese wird auch als aktuellste angezeigt
ABER
In der aktuell installierten Version wird noch version 2.0.1 angezeigt.

Wo bekommt der die Infos über die aktuelle Version her??

DeeSPe

Zitat von: Tueftler1983 am 15 Januar 2026, 21:36:04Hallo ich nochmal

Ich habe jetzt die Version 2.7.2 installiert, diese wird auch als aktuellste angezeigt
ABER
In der aktuell installierten Version wird noch version 2.0.1 angezeigt.

Wo bekommt der die Infos über die aktuelle Version her??

Ich sitze auch gerade an dem Thema!
Allerdings bekomme ich die Version von zigbee2mqtt überhaupt nicht ausgelesen.
Wie habt ihr das hinbekommen? Habe schon das Forum durchsucht, leider erfolglos.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Tueftler1983

Es wird ja die Version aus dem Device "MQTT2_zigbee_pi" ausgelesen, die version die da angezeigt wird, wird bei mir ja auch richtig angezeigt.
Aber das Device "MQTT2_zigbee_pi" liest nicht die richtige version von Zigbee2Mqtt aus. denn da habe ich die version: 2.7.2 Installiert

Lg Holger

Tueftler1983

Ich finde in der def des Template leider nichts wie die Version ausgelesen wird.

# zigbee2mqtt
# The zigbee2mqtt bridge device (entire hex id of devices as bridgeRegexp)
name:zigbee2mqtt_bridge
desc:The zigbee2mqtt bridge device
filter:TYPE=MQTT2_DEVICE
order:L_01
farewell:template has been applied successfully. Note: In case you not exclusively use FHEM to send MQTT commands to your devices, it's highly recommended to extend the ignoreRegexp of your IO device! Could be something like |zigbee2mqtt/[A-Za-z0-9._]+/set.
par:BASE_TOPIC;base topic as set in configuration.yaml of the zigbee2mqtt bridge;{ AttrVal("DEVICE","devicetopic","") =~ m,[\b]?([^/:]+)(/.+)?, ? $1 : AttrVal("DEVICE","readingList","") =~ m,[\b]?([^/:]+)/bridge/.+, ? $1 : undef }
par:ICON;ICON as set, defaults to mqtt;{ AttrVal("DEVICE","icon","mqtt") }
attr DEVICE icon ICON
attr DEVICE devicetopic BASE_TOPIC
attr DEVICE bridgeRegexp\
  BASE_TOPIC/((?!bridge)[A-Za-z0-9._]+)/?.*:.* "zigbee_$1"
attr DEVICE getList\
  networkmap_raw:noArg raw $\DEVICETOPIC/bridge/request/networkmap raw\
  networkmap_graphviz:noArg graphviz $\DEVICETOPIC/bridge/request/networkmap graphviz
attr DEVICE readingList\
  $\DEVICETOPIC/bridge/state:.* state\
  $\DEVICETOPIC/bridge/config/devices:.* {}\
  $\DEVICETOPIC/bridge/config/log_level:.* log_level\
  $\DEVICETOPIC/bridge/config/permit_join:.* permit_join\
  $\DEVICETOPIC/bridge/config/rename:.* { json2nameValue($EVENT, 'rename_') }\
  $\DEVICETOPIC/bridge/config:.* { json2nameValue($EVENT) }\
  $\DEVICETOPIC/bridge/log:.*\"type\".\"devices\".\"message\".* devices\
  $\DEVICETOPIC/bridge/log:.* log\
  $\DEVICETOPIC/bridge/logging:.* { json2nameValue($EVENT,'log_') }\
  $\DEVICETOPIC/bridge/response/networkmap:.* { my $type = $EVENT =~ m/.*,"type":"(raw|graphviz)",.*/ ? $1 : 'networkmap'; $EVENT =~ m/{"data":\{.*"value":"?(.*[^"])"?\},"status":"ok"\}/ ? { $type=>$1 } : {} }\
  $\DEVICETOPIC/bridge/devices:.* devices\
  $\DEVICETOPIC/bridge/info:.* info\
  $\DEVICETOPIC/bridge/groups:.* groups\
  $\DEVICETOPIC/bridge/event:.* { json2nameValue($EVENT) }\
  $\DEVICETOPIC/bridge/extensions:.* extensions\
  $\DEVICETOPIC/bridge/response/permit_join:.* { json2nameValue($EVENT) }\
  $\DEVICETOPIC/bridge/definitions:.* {}
attr DEVICE setList\
  log_level:debug,info,warn,error $\DEVICETOPIC/bridge/config/log_level $EVTPART1\
  permit_join:true,false $\DEVICETOPIC/bridge/request/permit_join $EVTPART1\
  remove:textField $\DEVICETOPIC/bridge/config/remove $EVTPART1\
  ota_update:textField $\DEVICETOPIC/bridge/ota_update/update $EVTPART1\
  ota_update_check:textField $\DEVICETOPIC/bridge/ota_update/check $EVTPART1\
  y_device_setting:textField $\DEVICETOPIC/$EVTPART1/set {"$EVTPART2": "$EVTPART3"}\
  x_bind:textField $\DEVICETOPIC/bridge/bind/$EVTPART1 $EVTPART2\
  x_bind_unbind:textField $\DEVICETOPIC/bridge/unbind/$EVTPART1 $EVTPART2\
  x_device_options:textField $\DEVICETOPIC/bridge/config/device_options {"friendly_name":"$EVTPART1","options": {"$EVTPART2": "$EVTPART3"}}\
  x_group_add_to:textField $\DEVICETOPIC/bridge/group/$EVTPART1/add $EVTPART2\
  x_group_rm_from:textField $\DEVICETOPIC/bridge/group/$EVTPART1/remove $EVTPART2\
  x_group_rm_from_all:textField $\DEVICETOPIC/bridge/group/$EVTPART1/remove_all $EVTPART2\
  x_group_add_group:textField $\DEVICETOPIC/bridge/config/add_group $EVTPART1\
  x_group_rm_group:textField $\DEVICETOPIC/bridge/config/remove_group $EVTPART1\
  z_elapsed:textField $\DEVICETOPIC/bridge/config/elapsed $EVTPART1\
  z_last_seen:disable,ISO_8601,epoch,ISO_8601_local $\DEVICETOPIC/bridge/config/last_seen $EVTPART1\
  z_ban:textField $\DEVICETOPIC/bridge/config/ban $EVTPART1\
  z_rename:textField $\DEVICETOPIC/bridge/config/rename  {"old":"$EVTPART1","new":"$EVTPART2"}\
  z_reset_CC:noArg $\DEVICETOPIC/bridge/config/reset
attr DEVICE setStateList on off
attr DEVICE comment To check for new updates of the deamon software, you might want to use a separate HTTPMOD device. See HTTPMOD template zigbee2mqtt_daemon_updates for further details.
#set DEVICE attrTemplate do_general_mqtt_cleanup ADD_TO_IO_IGNOREREGEXP=BASE_TOPIC/[A-Za-z0-9._]+/set
set DEVICE attrTemplate do_general_mqtt_cleanup
attr DEVICE model zigbee2mqtt_bridge
setreading DEVICE attrTemplateVersion 20240628
# Based on https://forum.fhem.de/index.php/topic,94060.msg872371.html#msg872371

vielleicht kann einer der Gurus uns dabei helfen??

Hans Franz

Kein Guru, aber
readingList $DEVICETOPIC/bridge/info:.* { json2nameValue($EVENT) }liefert bei mir ein Reading "version"
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Tueftler1983

Ahh okay bei mir exestiert dieses Readingslist garnicht diese sehen bei mir so aus, und in dem Reading info steht die aktuelle version auch drin:

$DEVICETOPIC/bridge/state:.* state
  $DEVICETOPIC/bridge/config/devices:.* {}
  $DEVICETOPIC/bridge/config/log_level:.* log_level
  $DEVICETOPIC/bridge/config/permit_join:.* permit_join
  $DEVICETOPIC/bridge/config/rename:.* { json2nameValue($EVENT, 'rename_') }
  $DEVICETOPIC/bridge/config:.* { json2nameValue($EVENT) }
  $DEVICETOPIC/bridge/log:.*\"type\".\"devices\".\"message\".* devices
  $DEVICETOPIC/bridge/log:.* log
  $DEVICETOPIC/bridge/logging:.* { json2nameValue($EVENT,'log_') }
  $DEVICETOPIC/bridge/response/networkmap:.* { my $type = $EVENT =~ m/.*,"type":"(raw|graphviz)",.*/ ? $1 : 'networkmap'; $EVENT =~ m/{"data":\{.*"value":"?(.*[^"])"?\},"status":"ok"\}/ ? { $type=>$1 } : {} }
  $DEVICETOPIC/bridge/devices:.* devices
  $DEVICETOPIC/bridge/info:.* info
  $DEVICETOPIC/bridge/groups:.* groups
  $DEVICETOPIC/bridge/event:.* { json2nameValue($EVENT) }
  $DEVICETOPIC/bridge/extensions:.* extensions
zigbee_pi:zigbee2mqtt/bridge/response/device/ota_update/check:.* { json2nameValue($EVENT) }
zigbee_pi:zigbee2mqtt/bridge/response/device/generate_external_definition:.* { json2nameValue($EVENT) }


zimlich am ende von Info:

memory_mb":4050,"node_version":"v24.13.0","version":"#1 SMP PREEMPT Debian 1:6.12.47-1+rpt1~bookworm (2025-09-16) - 6.12.47+rpt-rpi-2712 - arm64"},"permit_join":false,"restart_required":false,"version":"2.7.2","zigbee_herdsman":{"version":"8.0.1"},"zigbee_herdsman_converters":{"version":"25.98.0"}}
aber dank deines readinglist wird nun auch die Version als reading aktualisiert. hast du dies selbst angelegt?? weil ich auch nur das fertige template damals angelegt habe.

LG Holger