Eine Go-Anwendung, die Temperaturdaten über eine serielle Schnittstelle empfängt und in einer MariaDB-Datenbank speichert.
- Liest Temperaturdaten von serieller Schnittstelle (USB-zu-Seriell Adapter)
- Speichert Messwerte mit Zeitstempel in MariaDB/MySQL
- Läuft als OCI-Container
- Automatische Schema-Migration
- Graceful Shutdown
- Plausibilitätsprüfung der Messwerte
- Docker & Docker Compose
- USB-zu-Seriell Adapter (z.B. für Arduino, ESP32, etc.)
- Sensor, der Temperaturwerte über Serial sendet
# .env Datei erstellen
cp .env.example .env
# Passwörter in .env anpassen!# Mit Docker Compose
# Logs anzeigenPasse in der .env oder docker-compose.yml den seriellen Port an:
- "/dev/ttyUSB0:/dev/ttyUSB0" # Linux USB-Serial
- "/dev/ttyACM0:/dev/ttyACM0" # Linux ArduinoAlle Einstellungen erfolgen über Umgebungsvariablen:
| Variable | Beschreibung | Standardwert |
|---|---|---|
SERIAL_PORT |
Pfad zur seriellen Schnittstelle | /dev/ttyUSB0 |
BAUD_RATE |
Baudrate der Verbindung | 9600 |
DB_HOST |
Datenbank-Host | localhost |
DB_PORT |
Datenbank-Port | 3306 |
DB_USER |
Datenbank-Benutzer | tempuser |
DB_PASSWORD |
Datenbank-Passwort | (erforderlich) |
DB_NAME |
Datenbankname | temperatures |
Die Anwendung erwartet einfache Temperaturwerte über die serielle Schnittstelle, einen Wert pro Zeile:
23.5
24.1
23.8
Unterstützte Formate:
23.5- Einfacher Wert23,5- Europäisches Format (Komma)23.5°C- Mit EinheitTemp: 23.5- Mit Präfix
CREATE TABLE temperature_readings (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
temperature DECIMAL(5,2) NOT NULL,
recorded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_recorded_at (recorded_at)
);# Dependencies installieren
# Anwendung bauen
# Ausführen
DB_PASSWORD=test ./temp-recorder --name temp-recorder \
--device=/dev/ttyUSB0:/dev/ttyUSB0 \
-e SERIAL_PORT=/dev/ttyUSB0 \
-e BAUD_RATE=9600 \
-e DB_HOST=192.168.1.100 \
-e DB_PORT=3306 \
-e DB_USER=tempuser \
-e DB_PASSWORD=geheim \
-e DB_NAME=temperatures \
temp-recorder:latestNach dem Start mit Docker Compose ist Adminer unter http://localhost:8080 erreichbar:
- System: MySQL
- Server: mariadb
- Benutzer: tempuser
- Passwort: (aus .env)
- Datenbank: temperatures
void setup() {
Serial.begin(9600);
}
void loop() {
float temperature = readTemperatureSensor();
Serial.println(temperature, 2); // 2 Dezimalstellen
delay(5000); // Alle 5 Sekunden
}# Benutzer zur dialout-Gruppe hinzufügen
sudo usermod -aG dialout $USER
# Neu einloggen erforderlich!# Prüfen ob das Device existiert
ls -la /dev/ttyUSB*
# Eventuell muss der Container privilegiert laufen# Prüfen ob MariaDB läuft
# Logs der Datenbank prüfenMIT License