Ich habe für eine device ein userReading angelegt, das sich durch ein cmdAlias per "set <device> <userReading> <value>" auf bestimmte, festgelegte Werte setzen lässt. Jetzt hätte ich in der Übersicht gerne eine Dropdown-Auswahl für diese Werte.
Mein Versuch war, den Namen des Readings in das webCmd der device und einen Eintrag der Form "<userReading>:<value1>,<value2...>" ins widgetOverride aufzunehmen. Das führte nicht zum Erfolg.
Nach Lektüre des FHEMWEB-Quelltextes glaube ich zu verstehen, warum das so ist: In FW_makeDeviceLine wird FW_widgetOverride nur für $allSets aufgerufen, nicht aber für $cmdlist. Das würde auch nichts bringen, da $cmdlist colon separated ist und FW_widgetOverride lediglich zusätzliche commands zufügen würde. $allSets enthält die sets, die durch mein cmdAlias möglich werden, natürlich nicht.
Ich habe keine Möglichkeit gefunden, mein gewünschtes Ergebnis trotzdem zu erreichen. Hat jemand eine Idee?
Ein Problem ist, das cmdAlias generisch ist, und es ist nicht einfach abzuleiten, fuer welches Geraet es welche zusaetzlich Sachen (set/get/attr/etc) zur Verfuegung stellt.
Meine naechste Idee war, zur Liste der Befehle in FHEMWEB die aus widgetOverride extrahierten hinzuzufuegen, leider wird widgetOverride fuer set, get, und attr verwendet, und ueberall das Gleiche hinzuzufuegen ist verwirrend.
Falls jemand einen guten Vorschlag hierfuer findet, bin ich offen es zu implementieren.
keine idee um es sauber und allgemeingültig zu implementieren, aber ein unsauberer workaround: leg mit cmdalias nicht ein neues kommando an sondern biege eines der vorhandenen die du nicht (oft) brauchst um. dann kannst du in webCmd verwenden. unter welchem namen es erscheint kannst du mit eventMap anpassen.
Zitat von: rudolfkoenig am 09 Juli 2017, 11:32:59
Ein Problem ist, das cmdAlias generisch ist, und es ist nicht einfach abzuleiten, fuer welches Geraet es welche zusaetzlich Sachen (set/get/attr/etc) zur Verfuegung stellt.
Meine naechste Idee war, zur Liste der Befehle in FHEMWEB die aus widgetOverride extrahierten hinzuzufuegen, leider wird widgetOverride fuer set, get, und attr verwendet, und ueberall das Gleiche hinzuzufuegen ist verwirrend.
Falls jemand einen guten Vorschlag hierfuer findet, bin ich offen es zu implementieren.
Wie gesagt habe ich heute morgen mal im Sourcecode geschaut und auf Anhieb keine Lösung gefunden. Ich empfinde die Variablenbezeichnungen teilweise als etwas kryptisch, zumindest für mich ist der Sourcecode nur schwer zu überschauen.
Prinzipiell sehe ich bis jetzt 2 Lösungsmöglichkeiten: Entweder man wendet widgetOverride prinzipiell auf alle webCmds an, d.h., wenn ein angegebenes webCmd einen Schlüssel in widgetOverride hat, wird dieses widget angewendet. Oder man erlaubt eine Möglichkeit, die Funktionen getAllSets usw. explizit zu ergänzen. Was davon einfacher umzusetzen ist, sehe ich nicht auf Anhieb. Wenn eine der Varianten akzeptabel wäre, könnte ich mich aber gerne mal dran versuchen.
Zitat von: justme1968 am 09 Juli 2017, 11:51:22
keine idee um es sauber und allgemeingültig zu implementieren, aber ein unsauberer workaround: leg mit cmdalias nicht ein neues kommando an sondern biege eines der vorhandenen die du nicht (oft) brauchst um. dann kannst du in webCmd verwenden. unter welchem namen es erscheint kannst du mit eventMap anpassen.
Keine schlechte Idee, danke für den Tip! Wenn ich keine ganz saubere Lösung finde, komme ich darauf zurück. Frage dazu: Gäbe es eine Möglichkeit, aus dem umgebogenen Cmd auf das originale zuzugreifen?
auch das geht. aber eher unsauber. du kannst ein bestehendes kommando mit
parametern verwenden und die normalen durch reichen und nur deine ergänzten anders behandeln.
Zitat von: justme1968 am 09 Juli 2017, 13:52:43
auch das geht. aber eher h sauber. du kannst ein bestehendes kommando mit
parametern verwenden und die normalen durch reichen und nur deine ergänzten anders behandeln.
"h sauber"="unsauber"?
Wie würde das denn gehen?
Diese Lösung für Variante 1
--- 01_FHEMWEB.pm.dist 2017-07-13 07:34:21.835687267 +0200
+++ 01_FHEMWEB.pm 2017-07-13 07:52:54.188237786 +0200
@@ -1698,7 +1698,8 @@
foreach my $cmd (split(":", $cmdlist)) {
my $htmlTxt;
my @c = split(' ', $cmd); # @c==0 if $cmd==" ";
- if(int(@c) && $allSets && $allSets =~ m/\b$c[0]:([^ ]*)/) {
+ my $tempSets = join(" ",$allSets,FW_widgetOverride($d,$cmd));
+ if(int(@c) && $tempSets && $tempSets =~ m/\b$c[0]:([^ ]*)/) {
my $values = $1;
foreach my $fn (sort keys %{$data{webCmdFn}}) {
no strict "refs";
scheint für mich zu funktionieren. Hab ich was übersehen?
Die Idee ist gut, ich habe eine weniger CPU-intensive Variante eingebaut, getestet und eingecheckt.
Bitte um Feedback.
Sieht gut aus, danke!