Eigenes Modul: Menüliste für state?

Begonnen von Elektrolurch, 11 Februar 2015, 12:53:54

Vorheriges Thema - Nächstes Thema

Elektrolurch

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
configDB und Windows befreite Zone!

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

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

configDB und Windows befreite Zone!

rudolfkoenig

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.

Elektrolurch

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.
configDB und Windows befreite Zone!

rudolfkoenig

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.