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

Daten per Websocket austauschen

Der Websocket-Standard definiert nicht, wie die Daten aussehen müssen, die per Websocket ausgetauscht werden. Wir benutzen JSON, in anderen Anwendungen ist womöglich die direkte Übergabe von HTML sinnvoll, oder es wird eine Kommandozeile nachgeahmt.

Wir haben uns für JSON entschieden, da wir damit eine komplette - und beliebig erweiterbare - Datenstruktur in Textform übertragen können, aber dafür keinen Parser implementieren müssen. JSON zu codieren und decodieren, beherrschen Browser wie auch Node.js direkt.

Anzeige

Damit der Client per Websocket eine Aktion auf dem Server auslösen kann, übermittelt er ein Objekt mit bis zu zwei Eigenschaften: cmd enthält den Namen eines Befehls in Textform und vol einen angestrebten Lautstärkewert.

Der Websocket-Server setzt diese Anweisungen in die entsprechenden Bluetooth-Anweisungen um. Wenn die cmd-Eigenschaft einen gültigen Wert besitzt, dann wird die dem Kommando zugeordnete Zahl ermittelt und diese an die CMD-Characteristic geschrieben. Ist die vol-Eigenschaft gesetzt, wird hingegen deren Wert in die VOL-Characteristic geschrieben. Bei einem Kommando sendet der Server das übermittelte Objekt zurück an den befehlenden Client, ergänzt um eine Eigenschaft, success. Sie ist true, wenn eine Aktion erfolgreich ausgeführt wurde. Das bedeutet aber nur, dass der Server kein Problem mit dem Befehl hatte. Eine Erfolgsmeldung, dass dieser tatsächlich beim Peripheral ankam und umgesetzt wurde, ist es nicht.

Eine Erfolgsmeldung dieser Art haben wir nur indirekt umgesetzt: Empfängt das Peripheral-Skript einen Befehl über die CMD-Characteristic, dann übermittelt es über die TRK-Characteristic den Namen des aktuellen Titels. Wurde hingegen über die VOL-Characteristic die Lautstärke geändert, dann übermittelt diese Characteristic ihrerseits den tatsächlich gesetzten Wert zurück.

Der Server erhält beide Arten von Benachrichtigungen, weil er die TRK- und VOL-Characteristic abonniert hat. Trifft eine entsprechende Benachrichtigung ein, dann übermittelt der Server an alle Clients ebenfalls ein Objekt analog zur obigen Erfolgsmeldung. Der einzige Unterschied ist ein leeres Feld für die cmd-Eigenschaft.

  1. function handleService(service) {
  2.  
  3. service.discoverCharacteristics([], function(error, characteristics) {
  4. ...
  5.  
  6. switch(characteristics[i].uuid) {
  7. ...
  8. case UUID_CHARACTERISTIC_VOL :
  9. vol_char = characteristics[i];
  10. vol_char.notify(true);
  11. vol_char.on('read', function(value, isNotification) {
  12. ...
  13. message.volume = value.readUInt8(0);
  14.  
  15. if(connections.length) {
  16. ...
  17. connections[i].sendText(JSON.stringify(message));
  18. ...
  19. }
  20. });
  21. break;
  22. ...
  23. }
  24. ...
  25. }
  26. }

Im Normalfall zieht ein Befehlsaufruf vom Client an den Server also immer zwei Benachrichtigungen des Servers an den befehlenden Client nach sich: einmal nach dem Versand eines Kommandos über Bluetooth und einmal die Benachrichtigung vom Peripheral.

 Mittler zwischen den WeltenBinäre Daten statt Text 

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. Kommunale Datenverarbeitung Oldenburg (KDO), Oldenburg
  2. Robert Bosch GmbH, Stuttgart
  3. über Duerenhoff GmbH, Raum Landsberg am Lech
  4. Siemens Postal, Parcel & Airport Logistics GmbH, Nürnberg


Anzeige
Top-Angebote
  1. 429,00€ statt 469,00€
  2. 62,90€ statt 69,90€
  3. (heute u. a. Fire-Tablets günstiger, DC-Filme und Serien reduziert, Sigma-Objektive reduziert)

Folgen Sie uns
       


  1. Siri-Lautsprecher

    Apple versemmelt den Homepod-Start

  2. Open Routing

    Facebook gibt interne Plattform für Backbone-Routing frei

  3. Übernahme

    Vivendi lässt Ubisoft ein halbes Jahr in Ruhe

  4. Boston Dynamics

    Humanoider Roboter Atlas macht Salto rückwärts

  5. Projekthoster

    Github zeigt Sicherheitswarnungen für Projektabhängigkeiten

  6. Sicherheitslücke bei Amazon Key

    Amazons Heimlieferanten können Cloud Cam abschalten

  7. Luftfahrt

    China plant Super-Windkanal für Hyperschallflugzeuge

  8. Quad9

    IBM startet sicheren und datenschutzfreundlichen DNS-Dienst

  9. Intel

    Ice-Lake-Xeon ersetzt Xeon Phi Knights Hill

  10. Star Wars Jedi Challenges im Test

    Lichtschwertwirbeln im Wohnzimmer



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Universal Paperclips: Mit ein paar Sexdezillionen Büroklammern die Welt erobern
Universal Paperclips
Mit ein paar Sexdezillionen Büroklammern die Welt erobern
  1. Disney Marvel Heroes wird geschlossen
  2. Starcraft 2 Blizzard lästert über Pay-to-Win in Star Wars Battlefront 2
  3. Free to Play World of Tanks bringt pro Nutzer und Monat 3,30 Dollar ein

Star Wars Battlefront 2 im Test: Filmreife Sternenkrieger
Star Wars Battlefront 2 im Test
Filmreife Sternenkrieger
  1. Electronic Arts Community empört über freischaltbare Helden in Battlefront 2
  2. Star Wars Mächtiger Zusatzinhalt für Battlefront 2 angekündigt
  3. Star Wars Battlefront 2 angespielt Sammeln ihr sollt ...

Coffee Lake vs. Ryzen: Was CPU-Multitasking mit Spielen macht
Coffee Lake vs. Ryzen
Was CPU-Multitasking mit Spielen macht
  1. Custom Foundry Intel will 10-nm-Smartphone-SoCs ab 2018 produzieren
  2. ARM-Prozessoren Macom verkauft Applied Micro
  3. Apple A11 Bionic KI-Hardware ist so groß wie mehrere CPU-Kerne

  1. Re: Netzwerkanschluss Geschwindigkeit

    robinx999 | 20:23

  2. Re: TabBar

    Cok3.Zer0 | 20:21

  3. Re: Ist das somit ein Staupilot, welcher Slalom...

    smarty79 | 20:17

  4. Re: Dumme Frage: Generelles Öffnen von neuen...

    Cok3.Zer0 | 20:13

  5. Re: Nicht für den Straßenverkehr

    ArcherV | 20:13


  1. 19:05

  2. 17:08

  3. 16:30

  4. 16:17

  5. 15:49

  6. 15:20

  7. 15:00

  8. 14:40


  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