Abo
  • Services:
Anzeige
Raspberry Pi mit Touchscreen-Display und Bluetooth-Dongle
Raspberry Pi mit Touchscreen-Display und Bluetooth-Dongle (Bild: Fabian Hamacher/Golem.de)

Anzeigen und Senden

Da wir serverseitig JSON als Datenformat für die übertragenen Daten vorgegeben haben, wird der Parameter entsprechend geparst. Dadurch erhalten wir eine Datenstruktur, die unter anderem den Namen des aktuellen Titels und die Lautstärke enthält. Diese Informationen werden direkt in die entsprechenden HTML-Elemente eingetragen.

Die Buttons sind mit onclick-Events versehen und rufen damit die send()-Funktion mit dem jeweiligen Kommando als Parameter auf. Diese Funktion ruft ihrerseits die send()-Methode des Websocket-Objekts auf. Gesendet wird dabei auch wieder eine Datenstruktur, die per JSON in Text umgewandelt wurde.

Anzeige

...
<button id="btnPlay" onclick="send(COMMAND_PLAY)">Play</button>
<button id="btnStop" onclick="send(COMMAND_STOP)">Stop</button>
...

  1. function send(val) {
  2.  
  3. if(con == null) {
  4. return;
  5. }
  6.  
  7. if(COMMAND_VOLUP == val) {
  8. con.send(JSON.stringify({vol:volume+1}));
  9. } else if(COMMAND_VOLDOWN == val) {
  10. con.send(JSON.stringify({vol:volume-1}));
  11. } else {
  12. var cmd_data = {cmd:val};
  13. con.send(JSON.stringify(cmd_data));
  14. }
  15. }

Das ist tatsächlich alles, mehr ist für eine bidirektionale Kommunikation nicht notwendig. AJAX und REST-APIs wirken dagegen komplizierter.

Musikplayer ansteuern

Bevor wir zur Serverkomponente für den Websocket kommen, betrachten wir noch das Skript zur Ansteuerung des Musikplayers. Es empfängt über Bluetooth Low Energy die Kommandos und steuert davon abhängig per Kommandozeile den Musikplayer. Wir setzten dazu iTunes ein, das sich im laufenden Betrieb per Applescript steuern lässt. Je nach Kommando ermittelt es auch die aktuell eingestellte Lautstärke und den laufenden Track, ebenfalls per Applescript. Beide Infos werden asynchron über BluetoothLE wieder übermittelt. Applescript und iTunes sind kein Muss, aber unter Mac OS praktisch. Unter anderen Betriebssystemen, insbesondere unter Linux, gibt es vergleichbare Optionen.

Mit dem Skript wird der Laptop zum angesteuerten BluetoothLE-Peripheral. In unserem Vorgängerartikel diente der Laptop dagegen als steuernde BluetoothLE-Central. Die Umsetzung erfolgt auf Basis der Node.js-Bibliothek Bleno.

Beim Peripheral wird ein Service mit drei Characteristics definiert: Die Kommando-Characteristic (CMD) kann beschrieben werden, darüber setzen wir das auszuführende Kommando, codiert als Zahl. Die Lautstärke-Characteristic (VOL) kann gelesen, abonniert und beschrieben werden. Das heißt: Darüber erhalten wir die aktuell eingestellte Lautstärke, oder wir können die Lautstärke in Prozent setzen (0 - 100%). Eine reine Characteristic zum Lesen ist schließlich Track (TRK) für den aktuell abgespielten Titel.

Das Kommando codieren wir aus Gründen der Datensparsamkeit als Zahl. Wer will, kann stattdessen auch Zeichenketten benutzen, was allerdings die Datenübertragung verlängert.

 Websocket öffnenMittler zwischen den Welten 

eye home zur Startseite
Anonymer Nutzer 28. Jul 2014

Ich würde sagen hier könnte man eleganter und auch verhältnismäßig preiswert mit Zigbee...

savejeff 24. Jul 2014

perfekt! die Artikel sind echt zeitlos. ich werde noch ein paar Artikel nachholen.

holminger 24. Jul 2014

Meine RasPis dienen einmal als AirPrint-Server für einen 15 Jahre alten Kyocera...

currock63 23. Jul 2014

die guten alten Zeiten der c't, als es noch in fast jeder Ausgabe etwas zum selber...



Anzeige

Stellenmarkt
  1. Basler AG, Ahrensburg bei Hamburg
  2. Springer Nature, Berlin
  3. USU AG, Möglingen bei Stuttgart oder Home-Office deutschlandweit
  4. Fresenius Medical Care Deutschland GmbH, Bad Homburg


Anzeige
Top-Angebote
  1. 47,99€
  2. und For Honor oder Ghost Recon Wildlands kostenlos erhalten
  3. (-17%) 49,99€ - Release am Donnerstag

Folgen Sie uns
       


  1. Energielabels

    Aus A+++ wird nur noch A

  2. Update 1.2

    Gog.com-Client erhält Cloud-Speicheroption und fps-Zähler

  3. HTTPS

    US-Cert warnt vor Man-In-The-Middle-Boxen

  4. Datenrate

    Facebook und Nokia bringen Seekabel ans Limit

  5. Grafikkarte

    Zotac will die schnellste Geforce GTX 1080 Ti stellen

  6. Ab 2018

    Cebit findet künftig im Sommer statt

  7. Google

    Maps erlaubt Teilen des eigenen Standortes in Echtzeit

  8. Datengesetz geplant

    Halter sollen Eigentümer von Fahrzeugdaten werden

  9. Nintendo Switch

    Leitfähiger Schaumstoff löst Joy-Con-Probleme

  10. Stack Overflow

    Deutsche Entwickler fühlen sich unterbezahlt



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Lithium-Akkus: Durchbruch verzweifelt gesucht
Lithium-Akkus
Durchbruch verzweifelt gesucht
  1. Super MCharge Smartphone-Akku in 20 Minuten voll geladen
  2. Brandgefahr HP ruft über 100.000 Notebook-Akkus zurück
  3. Brandgefahr Akku mit eingebautem Feuerlöscher

Airselfie im Hands on: Quadcopter statt Deppenzepter
Airselfie im Hands on
Quadcopter statt Deppenzepter
  1. Fiberglas und Magneten Wabbeliger Quadcopter übersteht Stürze
  2. Senkrechtstarter Solardrohne fliegt wie ein Harrier
  3. Mobiler Startplatz UPS-Lieferwagen liefert mit Drohne Pakete aus

"Mehr Breitband für mich": Was wurde aus dem FTTH-Ausbau der Telekom für Selbstzahler?
"Mehr Breitband für mich"
Was wurde aus dem FTTH-Ausbau der Telekom für Selbstzahler?
  1. 50 MBit/s Dobrindt glaubt weiter an bundesweiten Ausbau bis 2018
  2. Breitbandgipfel 2.000 Euro für FTTH im Gewerbegebiet sind akzeptiert
  3. Breitbandgipfel Telekom hält 100 MBit/s für "im Moment ausreichend"

  1. Re: Habs doch schon, nannte sich Google latitude

    __destruct() | 03:07

  2. Re: Betrifft alle Streamer?

    Apfelbrot | 03:03

  3. Re: Problem erkannt, Problem wiederholt.

    GenXRoad | 02:59

  4. Re: Leider alternativ-los...

    Apfelbrot | 02:59

  5. Re: Nonsense!

    Apfelbrot | 02:57


  1. 18:59

  2. 18:42

  3. 18:06

  4. 17:39

  5. 17:10

  6. 16:46

  7. 16:26

  8. 16:24


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel