Die Tage stolperte ich über fowsr. Dabei handelt es sich über eine kleine Programmsammlung zum Auslesen und Verteilen der Daten aus verschiedenen Wetterstationen. Zu den unterstützten Stationen gehört neben meiner PCE FWS 20 auch folgende Typen:
- WH1080 / WH1081 / WH1090 / WH1091 / WH2080 / WH2081
- Watson W-8681
- Scientific Sales Pro Touch Screen Weather Station
- TOPCOM NATIONAL GEOGRAPHIC 265NE
Da ich mir gerade ein Laptop mit Ubuntu 12.04 LTS (beta) Precise Pangolin fertig gemacht hatte, war das doch der ideale Rechner, um fowsr auszuprobieren.
Doch nach einem einfachen make gab’s folgende Fehlermeldungen:
gcc -c -o fowsr.o fowsr.c fowsr.c: In function ‘CWS_print_decoded_data’: fowsr.c:279:3: warning: format not a string literal and no format arguments [-Wformat-security] fowsr.c: In function ‘CWS_decode’: fowsr.c:477:4: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 3 has type ‘double’ [-Wformat] fowsr.c: In function ‘CWF_Write’: fowsr.c:602:6: warning: field width used with ‘%A’ gnu_strftime format [-Wformat] fowsr.c:602:6: warning: field width used with ‘%A’ gnu_strftime format [-Wformat] gcc -lusb -lm -o fowsr fowsr.o fowsr.o: In function `list_devices': fowsr.c:(.text+0x11d): undefined reference to `usb_get_busses' fowsr.o: In function `find_device': fowsr.c:(.text+0x188): undefined reference to `usb_get_busses' fowsr.o: In function `CUSB_Open': fowsr.c:(.text+0x200): undefined reference to `usb_init' fowsr.c:(.text+0x20c): undefined reference to `usb_set_debug' fowsr.c:(.text+0x211): undefined reference to `usb_find_busses' fowsr.c:(.text+0x216): undefined reference to `usb_find_devices' fowsr.c:(.text+0x267): undefined reference to `usb_open' fowsr.c:(.text+0x2d5): undefined reference to `usb_get_driver_np' fowsr.c:(.text+0x327): undefined reference to `usb_detach_kernel_driver_np' fowsr.c:(.text+0x359): undefined reference to `usb_claim_interface' fowsr.c:(.text+0x3a0): undefined reference to `usb_set_altinterface' fowsr.c:(.text+0x402): undefined reference to `usb_get_descriptor' fowsr.c:(.text+0x437): undefined reference to `usb_get_descriptor' fowsr.c:(.text+0x46c): undefined reference to `usb_get_descriptor' fowsr.c:(.text+0x487): undefined reference to `usb_release_interface' fowsr.c:(.text+0x4c2): undefined reference to `usb_set_configuration' fowsr.c:(.text+0x4dd): undefined reference to `usb_claim_interface' fowsr.c:(.text+0x518): undefined reference to `usb_set_altinterface' fowsr.c:(.text+0x565): undefined reference to `usb_control_msg' fowsr.c:(.text+0x59a): undefined reference to `usb_get_descriptor' fowsr.o: In function `CUSB_Close': fowsr.c:(.text+0x5d4): undefined reference to `usb_release_interface' fowsr.c:(.text+0x628): undefined reference to `usb_close' fowsr.o: In function `CUSB_read_block': fowsr.c:(.text+0x708): undefined reference to `usb_control_msg' fowsr.c:(.text+0x737): undefined reference to `usb_interrupt_read' fowsr.o: In function `CUSB_write_byte': fowsr.c:(.text+0x7ef): undefined reference to `usb_control_msg' fowsr.c:(.text+0x81e): undefined reference to `usb_interrupt_write' fowsr.c:(.text+0x84d): undefined reference to `usb_interrupt_read' fowsr.o: In function `CUSB_write_block': fowsr.c:(.text+0x900): undefined reference to `usb_control_msg' fowsr.c:(.text+0x92f): undefined reference to `usb_interrupt_write' fowsr.c:(.text+0x95e): undefined reference to `usb_interrupt_read' fowsr.o: In function `CWS_dew_point': fowsr.c:(.text+0x10e7): undefined reference to `log' collect2: ld returned 1 exit status make: *** [fowsr] Error 1
Das sah gar nicht gut aus. Irgendetwas passte beim Linken nicht. Also habe ich erstmal ein wenig gegoogelt. Angeblich setzt fowsr libusb in der Version 0.1 voraus. Ich hatte sowohl die Pakete libusb-0.1-4 wie auch libusb-1.0-0 installiert. Für letzteres auch das Developer Paket.
Nun gut, da das nicht zum Erfolg führte, habe ich mir die libusb in der Version 0.1 unter /opt installiert.
Auch dann funktionierte das Kompilieren und Linken in einem Schritt nicht. Daher habe ich es manuell gebaut:
gcc -I/opt/include -L/opt/lib -lm -lusb fowsr.c -c -o fowsr.o gcc -o fowsr ./fowsr.o -lusb -lm
Nachher fiel mir dann auf, dass es auch in einem Rutsch geht, wenn man die Optionen in der richtigen Reihenfolge setzt:
> gcc -o fowsr -I/opt/include -L/opt/lib fowsr.c -lm -lusb fowsr.c: In function ‘CWS_print_decoded_data’: fowsr.c:279:3: warning: format not a string literal and no format arguments [-Wformat-security] fowsr.c: In function ‘CWS_decode’: fowsr.c:477:4: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 3 has type ‘double’ [-Wformat] fowsr.c: In function ‘CWF_Write’: fowsr.c:602:6: warning: field width used with ‘%A’ gnu_strftime format [-Wformat] fowsr.c:602:6: warning: field width used with ‘%A’ gnu_strftime format [-Wformat]
Der erste Schritt war also getan. Nun ging es ans Auslesen.
Wichtig hierfür ist, dass das Programm nach /var schreiben kann. Dort wird das Ausgabe-File angelegt. Man kann dies nur im Quellcode überschreiben, wenn man will. Per Option geht das zur Laufzeit nicht mehr.
Wenn die Daten nun ausgelesen werden können, steht nun an, die Daten auch zu veröffentlichen. Dazu werden bei fowsr zwei Skripte mitgeliefert, die die Daten zum einen zu Weatherunderground, zum anderen zu PWSWeather schicken, sofern man dort jeweils einen Account hat.
Ich habe mich zunächst für Weatherunderground entschieden. Dort werden zum Beispiel diese Grafiken dann bereitgestellt:






Recent Comments