Hauptmenü

DATA-LOGGER

Begonnen von peewit, 24. Oktober 2010, 21:44:13

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 3 Gäste betrachten dieses Thema.

peewit

Hallo

Wir werden für die oscat-network.lib einen Daten-Logger erstellen

1. Prozesswerte werden in eine lokale Datei geschrieben
2. Prozesswerte werden in eine Datei direkt auf einen FTP-Server (nicht auf der SPS) geschrieben.

Um hier für möglichst viele eine interessante Lösung zu erstellen, bitte ich euch hier eure Wünsche, Ideen mir mitzuteilen


--- bislang in die wunschliste aufgenommen ---

- schreiben von logdaten in eine datei auf der steuerung
- fertige logdatei auf einen ftp-server zur archivierung übertragen
- ftp transfer mit aktiv und passiv mode wegen firewall
- Adressierung des FTP per reiner URL, damit ich die Daten auch in die "Cloud" schicken kann.
- CSV File Format mit frei definierbaren Trennzeichen
- ein Puffer, der die Daten lokal für eine definierte Zeit oder Menge oder bis zur Verfügbarkeit der Verbindung speichert und  dann versendet
- CVS-Daten in eine rrdtool Datenbank schreiben


tja inzwischen wurde die wunschliste zur realität

zeitgleich zur bald erscheinenden oscat 3.21 wird des die network.1.10 geben, die neben vielen anderen sachen auch das oben genannte enthalten wird.

Majaestix

Hallo peewit,

hier ein paar Ideen meinerseits:

- Adressierung des FTP per reiner URL, damit ich die Daten auch in die "Cloud" schicken kann.
- File Format CSV, wobei es schön wäre, wenn das Trennzeichen beim Aufruf definiert werden könnte
- ein Puffer, der die geloggten Daten lokal für eine definierte Zeit oder eine definierte Menge oder bis zur Verfügbarkeit der Verbindung zwischenspeichert und dann in einem Rutsch versendet

Das wär's erstmal.

Gruss

Majaestix

NetFritz

Hallo
Ich würde es klasse finden, wen der Logger ein Script auf den externen Rechner aufrufen könnte, das die CVS-Daten in eine rrdtool Datenbank schreibt.
Gruß NetFritz

NetFritz

Hallo
Hier ein Link der erklärt was rrdtool ist.http://de.wikipedia.org/wiki/RRDtool
Bevor man die rrd-DB mit Daten füttern kann muß man eine rrd-DB anlegen.
Die DB heißt hier z.B. solar.rrd.
Ich rufe rrdtool über ein PHP-Script so auf .

$erg = system("/usr/bin/rrdtool update /var/www/myhouse/rrd/solar.rrd N:$wert[0]:$wert[1]:$wert[2]:$wert[3]:$wert[4]:$wert[5]:$wert[6]:$wert[7]:$wert[8]");

/usr/bin/rrdtool update = ruft das Prg. zum füttern der rrd-DB auf
/var/www/myhouse/rrd/solar.rrd = das ist die DB
N:$wert[0]:$wert[1]:$wert[2]:$wert[3]:$wert[4]:$wert[5]:$wert[6]:$wert[7]:$wert[8] = in diesen Variablen stehen die Werte die abgelegt werden
Man kann auch aus der Konsole die DB updaten z.B. rrdtool update solar.rrd N:10:15:20:25:30:35:40:45
Ich hoffe das ich ein bisschen Klarheit in rrdtool gebracht habe.
Gruß NetFritz

NetFritz

Hallo
Das PHP-Script auf dem Server ist PHP-CLI-Script.
Das PHP-Script könnte die CVS-Werte aus der Steuerung in die RRD-DB schreiben.
Dazu muss das Skript nur regelmäßig gestartet werden wenn neue CVS-Werte auf dem Server sind.
Gruß NetFRitz

NetFritz

Hallo
Mit dem HTTP Aufruf, das Script aufgerufen und die Werte übergeben.
http://192.168.2.9/rrd.php?wert1=10&wert2=20&wert3=30&wert4=40&wert5=50&wert6=60

Im PHP-Script werden die Werte mit $_Get aus dem HTTP-Aufruf eingelesen und dann in die RRD-DB geschrieben.

<?php
// rrd.php
$wert1 $_GET['wert1'];
$wert2 $_GET['wert2'];
$wert3 $_GET['wert3'];
$wert4 $_GET['wert4'];
$wert5 $_GET['wert5'];
$wert6 $_GET['wert6'];
$erg system("/usr/bin/rrdtool update /var/www/myhouse/rrd/solar.rrd N:$wert1:$wert2:$wert3:$wert4:$wert5:$wert[5]");
echo 
"Fehler= $erg \n";
?>



Im Prinzip muss es so gehen.
Gruß NetFritz

peewit

#6
hallo NetFritz

nun bin ich zufrieden, mit den informationen (wenn das so funktioniert !)

ich werde dir bescheid geben, wenn ich zeit habe daran zu arbeiten !
dann solltest du irgend einen test-server installieren , wo wir das praktisch testen können

da heisst aber auch das du alle infos die man serverseitig benötigt, sammeln und ordentlich dokumentieren musst
den ansonsten kann kein oscat-user später damit etwas anfangen

musst du da jedesmal das php-script anpassen, nur weil sich die parametertype bzw. die anzahl verändert hat ?

NetFritz

Hallo
Man kann die Werte auch als String übergeben.
http://192.168.2.9/rrd.php?werte=10|10|20|30|40|50
Im PHP-Script die Werte in ein Array einlesen und dann das Array so
in rrdtool update einfügen.
$erg = system("/usr/bin/rrdtool update /var/www/myhouse/rrd/solar.rrd N:$wert[0]:$wert[1]:$wert[2]:$wert[3]:$wert[4]:$wert[5]");
Das Script muss jedes mal geändert werden.
Der Name des Scripts,
die Name der RRD-DB hier z.B. solar.rrd und
die Anzahl der Werte im rrdtool update.

Mit ein bisschen Aufwand könnte man das auch alles vom Script mache lassen.
Wenn Script Name und RRD-DB gleich sind müsste
dann nur Script Name geändert werden.
z.B. solar.php = solar.rrd

Das mit der Doko werden wir schon hingekommen.

Wenn Du weißt wie der HTTP Aufruf aussieht gib mir bitte Bescheid dann kann ich das Script in Angriff nehmen.

Gruß NetFritz

NetFritz

Hallo
Wen Du im HTTP-Aufruf noch den Namen der RRD-DB mit angibts dan braucht man im Script nicht ändern.
http://192.168.2.9/rrd.php?rrddb=solar.rrd&werte=10|10|20|30|40|50
Gruß NetFritz

peewit

kann man in einem http aufruf auch mehrere datenbank-zeilen auf einmal übermitteln ?

NetFritz

Hallo
Ich weiß nicht was Du genau meinst.
Wenn Du meinst das Du erst mal Daten sammeln willst und
sie dann in einem Rutsch übertragen willst, das wird so nicht gehen.
rrdtools trägt ja die Daten mit einem Zeitstempel in die RRD-DB ein.
Ich z.B. schreibe die Temperaturen jede Minute in die DB.
Gruß NetFritz

peewit

das heisst ein zwischenspeichern der werte lokal auf der sps hat keinen sinn bzw. ist unerwünscht
und neue werte sollten möglichst in echtzeit an rrd gesendet werden.


NetFritz

Hallo
Richtig
Gruß NetFritz