Hallo,
für ein selbst geschriebenes Modul hätte ich gerne für den state in der Raumansicht ein Menü (Auswahlliste).
set MeinMod ?
liefert auch eine Liste der möglichen Eingabewerte zurück. In der Deteilansicht erscheint für set ebenfalls eine Auswahllliste (Menü).
1. Wenn ich das Objekt in einem Raum plaziere, dann hat es ohne Attribute folgendes Erscheinungsbild:
meinMod on off
(on,off anklickbar)
obwohl on und off keine erlaubten Auswahlwerte sind.
2. Nun setze ich
attr meinMod webCmd state
meinMod state (state ist anklickbar)
3. attr meinMod setList state:offen,halboffen,geschlossen
Es bleibt bei
meinMod state
Nun:
attr meinMod setList state:offen,halboffen,geschlossen pos:10,20,30
attr meinMod webCmd state:pos
liefert
meinMod state <Auswahlliste mit 10,20,30>
Wiederum wird für state keine Liste angezeigt, nur für das reading pos.
Bei einem dummy würde hier nun auch ein Menü (Auswahlliste) für state mit den Werten aus setList erscheinen.
Was muss ich im Modul programmieren, dass für diesen Fall auch eine Auswahlliste erscheint?
In der Einsteiger-Doku war das Thema bislang nicht abgehandelt worden.
Wo könnte ich da nachlesen oder gibt es ein Modul, wo das sauber programmiert ist?
Ich habe mal versucht den Mechanismus in der 01-fhem-web diesbezüglich nachzuvollziehen, aber der ist zu verschachtelt, um in angemessener Zeit das zu verstehen.
Für Tipps ... und danbar und so.
Elektrolurch
setList ist kein generelles attribut das für alle module sinnvoll ist sondern nur für dummy und readingsProxy. diese module werten es aus und passen unter anderem die rückgabe von der ? darauf an.
wenn es sowieso um ein eigenes modul geht musst du nur bei set ? das richtige zurück liefern. also z.b. state:a,b,c
im wiki steht etwas dazu in developmentintro.
wobei state als kommando name nicht unbedingt eine glückliche wahl ist.
gruß
andre
Hallo,
nun habe ich es doch selber heraus gefunden, in der Einsteiger-Doku steht dazu nichts.
Lösung:
Man muss in der Antwortliste, die auf
set name ?
ausgegeben wird, alle Werte, die eine Option haben können (:), mit denen überschreiben, die im
attr name setList
definiert sind.
So einfach wäre die Antwort gewesen.
Hier dazu ein Code-Beispiel:
my %sets = (
"off" => undef,
"open" => undef,
"on" => undef,
"close" => undef,
"stop" => undef,
"go-my" => undef,
"on-for-timer" => "textField",
"off-for-timer" => "textField",
"z_custom" => "textField",
"pos" => "0,10,20,30,40,50,60,70,80,90,100",
'Pos' => 'slider,0,10,100',
'pct' => 'slider,0,10,100',
'prog' => undef
);
Dann in der
sub SOMFY_Set($@)
{
my ( $hash, $name, @args ) = @_;
...
# keine Eingabe passte, Reaktion auf ?
...
elsif(!exists($sets{$cmd}))
{
my @cList;
# overwrite %sets with setList
my $atts = AttrVal($name,'setList',undef);
my %setlist = split("[: ][ ]*", $atts);
foreach my $k (sort keys %sets)
{
my $opts = undef;
$opts = $sets{$k};
if (defined($opts) && ($opts ne''))
{
$opts = $setlist{$k} if(exists($setlist{$k}));
push(@cList,$k . ':' . $opts);
}
else
{
push (@cList,$k);
}
} # end foreach
return "Unknown argument $cmd, choose one of " . join(" ", @cList);
} # errror and ? handling
Elektrolurch
nun habe ich es doch selber heraus gefunden, in der Einsteiger-Doku steht dazu nichts.
Der Einsteigerdoku wird sowas auch nicht behandeln, da Module zu aendern nichts fuer Einsteiger ist.
Fuer Endbenutzer gibt es widgetOverride, um die vom Modul vorgeschlagene defaults zu ueberschreiben.
Einsteiger-Doku für Modulentwickler, war gemeint
http://www.fhemwiki.de/wiki/DevelopmentModuleIntro
Zitat:
Fuer Endbenutzer gibt es widgetOverride, um die vom Modul vorgeschlagene defaults zu ueberschreiben.
Irgendwie ging das nicht. Vermutlich muss man für diesen Fall im Modul auch etwas programmieren, damit das unterstützt wird.
Vermutlich muss man für diesen Fall im Modul auch etwas programmieren, damit das unterstützt wird.
Das ist nicht der Fall, und wenn doch, dann ein Bug.