set <device> ? mit cmdalias ergänzen?

Begonnen von Manul, 11 Juli 2017, 14:28:05

Vorheriges Thema - Nächstes Thema

Manul

Da ich mit meinen bisherigen Versuchen, aus einem Attribut automatisch die korrekten Widget-Settings für ein webcmd zu generieren, noch keinen Erfolg hatte (siehe hier und hier), hatte ich als nächstes die Idee, die Ausgabe von "set <device> ?" durch ein cmdalias mit meinen gewünschten Optionen zu ergänzen. Mein Versuch dazu sieht so aus:

defmod ca_getRobiSets cmdalias set Robi \? AS { \
\
  my $name = $EVTPART0;;\
  my %levels = split(/[ ,:]/,AttrVal($name,"powerlevels",""));;\
  \
  my $original = fhem("set Robi ?");;\
  \
  return $original." powerlevel:".join(",",(keys %levels));;\
  \
}
attr ca_getRobiSets room Automatisierung

setstate ca_getRobiSets defined



Leider funktioniert das so nicht: In FHEMWEB wird nach wie vor ein Textlink "powerlevel" angezeigt, wenn ich "set Robi ?" in die Kommandozeile eingebe, bekomme ich die Antwort "Unknown argument ?, choose one of reconnect wifi_setup start stop pause spot charge fan_power locate dnd_enabled dnd_start dnd_end move remotecontrol reset_consumable timer powerlevel". Der powerlevel wird also angefügt, die möglichen Werte nach dem Doppelpunkt aber unterschlagen. Wo ist mein Denkfehler?

rudolfkoenig

ZitatWo ist mein Denkfehler?
Dass Du annimmst, dass cmdalias hier funktioniert.

getAllSets ruft CommandSet direkt auf, und nicht ueber AnalyzeCommand.
Bis ich anderweitig ueberzeugt werde, ist mir das Overhead in AnalyzeCommand fuer diesen speziellen Fall nicht Wert. Bei dem ersten verlinkten Thema gibt es inzwischen eine Loesung, d.h. dein Problem sollte geloest sein. Auch wenn die per cmdAlias erzeugten neuen Befehle an manchen Stellen immer noch nicht erscheinen.

Manul

Danke für die Antwort! Ich kenne mich im FHEM-Code leider noch nicht gut genug aus, um sie komplett zu verstehen. Was hat es denn bspw. mit der Abfrage der "apiversion" in getAllSets auf sich? Dazu habe ich gar nichts gefunden.

Die Lösung im ersten verlinkten Thema (nochmals danke dafür!) bringt mich allerdings der Lösung nur näher. Zum "Problem" im zweiten verlinkten Thema (dynamisches Erzeugen der widgetOverrides aus den Werten eines anderen Attributs) habe ich noch keine Lösung gefunden. Für Ideen wäre ich da nach wie vor dankbar.

rudolfkoenig

ZitatWas hat es denn bspw. mit der Abfrage der "apiversion" in getAllSets auf sich?
Das habe ich auch nie ganz durchdrungen, das API Konzept stammt von Boris. Meines Wisssens wird es nicht verwendet.


Zitatdynamisches Erzeugen der widgetOverrides aus den Werten eines anderen Attributs
Ist mir noch nicht ganz klar, warum du das dynamisch machen musst, ausser um Spass an der Programmierung zu haben. Evtl. kannst du aber die Aufgabe mit einem notify auf global:ATTR.GeraeteName.* erledigen.

Manul

Zitat von: rudolfkoenig am 18 Juli 2017, 19:03:40
Ist mir noch nicht ganz klar, warum du das dynamisch machen musst, ausser um Spass an der Programmierung zu haben.

Ich muss nicht. Ist weniger eine Frage des Spaßes als der Ästhetik: Ich finde es störend, wenn ich ein und denselben Parameter doppelt eintragen muß.

Zitat von: rudolfkoenig am 18 Juli 2017, 19:03:40
Evtl. kannst du aber die Aufgabe mit einem notify auf global:ATTR.GeraeteName.* erledigen.

Damit werde ich mal experimentieren, danke!