Telegramm: Unterschied zwischen den Versionen
K (Schützte „Telegramm“ ([Bearbeiten=Nur Administratoren erlauben] (unbeschränkt) [Verschieben=Nur Administratoren erlauben] (unbeschränkt))) |
K |
||
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 11: | Zeile 11: | ||
Kopf0''':'''Kopf1''':''' .... KopfN''':'''Info0''';'''Info1''';''' .... InfoM'''::''' | Kopf0''':'''Kopf1''':''' .... KopfN''':'''Info0''';'''Info1''';''' .... InfoM'''::''' | ||
− | Damit sind die Steuerzeichen ''':''' und ''';''' in den Inhalten | + | Damit sind die Steuerzeichen ''':''' in den Inhalten des Kopfteils und ''';''' in den Inhalten des Informationsteils nicht zulässig, sie würden zu Fehlinterpretationen führen. Aus diesem Grund wird die Anzahl der Inhalte/Felder entweder fest vorgegeben oder über eine Regel in den Inhalten definiert. Telegramme mit einer unzulässigen Anzahl von ''':''' und ''';''' in den jeweiligen Teilen werden verworfen. |
Aufeinander folgende Steuerzeichen kennzeichnen ein leeres Feld. Es kann Twitter mit beliebigen Leerfeldern geben. Der Abschluss des Telegramms mit zwei aufeinander folgenden Doppelpunkten ist kein Leerfeld (gehört nicht zum Kopfteil des Telegramms), sondern dient dazu, auch mehrere Telegramme in einem physikalisch übertragenen Datensatz aneinander hängen zu können. | Aufeinander folgende Steuerzeichen kennzeichnen ein leeres Feld. Es kann Twitter mit beliebigen Leerfeldern geben. Der Abschluss des Telegramms mit zwei aufeinander folgenden Doppelpunkten ist kein Leerfeld (gehört nicht zum Kopfteil des Telegramms), sondern dient dazu, auch mehrere Telegramme in einem physikalisch übertragenen Datensatz aneinander hängen zu können. | ||
+ | |||
+ | <div style="line-height: 1.0em"><small>Hinweis für Programmierer:<br/> | ||
+ | Bei Anwendung üblicher Methoden/Funktionen zur Stringzerlegung (z.B. split(), strtok(), etc.) sollte das Telegramm vorher in Kopfteil und Informationsteil zerlegt werden.</small></div> | ||
= Kopfteil = | = Kopfteil = | ||
Zeile 41: | Zeile 44: | ||
= Informationsteil = | = Informationsteil = | ||
− | Der Informationsteil des Telegramms enthält einen allgemeinen Bereich, der für alle Geräte dieselbe Struktur (Liste der Elemente) hat und einen objektspezifischen Bereich, dessen Elemente in einem noch zu erledigenden Standardisierungsprozess festen Objektnamen zugeordnet werden. Daneben gibt es eine frei über bestimmte Telegrammelemente definierbare Struktur, hier als Twitter bezeichnet. Allerdings muss auch diese schließlich in eine feste Form mit Bezug zu den Objektnamen gegossen werden. Der Freiheitsgrad liegt dann noch bei der selbsterklärenden Telegrammstruktur mit besonders einfacher neutraler Inhaltsdarstellung. | + | Der Informationsteil des Telegramms enthält einen allgemeinen Bereich, der für alle Geräte dieselbe Struktur (Liste der Elemente) hat, und einen objektspezifischen Bereich, dessen Elemente in einem noch zu erledigenden Standardisierungsprozess festen Objektnamen zugeordnet werden. Daneben gibt es eine frei über bestimmte Telegrammelemente definierbare Struktur, hier als Twitter bezeichnet. Allerdings muss auch diese schließlich in eine feste Form mit Bezug zu den Objektnamen gegossen werden. Der Freiheitsgrad liegt dann noch bei der selbsterklärenden Telegrammstruktur mit besonders einfacher neutraler Inhaltsdarstellung. |
== Allgemeiner Bereich == | == Allgemeiner Bereich == | ||
Zeile 47: | Zeile 50: | ||
{| class="wikitable" | {| class="wikitable" | ||
− | | Index || Vorgabe || Bedeutung | + | | Index || Vorgabe <br/> oder Typ || Bedeutung |
|- | |- | ||
| 7 || D || Telegrammzähler (Dezimalzahl) | | 7 || D || Telegrammzähler (Dezimalzahl) | ||
Zeile 57: | Zeile 60: | ||
| 10 || D || Gerätezustand (Dezimalzahl) | | 10 || D || Gerätezustand (Dezimalzahl) | ||
|- | |- | ||
− | | 11 || Datum/Uhrzeit || String nach ISO (29 Zeichen) | + | | 11 || S || Gerätename (String) |
+ | |- | ||
+ | | 12 || Datum/Uhrzeit || String nach ISO (29 Zeichen, z.B.: 2017-11-05T11:45:30.125+00:00) | ||
|- | |- | ||
− | | | + | | 13 || D || relative (lokale) X-Position in cm (Dezimalzahl) |
|- | |- | ||
− | | | + | | 14 || D || relative (lokale) Y-Position in cm (Dezimalzahl) |
|- | |- | ||
− | | | + | | 15 || D || relative (lokale) Z-Position in cm (Dezimalzahl) |
+ | |- | ||
+ | | 16 || D || Basiszustand des Automaten (Dezimalzahl) | ||
+ | |- | ||
+ | | 17 || D || Basismodus des Automaten (Dezimalzahl) | ||
|} | |} | ||
Zeile 74: | Zeile 83: | ||
=== Anwendungsschlüssel [8] === | === Anwendungsschlüssel [8] === | ||
Der Anwendungsschlüssel identifiziert den Prozess (die Anwendung), der den Rundruf mit Daten versorgt. Der kann demzufolge auch wechseln. Der Wert ist eine Zahl von 1 bis Anzahl der möglichen Anwendungen. Die Zahl 0 kennzeichnet, dass der Schlüssel aktuell nicht bedient wird. | Der Anwendungsschlüssel identifiziert den Prozess (die Anwendung), der den Rundruf mit Daten versorgt. Der kann demzufolge auch wechseln. Der Wert ist eine Zahl von 1 bis Anzahl der möglichen Anwendungen. Die Zahl 0 kennzeichnet, dass der Schlüssel aktuell nicht bedient wird. | ||
+ | |||
+ | Die Anwendung ist hier nicht nur aus programmtechnischer Sicht festzulegen, es wäre also nicht allein die Kennzeichnung eines Thread im Programm oder ähnlich. Vielmehr geht es darum, einen inneren Zusammenhang für Anwendungen festzulegen. Wenn z.B. in zwei benachbarten Räumen die gleichen Geräte (Heizkörperventile und Temperatursensoren) zur Temperaturregelung verwendet werden, dann kann über den Anwendungsschlüssel eine Entkopplung der Regelkreise (Raum 1 und Raum 2) erfolgen. Das hat einen höheren Freiheitsgrad, als die feste Zuordnung von Geräten und Räumen oder Positionen und Räumen. Es ergibt sich die Möglichkeit, raumübergreifende Regelkreise aufgrund anderer Randbedingungen voneinander zu separieren. | ||
=== Geräteschlüssel [9] === | === Geräteschlüssel [9] === | ||
Der Geräteschlüssel macht mehrere Geräte, die vergleichbare Messungen ausführen und demzufolge denselben Objektnamen verwenden, beim Empfänger vergleichbar. Die Klasse FollowMultDev z.B. hinterlegt Objekte mit demselben Namen in unterschiedliche Speicher, je nach Geräteschlüssel. So kommt es nicht zum Überschreiben des Empfangspuffers, wenn mehrere Geräte gleichzeitig gleiche Objekte versenden. | Der Geräteschlüssel macht mehrere Geräte, die vergleichbare Messungen ausführen und demzufolge denselben Objektnamen verwenden, beim Empfänger vergleichbar. Die Klasse FollowMultDev z.B. hinterlegt Objekte mit demselben Namen in unterschiedliche Speicher, je nach Geräteschlüssel. So kommt es nicht zum Überschreiben des Empfangspuffers, wenn mehrere Geräte gleichzeitig gleiche Objekte versenden. | ||
+ | |||
+ | === Gerätezustand [10] === | ||
+ | Dies ist der allgemeine Gerätezustand, der z.B. zur Festlegung einer Gerätewartung und zur Anzeige derselben ausgewertet wird. Die hier einzutragenden Werte (ganze Zahlen) sind Gegenstand einer Standardisierung. | ||
+ | |||
+ | === Gerätename [11] === | ||
+ | Der Gerätename dient der Verwaltung der Geräte aus Sicht spezieller Anwendungen (z.B. Visualisierung oder Wartung). Er kann bei vielen Geräten über die Konfiguration zur Laufzeit gesetzt werden (entsprechende Software ist in Bearbeitung). | ||
+ | |||
+ | === Positionen X,Y,Z [13],[14],[15] === | ||
+ | Hiermit wird die relative Position eines Gerätes im Raum dargestellt. Als Einheit wurde cm festgelegt, um auch eng nebeneinander stehende Geräte bez. ihrer Position unterscheiden zu können. Die Wahl des Koordinatenursprungs (X=Y=Z=0) ist willkürlich und für die Funktion der dezentralen Heimautomatisierung nicht relevant. Für manche Aufgaben (z.B. Temperaturregelung in einem Raum mit mehreren Heizkörpern und Temperatursensoren) ist es wünschenswert, dass Geräte ihre Abstände voneinander (in einem Raum) ermitteln können. | ||
+ | |||
+ | === Basiszustand [16] === | ||
+ | Die [[Zustandsmaschinen|'''Zustandsmaschine''']] eines Gerätes kann beliebig umfangreich (und kompliziert) sein. Der Basiszustand kennzeichnet bei der Heimautomatisierung die Zustände oder Zustandsbereiche, die für eventuelle Interaktionen mit den Heimbewohnern relevant sein können. Das zeitliche Verhalten der Basiszustände orientiert sich also am zeitlichen Verhalten der Heimbewohner. An der zeitlichen Auflösung des Basiszustandes wird die Frequenz des zyklisch ausgestrahlten Rundrufs orientiert. | ||
+ | |||
+ | Nehmen wir als Beispiel das Öffnen von Türen oder Toren. Wird ein Garagentor hochgefahren, so ist das ein relativ langsamer Vorgang, der unter Umständen durch den Eingriff des Heimbewohners unterbrochen wird. Dabei würden Zustandswechsel der Art ''Öffnung läuft''-''Öffnung unterbrochen''-''Öffnung läuft''-''Tor geöffnet'' auftreten. Um diesen Vorgang mit dem Verhalten oder Eingreifen des Heimbewohners synchronisieren zu können, reicht eine zeitliche Auflösung von einer Sekunde. Entsprechend häufig (jede Sekunde) würde auch der Rundruf des Toröffnungsgerätes erfolgen. | ||
+ | |||
+ | Es kann natürlich sein, dass die tatsächlich implementierte Zustandsmaschine im Toröffnungsgerät noch weitere Zustandswechsel (z.B. Überwachen des Motorstromes, Abfrage eines Endschalters, etc.) durchläuft. Allerdings wären das Zustände, die aus Sicht der Anwendung (Bedienung der Heimbewohner) schnell ablaufen und deswegen nicht über Rundruf kommuniziert werden. Sie finden innerhalb (möglicherweise als Unterzustand) eines Basiszustandes statt. | ||
+ | |||
+ | <div style="line-height: 1.0em"><small>Hinweis für Programmierer:<br/> | ||
+ | Für die Gestaltung der Zustandsmaschine (endlicher Automat) werden gezielt keine Vorgaben gemacht. Letztendlich ist die "Intelligenz" eines Gerätes im Sinne der Anpassung an eine Situation von der Anzahl der Zustände abhängig. Der Basiszustand könnte z.B. als eigene Variable mitgeführt und in bestimmten Zuständen des Automaten gesetzt werden. Oder man verwaltet den Zustand des Automaten als zusammengesetzte Zahl, dem Basiszustand und einer Zustandsergänzung. Wichtig ist, dass der Basiszustand im Rundruf erscheint und die Möglichkeit zu einer sinnvollen Synchronisierung der Umgebung (Heimbewohner, andere Geräte) mit diesem Gerät ergibt.</small></div> | ||
+ | |||
+ | === Basismodus [17] === | ||
+ | Der Basismodus stellt gewissermaßen die Wünsche, Anforderungen oder Ziele eines Gerätes dar. Er ist als eine Ergänzung des Basiszustandes zu sehen, mit der z.B. ein Zielzustand angegeben wird. Bei obigem Beispiel der Garagentoröffnung könnte zum Zustand ''Öffnung läuft'' der Modus ''Tor ist zu öffnen'' gehören. | ||
+ | |||
+ | Die Auswertung von Basiszustand und Basismodus dient in erster Linie dazu, dass sich mehrere Geräte bei der Erfüllung einer gemeinsamen Aufgabe synchronisieren bzw. gegenseitig überwachen. | ||
+ | |||
+ | == Spezieller Bereich Twitter == | ||
+ | Für die Entwicklung von Geräten wird Software auf [https://github.com/RobertPatzke/homeautomation '''Github'''] zur Verfügung gestellt. Die dort hinterlegte Klasse '''Twitter''' in der Datei Twitter.cpp (für Mikrocontroller) oder in der Datei Twitter.java (für Smartphones und Tablets) erzeugt zur Ergänzung des Telegramms folgende Elemente | ||
+ | |||
+ | {| class="wikitable" | ||
+ | | Index || Vorgabe <br/> oder Typ || Bedeutung | ||
+ | |- | ||
+ | | 18 || D || Anzahl übertragener ganzer Zahlen (Dezimalzahl) | ||
+ | |- | ||
+ | | 19 || D || Anzahl übertragener Gleitkommazahlen (Dezimalzahl) | ||
+ | |- | ||
+ | | 20 || D || Anzahl übertragener Texte/Strings (Dezimalzahl) | ||
+ | |- | ||
+ | | ''21'' || ''D'' || ''Wert(e) der ganzen Zahl(en) (Dezimalzahl)'' | ||
+ | |- | ||
+ | | ''22'' || ''F'' || ''Wert(e) der Gleitkommazahl(en) (Dezimalzahlen mit Dezimalpunkt)'' | ||
+ | |- | ||
+ | | ''23'' || ''C'' || ''Wert(e) des/r Text(e)/String(s) (Folge von Textzeichen ohne Semikolon)'' | ||
+ | |} | ||
+ | |||
+ | Die Fragmente 21 bis 23 tauchen gar nicht, einfach oder mehrfach auf, entsprechend den in den Feldern 18 bis 20 angegebenen Anzahlen. Mit Fragment ist hier das Inhaltselement mit dem Steuerzeichen (;) gemeint. Es werden hier also für den Fall Anzahl = 0 keine Leerelemente (;;) übertragen, sondern das Fragment entfällt. | ||
+ | |||
+ | Möglicherweise wird in Zukunft in einem der Reservefelder des Kopfteils der Telegrammtyp Twitter gekennzeichnet, um eine universelle Auswertung (Monitor) zu ermöglichen. Zur Zeit werden die unterschiedlichen Telegrammtypen allerdings anhand des Objektnamen (Index = 5) erkannt und entsprechend ausgewertet. | ||
+ | |||
+ | == Spezieller Bereich Sonstige == | ||
+ | Nach Abschluss einer entsprechenden Standardisierung soll die Telegrammstruktur des speziellen Bereichs fest vorliegen. Es wird, im Gegensatz zum Twitter, auf die Übertragung der Elementeanzahl für die unterschiedlichen Datentypen verzichtet und die Struktur beim Empfänger als bekannt vorausgesetzt. |
Aktuelle Version vom 23. Januar 2018, 15:34 Uhr
Auf dieser Seite wird die Gestaltung der über Rundruf versendeten Telegramme (Botschaften, Nachrichten, etc.) erläutert. Die Einhaltung dieser Festlegungen garantiert, dass ein Follower (Folgender, Zuhörer, Lauscher, etc.) alle Twitter (Zwitschernde, Redende, Informierende, etc.) versteht und Geräte einfach, in der Regel ohne weitere Installationsmaßnahmen, in das Netzwerk integriert werden können.
Inhaltsverzeichnis
Übersicht (Struktur)
Die Telegramme wurden mit Blick auf die typische Internet- bzw. Intranet-Kommunikation festgelegt. Als Randbedingung wurde berücksichtigt,
- dass das beim Rundruf verwendete UDP eine maximale Telegrammlänge von 1460 Zeichen nahelegt,
- dass wegen der Nutzung in heterogenen Netzen für die Verteilung (Routing) geeignete Informationen (z.B. MAC-Adresse und IP-Adresse) enthalten sind und
- dass nicht benötigte Elemente einfach leer bleiben können.
Mit Blick auf eine möglichst flexible inhaltliche Nutzung und die einfache Lesbarkeit wurden die Telegramme als Folge von Textzeichen (UTF-8) definiert und die Separation der verschiedenen Inhalte über spezielle Textzeichen (Doppelpunkt : und Semikolon ;, im Folgenden als Steuerzeichen bezeichnet) vorgenommen. Daraus ergab sich folgende Struktur
Kopf0:Kopf1: .... KopfN:Info0;Info1; .... InfoM::
Damit sind die Steuerzeichen : in den Inhalten des Kopfteils und ; in den Inhalten des Informationsteils nicht zulässig, sie würden zu Fehlinterpretationen führen. Aus diesem Grund wird die Anzahl der Inhalte/Felder entweder fest vorgegeben oder über eine Regel in den Inhalten definiert. Telegramme mit einer unzulässigen Anzahl von : und ; in den jeweiligen Teilen werden verworfen.
Aufeinander folgende Steuerzeichen kennzeichnen ein leeres Feld. Es kann Twitter mit beliebigen Leerfeldern geben. Der Abschluss des Telegramms mit zwei aufeinander folgenden Doppelpunkten ist kein Leerfeld (gehört nicht zum Kopfteil des Telegramms), sondern dient dazu, auch mehrere Telegramme in einem physikalisch übertragenen Datensatz aneinander hängen zu können.
Bei Anwendung üblicher Methoden/Funktionen zur Stringzerlegung (z.B. split(), strtok(), etc.) sollte das Telegramm vorher in Kopfteil und Informationsteil zerlegt werden.
Kopfteil
Die einzelnen Elemente des Kopfteils sind folgendermaßen spezifiziert:
Index | Vorgabe | Bedeutung |
0 | N10 | Kennzeichnung der Telegrammart (historisch) |
1 | XX-XX-XX-XX-XX-XX | MAC-Adresse des Gerätes (XX = zweistellig hex) |
2 | DDD.DDD.DDD.DDD | IP-Adresse des Gerätes (DDD = ein- bis dreistellig dezimal) |
3 | 53 | Kennzeichnung der Telegrammfunktion (historisch) |
4 | D | Handle (Dezimalzahl) kennzeichnet Objekt (Reserve) |
5 | Objektname | Bezeichnung des Inhaltes (max. 32 Zeichen) |
6 | D | Index (Dezimalzahl) kennzeichnet Listenobjekt (Reserve) |
Die Felder Kopf4 und Kopf6 werden hier bei der dezentralen Heimautomatisierung (noch) nicht ausgewertet. Sie sollen als Reserve für spätere Anwendungen mit dem Wert 0 belegt werden (nicht als Leerfeld).
Es wird aktuell an der Standardisierung der Objektnamen gearbeitet. Für den Laborbetrieb werden diese zur Zeit unter den Studenten abgestimmt.
Informationsteil
Der Informationsteil des Telegramms enthält einen allgemeinen Bereich, der für alle Geräte dieselbe Struktur (Liste der Elemente) hat, und einen objektspezifischen Bereich, dessen Elemente in einem noch zu erledigenden Standardisierungsprozess festen Objektnamen zugeordnet werden. Daneben gibt es eine frei über bestimmte Telegrammelemente definierbare Struktur, hier als Twitter bezeichnet. Allerdings muss auch diese schließlich in eine feste Form mit Bezug zu den Objektnamen gegossen werden. Der Freiheitsgrad liegt dann noch bei der selbsterklärenden Telegrammstruktur mit besonders einfacher neutraler Inhaltsdarstellung.
Allgemeiner Bereich
Die Elemente des allgemeinen Bereichs sind folgendermaßen spezifiziert:
Index | Vorgabe oder Typ |
Bedeutung |
7 | D | Telegrammzähler (Dezimalzahl) |
8 | D | Anwendungsschlüssel (Dezimalzahl) |
9 | D | Geräteschlüssel (Dezimalzahl) |
10 | D | Gerätezustand (Dezimalzahl) |
11 | S | Gerätename (String) |
12 | Datum/Uhrzeit | String nach ISO (29 Zeichen, z.B.: 2017-11-05T11:45:30.125+00:00) |
13 | D | relative (lokale) X-Position in cm (Dezimalzahl) |
14 | D | relative (lokale) Y-Position in cm (Dezimalzahl) |
15 | D | relative (lokale) Z-Position in cm (Dezimalzahl) |
16 | D | Basiszustand des Automaten (Dezimalzahl) |
17 | D | Basismodus des Automaten (Dezimalzahl) |
Telegrammzähler [7]
Der Telegrammzähler ist vom Typ vorzeichenlose ganze Zahl (unsigned integer) und wird mit jedem versendeten Telegramm inkrementiert. Bei Erreichen des Maximalwertes erfolgt ein Überlauf nach 0. Er dient dem Empfänger zur Erkennung von nicht erfassten Telegrammen, die, je nach Anwendung, nachgefordert werden können. Dadurch sind Anwendungsmöglichkeiten, wie Rundrufübertragung von Dateien oder automatische Mesh-Netzwerke möglich. Entsprechende Anwendungen sind im Bereich MES (Manufacturing Execution System) bereits im Einsatz und werden bei Bedarf hier übernommen und dokumentiert.
Der Maximalwert des Telegrammzählers wird über die Anwendung festgelegt. Im einfachen Fall ist hier, je nach eingesetztem Netzwerk, die Häufigkeit von Telegrammverlusten zu berücksichtigen, weil der Empfänger anhand eines geänderten Telegrammzählers das Eintreffen eines neuen Telegramms detektiert (im Rahmen automatischer Mesh-Netzwerke kommt es zur Wiederholung von Telegrammen mit demselben Telegrammzähler). Es darf daher nicht passieren, dass der Verlust von x Telegrammen beim nächsten Empfang zur Wiederholung des Telegrammzählers führt. Bei einfachen Rundrufen im LAN (Ethernet) reicht es sicher aus, wenn der Telegrammzähler einstellig ist (0-9). In einem (schlechten) WLAN mit häufigen Telegrammverlusten sollte der Maximalwert entsprechend größer gewählt werden (0-99). Oft wird hier beim Versenden auch einfach ein beliebiger Speicherwert inkrementiert und gesendet, was allerdings je nach Datentyp (z.B. 32 Bit) zu sehr großen Werten führt.
Anwendungsschlüssel [8]
Der Anwendungsschlüssel identifiziert den Prozess (die Anwendung), der den Rundruf mit Daten versorgt. Der kann demzufolge auch wechseln. Der Wert ist eine Zahl von 1 bis Anzahl der möglichen Anwendungen. Die Zahl 0 kennzeichnet, dass der Schlüssel aktuell nicht bedient wird.
Die Anwendung ist hier nicht nur aus programmtechnischer Sicht festzulegen, es wäre also nicht allein die Kennzeichnung eines Thread im Programm oder ähnlich. Vielmehr geht es darum, einen inneren Zusammenhang für Anwendungen festzulegen. Wenn z.B. in zwei benachbarten Räumen die gleichen Geräte (Heizkörperventile und Temperatursensoren) zur Temperaturregelung verwendet werden, dann kann über den Anwendungsschlüssel eine Entkopplung der Regelkreise (Raum 1 und Raum 2) erfolgen. Das hat einen höheren Freiheitsgrad, als die feste Zuordnung von Geräten und Räumen oder Positionen und Räumen. Es ergibt sich die Möglichkeit, raumübergreifende Regelkreise aufgrund anderer Randbedingungen voneinander zu separieren.
Geräteschlüssel [9]
Der Geräteschlüssel macht mehrere Geräte, die vergleichbare Messungen ausführen und demzufolge denselben Objektnamen verwenden, beim Empfänger vergleichbar. Die Klasse FollowMultDev z.B. hinterlegt Objekte mit demselben Namen in unterschiedliche Speicher, je nach Geräteschlüssel. So kommt es nicht zum Überschreiben des Empfangspuffers, wenn mehrere Geräte gleichzeitig gleiche Objekte versenden.
Gerätezustand [10]
Dies ist der allgemeine Gerätezustand, der z.B. zur Festlegung einer Gerätewartung und zur Anzeige derselben ausgewertet wird. Die hier einzutragenden Werte (ganze Zahlen) sind Gegenstand einer Standardisierung.
Gerätename [11]
Der Gerätename dient der Verwaltung der Geräte aus Sicht spezieller Anwendungen (z.B. Visualisierung oder Wartung). Er kann bei vielen Geräten über die Konfiguration zur Laufzeit gesetzt werden (entsprechende Software ist in Bearbeitung).
Positionen X,Y,Z [13],[14],[15]
Hiermit wird die relative Position eines Gerätes im Raum dargestellt. Als Einheit wurde cm festgelegt, um auch eng nebeneinander stehende Geräte bez. ihrer Position unterscheiden zu können. Die Wahl des Koordinatenursprungs (X=Y=Z=0) ist willkürlich und für die Funktion der dezentralen Heimautomatisierung nicht relevant. Für manche Aufgaben (z.B. Temperaturregelung in einem Raum mit mehreren Heizkörpern und Temperatursensoren) ist es wünschenswert, dass Geräte ihre Abstände voneinander (in einem Raum) ermitteln können.
Basiszustand [16]
Die Zustandsmaschine eines Gerätes kann beliebig umfangreich (und kompliziert) sein. Der Basiszustand kennzeichnet bei der Heimautomatisierung die Zustände oder Zustandsbereiche, die für eventuelle Interaktionen mit den Heimbewohnern relevant sein können. Das zeitliche Verhalten der Basiszustände orientiert sich also am zeitlichen Verhalten der Heimbewohner. An der zeitlichen Auflösung des Basiszustandes wird die Frequenz des zyklisch ausgestrahlten Rundrufs orientiert.
Nehmen wir als Beispiel das Öffnen von Türen oder Toren. Wird ein Garagentor hochgefahren, so ist das ein relativ langsamer Vorgang, der unter Umständen durch den Eingriff des Heimbewohners unterbrochen wird. Dabei würden Zustandswechsel der Art Öffnung läuft-Öffnung unterbrochen-Öffnung läuft-Tor geöffnet auftreten. Um diesen Vorgang mit dem Verhalten oder Eingreifen des Heimbewohners synchronisieren zu können, reicht eine zeitliche Auflösung von einer Sekunde. Entsprechend häufig (jede Sekunde) würde auch der Rundruf des Toröffnungsgerätes erfolgen.
Es kann natürlich sein, dass die tatsächlich implementierte Zustandsmaschine im Toröffnungsgerät noch weitere Zustandswechsel (z.B. Überwachen des Motorstromes, Abfrage eines Endschalters, etc.) durchläuft. Allerdings wären das Zustände, die aus Sicht der Anwendung (Bedienung der Heimbewohner) schnell ablaufen und deswegen nicht über Rundruf kommuniziert werden. Sie finden innerhalb (möglicherweise als Unterzustand) eines Basiszustandes statt.
Für die Gestaltung der Zustandsmaschine (endlicher Automat) werden gezielt keine Vorgaben gemacht. Letztendlich ist die "Intelligenz" eines Gerätes im Sinne der Anpassung an eine Situation von der Anzahl der Zustände abhängig. Der Basiszustand könnte z.B. als eigene Variable mitgeführt und in bestimmten Zuständen des Automaten gesetzt werden. Oder man verwaltet den Zustand des Automaten als zusammengesetzte Zahl, dem Basiszustand und einer Zustandsergänzung. Wichtig ist, dass der Basiszustand im Rundruf erscheint und die Möglichkeit zu einer sinnvollen Synchronisierung der Umgebung (Heimbewohner, andere Geräte) mit diesem Gerät ergibt.
Basismodus [17]
Der Basismodus stellt gewissermaßen die Wünsche, Anforderungen oder Ziele eines Gerätes dar. Er ist als eine Ergänzung des Basiszustandes zu sehen, mit der z.B. ein Zielzustand angegeben wird. Bei obigem Beispiel der Garagentoröffnung könnte zum Zustand Öffnung läuft der Modus Tor ist zu öffnen gehören.
Die Auswertung von Basiszustand und Basismodus dient in erster Linie dazu, dass sich mehrere Geräte bei der Erfüllung einer gemeinsamen Aufgabe synchronisieren bzw. gegenseitig überwachen.
Spezieller Bereich Twitter
Für die Entwicklung von Geräten wird Software auf Github zur Verfügung gestellt. Die dort hinterlegte Klasse Twitter in der Datei Twitter.cpp (für Mikrocontroller) oder in der Datei Twitter.java (für Smartphones und Tablets) erzeugt zur Ergänzung des Telegramms folgende Elemente
Index | Vorgabe oder Typ |
Bedeutung |
18 | D | Anzahl übertragener ganzer Zahlen (Dezimalzahl) |
19 | D | Anzahl übertragener Gleitkommazahlen (Dezimalzahl) |
20 | D | Anzahl übertragener Texte/Strings (Dezimalzahl) |
21 | D | Wert(e) der ganzen Zahl(en) (Dezimalzahl) |
22 | F | Wert(e) der Gleitkommazahl(en) (Dezimalzahlen mit Dezimalpunkt) |
23 | C | Wert(e) des/r Text(e)/String(s) (Folge von Textzeichen ohne Semikolon) |
Die Fragmente 21 bis 23 tauchen gar nicht, einfach oder mehrfach auf, entsprechend den in den Feldern 18 bis 20 angegebenen Anzahlen. Mit Fragment ist hier das Inhaltselement mit dem Steuerzeichen (;) gemeint. Es werden hier also für den Fall Anzahl = 0 keine Leerelemente (;;) übertragen, sondern das Fragment entfällt.
Möglicherweise wird in Zukunft in einem der Reservefelder des Kopfteils der Telegrammtyp Twitter gekennzeichnet, um eine universelle Auswertung (Monitor) zu ermöglichen. Zur Zeit werden die unterschiedlichen Telegrammtypen allerdings anhand des Objektnamen (Index = 5) erkannt und entsprechend ausgewertet.
Spezieller Bereich Sonstige
Nach Abschluss einer entsprechenden Standardisierung soll die Telegrammstruktur des speziellen Bereichs fest vorliegen. Es wird, im Gegensatz zum Twitter, auf die Übertragung der Elementeanzahl für die unterschiedlichen Datentypen verzichtet und die Struktur beim Empfänger als bekannt vorausgesetzt.