5.3.2 Datenbankstruktur

Letztes Update: 21.12.2003


5.3.2 Datenbankstruktur

Die Datenbank ist MySQL.

5.3.2.1 Messwerte

Die Messwerte werden als Zahlen kodiert. Die Zahlen bestehen aus 4er Gruppen mit folgendem Inhalt:

Die 1. Ziffer (1..255) beschreibt den Benutzer, bzw. den Besitzer der Wetterstation (User)

z.B. 1 = Uwe, 2 = Torsten, usw.

Die 2. Ziffer (1..255) beschreibt den Standort (Station),

z.B. 1 = GKSS, 2 = Wohnhaus Dach, 3 = Garten, 4 = Wohnung, usw.

Die 3. Ziffer (1..255) beschreibt ein Messgerät (Device),

z.B. 1 = Spektrometer, 2 = Drucksensor, 3 = Magnetfeld, usw.

Die 4. Ziffer (1..255) beschreibt den Kanal eines Messgerätes (Sensor),

z.B. für Magnetfeldsensor: 1 = Magnetfeld X-Komponente, 2 = Magnetfeld Y-Komponente, usw.

Die komplette Sensorkodierung für die Y-Komponente des Magnetfeldsensor lautet also

2-4-3-2

Diese Kodierung ist auch gleichzeitig der Name der Datenbanktabelle. Durch diese Namensgebung ist eine eindeutige Identifizierung eines Sensor, incl. seines Standortes möglich.

Es kann drei verschiedene Messzyklentypen geben:

Typ 1. Messzyklus im Sekundenbereich bis Minuten oder Stunden.

Typ 2. Messzyklus im Millisekundenbereich der nur bei bestimmten Ereignissen erfasst wird.

Typ 3. Messzyklus im Millisekundenbereich der kontinuierlich erfasst wird.

Für Typ 1 und Typ 2 gibt es getrennte Tabellen. Typ 3 wird in dieser Datenbank nicht umgesetzt.

Der Inhalt der Tabelle für Typ 1 besitzt folgende Struktur.

Messwerttabelle Typ 1

Row Feldname Index

Typ

Bytes Bemerkung
1 MeasTime

ja

DateTime

8

Zeitpunkt der Messwerterstellung
2 PhysVal

-

Double

8

Physikalischer Messwert (Mittelwert)
3 MinVal

-

Double

8

Kleinster Wert im Messintervall
4 MaxVal

-

Double

8

Größter Wert im Messintervall
5 Variance

-

Double

8

Varianz des Messwertes
6 PosNorth

-

Double

8

Nordkoordinate (für mobile Messstation)
7 PosEast

-

Double

8

Ostkoordinate (für mobile Messstation)

56

SQL Befehl zur Erzeugung dieser Tabelle

CREATE TABLE `1-2-3-2` (
  `MeasTime` datetime NOT NULL default '2000-01-01 00:00:00',
  `PhysVal` double default '0',
  `MinVal` double default '0',
  `MaxVal` double default '0',
  `Variance` double default '0',
  `PosNorth` double default '0',
  `PosEast` double default '0',
  PRIMARY KEY (`MeasTime`),
  KEY `MeasTime` (`MeasTime`)
) TYPE=MyISAM PACK_KEYS=0

Der Inhalt der Tabelle für Typ 2 besitzt folgende Struktur.

Messwerttabelle Typ 2

Row Feldname Index

Typ

Bytes Bemerkung
1 MeasTime

ja

DateTime

8

Zeitpunkt der Messwerterstellung
2 PosNorth

-

Double

8

Nordkoordinate (für mobile Messstation)
3 PosEast

-

Double

8

Ostkoordinate (für mobile Messstation)
4 MeasCount

-

SmallInt

2

Anzahl der Messwerte in MeasBlob (0..65535)
5 MeasSize

-

TinyInt

1

Länge eines Messwertes in Bytes in MeasBlob (0..255)
6 MeasCycle

-

SmallInt

2

Zeitabstand zwischen den Messwerten in ms in MeasBlob
7 MeasBlob

-

MediumBlob

N

Messwerte (0..16777215 Bytes)

29+N

SQL Befehl zur Erzeugung dieser Tabelle

CREATE TABLE `1-2-3-4` (
  `MeasTime` datetime NOT NULL default '0000-00-00 00:00:00',
  `PosNorth` double default '0',
  `PosEast` double default '0',
  `MeasCount` smallint(5) unsigned default '0',
  `MeasSize` tinyint(3) unsigned default '0',
  `MeasCycle` smallint(5) unsigned default '0',
  `MeasBlob` mediumblob,
  PRIMARY KEY (`MeasTime`)
) TYPE=MyISAM PACK_KEYS=0

5.3.2.2 Konfiguration

Um die Verwaltung der Daten übersichtlich zu gestalten und auch zu gewährleisten, das Messwerte zwischen unterschiedlichen Betreibern von Wetterstation ohne Probleme zu übernehmen, werden alle Information auf vier Ebenen verteilt.

  1. Die Userebene bezeichnet den Betreiber einer Wetterstation
  2. Die Stationsebene beschreibt die Wetterstation, bzw. die Wetterstationen eines Betreibers.
  3. Die Deviceebene beschreibt die einzelnen Komponenten einer Wetterstation. Es können einzelne Sensoren sein, aber auch Geräte, die mehrere Messwerte liefern.
  4. Die Sensorebene beschreibt jeden einzelnen Sensor. Für jeden Sensor gibt es eine eigene Tabelle, in denen die Messwerte liegen (Siehe 5.3.2.1)

Der gesamte Aufbau einer Wetterstation stellt sich dann als eine Baumstruktur dar:

Wenn bei Bedarf die Daten der Wetterstation eines anderen Betreibers in der eigenen Datenbank aufgenommen werden sollen, muß lediglich der Inhalt dieser vier Tabellen in die eigenen Tabellen importiert werden.

5.3.2.2.1 User

Tabelle mit allen Usern

DefUser

Row Feldname Index

Typ

Bytes Bemerkung
1 UserID

ja

SmallInt

2

Nummer des Users
2 NameID

-

Char

64

Name des Users
3 Comments

-

Char

64

Kommentar
   

 

 

130

 

SQL Befehl zur Erzeugung dieser Tabelle

CREATE TABLE `defuser` (
  `UserID` smallint(5) unsigned NOT NULL default '0',
  `NameID` char(64) default NULL,
  `Comments` char(64) default NULL,
  PRIMARY KEY (`UserID`)
) TYPE=MyISAM PACK_KEYS=0

5.3.2.2.2 Station

DefStation

Row Feldname Index

Typ

Bytes Bemerkung
1 UserID

ja

SmallInt

2

Nummer des Users
2 StationID

ja

SmallInt

2

Nummer der Station
3 NameID

-

Char

64

Name der Station
4 Comments

-

Char

64

Kommentar
5 PosNorth

-

Double

8

Standort der Station
6 PosEast

-

Double

8

Standort der Station
7 Movable

-

Bool

1

1 = Feste Station
2 = Bewegliche Station
8 SubCycle

-

SmallInt

2

Grundmesszykluszeit in Sekunden
9 TimeSync

-

TinyInt

1

Zeit in Stunden, wann die Uhr der Wetterstation gestellt wird
10 PcLine

-

TinyInt

1

Schnittstelle zum PC
1 = RS232
2 = Netzwerk
11 RsNumber

-

TinyInt

1

Schnittstellennummer
12 RsBaudrate

-

Integer

4

Baudrate
13 RsStartbits

-

TinyInt

1

Anzahl der Startbits
14 RsDatabits

-

TinyInt

1

Anzahl der Datenbits
15 RsStopbits

-

TinyInt

1

Anzahl der Stopbits
16 RsParity

-

TinyInt

1

Paritätprüfung
1 = Keine (No)
2 = Ungerade (Odd)
3 = Gerade (Even)
4 = Immer 1 (Mark)
5 = Immer 0 (Space)
17 RsProtocol

-

TinyInt

1

Protokoll
1 = Keins
2 = Xon/Xoff
3 = RTS/CTS
4 = DTR/DSR
18 NetIP

-

Char

64

IP Adresse des PC
19 NetPort

-

Char

8

Port Adresse des PC
20 NetProtocol

-

TinyInt

1

Kommunikationsprotokoll
1 = TCP
2 = NetBios
3 = UDP
4 = Telnet
   

 

 

236 

 

SQL Befehl zur Erzeugung dieser Tabelle

CREATE TABLE `defstation` (
  `UserID` smallint(5) unsigned NOT NULL default '0',
  `StationID` smallint(5) unsigned NOT NULL default '0',
  `NameID` char(64) default NULL,
  `Comments` char(64) default NULL,
  `PosNorth` double default NULL,
  `PosEast` double default NULL,
  `Movable` tinyint(1) default NULL,
  `SubCycle` smallint(5) unsigned default NULL,
  `TimeSync` tinyint(3) unsigned default NULL,
  `PcLine` tinyint(3) unsigned default NULL,
  `RsNumber` tinyint(3) unsigned default NULL,
  `RsBaudrate` int(10) unsigned default NULL,
  `RsStartbits` tinyint(3) unsigned default NULL,
  `RsDatabits` tinyint(3) unsigned default NULL,
  `RsStopbits` tinyint(3) unsigned default NULL,
  `RsParity` tinyint(3) unsigned default NULL,
  `RsProtocol` tinyint(3) unsigned default NULL,
  `NetIP` char(64) default NULL,
  `NetPort` char(8) default NULL,
  `Netprotocol` tinyint(3) unsigned default NULL,
  PRIMARY KEY (`UserID`,`StationID`)
) TYPE=MyISAM PACK_KEYS=0

5.3.2.2.3 Device

DefDevice

Row Feldname Index

Typ

Bytes Bemerkung
1 UserID

ja

SmallInt

2

Nummer des Users
2 StationID

ja

SmallInt

2

Nummer der Station
3 DeviceID

ja

SmallInt

2

Nummer des Devices
4 NameID

-

Char

64

Name des Devices
5 Comments

-

Char

64

Kommentar
6 Physical

-

Bool

1

true = Physikalisches Device
false = logisches Device (für verknüpfte Kanäle)
7 MeasCycle

-

SmallInt

2

Messzykluszeit in Sekunden. Muß immer >= SubCycle sein.
8 Event

-

Bool

1

true = Device liefert nur Daten vom Typ2
false = Device liefert kontinuierlich Daten vom Typ1
9 EventType

-

TinyInt

1

Art der Ereigniserkennung
0 = Kein Event
1 = Einfache Schwelle
2 = d/dt
10 EventOn

-

Double

8

Nach Überschreiten dieser Schwelle werden Daten generiert
11 EventOff

-

Double

8

Nach Unterschreiten dieser Schwelle wird gestoppt
12 LineID

-

TinyInt

1

Schnittstelle zur Station
1 = ADC
2 = RS232
3 = I2C-Bus
4 = SPI-Interface
13 AdcNumber

-

TinyInt

1

Nummer des ADC
14 AdcChn

-

TinyInt

1

Kanalnummer des ADC
15 RsNumber

-

TinyInt

1

Schnittstellennummer
16 RsBaudrate

-

Integer

4

Baudrate
17 RsStartbits

-

TinyInt

1

Anzahl der Startbits
18 RsDatabits

-

TinyInt

1

Anzahl der Datenbits
19 RsStopbits

-

TinyInt

1

Anzahl der Stopbits
20 RsParity

-

TinyInt

1

Paritätprüfung
1 = Keine (No)
2 = Ungerade (Odd)
3 = Gerade (Even)
4 = Immer 1 (Mark)
5 = Immer 0 (Space)
21 RsProtocol

-

TinyInt

1

Protokoll
1 = Keins
2 = Xon/Xoff
3 = RTS/CTS
4 = DTR/DSR
22 I2CMuxChn

-

TinyInt

1

Nummer des Multiplexer Kanals
23 I2CMuxAdr

-

TinyInt

1

Adresse des Multiplexer Chips
24 I2CAdr

-

TinyInt

1

Adresse des I2C Chips
   

 

 

171

 

SQL Befehl zur Erzeugung dieser Tabelle

CREATE TABLE `defdevice` (
`UserID` smallint(5) NOT NULL default '0',
`StationID` smallint(5) NOT NULL default '0',
`DeviceID` smallint(5) NOT NULL default '0',
`NameID` char(64) default NULL,
`Comments` char(64) default NULL,
`Physical` tinyint(1) default NULL,
`MeasCycle` smallint(5) unsigned default NULL,
`Event` tinyint(1) default NULL,
`EventType` tinyint(3) unsigned default NULL,
`EventOn` double default NULL,
`EventOff` double default NULL,
`LineID` tinyint(3) default NULL,
`AdcNumber` tinyint(3) default NULL,
`AdcChn` tinyint(3) default NULL,
`RsNumber` tinyint(3) default NULL,
`RsBaudrate` int(10) default NULL,
`RsStartbits` tinyint(3) default NULL,
`RsDatabits` tinyint(3) default NULL,
`RsStopbits` tinyint(3) default NULL,
`RsParity` tinyint(3) default NULL,
`RsProtocol` tinyint(3) default NULL,
`I2CMuxChn` tinyint(3) default NULL,
`I2CMuxAdr` tinyint(3) default NULL,
`I2CAdr` tinyint(3) default NULL,
PRIMARY KEY (`UserID`,`StationID`,`DeviceID`)
) TYPE=MyISAM PACK_KEYS=0

5.3.2.2.4 Sensor

DefSensor

Row Feldname Index

Typ

Bytes Bemerkung
1 UserID

ja

SmallInt

2

Nummer des Users
2 StationID

ja

SmallInt

2

Nummer der Station
3 DeviceID

ja

SmallInt

2

Nummer des Devices
4 SensorID

ja

SmallInt

2

Nummer des Sensors
5 NameID

-

Char

64

Name des Sensors
6 ShortID

-

Char

16

Kennung des Sensors
7 Comments

-

Char

64

Kommentar
8 UnitName

-

Char

32

Einheitenname
9 Enabled

-

Bool

1

true = Kanal wird gemessen

false = Kanal wird nicht gemessen

10 GraphicMin

-

Double

8

Voreinstellung für Y-Achse der Grafik
11 GraphicMax

-

Double

8

Voreinstellung für Y-Achse der Grafik
12 Physical

-

Bool

1

true = Physikalischer Kanal
false = logischer Kanal (für Kanalverknüpfung)
13 ChnType

-

TinyInt

1

Kanaltyp
1 = Analog
2 = Digital (z.B. Counter)
3 = Seriell
14 FormulaID

-

TinyInt

1

Formelnummer für Berechnung des Messwertes
15 KalibID

-

TyniInt

1

Formelnummer für Kalibrierung
16 an1

-

Double

8

Formelkoeffizient 1
17 an2

-

Double

8

Formelkoeffizient 2
18 an3

-

Double

8

Formelkoeffizient 3
19 an4

-

Double

8

Formelkoeffizient 4
20 an5

-

Double

8

Formelkoeffizient 5
21 an6

-

Double

8

Formelkoeffizient 6
22 an7

-

Double

8

Formelkoeffizient 7
23 an8

-

Double

8

Formelkoeffizient 8
24 an9

-

Double

8

Formelkoeffizient 9
25 ax1

-

Char

16

Eingangskanal 1
26 ax2

-

Char

16

Eingangskanal 2
27 ax3

-

Char

16

Eingangskanal 3
   

 

 

325

 

SQL Befehl zur Erzeugung dieser Tabelle

CREATE TABLE `defsensor` (
  `UserID` smallint(5) unsigned NOT NULL default '0',
  `StationID` smallint(5) unsigned NOT NULL default '0',
  `DeviceID` smallint(5) unsigned NOT NULL default '0',
  `SensorID` smallint(5) unsigned NOT NULL default '0',
  `NameID` char(64) default NULL,
  `Comments` char(64) default NULL,
  `UnitName` char(32) default NULL,
  `Enabled` tinyint(1) unsigned default NULL,
  `GraphicMin` double default NULL,
  `GraphicMax` double default NULL,
  `Physical` tinyint(1) unsigned default NULL,
  `ChnType` tinyint(3) unsigned default NULL,
  `FormulaID` tinyint(3) unsigned default NULL,
  `KalibID` tinyint(3) unsigned default NULL,
  `an1` double default NULL,
  `an2` double default NULL,
  `an3` double default NULL,
  `an4` double default NULL,
  `an5` double default NULL,
  `an6` double default NULL,
  `an7` double default NULL,
  `an8` double default NULL,
  `an9` double default NULL,
  `ax1` char(16) default NULL,
  `ax2` char(16) default NULL,
  `ax3` char(16) default NULL,
  PRIMARY KEY (`UserID`,`StationID`,`DeviceID`,`SensorID`)
) TYPE=MyISAM PACK_KEYS=0

5.3.2.2.5 Formula

DefFormula

Row Feldname Index

Typ

Bytes Bemerkung
1 FormelID

ja

SmallInt

2

Nummer der Formel
2 NameID

-

Char

64

Name der Formel
3 Comments

-

Char

64

Kommentar
4 anCnt

-

TinyInt

1

Anzahl der Koeffizienten
5 axCnt

-

TinyInt

1

Anzahl der Eingangskanäle
6 Picture

-

Blob

N

Bild der Formel (290x65 Pixel)
   

 

 

132+N

 

SQL Befehl zur Erzeugung dieser Tabelle

CREATE TABLE `defformula` (
  `FormulaID` smallint(5) unsigned NOT NULL default '0',
  `NameID` varchar(64) default NULL,
  `Comments` varchar(64) default NULL,
  `anCnt` tinyint(3) unsigned default NULL,
  `axCnt` tinyint(3) unsigned default NULL,
  `Picture` blob,
  PRIMARY KEY (`FormulaID`)
) TYPE=MyISAM PACK_KEYS=0

Beispiel eines Bildes für eine Formel: