Sonos Kids Controller (nun auch für andere Spotify Connect Geräte): Touchscreen Jukebox für nicht mehr ganz so kleine Kinder

  • Grüße in die Runde und vielen Dank für die geniale Projekt-Idee!


    Nach zwei langen, erfolglosen Abenden an Pi und Touchscreen schaffe ich heute mal den Sprung vom Mitleser zum Forennutzer und hoffe auf offene Ohren bei Thyraz  No.Trace  fazzo


    Auch ich hänge daran, dass ich in Spotify zwar erfolgreich Such-Queries absetezn und diese auch dem Startbildschirm hinzufügen kann, aber keine Unique-Album-IDs nutzen kann, um einfach ausgewählte Alben hinzuzufügen.



    Hier bekomme ich, wie hotspot_2 schlicht ein Undefined angezeigt. Beim Lesen des Threads zeigt sich, dass dies wohl öfter vorkommt, eine mögliche Problemlösung habe ich aber nicht gefunden.


    beide Konfig sind soweit richtig mit ClientID und Secret bestückt (zig mal nachgelesen und probioert), dennoch tut sich nichts. Könnte mir einer der erfolgreichen Bastler einen Hinweis geben, wo ich letztendlich noch mal Hand angelegt habt?


  • Guten morgen zusammen,


    ich hatte schon befürchtet, dass ich mich wegen eines Problems anmelden muss und habe jetzt doch endlich die "Nuss" geknackt...


    Hier ein paar Tips für Leute wie mich, die eigentlich gar nicht wissen was sie tun aber zumindest das richtige googlen :D


    1. Wie ein user bereits berichtete nicht den Audit fix durchführen (hatte ich natürlich beim ersten mal instinktiv gemacht) und daraufhin funktionierte die Angular App Generierung nicht...
    2. Kabel = Schmerz...
      1. Mehr Strom hilft.. ich hatte am Anfang aus "debugging Gründen" den Raspberry 4 am USB Port des PCs... der Touch Screen flackerte sehr seltsam und das Problem habe ich durch den Anschluss am Netzteilgelöst (schein am USB Port wohl nicht genug saft für Rasp + Screen zu bekommen)
      2. USB != USB... das mitgelieferte USB Kabel vom Screen war zu steif und daher name ich ein dünneres, eigenes USB Kabel... mit dem Erfolg, dass die Touch Eingabe nicht erkannt wurde O_o
    3. Screen settings... hier habe ich auch alles ausprobiert... streng nach Guide Github, alt Guide via Ifun und am Ende löste das Problem der Screenhersteller selber (hab den den 5 Zoll Screen aus dem GitHub Guide via Amazon bestellt). In der Anleitung des Screens gab es einen Link zum LCD Wiki Link und diese Settings habe ich final übernommen...
    4. Lesen hilft.. ich bin auch mehr so der Typ "Anleitung brauche ich nur in groben Zügen" und musste dann den Gibthub Guide 20x lesen und bin immer wieder auf Fragmente gestoßen, die ich übersehen habe... z.B. den pm2 consolen Befehl damit auch nach einem Reboot der Server funktioniert... da hilft es übrigens nach 3-4 erfolgreichen Schritten ein Backup der SD Karte zu machen... damit konnte ich nach diversen Fehlversuchen immer wieder zu einer "working version" des Rasp4 zurückspringen z.B. ein Backup nach allen Grundeinstellungen, dann nach lauffähiger Sonos API etc
    5. Bzgl SONOS API Installation kann ich diesen Guide als Stütze empfehlen Link


    Bzgl. Playlist No.Trace in der Tat wären Playlists interessant... ich wollte den Sonos Kids erstmal im "Eltern-Kind Mix Mode" nutzen. d.h. 3x musikalische Optionen 1. Apple Music Chillout Mix (eine von Apple regelmäßig aktualisierte Playlist) 2. WDR2 Radio via Apple Radio 3. Gruefello. Zu 1 und 2 sehen die Links wie folgt aus:


    https://music.apple.com/de/pla…3919da08002a94ca375b8a633

    https://music.apple.com/de/sta…2-rheinland/ra.1461552089


    Thyraz Danke für den tollen Guide! ich liebe solche Projekte!

  • Hui. 8|


    Ich hab gar nicht mitbekommen, dass das auf iFun gepostet wurde, überfliege meist nur die Schwesterseite iPhone-Ticker.

    Außerdem war mir nicht klar, dass wenn ich eine Emailbenachrichtigung vom Forum ignoriere, keine weiteren mehr kommen bis hier reingeschaut habe.


    Dachte hier ist es schön ruhig, dabei hat sich einiges getan.

    Schön zu sehen, dass es weitere User gibt. :)


    Ich werde nach den Feiertagen mal versuchen das durchzugehen was offen geblieben ist.


    Hier mal kurz zu ein paar Themen:


    - Ich glaube ich habe bei Spotify die AlbumID Funktion nie genutzt, sondern immer nur die Queries.

    Das ist also wahrscheinlich noch ungetesteter Code, blind nach dem URL Schema für node-sonos-http-api runterprogrammiert.

    Werde das mal bei mir testen.


    - Zum Thema mehrere Boxen und Spotify:

    node-sonos-http-api kann ja leider nicht mehrere Spotify Accounts ansprechen.

    Mich hat es aber schon immer genervt, dass da teils die Wiedergabe pausiert wird wenn jemand anderes was über die Sonos Suche über meinen Account startet.

    Was bei uns als Workaround gut klappt: Einen eigenen Spotify Account für Sonos im Family Account und nur diesen zu Sonos hinzufügen.

    Da wir keine 5 Personen im Haushalt sind, hatten wir noch einen Account übrig.

    Startet man Wiedergaben über Sonos, werden zwar andere Wiedergaben mit dem selben Account z.B. auf dem Handy oder auf dem PC pausiert. Man kann über Sonos mit einem Account aus dem Family Account aber mehrere verschiedene Wiedergaben in verschiedenen Räumen starten, ohne dass die bisherigen abgebrochen werden.

    Nutzt man hier also einen getrennten Account für Sonos, kann man verschiedene Wiedergaben starten und ist dabei nur durch die max. Anzahl gleichzeitiger Wiedergaben für Family Accounts beschränkt.


    Nachteil ist, dass man eben nicht seine eigenen Lieblingslieder und Playlisten hat.

    Kann man ggf. über Playlist Freigabe erreichen.

    Aber ich nutze für die Wiedergabe vom Handy aus eh nicht die Sonos App, sondern mache das direkt über die Spotify App.

    Daher stört mich das nicht.


    - Wer Fehler beim Kompilieren hat:

    Ihr müsst das an sich nicht auf dem Raspi kompilieren falls der zu schwach auf der Brust ist.

    Das "www" Verzeichnis, welches dabei erstellt wird ist auf allen Plattformen gleich.

    Ihr könnt das also auch am PC machen und dann das www Verzeichnis dann auf den Raspi ins Projektverzeichnis kopieren.

    Werde das wohl noch detailliert beschrieben mit in die Doku als Alternative aufnehmen...


    - Zu den Fragen ob man das auch ohne Sonos nutzen kann:

    An sich ist das ja nur ein grafisches Frontend für node-sonos-http-api.

    Der Code, der hier spezifische Kommandos absetzt ist diese Datei:

    https://github.com/Thyraz/Sono…src/app/player.service.ts

    Wenn man also einen Medienplayer hat, der über eine HTTP-API steuerbar ist, könnte man hier entsprechend umleiten.

    Am schönsten wäre natürlich das ganze dann so zu erweitern, dass man mehrere Ausgabedienste konfigurieren kann.

    Ich muss aber zugeben, dass mir hier im Moment die Zeit dafür fehlt.


    - Wegen Gehäuse für das eher ungewöhnliche 5" Display:

    Das offizielle 7" Raspberry Display hat die selbe Auflösung und sollte somit auch ohne UI-Anpassungen nutzen lassen.

    Hier finden sich sicher mehr Gehäuse-Lösungen im Netz.


    - Tidal scheint von node-sonos-http-api nicht unterstützt zu werden.

    Somit kann ich da wenig tun.

  • Quote

    - Ich glaube ich habe bei Spotify die AlbumID Funktion nie genutzt, sondern immer nur die Queries.

    Das ist also wahrscheinlich noch ungetesteter Code, blind nach dem URL Schema für node-sonos-http-api runterprogrammiert.

    Werde das mal bei mir testen.

    Super! Das freut mich sehr, bin bei dem Versuch hier (m)einen Fehler zu finden fast verrückt geworden ;) Einzelne Alben Abhand der ID auf dem Homebildschirm zu platzieren wäre für unsere Zwecke perfekt.

    Schön auch, dass der Zuspruch so groß ist. Das ist wirklich ein tolles Projekt und genau der richtige nächste Schritt nach dem TonUINO.


    Kleiner Tipp noch für die Readme: Mir ist beim überfliegen erst gar nicht aufgefallen, dass du einen Fork der node-sonos-http-api nutzt. Ist es wichtig diesen und nicht das offizielle Release in Kombination mit der Sonos Kids Controller zu nutzen? Falls ja, verdient das evtl. noch einen Satz in der Anleitung.

  • Hi, ich wollte den Controller auch mal ausprobieren. Das Sonos Modul bekomme ich auch installiert und ans laufen. Bei der Installation des Sonos Kids Moduls kommt jedoch folgende Fehlermeldung nach dem Befehl:


    Code
    ionic build --prod



    FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

    Ich erhalte nun auf meinem Raspi 3B+ auch diesen Fehler. Habe schon gegoogled und dieses Kommando gefunden: "NODE_OPTIONS="--max-old-space-size=4096" node index.js". Bringt aber leider auch nichts, den das wird auch nicht ausgeführt wegen dem Heap Fehler.


    Jemand eine Idee was ich da machen kann? Ich habe im Thread keine Lösung zum Problem von KingKahn mehr gefunden.


    Komischerweise habe ich einen zweiten Raspberry Pi 3B+ zuvor neu gemacht (für den kleinen Sohn) und da kam dieser Fehler nicht.


    Top zeigt das hier an:

    MiB Mem : 924.8 total, 782.4 free, 39.8 used, 102.6 buff/cache



  • Hatte mit dem Pi 3B+ auch das Problem "JavaScript heap out of memory".

    Mit diesem Befehl hat es dann funktioniert.


    export NODE_OPTIONS=--max-old-space-size=3072

    Edited once, last by milhouse ().

  • Hatte mit dem Pi 3B+ auch das Problem "JavaScript heap out of memory".

    Hatte mit dem Pi 3B+ auch das Problem "JavaScript heap out of memory".

    Mit diesem Befehl hat es dann funktioniert.


    export NODE_OPTIONS=--max-old-space-size=3072

    Perfekt, damit hat es dann geklappt.

  • Super, dass es doch eine Lösung gibt den Buildprozess auf dem 3B+ hinzubekommen. :)


    Nur zum Verständnis:

    Code
    export NODE_OPTIONS=--max-old-space-size=3072

    Das einfach in der Shell eingeben bevor man

    Code
    ionic build --prod

    eingibt?


    Dann würde ich das als Fehlerlösung in die Readme aufnehmen, falls man auf Systemen <= 1GB Ram Fehler beim Build erhält.

  • Ja, genauso ist es. Und dann funktioniert es einwandfrei.


    Was auch noch hilfreich wäre in der Readme wäre eine kurze Anleitung wie man Node.JS installiert.


    Also:


    Code
    curl -sL https://deb.nodesource.com/setup_15.x | sudo -E bash -
    sudo apt install -y nodejs
    
    Funktion und Version checken mit "node -v".

    Und damit eventuell alles an einem Ort zusammen ist noch die Anregung die node-sonos-http-api Installation kurz zu beschreiben, genauso wie die Installation des Sonos-Kids-Controllers:


    Code
    cd
    wget https://github.com/Thyraz/node-sonos-http-api/archive/master.zip
    unzip master.zip
    cd node-sonos-http-api-master
    npm install --production

    Denke dann ist alles zusammen.

    Edited 2 times, last by hotspot_2 ().

  • Kleiner Tipp noch für die Readme: Mir ist beim überfliegen erst gar nicht aufgefallen, dass du einen Fork der node-sonos-http-api nutzt. Ist es wichtig diesen und nicht das offizielle Release in Kombination mit der Sonos Kids Controller zu nutzen? Falls ja, verdient das evtl. noch einen Satz in der Anleitung.

    Für die Suche in der lokalen Sonos Library verwendet node-sonos-http-api eine Fuzzy-Search.

    Das Ganze ist durch Fuse.js implementiert.

    Dies soll ermöglichen, dass man mit Suchbegriffen aus Teilen des Artists und des Albumnamens einen Treffer finden kann.


    Allerdings wird eine uralte Version von Fuse.js verwendet die ziemliche Bugs zu haben scheint.

    Gibt man Teile des Albumnamens ein, scheint das soweit zu klappen.

    Wenn man aber den vollen Albumnamen eingibt, klappt es nicht.

    Bei einem "Perfect Match" findet er also keinen Treffer, oder den falschen.


    Daher habe ich das testweise mal in einem Fork auf eine aktuelle Fuse.js Version gebracht.

    Damit klappt das Ganze einwandfrei.


    Ist hoffentlich nur temporär, da ich hoffe dass die Änderung in die offizielle Version übernommen wird.

  • Ich bin gerade noch am überlegen ob es noch eine Möglichkeit gäbe das Editieren der JSON-Datei für die Alben usw. zu vereinfachen. Ich denke da z.B. an ein Tool das in einer Art Baukastensystem die JSON Datei zusammensetzt. Das Editieren über die Box ist speziell bei größeren und vielen Wünschen sehr mühsam.


    Ein Anfang wäre z.B. geprüfte JSON Schnippsel irgendwo online zu stellen für die gängigsten Hröspiele Serien.


    Was mich noch interessieren würde ob ich irgendwie in der JSON Datei direkt den Anbieter (z.B. Spotify, Amazon oder so vorgeben kann). Den im Moment gebe ich Interpret und Albumname an und wenn es dann mit Bild angezeigt wird auf der Box gehe ich davon aus das es passt. Woher es aber kommt, oder das ich es vielleicht steuern kann hab ich bisher nicht rausgefunden.

  • Das kannst du über den Type auch beim direkten editieren der data.json steuern:


  • Das kannst du über den Type auch beim direkten editieren der data.json steuern:


    Code
        {
            "query": "artist:Was Ist Was Junior",
            "type": "spotify"
        }

    Hallo,


    die query für spotify hätte zur Folge das mir alle Alben (einzeln selektierbar am Touch) der Was ist Was Junior Reihe angezeigt werden?

  • Genau.

    Dieses „Komfortfeature“ gibt es aber nur bei Spotify, da die eine offizielle API anbieten mit der solche Suchabfragen möglich sind.

    Das funktioniert schon mal echt gut. Große Erleichterung. Gibt es da eine Anleitung zur der API?


    Kann man z.B. so suchen über die query das man "Was ist Was Junior" und "Was ist was" getrennt angezeigt bekommt?

    Kann man z.B. nach der Artist ID suchen? Conni hat z.B. "0jRC2uXx4hEpqNrBDJdY7l"?

  • Das funktioniert schon mal echt gut. Große Erleichterung. Gibt es da eine Anleitung zur der API?


    Kann man z.B. so suchen über die query das man "Was ist Was Junior" und "Was ist was" getrennt angezeigt bekommt?

    Kann man z.B. nach der Artist ID suchen? Conni hat z.B. "0jRC2uXx4hEpqNrBDJdY7l"?

    Probier mal folgende query Abfragen:

    • artist:"Was ist Was Junior"
    • artist:"Was ist Was" NOT Junior
  • Hier sind ein paar Beispiele:

    https://github.com/Thyraz/Sono…ontroller#spotify-premium


    Wenn man den Artist in Anführungszeichen setzt, muss die Zeichenfolge direkt so gefunden werden.

    Ansonsten können die Wörter auch in anderer Reihenfolge matchen.


    Falls man nicht über die UI hinzufügt, sondern direkt die data.json editiert,

    muss man die Anführungzeichen dann escapen (mit Backslash).


    Im obigen Link findet sich dann auch noch der Link zur Spotify API, mit der genaueren Beschreibung der Möglichkeiten innerhalb eines Such-Strings.


    Noch ein paar Beispiele aus meiner Config:

    • artist:Pumuckl album:Fernsehen NOT Weihnachten
    • artist:Bibi Blocksberg album:Folge NOT Englisch
    • artist:Benjamin Blümchen album:folge NOT gute-nacht
    • artist: PJ Masks album:* NOT here NOT heroes NOT christmas NOT halloween
    • artist:\"ice age\" album:kinofilm
    • artist:\"könig der löwen\"
    • artist:\"in einem land vor unserer zeit\"
  • Hi zusammen,


    ich möchte mich noch einmal mit ein bisschen zeitlichem Abstand zu meinem ersten Post zurückmelden und bedanken! Hat leider etwas gedauert, da wir in der Familie vor Weihnachten auch noch zwei Geburtstage habe und wegen Kita-Schliessung und dem allseits bekannten Drumherum einfach null Zeit war ;)

    Ich habe nun auch die Suche über die Queries bei Spotify verwendet und es funktioniert! :D Vielen Dank, werde mich in den nächsten Tagen an das "Verpacken" des Players machen.


    Viele Grüße

    dnsdlx

  • Guten Abend zusammen,


    eine Frage in die Runde habe ich da mal:

    Wie fahrt ihr den Sonos Controller herunter? Extern über SSH oder einfach Strom aus?


    @Thyraz: Wäre es zusätzlich noch möglich, den Titel, der gerade läuft, auf der entsprechenden Seite darzustellen?


    Viele Grüße

    Edited once, last by milhouse ().