Sonos / TuneIn und Datenschutz

Begonnen von Elektrolurch, 25 Mai 2021, 15:20:34

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo Liste,

heute möchte ich mal einen Punkt ansprechen, der mich schon seit längerem beschäftigt.
Seit einiger Zeit kann man zu den Sonos - Produkten nur noch Updates erhalten, wenn man der Datenschutzbestimmung zustimmt und sich registriert. Man erklärt sich damit einverstanden, dass die Nutzungsdaten an Dritte weitergegeben werden und das finde ich nicht in Ordnung.
Ich möchte das Produkt auch nutzen können, ohne dass ich mich im Internet mit meinen Nutzungsdaten offen lege.
Daher habe ich mal ein wenig geforscht.

Mit der Sonos - App habe ich Vavoriten angelegt, die ich dann auch von fhem aus nutzen kann (Internetradio).
Wenn ich einen solchen Favoriten starte, passiert folgendes:
1. Der Sonos-Player sendet an eine spezielle Subdomain von TuneIn meinen Request und reichert diesen mit Nutzungsdaten an. TuneIn wertet diesen aus und liefert dann schließlich und endlich die eigentliche Streaming - Adresse des Internetradios zurück (Beispiel Klassik Radio):


# pre - Domain von TuneIn
hls-radio://https://prod-pre.fns.tunein.com/v1/master/30ead7055f8b8e1f2f04add745f139b184df6925/prod_preroll/preroll0.m3u8?
# Parameter:
ads.cust_params=partnerId=Sonos&
ads_partner_alias=Sonos&
version=56&
premium=false&
abtest=&language=en-US&
# damit wird bei TuneIn die Station identifiziert
stationId=s25028&
is_ondemand=false&
genre_id=g5&
class=music&
# Falsch geraten :-)
is_family=false&
# plitische Gesinnung? :-)
is_mature=false&
# meine Geo-Koordinaten?
country_region_id=88&
station_language=german&
programId=p225629&
is_event=false&
# und wieder die StationsID
url=https://tunein.com/desc/s25028/&
description_url=https://tunein.com/desc/s25028/&
# Advertising ?
ads.npa=1&
ads.gdfp_req=1


Letztendlich kann man auch den Sonos - Player über den Befehl

set SonosArbeitszimmer PlayURI http://opml.radiotime.com/Tune.ashx?id=s25028
&formats=aac,ogg,mp3,wma,wmvoice&partnerId=16&serial=99d59896bd3e0dbab0b2f9c70f3571b9

direkt aufrufen.
Und wer noch weniger von sich preis geben möchte, kann auf das Senden der PartnerId und der Seriennummer auch verzichten und bekommt trotzdem den Stream ausgeliefert:

set SonosArbeitszimmer PlayURI http://opml.radiotime.com/Tune.ashx?id=s25028


Aber das Starten eines Internetsenders geht noch schneller (!!!), wenn man die ganzen Marketing - Firmen außen vor lässt und den Sender direkt mit seiner URI aufruft.
Die bekommt man im reading "currentTrackURI" des Sonos-Players nach einigen Sekunden angezeigt und sieht so aus:

http://klassikr.streamabc.net/klassikradio-simulcast-aac-mq?sABC=60nps39r%230%233rrq0n821pp2s298r619635rqqn2o022%23GharVa&=&amsparams=playerid:TuneIn;skey:1621947294

Davon benötigt man jedoch auch nur:

set SonosArbeitszimmer PlayURI http://klassikr.streamabc.net/klassikradio-simulcast-aac-mq

Für einen SB-Player funktioniert der Link natürlich auch.
Gefühlt startet der Sonos_Player dreimal so schnell den Internetsender  über den kurzen Link, als über den Umweg über den Faoriten.

Fazit:
Um mich vor dem Ausspähen meiner Nutzungsdaten zu schützen, werde ich eine kleine Routine schreiben, alle Favoriten abspielen und über das reading currentTrackURI die zugeöhigen URIs einsammeln.
Sollten sich jedoch einmal die URL eines Senders ändern, so muss man das Ganze wiederholen.
Über die ID bei TuneIn entfällt dies, aber dafür gibt man ein TEil seiner Nutzungsdaten an zentraler Stelle ab.

Elektrolurch
configDB und Windows befreite Zone!

KölnSolar

Habe kein Sonos. Aber trotzdem mal wieder interessant, dass es heutzutage den Herstellern NUR NOCH darum geht, persönliche Daten abzufischen, anstatt wenigstens eine datensicherere Option anzubieten.
Man sieht es ja an JEDER Website. Anstatt neben einem Button "Zustimmen" einen simplen Button "Ablehnen" anzubieten, muss man sich höchst kompliziert und unverständlich durch die Details klicken, um ausspähende Cookies zu vermeiden. Bei einigen Websites funktioniert übrigens (noch) Cookies generell abzulehnen und die Seite funktioniert trotzdem.

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Otto123

#2
ZitatUm mich vor dem Ausspähen meiner Nutzungsdaten zu schützen, werde ich eine kleine Routine schreiben, alle Favoriten abspielen und über das reading currentTrackURI die zugeöhigen URIs einsammeln.
und ich muss mal auf die Suche gehen, warum die url so wie bei Elektrolurch bei meinem sonos2mqtt nicht funktioniert.  :-[
Denn die Routine die diversen Favoriten Radios und Playlisten auszulesen habe ich dort schon drin und das aufstrippen ist sicher dann final nur noch ein kleiner Schritt ;)
Edit: falsch gedacht  :o die URL steht im Favoriten nicht drin
{"Title":"Klassik Radio","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/49","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s25028?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"}

Aber vielleicht liege ich da falsch. :-\

Ich glaube, man könnte die Favoriten gleich mit der url anlegen - dann würde das Sonos immer mit Datenschutz machen?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

juemuc

#3
Hallo zusammen,

bei mir funktioniert dies auch nicht.

mit
set Sonos-PLayer PlayURI https://absolut.hoerradar.de/absolutradio-hot-mp3-128 wird einfach der bereits eingestellte Sender (z.B. "Bayern 3") aktiviert. Direkt im Browser funktioniert es mit https://absolut.hoerradar.de/absolutradio-hot-mp3-128 ???

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Jamo

#4
http anstatt https ist das Zauberwort:

set Sonos_Flur PlayURI http://absolut.hoerradar.de/absolutradio-hot-mp3-128

Im prinzip muss man den Sender "absolut Hot" aus der Sonos App abspielen lassen, und dann in seinem Masterplayer im Reading currentTrackURI nachschauen, welche URL da steht. So habe ich es für alle meine Favoriten gemacht.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

juemuc

Danke. Damit funktioniert es  ;D

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Elektrolurch

Hallo,

Zitat:
Im prinzip muss man den Sender "absolut Hot" aus der Sonos App abspielen lassen, und dann in seinem Masterplayer im Reading currentTrackURI nachschauen, welche URL da steht. So habe ich es für alle meine Favoriten gemacht.

Ich habe das mal über eine Schleife laufen lassen und hänge hier zwei Dateien an.
Die .json kann man beispielsweise mit

sub SCC_SM_Load($;$)
{
my ($hash,$file) = @_;
$hash = $defs{$hash} if(ref($hash) ne 'HASH');
my $name = $hash->{NAME};
# load from disk
$file = AttrVal($name,'senderListFile','/opt/fhem/log/Senderliste.json') if(!$file);
Log3($name,4,"SCC_SM_Load: $file");
if(open(SFILE,$file))
{
# do init
# binmode(FILE, ':encoding(utf-8)');
my $s;
while(<SFILE>)
{
$s .= $_;
} # end while
$hash->{URIs} = eval($s);
if($@)
{
Log3($name,1,"SCC_SM_Load: Error $@ eval on input file $file");
}
close(SFILE);
} # read from disk

else
{
my $err = "SCC_SM_Load: could not read $file";
Log3($name,1,$err);
return $err;
} # error
return undef;
} # end sub SCC_SM_Load
################################

einlesen.
Dann  hat man einen hash in $hash->{URIs} und kann mit


my $uri = $hash->{URIs}{$sender}{uri};
# tuneIn ID für Sender und Logo des Senders
my $id = $hash->{URIs}{$sender}{id};
# Parameter aus uri abschneiden
$uri =~s/\?.*$//;
# Sonos Player
DoSet($masterplayer,'PlayURI',$uri);
# bzw SB Player
DoSet($player,'playlist','play',$uri);


# und das logo holt man bei TuneIn mit der id:
$logo = 'http://cdn-radiotime-logos.tunein.com/s' . $id . 'q.png';
# und so sieht ein Teil für die html - Generierung aus:
$ret .= "<img src='$logo' alt='$sender' title='$sender' class='Logo'>";

Ich habe mal die meisten Sender hier bei mir über die URI gestartet, wobei ich die Parameter in der url hinter dem '=' (s.o.) abgeschnitten habe. Die Sender werden deutlich schneller gestartet, als wenn man sie als Vavouriten oder Radios per Sonos oder über TuneIn startet.
Und der ganze Müll zum Datensammeln ist auch weg....
Die id scheint bei TuneIn eindeutig dem Sender zum Abspielen, bzw. für das Logo zu sein.

Hier noch ein Ausschnitt aus dem EventHandler für den Sonos - Player. In $hash->{scan} merke ich mir die Daten für einen "Scan" über alle Favouriten von Sonos, die ich nach einander abspiele und mir dann die uri's zu den Sendern in $hash->{URIs}{$sender} abspeichere.
Den Sendernamen merke ich mir beim Starten des Senders in $hash->{Sender}, damit ich die uri auch eindeutig dem Sender zuordnen kann.

elsif($rd eq 'currentTrackURI' && $display eq 'Radio')
{
return undef if(!$val || $val !~m/^(aac|http)/);

my $sender = $hash->{Sender} if(exists($hash->{Sender}));
$val = uri_unescape($val);
$val =~s/^(aac|http):\/\/http:/http:/;
Log3($name,2,"SCC_PlayerEvent: $name $rd sender $sender val: $val");
$hash->{URIs} = {} if(!exists($hash->{URIs}));
return undef if(!$sender || $sender eq '' );

if(exists($hash->{scan}))
{
my $scan = $hash->{scan};
$scan->{duration} = sprintf("%.1f s",time() - $scan->{time});
if($sender ne $scan->{sender})
{
$scan->{errors} .= "$sender <-> mismatch $scan->{sender}\n";
return undef;
}
$scan->{uri} = $val;
$scan->{log} .= "$sender in $scan->{duration} uri: $val\n";
$scan->{uri} = $val;
# SCC_SM_UpdateScan($hash->{scan});
} # in scan mode

$hash->{URIs}{$sender} = {} if(!exists($hash->{URIs}{$sender}));
if($hash->{URIs}{$sender}{uri} ne $val)
{
Log3($name,1,"$name $rd change uri for $sender\nold: $hash->{URIs}{$sender}{uri}\nnew: $val");
$hash->{URIs}{$sender}{uri} = $val;
$hash->{URIs}{$sender}{id} = 0;

# currentAlbumArtURL http://cdn-profiles.tunein.com/s191784/images/logog.jpg
my $handle = uri_unescape(readingsval($phash,'currentAlbumArtURL',''));
if($handle =~m/tunein.com.*?s(\d{5,6})/)
{
my $id = $1;
$hash->{URIs}{$sender}{id} = $id;
Log3($name,1,"id $id handle $handle");
} # tunein
else
{
Log3($name,1,"handel no tunein: $handle\n");
} # end no tuneIn
} # change uri

} # currentTrackURI


Soweit ein paar Anregungen.

Elektrolurch


configDB und Windows befreite Zone!