httpmod.template: bugs, Fragen, Anregungen

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

Vorheriges Thema - Nächstes Thema

DeeSPe

Hab mir jetzt mal den MQTT Traffic am MQTT2_SERVER angesehen beim Neustart von z2m und dort sehe ich überhaupt nichts vom Topic "bridge/info".
Meine aktuelle DEF:
defmod MQTT2_zigbee_bridge MQTT2_DEVICE zigbee_bridge
attr MQTT2_zigbee_bridge DbLogExclude .+
attr MQTT2_zigbee_bridge IODev m2s
attr MQTT2_zigbee_bridge autocreate 0
attr MQTT2_zigbee_bridge bridgeRegexp zigbee2mqtt/((?!bridge)[A-Za-z0-9._]+)/?.*:.* "zigbee_$1"
attr MQTT2_zigbee_bridge 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.
attr MQTT2_zigbee_bridge devicetopic zigbee2mqtt
attr MQTT2_zigbee_bridge event-on-change-reading state
attr MQTT2_zigbee_bridge getList networkmap_raw:noArg raw $DEVICETOPIC/bridge/request/networkmap raw\
networkmap_graphviz:noArg graphviz $DEVICETOPIC/bridge/request/networkmap graphviz
attr MQTT2_zigbee_bridge group Bridges
attr MQTT2_zigbee_bridge icon mqtt_bridge_1
attr MQTT2_zigbee_bridge model zigbee2mqtt_bridge
attr MQTT2_zigbee_bridge readingList $DEVICETOPIC/bridge/state:.* { json2nameValue($EVENT) }\
$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:.* log\
$DEVICETOPIC/bridge/logging:.* {}\
$DEVICETOPIC/bridge/response/networkmap:.* { my $type = $EVENT =~ /.*,"type":"(raw|graphviz)",.*/ ? $1 : 'networkmap';; $EVENT =~ /{"data":\{.*"value":"?(.*[^"])"?\},"status":"ok"\}/ ? { $type=>$1 } : {} }\
$DEVICETOPIC/bridge/event:.* {}\
$DEVICETOPIC/bridge/extensions:.* {}\
$DEVICETOPIC/bridge/response/permit_join:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/bridge/info:.* { json2nameValue($EVENT) }\
$DEVICETOPIC/bridge/health:.* {}
attr MQTT2_zigbee_bridge room Module->MQTT2_DEVICE,Technik
attr MQTT2_zigbee_bridge 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 MQTT2_zigbee_bridge verbose 2

Hab mal bei Github einen Issue eröffnet.
Allerdings ist das dort beschriebene Problem wohl eher auf den MQTT-Explorer zu schieben. Mit etwas suchen kam heraus dass dieser wohl auf 20k große Mitteilungen beschränkt ist.

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

SH_Heini

Mahlzeit,
Ersteinmal Danke an @Tueftler1983 für Deine Unterstützung.

Hab gerade die Lösung für mich gefunden und hoffe es hilft auch @DeeSPe.

Ich habe das Attribut "ignoreRegexp" aus meinem MQTT2_Client gelöscht, Z2M neu gestartet und schon konnte bridge/info aufgelöst werden.

defmod MOSQUITTO_WPI MQTT2_CLIENT 192.168.5.10:1880
attr MOSQUITTO_WPI DbLogExclude .*
attr MOSQUITTO_WPI autocreate complex
attr MOSQUITTO_WPI clientId zigbee2mqtt
attr MOSQUITTO_WPI devStateIcon opened:15px-green\
disconnected:15px-red
attr MOSQUITTO_WPI group Z2M_WPI
attr MOSQUITTO_WPI icon mqtt_broker
attr MOSQUITTO_WPI room MQTT,N_E_U
attr MOSQUITTO_WPI sortby 1


Vielleicht funktioniert es ja auch beim MQTT2_Server.


DeeSPe

#272
Zitat von: SH_Heini am 28 Januar 2026, 12:44:03Hab gerade die Lösung für mich gefunden und hoffe es hilft auch @DeeSPe.

Ich habe das Attribut "ignoreRegexp" aus meinem MQTT2_Client gelöscht, Z2M neu gestartet und schon konnte bridge/info aufgelöst werden.

GROßARTIG!!!
Das war auch das Problem bei mir!

Vielen Dank SH_Heini und allen anderen eifrigen Helfern!

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

Beta-User

Zitat von: DeeSPe am 28 Januar 2026, 13:03:02
Zitat von: SH_Heini am 28 Januar 2026, 12:44:03Hab gerade die Lösung für mich gefunden und hoffe es hilft auch @DeeSPe.

Ich habe das Attribut "ignoreRegexp" aus meinem MQTT2_Client gelöscht, Z2M neu gestartet und schon konnte bridge/info aufgelöst werden.

GROßARTIG!!!
Das war auch das Problem bei mir!

Vielen Dank SH_Heini und allen anderen eifrigen Helfern!

Gruß
Dan
Ich wage mal zu bezweifeln, dass das komplette Löschen am Ende zielführend sein wird...
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

SH_Heini

Der Einwand von @Beta-User ist natürlich korrekt, eine komplette Löschung von "ignoreRegex" ist nicht zielführend.

Bei mir habe ich jetzt eingetragen:


attr <device> ignoreRegexp homeassistant/[^:"]+/config

DeeSPe

#275
Ich habe ein HTTPMOD Device für das Update von Zigbee2MQTT erstellt in Anlehnung an das schon hier zur Verfügung gestellte Device.
Die Ansicht hat mir nicht gefallen und der Code war auch teilweise "unschön".
Im Prinzip ist der Code fast komplett neu geschrieben und von unnötigem Ballast befreit. ;)
Bevor ich es als Template verwurste, wäre es schön wenn es von Euch mal getestet wird.
Über das Attribut "bridgeRegexp" kann der Regex angepasst werden um die z2m Bridge(s) zu finden, es wird auch ausgewertet ob der angegebene Regex überhaupt Device(s) zurückliefert.

defmod z2m_version_check HTTPMOD https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest 86400
attr z2m_version_check userattr bridgeRegexp showDevices:all,updatable
attr z2m_version_check bridgeRegexp TYPE=MQTT2?_DEVICE:FILTER=NAME=.*zigbee.*bridge.*
attr z2m_version_check devStateIcon {\
  my $lver = ReadingsVal($name,'latestVersion','');;\
  my $spec = AttrVal($name,'bridgeRegexp','TYPE=MQTT2?_DEVICE:FILTER=NAME=.*zigbee.*bridge.*');;\
  my $url = 'https://github.com/Koenkk/zigbee2mqtt/';;\
  my $link = '<a title="z2m versions" href="'.$url.'tags" target="_blank">z2m version</a>';;\
  my $fwb = 'font-weight:bold';;\
  my $tal = 'text-align:left';;\
  my $tar = 'text-align:right';;\
  my $ret = '<div style="'.$tal.'">';;\
  $ret .= '<p>last '.$link.' check: '.POSIX::strftime('%d.%m.%Y %H:%M',localtime(time_str2num(ReadingsTimestamp($name,'latestVersion','1970-01-01 00:00:00')))).'</p>';;\
  my $update = AttrVal($name,'showDevices','updatable');;\
  my $state = devspec2array($spec)?InternalVal($name,'STATE',''):'error => no valid devices found for devspec "'.$spec.'"';;\
  if ($state =~ m/^error/x) {\
    $ret .= '<p style="color:red;;'.$fwb.'">'.$state.'</p>'\
  } else {\
    $ret .= '<p style="color:limegreen;;'.$fwb.'">'.$state.'</p>';;\
    if ($state =~ m/^\d/x || $update eq 'all') {\
      my @devs = devspec2array($spec.($update eq 'all'?'':':FILTER=r:version!='.$lver));;\
      if (@devs) {\
        $url .= 'releases/tag/';;\
        my $bs = '1px solid grey';;\
        my $pa = 'padding:5px';;\
        my $br = 'border-right:'.$bs.';;'.$pa;;\
        $ret .= '<table style="'.$tal.';;border-collapse:collapse;;margin:10px 0 10px 0">';;\
        $ret .= '<thead><tr style="border-bottom:'.$bs.'"><th style="'.$br.'">device</th><th style="'.$br.';;'.$tar.'">current</th><th style="'.$br.';;'.$tar.'">new</th><th style="'.$pa.';;'.$tar.'">released</th></tr></thead>';;\
        $ret .= '<tbody>';;\
        my $cdevs = 0;;\
        for (@devs) {\
          my $ver = ReadingsVal($_,'version','');;\
          next if ($ver !~ m/^(\d+\.){2}\d+$/x);;\
          $cdevs += 1;;\
          $ret .= '<tr'.($cdevs==scalar(@devs)-1?' style="border-bottom:'.$bs.'"':'').'>';;\
          $ret .= '<td style="'.$br.'"><a href="/fhem?detail='.$_.'">'.AttrVal($_,'alias',$_).'</a></td>';;\
          $ret .= '<td style="'.$br.';;'.$tar.'"><a href="'.$url.$ver.'" target="_blank">'.$ver.'</a></td>';;\
          $ret .= '<td style="'.$br.';;'.$tar.'"><a'.($ver ne $lver?' style="color:red!important;;'.$fwb.'"':'').' href="'.$url.$lver.'" target="_blank">'.$lver.'</a></td>';;\
          $ret .= '<td style="'.$pa.';;'.$tar.'"><a ref="'.$url.$lver.'" target="_blank">'.ReadingsVal($name,'latestDate','').'</a></td>';;\
          $ret .= '</tr>';;\
        }\
        $ret .= '</tbody></table>';;\
      }\
    }\
  }\
  $ret .= '<p">next '.$link.' check: '.POSIX::strftime('%d.%m.%Y %H:%M',localtime(InternalVal($name,'.TRIGGERTIME',0))).'</p>';;\
  $ret .= '</div>';;\
  return $ret;;\
}
attr z2m_version_check enableControlSet 1
attr z2m_version_check event-on-change-reading latestVersion
attr z2m_version_check event-on-update-reading latestDate
attr z2m_version_check handleRedirects 0
attr z2m_version_check icon mqtt_bridge_1
attr z2m_version_check reading01JSON tag_name
attr z2m_version_check reading01Name latestVersion
attr z2m_version_check reading01OExpr $val =~ m/^(\d+\.){2}\d+$/x;; $val
attr z2m_version_check reading02JSON published_at
attr z2m_version_check reading02Name latestDate
attr z2m_version_check reading02OExpr $val =~ m/^(\d{4})-(\d\d)-(\d\d)T.*$/x;; "$3.$2.$1"
attr z2m_version_check stateFormat {\
  my $ret;;\
  if (!ReadingsVal($name,'latestVersion','')) {\
    $ret = 'error => no/wrong data from server!'\
  } else {\
    my @devs = devspec2array(AttrVal($name,'bridgeRegexp','TYPE=MQTT2?_DEVICE:FILTER=NAME=.*zigbee.*bridge.*'));;\
    my $cupd = 0;;\
    for (@devs) {\
      my $ver = ReadingsVal($_,'version','');;\
      $cupd += 1 if ($ver =~ /^((\d+\.){2}\d+)$/ && $ver ne ReadingsVal($name,'latestVersion',''))\
    }\
    $ret = $cupd==0?'no z2m update'.(scalar(@devs)>1?'s':'').' needed!':$cupd.' update'.($cupd>1?'s':'').' needed!';;\
  }\
  return $ret;;\
}
attr z2m_version_check webCmd reread

Danke vorab.

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

Nabend
Zitat von: DeeSPe am 09 Februar 2026, 17:58:10Bevor ich es als Template verwurste, wäre es schön wenn es von Euch mal getestet wird.

Hey also nach kurzer anpassung des Regexp hat es soforg funktioniert, lasse jetzt mal beide Paralel laufen und schaue es mir weiter an!

Vielen dank schon einmal

DeeSPe

#277
Zitat von: Tueftler1983 am 09 Februar 2026, 18:17:06Hey also nach kurzer anpassung des Regexp hat es soforg funktioniert, lasse jetzt mal beide Paralel laufen und schaue es mir weiter an!

Besten Dank für's Testen.
Habe eben noch Kleinigkeiten in #275 aufgeräumt: Attribut angepasst (nur noch "showDevices:all,updatable" statt "showUpdatableDevices:all,onlyUpdatable"), überflüssigen Code aus stateFormat entfernt und unnötige Attribute entfernt.
Das sollte es nun aber endgültig gewesen sein.
Ich bin zumindest recht zufrieden damit jetzt.

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