Boston Linux & UNIX was originally founded in 1994 as part of The Boston Computer Society. We meet on the third Wednesday of each month at the Massachusetts Institute of Technology, in Building E51.

BLU Discuss list archive


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Discuss] Linux project - WX



Thanks for sharing that write-up Rich!

I've got a crappy (consumer) wireless weather station in my back yard.  I'd
like to someday upgrade it like the setup you did.  So, I'm keeping a copy
of your notes for future reference.  I put it into my wiki at
https://freephile.org/wiki/index.php/Linux_weather_station  Feel free to
reference that and/or let me know if you'd like a wiki account to add/edit.

Greg Rundlett
http://eQuality-Tech.com
http://freephile.org

On Tue, Feb 10, 2015 at 2:10 AM, Rich Braun <richb at pioneer.ci.net> wrote:

> Not long after my last move, the wireless receiver on my antiquated
> Brookstone
> outdoor thermometers broke, reviving my decade-old interest in building a
> Linux-based weather observatory.
>
> This is a How-To for the project that I've built since 15-Jan, which you
> can
> view at http://wx.ci.net.  The main thing that's changed since mid-2000s
> is
> that low-power embedded-Linux machines have gotten insanely cheap; alas,
> the
> climate-measuring gear hasn't changed at all.  Oh, and Weather Underground
> got
> bought out by TWC just a couple years ago, alas.  Here goes: I'll share the
> assumptions, parts list, and software setup.
>
> Assumptions
> -----------
> - You're doing this as a home hobbyist, not a professional.
>
> - You have permission/ability to securely mount an anemometer at a high
> point
> near your home, workplace, school or friend's place.
>
> - You want to bear witness to climate changes over time, in a precise way.
>
> - In addition to temperature, you want to measure wind, rainfall, and
> barometric pressure
>
> - You want your data fully accessible online or on your mobile device, and
> to
> share it via a website (your own or Weather Underground).
>
> - Once set up, you don't want to have to babysit the hardware.
>
> - You already have a web server somewhere (local or far-away, Apache or
> nginx:
> doesn't matter).
>
> - Optionally, you have a local instance of MySQL available somewhere.
>
> Parts List
> ----------
> - Raspberry Pi with SD Card (type 10, 8GB or bigger) - $30
>
> - Davis Instruments station - choose from
>   Vantage Pro 2 wireless with fan-aspirated shield - $695
>   Vantage Pro 2 wired - $415
>   Vantage Vue wireless - $310
>   (Sensors for sunlight UV/visible are bundled at the $850 level)
>
> - 3 batteries (C size) for Davis console - $8
>
> - Davis Instruments logger (required) with WeatherLink - $130
>
> - Dahua 3MP outdoor webcam model IPC-HFW4300S - $125
>
> - PoE injector for webcam - $20 to $40
>
> - 10' steel mounting pole (1-1/4" galvanized natural-gas pipe) with
>   end cap U-clamps from Home Depot - $25
>
> Approximate budget: $500 low-end without cam, $1050 high-end with cam
>
> I am not aware of any worthy rival to Davis Instruments; you can get
> something
> that *might* work for less than the low end of my suggested budget, but
> very
> likely will make the whole project a huge, unreliable chore. The Davis
> products are woefully obsolete as UI devices, but I swallowed my criticism
> and
> am focused on getting the data online. Dahua does have decent rivals, but
> at
> this price-point there really isn't anything worth considering.
>
> Hardware Setup
> --------------
> - Find the highest point available, put the end cap on your mounting pole
>
> - Fasten anemometer to top of pole using Davis-included hardware, and the
> rest
> of the instrument array about 3' below the top
>
> - Securely attach pole to a wall or railing at the highest
> structurally-sound
> part of your property. Make sure it doesn't *budge* even in high winds. If
> you
> got a non-wireless version, route the cable to where you place the console.
>
> - Open back of the Davis console, install batteries and the overpriced
> logger
> thingie.  Find your coffee table, take out the Windows software that came
> with
> the logger and put a mug of beer on it.  Sip beer slowly at next step.
>
> - Plug a USB cable from your Rasberry Pi into the logger, and an Ethernet
> cable into your LAN (or wifi if you prefer that)
>
> - Figure out your latitude/longitude/elevation, enter them into the station
> console
>
> - (Optional) find a good spot for your webcam, run cat5e cable to its
> location
> from your Ethernet switch and test with PoE power injector; verify browser
> access with password admin/admin
>
> Software Setup - WX
> -------------------
> - Get Raspbian onto your SD card; plug a blank card into your Linux or Mac
> and
> use the 'dd' command to copy the Debian Wheezy 2015-01-31 image from
> http://www.raspberrypi.org/downloads/ to the card.  Tip for Mac users:
> use the
> "rdisk" device, e.g. /dev/rdisk1, otherwise the copy will take hours.
>
> - Plug an HDMI monitor and keyboard (temporarily) into the Raspberry Pi and
> boot it up; go through its dialog, selecting en_US.UTF-8 locale, then log
> in
> as 'pi'.
>
> - Use fdisk/resize2fs (or the Raspbian installer dialog) to increase size
> of
> the root volume (I prefer manual configuration so I can leave some scratch
> space available to use in a pinch).
>
> - Invoke: apt-get install xtide xtide-data python-configobj \
>        sysstat python-mysqldb python-serial python-usb \
>        python-cheetah python-imaging rsync
>
> - Invoke apt-get update, then download weewx_3.0.1-1.deb package from
> http://sourceforge.net/projects/weewx/files, install with 'dpkg -i'
> command
>
> - Verify connectivity with the weather station, and set parameters thus:
>    wee_config_device --set-interval 300
>    wee_config_device --set-rain-year-start=7 # or whatever month
>
> - Set up a vhost on your webserver.  My apache2 vhost looks like this:
>
>   <VirtualHost *:80>
>     # Server Configuration:
>     ServerName wx.ci.net
>     DocumentRoot "/var/www/htdocs/wx/"
>     ServerAdmin richb at instantlinux.net
>     ServerSignature email
>     DirectoryIndex forecast.html
>     HostNameLookups Off
>     <Directory /var/www/htdocs/wx>
>          Options -Indexes FollowSymLinks
>          AllowOverride All
>          Order allow,deny
>          Allow from all
>     </Directory>
>   </VirtualHost>
>
> - Set up a username 'wx' and ssh keypair for uploads to the webserver, on
> both
> the Raspberry Pi and the web server: this will be used for rsync. (You can
> use
> an existing username on the webserver if you have to.)
>
> - If you like my WeeGreen 'skin', download it from
> https://github.com/instantlinux/weewx-WeeGreen and change the
>
> - Download the forecast extension from MIT:
> http://lancet.mit.edu/mwall/projects/weather/
>
> - Invoke: /usr/share/weewx/setup.py install \
>        --extension /var/tmp/weewx-forecast-3.0.2.tgz
>
> - The forecast extension comes with its own skin; optionally you can turn
> that
> of if you've decided on WeeGreen (or if you're customizing off mine)
>
> - Register yourself at Weather Underground, get an API key and a station
> identifier.  My ID is KCASANFR366.
>
> - If you prefer 12-hour format on your output, change the formats from
> %H:%M
> in /etc/weewx/skins/WeeGreen/skin.conf
>
> - Adjust the other preferences in skin.conf
>
> - In the top-level /etc/weewx/weewx.conf, there are several settings to
> update: you can (mostly) ignore the Station section because settings are
> overridden by what's set in the console, but you'll want to add your XTide
> location and WU api_key to the Forecast section, and station ID/password in
> the Wunderground section, rapidfire = True (that part's kinda remarkable),
> and
> your web server user/path info to the Rsync section
>
> - If you have a MySQL server (strongly recommended), make a blank database
> and
> add its credential settings to the Databases section.  You actually need
> two
> separate databases, I call mine weewx_a and weewx_f, because the forecast
> and
> archive engines both write to the same table name.  There's a cool script
> you
> can download to convert from sqlite3 to mysql if you've already got data
> collected in sqlite3 (google for 'weewx sqlite3-to-mysql.py').
>
> - Add this line to /etc/fstab:
>   tmpfs  /var/www/weewx tmpfs  nodev,nosuid,noexec,nodiratime,size=4M 0 0
>
> - If you have a central rsyslog (also strongly recommended) create the file
> /etc/rsyslog.d/custom.conf with content like the following:
>   *.info;*.=notice;*.=warn;auth;user.*;daemon.*;mail.none; \
>     cron.!=info;local1.*;local3.none    @@syslog.ci.net:601
>
> Software Setup - Cam
> --------------------
> Webcam capability is a nice-to-have feature which will drive traffic to
> your
> observatory if your camera has a good vantage point.  (Mine happens to be
> aimed at Twin Peaks and the Sutro Tower, with a chunk of western sky where
> fog
> and clouds provide dramatic time-lapse opportunities.) Everywhere has
> unique
> opportunities, so be creative even if all you think you've got is a view of
> passing traffic.
>
> The embedded-Linux-based camera I've recommended here, from Dahua, is a
> hobbyist's dream compared to the likes of much-hyped cloud-centric products
> like Dropcam: from its brower console, you get a whole ton of tunable
> settings. It's also going to give you an image 2048x1536 rather than
> something-by-720, at a fraction of the price.
>
> - Log into the camera and confirm you can see image in the "Live" tab
>
> - On your local Linux system (could be your Raspberry Pi but I have a
> better/faster box for pre-processing images), configure a dedicated ftp
> user/password (sorry, no scp: yeah, I know--Dahua is a "security" company).
>
> - In the Dahua's Camera->Video->Snapshot section, select "Best" quality
>
> - In the same section, select Customized interval, and choose how often you
> want your time-lapse images to be uploaded (I picked 150 seconds)
>
> - In the Storage->Schedule->Snapshot Schedule, select 24x7 and make sure
> the
> "general" (green) band shows up 7 days a week
>
> - Although I'm using the Dahua strictly as a webcam, note that while you're
> installing this, you can build an on-the-cheap burglar alarm out of this
> thing
> by enabling motion-detect video and email alerts in the Event->Video
> Detect->Motion Detect section.  Works just like the Dropcam my neighbor
> showed
> me after we got hit by burglars.  Net effect is the burglar's activities
> are
> uploaded to the cloud at least up to the point where he steals your camera.
>
> - OK assuming your camera hasn't gotten stolen in the above step (yes, I
> took
> my own advice, and hope that you're taking your next sip of beer): go to
> the
> Storage->Destination->FTP tab and enter the ftp credentials noted above. I
> told it to use a directory called "upload".  The camera will start sending
> snapshots to that directory every 150 seconds, in a stupidly-complicated
> directory hierarchy.  But because you know bash, you don't care how silly
> the
> pathnames are.
>
> - Once you verify that you're getting the uploads to your local ftp
> way-station directory, you can optionally register your web cam at
> Wunderground (for inspiration, take a look at any of the Boston-area ones
> by
> browsing maps at wunderground.com, or my SF one at
> http://www.wunderground.com/webcams/RichCastroWX/1/show.html); the process
> takes only a single "Add Your Webcam" dialog box - pick "ftp" and then
> tell it
> where you are and what you want to name the webcam. (You can have more than
> one.) Shrug off your objections to Internet privacy: we, ISIS and the NSA
> already know where you are.
>
> - Install ImageMagick and ncftp on your local ftp server and set up a
> crontab
> to run an uploader script.  Notice how my images are a non-standard aspect
> ratio: I chose to crop the image, and retain as much image-quality as will
> fit
> in 150Kb, prior to transferring to wunderground.com. Since you objected to
> learning bash two steps up, here's my script:
>
>  #! /bin/bash
>  # Upload latest image to wunderground
>
>  CAM=$1
>  MAX_SIZE=145kb
>  MAX_TIME=60
>  RETRIES=3
>
>  cd ~/upload/$CAM
>  LATEST=`find . -type f -name *.jpg -mmin -5 -print|sort -r |head -1`
>  IMG=/tmp/image.jpg
>  if [ "$LATEST" != "" ]; then
>   convert $LATEST -crop 1920x880+0+0 -define jpeg:extent=$MAX_SIZE $IMG
>   while [ $RETRIES -gt 0 ]; do
>     START=`date +%s`
>     ncftpput -f ~/.ncftp -t $MAX_TIME -V -d /tmp/wxupload-debug.log / $IMG
>     RET=$?
>     FIN=`date +%s`
>     if [ $RET == 0 ]; then
>       logger WX upload file=$LATEST bytes=`stat -c %s $IMG` seconds=$((FIN
> -
> START))
>       break
>     else
>       logger -p user.warning WX upload failed file=$LATEST bytes=`stat -c
> %s
> $IMG` seconds=$((FIN - START))
>     fi
>     RET=$((RET - 1))
>     sleep 5
>   done
>   rm $IMG
>  fi
>
> - Your wunderground.com ftp-upload credentials (wunderground is *not* a
> security company, so they likewise don't do scp) need to be put into the
> upload role user's ~/.ncftp file in this form:
>
>   host webcam.wunderground.com
>   user RichCastroWXCAM1
>   pass xxxxxx
>
> Wrap-up
> -------
> Early in the above instructions, I mentioned installing sysstat.  Next
> step:
>
> - Invoke on the Raspberry Pi: iostat -k -d 60
>
> - Wait 10 minutes and take note of the kB_wrtn values.  You're looking to
> make
> sure the SD card doesn't blow up after a few weeks/months (like mine did
> last
> Friday).
>
> - If you're seeing any activity on the SD card, double-check your rsyslog,
> MySQL, and tmpfs mounts.  If you've followed these instructions, the SD
> card
> should get zero activity and the Raspberry Pi will remain reliable for more
> years than the external sensors.
>
> - Add monitoring of your webcam(s), Raspberry Pi, and web logs to your
> nagios/zabbix instance
>
> - Install the wunderground app on your mobile device
>
> - Make sure you've got a one-time backup of the Raspberry Pi's SD card, and
> daily backups of the video upload directory on your ftp server and your
> mysql
> database.
>
> - Enjoy a second mug of Sam Adams
>
> ---------------
> That's it, hopefully this HOWTO inspires you to bear witness to global
> climate
> change (you don't trust the TV and websites to give you unbiased info, do
> you?), and saves you lots of time as you juggle the software and hardware
> bits.
>
> My apologies for the snow in Boston at this time, and for the fact that
> unless
> you shell out an extra $kilobuck, the only automated measurement of
> snowfall
> you can make is its water content.
>
> -rich
> Footnote: the abbreviation "WX" for weather is familiar to me from work in
> aviation software. But it actually comes from the days of telegraph
> machines:
> in Morse code it is .-- -..-
>
>
> _______________________________________________
> Discuss mailing list
> Discuss at blu.org
> http://lists.blu.org/mailman/listinfo/discuss
>



BLU is a member of BostonUserGroups
BLU is a member of BostonUserGroups
We also thank MIT for the use of their facilities.

Valid HTML 4.01! Valid CSS!



Boston Linux & Unix / webmaster@blu.org