Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

mysql - serielle Datenerfassung mit bash

Alles rund um die Server (Web-, Mail-, Datenbank-, Datenaustausch-, etc.) die man unter Linux betreiben kann

Moderator: Moderatoren

Antworten
radiergummi
Newbie
Newbie
Beiträge: 37
Registriert: 14. Feb 2009, 12:34

mysql - serielle Datenerfassung mit bash

Beitrag von radiergummi » 26. Aug 2018, 09:54

openSuse 42.3
mysql Ver 15.1 Distrib 10.0.35-MariaDB, for Linux (x86_64) using readline 5.1
Shell-Progrmmierung #!/bin/bash

Mit

Code: Alles auswählen

while read -r line < $Interface; do
lese ich Messwerte von /dev/ttyS0 .

Nach Aufbereitung schreibe ich sie damit

Code: Alles auswählen

for (( i=0; i<${#arrDev[@]}; i++ ));
	do
	mysql --host="$HOST" --user="$USER" --password="$PASSWORD" --database="$DATABASE" --batch --execute="insert into messwerte (sensor_id,temperatur) values ('${arrDev[$i]}', '${arrTemp[$i]}');" 2>/dev/null
	done
in die Datenbank. Das läuft im Testbetrieb schon fast ein Jahr und macht, was es soll. Jetzt möchte ich die Anzahl der Sensoren und die Messfrequenz erhöhen. Da jeder einzelne Messwert mittels einer eigenen "Einmalverbindung" in die DB geschrieben wird, befürchte ich, dass das bisherige Vorgehen zu langsam werden könnte.

Hier meine Frage: gibt es eine Möglichkeit, mit einem Shell-Skript die von /dev/ttyS0 gelesenen Daten innerhalb einer dauerhaft bestehenden Verbindung in die DB zu schreiben?

Danke für Tipps.

Gruß,
radiergummi

Werbung:
abgdf
Guru
Guru
Beiträge: 3109
Registriert: 13. Apr 2004, 21:15

Re: mysql - serielle Datenerfassung mit bash

Beitrag von abgdf » 26. Aug 2018, 16:46

Ein Perl-Skript könnte das, also gleichzeitig eine Verbindung zur Datenbank halten und von anderswo Daten einlesen, sicherlich (wenn auch das zu langsam wäre, müßte man was in C schreiben).
Wenn es unbedingt bash sein muß (was ich nicht empfehlen würde), würde ich versuchen, eingelesene Daten in einer Datei zwischenzuspeichern, in Paketen als Buffer sozusagen.

uhelp
Member
Member
Beiträge: 105
Registriert: 25. Nov 2012, 19:33

Re: mysql - serielle Datenerfassung mit bash

Beitrag von uhelp » 26. Aug 2018, 19:46

Du könntest eine Pipe dafür verwenden, die die Messwerte liest und in SQL- inserts umwandelt und eine weitere Pipe, die das dann zum DB- Server schickt.

Ob das dann taugt, hängt hauptsächlich davon ab, wieviele Messwerte pro Sekunde durchrauschen.
Kommen die schneller, als du sie in SQL Statements umwandeln kannst, hast du Probleme.

Antworten