x789 / xonox

An alternative service for legacy NOXON(tm) devices
GNU Affero General Public License v3.0
6 stars 2 forks source link

Add Support for Favorite/Preset-Buttons #9

Closed SaschaRei closed 1 year ago

SaschaRei commented 2 years ago

Hallo x789, zunächst einmal möchte ich mich vielmals bei dir für deine unglaublich gute Lösung namens Xonox bedanken, die meinem Noxon ein zweites Leben ermöglicht hat! DANKE! Um das Noxon gänzlich wie vorher nutzen zu können, möchte ich freundlich folgendes Feature für Xonox anfragen: Gäbe es vielleicht eine Möglichkeit, dass Xonox auch die Presets der Noxon-Radios abbilden kann? Wenn ich die Preset-Tasten (1-5) auf der Fernbedienung nutzen möchte, werden im Xonox werden folgende 404-Fehler angezeigt und das Radio bootet neu, da die für die Abfrage bzw. Einrichtung serverseitigen Strukturen fehlen. Öffnen des Preset1-Senders (kurzes Drücken der Taste auf der FB): GET /Favorites/GetPreset.aspx?mac=xxxx&dlang=ger&fver=79&hw=10143&id=1&itemid=... Speichern eines Senders als Preset1 (längeres Drücken der Taste auf der FB): GET /Favorites/AddPreset.aspx?mac=xxxx&dlang=ger&fver=79&hw=10143&id=1&itemid=... Inwiefern das Speichern der Presets über Curl im Xonox (analog der Sender) einfacher und für dich besser zu realisieren wäre, kann ich nicht beurteilen. Ebenso kann ich den Aufwand dafür absolut nicht einschätzen oder beurteilen, ob Zeit und Nutzen hierfür in einem ausgewogenen Verhältnis stehen. Sofern das Feature realisierbar wäre, würde mich dessen Implementierung sehr freuen, bis dahin erfreue ich mit dem dank Xonox geretteten Noxon-Internetradio. Beste Grüße und vielen, vielen Dank für deine geleistet Arbeit!!!

x789 commented 2 years ago

Hey @SaschaRei,

es freut mich, dass dir xonox nützt. Auch ich vermisse dir Presets im täglichen Gebrauch. Deshalb ist dies auch das Feature, welches ich als nächstes angehen möchte.

Die Presets sind jedoch nicht Teil der alten vTuner-API, sondern eine Erweiterung die damals über die Noxon-Server lief. Leider habe ich von dem Teil keine Mitschnitte, weshalb ich mich dort mit Versuch und Irrtum herantasten muss.

Der zeitliche Horizont wann ich mit dem Feature fertig bin kann ich noch nicht abschätzen. Ich werde diese Woche jedoch damit beginnen und hier ab und zu etwas zum Fortschritt posten...

x789 commented 2 years ago

Das Feature wird es in die nächste Version schaffen. Ich plane die Version 0.0.7 in den nächsten Tagen fertigzustellen.

x789 commented 2 years ago

Leider hat meine Implementierung nicht den Langzeittest bestanden. Ich hatte die Annahme getroffen, dass ich den Wert von mac zur Identifizierung des Geräts verwenden kann, da beim 'Login' immer das gleiche Token zurück gegeben wird. Ich musste jetzt feststellen, dass sich dieser Wert aber über die Zeit ändert. Einen Bezug zum aktuellen Zeitpunkt oder der IP-Adresse konnte ich nicht finden. Daraus folgt, dass Presets wohl erst unterstützt werden können, wenn ich herausgefunden habe wie ich eine unveränderliche ID aus dem Wert des Parameters mac auslesen kann. 😞

lmigula commented 2 years ago

Ich kann hier mal schauen ob ich auch ein paar Wireshark Log Files mit unterschiedlichen Geräten erstellen kann. Vielleicht hilft das ja.

SaschaRei commented 2 years ago

Vielen Dank für deine und eure sicherlich umfangreichen Bemühungen. Auch wenn meine bescheidene Beobachtung vielleicht nicht viel dazu beiträgt (dafür bin ich nur Nutzer), wird in meinem Xonox seit seiner Inbetriebnahme am 05.07.2022 bis heute bei allen Abfragen (auch bei den Preset, Add oder Get) immer die gleiche MAC übermittelt. Wenn ich die Anmerkungen von cweiske folge, könnte es sich hierbei um die mit dem Encrypted-Token: a6703ded78821be5 verschlüsselte MAC-Adresse des jeweiligen Geräts handeln (MD5?). Vielleicht habe ich deine Ausführungen aber auch falsch verstanden, wenn dies der Fall ist, Entschuldigung! Sofern ein einfaches Downgrade (ähnlich der Update-Installation) möglich wäre, könnte ich mich gerne auch als Beta-Tester zur Verfügung stellen ;).

lmigula commented 2 years ago

Moin, ich habe hier gerade bei zwar bei unterschiedlichen Endpoints unterschiedliche Einträge für den Parameter mac, aber ansonsten sehen die auch immer identisch aus. /reporting/Auth.aspx?mac=bb562ea810e08920f05896e2c97bb9c1& und /setupapp/fs/asp/BrowseXML/Search.asp?sSearchtype=3&Search=3&mac=0d9e287592e1983fa802f2dd38faa1b2& und die mac 0d9e287592e1983fa802f2dd38faa1b2 taucht dann auch in den weiteren logs auf einem anderen Server auf und mit einer anderen IP des gleichen Geräts auf. Wann hat sich denn bei dir der Parameter mac geändert?

filtered.log

x789 commented 2 years ago

@SaschaRei: Bei einer simplen Verschlüsselung eines Klartexts (z.b. der MAC-Adresse) müsste unter Verwendung des gleichen Schlüssels (in unserem Kontext vielleicht das "Token") immer der selbe verschlüsselte Text entstehen. Da sich bei mir der Wert für den Parameter mac jedoch bereits mehrere Male geändert hat vermute ich, dass auch ein weiterer (dynamischer) Wert im Klartext enthalten ist. Es gibt auch Algorithmen bei denen bei jeder Verschlüsselung des selben Klartexts mit dem selben Schlüssel ein unterschiedliches Ergebnis erzeugen, damit man nicht vom verschlüsselten Text auf den Klartext schließen kann. Ich denke aber nicht, dass der verwendete Algorithmus dies tut, denn dafür ist der Wert des Parameters mac zu stabil.

@lmigula: Danke für das Log. Den Endpunkt /reporting kenne ich noch nicht. Wenn dort aber auch ein anderer Wert für mac verwendet wird als bei /setupapp und /Firmware, dann ist dies in meinen Augen ein Indiz dafür, dass mac je nach Kontext unterschiedliche Informationen enthält. Einen genauen Grund für die Wertänderung von mac konnte ich nicht erkennen. Als ich das (nicht funktionierende) Preset-Feature implementiert habe, war alles fein. Zwei Tage später, konnten die Geräte ihre Presets nicht mehr finden, da sie einen anderen mac-Wert für die Abfrage verwendeten. Ich habe daraufhin Cold-Resets und Datumsänderungen am Gerät probiert, jedoch führte dies nicht zu Veränderungen von mac. Im Log von xonox konnte ich eine Änderung finden:

[09/Jul/2022 14:08:22] "GET /setupapp/fs/asp/BrowseXML/loginXML.asp?token=0 HTTP/1.1" 200 -
[09/Jul/2022 14:08:22] "GET /setupapp/fs/asp/BrowseXML/Search.asp?sSearchtype=3&Search=3&mac=f46b790c84837682ab4ecf13be0822a3&dlang=eng&fver=79&hw=10143&ven=Terratec HTTP/1.1" 200 -
[09/Jul/2022 14:39:19] "GET /setupapp/fs/asp/BrowseXML/loginXML.asp?token=0 HTTP/1.1" 200 -
[09/Jul/2022 14:39:19] "GET /setupapp/fs/asp/BrowseXML/Search.asp?sSearchtype=3&Search=3&mac=f46b790c84837682d8081c40&dlang=eng&fver=79&hw=10143&ven=Terratec HTTP/1.1" 200 -

Verrückterweise nutzt das Gerät ein paar Tage später wieder den "ursprünglichen" Wert für mac.

[22/Jul/2022 09:11:07] "GET /setupapp/fs/asp/BrowseXML/loginXML.asp?token=0 HTTP/1.1" 200 -
[22/Jul/2022 09:11:07] "GET /setupapp/fs/asp/BrowseXML/Search.asp?sSearchtype=3&Search=0&mac=f46b790c84837682ab4ecf13be0822a3&dlang=eng&fver=79&hw=10143&ven=Terratec HTTP/1.1" 200 -

🤯

x789 commented 2 years ago

Personally, I would like to be able to use the favorites/presets of my radio again. But since I don't know (currently) a way to identify radios clearly and reliably on the server side, but I only want to extend xonox with features that really work, I decided to do the following:

The next version of xonox will support a preset list for all devices. That means, if I set the favorite 1 at radio A, it is automatically set for radio B as well. Even if this implementation does not reproduce the original behavior, it is probably "good enough" for most users. But you will also be able to configure xonox to create a separate favorites list for each device. Maybe there are people out there (@lmigula and @SaschaRei maybe?) who can enable this behavior for their server and thus check if the feature is mature enough to become standard behavior at some point.

(Da dieser Post eine Designentscheidung dokumentiert, habe ich ihn auf Englisch verfasst. Wir können aber in diesem Thread gerne weiter auf Deutsch diskutieren.)

lmigula commented 2 years ago

Klar, ich kann das hier gerne zwischendurch testen wenn eine halbwegs stabile Version da ist ;)

x789 commented 2 years ago

Die oben beschriebenen Änderungen sind nun Teil des Releases 0.0.7.2. Ihr könnt das Paket auch bei PyPi herunterladen. Falls ihr einen Zwischenstand installiert hattet der nicht auf PyPI oder Github veröffentlicht wurde, könnt ihr Probleme beim Start des Services bekommen. In diesem Fall müsst ihr alle Presets aus der xonox.conf löschen (oder die komplette Datei, dann verliert ihr aber auch eure gespeicherten Sender...). In der ReadMe des Pakets ist beschrieben, wie ihr vom Standard (globale Favorittenliste) zur gerätespezifischen Favoritenliste umschalten könnt.

ghost commented 2 years ago

Hallo x789, vielen Dank für die gute Arbeit! Da die Noxons jetzt billig verscherbelt werden habe ich mir sogar noch eins gekauft (5€). Ich habe noch eine Bitte: Kannst du mal ein Beispiel posten wie die Syntax der Presets in xonox.conf ist, bzw. ein Beispiel für einen CURL?

x789 commented 2 years ago

Hey @HorstRado, Presets kannst du durch langes Drücken auf die jeweilige Stationstaste direkt am iRadio setzen. Nachdem du einen Sender ausgewählt hast und dein Radio ihn abspielt, kannst du durch langes Drücken auf eine Nummerntaste diesen Preset belegen. Es sollte dann die Meldung "Preset set" erscheinen. Falls du eine Fehlermeldung bekommst, musst du noch einmal die Station aus der Liste auswählen und erneut den Preset anlegen. (Hintergrund: Die Radios schicken keine Information welcher Sender als Preset gespeichert werden soll. Deshalb muss xonox mitbekommen, welcher Sender vom Radio zuletzt angefordert wurde. Den zuletzt ausgewählten Sender speichert sich xonox deshalb, vergisst ihn aber nach einem Neustart)

Falls du aber manuell etwas umkonfigurieren möchtest, hier die gewünschten Beispiele:

xonox.conf mit einer Station und einem Preset:

{
  "stations": [
    {
      "id": 0,
      "name": "Radio Swiss Pop",
      "description": "Radio Swiss Pop Live Stream",
      "stream": "http://stream.srg-ssr.ch/m/rsp/mp3_128"
    }
  ],
  "nextStationId": 5,
  "presets": [
    {
      "group_id": "global",
      "index": 1,
      "station_id": 0
    }
  ]
}
  1. Station mit der ID 0 abspielen (Parameter Search=0)

    curl --location --request GET 'http://legacy.noxonserver.eu/setupapp/fs/asp/BrowseXML/Search.asp?sSearchtype=3&Search=0&mac=7a537de70c8b49d80ef9bec8ac790172&dlang=eng&fver=79&hw=10143&ven=Terratec'
  2. Aktuelle Station als Preset für Taste 1 speichern (Parameter id=1)

    curl --location --request GET 'http://legacy.noxonserver.eu/Favorites/AddPreset.aspx?mac=7a537de70c8b49d80ef9bec8ac790172&dlang=eng&fver=79&hw=10143&id=1&itemid='
x789 commented 1 year ago

Seit ein paar Wochen sind keine neuen Nachrichten in diesem Thread gepostet worden. Ich gehe deshalb davon aus, dass die aktuelle Preset-Unterstützung gut genug ist. Ich schließe deshalb diese Issue.