Hi,
in den Modulen kann man ja definieren, welche Werte im obereren Bereich des Frontents in der SET und GET Auswahlliste erscheinen sollen.
Ich habe es schon so versucht, aber es funktioniert nicht:
my %sets = (
"Play" => "1",
"Stop" => "0",
"Volume" => "1",
"Reload" => "0"
);
Noch viel merkwürdiger: der Wert von meiner SET Prozedur im Default wird übernommen ..?? Dort ist es natürlich eine Kommaseparierte Liste und das DropDownfeld enthält ebenfalls diese Kommas. Logischerweise funktioniert dann natürlich kein Set aus der Dropdownloast aufgrund des überfüssigen kommas
(gekürzt um den relevanten teil)
sub StreamRadio_Set($@) {
[...]
if (uc($cmdname) eq "PLAY") {
[...]
return undef;
} else {
return "Unknown command $cmdname, choose one of ". join(", ", keys(%sets));
}
return undef;
Nun Die Frage: WIE macht man es richtig???
die liste ist nur mit leerzeichen getrennt. ohne komma. das komme wird verwendet um die einzelnen paramter für slider, dropdown & co. zu unterteilen. schau z.b. hier: http://www.fhemwiki.de/wiki/DevelopmentModuleIntro#X_Set (http://www.fhemwiki.de/wiki/DevelopmentModuleIntro#X_Set)
gruss
andre
hmm, aber warum erscheinen dann die Kommas in meinem DropDownFeld??
Edit: hab es jetzt so gelöst:
} elsif ($cmdname eq "?") {
return "Unknown command $cmdname, choose one of ". join(" ", keys(%sets));
} else {
return "Unknown command $cmdname, choose one of ". join(", ", keys(%sets));
}
return undef;
Zitat von: Tobias am 05 September 2016, 09:51:12
hmm, aber warum erscheinen dann die Kommas in meinem DropDownFeld??
Ein Folgefehler aufgrund der nicht eingehaltenen Syntax. Generell solltest du keine Unterscheidung zwischen einem "set <name> ?" und einem unbekannten Befehl machen. Ist einfach doppelt gemoppelt.
Generell sollte ein solcher String bspw. wie folgt aussehen:
Unknown command $cmdname, choose one of play:noArg stop:noArg volume:slider,0,1,100 reload:noArg input:av1,av2,av3,hdmi1,hdmi2,hdmi3
Das Standardwidget ist die Textbox. Sobald Kommaseparierte Werte für ein Kommando mitgegeben werden, werden diese als Dropdown-Menü dargestellt. Es gibt aber auch Widgets die anhand des ersten Werts in der Liste aktiviert werden (wie z.B. "slider", "multiple", "colorpicker", ...)
Desweiteren bitte bedenken, dass %set global definiert ist. Sollte also ein anderes Modul ebenfalls ein %set global definieren, würden sich diese Überschneiden. Ich persönlich arbeite daher nicht mit globalen Variablen.
Viele Grüße
Markus
das %set ist nicht global. nur modul global. da steht ja ein my davor.
Hallo justme
Zitat von: justme1968 am 05 September 2016, 13:15:18
das %set ist nicht global. nur modul global. da steht ja ein max davor.
Siehste, ich wollte schon ein neues Thema aufmnachen weil ich genau dieses Phänomen gerade als Bug habe... und wiedermal hast Du meine Frage bereits im vorwege beantwortet. ;)
Wie kann ich die set-Liste Device-Global machen?
Also die %set/%gets nur im Bereich des Device individuell setzen?
Gruß
Sailor
du musst es in den $hash stecken wenn es device spezifisch sein soll. also. z.b. $hash->{helper}{sets}
gruss
andre