This post will show you how to generate weather data from LA Crosse WS2300 series weather stations for submission to the APRS network.

APRS software I’m using is Xastir, but you can use this setup to push the weather data to other APRS applications also. Digipeater mode is already set up in Xastir. This post will not cover digipeating WX data.

1. Install packages

apt-get update apt-get install bc ncat unzip gcc build-essential

2. Download open2300 and compile fetch2300

Fetch2300 is part of open2300, it’s used to connect to the weather station and return the data. Credit goes to Kenneth Lavrsen (http://www.lavrsen.dk/foswiki/bin/view/Open2300)

wget -O "open2300-1-10.zip" https://sourceforge.net/projects/open2300/files/open2300/1.10/open2300-1.10.zip/download" unzip open2300-1-10.zip cd open2300-1.10 make fetch2300 cp fetch2300 /usr/local/bin/fetch2300



3. Edit and rename open2300 config file named open2300-dist.conf or copy mine to /etc/open2300/open2300.conf

mkdir -p /etc/open2300 nano /etc/open2300/open2300.conf

SERIAL_DEVICE /dev/ttyUSB1 #/dev/ttyS0, /dev/ttyS1, COM1, COM2 etc TIMEZONE 1 # Hours Relative to UTC. East is positive, west is negative WIND_SPEED km/h # select MPH (miles/hour), m/s, or km/h TEMPERATURE F # Select C or F RAIN IN # Select mm or IN PRESSURE hPa # Select hPa, mb or INHG

Note: make sure you select the correct SERIAL_DEVICE in the config. The station in my setup

is connected via USB to RS232 converter so the device is ttyUSB0. Also, don’t change the units, bash script will automatically convert them to be compatible with APRS network.

4. Copy bash script to desired location

mkdir -p /root/ws2300/ nano wxdata_v1.6.sh

#!/bin/bash #This script reads weather data via fetch program which is part of Open2300 suite written by Kenneth Lavrsen (http://www. #lavrsen.dk/foswiki/bin/view/Open2300/WebHome). #It outputs the right data needed to feed Xastir for APRS weather reports. The scripts utilizes Ncat utility as server to #serve the fetched output to Xastir. #Fetched Data is pushed to Ncat server and then to Xastir. (Fetched data -> Ncat server -> Xastir) #Ncat is part of Nmap, get it by installing Nmap. #This script should work for LaCrosse weather stations, WS23xx series. Testing was done with WS2307. #Written by S55MA and S56IUL, May 2016 #DEFINE VARIABLES host="127.0.0.1" port="1234" #Start the Ncat server chkncat=$(netstat -ant | grep $host:$port | grep -c LISTEN) if [ "$chkncat" -ge "1" ] then echo "ncat already running, nothing to do" else nohup ncat -k -l --broker $host $port &>/dev/null & fi #Start while loop while true; do echo "start `date`" datetime=$(date '+%Y%m%d%H%M%S') ws2300config="/etc/open2300/open2300.conf" /usr/local/bin/fetch2300 $ws2300config > /tmp/wxdata-"$datetime".tmp fetch_path="/tmp/wxdata-$datetime.tmp" chkfile=$(ls -la $fetch_path | awk -F ' ' '{ print $5 }') if [ "$chkfile" -le "43" ] then echo "No Data" sleep 30 else tempF=$(cat "$fetch_path" | grep To | grep -v 'min\|max\|DRtot\|TRtot' | awk '{print $2}') temp1=$(echo "$tempF" | awk '{ printf ("%d

",$1 + 0.5)}') if [ "$temp1" -ge "99" ] || [ "$temp1" -le "-99" ] then temp="$temp1" else if [ "$temp1" -le "-1" ] then if [ "$temp1" -ge "-9" ] then temp2=$(echo "$temp1" | sed 's/[-]//g') temp=$(echo -0"$temp2") else temp2=$(echo "$temp1" | sed 's/[-]//g') temp=$(echo -"$temp1") fi else temp=$(echo 0"$temp1") fi fi windspeed2=$(cat "$fetch_path" | grep -m1 WS | grep -v 'min\|max\|DRtot\|TRtot'| awk '{print $2/1.609344}' | awk '{ printf ("%d

",$1 + 0.5)}') if [ "$windspeed2" -le "9" ] then windspeed=$(echo 00"$windspeed2") else if [ "$windspeed2" -le "99" ] then windspeed=$(echo 0"$windspeed2") else windspeed=$(echo "$windspeed2") fi fi winddirection2=$(cat "$fetch_path" | grep DIR0 | awk '{print $2}' | sed 's/\..*$//') if [ "$winddirection2" -le "9" ] then winddirection=$(echo 00"$winddirection2") else if [ "$winddirection2" -le "99" ] then winddirection=$(echo 0"$winddirection2") else winddirection=$(echo "$winddirection2") fi fi rain1h=$(cat "$fetch_path" | grep R1h | grep -v 'min\|max' | awk '{print $2}' | sed 's/[.]//g') rain24h=$(cat "$fetch_path" | grep R24h | grep -v 'min\|max' | awk '{print $2}' | sed 's/[.]//g') airpressureR=$(cat "$fetch_path" | grep RP | grep -v 'min\|max' | awk '{print $2}') airpressure2=$(echo "scale=1;$airpressureR / 1" | bc | sed 's/[.]//g') if [ "$airpressure2" -le "9999" ] then airpressure=$(echo 0"$airpressure2") else airpressure=$(echo "$airpressure2") fi relhumidity=$(cat "$fetch_path" | grep RHo | grep -v 'min\|max' | awk '{print $2}' | sed 's/\..*$//') #Combine variables to forge Xastir string xastir="c${winddirection}s${windspeed}t${temp}r${rain1h}p${rain24h}b${airpressure}h${relhumidity}xDvs" printf "%s

" "$xastir" | ncat --send-only $host $port echo "$xastir" sleep 3 rm -f /tmp/wxdata-*.tmp echo "stop `date`" echo "-----------------------------------" fi done #EOS



If there are some formatting mistakes, the script is also available on pastebin: http://pastebin.com/29q8epF8

5. Start the script

/root/ws2300/wxdata_v1.6.sh

You should see output similar to that:

start Tue May 3 00:36:47 CEST 2016 c112s013t048b10037h85xDvs

Leave the script running, open another terminal and check if ncat is getting data:

ncat localhost 1234

Wait a few seconds and you should get the result similar to that:

c112s018t048b10037h85xDvs



6. Go to Xastir and add the WX interface

Interface -> Interface Control -> Add -> Networked WX

WX Host: 127.0.0.1

WX Port: 1234

Save and start the interface.

7. Go to Xastir, View -> Own Weather Data

You should see your own weather data from the station

8. Start the script at boot and run it in background

Open /etc/rc.local and add

screen -d -m /root/ws2300/wxdata_v1.6.sh

Save and exit

Note: make sure you set your own path of the script location