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

  • edit: Die Software kann dank andi82 nun auch mit anderen Spotify Connect Playern (Squeezeplayer auf Pi?) verwendet werden, nicht nur mit Sonos:

    RE: Sonos Kids Controller (Touchscreen Jukebox für nicht mehr ganz so kleine Kinder)


    Hallo zusammen,


    nachdem ich hier vor etwa 2 Jahren von der RFID Jukebox (Toniebox Nachbau) im Forum profitiert habe,

    möchte ich mit euch meinen "Nachfolger" (nicht im Sinne von verbesserter Version, sondern weil die Kids älter geworden sind) teilen.


    Die Idee wurde geboren, da der Sohnemann (4 Jahre) mittlerweile sehr viele Hörspiele konsumiert und wir mit RFID Karten bespielen/bedrucken nicht mehr nachgekommen sind.

    Im Ende wurde dann einfach nur noch Musik von unseren Handys in sein Zimmer gestreamt, was aber eben nicht mehr selbstbestimmt funktioniert.


    Ich habe dann lange nach Touchscreen Lösungen gesucht, welche Alben sowohl lokal als auch über unseren Spotify Family Account abspielen können, aber eben nur von den Eltern ausgewählte Inhalte.

    Gefunden hab ich genau 0 Lösungen und die totale Ernüchterung war dann neulich die Spotify Kids App, die Spotify veröffentlicht hat.


    Also hab ich mich hingesetzt, Hardware zusammengesucht und mit der Programmierung einer Softwarelösung angefangen.


    Das Ganze ist nun eine kleine Jukebox geworden, welche einen 5" kapazitiven Touchscreen hat und eine Ionic/Angular Web App im Chromium Kiosk Mode anzeigt.

    Ausgegeben wird der Ton über Sonos, da wir dies hier in der ganzen Wohnung zur Beschallung nutzen.

    (Das ganze ist also mehr oder weniger eine grafische Sonos Fernbedienung.)

    Als Quelle können Medien in der lokalen Sonos Library oder bei Spotify dienen.


    Die Node.js Serverkomponente kann sowohl auf dem Pi selbst, als auch auf einem anderen, im Heimnetz vorhandenen Server, laufen.









    Als kleines "Highlight" ist noch Text-2-Speech integriert.

    Wenn die Kids Album- oder Artist-Namen in der UI anklicken, wird dieser Text vorgelesen.

    Dadurch müssen sie nicht dauernd die Eltern fragen wie der Titel eines zu einem Cover zugehörigen Album lautet.


    Außerdem habe ich die Spotify Web API angezapft, so dass man bequem ganze Hörspielserien über einfache Queries eintragen kann.

    (Z.B. alle Alben von Benjamin Blümchen auf einmal.)

    Album Cover Artwork wird bei Spotify Alben ebenfalls automatisch abgerufen.


    Installation, Konfiguration, Liste der von mir eingesetzten Hardware, ... das alles findet ihr in der Readme auf Github:

    https://github.com/Thyraz/Sonos-Kids-Controller


    Die Github Doku ist eher thematisch gegliedert, eine detaillierte Schritt-für-Schritt Anleitung gibt es aber hier im Forum dank iee168:

    RE: Sonos Kids Controller (Touchscreen Jukebox für nicht mehr ganz so kleine Kinder)

    Achtung: Es wird ein anderes Display verwendet.



    Hoffe ich kann damit dem einen oder anderen (bzw. den Kindern) ebenso einen Gefallen tun, wie mir damals mit der RFID Jukebox aus dem Forum.


    P.S. das ist meine allererste Begegnung mit Ionic / Angular.

    Der Code mag daher nicht perfekt sein.

    Wer Bugs findet oder weitere Features einbringen will ist dazu herzlich eingeladen.

    Auch von meiner Seite ist eine rege Weiterentwicklung geplant.

  • Ja, die Jukebox ist in regem Betrieb. :)


    Durch den (versteckten) Editiermodus für die Library kann man auch schnell neue Hörspielwünsche der Kinder direkt per On-Screen-Keyboard am Gerät eintragen, was sehr gut ankommt. Das Warten, bis Papa endlich Zeit hatte eine neue RFID Karte für den alten Player zu machen war am Ende nicht mehr so beliebt. ;)


    Dafür kommt Sohnemann 2 so langsam in das Alter die RFID Jukebox für erste Lieder zu übernehmen.


    Zum Holzrahmen:

    Hardware ist in der oben verlinkten Github Readme erklärt:

    https://github.com/Thyraz/Sono…roller#front-cover-cutout


    Das ganze Gehäuse ist eine kleine Küchen-Aufbewahrungsbox aus Bambus/Melanin.

    https://www.amazon.de/gp/product/B0841PZZ2C/ (Affiliate-Link)


    Die schwerste Arbeit (für einen mechanischen DAU ohne anständiges Werkzeug) war tatsächlich die Aussparung für den Touchscreen in den Deckel zu bekommen. Hat mich einige Stunden und Nerven gekostet.
    Mangels besserer Werkzeuge habe ich zuerst grob das Rechtecke mit der guten (ur)alten Laubsäge aus dem Bambusdeckel herausgetrennt.
    Dann mit Feilen und immer wieder Display einpassen langsam die endgültige Form erarbeitet (und die Unebenheiten vom Sägen entfernt).
    Zum Schluss dann mit Schleifpapier von sehr grob bis letztendlich Körnung 300 das Finish gemacht.
    Den Lack an der Oberfläche des Deckels dann auch etwas angeschliffen und danach das Holz für einen einheitlichen Look mit Holzöl von unserem Esstisch geölt.
    Das Resultat sieht wider erwarten nicht wirklich selbstgebastelt aus. Das sehr feine Schleifen und das Ölen haben hier am Ende wirklich Wunder bewirkt.


    Wer besser ausgestattet ist mit einer Oberfräse oder zumindest einer Stichsäge kann das Heraustrennen sicher weniger stümperhaft hinbekommen, womit die Nacharbeit beim Feilen/Schleifen schneller von der Hand gehen sollte.

    Edited once, last by Thyraz ().

  • Zunächst einmal Danke für das tolle Projet und die detailierte Beschreibung.

    Die Softwareinstallation hat bis auf ein paar Hürden ganz gut geklappt.

    Was ich allerdings nicht hinbekomme ist das hinzufügen der Musik, die bei mir auf einem NAS hinterlegt ist.

    Im Browserfenster Deiner APP kann ich Interpret und Titel + Cover hinterlegen.

    Wenn ich den entsprechenden Interpreten auswhähle erscheinen im nächsten Fenster auch die Steuerungselemente + Cover.

    Leider passiert dann aber nichts mehr. Es ertönte kein Ton aus dem Sonos Lautsprecher.

    Füge ich aber den Interpreten in der Sonos APP in den Wiedergabemodus kann ich über Deine APP diese Musik steuern.

    Mir fehlt da der Zusammenhang wo genau die Musik hinterlegt sein muß um Sie abspielen zu können.


    Vielleicht kannst Du mir etwas dazu sagen.

    Vielen Dank

    MfG

  • Hallo Antheus,


    da du der erste Tester außer mir selbst bist, freut es mich schon, dass die Installation soweit funktioniert hat und das Webinterface allgemein zu funktionieren scheint. :)


    Ich habe beim Hinzufügen von lokalen Alben tatsächlich einen Bug eingebaut, der mir noch nicht aufgefallen ist, da ich hauptsächlich Spotify nutze.

    Hab aber gerade schon gesehen woran es liegt. Ich fixe das heute Abend und gebe hier Bescheid.

  • Ok, Bugfix ist da, Update an sich mit den selben Befehlen wie bei der Installation:


    Aus dem übergeordneten Verzeichnis, in dem der "sonos-kids-controller" Ordner liegt ausführen, damit die Dateien auch am richtigen Ort ersetzt werden:



    Bin da aber wieder über etwas gestolpert, dass mir damals schon bei der von mit für die Sonos-Ansteuerung verwendeten API aufgefallen ist:


    Die Suche in der lokalen Sonos Library verläuft (anders als bei Spotify) über eine Fuzzy Search vom Albumnamen.
    Der Artist wird für das Auffinden des abzuspielenden Albums also nicht verwendet.

    Das kann zu falschen Treffern führen wenn man gleichnamige Alben von verschiedenen Artists hat.


    Auch wenn man nur einen Teil des Albumnamens eingibt istdie Fuzzy Search teilweise etwas komisch bei der Wahl des Albums.


    Hab mal auf meine Todo-Liste genommen zumindest diesen Teil durch eine eigene Implementierung zu ersetzen wenn mit demnächst mal wieder langweilig werden sollte. ;)

  • Tolles Projekt. Könnte man echt überlegen auch anderweitig einzusetzen als Bad-Steuerung oder einfach als Simplen Controller, gingen denn auch Quellen wie Tuneln?

    Wenn's brennt 112 hilft weiter!

  • TuneIn Sender starten kann die verwendete Sonos Library sogar schon von Haus aus.

    Muss da an sich nur einen weiteren Tab "TuneIn" in der UI zum verwalten der Medien hinzufügen.


    Wird zeitnah eingebaut. ;)

  • Die Software greift über https://github.com/jishi/node-sonos-http-api auf deine Sonos "Landschaft" zu.

    Diese kann eben die lokale Musikbibliothek anzapfen, sowie die Wiedergabe steuern.

    Letzteres tut bei dir ja, weswegen das soweit richtig eingerichtet zu sein scheint und auch der betreffende Sonos Player aus der Config gefunden wird.


    In der Sonos App kann man ja verschiedene Musikdienste einrichten.

    Unter anderem eben auch die lokale Musikbibliothek.


    Hier habe ich meine Nas-Freigaben in der iOS App unter Einstellungen -> System -> Musikbibliothek -> Musikbibliothek einrichten -> Freigegebene Musik hinzufügen eingetragen nach dem Schema:

    \\NAS\path\to\my\albums


    Schätze mal so wirst du das auch gemacht haben und die Alben sind bei einer Suche in der Sonos App als Treffer in der Musikbibliothek zu finden.

    Richtig soweit?


    Die Webapp ruft dann die Albeninformationen der lokalen Sonos Bibliothek ab und sucht dort nach einem Treffer.

    Über die Sonos Library wird dann der entsprechende Treffer abgespielt, und Sonos selbst weiß ja wo die Dateien liegen.


    Als ersten Schritt zur Fehlersuche wäre es wahrscheinlich am Besten, die Wiedergabe direkt über die node-sonos-http-api anstatt die Webapp zu versuchen.

    Dazu im Browser in der Adresszeile die URL so zusammenbauen:


    http://ip.of.node-sonos-http-api:5005/roomname/musicsearch/album/name des albums

    Ggf. die Leerzeichen im Albumnamen mit %20 ersetzen, falls der Browser das nicht autmatisch macht wenn man mit Enter bestätigt.


    Im Browserfenster sollte man da eine Success oder Error Meldung im JSON Format sehen.

    Bei Success sollte der Sonos Player dann was abspielen.


    Falls ein Error kommt, ggf. mal noch andere Alben versuchen.

    Ich traue der Fuzzy Search von node-sonos-http-api noch nicht so ganz und betreibe die Software bei mir eben fast ausschließlich mit Spotify,

    weswegen ich noch nicht so viel zur Zuverlässigkeit mit der lokalen Library kann.


    Aber wie gesagt, wenn sich das mit der Sonos Library nicht lösen lässt, werde ich schauen ob man das anders gelöst bekommt.

  • Vielen Dank für die ausführliche Erläuterung.

    Die von Dir genannten NAS Punkte sind bei mir genauso eingerichtet.

    Ich werde das heute Abend noch einmal Punkt für Punkt durchgehen.


    MfG

    Edited 3 times, last by Antheus ().

  • 1) Ich habe mich mittlerweile etwas tiefer mit der Wiedergabeproblematik bei Alben aus der lokalen Sonos Library beschäftigt.

    Herausgekommen ist ein Fork des node-sonos-http-api Moduls (https://github.com/Thyraz/node-sonos-http-api).


    Wenn sich das als wirksam erweist (erste Tests sehen vielversprechend aus), werde ich an den Originalauthor einen Pull-Request stellen, in der Hoffnung, dass er die Änderungen in sein Originalpaket übernimmt.


    Bis dahin müsst ihr meinen Fork betreiben anstatt des Originalpakets.

    Das entsprechende Kapitel in der Readme verweist auf die neuen Links zur Installation:

    https://github.com/Thyraz/Sonos-Kids-Controller#dependencies


    2) Bugfix für Text to Speech bei Albennamen mit Sonderzeichen

    Hierfür die Sonos-Kids-Controller auf die aktuelle Version updaten.

    Wie das geht steht hier:

    https://github.com/Thyraz/Sonos-Kids-Controller#update

  • Ein tolles Projekt. Eigentlich genau das was wir suchen. Jetzt müssen wir uns überlegen, ob wir die Phoniebox oder den Sonos-Kids-Controller für unsere fast 4 jährige basteln.

    Ich kann mich noch nicht ganz von der RFID-Lösung trennen. Wäre es auch möglich dies zusätzlich einzubinden? Leider bin ich totaler Anfänger auf diesem Gebiet und versuche mich gerade einzulesen.

  • Hallo Thyraz.


    Ich bin durch Zufall auf Dein Projekt gestoßen, da ich nach einer ähnlichen kinderfreundlichen Bedienung für Sonos gesucht habe. Das hat mir so gut gefallen, dass ich jetzt hier mit dem Raspberry neben mir sitze und das Ganze zum Laufen bringen möchte. :)


    Wie Antheus nutze ich statt Spotify lediglich eine lokale Musikbibliothek und versuche gerade Links pro Interpret zu erstellen. Leider fügen sowohl Dein Fork als auch der Branch von Jishi immer nur ein Album in die Playliste. Wenn ich die Suche über "song" statt "album" starte werden entsprechend dem queue limit in der settings.json hinzugefügt (Standard 50). Beziehungsweise man muss den genauen Albumnamen angeben, dass es nur dieses eine Album spielt.

    Es wäre echt super, wenn man auch nach Song oder Playliste suchen könnte und diese dann starten würde.


    Wenn Du per Spotify nach einem Interpreten suchst, kann man sich da die Alben selbst aussuchen, die man hören will? Wäre so etwas auch für die lokale Bibliothek möglich?

  • So, ich bin jetzt doch etwas weitergekommen und es klappt jetzt auch soweit auch mit der Musikbibliothek von Sonos. Es war wohl doch schon etwas spät gestern…


    Für alle, die komplett neu anfangen, vielleicht noch einige Hinweise:

    - Der Eintrag für das Display (sofern nach Vorschlag gekauft) in der config.txt muss nicht zwangsläufig ganz am Ende sein, da bei mir waren noch weitere Einträge ([pi4] und [all]) an Ende der Datei waren. Am besten dort einfügen, wo bereits auskommentierte HDMI-Optionen sind. Dann klappt es auch mit der Auflösung.

    - Die beiden Module node-sonos-http-api und Sonos-Kids-Controller müssen beide installiert und per pm2 im Hintergrund laufen, damit die Ansteuerung funktioniert.

    - Ich habe alle Services auf dem Raspberry Pi laufen, trotzdem hat der URL-Eintrag mit 127.0.0.1 als localhost komischerweise nicht funktioniert. Mit der Netzwerk-IP des Raspberry (192.168...) ging es dann problemlos.

    - Die Einträge zum Abspielen werden nach Artist gruppiert. Entscheidend für die Auswahl der Alben ist eigentlich nur der Eintrag bei Album.

    - Wird keine Bild-URL eingetragen kann der Eintrag in der GUI nicht ausgewählt werden.

    - Anstatt über die GUI Einträge zu erstellen, ist eventuell das Editieren der data.json im Sonsos-Kids-Controller schneller.

    - Mit der Version 12 von nodejs hatte ich im Browser keine kurzzeitige Anzeige eines "url not found"-Fehlers.


    Und noch ein paar Fragen/Anregungen an Thyraz:

    - Mein obiger Eintrag, dass man Playlisten oder Songs auswählen könnte wäre als Feature super. Jetzt müsste ich ziemlich viele Einträge für jedes einzelne Album machen (Bibi Blocksberg und Benjamin Blümchen lassen grüßen…)

    - Kann man auch lokale Bilder/Albencover auf dem PI hinterlegen und eine URL dafür angeben?

    - Wird ein Raumwechsel in Zukunft möglich sein?

    Edited 2 times, last by kuba4you ().

  • Ein tolles Projekt. Eigentlich genau das was wir suchen. Jetzt müssen wir uns überlegen, ob wir die Phoniebox oder den Sonos-Kids-Controller für unsere fast 4 jährige basteln.

    Ich kann mich noch nicht ganz von der RFID-Lösung trennen. Wäre es auch möglich dies zusätzlich einzubinden? Leider bin ich totaler Anfänger auf diesem Gebiet und versuche mich gerade einzulesen.

    Hallo Ivonne, von RFID komme ich ja gerade und unser Nachwuch ist eben mittlerweile zu alt (oder hört zu viel) um da noch nachzukommen.


    Das reinzubasteln halte ich für nicht so sinnvoll, da dann das Display ja mehr oder weniger überflüssig wird,

    und die Touchbedienung das "Herzstück" des Players wofür ich die Software geschrieben habe.


    Phoniebox funktioniert ja einwandfrei mit RFID und wir haben die Lösung 2 Jahre lang sehr glücklich genutzt.

  • Hi kuba4you freut mich, dass du das Ganze zum, Laufen bekommen hast. :)


    Ich schaue die Tage mal nochmal über meine Installationsanleitung drüber und schaue wo ich bei den von dir aufgeführten Hinweisen nochmal nachbessern muss weil etwas nicht verständlich ist.

    Man selbst versteht seine eigenen Anleitungen eben doch ein wenig leichter als jemand der das Projekt noch nicht kennt. ;)


    - Ja, Bild-URL ist zwingend nötig wenn man nicht Spotify nutzt. Ich hatte für lokale Medien versucht die iTunes API anzuzapfen, aber die blockt einen recht schnell wenn man zu viele Anfragen bringt. Ist also produktiv nicht wirklich nutzbar.

    Bei Spotify kommen die Cover direkt von Spotify, für die API braucht man aber einen bezahlten Spotify Account.


    - Ja, mit vielen lokalen Medien ist das manuelle editieren der data.json sicher schneller.

    Ich hatte am Anfang auch keine GUI drin, aber da man bei Spotify eben auch ganze Hörbuchserien auf einmal hinzufügen kann, ist das mit der GUI dort was feines (da Copy & Paste an sich nie nötig ist).

    Werde die Möglichkeit des manuellen Editierens auch mal noch in der Doku aufnehmen.


    Zu den Fragen:

    - Über die genutzte API ist so eine Massensuche nicht machbar.

    Es gibt aber intern in node-sonos-http-api durchaus Funktionen die den Sonos Katalog durchsuchen.

    Die Sachen sind nur nicht als extern aufrufbare Funktionen verfügbar.

    Man könnte (wenn man viel Zeit und Muse hat) nun natürlich den node-sonos-http-api Fork erweitern um solche Funktionalitäten.

    Allerdings hatte ich eher gehofft den Fork wieder loszuwerden wenn der eigentliche Entwickler meine Änderungen übernimmt (und ich mich nicht selbst mit zukünftigen Änderungen seitens Sonos herumschlagen muss).


    - Die URL für die Bilder müssen eben vom Client (Also dem Webbrowser) auffindbar sein.

    Ein Versuche wäre im www Verzeichnis einen Unterordner mit Bildern anzulegen.

    Alles was dort liegt, liefert der Server (NodeJS) wie ein normaler Webserver aus.

    Du müsstest also auch wieder über localhost oder IP und dann dem entsprechenden Pfad zu den Bildern kommen.

    Wenn du da allein nicht weiter kommst sag nochmal Bescheid.

    Hab die Tage viel um die Ohren, aber Ende der Woche kann ich mir das sonst mal anschauen.


    - Raumwechsel hab ich auf der Todo Liste, mein Kleiner hört auch gern im Wohnzimmer statt seinem Zimmer.

    Erlaubte Räume sollen dann konfigurierbar sein.

    So könnte er, wenn er von seinem Zimmer ins Wohnzimmer geht um was zu spielen die Musik oder Geschichte "mitnehmen".

  • Hi Thyraz.


    Ich habe die letzten Tage auch keine Zeit gehabt, mich weiter um das Projekt weiter zu kümmern...

    - Für die lokalen URLs habe ich für den Moment das Apache-Modul installiert, aber wenn es mit dem Nodejs direkt so geht, ist mir das lieber als noch einen Service zu starten. Für den Moment ist das aber i.O.

    - Ich habe aber schon ein paar Ansätze, um die lokalen Daten auf "schnellem" Wege in die data.json zu bekommen. Für die Cover aus den MP3-Dateien eignet sich übrigens der Export von MP3TAG ausgezeichnet, da dieser alle Audio-Dateien (auch in Unterverzeichnissen) durchgeht und die Cover als Datei mit frei definierbarem Namen speichert. Dann sieht das Ganze auch noch ansehnlich auf dem Controller aus.

    - Mit dem Raumwechsel hätten meine Mädels genau diese Anforderung. :)


    Vielleicht noch eine abschließende Frage: Bootzeit. Ich komme auf ca. 40s ab Einschalten. Hast Du Dir mal Gedanken gemacht, wie man das reduzieren könnte? Einige Einstellungen habe ich schon vorgenommen, um schneller zur Anzeige zu kommen, aber das waren eher kleine Stellschrauben...

  • Hallo,


    ich bin neu hier im Forum. Ich habe mich aufgrund dieses Projektes hier zur Registrierung entschieden.


    Eine für mich grundlegende Frage konnte ich trotz Recherche nicht beantworten. Im Internet finde man eine Vielzahl von Display in einem fertigen Gehäuse, welche dann auch z. B. einen Pi 4 aufnehmen kann. Diese Lösung finde ich am angenehmsten, was den Aufwand für das Gehäuse angeht.


    Meine Frage ist nun, ob das Projekt auch mit einem Display zurecht kommt, welches per LC-Display Anschluss an die Platine angeschlossen wird!?