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

Mittler zwischen den Welten

Das letzte Skript läuft nun wieder auf dem Raspberry Pi: Es implementiert die Serverseite des Websockets und fungiert zugleich als BluetoothLE Central, Letzteres hin und wieder auch als Server bezeichnet.

Node.js unterstützt - derzeit - keine Websockets direkt, es gibt allerdings mehrere Bibliotheken dafür. Wir benutzen nodejs-websocket. Es ist sehr einfach zu benutzen, bringt aber keine Elemente für komplexere Webanwendungen mit. Hierfür sind unter Node.js zum Beispiel Websocket-Node und TotalJS geeignetere Kandidaten.

Anzeige

Nach Einbindung des Websocket-Moduls wird der Websocket-Server mit createServer() erzeugt, als Parameter übergeben wir eine Callback-Funktion. Sie wird mit einem Connection-Objekt aufgerufen, über das wir die weitere Websocket-Kommunikation abwickeln. Die Callback-Methode wird jedesmal aufgerufen, wenn sich ein Client mit dem Server verbindet. Es reicht also nicht, ein einzelnes Connection-Objekt zu verwalten, sondern es müssen alle einkommenden Objekte verwaltet werden.

Um den Server selbst zu starten, wird dessen Methode listen() mit der Angabe des Ports aufgerufen.

Am Connection-Objekt registrieren wir eine Listener-Funktion für den text-Event mit der Methode on(). Die Listener-Funktion erhält die Daten, welche ein verbundener Client sendet, jeweils als abgeschlossene Zeichenkette. Zum Senden von Daten wird die Methode sendText() verwendet.

  1. var connections = [];
  2. var server = ws.createServer(function (conn) {
  3.  
  4. connections.push(conn);
  5.  
  6. conn.on("text", function (str) {
  7.  
  8. try {
  9. var cmd_data = JSON.parse(str);
  10. } catch(e) {
  11. ...
  12. }
  13.  
  14. if(cmd_data.vol && '' != cmd_data.vol) {
  15. var vol = parseInt(cmd_data.vol);
  16. sendVolume(vol);
  17. return;
  18. }
  19.  
  20. if(cmd_data.cmd && '' != cmd_data.cmd) {
  21. ...
  22. sendCommand(cmd_data.cmd);
  23.  
  24. var message = {
  25. success : true,
  26. cmd = cmd_data.cmd
  27. };
  28.  
  29. conn.sendText(JSON.stringify(message));
  30. return;
  31. }
  32.  
  33. });
  34. }).listen(8001);

Der Bluetooth-Teil auf Basis von Noble enthält soweit keine Überraschungen. Über Noble werden Peripherals gesucht, die unsere spezielle Service-UUID aufweisen. Wurden sie gefunden, können wir mit deren Characteristics arbeiten. Für die Characteristics, welche die Lautstärke und den aktuellen Track übermitteln, werden Abonnements eingerichtet.

 Anzeigen und SendenDaten per Websocket austauschen 

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. thyssenkrupp AG, Duisburg
  2. Endress+Hauser InfoServe GmbH+Co. KG, Weil am Rhein
  3. Springer Nature, Berlin
  4. Online Software AG, Weinheim


Anzeige
Hardware-Angebote
  1. (täglich neue Deals)

Folgen Sie uns
       


  1. Bayerischer Rundfunk

    Fernsehsender wollen über 5G ausstrahlen

  2. Kupfer

    Nokia hält Terabit DSL für überflüssig

  3. Kryptowährung

    Bitcoin notiert auf neuem Rekordhoch

  4. Facebook

    Dokumente zum Umgang mit Sex- und Gewaltinhalten geleakt

  5. Arduino Cinque

    RISC-V-Prozessor und ESP32 auf einem Board vereint

  6. Schatten des Krieges angespielt

    Wir stürmen Festungen! Mit Orks! Und Drachen!

  7. Skills

    Amazon lässt Alexa natürlicher klingen

  8. Cray

    Rechenleistung von Supercomputern in der Cloud mieten

  9. Streaming

    Sky geht gegen Stream4u.tv und Hardwareanbieter vor

  10. Tado im Langzeittest

    Am Ende der Heizperiode



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
3D-Druck bei der Bahn: Mal eben einen Kleiderhaken für 80 Euro drucken
3D-Druck bei der Bahn
Mal eben einen Kleiderhaken für 80 Euro drucken
  1. Bahnchef Richard Lutz Künftig "kein Ticket mehr für die Bahn" notwendig
  2. Flatrate Öffentliches Fahrradleihen kostet 50 Euro im Jahr
  3. Nextbike Berlins neues Fahrradverleihsystem startet

Google I/O: Google verzückt die Entwickler
Google I/O
Google verzückt die Entwickler
  1. Neue Version im Hands On Android TV bekommt eine vernünftige Kanalübersicht
  2. Play Store Google nimmt sich Apps mit schlechten Bewertungen vor
  3. Daydream Standalone-Headsets auf Preisniveau von Vive und Oculus Rift

Panasonic Lumix GH5 im Test: Die Kamera, auf die wir gewartet haben
Panasonic Lumix GH5 im Test
Die Kamera, auf die wir gewartet haben
  1. Die Woche im Video Scharfes Video, spartanisches Windows, spaßige Switch

  1. Re: macht Tesla nicht übermäßig viel Miese mit...

    Berner Rösti | 21:28

  2. Re: Und gleich mal wieder die GEZ dafür erhöhen...

    Niaxa | 21:26

  3. Re: Frequenzvermüllung

    emuuu | 21:20

  4. Re: 25MBit/s - wann begreifen die endlich, dass...

    Apfelbrot | 21:19

  5. Re: an Golem: Videos bitte wieder download-bar...

    ksi | 21:12


  1. 18:45

  2. 16:35

  3. 16:20

  4. 16:00

  5. 15:37

  6. 15:01

  7. 13:34

  8. 13:19


  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