NewTron-Radio: Auflösungsunabhängiges Tron-Radio

  • MPD Frontend mit Skin-Support für Touchdisplays

    Die neue Version von NewTron-Radio v3.2 ist hier zu finden: Beitrag #1833

    Kleine Benutzungshilfe

    Es wird ein auf Raspbian Stretch oder Buster basierendes Image sowie ein fertig eingerichtetes Touchdisplay vorausgesetzt.
    Für den Konsolenmodus, d.h ohne laufenden Desktop, muß das Touchdisplay so konfiguriert sein, dass es auch dort funktioniert. Das heißt, dass der Touchscreen auf 'ts_calibrate' ansprechen muss (resistive Displays). Eine kleine Hilfe zur Konfiguration des Touchdisplays im Konsolenmodus habe ich in Beitrag #233 geschrieben. In Beitrag #1778 habe ich ein Skript bereitgestellt, dass diesen Vorgang automatisiert.
    Wenn das Radio im Desktopmodus benutzt wird startet es im Fenstermodus mit einer Auflösung von 320x240 Pixeln. Dies kann im Skript geändert werden.


    Anleitung für die Installer Version

    • Das Display muss inkl. Touch im Desktopmodus bereits funktionieren!
    • Für den Konsolenmodus muss das Touchdisplay mit 'ts_calibrate' justiert werden (Ausnahme: kapazitive Touchdisplays)
    • Kopieren sie die Datei 'newtron-radio-setup-v3.2.sh' auf den pi
    • Wechseln sie auf der Kommandozeile in das Verzeichnis in dem die kopierte Datei liegt
    • Führen sie die kopierte Datei wie folgt aus:


      Code
      1. sh ./newtron-radio-setup-v3.2.sh


      (Sie können natürlich auch den Installer Ausführbar machen und die Installation mit './newtron-radio-setup-v3.1.sh' starten)
      Die Installation kann, je nach Netzgeschwindigkeit und bereits installierten Paketen, einige Zeit dauern

    • Nach der Installation befinden sich die Dateien des Radios unter /usr/local/lib/newtron-v3. Ein Startskript wurde unter dem Namen 'newtron-radio' im Verzeichnis /usr/local/bin angelegt.
    • Sollte die Installation nicht erfolgreich verlaufen sein, können sie versuchen den Installer erneut auszuführen - eventuell auch mehrfach bis keine Fehlermeldungen mehr auftauchen - das hat keine negativen Auswirkungen.
    • Desktop Modus
      • Im Startmenü einfach Unterhaltungsmedien -> NewTron Radio auswählen.
        Oder auf der Kommandozeile (LXTerminal o.Ä.) einfach 'newtron-radio' eintippen und <Return> drücken.
      • Natürlich ist auch ein automatischer Start per autostart möglich:
        Im Startmenü unter Einstellungen ->' Default applications for LXSession' den Reiter Autostart auswählen.
        Dort unter 'Manual autostarted applications' einen neuen Eintrag mit dem Inhalt '@newtron-radio' erstellen.
        Nach einem Neustart des LXDE-Desktops sollte nun das Radio automatisch ausgeführt werden.
    • Konsolenmodus
      • Um das Radio zu starten geben Sie einfach 'sudo newtron-radio' an der Konsole ein.
      • Ein automatischer Start wird durch einen passenden Eintrag in /etc/rc.local oder via systemd ermöglicht.

    Konfiguration
    Wer will kann das Phyton-Skript (newtron_radio.py) an die eigenen Bedürfnisse anpassen. So muss man beispielsweise sowieso das Skript bearbeiten, wenn man eine Backlightsteuerung einbauen will.


    Konfigurationseinstellungen die die Funktion beeinflussen werden direkt im Skript mit einem Texteditor (nano, vi, ...) eingestellt.
    Ein Teil der Einstellungen kann aber auch im Radio selbst geändert und gesichert werden (Skin, Screensavermode/-timer, x-/plus-button).
    Gesicherte Einstellungen haben Vorrang vor im Skript geänderten Einstellungen.
    Achtung: Die Sicherungsdatei befindet sich im Homeverzeichnis und hat den Namen .newtron-radio.conf.


    Für die Wetteranzeige wird ein Key von OpenWeatherMap benötigt.
    Diesen kann man sich einfach über http://openweathermap.org/appid besorgen.
    Dieser Key ist dann im Skript in der Variablen OWM_KEY (Zeile 93) einzutragen.
    Der OWM_KEY kann aber auch als Umgebungsvariable an das Skript übergeben werden: 'export OWM_KEY=123456...abcdef'
    Die Umgebungsvariable hat Vorrang vor der Einstellung im Skript.


    Ort für Wetteranzeige

    Der Standort für die Wetteranzeige wird als OWM_ID, OWM_ZIP, OWM_CITY

    oder OWM_COORD im Skript eingetragen (ab Zeile 85).


    Die OWM_ID erhält man, indem man den gewünschten Ort auf http://openweathermap.org auswählt. Sie ist in der resultierenden URL abzulesen, z.B. für Frankfurt: http://openweathermap.org/city/2925533. Die OWM_ID wäre demnach '2925533'.

    Wenn dort jedoch nur Positionsangaben (long. und lat.) zurückgeliefert werden, kann man stattdessen OWM_COORD verwenden.

    Man kann aber auch die OWM_ID eines Ortes in der Nähe aus folgender Liste heraussuchen:

    http://bulk.openweathermap.org/sample/city.list.json.gz


    Alternativ können die Ortsdaten auch über Umgebungsvariablen eingestellt werden.

    Folgende Umgebungsvariablen können gesetzt werden:

    OWM_ID: Openweathermap City-ID:

    OWM_ID="2925533"

    OWM_ZIP: Postleitzahl,Ländercode:

    OWM_ZIP="60313,de"

    OWM_CITY: Ort,Ländercode:

    OWM_CITY="Frankfurt%20am%20Main,de"

    OWM_COORD: Längen-/Breitenangabe:

    OWM_COORD="lat=50.116669&lon=8.68333"


    Die Umgebungsvariable hat Vorrang vor der Einstellung im Skript.


    Standardmäßig startet das Radio im Desktopmodus mit einer Auflösung von 320x240 Pixeln und sichtbarem Mauszeiger.
    Möchten Sie dies ändern, muss das Skript angepasst werden:
    Mauszeiger verstecken: SHOWCURSOR = False (Zeile 66)
    Für Vollbild: FULLSCREEN = True (Zeile 67)
    Fenstergrösse (wenn nicht Fullscreen): x_w = xxx (Zeile 69), x_h = yyy (Zeile 70)
    wobei xxx und yyy den jeweils gewünschten Wert darstellen.


    Konfigurationseinstellungen die das Aussehen beeinflussen finden Sie in der Datei 'skin.cfg' des zugehörigen Skins. Für den Default-Skin 'Tron' ist also newtron-v3/skins/Tron/skin.cfg zu bearbeiten.


    Ausserdem kann jeder seinen eigenen Skin erstellen und in ins 'skins'-Verzeichnis kopieren.
    Ein Skin besteht aus den Button-Grafiken, diversen Bildern (optional) und einer Konfigurationsdatei namens 'skin.cfg'.
    Sie können sich als Vorlage einen der bestehenden Skins ('Tron', Copper', 'Glass' oder 'Flat') kopieren und anpassen.


    Was man sonst noch alles modifizieren kann wird man schnell selbst feststellen...
    Das Skript finden Sie unter '/usr/local/lib/newtron-v3/newtron_radio.py' bzw. im Fall des .tgz-Archivs unter 'newtron-v3/newtron_radio.py' in dem Verzeichnis in dem sie das Archiv entpackt haben.


    Eigene Playlisten gehören in das MPD-Playlist-Verzeichnis das in /etc/mpd.conf als 'playlist_directory' definiert ist. Normalerweise ist das '/var/lib/mpd/playlists'.


    Eigene Musikdateien (und zugehörige Playlisten) gehören in das MPD-Music-Verzeichnis das in /etc/mpd.conf als 'music_directory' definiert ist. Normalerweise ist das '/var/lib/mpd/music'.


    Screenshots






    Downloads


    Alle Versionen können hier heruntergeladen werden: Link


    Um NewTron-Radio auch als einfachen USB-Audio-Player zu verwenden, habe ich ein kleines Installationsskript geschrieben, das dabei hilft, USB-Medien automatisch einzubinden und im Radio verfügbar zu machen. Die USB-Laufwerke (ja, auch mehrere sind möglich) werden im Dateiauswahlfenster des Radios als usb0-usb9 angezeigt.

    Siehe auch #1760

    Neu! usbmount-setup-for-mpd.sh


    Die Installation ist einfach: Das Skript im binary-Modus* auf den pi kopieren und mit 'sh ./usbmount-setup-for-mpd.sh' starten. Die neue Funktionalität steht erst nach einem reboot zur Verfügung
    ACHTUNG: Benutzer die bereits usbmount verwenden, sollten vorher die Datei /etc/usbmount/usbmount.conf sichern falls sie diese geändert haben (nur damit im Fehlerfall die ursprüngliche Konfiguration wiederhergestellt werden kann).


    *) Im Skript sind Tabs, Leerzeichen und Zeilenumbrüche enthalten, die nicht verändert werden dürfen, wenn das Skript korrekt funktionieren soll. Copy & Paste per Maus und/oder Tastatur ist also nicht empfehlenswert.



    Viel Spass beim ausprobieren!


    Kommentare, Anregungen, Kritik und Testberichte sind herzlich willkommen.

    Edited 14 times, last by veloci: An NewTron-Radio v3 angepasst ().

  • Hallo veloci,


    ich bin Deine Schritt für Schritt Anweisung durchgegangen.
    Wenn ich die newtron-radio.py starte, erscheint kurz das Bild der Oberfläche,
    dann bricht der Vorgang mit der Fehlermeldung IOError: SVG support missing ab.
    Bei der Installation von kaa-imlib2 fällt auf, das der svg support auf disabled steht.
    Wie kann ich diesen Fehler beheben oder hast Du die Library für librsvg ?


    Vielen Dank für Deine Radio Version.


    MfG Antheus

  • Huch,


    ja, librsvg2-dev ist nötig - habs vergessen mit einzutragen :wallbash:


    Um doch noch in den Genuss des Radios zu kommen sind folgende Schritte nötig:


    sudo pip uninstall kaa-imlib2
    sudo apt-get install librsvg2-dev
    sudo pip install kaa-imlib2



    Hoffe, das hilft!



    EDIT: Ich habe die Anleitung im ersten Beitrag entsprechend korrigiert.

    Edited once, last by veloci ().

  • Das liest sich gut, und die Bilder sprechen für sich, doch leider ging es nach 'hinten' los. Schade.
    Benutze mehrere Pi's, für das Radio, für Spielereien dieser Art ein Raspberry Pi B, in der Garage benutze ich ein RPi B+ und zum experimentieren noch ein RPi B und B+. Auch mehrere RPi2 stehen als Medienserver bereit.
    Alles mit Tron v5.3


    Habe das Tronimage geclont, somit funktioniert eine Tronversion. Bin deiner Anleitung gefolgt und sehe ... nix. Wie bei meinem Vorschreiber das Gleiche. (Tronv5.3 wenn ich den Launcher in rc.local lege läuft)
    RPi B, Karte SD32GB


    Bei ./launch feht das '.sh'.
    Was sollen wir tun? HW, SW?
    Welche HW voraussetzung? RPi, Karte?
    Mfg paulaner

    Edited once, last by paulaner ().

  • Mit der von Dir angegebenen Änderung funktioniert das Radio bei mir.
    Ich habe nur den Befehl pip install --upgrade kaa-imlib2 nicht mehr ausgeführt.
    Auch die Autostartfunktion über die rc.local funktioniert einwandfrei.


    MfG Antheus

  • Hallo


    gibts irgendwo eine kleine Anleitung wie ich Playlisten (MP3/Flac) über Tron wiedergeben kann?


    Gruß


    Edit:


    Bekomme einen Fehler beim Start



    pi@raspberrypi ~/newtron-v2 $ sudo python newtron-radio.py
    newtron-radio.py:22: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(18, GPIO.OUT)
    Traceback (most recent call last):
    File "newtron-radio.py", line 27, in <module>
    pygame.mouse.set_visible(False)
    pygame.error: video system not initialized



    EDIT 2:


    In der newtron-radio.py habe ich Zeile 17 folgende Anpassung gemacht:
    os.environ["SDL_MOUSEDEV"] = "/dev/input/event0"


    Nun sieht der Fehler beim start so aus:
    (für ca 1 Sekunde kommt aber schon die Tron Oberfläche), dann
    wieder der Desktop



    sudo python newtron-radio.py
    newtron-radio.py:22: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    GPIO.setup(18, GPIO.OUT)
    Traceback (most recent call last):
    File "newtron-radio.py", line 629, in <module>
    update_screen()
    File "newtron-radio.py", line 549, in update_screen
    Stationnr = int(Status['songid'])+1
    KeyError: 'songid'

    Edited once, last by noxx ().

  • Hier geht es wohl um das 'Radio' und nicht den Hintergrund mpc/mpd. Der kann viele Formate.
    Aber mit der Zeile 'mpc add eine gültige URI' kannst du jede Adresse reinhämmern.


    mpc add http://stream.hoerradar.de/saw70er-128


    http://www.listenlive.eu/netherlands.html hier gibt es ausreichend Stoff zum Probieren.
    Oder du lädst als root deine *.m3u nach /var/lib/mpd/playlists und wenn sie nicht im Radio erscheind zur Sicherheit playlists in mpc in der Console laden.
    z.B. mpc load playlist.m3u


    paulaner


  • Der Fehler kommt, wenn das tag 'songid' von mpd nicht geliefert wird. Hier hätte ich besser "Stationnr=int(Status['song'])+1" oder Stationnr=int(Info['pos'])+1" nehmen sollen. Ausserdem hätte ich das ganze in try: except: verpacken müssen. In einer internen Version hab ich das bereits abgefangen ebenso wie die meisten GPIO-Warnungen...


    Wer diesen Fehler auch schon hatte, kann die Zeile 549
    ersetzen durch

    Code
    1. try: Stationnr = int(Status['song'])+1
    2. except: Stationnr = 1


    Ach so, zum Abspielen von mp3-Playlisten von lokalen Audiodateien ist das Radio sowieso nur bedingt geeignet...

    Edited once, last by veloci ().

  • Also ich hab HW RPi B+, 16GB MicroSD 16GB Samsung.
    Nach deiner Anleitung und den Hilfen hier geht es auch nicht. Es sind noch ander Abhängigkeiten zu beachten, welche ...?


    Tron Anleitung genommen, bis * touch the five crosshairs gemacht.
    Dann deine, vielleicht ein wget für dein File in deiner Anleitung?
    So die Reihenfolge:
    sudo apt-get install python-pygame
    sudo apt-get install python-pip
    sudo apt-get install python2.7-dev


    wget https://pypi.python.org/packag…IO/RPi.GPIO-0.5.11.tar.gz
    tar zxf RPi.GPIO-0.5.11.tar.gz
    cd RPi.GPIO-0.5.11
    sudo python setup.py install
    cd


    sudo pip install python-mpd2
    sudo apt-get install libimlib2-dev
    sudo apt-get install librsvg2-dev
    sudo pip install --upgrade kaa-base
    -> #sudo pip install --upgrade kaa-imlib2
    -> sudo pip uninstall kaa-imlib2
    sudo pip install kaa-imlib2


    Zum bauen der python bekommst du sonst ein Error.
    Anschließend die newtron-radio.py gestartet, reboot natürlich öfters gemacht und nix.
    Fehlermeldungen.
    Auch die hier vorgeschlagenen Hilfen brachten nix.


    Erst ein
    sudo apt-get update
    sudo apt-get install mpc mpd apache2 php5 libapache2-mod-php5


    aus der Originalanleitung des Tron brachten den Erfolg.
    Noch ein Station geadded und fertig.

    Aber das ist immer noch kein 'sauberes' Image für NewTron.!
    Vieleicht kann der Autor was zu sagen?


    paulaner

  • Achso, wollte ich noch loswerden. Habe auf dem RPi B+ mit Tron Image ein Update auf deine Newtron version gewagt und musste leider feststellen, das der USB Sound knistert.


    Hat das einer von euch schon bemerkt? Was kann es sein und wie kann man es abschaffen.


    paulaner

    Edited once, last by paulaner ().


  • Erst ein
    sudo apt-get update
    sudo apt-get install mpc mpd apache2 php5 libapache2-mod-php5


    Ich dachte meine Anleitung wäre verständlich:


    "Vorraussetzung ist ein aktuelles Raspian, ein konfigurierter mpd sowie ein fertig eingerichtetes Touchdisplay."


    Dass heißt, man sollte mindestens einmal
    sudo apt-get update
    sudo apt-get upgrade
    und dann
    sudo apt-get install mpc mpd
    sowie das touchdisplay eingerichtet haben
    Wie das geht ist hier im Forum schon irgendwo erklärt worden


    apache und das php5-zeugs braucht man nicht für das Newtron-Radio und ist auf meinem RasPi rev. B auch nicht drauf.



    Aber das ist immer noch kein 'sauberes' Image für NewTron.!
    Vieleicht kann der Autor was zu sagen?


    Als 'sauberes' Programm war und ist Newtron-Radio nicht gedacht - eher als 'proof of concept' um zu sehen, was durch Optimierung des Originals von 5volt-junkie so alles möglich ist. Ich bin kein Programmierer oder Softwareentwickler und kenne python erst seit zwei Wochen also sind auch Fehler drin. Ich weiß nicht, ob es sich für ein so kleines Programm überhaupt lohnt ein eigenes Image dafür zu erzeugen.
    Aber ich werde - solange es mir Spass macht - das Newtron-Radio weiter pflegen und weitere Features und natürlich auch neue Fehler einbauen...


    Ach so, die Reihenfolge der Installationsbefehle werde ich im ersten Beitrag noch anpassen.

    Edited once, last by veloci ().

  • Hallo,
    ich hab mich täuschen lassen und dadurch nicht
    sudo apt-get install mpc mpd
    ausgeführt, wie immer die Schuld des Verfassers. Aber gut das es noch pfiffigere Leute hier gibt.


    Jetzt setzt ich ohne php5 und das andere 'Geraffel', das Image neu auf.


    Mach weiter so, paulaner

    Edited once, last by paulaner ().

  • :helpnew:
    Hi ,


    der start im backend (mpd audio ausgabe) ohne probleme, aber die gui ist leider 'schwarz'.
    Der touchscreen läuft im lxde Desktop ohne problem auf dem /dev/fb1 .. touch ist auch OK !


    aktive prozesse :


    sudo python newtron-radio.py ...als root
    python newtron-radio.py ...als root


    Was könnte noch falsch sein?
    Grüße Matthias


  • der start im backend (mpd audio ausgabe) ohne probleme, aber die gui ist leider 'schwarz'.
    Der touchscreen läuft im lxde Desktop ohne problem auf dem /dev/fb1 .. touch ist auch OK !


    Funktioniert 'sudo ts_calibrate' oder 'sudo ts_test'?

  • Beim rumbasteln mit dem Newtron-Radio ist mir ein Fehler aufgefallen, der die Performance von pygame Programmen stark einschränkt. Aber der Reihe nach.


    Um Newtron-Radio zu testen und zu erweiten benutze ich mehrere ssh-Verbindungen zum Raspi auf dem das Radio läuft. In einem Fenster läuft eigentlich ständig 'top' um die Prozessorlast anzuzeigen und um Prozesse zu beenden. In einem weiteren Fenster läuft der Editor - in meinem Fall 'vim' und im dritten Fenster starte und stoppe ich das Radio und lass mir die (Fehler-)Meldungen ausgeben.
    Bei dieser Vorgehensweise sehe ich sofort, ob eine Änderung im Code die Prozessorlast durch das Radio verändert.


    Bis vor kurzem waren das etwa 18% Last bei normalem Betrieb und ca. 11% wenn der Screensaver läuft - das kam mir immer etwas viel vor fürs nichtstun...


    Irgendwann bin ich dann mal auf die Idee gekommen ein bißchen mit der jobcontrol der Shell (bash) herumzuspielen.


    Kleiner Exkurs:
    [hr]
    Unter Unixoiden Systemen (wie Linux) kann man Programme beim Start mit einem angehängten '&' in den Hintergrund starten - Das Kommandozeilenfenster kann danach ganz normal für weitere Kommandos weiterbenutzt werden. Lässt man das '&' weg, bleibt die Kommandozeile solange blockiert bis man das darin gestartete Programm beendet oder mit Ctrl-C (Strg-C) abbricht. Nun kann man bei einer Shell mit Jobcontrol auch so gestartete Progamme (ohne angehängtes '&') nachträglich in den Hintergrund schicken - und zwar indem man das Programm anhält (entweder mit Ctrl-Z oder mit SIGSTOP an die PID des Programmes ) und dann mit dem Kommando 'bg' in den Hintergrund schickt.
    [hr]


    Dies habe ich mit Newtron-Radio dann auch öfters praktiziert. Dabei ist mir aufgefallen, dass immer dann, wenn ich das Programm nachträglich in den Hintergrund schicke, die Prozessorlast deutlich zurück geht - und zwar auf 12% bei normalem Betrieb und auf unter 5% wenn der Screensaver aktiv ist - aber nicht, wenn ich das Programm gleich in den Hintergrund schicke (mit '&'). Diesen Effekt konnte ich mir nicht erklären, da beide Methoden intern unter Linux exakt die gleichen Systemcalls benutzen.
    Bei der Suche nach der Ursache diese Phänomens bin ich zunächst auf eine Warnung gestossen, die immer dann ausgegeben wurde, wenn das Programm nachträglich in den Hintergrund geschickt wurde:

    Code
    1. ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred


    Hä? Was hat ALSA mit dem Newtron-Radio zu tun? Die Audioausgabe wird vom mpd erledigt und Newtron-Radio ist nur ein Frontend, das die entsprechenden Kommandos an mpd weiterleitet...


    Dann habe ich mir das pygame-Modul etwas genauer angesehen. Und siehe da: auch pygame kann Audio und zwar mit dem pygame.mixer-Modul.


    Nach längerer Suche bin ich dann auf die Lösung gekommen.
    Ich habe einfach vor Beginn der Event-Schleife einen Befehl eingefügt:
    [code=php]pygame.mixer.quit()[/php]
    Seitdem ist die Prozessorlast dauerhaft um gut 40% niedriger als vorher.
    Irgendwie wird wohl beim Einbinden des pygame-Moduls (import pygame) oder bei dessen Initialisierung (pygame.init()) das Audiosystem auf dem Raspi falsch angesprochen - entweder durch pygame selbst oder durch das darunter liegende Backend SDL_mixer.


    Ich denke, dass auch andere Projekte die pygame benutzen von diesem Workaround profitieren, da die mögliche Framerate doch deutlich ansteigt...


    Gruß,
    veloci

    Edited once, last by veloci ().

  • Hallo voloci,


    kann es sein das du bei der Umstellerei den Mouszeiger vergessen hast? Er ist sichtbar.


    Und was bringt die Änderung der Reihenfolge, kannst du das für mich Laien erklären?
    paulaner