====== Struktur der Middleware ======
Überschneidungen mit der Seite "[[.:definitions]]" sollten vermieden werden. \\ Ggfs. sollte das Zusammenlegen der beiden Seiten in Erwägung gezogen werden.
===== Entities =====
Alle Kanäle, Zähler, Gruppen, User, Sensoren sind Entities (dt. "Dinge").
Sie besitzen alle eine weltweit eindeutige [[http://de.wikipedia.org/wiki/Universally_Unique_Identifier|UUID]]. Diese wird durch die Middleware beim Erstellen eines neuen Kanals generiert.
Es gibt verschiedene Typen von Entities. Diese sind in der Datei ''[[https://github.com/volkszaehler/volkszaehler.org/blob/master/lib/Definition/EntityDefinition.json|EntityDefinition.json]]'' definiert.
Hierbei wird jeder Typ durch folgende Eigenschaften charakterisiert:
* Name
* Icon
* Interpreter-Klasse (siehe ''lib/Interpreter/*.php'')
* Model-Klasse (siehe ''lib/Model/*.ph''p)
* Übersetzungen
==== Interpreter ====
Wie im vorherigen Abschnitt beschrieben ist jedes Entity einem bestimmten Typ zugeordnet. Dies ist nötig, da es verschiedene Arten von Sensoren, Zähler & Messgeräten gibt, die Daten in unterschiedlichen Formaten bereitstellen.
Diese unterschiedlichen Formate müssen jeweils gesondert interpretiert, verarbeitet und analysiert werden.
Das ist die Aufgabe der Interpreter.
== Beispiel ==
^Entity Typ|Stromzähler ("power")|Temperatur ("temperature")|User ("user")|
^Interpreter Klasse|MeterInterpreter|SensorInterpreter|AggregatorInterpreter|
^Model|Channel|Channel|Aggregator|
^Datenformat|Impulse eines S0-Zählers|absolute Messwerte|fasst Daten untergeordneterKanäle zusammen|
Im folgenden werden die verschiedenen Interpreter kurz vorgestellt.
=== MeterInterpreter ===
Alle Messgeräte, die eine Verbrauchsmessung (Energie, Betriebsstunden) durchführen und deren Messwert einen Verbrauchswert darstellt, sind über die Klasse "MeterInterpreter" abgebildet.
Die Daten werden hier in Form von Impulsen mit Zeitstempeln abgespeichert. Ein Impuls entspricht einer bestimmten Menge von Verbrauch. Je näher die Zeitstempel zweier Impulse beieinander liegen, desto höher ist der Verbrauch für diesen Periode.
Beispiele
* S0-Zähler für elektrische Energie, Wasser- oder Gasmenge
* Verbrauchskanal im eHZ
* Betriebsstundenzähler
Einheiten
* kWh
* l
* h
=== SensorInterpreter ===
Messgeräte, die einen Momentanwert bestimmt (Leistung, Durchflußgeschwindigkeit, Temperatur, Luftdruck) ausgeben, sind über die Klasse "SensorInterpreter" abgebildet.
Beispiele
* Leistungskanal im eHZ
* Stromwandler
* Thermometer
Einheiten
* W
* °C
=== AggregatorInterpreter ===
Auch abstrakte Typen wie User ("user"), Gruppe ("group") oder Haus ("building") besitzen einen Interpreter.
Dieser summiert die Werte der enthaltenen Kanäle.
Dieser Interpreter ist noch nicht fertig gestellt!
===== Properties =====
Jedes Entity kann Eigenschaften (engl. "properties") besitzen. Mit diesen Eigenschaften können Entities genauer beschrieben werden: Ort, Zählermodel, Genauigkeit, Seriennr, Kosten/[l, kWh] etc..
Alle erlaubten Eigenschaften sind ähnlich wie bei den Entity Typen in der Datei ''[[https://github.com/volkszaehler/volkszaehler.org/blob/master/lib/Definition/PropertyDefinition.json|PropertyDefinition.json]]'' definiert.
Nicht jeder Entity Typ darf jede Eigenschaft besitzen. So macht es zum Beispiel wenig Sinn einem Temperatur Sensor die Eigenschaft Kosten ("costs") zu geben.
Die Zuordnung welche Eigenschaften optional sind und welche verpflichtend sind, ist für jeden Entity Typ in der Datei ''[[https://github.com/volkszaehler/volkszaehler.org/blob/master/lib/Definition/EntityDefinition.json|EntityDefinition.json]]'' festgelegt.