Beiträge von iee168

    Das ist der Rest von alten (unbeendeten) Wiedergaben. Das Löschen der Wiedergabeliste scheint nicht so zu funktionieren wie ich das aus der node-sonos-http-api Doku rausgelesen habe.

    iee168 danke für die Anleitung. :)

    Meine letzte komplette Installation ist schon etwas her, sieht aber auf den ersten Blick soweit komplett aus.

    Ansonsten wird hier schon jemand meckern und man kann es nachziehen. ;)

    Ich hab es im Startpost verlinkt.

    Toll, das ehrt mich :)

    Alright, here we go!

    Disclaimer: Das ist eine, von mir erweiterte, Step-by-Step Anleitung wie ich den Sonos-Kids-Controller mit Spotify auf meinem System zum laufen gebracht habe, ohne Ansprüche auf eine Allgemeingültigkeit. Bitte Info an mich, falls du hier einen Fehler entdeckst.

    NICHTS hiervon ist von mir, ich habe es nur aus den verschiedenen Quellen zusammengetragen. Diese Quellen waren vor allem:

    Ausführlichere Infos, und nach einer gewissen Zeit sicher auch die aktuelleren, findest du natürlich dort.

    Mein System:

    Bevor wir also loslegen, die Grundlagen:

    Ich habe die SD-Karte über den Pi Imager auf meinem Mac bespielt. Den Pi Imager gibt es aber auch für Windows und Ubuntu.

    Im Anschluss zeigt der Finder die Karte nicht an, man muss sie einmal aus- und wieder einstecken. Am besten ist es, dann gleich das eigene WLAN zu konfigurieren. Das machst du, indem du eine Textdatei (ich empfehle Textastic für OSX oder Notepad++ für Windows) mit dem folgenden Inhalt erstellst (vergiss nicht deine WLAN-Daten einzufügen) und unter dem Namen wpa_supplicant.conf direkt im Hauptverzeichnis der SD-Karte abspeicherst. Beim nächsten Boot wird sie erkannt, eingepflegt und aus dem Boot-Folder gelöscht.

    Code
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    country=DE
    
    network={
           ssid="wlan-bezeichnung"
           psk="passwort"
           key_mgmt=WPA-PSK
    }

    Anmerkung von kle: Du kannst auch noch eine leere Textdatei mit dem Namen ssh.txt in den Boot-Folder ablegen, um SSH gleich zu aktivieren. Dann brauchst du es später nicht mehr in der Raspi-config aktivieren und kannst dich gleich nach dem Boot draufschalten.

    Jetzt bootest du dein System mit einem Bildschirm/Fernseher am HDMI-Port und einer USB-Tastatur.

    Nachdem du dich mit den Standard-Zugangsdaten angemeldet hast (User: pi Passwort: raspberry), rufst du erst einmal die folgenden Befehle auf, um dein System auf den neuesten Stand zu bringen:

    Code
    apt-get update
    apt-get upgrade

    Und bitte gleich noch das Standardpasswort ändern, mit dem eingeloggten User pi und:

    Code
    passwd

    Jetzt gehts in die Raspi-config um SSH und den Autologin zu konfigurieren:

    Code
    sudo raspi-config

    1. System Options --> S4 Hostname (muss nicht, aber falls du deinem Raspi einen anderen Namen geben möchtest.

    2. System Options --> S5 Boot / Auto Login --> B2 Console Autologin (brauchen wir später für den Kiosk-Mode).

    3. Interface Options --> P2 SSH enable Wenn du nicht weisst, was du damit anstellst, solltest du es vielleicht erst einmal nachlesen ;)

    5. Localisation Options --> L1 Locale --> bis de_DE.UTF-8 scrollen und aktivieren.

    5. Localisation Options -->L2 Timezone --> Europe --> Berlin

    <Finish>

    Reboot tut nicht nur Windows gut, also bitte einmal neu starten mit

    Code
    sudo reboot

    Wer ebenfalls ein Pimorony Hyperpixel sein Eigen nennt, installiert es über den nächsten Schritt. Ansonsten bitte überspringen und bei Upgrade Node weiterlesen:

    Installation Hyperpixel Display:

    Code
    curl -sSL https://get.pimoroni.com/hyperpixel4 | bash

    //0 auswählen: Rectangular Pi 3B+ or older

    Wer es gerne so gedreht haben möchte, dass die Ports oben liegen:

    Code
    hyperpixel4-rotate right

    Und jetzt einmal neustarten, schon sollte das Display mit Touch funktionieren:

    Code
    sudo shutdown -r now

    Upgrade Node

    Diese Schritte habe ich mir von hier kopiert.

    Code
    curl -sL https://deb.nodesource.com/setup_15.x | sudo -E bash -
    sudo apt-get install -y nodejs

    Einmal verifizieren, ob es funktioniert hat:

    Code
    nodejs -v

    Bei mir ist die aktuelle Version 15.5.0.

    Jetzt müssen wir uns darum kümmern, dass die Node-sonos-http-api installiert wird. Dazu gehen wir ins Hauptverzeichnis des Users pi (in welchem wir uns eigentlich schon die ganze Zeit befinden müssten ;) )

    Code
    git clone https://github.com/Thyraz/node-sonos-http-api

    In das Verzeichnis wechseln:

    Code
    cd node-sonos-http-api

    ...und installieren dort npm:

    Code
    npm install --production

    Bei mir tauchten nach der Installation ein paar rot markierte Fehler auf, weshalb ich diese noch mit

    Code
    npm audit fix --force

    (Größtenteils) behoben habe. Die noch übrigen Fehler waren aber anscheinend nicht so tragisch, als dass ich nicht hätte weitermachen können.

    Jetzt sollte es mit

    Code
    npm start

    Funktionieren, ohne dass eine Fehlermeldung erscheint.

    Wir wechseln das Verzeichnis in /presets/ und erstellen die preset.json mit dem Editor nano erstellen.

    Code
    sudo nano preset.json

    In diese Datei muss nun der Raumnamen der Sonos Box eingepflegt werden. In meinem Beispiel ist es die Box mit dem Namen "Büro".

    mit strg+x und zweimaligen Bestätigen speichern wir die Datei.

    Jetzt müssen wir uns erst einmal bei Spotify mit unserem Account hier anmelden und eine Spotify App erstellen. Dadurch erhalten wir die client keys (ClientID und das ClientSecret).

    Bei dem folgenden Schritt bin ich mir nicht sicher, ob er wirklich notwendig ist. Aber er schadet jedenfalls auch nicht. Die Spotify-Keys brauchen wir so oder so...

    Im Stammverzeichnis der node-sonos-http-api eine neue Datei namens "settings.json" anlegen,

    Code
    sudo nano settings.json

    Und mit dem folgenden Inhalt bestücken:

    Code
    {
    "spotify": {
    "clientId": "XXXX",
    "clientSecret": "XXXXX"
    },
    "library": {
    "randomQueueLimit": 50
    }
    }

    Wieder speichern und nano beenden.

    Installation des Sonos-Kids-Controllers:

    Zurück im Home-Verzeichnis des pi-Users diese Befehle, einen nach dem anderen, ausführen:

    Code
    sudo npm install -g @ionic/cli
    wget https://github.com/Thyraz/Sonos-Kids-Controller/archive/master.zip
    unzip master.zip
    rm master.zip
    cd Sonos-Kids-Controller-master
    npm install
    npm audit fix
    ionic build --prod

    Falls der build mit "Unbekannte Argumente_ use-program-dependencies..." fehlschlägt, wird folgender fix von timo.beil empfohlen:

    Code
    ls -lisa //findet die Datei "tsconfig-json"
    nano tsconfig.json

    In dem Inhalt der Datei hinter anhängen:

    Code
    "strictInjectionParameters":true",
    "enableIvy":false

    Nicht das Komma hinter dem vorherigen Parameter "true," vergessen! und speichern.

    Falls die Kompilierung mit der folgenden Fehlermeldung abbricht, was bei mir der Fall war:

    FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory

    Das hier ausführen:

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

    Anschließend noch einmal

    Code
    ionic build --prod

    Ausführen und die Daumen drücken. Das dauert ein wenig.

    Kompilierung erfolgreich? SUPER! Dann:

    Code
    cd server/config
    cp config-example.json config.json

    Jetzt die /server/config/config.json mit nano editieren und darin die Sonos-Box, spotify ClientID und clientSecret eintragen. Wie im obigen Beispiel, lautet der Name der Box bei mir "Büro". Da wir vorhin die node-sonos-htttp-api auf dem selben Raspi installiert haben, lautet die IP-Adresse des Servers 127.0.0.1 (eigenes Gerät). Wer es auf einem anderen Raspi installiert hat, muss hier die IP des anderen Geräts angeben.

    Fast fertig!

    Mal schauen, ob es läuft:

    Code
    npm start

    Sollte der Server starten, kannst du von deinem PC aus den Raspi ansurfen und solltest ein schwarzes User Interface sehen. Die Adresse lautet:

    http://ip-adresse-des-raspis:8200

    Jetzt kannst du deine Alben einpflegen. Wie das geht, steht im GitHub-Manual.

    Jetzt muss noch der Autostart konfiguriert werden:

    Code
    sudo npm install pm2 -g 

    Hier erhielt ich Warnmeldungen, auf eine neuere Version von npm zu updaten.

    Jetzt bauen wir uns ein kleines Startup Script was ja funktionieren sollte, da der pi-user sich automatisch beim booten einloggt. Wichtig ist, diesen ersten Befehl NICHT mit sudo zu starten:

    Code
    pm2 startup

    Die jetzt folgende Ausgabe zeigt einen Befehl, welchen es zu kopieren und auszuführen gibt. Diesmal mit "sudo". Bei mir sieht er so aus:

    Code
    sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi

    Jetzt in das Verzeichnis vom node-sonos-http-api wechseln und folgendes ausführen:

    Code
    pm2 start server.js
    pm2 save

    Anschließend wieder in das Verzeichnis vom Sonos-Kids Controller wechseln:

    Code
    pm2 start server.js
    pm2 save

    Openbox als window Manager installieren

    Code
    sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox


    Chromium installieren

    Code
    sudo apt-get install --no-install-recommends chromium-browser

    Wenn node-sonos-http-api auf demselben pi installiert ist, was in dieser Anleitung der Fall ist, den automatischen start von Openbox und Chromium editieren:

    Code
    sudo nano /etc/xdg/openbox/autostart

    folgenden Inhalt hinein schreiben:

    Code
    # Disable screen saver / power management
    xset s off
    xset s noblank
    xset -dpms
    
    
    # Start Chromium
    sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State'
    sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chromium/Default/Preferences
    chromium-browser --disable-infobars --kiosk 'http://IP-Adresse-Des-Raspi:8200'

    Jetzt muss noch im home-verzeichnis des users pi die Datei .bash_profile erstellt , und mit dem automatischen startbefehl ausgestattet werden:

    Code
    cd /home/pi
    sudo nano .bash_profile

    Den folgenden Inhalt in die leere Datei kopieren:

    Code
    [[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx -- -nocursor

    Jetzt neustarten und Daumen drücken!

    Code
    sudo reboot

    FERTIG!!!

    Sollte nach einer bestimmten Zeit eine Blase in Chromium erscheinen, diesen workaround nutzen:

    Code
    sudo touch /etc/chromium-browser/customizations/01-disable-update-check;echo CHROMIUM_FLAGS=\"\$\{CHROMIUM_FLAGS\} --check-for-update-interval=31536000\" | sudo tee /etc/chromium-browser/customizations/01-disable-update-check

    So schon mal versucht?

    If you run into out of memory erros during the build process, try to set a memory limit manually:

    Code
    export NODE_OPTIONS=--max-old-space-size=3072
    
    ionic build --prod

    Gruß Kai

    Hey Kai,

    vielen Dank, das war die Lösung! Sorry, steht ja auch im Git :stumm: Ist nur zu weit unten für mich gewesen...

    Vielen herzlichen Dank für die Arbeit! Jetzt läuft (fast) alles!

    Thyraz Besteht denn Interesse an meiner Step-by-Step Anleitung, oder ist es dir lieber wenn das auf GitHub so bleibt und du es entsprechend editieren kannst? Falls ja würde ich dich bitten, dir schon mal meinen obigen Post anzusehen und mir ein kurzes Feedback zu geben, ob das so stimmt. Bei mir läuft es jetzt jedenfalls nach dieser Anleitung und den nachfolgenden Schritten, die ja im Git stehen.

    Hallo zusammen,

    ich versuche auch schon seit einigen Tagen die Jukebox für meine Kinder zu installieren. Basis ist ein Raspberry 3 mit dem Pimoroni hyperpixel Display und einer aktuellen Version von Raspberry Pi OS Lite (32-bit) mit dem Release 02/12/2020.

    Da ich gerne eine Step-by-Step Anleitung hierfür erstellen möchte, die ich auch gerne Teile, habe ich jeden Schritt dokumentiert. Falls etwas unnötig oder falsch ist, bin ich für eine entsprechende Info dankbar!

    Hier meine exakten Schritte:

    Nun erhalte ich ich bei

    Code
    ionic build --prod

    leider die folgenden Fehlermeldungen:

    Kann mir bitte jemand weiterhelfen?