Ich möchte meinen Radiowecker und den eigentlichen Wecker durch ein smartes System ersetzen. Leider habe ich bisher nichts Kaufbares gefunden was meine Anforderungen erfüllt.
Also selber bauen?
[Nachtrag: inzwischen habe ich eine andere Lösung im Einsatz, diesen Artikel lasse ich für alle da die einen Raspberry einsetzen wollen]
Internet-Wecker mit Raspberry Pi
Eigentlich wache ich morgens immer schnell auf, aber einfach nur einen piependen Wecker hinzustellen ist mir zu nervig. Also habe ich vor langer Zeit einen Radiowecker so eingestellt dass er ein paar Minuten bevor ich aufstehen muss beginnt leise Musik zu spielen. Dann, kurz vor dem Zeitpunkt das Bett zu verlassen schaltet Home Assistant das Licht an und wenig später klingelt der Wecker. Diese beiden brauche ich zur Sicherheit, denn der Radiowecker hat ein Problem dass er sich hin und wieder zwar einschaltet, aber dann keinen Ton ausgibt. So habe ich einmal recht lange verschlafen und dann doch noch den besagten Wecker besorgt.
Leider bedeuten diese drei Geräte dass ich, wann immer ich einmal nicht dem regulären Plan folge, allen drei Geräten sagen muss "bitte morgen nicht wecken". Beim Radiowecker muss ich sogar vor jedem Wochenende das Wecken abschalten da er keine Funktion dafür hat. Außerdem beginnt er langsam den Geist aufzugeben und, je nach Tag, Wetter und Ausrichtung der Antenne ist der Empfang extrem schlecht, bis hin zum weißren Rauschen. Also hätte ich gerne ein Internetradio oder etwas mit DAB - wobei ich bei letzterem schlechte Erfahrungen (d.h. in der Wohnung gar kein Empfang) gemacht hatte - aber das ist schon Jahre her.
Der örtliche Elektromarkt bietet zwar diverse Internetradios an, aber keines davon bietet die Möglichkeit zwei Weckzeiten vorzugeben - das hätte ich aber gerne damit ich das Wochenende separat einstellen kann. Ein einfaches Radio wie dieses kann das zwar, aber normalerweise ist der Ton ziemlich mies und damit habe ich immer noch das Problem dass ich Urlaube und Feiertage extra einstellen muss. Ein paar Geräte wie dieses habe ich gefunden, aber diese sind mir dann doch etwas zu teuer. Vielversprechend ist etwas wie dieses Gerät, aber auch hier bleibt das Problem mit dem Urlaub - und ich sehe nicht ob ich zwei Weckzeiten erfassen kann. Und die Bewertungen sind nicht so überragend. Dieses hier gefällt mir von den Funktionen, die Optik find ich aber miserabel.
Also etwas Eigenes bauen?
Logitech Media Server
Eine mögliche Lösung war der Logitech Media Server den ich installiert habe. Das System ist zwar veraltet, kann aber vieles was ich gerne möchte - sogar mehrere (beliebig viele!) Weckzeiten sind möglich. Allerdings finde ich nichts wie ich die Weckfunktion dann einfach abschalten kann.
Was mich bisher gestört hat sist dass die Ausgabegeräte "headless" konzipiert sind, das bedeutet sie laufen ohne Bildschirm. Das bedeutet dass ich zum Radio einschalten das Handy benutzen müsste - und das ist doof. Die Variante mit einem Touchscreen über "piCore Player" gibt es zwar auch, aber dieser schaltet sich nachts nicht richtig aus was mich sehr beim Einschlafen gestört hat. Außerdem belegt der Bildschirm die GPIOs so dass ich kein HiFiDAC-Modul einsetzen kann.
Dennoch habe ich das System mal wieder reaktiviert und zum Testen eine Instanz in der Küche aufgebaut. Tatsächlich spielt brav jeden Morgen das Radio. Leider ist aber die einzige Möglichkeit der Bedienung eine Webseite aufzurufen. Ich hätte aber gerne die Möglichkeit über Tasten die Wiedergabe ein- und auszuschalten, und vielleicht auch noch die Lautstärke zu kontrollieren.
Der nächste Schritt wäre dann die Oberfläche. Prinzipiell wäre es ganz einfach: es gibt ein Modul "JiveLite" das die Darstellung auf einem Touchscreen ermöglicht. Leider funktionierte die Lösung die ich 2019 ausprobiert hatte nicht mehr - vermutlich hatte ich einen anderen Touchscreen oder Raspberry verwendet. Vielleicht hatten sich aber auch Teile des Programms aktualisiert - wer weiß.
Also stieg ich gleich auf den Pi in der Version 3 um, denn für diesen hatte ich einen 5"-Touchscreen. Leider lief JiveLite nicht - es gab immer die Fehlermeldung "unknown command: ts_setup" oder so ähnlich.
Waveshare 5" Touchscreen einrichten
SSH in den piCore-Player
mount /mnt/mmcblk0p1
cd /mnt/mmcblk0p1
vi config.txt
Vor dem Ende diesen Block einfügen (die letzte Zeile muss EINE Zeile sein!):
hdmi_group=2
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0 hdmi_drive=1 dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
Mit <ESC>, :wq! speichern und VI verlassen
Änderungen sichern:
sudo filetool.sh -b
Auf der piCore-Seite den Autostart von JiveLite abschalten
Neu starten
SSH in den piCore-Player, dort diesen Code als eine Zeile eingeben und den Schirm kalibrieren:
sudo TSLIB_FBDEVICE=/dev/fb0 TSLIB_TSDEVICE=/dev/input/event0 /usr/local/bin/ts_calibrate
Wenn gewünscht testen mit:
sudo TSLIB_FBDEVICE=/dev/fb0 TSLIB_TSDEVICE=/dev/input/event0 /usr/local/bin/ts_test
oder
sudo SDL_VIDEODRIVER=fbcon SDL_FBDEV=/dev/fb0 TSLIB_TSDEVICE=/dev/input/event0 SDL_MOUSEDRV=TSLIB /opt/jivelite/bin/jivelite
Nachdem ich allerdings die aktuellste Version des piCore-Players eingespielt hatte funktionierte es besser.
Es gibt unter "Einstellungen" die Möglichkeit die Uhranzeige und das Abschalten des Bildschirms zu steuern, wie dies am besten zu verwenden ist überlege ich. Einerseits wäre eine Anzeige der Uhrzeit interessant, andererseits möchte ich nicht dass nachts der Bildschirm an ist. Vielleicht kann ich irgendwo einstellen dass der Bildschirm aktiv bleibt, aber die Hintergrundbeleuchtung ausschaltet.
Das Hauptproblem ist aber dass der Touchscreen immer wieder die Kalibrierung vergisst. Das scheint daran zu liegen dass eine Variable gesetzt werden muss die auf die Datei mit den Daten zeigt. Das hier (in /mnt/mmcblk0p2/tce/jivelite.sh) soll helfen, aber wird dann auch beim Start diese Datei ausgeführt?
#!/bin/sh
# Datei: /mnt/mmcblk0p2/tce/jivelite.sh
# angepasst von https://www.thefanclub.co.za/how-to/how-setup-picoreplayer-jivelite-use-waveshare-55-amoled-touchscreen
# Disable mouse pointer
export JIVE_NOCURSOR=1
# Set touch calibration file
export TSLIB_CALIBFILE=/usr/local/etc/pointercal
# Jivelite interface framerate
#export JIVE_FRAMERATE=22
# Set 32bit color
#/usr/sbin/fbset -depth 32
# Set Touch input device
export TSLIB_TSDEVICE=/dev/input/event0 # This might be event1 in some cases
export SDL_MOUSEDRV=TSLIB
# Define custom JogglerSkin/Grid Skin size
# The default 1920x1080 skin is too small - scale to 853x480. This could be any
#export JL_SCREEN_WIDTH=800
#export JL_SCREEN_HEIGHT=480
# Set custom screen resolution
#/usr/sbin/fbset -xres 800 -yres 480
# Run Jivelite
while true; do
/opt/jivelite/bin/jivelite &
sleep 3
done
Steuerung des piCorePlayers via SSH
Eine Alternative wäre es den pCP über Kommandos zu steuern. Wenn man sich via SSH auf das System schaltet (Benutzer tc, Passwort piCore) kann man mit dem Befehl "pcp" das Verhalten steuern. Zur Verfügung stehen diese Möglichkeiten:
=========================================================================================
Basic piCorePlayer CLI
-----------------------------------------------------------------------------------------
Squeezelite/LMS
---------------
- pcp play : play current track in playlist
- pcp stop : stop current track
- pcp pause : pause current track
- pcp up : volume up
- pcp down : volume down
- pcp next : next track
- pcp prev : previous track
- pcp rand : generate random track playlist
- pcp power [on|off] : software power on or off
- pcp volume [0-100] : set volume between 0 to 100
- pcp rescan : look for new and changed media files in connected LMS library
- pcp wipecache : clear connected LMS library and rescan
- pcp mode : display Squeezelite\'s current mode
-----------------------------------------------------------------------------------------
piCore
------
- pcp bu : (b)ack(u)p
- pcp sd : (s)hut(d)own
- pcp bs : (b)ackup then (s)hutdown
- pcp rb : (r)e(b)oot
- pcp br : (b)ackup then (r)eboot
-----------------------------------------------------------------------------------------
piCorePlayer
------------
- pcp d0 : debug off
- pcp d1 : debug on
-----------------------------------------------------------------------------------------
Jetzt fehlt nur noch die Möglichkeit diese Befehle über GPIOs auszulösen.
Volumio
Eine moderne Alternative zum LogiTech Medienserver ist das Programm "Volumio". Es ist allerdings nicht für die Nutzung eines zentralen Servers ausgelegt, sondern erwartet die Medien primär lokal. Natürlich können die Daten aber auch von einem Netzlaufwerk bezogen werden.
5" Touchscreen, Waveshare-kompatibel
Ich habe einen Pi3 mit einem via HDMI angesteuerten Touchscreen. Dieser Touchscreen funktionierte beinahe automatisch - ich musste nur das entsprechende Plugin installieren.
Allerdings war nach einiger Zeit nicht mehr alles verfügbar. Ich bin nicht ganz sicher ob das daran lag dass der Pi etwas zu heiß war.
3.5" Touchscreen
Einen älteren Pi - V1 oder V2 - habe ich mit einem 3.5"-Tocuhscreen ausgestattet. Bei diesem dauerte das Aktivieren von Volumio schon eine kleine Ewigkeit, aber Radiostreams spielt er ordentlich ab.
Den Touchscreen einzurichten ist etwas komplizierter. Ich habe eine Anleitung gefunden:
Quelle: https://community.volumio.org/t/volumio-with-3-5-tft-touch-screen-gpio-rpi-3b/11265
Aber diese passt nicht mehr 100% zu den heruntergeladenen Dateien. Bisher musste ich die grün markierten Zeilen anpassen:
Installiere "Touch" Plugin
git clone https://github.com/goodtft/LCD-show
cd LCD-show/
sudo mkdir /etc/X11/xorg.conf.d
cd usr/
sudo cp tft35a-overlay.dtb /boot/overlays
sudo cp tft35a-overlay.dtb /boot/overlays/tft35.dtbo
sudo cp -rf 99-calibration.conf-35-0 /etc/X11/xorg.conf.d/99-calibration.conf
Hier testen welche Datei korrekt ist! Die 0°-Version ist für mein Layout genau verkehrt herum. Da man aber im Volumio-Plugin auch eine Drehung veranlassen kann ist das evtl. egal.
sudo mkdir -p /usr/share/X11/xorg.conf.d/
sudo cp -rf ./99-fbturbo.conf /usr/share/X11/xorg.conf.d/99-fbturbo.conf
sudo nano /etc/X11/xorg.conf.d/99-calibration.conf
...(weitere Befehle einfügen)...
Was hier passiert ist dass auf dem RasPi X11 sowie ein Browser gestartet wird der die Volumio-Seite anzeigt. Ich bin nicht sicher ob das auf dem altem. langsamen Pi nicht zu viel wird.
Ein Problem ist jedenfalls dass Volumio deutlich langsamer startet als der Browser so dass eine Weile eine Fehlerseite ansteht.
Weiterhin funktionierte die Touchfunktion erst einmal nicht.
Alles in allem ist der alte RasPi aber wirklich extrem langsam, ich glaube nicht dass ich ihn so einsetzen werde.