Projekt Morgenmuffel = Licht / Ambientsound Wecker

Schon eine Weile hatte ich die Idee einen Wecker zu basteln, der mich sanft mit einer Sonnenaufgangssimulation nebst Ambient Geräuschen weckt.

Dafür bedarf es ein wenig Technik. Ich verwende hierfür einen Raspberry Pi B, dabei dürfte es allerdings egal sein ob A, B oder V2. Die Leistung sollte bei allen reichen. Für die Licht Realisierung habe ich ein LED-Band an einen Mi-Light RGBW Controller angeschlossen und einen Mi-Light Wifi Controller direkt mit dem Fritzbox USB Port verbunden. Leider gibt es hier ein paar technische Limitierungen aber dazu später.

Erst einmal zum Ton, diesen transportiere ich mittels einer airmusic box, einem kleinen upnp Renderer made in china (nicht zu verwechseln mit dem Apfelprodukt), der mittels 3,5mm Klinkenstecker an einer Soundbar hängt.

Nach einer Odyssee der Suche nach einer Lösung per Kommandozeile ein MP3 an die Box zu senden kam ich im Web auf den Hinweis, dass das recht einfach über Curl funktioniert.

Nun, Einfach ist relativ.

In erster Instanz muss man erst einmal herausfinden wie die airmusic Box arbeitet.
Die Basis Informationen entlockt man dem upnp Gerät indem man ein tcpdump dump einholt.
Da dieses nicht auf dem Raspberry vorinstalliert ist muss es ggf. erst installiert werden:

 sudo apt-get install tcpdump 

Nun lässt man tcpdump seine Arbeit erledigen:

  sudo tcpdump -vv -A -s 0 -i eth0 udp port 1900 and host 239.255.255.250 

Device eth0 muss dabei natürlich durch die Netzwerkschnittstelle ersetzt werden die man am Raspberry verwendet.

Als Ergebnis bekommt man eine Liste der im lokalen Netz verfügbaren upnp Geräte.
Darunter auch die airmusic box sofern sie natürlich im Netz angemeldet ist.

In meinem Fall u.a. mit dieser Information:

http://192.168.178.37:49494/description.xml

Die ip weicht vermutlich ab, interessant ist aber die description.xml über die man dann
die weiteren benötigten Informationen erhält indem man sich weiter zu

http://192.168.178.37:49494/upnp/rendertransportSCPD.xml

durchwühlt.

Anschließend kann man sich mit den gewonnen Informationen die gewünschten Kommandozeilen zusammenbasteln. Die jeweiligen verfügbaren "Actions" findet man im rendertransportSCPD.xml.

Um den MP3 Stream zu initiieren, die hervorgehobenen Parameter sind den xml Dateien der Box entnommen:

curl -H 'Content-Type: text/xml; charset=utf-8' -H 'SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"' -d '<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI><![CDATA[http://192.168.178.40/test.mp3]]></CurrentURI><CurrentURIMetaData></CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>' 'http://192.168.178.37:49494/upnp/control/rendertransport1'

Das Mp3 muss sich natürlich an einer gültigen Url befinden. Ich musste feststellen, daß die Box nicht von einem Raspberry mit Hostnamen streamen konnte, von der IP ging es hingegen problemlos.


Abspielen:


curl -H 'Content-Type: text/xml; charset=utf-8' -H 'SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#Play"' -d '<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>' 'http://192.168.178.37:49494/upnp/control/rendertransport1'

Transport info:

curl -H 'Content-Type: text/xml; charset=utf-8' -H 'SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#GetTransportInfo"' -d '<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:GetTransportInfo xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:GetTransportInfo></s:Body></s:Envelope>' 'http://192.168.178.37:49494/upnp/control/rendertransport1'



Position:

curl -H 'Content-Type: text/xml; charset=utf-8' -H 'SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo"' -d '<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:GetPositionInfo xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>3</InstanceID></u:GetPositionInfo></s:Body></s:Envelope>' 'http://192.168.178.37:49494/upnp/control/rendertransport1'

Weitere Actions sind im xml der Box zu finden. Falls curl nicht vorinstalliert ist gilt auch hier:

 sudo apt-get install curl  

Soweit zum ersten Schritt. Im nächsten Teil geht es dann um die Lichtsteuerung.








Comments

Popular posts from this blog

OSDYLS - Open Source DIY Lasertag System #7 IR communication

OSDYLS - Open Source DIY Lasertag System #6 testing all components with the S2 mini