Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:ws_300_pc_funk-wetterstation

ELV WS 300 PC Funk-Wetterstation an Seagate Dockstar

Mein Projekt basiert auf dem perl script für die WS500 von Django
Am besten ihr lest euch das Ganze dort erst mal durch.

Voraussetzungen

  • Seagate Dockstar mit Debian 6.0 „Squeeze“ (oder andere Hardware)
  • installierter Webserver (z.B lighttpd oder apache2)
  • mysql Server (am besten mit phpmyadmin)
  • Kenntnisse mit der Linux konsole
  • Geduld ;-)

Erste Versuche mit dem Dockstar (Debain 6.0 "Squeeze")

  1. Mit lsusb schauen, ob die Station erkannt wurde:
  2. Es sollte ein Gerät mit der ID 1b1f:c006 auftauchen.
  3. Die Produkt-ID ist die 1b1f und Vendor-ID c006.

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])

Benötige Programme

apt-get install gcc make ncftp patch bzip2 perl

Perl Module installieren

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'

ws500.pl anpassen

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 phpmyadmin

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
);

ws500.conf

Die ws500.conf unter /etc/ws500 an die entsprechende MySQL und an die Sensoren anpassen.

ws500.pl

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.

Webfrontend

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:

Links

hardware/ws_300_pc_funk-wetterstation.txt · Zuletzt geändert: 2011/03/04 13:30 von wolf