Wie wird das SET und GET Auswahlfeld erstellt?

Begonnen von Tobias, 05 September 2016, 09:08:02

Vorheriges Thema - Nächstes Thema

Tobias

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???
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

justme1968

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

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Tobias

#2
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;
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

#4
das %set ist nicht global. nur modul global. da steht ja ein my davor.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Sailor

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
******************************
Man wird immer besser...

justme1968

du musst es in den $hash stecken wenn es device spezifisch sein soll. also. z.b. $hash->{helper}{sets}

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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