Vom MP3 zur Sonosbox

Wir haben jahrelang ein normales UKW-Radio in der Küche gehabt und es hat auch brav seinen Dienst verrichtet. Da wir, d.h. meine Frau und ich, aber auch gerne mal Musik hören wollen, die nicht von empfangbaren Radiostationen gespielt wird und wir uns so oder so für das Wohnzimmer eine Soundbar gekauft hatten, haben wir uns überlegt, zusätzliche Boxen für die Küche und das Esszimmer zu kaufen.

Die Wahl für die Soundbar und die Boxen fiel auf das Equipment von Sonos.

Nun standen also jeweils eine Box in der Küche und im Esszimmer und es dudelte Musik aus selbigen. Ich aber wollte, dass, wenn zum Beispiel eine kleine Fete bei uns stattfindet, auch mal meine, bzw. unsere Musik läuft. Ein erster Schritt dazu war, dass ich mir quasi meine eigene "Radiostation" aufgebaut habe.

Die "Zutaten":

  • Ein RaspberryPi
  • Eine auf dem RaspberryPi liegende MP3-Sammlung
  • ezstream
  • icecast2

Die ersten beiden Punkte sind trivial und benötigen keiner weiteren Erklärung.

Als erstes habe ich icecast2 installiert und konfiguriert. Die Konfigurationsdatei habe ich sehr minimalistisch gehalten. Natürlich habe ich die Passwörter für die Authentifizierung eingetragen. Als Login für die Quelle habe ich es beim Standardeintrag "source" belassen. Mountpoints habe ich - ausser dem "default" - nicht defniert, diese kommen von ezstream (bzw. später von mixxx). Dadurch habe ich eine große Flexibilität, was die Beschickung des Icecastservers betrifft.

<mount type="default">
   <public>0</public>
      <max-listeners>50</max-listeners>
</mount>


Damit jetzt auch die MP3s fliessen, benötigt es noch einen weiteren Server: ezstream. Damit streame ich die MP3s in Richtung Icecast.
Den Dienst habe ich unter meinem Benutzer laufen, da die MP3s auch von mir verwaltet werden.
Die Unit dazu:

[Unit]
Description=ezstream

[Service]
WorkingDirectory=/home/hauke/stream
ExecStart=/usr/bin/ezstream -c /home/hauke/stream/ezstream.xml
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target

Und die Konfigurationsdatei:

<?xml version="1.0" encoding="UTF-8"?>                                                                         
<ezstream>
 <servers>
   <server>
           <hostname>127.0.0.1</hostname>
           <user>source</user>
           <password>hackme</password>
   </server>
 </servers>
 <streams>
   <stream>
     <mountpoint>/wiesengrund.mp3</mountpoint>
     <format>MP3</format>
     <stream_name>Radio Wiesengrund</stream_name>
     <stream_description>Lieder der 80er</stream_description>
     <stream_quality>0</stream_quality>
     <stream_bitrate>16</stream_bitrate>
     <stream_samplerate>44100</stream_samplerate>
   </stream>
 </streams>

 <intakes>
   <intake>
           <filename>/var/lib/mpd/music/all.m3u</filename>
           <!-- Setting to shuffle playlists -->
           <shuffle>Yes</shuffle>
           <!-- Setting whether to stream intake indefinitely or only once -->
           <stream_once>No</stream_once>
   </intake>
 </intakes>
</ezstream>

Die Playlist wird mit Hilfe eines Cronjobs erstellt und das ist auch der Grund, warum ezstream unter meinem Benutzer läuft: Der Cronjob läuft auch unter meinem Benutzer und aktualisiert einmal in der Nacht die MP3-Liste mit Hilfe des folgenden Skriptes und startet dann ezstream neu, damit auch die aktuelle Playlist abgespielt wird:

#!/bin/sh

export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"

cd /var/lib/minidlna/music
rm -f all.m3u
find . -name "*.mp3" -exec echo "$(pwd)/{}" \; | shuf >> all.m3u

systemctl --user restart ezstream

exit 0

 

Damit kann man also schon einmal per Browser unter der im ezstream konfigurierten URL MP3s hören. Falls nicht: Fehler suchen, Fehler beheben, noch mal probieren, ob etwas via Browser aus den Boxen des Rechners lärmt!

Der letzte Schrit ist, dass man dieses "Radio" jetzt in Richtung Sonos streamt. Dazu habe ich mir auf meinem Rechner das Programm "noson" installiert. Pakete findet man unter https://github.com/pascalopitz/unoffical-sonos-controller-for-linux/releases.

Unter "Meine Radiosender" fügt man dann die URL vom Icecast hinzu, wählt die gewünschten Boxen aus und dann heisst es: "Party!"

Na ja, so richtig Party ist das ja noch nicht, denn so dudelt einfach nur die Playlist runter. Wenn man jetzt noch mehr DJ spielen will, dann empfehle ich das Program mixxx. Mit Hilfe des WWW kann man dann Icecast so konfigurieren, dass im Normalfall die Playlist abgespielt wird, sobald man jedoch mit z.B. mixxx auf Sendung geht, der Stream vom DJ kommt.

Nebenbei:
Bei mir läuft auch minidlna, um die MP3s per DLNA ins lokale Netz zu streamen. Damit kann man dann auch per VLC zum Beispiel die MP3s hören. Da minidlna aber einen eigenen Benutzer mitbringt, habe ich entsprechende POSIX-ACLs auf die Verzeichnisse für minidlna gesetzt.

Brand in Riesenbeck

Gestern Abend gegen 19:45 saßen meine Frau und ich auf der Terasse, um den Tag langsam ausklingen zu lassen. Wir maulten ein wenig rum, weil das Getreidefeld gegenüber gerade abgeerntet wurde und der Staub die frisch geputzten Fenster ein wenig verdreckte.

Auf einmal hörten wir ein merkwürdiges Geräusch und gingen zum Gartentor, um nachzuschauen, woher das Geräusch kam. Und siehe da: Das Getreidefeld auf der anderen Seite stand in Flammen!

Meine Frau meinte nur: "Ruf mal die Feuerwehr an!" Gesagt, getan, die Leitstelle wusste aber bereits von dem Brand. Vermutlich hat der Fahrer des Mähdreschers bereits angerufen.

Da die Feuerwache von uns nur etwa 200 Meter entfernt ist, war die Feuerwehr dann auch schnell vor Ort. Binnen kurzer Zeit war alles vor Ort, was an Löschfahrzeugen vorhanden war, zumal auch der Trupp aus Bevergern ausgerückt war.

Das Feuer war recht schnell gelöscht, Personen kamen meines Wissens nicht zu Schaden.

Ironie der Geschichte: Gut 1 Stunde, nachdem die Feuerwehr eingepackt hat, fing es an, wie aus Eimern zu regnen!

Update:

Beim WDR gibt es einen Bericht dazu und hier bei YouTube ein Video

 

Linux 5.4 mit TP-Link UB500 Adapter

Ich habe mir ein paar günstige Kopfhörer gekauft, weil ich gerne mal Musik am Rechner höre. Die alten Kopfhörer sind defekt und so habe ich mich für Kopfhörer mit Bluetooth entschieden. Dazu den TP-Link UB500 Bluetoothadapter und...das Drama begann.

Mein LinuxMint mit Kernel 5.4 wollte einfach den Adapter nicht erkennen. Also habe ich mich auf die Suche gemacht und diese Seite gefunden, auf der der Patchweg für einen Linux 5.4 Kernel beschrieben ist. Übrigens habe ich dafür DKMS bemüht.

Jetzt klappt es wieder mit der Musik.

Zweite Auffrischimpfung bekommen

Ich habe heute meine zweite Auffrischimpfung (Neudeutsch: "Booster") gegen Covid-19 bekommen.

Da ich bei der ersten Impfung Johnson&Johnson bekommen habe und ab heute in NRW auch das Recht gilt, dass man trotz 1. Auffrischung nur noch als "Grundimmunisiert" eingestuft wird, habe ich meinen Arzt gefragt, ob es Okay wäre, wenn er mich noch einmal impfen würde.
Meine 1. Auffrischung war am 11.11. und einer weiteren Auffrischung stand nichts im Wege, also mal wieder rein mit dem Zeug!

Jetzt bin ich wieder im Status "geboostert"!

Pi-hole mit Keepalived und GlusterFS

Ich habe mir heute Pi-hole "hochverfügbar" eingerichtet.

Dazu habe ich zunächst per GlusterFS die Daten auf zwei Raspberry Pis synchronisiert. Nebenbei: /etc/pi-hole ist jetzt ein sog. "Bind-Mount" auf das Verzeichnis, in dem per GlusterFS die Dateien für Pi-hole liegen. Das ist in meinem Fall /data/brick01/pihole.

Meine /etc/fstab (auf dem anderen Pi wird mit der IP-Adresse des anderen Pis gemountet):

192.168.50.5:brick01    /data/brick01   glusterfs       defaults        0 0
/data/brick01/pihole   /etc/pihole     none            bind            0 0

Per keepalived starte und stoppe ich den FTL-Prozess von Pi-hole dann, je nachdem, ob der Rechner jetzt der primäre Server ist, oder (wieder) der sekundäre. Keepalived startet übrigens auch nur, wenn die Mounts auch erfolgreich waren. Dazu habe ich die SystemD-Unit überschrieben:

[Unit]
Description=Pi-hole FTLDNS
After=network.target glusterd.service etc-pihole.mount
Requires=glusterd.service etc-pihole.mount
Wants=nss-lookup.target
Before=nss-lookup.target

[Service]
User=root
Group=root
PermissionsStartOnly=true

Type=forking
PIDFile=/run/pihole-FTL.pid

ExecStartPre=/bin/touch /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /var/log/pihole.log
ExecStartPre=/bin/rm -f /dev/shm/FTL-
ExecStartPre=/bin/mkdir -p /var/run/pihole /var/log/pihole
ExecStartPre=/bin/chown pihole:pihole /var/run/pihole /var/log/pihole
ExecStartPre=-/bin/rm -f /var/run/pihole/FTL.sock /dev/shm/FTL-
ExecStartPre=/bin/chown pihole:pihole /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /etc/pihole /etc/pihole/dhcp.leases /var/log/pihole.log
ExecStartPre=/bin/chmod 0644 /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /var/log/pihole.log
ExecStartPre=/bin/echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.piholeFTL

ExecStopPost=/bin/rm -f /dev/shm/FTL-*

ExecStart=/usr/bin/pihole-FTL
RestartSec=30s
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=10s
ProtectSystem=full
ReadWriteDirectories=/etc/pihole

[Install]
WantedBy=multi-user.target

Leider werden in /dev/shm die Einträge für FTL nicht ordentlich weggeräumt. deshalb erledige ich das in meiner Unit zusätzlich.

Auffrischungsimpfung bekommen

Heute habe ich meine Auffrischungsimfpung gegen Covid-19 bekommen. In diesem Fall Biontech.

Und das am 11.11.!

Jetzt bin ich wenigstens ein paar Monate etwas sicherer; keine 100%, aber 80-90% sollten reichen.

Webseite umgestaltet

Ich habe vor einiger Zeit von Hugo erfahren und zu Hause auf meinem Privatrechner zunächst ausprobiert. Da ich auch ein hübsches Theme, das Axiom-Theme gefunden habe, dachte ich mir, dass Drupal doch etwas zu groß für meine Webseite sei. Nun habe ich meine Seite auf Hugo umgestellt.

Noch muss ein Cronjob dafür sorgen, dass die Seite nach einem Commit auf meinen Git-Server aktualisiert wird, aber demnächst werde ich mir dafür einen Webhook bauen, der die Veröffentlichung übernimmt.

Impfung bekommen

Eigentlich ist es keine große Sache, aber ich blogge es dennoch für mich:
Heute habe ich meine erste und letzte Impfung (Kurz: "Impfe") gegen Covid-19 bekommen. Da inzwischen die Wahl frei ist und alles sehr entspannt abläuft, habe ich mich für Johnson&Johnson entschieden.

Also: Alles gut!

Neuen Personalausweis beantragt

Die Beantragung eines neuen Personalausweises ist normalerweise keine Sache, die an die große Glocke gehängt wird, wenn jedoch ab 1. August zusätzlich die erkennungsdienstliche Behandlung dazukommt, dann ist es meiner Meinung nach wichtig!

So habe ich mir also einen neuen Ausweis besorgt und zwar natürlich ohne weitere persönliche Daten von mir anzugeben (ausser denen, die dafür tatsächlich nötig sind)!

Eine Speicherung unnützer Daten lehne ich weiterhin kategorisch ab und die Abgabe eines Fingerabdrucks (also die erkennungsdienstliche Behandlung) demnach natürlich auch! Die Polizei hat so oder so schon viel zu viele Befugnisse, um die Privatsphäre der Bürger heimlich auszuschnüffeln.

Und ganz ehrlich: Da ja immer mehr "Einzelfälle" von rechtsradikaler Gesinnung innerhalb der Polizei öffentlich werden, habe ich bald mehr Angst vor der Polizei, als vor Kriminellen. Wobei...rechtsradikale Polizistinnen und Polizisten sind für mich Kriminelle!

Ein Jahr Home-Office

Auf den Tag genau vor einem Jahr war mein letzter Arbeitstag nicht nur in Düsseldorf, sondern allgemein im betriebseigenen Büro. Am 15. April 2020 habe ich meine Sachen in Düsseldorf eingepackt und bin nach Hause gefahren.
Von da an war ich nur an ein paar Tagen (Drei? Vier? Muss ich nachgucken) vor Ort in Münster. Inzwischen habe ich mich hier zu Hause ganz gut eingerichtet und mich auch an die Situation allgemein gewöhnt. Aktuell ist die 100%ige Heimarbeit bei uns bis zum 20. August vorgesehen, ich bin mir aber sicher, dass es danach noch weitergeht.

Was ich schade finde ist die Tatsache, dass ich inzwischen viele Leute kennengelernt habe, aber nun mal nur die Stimmen, denn alles ging bisher nur via Telefon. Videokonferenzen lassen wir aussen vor, da es zuviel Bandbreite kostet und eine Videokonferenz meistens auch nicht nötig ist.Wenn der ganze Scheiss vorbei ist, hoffe ich, dass ich die Leute alle persönlich kennenlernen kann, auch wenn die an verschiedenen Standorten arbeiten.

Erste Motorradtour des Jahres 2021

Bei 18 Grad Lufttemperatur und sonnigem Wetter, hat es mich heute zu einer ersten kleinen Tour des Jahres mit dem Motorrad rausgezogen.

Keine große Tour, eine gute Stunde war ich nur unterwegs, habe jede Menge anderer Motorradfahrer gesehen. Der Trottel des heutigen Tages war ein Fahrradfaher, der sich darüber aufgeregt hat, dass an einer Rechts-vor-Links-Kreuzung (die sogar für die ganz Dummen entsprechend beschildert ist!) ich weitergefahren bin, da ich Vorfahrt hatte und er nicht. An dieser Stelle also noch einmal ein gut gemeinter Hinweis: Auch für Fahrradfahrer gelten die Verkehrsvorschriften!

Ansonsten hatte ich einfach, wie meistens, meinen Spaß.

Aber man muss sich das mal vorstellen: Vor 2 Wochen hat es geschneit, wie sonst was, letztes Wochenende lag noch gut Schnee auf den Straßen und Wegen und heute zieht es die Menschen raus aus den Häusern und Wohnungen.

Es ist Winter

Februar 2021 und es ist Winter!
In der vergangenen Nacht hat es hier im nördlichen Münsterland gut geschneit, ich schätze um die 40 cm Schnee ist hier bis zum Abend runtergekommen. Das hiess: Schaufeln, bis der Arzt kommt! Zusammen mit zwei Nachbarn haben meine Frau und ich unseren Wendehammer soweit freigeschaufelt, dass man wenigstens mit den Autos rauskommt, bzw. dass im Notfall (man weiss ja nie) ein Rettungswagen reinkommt.
Da auf der anderen Seite unseres Grundstücks eine Kreisstraße vorbeiführt (die aber Nebenstraßencharakter hat), dachte ich ja, dass vielleicht mal ein Schneeräumfahrzeug vorbeikommt, die sind aber auf den Autobahnen und großen Landstraßen unterwegs.

Ich kenne solche "Schneekatastrophen" ja aus meiner Jugend. Für mich ist das einfach nur...Winter.

WhatsApp ist Geschichte

Ich habe meinen Account bei WhatsApp gelöscht, die App von meinem Handy runtergeworfen. Ja, die Daten bleiben auf ewig bei Facebook, aber diese werden irgendwann aufgrund ihres Alters eher unbrauchbar.

Als Messenger habe ich nun nur noch Telegram und Signal.

Abkehr von WhatsApp

Ja, ich gebe zu, ich habe WhatsApp installiert, weil es alle hatten. Ein Gruppenzwang also, dem ich mich gebeugt hatte, doch jetzt ist endgültig Feierabend!


WhatsApp gehört zu Facebook, eine Datenkrake, schlimmer als Google. Facebook will nun mehr Daten von WhatsApp-Benutzern haben und nun ist bei mir Schluss:
Ich habe all meinen Kontakten mitgeteilt, dass ich ab Ende Januar nur noch per Telegram oder Signal zu erreichen bin. Sicherlich wird mich der ein oder andere als "Rebell" bezeichnen, eventuell sogar als "Paranoiker", aber ich bin glücklicherweise in einem Alter, in dem mir solche Sprüche am Allerwertesten vorbeigehen.
Signal habe ich übrigens auch gewählt, da es bei IT.NRW der Standardmessenger ist, er ist also als sicher eingestuft worden. Andere Messenger dürfen auf den Diensthandys nicht installiert werden.


In diesem Sinne also: Zuckerberg, du kannst mich mal sonstwo; werde glücklich mit deinem Mist!

Abby hat heute Geburtstag

Unsere Abby hat heute ihren fünften Geburtstag!

Fünf tolle Jahre mit ihr liegen hinter uns und hoffentlich werden es noch viele Jahre mehr.

In diesem Sinne: Herzlichen Glückwunsch, Abby!