Autor Thema: Nutzung von Variablen (%s,%d...) an jeder Stelle?  (Gelesen 1007 mal)

Offline roman1528

  • Sr. Member
  • ****
  • Beiträge: 764
    • ueberueck.com
Nutzung von Variablen (%s,%d...) an jeder Stelle?
« am: 22 August 2022, 10:17:32 »
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 NVMe;1TB NVMe: FHEM 6.1,FTUI,8" Tablet's+Fully;HUE;ESPRGBWW;HM;Duofern;ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT
RPi3+: FHEM 6.1;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.1;DIY Relais-Board;I²C;GPIO;RFID;Solar
FHEM&FTUI: www.ueberueck.com

Offline jemu75

  • Moderator
  • Sr. Member
  • ***
  • Beiträge: 882
    • FHEM App
Antw:Nutzung von Variablen (%s,%d...) an jeder Stelle?
« Antwort #1 am: 22 August 2022, 19:11:11 »
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  :)

Offline roman1528

  • Sr. Member
  • ****
  • Beiträge: 764
    • ueberueck.com
Antw:Nutzung von Variablen (%s,%d...) an jeder Stelle?
« Antwort #2 am: 23 August 2022, 11:37:31 »
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 NVMe;1TB NVMe: FHEM 6.1,FTUI,8" Tablet's+Fully;HUE;ESPRGBWW;HM;Duofern;ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT
RPi3+: FHEM 6.1;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.1;DIY Relais-Board;I²C;GPIO;RFID;Solar
FHEM&FTUI: www.ueberueck.com

Offline jemu75

  • Moderator
  • Sr. Member
  • ***
  • Beiträge: 882
    • FHEM App
Antw:Nutzung von Variablen (%s,%d...) an jeder Stelle?
« Antwort #3 am: 26 August 2022, 19:49:48 »
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.  :)
« Letzte Änderung: 26 August 2022, 19:51:29 von jemu75 »

 

decade-submarginal