EVENTDISTR: Unterschied zwischen den Versionen
(→NowPlaying: Null-Pakete, um beendete Wiedergabe zu signalisieren) |
K (→NowPlaying: Lounge -> Chillraum) |
||
(4 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | {{Projekt|kontakt=[[Benutzer:Daniel Bohrer|Daniel Bohrer]], [[Benutzer:chrissi^|chrissi^]]|status=aktiv|beschreibung=Paketspezifikation für Events aller Art|bild= | + | {{Projekt|kontakt=[[Benutzer:Daniel Bohrer|Daniel Bohrer]], [[Benutzer:chrissi^|chrissi^]]|status=aktiv|beschreibung=Paketspezifikation für Events aller Art|bild=EVENTDISTR Wireshark.png|bildbeschreibung=Beispiel-Paket in Wireshark}} |
− | + | {{Hinweis|Die Schlüsselwörter MUSS, DARF NICHT, ERFORDERLICH, SOLL, SOLL NICHT, SOLLTE, SOLLTE NICHT, EMPFOHLEN, KANN und OPTIONAL in dieser Spezifikation sollen wie in RFC 2119 beschrieben interpretiert werden.}} | |
− | == | + | Das EVENTDISTR-Protokoll ist ein Netzwerkprotokoll auf Anwendungsebene und spezifiziert ein Paketformat, um Events über das Netzwerk im Space zu verteilen. |
− | + | ||
+ | EVENTDISTR-Pakete SOLLTEN über UDP (RFC 768) an Port 31337 gesendet werden, wobei die Verwendung von TCP und anderen Ports prinzipiell möglich ist. Die Pakete können sowohl als Unicast als auch als Broadcast oder Multicast gesendet werden. | ||
+ | |||
+ | == Paketformat == | ||
+ | EVENTDISTR-Pakete MÜSSEN den folgenden Aufbau haben: | ||
{| class="prettytable" | {| class="prettytable" | ||
Zeile 13: | Zeile 17: | ||
| 10 || <tt>v</tt> || Trennzeichen | | 10 || <tt>v</tt> || Trennzeichen | ||
|- | |- | ||
− | | 11 || Protokollversion || Version des Protokolls in ASCII. Zur Zeit wird Version 2 eingesetzt: ASCII "<tt>2</tt>" == 50 == 0x32. (Siehe auch [[#Changelog]]) | + | | 11 || Protokollversion || Version des Protokolls in ASCII. Implementierungen SOLLTEN frühere Protokollversionen verarbeiten können. Zur Zeit wird Version 2 eingesetzt: ASCII "<tt>2</tt>" == 50 == 0x32. (Siehe auch [[#Changelog]]) |
|- | |- | ||
| 12 || <tt>;</tt> || Trennzeichen | | 12 || <tt>;</tt> || Trennzeichen | ||
|- | |- | ||
− | | 13-… || <tt><i> | + | | 13-… || <tt><i>Name</i>=<i>Wert</i></tt> || Der Rest des Pakets besteht aus dem Namen des Events, OPTIONAL gefolgt von einem Trennzeichen (ASCII "<tt>=</tt>" == 61 == 0x3D) und einem zusätzlichem Wert. Es ist zu beachten, dass einige Implementierungen unter Umständen nicht das komplette Paket verarbeiten, sondern auf eine bestimmte Länge beschränkt sind; die Begrenzung der Länge von Paketen wird jedoch für neue Implementierungen NICHT EMPFOHLEN. Generell SOLLTE RFC 3514 beachtet werden. |
|} | |} | ||
== Events == | == Events == | ||
− | Es folgt eine vollständige Auflistung der zur Zeit | + | Events und Werte können frei gewählt werden, wobei es sinnvoll ist, weit verbreitete Events zu standardisieren. Es folgt deshalb eine vollständige Auflistung der zur Zeit spezifizierten Events, zusammen mit einer Beschreibung, in welchen Fällen sie genutzt werden und ihrer möglichen Werte. |
=== DingDong === | === DingDong === | ||
− | Die Klingel an einer der beiden Haustüren wurde betätigt. | + | Die Klingel an einer der beiden Haustüren wurde betätigt. Dieses Event wird vom [[Doorbell Extender]] verwendet. Das Event kann OPTIONAL die Werte <tt>RISING</tt> oder <tt>FALLING</tt> annehmen, um die steigende oder fallende Flanke zu kennzeichnen. |
Beispiel: | Beispiel: | ||
Zeile 31: | Zeile 35: | ||
=== DoorUnten === | === DoorUnten === | ||
− | Der Türoffnungsknopf am Doorbell Extender wurde betätigt. | + | Der Türoffnungsknopf am Doorbell Extender wurde betätigt. Dieses Event wird vom [[Doorbell Extender]] verwendet. Das Event kann OPTIONAL die Werte <tt>RISING</tt> oder <tt>FALLING</tt> annehmen, um die steigende oder fallende Flanke zu kennzeichnen. |
Beispiel: | Beispiel: | ||
Zeile 38: | Zeile 42: | ||
=== SpaceOpened === | === SpaceOpened === | ||
− | + | Dieses Event wird vom [[statusberry]] gesendet, wenn der Space-Öffnungsstatus auf „offen“ gesetzt wird. Ein Wert SOLLTE nicht gesendet werden. | |
Beispiel: | Beispiel: | ||
Zeile 45: | Zeile 49: | ||
=== SpaceClosed === | === SpaceClosed === | ||
− | + | Dieses Event wird vom [[statusberry]] gesendet, wenn der Space-Öffnungsstatus auf „geschlossen“ gesetzt wird. Ein Wert SOLLTE nicht gesendet werden. | |
Beispiel: | Beispiel: | ||
Zeile 52: | Zeile 56: | ||
=== NowPlaying === | === NowPlaying === | ||
− | Dient zur Ankündigung von aktuell gespielten | + | Dient zur Ankündigung von aktuell gespielten Songtiteln/Interpreten im Space. Der Wert des Events MUSS aus folgenden Feldern bestehen, die jeweils durch Nullbytes abgeschlossen werden: |
− | ;Area: Teilbereich des Spaces, für den das Event gilt. | + | ;Area: Teilbereich des Spaces, für den das Event gilt. Dieses Feld SOLLTE einen der folgenden Werte annehmen: |
:*<tt>A</tt> für den Teilbereich [[Frickelraum]] | :*<tt>A</tt> für den Teilbereich [[Frickelraum]] | ||
− | :*<tt>B</tt> für den Teilbereich [[ | + | :*<tt>B</tt> für den Teilbereich [[Chillraum]] |
:*<tt>0</tt> für den Teilbereich [[Bad]] | :*<tt>0</tt> für den Teilbereich [[Bad]] | ||
:*<tt>K</tt> für den Teilbereich [[Küche]] | :*<tt>K</tt> für den Teilbereich [[Küche]] | ||
− | ;Interpret: Der Interpret des Musikstücks, das zur Zeit im Teilbereich des Spaces gespielt wird | + | ;Interpret: Der Interpret des Musikstücks, das zur Zeit im Teilbereich des Spaces gespielt wird. Dieses Feld SOLLTE im UTF-8-Zeichensatz (RFC 3629, ISO/IEC 10646-1:2000 Annex D) kodiert sein. |
− | ;Title: der Titel des Musikstücks, das zur Zeit im Teilbereich des Spaces gespielt wird | + | ;Title: der Titel des Musikstücks, das zur Zeit im Teilbereich des Spaces gespielt wird. Dieses Feld SOLLTE im UTF-8-Zeichensatz (RFC 3629, ISO/IEC 10646-1:2000 Annex D) kodiert sein. |
− | Falls durch Implementierungen eine Begrenzung der Paketgröße vorgenommen wird, | + | Falls durch Implementierungen eine Begrenzung der Paketgröße vorgenommen wird, KÖNNEN längere Zeichenketten in den Feldern <em>Interpret</em> und <em>Title</em> an geeigneten Stellen durch „<tt>...</tt>“ abgekürzt werden. |
− | + | Mit dem Senden eines gültigen NowPlaying-Events erklärt der Sender die Ungültigkeit aller vorher gesendeten NowPlaying-Events. OPTIONAL kann in diesem Fall auch ein NowPlaying-Event gesendet werden, in dem die Felder ''Interpret'' und ''Title'' die leere Zeichenkette enthalten (bspw. wenn das Ende einer Playlist erreicht wurde und kein neuer Titel folgt). | |
− | Beispiel: Im Frickelraum wird gerade „J. S. Bach: St Matthew Passion, Part I: No. 1. Chorus: Kommt, ihr Töchter, helft mir klagen (Chorus, Soprano in ripieno)“ von „Cologne Chamber Orchestra“ | + | Beispiel: Im Frickelraum wird gerade „J. S. Bach: St Matthew Passion, Part I: No. 1. Chorus: Kommt, ihr Töchter, helft mir klagen (Chorus, Soprano in ripieno)“ von „Cologne Chamber Orchestra“ wiedergegeben. |
0000000: 4556 454e 5444 4953 5452 7632 3b4e 6f77 EVENTDISTRv2;Now | 0000000: 4556 454e 5444 4953 5452 7632 3b4e 6f77 EVENTDISTRv2;Now | ||
Zeile 75: | Zeile 79: | ||
0000060: 312e 2043 686f 7275 733a 204b 6f6d 6d74 1. Chorus: Kommt | 0000060: 312e 2043 686f 7275 733a 204b 6f6d 6d74 1. Chorus: Kommt | ||
0000070: 2c20 6968 7220 54c3 b663 6874 6572 2e2e , ihr T..chter.. | 0000070: 2c20 6968 7220 54c3 b663 6874 6572 2e2e , ihr T..chter.. | ||
− | 0000080: 2e00 | + | 0000080: 2e00 .. |
− | Beispiel: Die Wiedergabe im Frickelraum wurde beendet und es folgt kein weiteres | + | Beispiel: Die Wiedergabe im Frickelraum wurde beendet und es folgt kein weiteres Musikstück. |
0000000: 4556 454e 5444 4953 5452 7632 3b4e 6f77 EVENTDISTRv2;Now | 0000000: 4556 454e 5444 4953 5452 7632 3b4e 6f77 EVENTDISTRv2;Now | ||
Zeile 83: | Zeile 87: | ||
=== VirtualMsg === | === VirtualMsg === | ||
− | + | Dieses Event kann zum Ankündigungen von Nachrichten aus dem virtuellen Raum im Space genutzt werden. Die Nachricht kann z. B. aus dem IRC kommen und im Space auf einer LED-Leiste angezeigt werden. Der Wert des Events MUSS existieren und besteht aus der entsprechenden Nachricht, die angezeigt werden soll. | |
Beispiel: | Beispiel: | ||
Zeile 102: | Zeile 106: | ||
== Implementierungen == | == Implementierungen == | ||
* [https://github.com/stratum0/pyEventdistr pyEventdistr]: Python-Paket mit einigen Scripts um EVENTDISTR-Pakete zu generieren und empfangen (von {{Benutzer|comawill}}) | * [https://github.com/stratum0/pyEventdistr pyEventdistr]: Python-Paket mit einigen Scripts um EVENTDISTR-Pakete zu generieren und empfangen (von {{Benutzer|comawill}}) | ||
+ | * [https://gist.github.com/rohieb/5924296 eventdistr.lua] ist ein Wireshark-Plugin zur Analyse des Protokolls. | ||
[[Kategorie:Dokumentation]] | [[Kategorie:Dokumentation]] | ||
[[Kategorie:Infrastruktur]] | [[Kategorie:Infrastruktur]] |
Aktuelle Version vom 5. November 2014, 00:08 Uhr
EVENTDISTR | |
---|---|
Beispiel-Paket in Wireshark | |
Beschreibung: | Paketspezifikation für Events aller Art |
Kontakt: | Daniel Bohrer, chrissi^ |
Status: | aktiv (Was heißt das?) |
Die Schlüsselwörter MUSS, DARF NICHT, ERFORDERLICH, SOLL, SOLL NICHT, SOLLTE, SOLLTE NICHT, EMPFOHLEN, KANN und OPTIONAL in dieser Spezifikation sollen wie in RFC 2119 beschrieben interpretiert werden.
Das EVENTDISTR-Protokoll ist ein Netzwerkprotokoll auf Anwendungsebene und spezifiziert ein Paketformat, um Events über das Netzwerk im Space zu verteilen.
EVENTDISTR-Pakete SOLLTEN über UDP (RFC 768) an Port 31337 gesendet werden, wobei die Verwendung von TCP und anderen Ports prinzipiell möglich ist. Die Pakete können sowohl als Unicast als auch als Broadcast oder Multicast gesendet werden.
Inhaltsverzeichnis
Paketformat
EVENTDISTR-Pakete MÜSSEN den folgenden Aufbau haben:
Offset (Byte) | Inhalt | Bemerkung |
---|---|---|
0 | EVENTDISTR | Magic String zur Erkennung des Protokolls |
10 | v | Trennzeichen |
11 | Protokollversion | Version des Protokolls in ASCII. Implementierungen SOLLTEN frühere Protokollversionen verarbeiten können. Zur Zeit wird Version 2 eingesetzt: ASCII "2" == 50 == 0x32. (Siehe auch #Changelog) |
12 | ; | Trennzeichen |
13-… | Name=Wert | Der Rest des Pakets besteht aus dem Namen des Events, OPTIONAL gefolgt von einem Trennzeichen (ASCII "=" == 61 == 0x3D) und einem zusätzlichem Wert. Es ist zu beachten, dass einige Implementierungen unter Umständen nicht das komplette Paket verarbeiten, sondern auf eine bestimmte Länge beschränkt sind; die Begrenzung der Länge von Paketen wird jedoch für neue Implementierungen NICHT EMPFOHLEN. Generell SOLLTE RFC 3514 beachtet werden. |
Events
Events und Werte können frei gewählt werden, wobei es sinnvoll ist, weit verbreitete Events zu standardisieren. Es folgt deshalb eine vollständige Auflistung der zur Zeit spezifizierten Events, zusammen mit einer Beschreibung, in welchen Fällen sie genutzt werden und ihrer möglichen Werte.
DingDong
Die Klingel an einer der beiden Haustüren wurde betätigt. Dieses Event wird vom Doorbell Extender verwendet. Das Event kann OPTIONAL die Werte RISING oder FALLING annehmen, um die steigende oder fallende Flanke zu kennzeichnen.
Beispiel:
0000000: 4556 454e 5444 4953 5452 7631 3b44 696e EVENTDISTRv1;Din 0000010: 6744 6f6e 673d 5249 5349 4e47 gDong=RISING
DoorUnten
Der Türoffnungsknopf am Doorbell Extender wurde betätigt. Dieses Event wird vom Doorbell Extender verwendet. Das Event kann OPTIONAL die Werte RISING oder FALLING annehmen, um die steigende oder fallende Flanke zu kennzeichnen.
Beispiel:
0000 4556 454e 5444 4953 5452 7631 3b44 6f6f EVENTDISTRv1;Doo 0010 7255 6e74 656e 3d52 4953 494e 47 rUnten=RISING
SpaceOpened
Dieses Event wird vom statusberry gesendet, wenn der Space-Öffnungsstatus auf „offen“ gesetzt wird. Ein Wert SOLLTE nicht gesendet werden.
Beispiel:
0000000: 4556 454e 5444 4953 5452 7631 3b53 7061 EVENTDISTRv1;Spa 0000010: 6365 4f70 656e 6564 ceOpened
SpaceClosed
Dieses Event wird vom statusberry gesendet, wenn der Space-Öffnungsstatus auf „geschlossen“ gesetzt wird. Ein Wert SOLLTE nicht gesendet werden.
Beispiel:
0000000: 4556 454e 5444 4953 5452 7631 3b53 7061 EVENTDISTRv1;Spa 0000010: 6365 436c 6f73 6564 ceClosed
NowPlaying
Dient zur Ankündigung von aktuell gespielten Songtiteln/Interpreten im Space. Der Wert des Events MUSS aus folgenden Feldern bestehen, die jeweils durch Nullbytes abgeschlossen werden:
- Area
- Teilbereich des Spaces, für den das Event gilt. Dieses Feld SOLLTE einen der folgenden Werte annehmen:
- A für den Teilbereich Frickelraum
- B für den Teilbereich Chillraum
- 0 für den Teilbereich Bad
- K für den Teilbereich Küche
- Interpret
- Der Interpret des Musikstücks, das zur Zeit im Teilbereich des Spaces gespielt wird. Dieses Feld SOLLTE im UTF-8-Zeichensatz (RFC 3629, ISO/IEC 10646-1:2000 Annex D) kodiert sein.
- Title
- der Titel des Musikstücks, das zur Zeit im Teilbereich des Spaces gespielt wird. Dieses Feld SOLLTE im UTF-8-Zeichensatz (RFC 3629, ISO/IEC 10646-1:2000 Annex D) kodiert sein.
Falls durch Implementierungen eine Begrenzung der Paketgröße vorgenommen wird, KÖNNEN längere Zeichenketten in den Feldern Interpret und Title an geeigneten Stellen durch „...“ abgekürzt werden.
Mit dem Senden eines gültigen NowPlaying-Events erklärt der Sender die Ungültigkeit aller vorher gesendeten NowPlaying-Events. OPTIONAL kann in diesem Fall auch ein NowPlaying-Event gesendet werden, in dem die Felder Interpret und Title die leere Zeichenkette enthalten (bspw. wenn das Ende einer Playlist erreicht wurde und kein neuer Titel folgt).
Beispiel: Im Frickelraum wird gerade „J. S. Bach: St Matthew Passion, Part I: No. 1. Chorus: Kommt, ihr Töchter, helft mir klagen (Chorus, Soprano in ripieno)“ von „Cologne Chamber Orchestra“ wiedergegeben.
0000000: 4556 454e 5444 4953 5452 7632 3b4e 6f77 EVENTDISTRv2;Now 0000010: 506c 6179 696e 673d 4100 436f 6c6f 676e Playing=A.Cologn 0000020: 6520 4368 616d 6265 7220 4f72 6368 6573 e Chamber Orches 0000030: 7472 6100 4a2e 2053 2e20 4261 6368 3a20 tra.J. S. Bach: 0000040: 5374 204d 6174 7468 6577 2050 6173 7369 St Matthew Passi 0000050: 6f6e 2c20 5061 7274 2049 3a20 4e6f 2e20 on, Part I: No. 0000060: 312e 2043 686f 7275 733a 204b 6f6d 6d74 1. Chorus: Kommt 0000070: 2c20 6968 7220 54c3 b663 6874 6572 2e2e , ihr T..chter.. 0000080: 2e00 ..
Beispiel: Die Wiedergabe im Frickelraum wurde beendet und es folgt kein weiteres Musikstück.
0000000: 4556 454e 5444 4953 5452 7632 3b4e 6f77 EVENTDISTRv2;Now 0000010: 506c 6179 696e 673d 4100 0000 Playing=A...
VirtualMsg
Dieses Event kann zum Ankündigungen von Nachrichten aus dem virtuellen Raum im Space genutzt werden. Die Nachricht kann z. B. aus dem IRC kommen und im Space auf einer LED-Leiste angezeigt werden. Der Wert des Events MUSS existieren und besteht aus der entsprechenden Nachricht, die angezeigt werden soll.
Beispiel:
0000000: 4556 454e 5444 4953 5452 7631 3b56 6972 EVENTDISTRv1;Vir 0000010: 7475 616c 4d73 673d 3c6a 7261 6e64 6f6d tualMsg=<jrandom 0000020: 6861 636b 6572 3e20 6772 6164 206a 656d hacker> grad jem 0000030: 616e 6420 696d 2073 7061 6365 3f and im space?
- siehe auch StratumPing
Changelog
Version | Datum | Änderung |
---|---|---|
v2 | 2013-06-19 | 100-Byte-Beschränkung aufgehoben, Größe ist jetzt implementierungsspezifisch. --Daniel Bohrer 02:06, 19. Jun. 2013 (CEST) |
Implementierungen
- pyEventdistr: Python-Paket mit einigen Scripts um EVENTDISTR-Pakete zu generieren und empfangen (von comawill)
- eventdistr.lua ist ein Wireshark-Plugin zur Analyse des Protokolls.