spo­ti­fy con­nect und air­play laut­spre­cher für 100 eu­ro

felix schwenzel in artikel

nach­dem wir uns vor ein paar mo­na­ten ei­nen neu­en re­cei­ver von ya­ma­ha ge­kauft ha­ben, hat­ten wir auch ei­nen mus­sic­cast-laut­spre­cher dazu ge­kauft, der re­gu­lär 229 euro kos­tet. die ya­ma­ha-laut­spre­cher ha­ben zwar „mul­ti­room“-fä­hig­kei­ten, man kann also die glei­che mu­sik in meh­re­ren räu­men spie­len, aber sie sind mono und die bei­fahr­fe­rin fand den klang so schlecht, dass sie das teil ei­gent­lich zu­rück­ge­ben woll­te. weil das kind den laut­spre­cher ok fand, ha­ben wir ihn dann doch be­hal­ten, aber das kind durf­te ihn nach sei­nem aus­zug mit­neh­men. das ding funk­tio­niert auch stan­da­lo­ne als air­play und spo­ti­fy-con­nect-laut­spre­cher.

jetzt woll­te die bei­fah­re­rin die mu­sik­lü­cke im kin­der­zim­mer schlies­sen und neue laut­spre­cher kau­fen. die ya­ma­ha-mu­sic­cast-laut­spre­cher wa­ren ihr aber zu teu­er und zu mono. die kön­nen zwar auch ste­reo, aber dann müss­te man zwei kau­fen und ist ruck­zuck fast 500 euro los. also ent­schie­den wir uns we­gen gu­ter re­zen­sio­nen für ein paar „dum­me“ — ge­nau­er: un­ver­netz­te — ak­tiv­laut­spre­cher für 40 euro. ich dach­te mir, dass ich mir mei­nen ers­ten raspber­ry-pi kau­fe und ir­gend­was bast­le, um die laut­spre­cher zu ver­net­zen.

die laut­spre­cher ka­men ein paar tage vor dem ra­spi und hör­ten sich für 40 euro wirk­lich gut an. nur das ipho­ne ma­nu­ell an­zu­stöp­seln zum mu­sik­hö­ren fühl­te sich enorm un­prak­tisch und hin­ter­wäl­de­risch an. als der raspber­ry end­lich da war, in­stal­lier­te ich das kom­plett­pa­ket pi­mu­sic­box drauf. das ist wirk­lich ein­fach: image down­loa­den, auf eine SD-kar­te ko­pie­ren, in den ra­spi ste­cken, erst mit ether­net­ka­bel boo­ten und dann die wich­tigs­ten ein­stel­lun­gen über eine web­sei­te kon­fi­gu­rie­ren. wenn der pi da­nach neu boo­tet, ver­bin­det er sich per wlan und wird von rech­nern und te­le­fo­nen als air­play-laut­spre­cher er­kannt. über eine web­ober­flä­che kann man auch play­lis­ten er­stel­len, lo­kal auf dem pi vor­han­de­ne mu­sik ab­spie­len oder von netz­lauf­wer­ken mu­sik ab­spie­len. es gibt auch eine spo­ti­fy-in­te­gra­ti­on, die aber eher um­ständ­lich über die web­ober­flä­che ge­steu­ert wer­den will.

in zei­ten von spo­ti­fy-con­nect will das aber ei­gent­lich kei­ner, also wir zu­min­dest nicht. wenn der spo­ti­fy-cli­ent auf dem te­le­fon oder dem rech­ner läuft, will die bei­fah­re­rin den laut­spre­cher am liebs­ten per spo­ti­fy-con­nect an­steu­ern, vor al­lem weil sie meint, dass über air­play im­mer wie­der ruck­ler (alle 1-2 stun­den) zu be­mer­ken wä­ren. spo­ti­fy-con­nect kön­nen der ya­ma­ha-re­cei­ver und der echo dot in der kü­che auch und es fühlt sich an, wie das per­fek­te, rei­bungs­lo­se be­dien­kon­zept.

rich­tig be­frie­di­gen­de lö­sun­gen spo­ti­fy-con­nect auf den pi zu brin­gen gibt’s nicht so vie­le. wenn man das the­ma goo­gelt, schla­gen vie­le vor, ei­nen li­nux-spo­ti­fy-cli­ent auf dem pi zu in­stal­lie­ren, kom­plett mit x-win­dows und ge­döns. an­de­re lö­sun­gen wol­len ei­nen spo­ti­fy-API-key, den spo­ti­fy aber nicht mehr raus­rückt. dann fand ich ir­gend­wo ei­nen hin­weis auf li­bre­spot, ei­nen re­ver­se en­gi­neer­ten spo­ti­fy-con­nect-cli­ent. die kom­pi­lie­rung von li­bre­spot schien mir aber ein ti­cken zu schwer, wes­halb ich froh war ei­nen hin­weis auf den fork von @herr­ernst zu fin­den, der vor­kom­pi­lier­te bi­när­da­tein von li­bre­spot zum down­load an­bie­tet.

ein­fach run­ter­la­den, aus­pa­cken und star­ten:

da­mit taucht der raspber­ry-pi-laut­spre­cher schon als spo­ti­fy-con­nect laut­spre­cher in der spo­ti­fy-app auf.

da­mit wa­ren 80% der ar­beit an ei­nem abend er­le­digt: der pi hat­te ein be­trieb­sys­tem, lief rund und war mit dem wlan ver­bun­den, ohne dass ich auch nur eine zei­le in die kom­man­do­zei­le schrei­ben muss­te, die laut­spre­cher wa­ren per air­play und spo­ti­fy-con­nect er­reich­bar und al­les klang gut.

na gut ein biss­chen muss­te ich doch in der kom­man­do­zei­le rum­wer­keln, weil air­play nicht auf an­hieb funk­tio­nier­te. ich folg­te die­ser an­wei­sung um das pro­blem zu be­he­ben und de­ak­ti­vier­te den fire­wall von pi­mu­sic­box in­dem ich die ers­te (bzw. zwei­te) zei­le der da­tei aus­kom­men­tier­te.

die rest­li­chen 20% ar­beit, li­bre­spot au­to­ma­tisch zu star­ten und am lau­fen zu hal­ten, hiel­ten mich dann die fol­gen­den zwei wo­chen auf trab.


die pi­mu­sic­box star­tet die kon­fi­gu­rier­ten diens­te, wie bei li­nux üb­lich, über init-dae­mons und sorgt mit ei­nen mo­nit-ser­ver-dienst daür, das ein paar der beim boo­ten ge­star­te­tet pro­zes­se über­wacht und im zwei­fel neu ge­star­tet wer­den. für li­bre­spot habe ich mir das start­script erst­mal selbst zu­sam­men­ge­stöp­selt und da­bei ist das raus­ge­kom­men:

da­mit lässt sich dann (da­hin habe ich die aus­führ­ba­re bi­när­da­tei ver­schie­ben) star­ten, stop­pen und ab­fra­gen:

da­mit mo­nit sich um den dienst küm­mert habe ich noch die­se klei­ne mo­nit-start­da­tei in ge­legt:

da­mit li­bre­spot di­rekt nach dem start­vor­gang star­tet (und nicht erst wenn mo­nit den dienst star­tet), habe ich die­se letz­te zei­le in der da­tei hin­zu­ge­fügt:


oben habe ich es aus­kom­men­tiert, aber ich nut­ze noch eine op­ti­on von li­bre­spot um den ab­spiel­sta­tus in mei­nem home-as­sistant an­zu­zei­gen. gibt man li­bre­spot die start­op­tio­nen und mit, kann es zum start und stop des play­backs eine da­tei aus­füh­ren. ich las­se li­bre­spot je zwei klei­ne py­thon-scrip­te aus­füh­ren, die den sta­tus per mqtt ver­öf­fent­li­chen, was ich dann im home-as­si­tant an­zei­gen las­sen kann. in steht:

un­ter­schei­det sich le­dig­lich im pay­load der mqtt-nach­richt. das py­thon-script funk­tio­niert na­tür­lich nur, wenn man die ent­spre­chen­den ab­hän­gig­kei­ten vor­her in­stal­liert, also min­des­tens py­thon und paho-mqtt.


li­bre­spot funk­tio­niert ei­gent­lich ganz gut. manch­mal, nach län­ge­rem leer­lauf stürzt das pro­gramm aber ab, ver­mut­lich weil eine der ver­bin­dun­gen zu spo­ti­fy ab­ge­bro­chen ist und das pro­gramm sich lie­ber pa­nisch ab­bricht, als die ver­bin­dung neu auf­zu­bau­en. das fängt dann aber mo­nit ab, das den li­bre­spot-pro­zess wie­der neu­star­tet, in der stan­dard­e­instal­lung al­ler­dings un­ter um­stän­den erst nach zwei mi­nu­ten, weil der prüf­zy­klus von mo­nit stan­dard­mäs­sig auf zwei mi­nu­ten ge­stellt ist. das lässt sich aber in an­pas­sen, in­dem man statt ein­trägt.

dazu kommt, dass spo­ti­fy das re­ver­se-en­gi­neer­te li­bre­spot wohl nicht mehr so ger­ne sieht und im­mer wie­der sperrt oder än­de­run­gen an der (un­do­ku­men­tier­ten) API vor­nimmt. @pli­e­tar bes­sert li­bre­spot zwar im­mer schnell nach, aber bei den letz­ten än­de­run­gen ist @her­renst mit sei­nen bi­na­ries nicht im­mer nach­ge­kom­men.

zu­erst habe ich ver­sucht li­bre­spot selbst auf dem pi zu kom­pi­lie­ren, bin aber dar­an ge­schei­tert die ent­spre­chen­den ab­hän­gig­kie­ten (hun­der­te von me­ga­byte) zu in­stal­lie­ren, bzw. zum lau­fen zu brin­gen. ich habe mit ras­po­ti­fy von @dt­coo­per aber ei­nen ein­fa­chen weg ge­fun­den, li­bre­spot selbst zu kom­pi­lie­ren: per do­cker auf dem mac. nach­dem do­cker in­stal­liert ist, reicht es fol­gen­des in der kom­man­do­zei­le aus­zu­füh­ren und ein biss­chen zu war­ten:

am ende spuckt das script eine .deb-da­tei aus, die man auf dem pi in­sta­lie­ren kann: ein­fach in ko­pie­ren und auf dem pi fol­gen­des in der kom­man­do­zei­le aus­füh­ren (je nach­dem wie die .deb-da­tei be­nannt ist):

da­mit lan­det li­bre­spot in , also da wo das start-script die da­tei auch er­war­tet.

den letz­ten li­bre­spot-fix von ges­tern habe ich ein­fach in selbst ge­patcht und dann al­les neu kom­pi­liert. bis jetzt funk­tio­niert es.


tl;dr: statt knapp 500 euro aus­zu­ge­ben, habe ix ein­fach sehr güns­ti­ge, dum­me, un­ver­netz­te [-wer­be­link] ak­tiv­laut­spre­cher mit ei­nem [-wer­be­link] raspbe­ry pi ver­netzt und da­mit nur knapp 100 euro aus­ge­ge­ben und viel bas­tel­ver­gnü­gen ge­habt.