Sonos Reading Radios in ein Array

Begonnen von TomLee, 20 Juli 2020, 09:09:46

Vorheriges Thema - Nächstes Thema

betateilchen

#15
weil ich in einem anderen Thread darum gebeten wurde...

Zitat von: Beta-User am 24 Juli 2020, 10:50:35
@betateilchen: Die Aussage ist zwar an sich korrekt, allerdings ist es mMn. für den Normaluser nicht ganz trivial, json2nameValue() außerhalb des MQTT2_DEVICE-Kontexts zu nutzen. Falls du Lust hast, ein (vollständiges) funktionierendes Beispiel (mit dummy/sonos) zu zeigen, wie man die von der Funktion gelieferte Referenz auf einen Hash nutzt, wäre z.B. hier der passende Thread: https://forum.fhem.de/index.php/topic,113009.0.html


sub beispiel2 {
   my $json = "{'R:0/0/1' => {'Title' => 'SWR4 Rheinland-Pfalz','Cover' => 'http://cdn-profiles.tunein.com/s1563/images/logog.png?t=153242','Ressource' => 'x-sonosapi-stream:s1563?sid=254&flags=8224&sn=0'},'R:0/0/3' => {'Title' => 'Radio Regenbogen','Cover' => 'http://cdn-radiotime-logos.tunein.com/s272334g.png','Ressource' => 'x-sonosapi-stream:s272334?sid=254&flags=8224&sn=0'},'R:0/0/5' => {'Title' => 'SWR4 Baden-Württemberg','Cover' => 'http://cdn-profiles.tunein.com/s20293/images/logog.png?t=1','Ressource' => 'x-sonosapi-stream:s20293?sid=254&flags=8224&sn=0'},'R:0/0/25' => {'Title' => 'PsyRadio Chillout','Cover' => 'http://cdn-radiotime-logos.tunein.com/s97066g.png','Ressource' => 'x-sonosapi-stream:s97066?sid=254&flags=8224&sn=0'},'R:0/0/23' => {'Title' => 'Nota Masria (Gemeinden)','Cover' => 'http://cdn-profiles.tunein.com/s290159/images/logog.png?t=158880','Ressource' => 'x-sonosapi-stream:s290159?sid=254&flags=8224&sn=0'},'R:0/0/33' => {'Title' => 'DASDING 92.5 (Euro-Hits)','Cover' => 'http://cdn-profiles.tunein.com/s20295/images/logog.png','Ressource' => 'x-sonosapi-stream:s76488?sid=254&flags=8224&sn=0'},'R:0/0/27' => {'Title' => '011.FM - Non Stop 60s','Cover' => 'http://cdn-radiotime-logos.tunein.com/s296020g.png','Ressource' => 'x-sonosapi-stream:s296020?sid=254&flags=8224&sn=0'}}";
   $json =~ s/\'/\"/g;
   $json =~ s/.=>./:/g;
   my $werte = json2nameValue($json);
   while ( my ($key, $value) = each (%$werte)) {
     fhem("setreading testDummy $key $value");
   }
}


liefert das im Screenshot gezeigte Ergebnis.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

#16
@Beta-User

Hab umgestellt auf das Reading RadiosList.

011.FM.-.Non.Stop.60s|1LIVE.diggi..Top.40.Pop.|DASDING.92.5..Euro-Hits.|Hitradio.Ö3.99.9..Österreichisch.|Nota.Masria..Gemeinden.|PsyRadio.Chillout|Radio.Regenbogen|SWR4.Baden-Württemberg|SWR4.Rheinland-Pfalz|die.neue.welle.101.8..Rock.

Jetzt müssen die Sender aber noch in /, wie würdest du das machen, anders ?

{ my $ar = ReadingsVal("Sonos_Wohnzimmer","RadiosList","unknown");; $ar =~ s/\|/\/,\//g;; $ar = "/".$ar."/";; }

/011.FM.-.Non.Stop.60s/,/1LIVE.diggi..Top.40.Pop./,/DASDING.92.5..Euro-Hits./,/Hitradio.Ö3.99.9..Österreichisch./,/Nota.Masria..Gemeinden./,/PsyRadio.Chillout/,/Radio.Regenbogen/,/SWR4.Baden-Württemberg/,/SWR4.Rheinland-Pfalz/,/die.neue.welle.101.8..Rock./

TomLee

Jedes Element mit map manipulieren wird vermutlich mittlerweile dein präferierter Ansatz sein, ist aber etwas länger:

{my @ar = split (/\|/,ReadingsVal("Sonos_Wohnzimmer","RadiosList","unknown"));;my @arr= join(",", map {"/".$_."/" } @ar);;return fhem("set Sonos_Wohnzimmer StartRadio ".Each("Sonos_Wohnzimmer", "@arr"));;}