Dies ist eine alte Version des Dokuments!
Datenstruktur
Auf dieser Seite beschreibe ich die Datenstruktur unseres Backend's und der damit verbundenen Datenbank.
Objekte ("entities")
Typen
Kanäle ("channels")
Kanäle sind nach unserer definitions jede Art von Zähler oder Sensor (Strom, Wasser, Gas bzw. Temperatur, Luftdruck, Feuchtigkeit etc).
Sie können Messwerte speichern.
Gruppierung ("aggregators")
Die Gruppierung der Zähler hat mehrere Aufgaben:
sie strukturiert die Kanäle nach ihren realen oder virtuellen Gegebenheiten
z.B. alle Temperatursensoren in einer Stadt
z.B. die Drei Phasen eines Haushalts
z.B. mehrere Parteien an einem Hausanschluss
z.B. WGs
z.B. alle Wohnungen eines Vermieters
sie kann gruppierte Kanäle gemeinsam auswerten
ein Kanal kann in mehreren Gruppen enthalten sein
eine Gruppe kann selbst in mehreren Gruppen enthalten sein (Rekursion)
Eigenschaften ("properties")
Referenzierung
global (weltweit)
Ein wichtiger Bestandteil unserer API ist die weltweit eindeutige Referenzierung von aller Entities durch eine UUID gemäß RFC4122.
Die UUID's werden immer durch das Backend zufällig generiert um die Kollisionsgefahr zu minimieren.
Das ganze hat Vorteile:
einmal installiert behält ein Zähler immer seine UUID
das Mergen von Backends mit ihren Messwerten wäre möglich
bieten durch ihre Komplexität einen gewissen Zugriffsschutz
und Nachteile:
lokal (auf dem Backend)
Um Speicherplatz zu sparen nutzt das Backend intern nur 2byte lange IDs. Diese werden mit Foreign Keys in der Datenbank untereinander verknüpft. Das sorgt dafür das wir zusätzlich zur Absicherung im Backend keine inkonsistenten Daten bekommen können.
Messwerte ("data")
Die Messwerte bestehen aus folgenden Daten:
Referenz auf Kanal (Foreign Key über interne Kanal-ID)
Zeitstempel (ordnet jeden Messwert einem genauen Zeitpunkt zu, sollte mindestens in Millisekunden Auflösung gespeichert werden)
Wert (enthält den absoluten Messwert eines Sensors oder die Anzahl der Pulse eines Pulszählers nach dem letzten Messwert, je nach Typ des durch Kanal[ID] referenzierten Kanals)