Nutzung von Variablen (%s,%d...) an jeder Stelle?

Begonnen von roman1528, 22 August 2022, 10:17:32

Vorheriges Thema - Nächstes Thema

roman1528

Moin.
Ich probiere mich gerade etwas in FHEMApp aus und bin dabei mir ein eigenes SONOS_Template zu schreiben.

Bezüglich dem hinzufügen/entfernen  zu/aus Gruppen ist mir aufgefallen, dass man die Variablen (Ersetzungen) nicht überall nutzen kann. Oder ich mache noch Fehler?

z.B. Entfernen aus einer Gruppe:

"leftBtn": [
"MasterPlayer:%d:mdi-home-group-remove:disabled",
"IsBonded:1:mdi-home-group-remove"
],
"leftClick": [
"MasterPlayer::set %s RemoveMember %d"
],


Im Button prüfe ich als erstes ob das Reading "MasterPlayer" das eigene Device enthält, wenn ja -> disabled. Trifft das nicht zu und der Player ist in einer Gruppe (1) dann nicht disabled.
Funktioniert so leider nicht, weil scheinbar die Variable nicht berücksichtigt/ersetzt wird.
Das entfernen per Click selbst ist noch nicht getestet... bitte ignorieren.

Gleiches für "zu einer Gruppe hinzufügen":

"rightBtn": [
"IsBonded:1:mdi-home-group-plus:disbaled",
"MasterPlayer:%d:mdi-home-group-plus"
],
"rightMenu": [
"Bad:set SONOS_Bad AddMember %d",
"Küche:set SONOS_Kueche_L AddMember %d",
"Schlafzimmer:set SONOS_Schlafzimmer AddMember %d",
"Wohnzimmer:set SONOS_Wohnzimmer AddMember %d"
]


Der Button wird nicht dargestellt.
Zum Menü: Ist auch nicht getestet... Hier könnte ich mir natürlich eine automatische Füllung aus dem Reading "AvailablePlayerList" sehr gut vorstellen ;)

Kannst ja bei Gelegenheit mal drüber schauen. Danke schon mal.

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

jemu75

Hallo,

die Definitionen beginnen ja zumeist mit den beiden Parametern "reading:wert:...".
Diese beiden Teile der Definition werden bisher nicht von den Ersetzungen berücksichtigt.

In deinem konkreten Beispiel möchtest du prüfen, ob das Reading "MasterPlayer" dem aktuellen Device (%d) entspricht, wenn ich das richtig verstehe.
Ich würde mir mal ansehen, ob sich die Ersetzung auch in den Parameter "wert" implementieren lassen.

Beste Grüße
Jens  :)

roman1528

Zitat von: jemu75 am 22 August 2022, 19:11:11
In deinem konkreten Beispiel möchtest du prüfen, ob das Reading "MasterPlayer" dem aktuellen Device (%d) entspricht, wenn ich das richtig verstehe.
Ich würde mir mal ansehen, ob sich die Ersetzung auch in den Parameter "wert" implementieren lassen.

Total geil  ;D

Denke, dass das schon sinnvoll wäre, denn die Templates sind oder sollen ja "Multi-Device-fähig" sein. Dann auf z.B. "MasterPlayer:SONOS_Buero" (fest eingetragener Devicename) zu prüfen wäre ja blödsinn.

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

jemu75

#3
Hallo Roman,

ich habe mir das Ganze nochmal angesehen. Du kannst das viel einfacher lösen, ohne dass dafür was programmiert werden muss. In dem SONOS Device gibt es bereit ein Reading "IsMaster". Dieses Reading liefert genau die gewünschte Prüfung (1 = wenn der Player der Master ist und 0 = wenn der Player Teil einer Gruppe ist). Du müsstest deine Definition damit wie folgt schreiben:

"IsMaster:1:mdi-home-group-remove:disabled"


Für den Fall, dass dieses Reading nicht existieren sollte kannst du ein Userreading erstellen:

isMaster { if (ReadingsVal($name, "MasterPlayer", "") eq $name) { return 1; } else { return 0; } }


Gib gern mal eine Rückmeldung, ob das so geklappt hat.

Beste Grüße
Jens.  :)