[gelöst] Sonos Playliste bei bestimmten Tracks starten | Array?

Begonnen von onkel25, 28 Dezember 2017, 23:49:01

Vorheriges Thema - Nächstes Thema

onkel25

Hallo zusammen,

Ich habe eine Playliste in Sonos (Hörspiele für die Kinder; jede Folge unterteilt in x einzelne Kapitel; leider nicht immer die gleiche Anzahl, daher nicht zu berechnen). Ich würde nun gern einen Taster so belegen, dass die Hörspiele der Reihe nach jeweils im ersten Kapitel gestartet werden.

Im Ergebnis also z.B.
set Sonos_Kinderzimmer Track 1
set Sonos_Kinderzimmer Track 26
set Sonos_Kinderzimmer Track 47

Wie kann ich denn am sinnvollsten hinterlegen und abrufen, dass Folge 1 bei Track 1 startet, Folge 2 bei Track 26, Folge 3 bei Track 47 etc.?

Mir schwebt ein Zähler vor, der jeweils 1 hochzählt (oder zufällig auswählt) und dann bspw. Zähler = 3 der Tracknummer 47 zuordnet. Funktioniert das mit einem Array? Hat da jemand einen Tipp für ein sinnvolles Vorgehen?

Vielen Dank und Grüße, Mario

KernSani

Hi Mario,


ich denke, die Vorgehensweise ist die richtige. Ein Dummy (oder ein userreading) mit dem du den Zähler hochzählst und eine sub, die dir zum Zählerstand die Tracknr. zurückliefert, z.B. über ein Array, oder einfach if/else. Änderung des Zählers über notify (oder DOIF) abfangen und SONOS triggern... Leg doch mal los und poste hier, wenn du nicht weiter kommst.


Grüße,


Oli



RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

onkel25

#2
Danke! Habe jetzt wieder ein wenig dazugelernt (myUtils, perl).

Mit dem code in den myUtils funktioniert es.

# Bibi & Tina Position
sub BibiHexHex($) {
  my ($count) = @_;
  my @pos = (1, 26, 47); # hier Positionen der jeweiligen Startfolge eintragen
  my $wert=$pos[$count - 1]; # Arrayposition beginnt bei 0, daher 1 abziehen
  fhem( "set Sonos_Kinderzimmer Track $wert" );
}


Aufruf mit {BibiHexHex(Value("Hoerspielzaehler_BuT"))}


Wollte eigentlich mit einem Rückgabewert "direkt in fhem" weiterarbeiten, habe aber keinen Wert zurückbekommen, den ich weitervewenden konnte. Daher der Sonos-Befehl direkt in der Sub-Routine.

Gruß, Mario

Nachtrag: weil ich gerade dabei war, habe ich auch das Hochzählen in die Sub-Routine gebaut. Wenn die Einträge im Array ausgeschöpft sind, wird der Zähler wieder auf 1 gesetzt...
Nachtrag 2: Code noch ein wenig aufgeräumt, nachdem ich gelernt habe, dass man auch innerhalb des Array-Auslesens rechnen kann > $pos[$count - 1]

# Bibi & Tina Position
sub BibiHexHex($) {
  my ($count) = @_;
  my @pos = (1, 27, 49, 74, 82); #hier Positionen der jeweiligen Startfolge eintragen
  my $wert=$pos[$count - 1]; # Arrayposition beginnt bei 0, daher 1 abziehen
  fhem( "set Sonos_Kinderzimmer Track $wert" );
 
if ($count eq @pos) {
     fhem ( "set Hoerspielzaehler_BuT 1" );
     } else {
     $count = $count + 1; # Folgenzähler hochsetzen
     fhem ( "set Hoerspielzaehler_BuT $count" );
     }
}