(Gelöst) dynamisches Dropdown mit setList

Begonnen von jannis, 23 Februar 2020, 11:33:20

Vorheriges Thema - Nächstes Thema

jannis

Moin,

ich habe Devices: Steckdose_01, Steckdose_02, ...
In einem anderen Device möchte ich die Steckdosen in einem Dropdown zur Auswahl anbieten.

Was natürlich funktioniert ist:
define Schalter dummy
attr di_Schalter setList Steckdose:wählen...,Steckdose_01,Steckdose_02,Steckdose_03,Steckdose_04



Mit der Zeit kommen aber noch viele Steckdosen hinzu. Wie könnte man die Steckdosen dynamisch in das Dropdown packen?


attr di_Schalter setList Steckdose:wählen...,Steckdose_.*


geht leider nicht.
+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?

jannis

ich hatte jetzt noch die Idee, über Perl-Code setList zu befüllen:

attr di_Schalter setList {"Steckdose:wählen...,Steckdose_01,Steckdose_02,Steckdose_03,Steckdose_04"}

... aber geht so leider auch nicht direkt im Device.

Eines fällt mir nach längerem Nachdenken  noch ein:
den gesamten "attr ... setList"-Befehl in Perl erzeugen, sobald eine neue Steckdose angelegt wird ... das könnte per notify erfolgen, nur müsste man dann eine Liste aller Steckdosen in Perl in ein array einlesen. Wie würde das dynamisch gehen?
+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?

jannis

#2
Lösung gefunden:

devspec2array("Steckdose_.*");

so einfach  :)

Jetzt muss ich nur noch rausbekommen, wie man in Perl durch das Array itteriert ... bei php wüsste ich es, bei perl bin ich neu ... aber ich denke, das finde ich innerhalb 10 Minuten raus ;) ... hoffentlich. Vielleicht kann hier ja auch jemand die "Profi-Lösung" hinschreiben :)
+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?

jannis

hat fast hingehaun mit den 10 Minuten:

sub alleSteckdosen()
{
my @devices = devspec2array(".*Steckdose_..");
        my $liste = "";

for my $device (@devices)
        {
           $liste = "$liste,$device";
}
return $liste;
}


... gelöst ... danke fürs Zuhören :)
+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?

Beta-User

Zwei Tipps noch:

Wenn's nicht grade ein Array ist:
$liste .= ",$device";

Für ein Array: $liste= join(",",@devices);
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

jannis

+ + + Gibt es eigentlich hier Smarthome-Enthusiasten aus + + +
Norddeutschland / Nordfriesland / Bredstedt / Husum oder Niebül?