Luc's Site

Oregon Scientific I600 - Working Again

1. Abstract

The weather forecast service for the Oregon Scientific I600 station has been discontinued as of February 2014, rendering the I300 and I600 weather stations useless. This article describes how data is being exchanged between the Weather OS Windows application and the weather servers. It also provides some hints on howto build your own weather server so you can bring your I600 station back to life.

2. Service Discontinued

My Oregon Scientific I600 weather station has been providing me with weather forecasts for years. By the end of 2013, however, the service became very unreliable and instead of fixing the problem, Oregon Scientific issued a statement in February 2014 that the service would be discontinued:

OS Weather Server Discontinuation Notice

We would like to express our sincere apologies to OS Weather server users about the server error occurred lately. After investigation, we have diagnosed that there is an irreparable technical problem occurred with the server and we hereby regret to announce that OS weather server will be permanently discontinued, with effective from 19th February 2014.

We are in the process of developing be a new PC Software for our WMR series (please refer to the below model list) that will be go on-live on 21st February 2014. Related user can visit our OS weather website (http://weather.oregonscientific.com/support.asp) for the new PC software download and more product information.

Model Affected Items
WMR88 PC software
WMR100 PC software
WMR200 PC software
WMRS200 PC software

Frequently Asked Questions

  1. Where can I download the new PC software?
    After 21st February 2014, you can download Weather OS Pro 88 and Weather OS Pro 200 PC software from http://weather.oregonscientific.com/support.asp
  2. Will there be different versions of PC software for different models?
    Yes, there will be two versions on New PC software:
    Weather OS Pro 88 for WMR88 & WMR100
    Weather OS Pro 200 for WMR200 & WMRS200
  3. Can EMS100, RMS300, RMS600, i300 and i600 work without the weather server?
    The main unit of EMS100, RMS300 and RMS600 will still function. Only the features in relation to the PC software will be disabled since the new PC software will only support WMR88/100/200 & WMRS200. However, I300 & I600 will be totally out of function after the weather server is shut down.

We apologize for any inconvenience caused.

So, if you own an I600 weather station like I do, your only remaining option is to throw it out and buy a new unit. Or is it?

Before Oregon Scientific permanently stopped the service, I did some reverse engineering to find out how the Windows application communicates with the weather server to retrieve the weather forecast data for the selected cities.

Once you know how data is being exchanged, it is fairly easy to build your own small web service that provides data to the Window WeatherOS application to be uploaded to the I600 unit.

3. Communication Protocol

After some network tracing and packet sniffing on my local network, I found out that the Weather OS application communicates with http://www.os-weather.com to retrieve configuration information and weather data. This server stopped providing forecast data in January 2014. As of April 2014, the server appears to be down permanently.

3.1 Application Startup

When the Weather OS application is launched, it launches the following queries:

http://www.os-weather.com/mds/client_software_info
http://www.os-weather.com/mds/wxfcsts/14071,16927,1028,4400,6455

The client_software_info query is launched at startup or when you select ">Update" from the main window's menu. The following data is returned:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mdsml PUBLIC "-//emacsian/MDSML 10.0" "http://web.emacsian.com/MetInfo/mdsml-10.0.dtd">
<mdsml>
<clientsw force="0" href="ftp://michaelng-lcd@ftp.idthk.com/DeployVer20080702-0255.msi" version="1.0.1">Weather OS client software version 1.0.1</clientsw>
<clientsw force="0" href="ftp://osweather1@ftp.idthk.com/DeployVer20080703-0245.msi" version="1.0.2">Weather OS client software version 1.0.2</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080704-0200.msi" version="1.0.3">Weather OS client software version 1.0.3</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080706-1600.msi" version="1.0.4">Weather OS client software version 1.0.4</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080709-0230.msi" version="1.0.5">Weather OS client software version 1.0.5</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080710-0150.msi" version="1.0.6">Weather OS client software version 1.0.6</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080711-0240.msi" version="1.0.7">Weather OS client software version 1.0.7</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080714-0025.msi" version="1.0.8">Weather OS client software version 1.0.8</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080716-0140.msi" version="1.0.9">Weather OS client software version 1.0.9</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080718-0200.msi" version="1.0.10">Weather OS client software version 1.0.10</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080719-0425.msi" version="1.1.0">Weather OS client software (Windows) version 1.1.0</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080720-2350.msi" version="1.1.1">Weather OS client software (windows) version 1.1.1</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080722-0340.msi" version="1.1.2">Weather OS client software (Windows) version 1.1.2</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080723-0400.msi" version="1.1.3">Weather OS client software (Windows) version 1.1.3</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080724-0420.msi" version="1.1.4">Weather OS client software (Windows) version 1.1.4</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080725-0240.msi" version="1.1.5">Weather OS client software (Windows) version 1.1.5</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080728-0130.msi" version="1.1.6">Weather OS client software (Windows) version 1.1.6</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080730-0340.msi" version="1.1.7">Weather OS client software (Windows) version 1.1.7</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080731-0130.msi" version="1.1.8">Weather OS client software (Windows) version 1.1.8</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080804-0100.msi" version="1.1.9">Weather OS client software (Windows) version 1.1.9</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080806-0255.msi" version="1.1.10">Weather OS client software (Windows) version 1.1.10</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080812-0215.msi" version="1.1.11">Weather OS client software (Windows) version 1.1.11</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080813-0200.msi" version="1.1.12">Weather OS client software (Windows) version 1.1.12</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080814-0155.msi" version="1.1.13">Weather OS client software (Windows) version 1.1.13</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20080817-2305.msi" version="1.1.14">Weather OS client software (Windows) version 1.1.14</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/DeployVer20081003-2110.msi" version="1.1.21">Weather OS client software (Windows) version 1.1.21</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/OSWeather+VS-20090206-0350.msi" version="1.1.50">Weather OS client software (Windows) version 1.1.50</clientsw>
<clientsw force="1" href="ftp://osweather1:idthk@ftp.idthk.com/OSWeather+VS-20090621-2345.msi" version="1.1.55">Weather OS client software (Windows) version 1.1.55</clientsw>
<clientsw force="0" href="ftp://osweather1:idthk@ftp.idthk.com/OSWeather+VS-20090621-2345.msi" version="1.1.55">Weather OS client software (Windows) version 1.1.55</clientsw>
<clientsw force="1" href="http://www2.os-weather.com/download/OSWeather_1.1.msi" version="1.1.57">Weather OS client software (Windows) version 1.1.57</clientsw>
</mdsml>

None of these download links seem to work anymore. The os-weather.com website is also offline, but part of the content can still be seen in the Wayback Machine Internet Archive (the software download links haven't been archived by the Wayback Machine).

The wxfcsts query retrieves weather data for five specified StationIDs. These correspond to the cities you selected in the "City" tab in the application's "Settings..." window.

3.2 Application Configuration

When "Settings..." is selected and the "City" tab in the Settings window is displayed, the application retrieves all Region, Country/Area, and City/US Zip data:

Get the region list:

http://www.os-weather.com/mds/region_list

For each selected region, get the country list (e.g. "6" is the region number for Europe):

http://www.os-weather.com/mds/country_area_list/6

For each selected country, get the list of available cities (e.g. "6100" is the country number for Belgium):

http://www.os-weather.com/mds/station_list/6100

When you finally click on "OK" or "Apply", the application will have the list of selected StationIDs for the wxfcsts queries.

3.3 Normal Operation

Every 10 minutes, the Weather OS application queries the weather server for new forecast data:

http://www.os-weather.com/mds/wxfcsts/14071,16927,1028,4400,6455

4. Data Format

The weather server provides forecast data in XML format. The complete DTD can be found here.

4.1 region_list query

When a region_list query is sent:

http://www.os-weather.com/mds/region_list

The following data is returned:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mdsml PUBLIC "-//emacsian/MDSML 10.0" "http://web.emacsian.com/MetInfo/mdsml-10.0.dtd">
<mdsml>
  <region code="1" xml:lang="en">AFRICA</region>
  <region code="2" xml:lang="en">ASIA</region>
  <region code="6" xml:lang="en">EUROPE</region>
  <region code="4" xml:lang="en">NORTH AMERICA CENTRAL AMERICA AND THE CARIBBEAN</region>
  <region code="3" xml:lang="en">SOUTH AMERICA</region>
  <region code="5" xml:lang="en">SOUTH-WEST PACIFIC</region>
</mdsml>

4.2 country_area_list query

When a region has been selected, the region code is sent using the country_area_list query in order to obtain a list of available countries.

For example: for region code "3" (South America)

http://www.os-weather.com/mds/country_area_list/3

The following data is returned:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mdsml PUBLIC "-//emacsian/MDSML 10.0" "http://web.emacsian.com/MetInfo/mdsml-10.0.dtd">
<mdsml>
  <countryarea code="3130" xml:lang="en">ARGENTINA</countryarea>
  <countryarea code="3060" xml:lang="en">BRAZIL</countryarea>
  <countryarea code="3100" xml:lang="en">CHILE</countryarea>
  <countryarea code="3030" xml:lang="en">GUYANA</countryarea>
  <countryarea code="3110" xml:lang="en">PARAGUAY</countryarea>
  <countryarea code="3080" xml:lang="en">PERU</countryarea>
  <countryarea code="3120" xml:lang="en">URUGUAY</countryarea>
</mdsml>

4.3 station_list query

Finally, for each selected country, the countryarea code is sent using the station_list query in order to obtain a list of available cities in that country.

For example, for countryarea code "3100" (Chile):

http://www.os-weather.com/mds/station_list/3100

The following data is returned:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mdsml PUBLIC "-//emacsian/MDSML 10.0" "http://web.emacsian.com/MetInfo/mdsml-10.0.dtd">
<mdsml>
  <station code="10887" xml:lang="en">IQUIQUE</station>
  <station code="4292" xml:lang="en">PUERTO MONTT</station>
  <station code="4302" xml:lang="en">PUNTA ARENAS</station>
</mdsml>

Once we have selected a list of 5 cities, we can now retrieve the weather forecast data.

4.4 weather forecast query wxfcsts

The I600 weather station can display a 5-day weather forecast for up to 5 cities. This data is retrieved using the wxfcsts query. This query accepts multiple stationIDs (as a comma-separated list). To keep things simple, the following example shows the data that is returned for only one stationID (note: "14071" is the stationID for Uccle, near Brussels/Belgium):

http://www.os-weather.com/mds/wxfcsts/14071

The following data is returned:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mdsml PUBLIC "-//emacsian/MDSML 10.0" "http://web.emacsian.com/MetInfo/mdsml-10.0.dtd">
<mdsml>
<wxfcst station="14071" latitude="50.81" longitude="4.35">
  <!-- UCCLE -->
  <forecast day="0">
    <maxtemp>12</maxtemp>
    <mintemp>7</mintemp>
    <icon>23</icon>
  </forecast>
  <forecast day="1">
    <maxtemp>16</maxtemp>
    <mintemp>6</mintemp>
    <icon>24</icon>
  </forecast>
  <forecast day="2">
    <maxtemp>14</maxtemp>
    <mintemp>6</mintemp>
    <icon>9</icon>
  </forecast>
  <forecast day="3">
    <maxtemp>13</maxtemp>
    <mintemp>7</mintemp>
    <icon>23</icon>
  </forecast>
  <forecast day="4">
    <maxtemp>16</maxtemp>
    <mintemp>6</mintemp>
    <icon>23</icon>
  </forecast>
  <time>
    <localtime utcoffset="3600" stdoffset="0">2014-03-15 15:28:56 Europe/Brussels</localtime>
  </time>
</wxfcst>
<time>
  <utc utcoffset="0" stdoffset="0">2014-03-15 14:28:56 UTC</utc>
</time>
</mdsml>

This one requires some more explanation:

4.5 error handling

When an error occurs, the following data structure is returned:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mdsml PUBLIC "-//emacsian/MDSML 10.0" "http://web.emacsian.com/MetInfo/mdsml-10.0.dtd">
<mdsml>
  <error code="1" xml:lang="en">no data</error>
</mdsml>

5. Build your own Weather Server

Now that we know how the WeatherOS application retrieves forecast data from the Oregon Scientific weather server, we can start providing our own forecast feed by pointing the PC application to our own webserver, which contains a collection of scripts mimicking the same behavior.

5.1 Point the WeatherOS application to your own server

To point the WeatherOS application to your own server, open the following file on your PC:

C:\Program Files\Oregon Scientific\ Weather OS\Config.ini

And look for the entry

(server)=www.os-weather.com

Change this to point to your own server, for example:

(server)=myserver.mydomain.com

5.2 Provide your own versions of the Weather Server scripts

To provide the XML structures described in the previous section, you have to implement the following server commands:

Generating the XML structures is fairly easy, but you still need some actual weather forecast data. I chose to use the Yahoo Weather RSS Feed.

5.2.1 Compile the list of Cities

The following information is required for a city for which the application will have to provide a forecast:

I have compiled a list of this data for each city that was supported by the Oregon Scientific WeatherOS application. This list can be downloaded here. Note to developers: each entry contains 10 fields, separated by a "@"-sign. This file serves as a datastore that will be queried by my protoype weather server scripts.

5.2.2 Create the Weather Server scripts

Back when I was researching how the communication between the Windows application and the weather server was working, I created a prototype weather server, consisting of a set of Unix shell scripts that are launched from an Apache webserver.

You can find copies of these scrips below, but first some warnings:

So here are the scripts and files:

osweather.db

This file contains the datastore with the city information. It goes in directory /var/local/os-weather on your Linux server. The weather server scripts all expect to find it there. If you want to put the file elsewhere, you will have to change the scripts.

client_software_info

This script goes in directory /var/www/mds. Make sure the script is executable so it can be started from the apache server. Also, this script writes debug info to the /var/local/os-weather/osweather.debug file, so make sure that file is writable by your apache user.

region_list

Also goes in directory /var/www/mds, must be executable, and writes debug info to /var/local/os-weather/osweather.debug.

country_area_list

Again, goes in directory /var/www/mds, must be executable, and writes debug info to /var/local/os-weather/osweather.debug. The extra argument (i.e. the region code for which the script has to provide the list of countries) is passed from the Apache web server to the script via the Unix environment variable PATH_INFO.

station_list

Same remarks as for the previous script: goes in /var/www/mds, must be executable, writes debug info to /var/local/os-weather/osweather.debug and takes its additional argument from the PATH_INFO environment variable.

wxfcsts

The previous scripts just generate lists of region, country/area, and city info so you are able to select your favorite cities in the Weather OS application on your PC.

This script will actually retrieve weather forecast data from the Yahoo Weather RSS Feed for each of the 5 cities you selected. As ususal, the scripts goes in /var/www/mds, must be executable, writes debug info to /var/local/os-weather/osweather.debug and takes its additional arguments from the PATH_INFO environment variable, but you know this already by now.

There are a few things to notice in this script:

5.2.3 Configure your Apache web server

When the scripts are installed in your /var/www/mds directory, and the datastore file and debug file are available in the /var/local/os-weather directory, the last thing to do is to configure your Apache web server to make the scripts available:

  ScriptAlias /mds/ "/var/www/mds/"
  <Directory "/var/www/mds">
      AllowOverride None
      Options None
      Order allow,deny
      Allow from all
  </Directory>

Note: if your Linux server is reachable from the Internet, you might want to replace 'Allow from all' with something more restrictive.

5.2.4 Adding your own Cities

The datastore file contains information for all the cities that were supported by the Oregon Scientic weather service. I generated this file based on the latitude and longitude of each city.

So if you want to add your own city, all you need is its latitude and longitude and feed them to this generate-entry script. The script will lookup the associated WOEID and try to compile the other fields. It will use the first available stationID greater or equal to 20000. For example, my home town:

unix$ generate-entry 50.86 4.69
6@EUROPE@6100@BELGIUM@20000@Heverlee@50.86@4.69@12817607@Europe/Brussels
unix$

If no WOEID exists, or if some other information cannot be found, the script will tell you so. If all goes well, you will get a valid entry that can be added to the datastore file.

5.2.5 Things still to do

There are a few things that I didn't investigate yet:

5.3 The result

It took me a couple of afternoons to implement the prototype server scripts and to get all the mappings between the Oregon Scientific stationIDs and the Yahoo WOEIDs right. I also had to create a mapping between the Yahoo weather forecast icons and the Oregon Scientific forecast icons. It's not a straightforward 1-on-1 translation, but I think I got most of it right.

The ultimate goal should be to write a "real" weather server that can run as a standalone application on the same Windows system that also runs your WeatherOS application. Or use a LAMP or WAMP stack to implement a decent and robust weather server, with the City data sitting in a MySQL database and with the XML data being generated by PHP-scripts. Unfortunately, I will probably never get around to doing that, mainly because of a general lack of time, but also because the shell script prototype works just fine for me at this moment. However, if somebody wants to take on the challenge to write a weather server for Windows, I hope that the information provided here will be helpful.

And finally, to prove that the shell script prototype actually works, here is a picture of what my WeatherOS display looks like again:

Yes, that's a Los Angeles Intl Airport weather forecast for Monday, April 14th, 2014 !