Wie fhemweb icons korrekt nutzen?

Begonnen von blecher-at, 28 Dezember 2017, 20:01:55

Vorheriges Thema - Nächstes Thema

blecher-at

Ich nutze für mein Modul (https://forum.fhem.de/index.php/topic,80897.0.html) die funktionen FW_iconPath, FW_iconName, FW_dev2image des FHEMWEB moduls.
Problem dabei ist die interne globale variable @FW_iconDirs die erst beim ersten zugriff auf fhemweb gesetzt wird, und auch immer den wert der jeweiligen zuletzt aktiven usersession (selektiertes theme) enthält. Also im worst case funktionieren die methoden garnicht oder liefern falsche icons.

ändere ich use vars qw(@FW_iconDirs); in der 01_FHEMWEB.pl kann ich die variable in meinem modul importieren und vor dem aufruf setzen. nicht supersauber aber funktioniert. Die funktionen in mein modul kopieren will ich eigentlich vermeiden.
Am saubersten fände ich, wenn die FW_iconPath, FW_iconName, FW_dev2image als optionalen parameter die icondirs akzeptieren würden, und damit unabhängig vom state der websession sind. Bevor ich dafür einen patch erstelle aber die Frage ob das ein sinnvoller Weg ist, oder gibt es bereits eine bessere Schnittstelle für modulentwickler die ich noch nicht gefunden habe?

Dashboard und Floorplan nutzen die Funktionen ebenfalls, haben also potentiell dasselbe problem.

rudolfkoenig

Bist du sicher, dass du dich so eng an FHEMWEB binden willst?
Was ist, wenn jemand FHEM ohne FHEMWEB betreibt?
FHEMWEB ist eigentlich nicht als Bibliothek gedacht. Ich fuehle mich ein bisschen wie ausgeraubt :)

blecher-at

#2
Ich hatte ursprünglich die iconmethoden (rudimentär) selbst geschrieben, aber da ist einfach viel nützliche logik drinnen die dann dupliziert wird, drum der "diebstahl"
Den usecase "ganz ohne fhemweb" hab ich garnicht betrachtet, aber jetzt getestet. daran scheitern dann auch einige andere module z.b. DOIF :o

Wärst du für eine auslagerung der iconmethoden in eine eigene lib zu haben? Die kann dann fhemweb und jedes andere modul das es braucht requiren. Sonst bleibe ich bei meinem hässlichen workaround (FW_answerCall(undef))

rudolfkoenig

ZitatWärst du für eine auslagerung der iconmethoden in eine eigene lib zu haben? Die kann dann fhemweb und jedes andere modul das es braucht requiren.
Das klingt grosszuegig, du bis aber z.Zt. der Einzige, der das braucht. Ich habe die Aufgabe angeschaut:
- es muessen die Variablen FW_iconDirs und FW_icons uebergeben werden.
- beide muessen vorher gefuellt werden, d.h. FW_readIcons und FW_readIconsFrom muss auch mit, damit auch $FW_icondir
- vermutlich muessen FLOORPLAN und Dashboard angepasst werden, leider sind diese Module mehr oder weniger verwaist

Nach etwas Nachdenken meine ich, dass es Arbeit (mit potentiell folgenden Support & Debugging) ohne entsprechenden Mehrwert bedeutet. Mein Vorschlag (ungetestet):
- in deinem Initalize: LoadModule("FHEMWEB");
- in AttrFn: FW_readIcons() mit deinem speziellen Verzeichnis (falls notwendig)
- in ParseFn/etc: @FW_iconDirs anhand deinem Attribut oder default setzen.

blecher-at

Danke für deinen Vorschlag, das löst das problem dass FHEMWEB zumindest immer geladen wird.
Auf @FW_iconDirs habe ich damit trotzdem keinen zugriff.

Ich belasse es mal bei meinem workaround, trotzdem danke für deine Hilfe:

$attr{$FW_wname}{stylesheetPrefix} = $attr{$name}{stylesheetPrefix};
FW_answerCall("robots.txt");


Wenn es der zweite braucht kann man noch immer die iconfunktionen rausziehen.