Tuesday, August 26, 2014

WeeWX with simulated data

WeeWX is a nice software that allows you to communicate with your weather station. Unfortunately I don't own a weather station (currently I'm thinking about buying one - that's why I stumbled over WeeWX) but WeeWX offers to simulate a weather station. And that is was this article is about: install WeeWX under Slackware and run it in simulator mode.
Before you can install WeeWX you need a few more python modules, at least configobj, six, pyserial and Cheetah. If you have a weather station than you might more python modules.
Start by creating a build location where you can store all your sources etc:
# mkdir /usr/src/weewx

Python module configobj:

# cd /usr/src/weewx
# wget -c ""
# tar xf configobj-5.0.5.tar.gz
# cd configobj-5.0.5
# python install
Writing /usr/lib64/python2.7/site-packages/configobj-5.0.5-py2.7.egg-info

Python module six:

# cd /usr/src/weewx
# wget -c ""
# tar xf six-1.7.2.tar.gz
# cd six-1.7.2
# python install
Writing /usr/lib64/python2.7/site-packages/six-1.7.2-py2.7.egg-info

Python module pyserial:

# cd /usr/src/weewx
# wget -c ""
# tar xf pyserial-2.7.tar.gz
# cd pyserial-2.7
# python install
Writing /usr/lib64/python2.7/site-packages/pyserial-2.7-py2.7.egg-info

Python module Cheetah:

# cd /usr/src/weewx
# wget -c ""
# tar xf Cheetah-2.4.4.tar.gz
# cd Cheetah-2.4.4
# python install
Writing /usr/lib64/python2.7/site-packages/Cheetah-2.4.4-py2.7.egg-info

Finally you can install weewx. First get the source and extract it:

# cd /usr/src/weewx
# wget -c ""
# tar xf weewx-2.6.4.tar.gz
# cd weewx-2.6.4

WeeWX will be installed under /home/weewx by default. If you want to change the installation directory then edit the setup.cfg file like this:

# vi setup.cfg
#home = /home/weewx
home = /opt/weewx/2.6.4

Then build WeeWX:

# python build
changing mode of build/scripts-2.7/wee_reports from 644 to 755

And install WeeWX:

# python install
Writing /opt/weewx/2.6.4/bin/weewx-2.6.4-py2.7.egg-info

The next thing you need to do is to configure WeeWX. Move to your installation directory and backup the original configuration file first:

# cd /opt/weewx/2.6.4/
# mv weewx.conf weewx.conf.bak

And create the following configuration file:

# vi weewx.conf
debug = 0
WEEWX_ROOT = /opt/weewx/2.6.4/
socket_timeout = 20
version = 2.6.4

    location = Linz, Austria
    latitude = 48.3063900
    longitude = 14.2861100
    altitude = 256, meter
    rain_year_start = 1
    week_start = 0
    station_url =
    station_type = Simulator

    loop_interval = 2.5
    mode = simulator
    driver = weewx.drivers.simulator

        register_this_station = False
        rapidfire = False
        log_success = True
        log_failure = True
        post_interval = 600
        log_success = True
        log_failure = True
        log_success = True
        log_failure = True
        log_success = True
        log_failure = True

    SKIN_ROOT = skins
    HTML_ROOT = public_html
        skin = Standard
        skin = Ftp
        port = 21
        passive = 1
        max_tries = 3
        skin = Rsync
        delete = 0

    target_unit = METRIC


        barometer = 280, 1200, hPa
        outTemp = -40, 120, degree_C
        inTemp = 10, 120, degree_C
        outHumidity = 0, 100
        inHumidity = 0, 100
        rain = 0, 60, cm
        windSpeed = 0, 120, km_per_hour

    archive_database = archive_sqlite
    stats_database = stats_sqlite
    archive_interval = 300
    archive_delay = 15
    record_generation = hardware
    loop_hilo = True
    archive_schema = user.schemas.defaultArchiveSchema
    stats_schema = user.schemas.defaultStatsSchema

    clock_check = 14400
    max_drift = 5

        root = %(WEEWX_ROOT)s
        database = archive/weewx.sdb
        driver = weedb.sqlite
        root = %(WEEWX_ROOT)s
        database = archive/stats.sdb
        driver = weedb.sqlite

        prep_services = weewx.wxengine.StdTimeSynch
        process_services = weewx.wxengine.StdConvert, weewx.wxengine.StdCalibrate, weewx.wxengine.StdQC
        archive_services = weewx.wxengine.StdArchive
        restful_services = weewx.restx.StdStationRegistry, weewx.restx.StdWunderground, weewx.restx.StdPWSweather, weewx.restx.StdCWOP, weewx.restx.StdWOW, weewx.restx.StdAWEKAS
        report_services = weewx.wxengine.StdPrint, weewx.wxengine.StdReport

Just a few mentions about the configuration file:

Contains the information where the station is setup etc. Just search the web for yours cite latitude etc. It also contains the station type, in this case simulator.

[StdConvert] and [StdQC]
Defines which units to use.

Defines the database backend.

As you can see above I use non US units like cm, degree in celsius and so on. The same has to be configured for the skin so that the right values will be displayed. Go to the skin folder and edit the file skin.conf (if you need/want to change something or even all):

# cd /opt/weewx/2.6.4/skins/Standard
# vi skin.conf
        group_altitude     = meter
        group_degree_day   = degree_C_day
        group_direction    = degree_compass
        group_moisture     = centibar
        group_percent      = percent
        group_pressure     = hPa
        group_radiation    = watt_per_meter_squared
        group_rain         = cm
        group_rainrate     = cm_per_hour
        group_speed        = km_per_hour
        group_speed2       = km_per_hour2
        group_temperature  = degree_C
        group_uv           = uv_index
        group_volt         = volt

As you can above I use meter instead of foot etc.
Now it is time to start WeeWX finally:

# /usr/bin/python /opt/weewx/2.6.4/bin/weewxd /opt/weewx/2.6.4/weewx.conf -d -p /var/run/

Check that WeeWX is really running:

# pgrep -fl weewx
1101 /usr/bin/python /opt/weewx/2.6.4/bin/weewxd /opt/weewx/2.6.4/weewx.conf -d -p /var/run/

WeeWX will generate a few simulated data now. After ca. five minutes a new directory public_html will be created which contains all web based data. The data itself will be stored in the archive folder (if sqlite was defined).
Now it is time to configure Apache. First create the extra configuration file for weewx:

# vi /etc/httpd/extra/weewx.conf
Alias /weewx /opt/weewx/2.6.4/public_html
<Directory /opt/weewx/2.6.4/public_html>
  Options FollowSymlinks
  AllowOverride None
  Order allow,deny
  Allow from all
  #Require all granted
  AuthType Basic
  AuthName "weewx"
  AuthBasicProvider file
  AuthUserFile /opt/weewx/2.6.4/users
  Require user weewx

As you can see above the configuration file points to the public_html file in the WeeWX installation directory. A basic authentication is required and the user is stored in /opt/weewx/2.6.4/users for the user weewx. Next you need to create the user file with the password:

# htpasswd -c /opt/weewx/2.6.4/users weewx
New password: It'satrap!
Re-type new password: It'satrap!
Adding password for user weewx

Now make sure that Apache has PHP support and that the extra configuration file for WeeWX will be loaded:

# vi /etc/httpd/httpd.conf
Include /etc/httpd/mod_php.conf
Include /etc/httpd/extra/weewx.conf

In case that Apache is not running already start Apache:

# chmod 755 /etc/rc.d/rc.httpd
# /etc/rc.d/rc.httpd start

Otherwise just restart Apache:

# /etc/rc.d/rc.httpd restart

When the public_html directory has been created you can navigate with your webbrowser to the WeeWX address, eg:

Enter username and password (eg. weewx / It'satrap! like above) and WeeWX with some graphs based on simulated data should appear:

Since I don't own a real weather station (perhaps I'll have one soon) it's pretty useless to run WeeWX standalone. On the other hand even with only simulated data WeeWX is very interesting and worth a look. For supported hardware, more in depth documentation and so on visit the project's website: