Wiki-Quellcode von Datenbus

Version 1.1 von admin am 2021/11/08 18:17

Zeige letzte Bearbeiter
1 = Datenbus =
2
3 Der Space wird eine Menge von Aktoren, Sensoren und aktuell noch nicht definierte Dinge betreiben. Damit nicht jedesmal ein neues Protokoll zur Kommunikation gelernt werden muss wurde beschlossen mit Dingen über MQTT zu kommunizieren.
4
5 == MQTT ==
6
7 MQTT ist ein offenes und standardisiertes Protokoll. Die Standardisierung wird durch die Organization for the Advancement of Structured Information Standards geleitet[[http://mqtt.org/]]. Das Format der zu übertragenden Daten, der eigentlich Payload, bleibt dabei dem Anwender überlassen. MQTT regelt hierbei nur den Austausch der selbst definierten Daten.
8
9 === Topics ===
10
11 MQTT kann Daten einfach sortieren/kontextualisieren. Dafür werden sogenannte Topics verwendet. Topics bilden Pfade (ähnlich Dateipfaden) in den man Daten veröffentlichen oder von denen man Daten lesen kann (schreiben und lesen wird auch publish und subscribe genannt). So kann man zum Beispiel folgende Struktur erstellen:
12
13 {{code}}
14 * /space/livingroom/temperature
15 {{/code}}
16
17 {{code}}
18 * /space/woodworkshop/temperature
19 {{/code}}
20
21 {{code}}
22 * /space/meetingroom/temperature
23 {{/code}}
24
25 {{code}}
26 * /space/meetingroom/moisture
27 {{/code}} Wenn man alle Temperaturen empfangen will (subscribe) kann man mit Wildcards arbeiten. So kann man im folgendem Beispiel alle defineirten Temperaturen empfangen:
28
29 {{code}}
30 * /space/+/temperature
31 {{/code}} Will man alle Werte empfangen kann man folgende Definition verwenden:
32
33 {{code}}
34 * /space/#
35 {{/code}} Das # Zeichen darf nur am Ende der Topic Definition eingesetzt werden.
36
37 ==== Topicstruktur des ZTL ====
38
39 Innerhalb des Spaces wird folgende Struktur für Topics empfohlen:
40
41 {{code}}
42 * /typ/space/room/nodename/debug
43 {{/code}}
44
45 So kann eine Lampe namens "LedStripe1" im Aufenthaltsraum mit folgender Struktur adressiert werden:
46
47 {{code}}
48 * /light/space/livingroom/LedStripe1/debug
49 {{/code}}
50
51 ===== Beispiel für Licht =====
52
53 Damit nur die Lampe "LedStripe1" gesteuert wird sendet man Meldungen an
54
55 {{code}}
56 * /light/space/livingroom/LedStripe1
57 {{/code}} Damit alle Lampen im "livingroom" gesteuert werden sendet man Meldungen an
58
59 {{code}}
60 * /light/space/livingroom
61 {{/code}} Damit alle Lampen im "space" gesteuert werden sendet man Meldungen an
62
63 {{code}}
64 * /light/space
65 {{/code}} Debug Informationen für Lampe "LedStripe1"
66
67 {{code}}
68 * /light/space/livingroom/LedStripe1/debug
69 {{/code}} Debug Informationen für alle Lampen
70
71 {{code}}
72 * /light/#/#/#/debug
73 {{/code}}
74
75 === Payload ===
76
77 Die später verwendeten Dinge werden unterschiedliche Anforderungen für den Datenaustausch haben. Im folgenden Abschnitt werden diese Anforderungen Kategorisiert. Für die Implementierung soll eine möglichst flache JSON Struktur verwendet werden. Dinge könne mehrere dieser Anforderungen gleichzeitig implementiert haben.
78
79 ==== Command ====
80
81 Der Typ Command wird für Kommunikation benötigt bei der das Ding den Payload nur empfängt und intern verarbeitet. Das Ding wird keine Rückmeldung an den Empfänger senden. Beipiel:
82
83 {{code}}
84 * Licht -> an oder aus
85 {{/code}}
86
87 {{code}}
88 {
89 //Command to device
90 "type": "cmd", //Used by the client to identify type of communication
91 "device":"name", //Used by the client to check if relevant to this device -> if not set group needs to have a value
92 "group": "name", //Used by the client to check if relevant to a group it belongs to -> if not set device needs to have a value
93 "cmd": "light", //Used by the client to identify action
94 "state": "on", //Used by the client to set the action to the requested state
95 "r": 255, //Used by the client to set the action red color -> ignored if device can only on/off
96 "g": 255, //Used by the client to set the action green color -> ignored if device can only on/off
97 "b": 255, //Used by the client to set the action blue color -> ignored if device can only on/off
98 "w": 255 //Used by the client to set the action white color -> ignored if device can only on/off
99 }
100 {{/code}}
101
102 ==== Request ====
103
104 Der Typ Request wird für Kommunikation benötigt bei der der Sender Werte vom Ding anfordert. Beispiel:
105
106 {{code}}
107 * Abfrage einer Raumtemperatur
108 {{/code}}
109
110 {{code}}
111
112 //Request to device
113 {
114 "type": "req", //Used by the client to identify type of communication
115 "req": "temp", //Used by the client to identify action
116 "device":"name", //Used by the client to check if relevant to this device -> if not set group needs to have a value
117 "group": "name", //Used by the client to check if relevant to a group it belongs to -> if not set device needs to have a value
118 "reqId" "uid" //Device will return this value in the response, Used by sender
119 }
120 //Response to sender
121 {
122 "type": "resp", //Used by the sender to identify type of communication
123 "device":"name", //Used by the sender to check if relevant
124 "group": "name", //Used by the sender to check if relevant
125 "resp": "temp", //Used by the sender to identify action
126 "value": 20.5, //Used by the sender to identify value
127 "unit": "C", //UOM
128 "reqId" "uid" //Used by the sender to match to request
129 }
130 {{/code}}
131
132 ==== State ====
133
134 Der Typ State wird verwendet damit das Ding selbständig Werte an einen Empfänger senden kann. Beispiel:
135
136 {{code}}
137 * zykliches Übermitteln der Luftfeuchte für Trenddaten
138 {{/code}}
139
140 {{code}}
141
142 // Moisture sended every Minute
143 {
144 "type": "state", //Used by the receiver to identify type of communication
145 "device": "name", //Used by the receiver to check if relevant
146 "group": "name", //Used by the receiver to check if relevant
147 "category": "moisture", //Used to define type of measurement
148 "value": "50", //Value of changed state
149 "uom": "%" //UoM of value
150 }
151 {{/code}}
152
153 {{code}}
154 * wenn Fenster auf oder zu detektiert wird
155 {{/code}}
156
157 {{code}}
158
159 // example when window is closed
160 {
161 "type": "state", //Used by the receiver to identify type of communication
162 "device": "window1", //Used by the receiver to check if relevant
163 "group": "name", //Used by the receiver to check if relevant
164 "category": "switch", //Used to define type of measurement
165 "value": "closed", //Value of changed state
166 "uom": "" //UoM of value
167 }
168 {{/code}}
169
170 === Typen ===
171
172 Typen definieren die möglichen Aktoren/Sensoren im Netzwerk. Die Datenstruktur wird im jeweiligen Wiki Beitrag gepflegt. Die möglichen Typen werden hier aufgeführt.
173
174 Typen:
175
176 {{code}}
177 [[projekte:licht|Licht]]
178 {{/code}}