Letztes Update: 21.12.2003
Die Datenbank ist MySQL.
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
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.
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.
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
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
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
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
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: