Forum: Mikrocontroller und Digitale Elektronik Messdaten in Datenbank eintragen


von Erdinger (Gast)


Lesenswert?

Hallo
Ich würde gerne diverse Messdaten Realtime in eine Sql Datenbank 
eintragen lassen.
Was gibt es da für möglichkeiten?
Kann ein Avr Netio daten in eine Datenbank schreiben? Wurde sowas 
schonmal implementiert? Selberschreiben könnt ich das sicherlich nicht.
Oder Kann mit mit einem Openwrt Router sowas realisieren? Kann man von 
der Linux Console aus daten in eine Datenbank schreiben?
Lg

von Klaus R. (klara)


Lesenswert?

Hallo,
Du musst erst einmal ein Zielsystem festlegen. Datenbanken gibt es für 
MS-Windows, Linux, Android, ... . Dann gibt es verschiedene Wege die 
Daten von der Quelle auf das Zielsystem zu transferieren. Serielle SSt, 
USB, Netzwerk, ... . Hier kommt es auf die Möglichkeiten Deines 
Quellsystems an. Schlussendlich brauchst Du auf Deinem Zielsystem ein 
Programm das die Verbindung öffnet, die Rohdaten entgegen nimmt, ggf. 
anpasst und letztlich per SQL in die Datenbank schaufelt.
mfg klaus.

: Bearbeitet durch User
von Erdinger (Gast)


Lesenswert?

Das Zielsystem ist eine sql Datenbank (Mysql linux) im Netzwerk. Die 
Quelle Bzw Die Rohdaten stellt ein Avr. In welcher Form kann ich noch 
bestimmen.
Am Ziel brauch ich eine Zahl welche der Avr weiß in einer sich im 
Netzwerk befindenden Datenbank. nur der weg diese dorthinzubekommen ist 
mir noch schleierhaft.

von Schlumpf (Gast)


Lesenswert?

Ohne jetzt genau ne Lösung parat zu haben, nur ein Gedanke:

Wäre es möglich, den AVR von dem ganzen SQL-Gedöns zu entlasten und das 
auf dem Rechner zu machen, wo der SQL-Server läuft?
Also z.B. :
Der AVR schickt die Messdaten einfach per UDP o.ä. an den Server. Dort 
nimmt ein Skript oder kleines Programm die Daten entgegen und schubst 
sie in die Datenbank.
Dann könnten die Datenbankzugriffe auf einem Linuxrechner durchgeführt 
werden und du musst nur schauen, wie du die Rohdaten vom AVR übers 
Netzwerk an den Server bekommst.
Könnte mir vorstellen, dass das ein bisschen einfacher zu lösen ist

von Axel S. (a-za-z0-9)


Lesenswert?

Erdinger schrieb:
> Das Zielsystem ist eine sql Datenbank (Mysql linux) im Netzwerk. Die
> Quelle Bzw Die Rohdaten stellt ein Avr. In welcher Form kann ich noch
> bestimmen.

Das MySQL-Protokoll ist vergleichsweise einfach gestrickt. In einen 
großen AVR (Mega644, Mega1284) sollte man das noch reinbekommen [1]. 
Ansonsten was Schlumpf schreibt: auf dem Linux-PC einen simplen Daemon 
aufsetzen, der auf einem UDP-Port lauscht und die empfangenen Daten in 
die Datenbank schreibt. In Perl oder Python läßt sich das auf ca. einem 
Bildschirm voll Code unterbringen.

Der AVR kann dann ein wesentlich einfacheres Protokoll sprechen.

Ein Zwischending wird gern von Leuten genommen, die bereits HTTP 
implementiert (bekommen) haben: auf dem PC ein HTTP-Server mit Skript- 
Support (z.B. PHP). Der AVR schickt dann HTTP-Abfragen und sendet die 
Daten als PUT oder GET Parameter.

Wenn man statt einem AVR einen Raspberry Pi o.ä. verwendet, wird das 
Ganze ein Kinderspiel. Angesichts von Ethernet(?)-Netzwerk vermutlich 
die weit sinnvollere Lösung.


XL

[1] vor allem weil man ja nur ein winziges Subset braucht. Man muß ein 
Login-Packet schicken können und ein Query-Paket. Und als Response muß 
man nur "Ok" und "Fehler" kennen. Man braucht aber halt einen TCP-Stack.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Erdinger schrieb:

> Ich würde gerne diverse Messdaten Realtime in eine Sql Datenbank
> eintragen lassen.

Das ist erstmal ein sehr verständlicher Wunsch.

> Was gibt es da für möglichkeiten?

Man tut es einfach. Wie genau, hängt natürlich von den Möglichkeiten des 
verwendeten SQL-Servers ab. Tip: es gibt weitaus mehr als einen!

> Kann ein Avr Netio daten in eine Datenbank schreiben?

Ja, klar.

> Wurde sowas
> schonmal implementiert?

Ja, klar. Meiner z.B. schreibt regelmäßig in eine MS-SQL-Datenbank. 
Allerdings nicht deshalb, weil ich die besonders toll finde, sondern 
weil die Software, die später auf diese Daten zugreifen soll, nur mit 
MS-SQL etwas anfangen kann. Schande über deren Programmierer...

> Selberschreiben könnt ich das sicherlich nicht.

Das ist aber ziemlich primitiv, denn es geht (bei entsprechender 
Konfiguration des SQL-Servers) nur sehr unerheblich über eine reine 
Telnet-Kommunikation hinaus.

Ich würde LERNEN empfehlen. Und einen quelloffenen SQL-Server (mein 
persönlicher Favorit ist PostgreSQL), denn so einer liefert typisch 
einen genauso quelloffenen Client mit, wo im Prinzip alles drinsteht, 
was man wissen muss, um selber einen stark abgerüsteten Client für den 
einfachstmöglichen Spezialfall basteln zu können.

Und der besteht genau in dem Szenario, wenn man sich mit der 
geringstmöglichen Sicherheit einlogged (der Server muß natürlich dafür 
konfiguriert sein, das zuzulassen) und dann nur irgendwelche einfachen 
"insert"s von sich gibt und auf die Antworten des Servers auf diese 
Requests weitestgehend einen großen Berg scheißt. Also genau das 
LAN-Datenlogger-Szenario.

> Oder Kann mit mit einem Openwrt Router sowas realisieren?

Damit ist es natürlich noch einfacher. Da braucht man (vorausgesetzt der 
Speicher reicht) nur den Original-Client für das Zielsystem übersetzen 
und den dann benutzen. Ich würde aber auch hier den selbstgeschriebenen 
Minimalclient empfehlen, jedenfalls dann, wenn keine anderweitige 
Nutzung geplant ist als die beschriebene. Schlicht deshalb, weil der auf 
dem Zielsystem sehr viel Speicher gegenüber dem vollwertigen 
Originalclient sparen wird und trotzdem noch seinen Job im Rahmen der 
gegebenen Aufgabe erledigen kann.

von Erdinger (Gast)


Lesenswert?

Es wird ein Openwrt Router mit einem avr an der Console. Ganz einfach 
weil Netzwerk und Wlan für unter 20€ kann ich wohl nicht selber bauen.
Ich wollte nun variablen via Get an eine Php übergeben und diese trägt 
die daten dann in die Datenbank ein.

Leider habe ich noch etwas schwirigkeiten die Php aus der Console 
aufzurufen. Bislang mache ich das einach über Wget aber da gibt es 
Schwirigkeiten wenn ich mehr wie eine variable übergebe.
Bei wget http://192.168.1.69/1.php?v1=12&v2=19 würde wget ab dem & 
trennen und den rest als 2. datei runterladen.

Kann man anstelle des& Php variablen anders trennen?
Oder kann man wget beibringen das zu ignoriren?
Oder gibt es noch einen anderen weg die Php aufzurufen?

Der rückwertige weg von der Datenbank in den Avr klappt ähnlich. Eine 
php läd die daten aus der Datenbank und gibt die per Echo aus.
Wenn man nun die Php mit wget läd bekommt man als antwort die Ausgabe.
Diese kann ich nun wieder per Cat abrufen und auswerten.

Vermutlich alles etwas umständlich aber zumindest klappt es

von Axel S. (a-za-z0-9)


Lesenswert?

Erdinger schrieb:
> Leider habe ich noch etwas schwirigkeiten die Php aus der Console
> aufzurufen. Bislang mache ich das einach über Wget aber da gibt es
> Schwirigkeiten wenn ich mehr wie eine variable übergebe.
> Bei wget http://192.168.1.69/1.php?v1=12&v2=19 würde wget ab dem &
> trennen und den rest als 2. datei runterladen.

Pack die URL in Anführungszeichen. Wie eigentlich immer, wenn man 
Shell-Metazeichen (hier das "&") in Stringliteralen verwenden will.


XL

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.