FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Tobias am 05 September 2016, 09:08:02

Titel: Wie wird das SET und GET Auswahlfeld erstellt?
Beitrag von: Tobias am 05 September 2016, 09:08:02
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???
Titel: Antw:Wie wird das SET und GET Auswahlfeld erstellt?
Beitrag von: justme1968 am 05 September 2016, 09:38:55
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
Titel: Antw:Wie wird das SET und GET Auswahlfeld erstellt?
Beitrag von: Tobias am 05 September 2016, 09:51:12
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;
Titel: Antw:Wie wird das SET und GET Auswahlfeld erstellt?
Beitrag von: Markus Bloch am 05 September 2016, 13:11:09
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
Titel: Antw:Wie wird das SET und GET Auswahlfeld erstellt?
Beitrag von: justme1968 am 05 September 2016, 13:15:18
das %set ist nicht global. nur modul global. da steht ja ein my davor.
Titel: Antw:Wie wird das SET und GET Auswahlfeld erstellt?
Beitrag von: Sailor am 14 September 2016, 07:23:21
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
Titel: Antw:Wie wird das SET und GET Auswahlfeld erstellt?
Beitrag von: justme1968 am 14 September 2016, 08:55:01
du musst es in den $hash stecken wenn es device spezifisch sein soll. also. z.b. $hash->{helper}{sets}

gruss
  andre