httpmod.template: bugs, Fragen, Anregungen

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

Vorheriges Thema - Nächstes Thema

yersinia

MAn übersiehst du nichts. Und ja, dein Weg ist effizienter/eleganter weil es näher an der Ursache ansetzt als hier nur die Symptome zu behandeln.
Dies setzt allerdings voraus, dass der Anwender deinen effizienten/eleganten Weg implementiert - oder gar einen Zusammenhang zwischen HTTPMOD-fw-check und mqtt-Device-Template herstellt und dann selbstständig (!) letzteres aktualisiert. Und irgendwie zweifel ich nicht daran, dass es nicht doch den ein oder anderen geben wird, der das übersieht. ;)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

Wir sind uns einig: Es wird einige geben, die über diese (mAn. völlig unnötige) Änderung in Tasmota stolpern werden, ob nun im Rahmen von HTTPMOD oder MQTT2_DEVICE oder beidem...

Ziel sollte sein, dass ein Anwender, der jetzt einsteigt, ein "konsistentes" Erlebnis hat - dafür würde die Aktualisierung auf der MQTT2_DEVICE-Seite ausreichen. Vorausgesetzt, der Anwender nutzt diese Option. Macht er das nicht, ist er (tendenziell) in der Minderheit und muss dann damit "leben", dass er den etwas ineffizienteren "2. Ast" beschreitet, wenn er nur den HTTPMOD verwendet...

Aber auch dann sollte er mAn. mit der kurzen Fassung zum richtigen Ergebnis kommen, oder?
(Vorausgesetzt, er löscht das veraltete Reading, sollte das noch auf eine nicht mehr zutreffende IP verweisen). Nur auf diesen Fall (kein update der readingList in M2D) bezog sich die Frage, ob ich was übersehe.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

yersinia

Ja, wir sind uns einig. :)
Zitat von: Beta-User am 19 Mai 2021, 12:07:41Aber auch dann sollte er mAn. mit der kurzen Fassung zum richtigen Ergebnis kommen, oder?
(Vorausgesetzt, er löscht das veraltete Reading, sollte das noch auf eine nicht mehr zutreffende IP verweisen). Nur auf diesen Fall (kein update der readingList in M2D) bezog sich die Frage, ob ich was übersehe.
Neee, weil (list Auszug eines meiner tasmota mqtt2 devices mit template ohne readingsList update):
READINGS:
     2021-04-23 09:54:59   Info1_Version   9.4.0(tasmota)
     2021-04-23 09:54:59   Info2_IPAddress 192.168.60.21
     2021-04-23 09:51:27   attrTemplateVersion 20200828
Attributes:
   readingList tele/IPTelefon/LWT:.* LWT
  tele/IPTelefon/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/IPTelefon/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/IPTelefon/INFO.:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/IPTelefon/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
  stat/IPTelefon/POWER1:.* state
  stat/IPTelefon/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }

bekommst du mit
$ret .= '<a href="http://'.ReadingsVal($dev,"IPAddress",ReadingsVal($dev,"INFO2_IPAddress","0.0.0.0")).'/up" target="_blank">';;\
nicht abgegriffen. Ich weiss nicht, ob es in irgendeinem (tasmota-) MQTT2 Device mit template noch ein reading INFO2.* gibt/geben wird.
Daher auch
$ret .= '<a href="http://'.ReadingsVal($dev,"Info2_IPAddress",ReadingsVal($dev,"IPAddress",ReadingsVal($dev,"INFO2_IPAddress","0.0.0.0"))).'/up" target="_blank">';;\
obgleich mir die Reihenfolge egal ist, gern auch:
$ret .= '<a href="http://'.ReadingsVal($dev,"IPAddress",ReadingsVal($dev,"INFO2_IPAddress",ReadingsVal($dev,"Info2_IPAddress","0.0.0.0"))).'/up" target="_blank">';;\
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

Zitat von: yersinia am 19 Mai 2021, 12:20:01
Neee, weil (list Auszug eines meiner tasmota mqtt2 devices mit template ohne readingsList update):
READINGS:
     2021-04-23 09:54:59   Info1_Version   9.4.0(tasmota)
     2021-04-23 09:54:59   Info2_IPAddress 192.168.60.21
     2021-04-23 09:51:27   attrTemplateVersion 20200828

bekommst du mit
$ret .= '<a href="http://'.ReadingsVal($dev,"IPAddress",ReadingsVal($dev,"INFO2_IPAddress","0.0.0.0")).'/up" target="_blank">';;\
nicht abgegriffen.
Die Argumentation verstehe ich immer noch nicht.
Greift
ReadingsVal($dev,"IPAddress",
ins Leere (wie in deinem list), kommt der Ersatzwert zum Zug. Und der verweist doch auf die richtige Stelle, oder?
ReadingsVal($dev,"INFO2_IPAddress","0.0.0.0")
Ist also mAn. nur eine Reihenfolgefrage bei der Prüfung, aber keine effektiv andere Funktionalität.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

yersinia

Ich gehe davon aus, dass ReadingsVal case-sensitive ist:
ReadingsVal($dev,"INFO2_IPAddress","0.0.0.0")
versus
     2021-04-23 09:54:59   Info2_IPAddress 192.168.60.21

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

Beta-User

Argh, hatte das übersehen, dass es zwei Schreibweisen von "INFO2" geben könnte :o :-[ ...
Aber klar, autocreate complex macht den "großen" Prefix (diese Änderung bei Tasmota: was ein M...! >:( ) ::) .

Tendenziell würde ich nur die beiden "Hauptfälle" abdecken, also a) alte Schreibweise und b) neue (Info2_IPAddress), wie sie sich ergibt, wenn man das "einfache" j2nv() machen läßt. (Wer complex haben will, wird sich zu helfen wissen).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

mähschaf

Hallo, ich nochmal :-)

Zitat von: yersinia am 19 Mai 2021, 11:51:56
Dies setzt allerdings voraus, dass der Anwender deinen effizienten/eleganten Weg implementiert - oder gar einen Zusammenhang zwischen HTTPMOD-fw-check und mqtt-Device-Template herstellt und dann selbstständig (!) letzteres aktualisiert.

Danke für den Hinweis, das hatte ich bisher nicht. Es war mir auch nicht klar, dass das Tasmota-Update auf 9.4.0 Reading-Namen ändert...
Ich habe den Code von Dir, yersina, manuell in die Datei übernommen. Nach einem Neustart der Tasmota-Geräte stimmte dann auch die FW-Version im FW-Update-Device wieder.

Zitat von: Beta-User am 19 Mai 2021, 12:07:41
Ziel sollte sein, dass ein Anwender, der jetzt einsteigt, ein "konsistentes" Erlebnis hat - dafür würde die Aktualisierung auf der MQTT2_DEVICE-Seite ausreichen. Vorausgesetzt, der Anwender nutzt diese Option. Macht er das nicht, ist er (tendenziell) in der Minderheit und muss dann damit "leben", dass er den etwas ineffizienteren "2. Ast" beschreitet, wenn er nur den HTTPMOD verwendet...

Aber auch dann sollte er mAn. mit der kurzen Fassung zum richtigen Ergebnis kommen, oder?
(Vorausgesetzt, er löscht das veraltete Reading, sollte das noch auf eine nicht mehr zutreffende IP verweisen). Nur auf diesen Fall (kein update der readingList in M2D) bezog sich die Frage, ob ich was übersehe.

Das bedeutet: Lösche ich die alten Readings "Version" und "IPAdress" im MQTT2-Tasmota-Device, wäre evt. alles wieder gut?
Ich habe mich übrigens zwischendurch gefragt, ob es evt. ein AttrTemplate für die Tasmota-Devices gibt, das diese Arbeit übernimmt? Gibt es sowas? Außerdem habe ich mich gefragt, ob es evt. einen Befehl "update readings" gibt. Aber gefunden habe ich nichts entsprechendes, also komme ich wohl um das deleteReading nicht herum...

Danke für Eure Hilfe, ich hoffe, ich beanspruche Euch nicht über Gebühr...

Beta-User

Zitat von: mähschaf am 19 Mai 2021, 16:32:42
Das bedeutet: Lösche ich die alten Readings "Version" und "IPAdress" im MQTT2-Tasmota-Device, wäre evt. alles wieder gut?
Ich habe mich übrigens zwischendurch gefragt, ob es evt. ein AttrTemplate für die Tasmota-Devices gibt, das diese Arbeit übernimmt? Gibt es sowas? Außerdem habe ich mich gefragt, ob es evt. einen Befehl "update readings" gibt. Aber gefunden habe ich nichts entsprechendes, also komme ich wohl um das deleteReading nicht herum...
...ist zwar keine Frage zu httpmod.template, aber trotzdem an der Stelle:
Ein "upgrade"-attrTemplate für bestehende readingList-Attribute gibt es nicht - wer mag, darf eines erstellen.

Was immer geht: Schauen, welches "model" es war und genau das wieder anwenden (vorher checken, ob man was geändert hat). In der Regel sollte die Funktionalität "neu" dann der Funktionalität "alt" entsprechen. Es gibt auch seit längerem ein "versions"-Reading, aus dem sich der Stand des aktuell angewendeten "model" ergibt - ggf. kann man dann im svn über die Änderungshistorie rausfinden, was genau (seitdem) anders ist...

Achtung: attrTemplate anwenden löscht fast alle Readings, damit werden auch die "unnötigen" beseitigt, die nicht (mehr) zum aktuellen Stand passen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

yersinia

Zitat von: Beta-User am 19 Mai 2021, 12:38:51Tendenziell würde ich nur die beiden "Hauptfälle" abdecken, also a) alte Schreibweise und b) neue (Info2_IPAddress), wie sie sich ergibt, wenn man das "einfache" j2nv() machen läßt. (Wer complex haben will, wird sich zu helfen wissen).
Guter Vorschlag, meine Zustimmung hast du.
$ret .= '<a href="http://'.ReadingsVal($dev,"IPAddress",ReadingsVal($dev,"Info2_IPAddress","0.0.0.0")).'/up" target="_blank">';;\
:)

Zitat von: mähschaf am 19 Mai 2021, 16:32:42Das bedeutet: Lösche ich die alten Readings "Version" und "IPAdress" im MQTT2-Tasmota-Device, wäre evt. alles wieder gut?
Ich habe mich übrigens zwischendurch gefragt, ob es evt. ein AttrTemplate für die Tasmota-Devices gibt, das diese Arbeit übernimmt? Gibt es sowas? Außerdem habe ich mich gefragt, ob es evt. einen Befehl "update readings" gibt. Aber gefunden habe ich nichts entsprechendes, also komme ich wohl um das deleteReading nicht herum...
Ja, für viele Tasmota-Geräte gibt es Templates, da diese auch über MQTT2 eingebunden werden können, siehe hier -> mqtt2.template: Contributing (für Fragen, Bugs usw: mqtt2.template: bugs, Fragen, Anregungen; letzte SVN-Version der Templates)
Teile der Readings und Attribute können, wie bei den httmod templates übrigens auch, via
set [DEVICE] attrTemplate [TEMPLATE]
geändert aber auch aktualisiert (ie bestehende Werte werden überschrieben) werden.

Alte Readings müssen ggf händisch gelöscht werden.
Zitat von: Beta-User am 19 Mai 2021, 16:44:33Achtung: attrTemplate anwenden löscht fast alle Readings, damit werden auch die "unnötigen" beseitigt, die nicht (mehr) zum aktuellen Stand passen.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

Zitat von: yersinia am 19 Mai 2021, 16:47:35
Alte Readings müssen ggf händisch gelöscht werden.
Sorry, ich war an der Stelle unpräzise: Bei mqtt2.template wird das in der Regel so gemacht; kann sein, dass es bei HTTPMOD nicht in derselben Form stattfindet.
Kann man aber vorher (direkt über FHEMWEB bei Auswahl über das dropdown-Menü) checken, denn in der Regel ist irgendwo im template ein deletereading-Befehl.
(OT: ich muss mir mal ansehen, ob das ggf. auch das IODev-Reading betrifft; das könnte auch kontraproduktiv sein...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

mähschaf

Ja, danke, jetzt verstehe ich deutlich mehr! :-)

Ich habe mich voerst für einen "sanfteren" Eingriff entschieden, da ich nach dem Erstellen meiner Tasmota-Geräte mehrere AttrTemplates angewandt habe und danach noch einiges herumgebastelt. Da macht ganz von vorne wenig Spaß.

deletereading MQTT2_tasmota00.* .* 3542400

3542400 entspricht etwas weniger als dem Zeitpunkt, seit dem ich auf 9.4.0 aktualisiert habe.

Im Moment schaut's gut aus, falls nicht, kenne ich nun in etwa die Hintergründe und weiß ich Dank Euch jetzt, wie ich mit AttrTemplates weitermachen könnte.  :D

Danke vielmals!

Beta-User

Zitat von: mähschaf am 19 Mai 2021, 18:49:28
Ich habe mich voerst für einen "sanfteren" Eingriff entschieden, [...]
Danke für die Rückmeldung, aber falls das jemand nachmachen will, würde ich eine etwas andere regex für die Readings empfehlen:

deletereading MQTT2_tasmota00.* (?!associatedWith|IODev) 3542400
Further reading wegen der genannten zwei '"speziellen" Readings z.B.:
https://forum.fhem.de/index.php/topic,114960.msg1125012.html#msg1125012
https://forum.fhem.de/index.php/topic,120603.msg1153041.html#msg1153041

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

mähschaf

Guten Abend!

Danke für die Präzisierung und die Hilfen. Das "further reading" muss ich mir mal für schlechtes Wetter aufheben :-)

Im SVN zu httpmod.template findet sich folgende Zeile zum userattr "updatableDevices":

foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=readingList~.*tele[/].*INFO.*:FILTER=Version!=,TYPE=MQTT[2]?_[D]EVICE:FILTER=readingList~.*tele[/].*INFO.*:FILTER=INFO1_Version!="))


Damit wird - so verstehe ich das zumindest als Laie - auf das Reading "Version" abgestellt/gefiltert. Ich habe das für mich angepasst:

foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=readingList~.*tele[/].*INFO.*:FILTER=Info1_Version!=,TYPE=MQTT[2]?_[D]EVICE:FILTER=readingList~.*tele[/].*INFO.*:FILTER~INFO1_Version!="))

So klappt es dann zumindest bei mir. Eventuell hilft es anderen, deshalb dachte ich, ich schreibe es ganz kurz...

Lazgar

Hallo.

Ich habe leider ein Problem mit dem Template für das Wetter vom ORF.
Leider kommt es immer wieder vor, dass für meinen Bezirk keine Wetterdaten vorhanden sind.
Statt der Werte steht dann nur "k. A." was erstmal nicht so schlimm wäre...
...leider kommt das HttpMod-Device nicht so gut damit zurecht (vermutlich weil er sich integar erwartet aber einen string bekommt).
Der FHEM-Prozess geht auf 100% CPU-Last und Fhem ist nicht mehr erreichbar.

Kann man das irgendwie abfangen oder zumindest verhindern das Fhem als ganzes blockiert wird?

Danke und LG,
Lazgar

joelinux

Hallo zusammen,

die beiden httpmod Definitionen für tasmotaupdates und zigbee2mqtt_updates haben bei mir seit ein paar Wochen die neuesten Versions Nummern nicht angezeigt.
Nach etwas Debugging Arbeit mit verbose 5 sieht es so aus,dass Github die Versions Tags in einem veränderten h4 Header verschickt. Die bisherige reading01Regex passt nicht mehr.

Eine neue reading01Regex könnte lauten: tag-title">[\w\W]*?<a href=".*">[\w\W]*?v(\d*.\d*.\d*)[\w\W]*?</a>

Mit der neuen reading01Regex arbeiten sowohl tasmotaupdates und zigbee2mqtt_updates wieder wie zuvor.

Mit freundlichem Gruß

joelinux
FHem on RPi2 Buster, Duofern Rollladen, ZWave Rolllade + Steckdosen, ZigBee (Philips, Tradfri), Tasmota (diverse Steckdosen, GU10 und E14 LSC Leds von Action, Sonoff RF Bridge), InterTechno Dimmer Steckdose ITLR-200