[gelöst] FW_displayHelp auch für Attribute in userattr

Begonnen von DeeSPe, 07 Februar 2023, 13:34:37

Vorheriges Thema - Nächstes Thema

DeeSPe

Hallo Rudi,

ich benutze in meinem Modul HOMEMODE das Attribut 'userattr' dynamisch und dadurch teilweise sehr exzessiv.
Da es auch sonst eine Menge Attribute gibt, habe ich nun für alle Attribute (inkl. der in 'userattr') passende Hilfe Texte geschrieben.
Leider werden die Hilfen für die in 'userattr' hinterlegten Attribute nicht angezeigt.
Spricht etwas dagegen das zu ändern? Hat das evtl. Performance Gründe warum das speziell verhindert wurde?

Damit die Hilfetexte auch bei den in 'userattr' hinterlegten Attributen funktionieren habe ich folgende Anpassungen in 'fhemweb.js' gemacht.

1. Löschen der Zeilen 321 und 322.
2. Hinter Zeile 292 folgende Zeilen eingefügt:
if (group)
  group = (group.indexOf('userattr') >= 0 ? $(this).parent().find('optgroup').first().attr('label') : group);


Ich würde mich sehr freuen wenn die vorgeschlagene Änderung Anklang findet und das so oder in ähnlicher Form übernommen werden könnte.

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

rudolfkoenig

Habs gelesen, aber das Problem nicht verstanden.
Kannst du es mit einem konkreten Beispiel demonstrieren?

DeeSPe

Das ist nur beispielhaft, nicht so wie es in HOMEMODE gemacht ist, aber das Ergebnis ist das Selbe.
define d3 dummy

'setList' gibt es nun ganz oben im Attribut-Select unter 'dummy'. Wenn das ausgewählt wird, wird die Hilfe angezeigt.
Wenn Du nun 'setList' als 'userattr' hinzufügst (obwohl es das am Modul schon gibt), dann erscheint es nicht mehr oben unter 'dummy' sondern nur noch unter 'device userattr' und die Hilfe wird bei Auswahl nicht angezeigt.
attr d3 userattr setList

Das ist mit allen Einträgen so die unter 'device userattr' auftauchen, ist ja auch klar, denn eigentlich weiß das Modul ja nicht was der Benutzer für 'userattr' anlegt.
Bei HOMEMODE werden aber sehr viele Attribute, die eine eindeutige Aufgabe haben, dynamisch (in 'userattr') erstellt. Und genau diesen Attributen möchte ich auch meine geschriebenen Hilfetexte zukommen lassen.

Ich hoffe das ist nun verständlicher.

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

Das "wildcard-feature" (iVm. den id-Ankern) hilft nicht weiter?

Siehe z.B. https://svn.fhem.de/trac/changeset/24999/trunk/fhem/FHEM/98_structure.pm, den betreffenden Thread bzw. der allgemeinen Funktionalität müßte ich suchen.
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

DeeSPe

Zitat von: Beta-User am 07 Februar 2023, 16:09:34
Das "wildcard-feature" (iVm. den id-Ankern) hilft nicht weiter?

Nein!
Ich arbeite schon mit dem "wildcard-feature", aber die Hilfetexte werden explizit durch Zeile 321/322 umgangen für 'userattr'.

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

Aber nur, wenn die nicht speziell als einem Modul zugehörig gemarkert werden, siehe
addToDevAttrList($c, $attrList, 'structure');

Man muss sich halt mit der Initialisierung des zugehörigen Moduls etwas mehr Gedanken machen und das mit den "gehört zu"-Etiketten z.B. per InternalTimer nachholen.
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

rudolfkoenig

ZitatBei HOMEMODE werden aber sehr viele Attribute, die eine eindeutige Aufgabe haben, dynamisch (in 'userattr') erstellt.
Ich wuerde dafuer instanz-abhaengige Attribute ($defs{$d}{".AttrList"}) verwenden.

DeeSPe

Zitat von: Beta-User am 07 Februar 2023, 16:17:41
Aber nur, wenn die nicht speziell als einem Modul zugehörig gemarkert werden, siehe
addToDevAttrList($c, $attrList, 'structure');

Ich habe bisher alle dynamischen Attribute per 'userattr' bereitgestellt.
Wenn ich mich recht erinnere hatte ich damals hier im Forum nachgefragt wie ich nachträglich die Attribute des jeweiligen Device dynamisch ändern kann. Mir wurde dann gesagt dass das nicht geht nachträglich und so habe ich dann die Lösung per 'userattr' gewählt.

Macht es wirklich Sinn mein Modul auf addToDevAttrList() und delFromDevAttrList() umzubauen?
Die Attribute müssten dann bei jedem Neustart von FHEM immer neu ermittelt werden und wieder per addToDevAttrList() hinzugefügt werden, richtig?
Bisher wird das Attribut 'userattr' beim Neustart ja automatisch wieder wie bei letzten Speichern gesetzt.
Und wenn sich an der Konfiguration des HOMEMODE Device etwas ändert, müssten auch wieder die dann nicht mehr vorhandenen Attribute per delFromDevAttrList() entfernt und die neue Attributliste mit addToDevAttrList() wieder hinzugefügt werden?

Das mit
Zitat von: Beta-User am 07 Februar 2023, 16:17:41
Man muss sich halt mit der Initialisierung des zugehörigen Moduls etwas mehr Gedanken machen und das mit den "gehört zu"-Etiketten z.B. per InternalTimer nachholen.
habe ich allerdings nicht verstanden.

Zitat von: rudolfkoenig am 07 Februar 2023, 17:27:26
Ich wuerde dafuer instanz-abhaengige Attribute ($defs{$d}{".AttrList"}) verwenden.

Darin sind alle Attribute der Instanz enthalten und ich kann die nachträglich verändern?

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

rudolfkoenig

ZitatDarin sind alle Attribute der Instanz enthalten und ich kann die nachträglich verändern?
Ja. Hat Praeferenz vor $hash->{AttrList}

DeeSPe

Habe eben mal versucht mit 'Debug' die Inhalte von $defs{$d}{".AttrList"} und $hash->{AttrList} auszugeben.
Leider kann ich keinen Inhalt erkennen.
Was mache ich falsch bzw. wie komme ich an den Inhalt?

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

rudolfkoenig

ZitatWas mache ich falsch bzw. wie komme ich an den Inhalt?
Indem Du (als Modulautor) es vorher setzt.
Ich habe mein Testmodul dafuer nicht eingecheckt, aber es gibt etliche Module, die das einsetzen, womoeglich kann man da was abschauen:
% grep -l '\.AttrList' *.pm
10_CUL_HM.pm
36_Shelly.pm
49_SSCamSTRM.pm
50_SSChatBot.pm
57_SSCal.pm
98_DOIF.pm
98_Modbus.pm

DeeSPe

Danke Rudi.

Ich bin leider nicht ganz so fit mit dem FHEM Core Code.
Habe mich jetzt aber etwas mehr in fhem.pl eingelesen und denke ich habe es jetzt hinbekommen.

Der Umbau in HOMEMODE hat nebenbei noch den schönen Vorteil dass das ewig lange Attribut 'userattr' komplett verschwunden ist und wieder einzig und allein in der Hand des Benutzers ist. Das erspart mir etwas Code, der Benutzer kann es nicht versehentlich löschen und ich habe nun alle modulspezifischen Attribute unter <optgroup label="HOMEMODE">. Damit ist dann natürlich meine vorgeschlagene Änderung an fhemweb.js hinfällig.

Ich bedanke mich noch einmal ausdrücklich für die super Hinweise das Problem am Ende elegant zu lösen.

Für mich ist das Thema damit gelöst.

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

DeeSPe

Leider funktioniert das doch noch nicht wie gedacht.

Solange FHEM lief hat das ganz gut hingehauen mit $hash->{".AttrList"}.
Nach einem heutigen Neustart offenbarte sich das Problem: etliche Attribute konnten nicht gesetzt werden weil es die beim direkten Neustart noch nicht gab, klar.
Ich lasse bisher $hash->{".AttrList"} füllen beim Event 'INIZIALIZED' und dadurch sind die Attribute beim laden der fhem.cfg noch nicht vorhanden. Da einige Attribute abhängig von dem Inhalt anderer Attribute sind kann ich wiederum aber $hash->{".AttrList"} nicht vorher füllen.

Irgendwie drehe ich mich im Kreis.
Ich glaube das war der Grund warum ich das damals über 'userattr' gelöst hatte.

Habt Ihr evtl. noch eine Idee?
Wenn nicht muss ich es doch bei 'userattr' belassen, dann funktionieren nur wieder meine Hilfetexte nicht. :(

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

Unterscheidest du in AttrFn() nach $init_done? CUL_HM läßt z.B. zu diesem Zeitpunkt einfach "alle" Attribute zu und bereinigt das hinterher.
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

DeeSPe

Zitat von: Beta-User am 08 Februar 2023, 14:33:57
Unterscheidest du in AttrFn() nach $init_done? CUL_HM läßt z.B. zu diesem Zeitpunkt einfach "alle" Attribute zu und bereinigt das hinterher.

Ahh, danke! Coole Idee!
Werde ich mal probieren ob es so bei mir funktioniert.

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