in Kürze ist Weihnachten und für meine Kids gibt es dieses Jahr Musikboxen als Überraschung. Der CD-Player hat vor kurzem den Geist aufgegeben und da ich sowieso in jedem Raum zwei Deckenlautsprecher, angesteuert über einen MusicServer4Lox und einen Loxone Verstärker, eingebaut habe, will ich die auch nutzen. Das Prinzip der Toniebox gefällt mir dabei sehr gut: man stellt eine Figur mit integriertem RFID-Chip auf die Box und diese beginnt Lieder oder Geschichten abzuspielen. Ich habe das Ganze nun adaptiert und eine Holzbox gravieren lassen, 5 Taster (Leiser, Lauter, Zurück, Pause/Start, Vorwärts) eingebaut, einen ESP8266 als Controller verwendet und daran noch einen RFID-Reader angeschlossen. Legt man eine RFID-Karte auf den Reader, sendet der ESP8266 (auf dem ESP Easy läuft) die ID des RFID-Tag via WLAN und UDP an den Loxone MS und dieser routet die Kommandos weiter an das Logitech Media Server CLI. Auf dem MusikServer4Lox sind Playlisten hinterlegt, die als Namen die ID der RFID-Tags haben. So startet also eine RFID-Karte eine Playliste auf dem MusikServer4Lox. Was sich darin befindet, kann ich dann frei wählen. Beschriftet man die RFID-Karten nun noch mit passenden bunten Aufklebern, gefällt es bestimmt auch den Kids. Gebaut habe ich insgesamt 3 Musikboxen, zwei für die Kinderzimmer und eine für das Wohnzimmer (jeweils fest mit den zugehörigen Musikzonen verdrahtet).
Alles in allem ein schönes Bastelprojekt
Hier die Verwendeten Komponenten:
- Holzbox inkl. Gravur 11,99 €
- NodeMCU (ESP8266) 5,99 €
- RFID-Reader PN532 6,75 €
- USB-Verlängerungskabel 2,88 €
- Arcade Buttons 5 € (5 x 1 €)
- Forstnerbohrer 4,40 €
- RFID-Karten 100 Stück 29,99 €
- Bedruckbare Adressaufkleber für RFID-Karten 9,73 €
In Summe sind das grob 35-40 € je Box + RFID-Karten. Was da noch fehlt ist ein Micro USB-Netzteil, davon hatte ich aber durch alte Handys und andere Geräte noch genügend zu Hause rumliegen. Außerdem ein paar Leitungen, Schrauben und Winkel aus der Werkzeugkiste.
Anbei noch ein paar Fotos, um einen besseren Eindruck davon zu bekommen.
Edit:
Bauanleitung:
Auf Wunsch, hier noch einige detailliertere Infos zum Projekt:
Musikbox:
Die Musikboxen sind aus Holz. Den passenden Link zum Onlineshop inkl. Lasergravur findet Ihr oben. An den Shopbetreiber sendet man nach dem Kauf ein Bild (PNG, Vektorgrafik, ...) mit dem Gewünschte Layout. Ich habe in Paint.NET einfach die Größe des Boxdeckels als Arbeitsblatt angelegt und dann gezeichnet. Am Schluss hab ich die Layer als PNG in großer Auflösung exportiert und an den Betreiber gesendet. Die Paint.NET-Datei mit den einzelnen Layern findet Ihr hier: Lasergravur Musikbox Bischof.zip Oberhalb der Symbole (Lauter, Leiser, ...) sind noch kleine Punkte eingezeichnet, diese werden ebenfalls mit graviert und dienen als Mittelpunkt für das Bohrloch für die Arcade-Buttons. Den passenden Forstnerbohrer dafür habe ich ebenfalls oben verlinkt. Die Arcade-Buttons werden anschließend in die Bohrungen gesteckt und von unten mit einer Kunststoff-Kontermutter verschraubt.
ESP8266:
Herzstück der Musikbox ist ein ESP8266. Der Controller ist sehr günstig, besitzt WLAN, zahlreiche GPIOs und es hat sich rund um den kleinen Chip eine große Community gebildet. Als Software für den ESP8266 nutze ich ESP Easy. Dabei handelt es sich um eine Applikation mit Weboberfläche, in der man flexibel zahlreiche Sensoren und Aktoren (auch über I²C) anbinden kann. Zusätzlich kann man über Regeln Befehle empfangen und versenden. Als Release habe ich die Version "Release mega-20191208" genommen, es sollten aber auch nachfolgende Release kein Problem sein. Als erstes flasht man über USB den ESP8266 um die Steuerungssoftware zu laden (siehe Readme im Download des Releases). Meine Konfiguration findet Ihr hier: config.zip damit sind gleich die ganzen Ausgänge und Eingänge definiert, wenn man diese beim Flashen gleich mit hochläd (geht auch im Nachhinein in der Weboberfläche).
Als nächstes muss man den ESP8266 mit den Sensoren verdrahten. Der PN532 (RFID-Reader) wird über den I²C Bus an den ESP angeschlossen. Wichtig, vorab muss der I²C Modus über die DIP-Schalter am PN532 aktiviert werden. Danach verbindet man SCL (D1 bzw. GPIO 5) und SDA (D2 bzw. GPIO4) des ESP8266 mit dem PN532. Zusätzlich werden ebenfalls noch GND mit dem G des ESP und Vin (5V) auf VCC des PN532, sowie D0 (bzw. GPIO16) mit dem Pin RSTPDN (nicht RSTO) des PN532 verbunden. Die Arcade-Buttons werden alle auf einer Seite mit 5 GND verbunden und nach meiner Konfiguration auf der anderen Seite folgendermaßen belegt:
Leiser: D5 bzw GPIO14
Lauter: D6 bzw GPIO12
Zurück: D7 bzw GPIO13
Pause/Start: SD2 bzw GPIO9
Vorwärts: SD3 bzw GPIO10
Was dann noch fehlt, sind die Rules. Also die Regeln, wenn ein Ereignis auftritt (RFID-Tag eingelesen, Taster gedrückt, ...), dass per UDP ein Wert an den Miniserver geschickt wird. Wie die Rules in der Weboberfläche aktiviert werden, findet Ihr hier. Folgende Rules nutze ich: ESPEasyRules.txt Kurz zur Erklärung der Rules. Die unteren 5 Regeln schicken beim Drücken der 5 Buttons jeweils eine 1 an den Miniserver. Im oberen Bereich kümmere ich mich um den RFID-Tag. Das Problem ist, dass sobald sich ein RFID-Tag auf dem Lesegerät befindet, alle 300 ms das Event "on RFID#Tag do" ausgelöst wird. Mit der oberen Logik prüfen ich ob sich innerhalb von einer Sekunde der letzte Zustand (RFID-Tag vorhanden oder nicht) geändert hat und sende nur bei einer Änderung den geänderten Wert (also die ID des RFID-Tags oder 0). Für jede der 5 Buttons und für den RFID-Tag nutze ich einen separaten UDP Port 5100-5105, alle werden an die IP des Miniservers 192.168.1.9 geschickt.
Loxone:
In Loxone muss man nun auf die 6 UDP-Ports lauschen. Dies mache ich mit virtuellen UDP Eingängen. Alle Eingänge haben als Befehlserkennung den Wert "\v". Die 5 Buttons haben den Haken "Als Digitaleingang verwenden" aktiviert, der UDP-Port des RFID-Tags nicht.
Die Werte werden dann 1:1 an virtuelle Ausgänge weitergegeben, bei dem die TCP-Adresse des Musikservers in das Feld "Adresse" eingetragen wird: "tcp://192.168.1.11:9090". 9090 ist dabei der Port des Logitech Mediaserver (LMS) CLI, dabei handelt es sich um das Command Line Interface zur Steuerung des MusikServer4Lox per Commandozeile oder eben wie hier per TCP-Aufruf. Einzige Ausnahme ist der RFID-Tag, Loxone scheint den eingehenden Wert als Zahl zu interpretieren (um genau zu sein als int32) und hat Probleme bei Zahlen die größer sind als die größte int32 Zahl. Daher jage ich die Zahl noch durch einen Statusbaustein und gebe den Wert hinten einfach 1:1 als Text aus, das klappt bei mir wunderbar. Hier die Befehle zur Steuerung des LMS via TCP:
Leiser: 01:d5:5e:14:13:2f mixer volume -10\r
Lauter: 01:d5:5e:14:13:2f mixer volume +10\r
Zurück: 01:d5:5e:14:13:2f playlist index -1\r
Pause/Start: 01:d5:5e:14:13:2f pause\r
Vorwärts: 01:d5:5e:14:13:2f playlist index +1\r
Playliste starten: 01:d5:5e:14:13:2f playlist play <v>\r
Alle Befehle beginnen mit der MAC-Adresse des jeweiligen Players, diese findet Ihr im Webinterface des LMS unter Einstellungen->Player. Beim Befehl zum Starten der Playliste, wird noch die ID des RFID-Tags übergeben. Unter dieser ID muss auf dem MusicServer4Lox dann auch eine Playliste hinterlegt werden, die er starten soll. Dies bedeutet, wenn Ihr eine neue RFID-Karte einlernen wollt, lest die RFID aus, legt eine Playliste mit der ID des RFID-Tags als Name im LMS an und mehr müsst ihr nicht machen.
Beste Grüße,
Hannes
Kommentar