Mein Projekt basiert auf dem perl script für die WS500 von Django
Am besten ihr lest euch das Ganze dort erst mal durch.
Die Ausgabe beim Anstecken der WS300 PC ermitteln mit:
tail -f /var/log/messages
Das ganze sollte so aussehen:
Feb 8 18:33:41 debian kernel: USB Serial support registered for FTDI USB Serial Device Feb 8 18:33:41 debian kernel: ftdi_sio 1-1.1:1.0: FTDI USB Serial Device converter detected Feb 8 18:33:41 debian kernel: usb 1-1.1: Detected FT8U232AM Feb 8 18:33:41 debian kernel: usb 1-1.1: Number of endpoints 2 Feb 8 18:33:41 debian kernel: usb 1-1.1: Endpoint 1 MaxPacketSize 64 Feb 8 18:33:41 debian kernel: usb 1-1.1: Endpoint 2 MaxPacketSize 64 Feb 8 18:33:41 debian kernel: usb 1-1.1: Setting MaxPacketSize 64 Feb 8 18:33:41 debian kernel: usb 1-1.1: FTDI USB Serial Device converter now attached to ttyUSB0 Feb 8 18:33:41 debian kernel: usbcore: registered new interface driver ftdi_sio Feb 8 18:33:41 debian kernel: ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver
Damit erkennen wie, dass das passende Modul (ftdi_sio), welches als Schnittstelle dient, geladen ist.
Des weiteren sehen wir, dass die WS300 PC unter /dev/ttyUSB0 eingehangen (gemountet) wurde.
(sollte es kein /var/log/messages geben oder leer sein bitte prüfen ob rsyslog installiert ist [war bei mir nicht der Fall])
apt-get install gcc make ncftp patch bzip2 perl
Laut der Anleitung von Django brauchen wir folgende Perl Module: Device::SerialPort, DBI, DBD::mysql, IO::File
Installieren mit:
perl -MCPAN -e 'install Device::SerialPort DBI DBD::mysql IO::File'
Damit die WS300 PC Daten richtig in die mySQL Datenbank geschrieben werden muss das Script abgeändert werden.
Windrichtung und Windschwankung müssen auskommentiert werden (Dank an Arnim aus dem Wetterstationen.info Forum).
ws500.pl
MySQL und zur Verwaltung sollte phpmyadmin installiert sein (optional).
Am besten mit phpmyadmin nun die eine Datenbank namens Wetter anlegen und ebenso folgende Tabellen erzeugen:
CREATE TABLE th_sensors ( id INT(10) UNSIGNED NOT NULL auto_increment, datetime DATETIME NOT NULL, stationid TINYINT(3) UNSIGNED NOT NULL DEFAULT 1, sensid TINYINT(3) UNSIGNED, T FLOAT(5,1), H TINYINT(2) UNSIGNED, ok CHAR(1), KEY (id), INDEX dataindex(stationid,sensid,datetime) ); /* pressure stores the !!relative!! air pressure. */ CREATE TABLE pressure ( id int(10) UNSIGNED NOT NULL auto_increment, datetime DATETIME NOT NULL, stationid TINYINT(3) UNSIGNED NOT NULL DEFAULT 1, sensid TINYINT(3) UNSIGNED, P SMALLINT(4), ok CHAR(1), KEY (id), INDEX dataindex(stationid,sensid,datetime) ); CREATE TABLE rain ( id int(10) UNSIGNED NOT NULL auto_increment, datetime DATETIME NOT NULL, stationid TINYINT(3) UNSIGNED NOT NULL DEFAULT 1, sensid TINYINT(3) UNSIGNED, counter SMALLINT(4) UNSIGNED, diff INT UNSIGNED, ok CHAR(1), KEY (id), INDEX dataindex(stationid,sensid,datetime) ); CREATE TABLE station_descr ( # Id of station. First station should have id 1 (not: 0) stationid TINYINT(3) UNSIGNED NOT NULL, name VARCHAR(80), descr VARCHAR(80), manufacturer VARCHAR(80), model VARCHAR(80), location VARCHAR(80), rainbycount SMALLINT UNSIGNED NOT NULL, # Altitude of station above NN. A value < 0 means no value has been set altitude SMALLINT DEFAULT -1, KEY (stationid) ); CREATE TABLE sensor_descr ( stationid TINYINT(3) UNSIGNED NOT NULL DEFAULT 1, sensid TINYINT(3) UNSIGNED NOT NULL, type ENUM('th', 'wind', 'rain', 'light', 'pressure') NOT NULL, name VARCHAR(80), KEY (sensid, type) ); CREATE TABLE lastids ( stationid TINYINT UNSIGNED NOT NULL, id_PS INT(10) unsigned, id_RS INT(10) unsigned, id_THS INT(10) unsigned, id_WS INT(10) unsigned, id_LS INT(10) unsigned );
Die ws500.conf unter /etc/ws500 an die entsprechende MySQL und an die Sensoren anpassen.
Das ws500.pl starten
perl /usr/local/bin/ws500.pl > /dev/null &
Mit dem > /dev/null leitet man die Ausgabe noch ins nichts und mit & läuft das Programm im Hintergrund weiter, auch wenn die Konsole geschlossen wird.
Nun sollten die Daten ausgelesen werden und in die MySQL Datenbank geschrieben werden. Das passiert nun alle 5min automatisch.
Da ich das cgi Script für das Webforntend nicht zu laufen gebracht habe. Hab ich angefangen mit mein eigenes in PHP zu schreiben.
Mehr Infos hier: