FOStation v1.16
Welcome to FOStation, An Open Source Windows service application to collect data
from Fine Offset Compatible Weather Stations.
First off, you may ask why write another piece of Weather Station software when
there are many fine ones available such as weewx,
wview,
pywws, &
CumulusMX. Weewx and pywws
are developed in Python and are very feature complete, while CumulusMX is for Windows
but is no longer under active development. What I wanted was a low footprint Windows
based application which simple stores the received weather records to a standard
database. I also wanted my application to run as a Windows service and not bother
with any UI infrastructure instead preferring to leave that to third party tools.
Leaving the UI / reporting infrastructure out reduces the amount of code required
massively. Instead you can develop custom reporting applications using existing
mature technologies such as
SQL Server Reporting Services. FOStation is designed with these goals in mind
and should work with any Fine Offset compatible weather stations such as those manufactured
by Aercus, Ambient Weather, DAZA, Elecsa, Fine Offset, Froggit, Maplin, Sinometer,
Tycon & Watson. Personally I have a Aercus WS3083 weather station which I have
tested FOStation with. The service is implemented with STL and ATL with no MFC dependencies
with Visual C++ 2019.
Usage
- The service is implemented with STL and ATL with no MFC dependencies with
Visual C++ 2019. The main application consists of just 2400 lines of C++ code.
While running, FOStation uses less than 3 MB of working set memory.
- Full source code for FOStation is included in the download for your perusal
/ education. Other modules of the author's which FOStation depends on are mentioned
below and should be downloaded and put into you FOStation source code directory
if you want to rebuild FOStation for yourself.
- The service has minimal runtime dependencies with the x86 binary coming
in at 226 KB and the x64 binary coming in at 245 KB.
- Prebuilt x86 and x64 binaries are provided in the download.
- You will first need to download and install the Microsoft Visual C++ Redistributable
for Visual Studio 2019 from
https://visualstudio.microsoft.com/downloads/
for either x86 or x64.
- To install the service, copy the exe in the ReleaseU (for the x86 UTF-16
binary) or ReleaseU64 (for the x64 UTF-16 binary) directories from the FOStation
zip file to a directory where you want to install FOStation to and permanently
run it from. Then type "FOStation.exe -install" from an Administrative
Command Prompt in that directory. Internally FOStation uses the author's
CNTService framework and all
the command line configuration values it exposes are available with the FOStation
exe.
- FOStation will log the data it collects to a SQL Server instance so you
need to have some flavor of SQL Server installed somewhere which is reachable
from the machine where FOStation is installed on. You could of course install
SQL Server on the same machine as where you install FOStation. You can download
the free SQL Server Express at
https://www.microsoft.com/en-us/sql-server/sql-server-downloads.
If you do not have SQL Server installed on the same machine as FOStation, then
you will need to download and install the SQL Server v13 drivers for either x86
or x64 from
https://www.microsoft.com/en-us/download/details.aspx?id=50420
and install it on the machine on which FOStation will be running. As an alternative,
you can also log to a SQLite database file instead of to SQL Server.
- You might also want to download SQL Server Management Studio from
https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms.
This tool allows you to easily manage your SQL Server instances using a GUI
based utility. You should create a new blank database in your SQL Server instance
called "WeatherStation" where you want to store the weather station
data FOStation collects. Once FOStation is successfully collecting data, you
can use this tool to review collected data, create ad-hoc queries against the
data and develop customized reports, schedules and notifications using for example
SQL Server Reporting Services. You can also of course develop custom functionality
of your own against the database data FOStation collects.
- Fine Offset compatible Weather Stations famously have a USB lockup bug which
causes the indoor head unit which the FOStation software connects to become
unresponsive. Despite various heuristics which the FOStation software uses to
avoid reading from the indoor head unit while the head unit is itself writing
to its internal memory, you will eventually see these lockups. The author sees
them about once a month. Because of this, the author has developed an alternative
approach to capturing the data from the outside weather station. The author
has developed an Arduino Mega 2560 Microcontroller sketch which captures the
433 Mhz RF data transmitted from the weather station using a Aurel RX 4MM5 RF
receiver. The sketch for this can be downloaded from
http://www.naughter.com/download/FineOffsetRFWeather.ino.
The schematic for the hardware to capture this is as follows:

The sketch interfaces to a AUREL RX-4MM5 RF receiver and decodes the custom
FineOffset RF Weather station message data and presents this data as simple
messages on the Arduino serial port monitor. The sketch is based on code at
https://www.susa.net/wordpress/2014/06/arduino-yun-reading-wh1080-using-aurel-rx-4mm5/,
rtl_433 code for decoding FineOffset RF data at
https://github.com/merbanan/rtl_433/blob/master/src/devices/fineoffset_wh1080.c,
CRC code from Luc Small at http://lucsmall.com,
the Adafruit BME280 library at
https://github.com/adafruit/Adafruit_BME280_Library,
the Adafruit Unified Sensor library at
https://github.com/adafruit/Adafruit_Sensor,
the Adafruit SSD1306 library at
https://github.com/adafruit/Adafruit_SSD1306
and the Adafruit GFX library at
https://github.com/adafruit/Adafruit-GFX-Library.
The BME280 code in this sketch is included to report on Inside Temperature,
Atmospheric Pressure and Indoor Humidity as these values are providing by the
original indoor FineOffset USB head unit which this sketch is bypassing. The
SSD1306 code in this sketch is included to allow the end-user to visually check
on an OLED display if messages are being actively received by the sketch without
the need to hook up some software to view the data on the Serial Port Monitor.
Please note that you will probably need an Arduino Mega 2560 instead of an Uno
or Micro due to the size of this sketch.
- The configuration values for FOStation which you will need to setup manually
using the windows utility "Regedit" are as follows:
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FOSTATION\Parameters\General
- LogFilenameSpecifier This is a REG_SZ value which contains the log
filename which FOStation writes to. By default the value used is "FOStation.log".
The log files written by FOStation will be located at C:\Users\"Registered
Service Account name"\AppData\Local\FOStation\"LogFilenameSpecifier
value". Note that this config value can have replaceable parameters
as available from the
strftime C runtime function. This mechanism allows you to implement
daily log files for FOStation for example.
- DBInitString This is a REG_SZ value which is the init string to
use to connect to SQL Server for logging data. The default value is "DRIVER={ODBC
Driver 13 for SQL Server};SERVER=.;DATABASE=WeatherStation;Trusted_Connection=yes;"
Internally FOStation will use ODBC and an auto created stored procedure
called "historicalDataUpsert" to write data to the database
via an INSERT or UPDATE depending on whether a matching row already
exists in the database table. You will need to change this value to
suit where your SQL Server instance is available as well as any other
database init values which you need.
- SqliteDatabase This is a REG_SZ value which is the path to a Sqlite
database to logging data. If this value is specified, then the DBInitString
will be ignored and FOStation will only log to a Sqlite database file
instead of to SQL Server.
- StationType This is a REG_DWORD value. Setting this to 0 which is
default means "With Solar Data", while 1 means "Without
Solar Data". Fine Offset compatible weather stations store there
data in two formats. The first record format is 16 bytes long and does
not contain solar data (i.e. UV and illuminance data) while the second
format is 20 bytes long and does include solar data. You will need to
specify the correct type for your particular weather station device
type. Please note that data that is not collected such as UV and illuminance
when this config value is 1 will result in null values being written
to the database for these columns.
- MaxHistoricalRecords This is a REG_DWORD value that corresponds
to the maximum number of historical records to process. The default
value is 0 which means no historical records will be processed. Fine
Offset compatible weather stations store historical records in a ring
buffer on the indoor console. Setting this config value to a non-zero
value will allow these historical records to be read and logged to the
database before the service starts processing live records from the
weather station. The maximum number of historical records stored is
3264 for weather stations which do not collect solar data and 4080 for
stations which do collect solar data.
- DeviceTimeout This is a REG_DWORD value which allows reads and writes
to the weather station to use timeouts. Fine Offset weather stations
are known to suffer from a USB lockup bug which seems to occur when
USB activity occurs at the same time when the console is reading sensor
events from the outdoor station or when the interval ring buffer is
being updated. By default this value is 8000 which represents 8000 milliseconds.
If this value is set to a non-zero value then the reads and writes will
internally use Win32 Overlapped IO and will timeout if reads or writes
take longer that the config value. Entries will be written to the FOStation
log files to indicate that the weather station console will need to
be reset by taking out its batteries when read or write timeouts are
detected. If you use a value of 0, then synchronous reads and writes
will be used. Internally FOStation will use the author's
HIDWrappers classes
to talk to the weather station console's USB port via the Windows HID
APIs.
- DebugAuditing This is a REG_DWORD value and if this value is set
to 1, then extra entries will be written to the FOStation log files
for diagnostic / debugging purposes. The default is 0 for this value.
- COMPort This is a REG_DWORD value and if this value is set, then
FOStation will instead open this specified serial port instead of the
indoor head unit via USB and expect the
http://www.naughter.com/download/FineOffsetRFWeather.ino
sketch to be running on the attached microcontroller and providing the
decoded weather station data.
- BaudRate This is a REG_DWORD value and is the baud rate to open
the COM port at. The
http://www.naughter.com/download/FineOffsetRFWeather.ino
sketch by default uses 115200 baud, No parity, 8 data bits and one stop
bit.
- METWOWSiteID This is a REG_SZ value which FOStation uses to identify
itself to the British Met Office
WOW. This number appears (in brackets) next to or underneath the
name of your site on the WOW site information page. Internally the FOStation
service uses the author's
WinHTTPWrappers
and CVersionInfo
classes to support this functionality.
- METWOWSiteAuthenticationKey This is a REG_SZ value and is the second
item you require for logging to the British Met Office WOW. This is
a 6 digit number that you specify when setting up a WOW account and
is used to ensure data is coming from you and not another user.
- DBLoggingInterval This is a REG_DWORD value and is the minimum logging
interval in minutes to log to the database. Please note that Fine Offset
weather stations will log an updated record to the indoor console at
a configurable interval as specified by a byte stored at address 16
in the fixed block on the console (please see
http://www.jim-easterbrook.me.uk/weather/mm/
for details on the memory layout of Fine Offset weather stations). You
can also use the CFOStation class in the FOStationWrappers.h module
included in the FOStation download and the CFOStation::WriteAddress
method to change this value. For example I wrote some throw away code
while developing FOStation to call "device.WriteAddress(16, 1)"
to change the collection period to 1 minute for my weather station.
FOStation will monitor the indoor console for updated records and when
it detects a new record available, will trigger a read. This config
value can be used to write to the database at a rate different to the
rate at which the weather station produces new records. The default
is 5 minutes for this value.
- METWOWLoggingInterval This is a REG_DWORD value and is the minimum
logging interval in minutes to log to British Met Office WOW web site.
The default is 15 minutes for this value.
- AvoidReadPeriod This is a REG_DWORD value. This value is the number
of seconds either side of the station clock and sensor clock times which
the FOStation service determines during its initial synchronization
process. The FOStation service includes quite complicated internal logic
to avoid reading from the station "AvoidReadPeriod" seconds
either side of these times. The default is 3 seconds for this value.
During testing of the service over a period of a couple of weeks, the
author was unable to get USB lookups to occur during normal operations
of the FOStation service. On the other hand, the author was able to
get a couple of spurious lockups to occur if you just tried to continually
read from the weather station in a tight loop, so these additional precautions
which FOStation takes when reading from the weather station are necessary.
The synchronization process is rerun every 24 hours internally in the
FOStation service to avoid the computer clock getting too much out of
sync with the clock on the weather station console.
- ResetUsingYKUSHXS This is a REG_DWORD value and setting this value
to 1, the service will use the author's
CYKUSHXSDevice
code to power off and power back on the weather station using the
YEPKIT YKUSH
XS Switchable USB Hub when the code detects the USB lockup bug on
the weather station. Please note that to use this feature, you must
have a YEPKIT YKUSH switchable USB hub connected to the computer on
which FOStation is installed, the weather station should be connected
to the YKUSH USB hub and there should not be any batteries installed
in the weather station console. Using this device and the author's code,
the FOStation service can now automatically handle the infamous USB
lockup bug associated with Fine Offset Compatible Weather Stations.
- WeatherUndergroundID This is a REG_SZ value which FOStation uses
to identify itself to Weather Underground. Internally the FOStation
service uses the author's
WinHTTPWrappers
and CVersionInfo
classes to support this functionality.
- WeatherUndergroundPassword This is a REG_SZ value and is the second
item you require for logging to Weather Underground.
- WeatherUndergroundLoggingInterval This is a REG_DWORD value and
is the minimum logging interval in minutes to log to the Weather Underground
web site. The default is 15 minutes for this value.
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FOSTATION\Parameters\LastRainfall
- Count This value is written and read internally by FOStation and
should not be edited by the end-user. This is used to store the last
rainfall counter value read from the weather station. This is used to
ensure correct values are written to the "rainfall" column
in the database upon service or computer restarts.
- Year, Month, Day, Hour, Minute & Second. These values are written
and read internally by FOStation and should not be edited by the end-user.
This is used to store the local time value for the last rainfall counter
from the weather station. This is used to calculate rainfall rates to
make sure that total rain values where the reported value changes by
too much are correctly ignored.
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FOSTATION\Parameters\MidnightRainfall
- Count, Year, Month & Day These values are written and read internally
by FOStation and should not be edited by the end-user. They are used
to store the rainfall counter value for the last midnight read from
the weather station. This is used to ensure correct values are written
to the "rainfallSinceMidnight" column in the database upon
service or computer restarts. The Year, Month and Day values are used
to store the date for the midnight count while the Count value stores
the actual numeric count.
- On the initial run of the FOStation service, a table will be auto created
if it does not already exist in the configured database where the weather
records will be stored. The schema for this table is:
CREATE TABLE
[historicalData]
(
[dateTime] [datetime] NOT NULL,
[indoorHumidity] [int] NULL,
[indoorTemperature] [float] NULL,
[outdoorHumidity] [int] NULL,
[outdoorTemperature]
[float] NULL,
[pressure] [float] NULL,
[avgWindSpeed]
[float] NULL,
[gustWindSpeed] [float] NULL,
[windDirection]
[int] NULL,
[rainfallSinceMidnight] [float] NULL,
[rainfall] [float] NULL,
[totalRainfall] [float] NULL,
[UV] [int] NULL,
[illuminance] [float] NULL,
CONSTRAINT
[PK_historicalData] PRIMARY KEY CLUSTERED
(
[dateTime] ASC
)
)
- dateTime is the local time when the record was stored.
- indoorHumidity is the humidity from the indoor console of the weather
station as a percentage.
- indoorTemperature is the temperature from the indoor console of
the weather station in degrees Celsius.
- outdoorHumidity is the humidity from the outdoor station as a percentage.
- outdoorTemperature is the temperature from the outdoor station in
degrees Celsius.
- pressure is the pressure from the outdoor station in hectopascals.
The measurement is with respect to the stations altitude and not with
respect to mean sea level.
- avgWindSpeed is the average wind speed in m/s for the captured recording
interval from the outdoor station.
- gustWindSpeed is the maximum wind speed in m/s for the captured
recording interval from the outdoor station.
- windDirection is the direction of the wind. 0 represents due North,
90 due East and so on.
- rainfallSinceMidnight is the amount of rainfall which has occurred
to this point from midnight local time to "dateTime" in millimeters.
- rainfall is the amount of rainfall in millimeters which has occurred
between the last time a record was logged to the database and the current
record's "dateTime".
- totalRainfall is the total amount of rainfall ever accumulated by
the station since it was turned on. Internally the FOStation code will
handle rollovers of the rain counter into this value.
- UV is the UV value recorded. 0 represents None up to 5 which means
Extreme.
- illuminance is the measure of light intensity for the outdoor station
in lux. A completely dark night would correspond to 0, twilight corresponds
to roughly 400 while 10,000 upward represents bright daylight.
- Note that FOStation includes code to detect empty data in records
read from the weather station and these will end up being stored as
null columns in the database.
- Once you have the service installed and the appropriate configuration values
setup, you should be able to start the FOStation service using the standard
Windows "Computer Management -> Services and Applications" management
tool. You should check the contents of the FOStation log file to make sure startup
of the service occurred ok. Upon starting, the FOStation will take a few minutes
to synchronize with the weather station so that it can minimize reading from
the weather station at critical times to avoid the USB lockup bug. These details
as well as the config values being used and the other logic which FOStation
does during startup will be logged to the FOStation log files. A successful
startup of the service should generate something like the following in the log
files (assuming you have set DebugAuditing to one):
31/08/2019 22:52:00
******* Service starting *******
31/08/2019 22:52:00 Station type: 0
31/08/2019 22:52:00 LogFilenameSpecifier: FOStation.log
31/08/2019 22:52:00
DBInitString: DRIVER={ODBC Driver 13 for SQL Server};SERVER=.\SQLEXPRESS;DATABASE=WeatherStation;Trusted_Connection=yes;
31/08/2019 22:52:00 AvoidReadPeriod (seconds): 3
31/08/2019 22:52:00
MaxHistoricalRecords: 0
31/08/2019 22:52:00 DeviceTimeout (milliseconds):
8000
31/08/2019 22:52:00 DebugAuditing: 1
31/08/2019 22:52:00 MET WOW
Site ID: XXXXXXYYYYZZZ
31/08/2019 22:52:00 MET WOW Site authentication key:
******
31/08/2019 22:52:00 MET WOW logging interval: 15
31/08/2019 22:52:00
DB Logging interval: 5
31/08/2019 22:52:00 Product Version info: 1.0.0.0
31/08/2019 22:52:00 Reloading rainfall count of 2508 for today
31/08/2019
22:52:00 Reloading last rainfall count of 2516
31/08/2019 22:52:00 Enumerating
Fine Offset weather station devices connected to this computer
31/08/2019
22:52:00 Found Find Offset weather station with device path of \\?\hid#vid_1941&pid_8021#9&fb18f1f&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
31/08/2019 22:52:00 Opening device '\\?\hid#vid_1941&pid_8021#9&fb18f1f&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}'
31/08/2019 22:52:00 Creating ODBC environment
31/08/2019 22:52:00 Creating
ODBC connection
31/08/2019 22:52:00 Connecting to database, initialization
string: DRIVER={ODBC Driver 13 for SQL Server};SERVER=.\SQLEXPRESS;DATABASE=WeatherStation;Trusted_Connection=yes;
31/08/2019 22:52:01 Connected to database
31/08/2019 22:52:01 Creating
'historicalData' table in database if necessary
31/08/2019 22:52:01 Creating
'historicalDataUpsert' stored procedure in database if necessary
31/08/2019
22:52:01 Synchronizing with weather station (this may take a few minutes)
31/08/2019 22:52:26 Contents of current write address of 0xF290 has changed,
determined sensor clock time to be 31/08/2019 22:52:26
31/08/2019 22:53:20
Current write address has changed from 0xF290 to 0xF2A4, determined station
clock time to be 31/08/2019 22:53:20
31/08/2019 22:53:20 Determining historical
record data available
31/08/2019 22:53:20 Current location address: 0xF2A4
31/08/2019 22:53:20 Determined next expected write time will be 31/08/2019
22:54:20
31/08/2019 22:53:20 Historical records available: 3264
31/08/2019
22:53:20 Historical records to be read: 0
31/08/2019 22:53:20 Completed
reading historical data
31/08/2019 22:53:20 Historical records to be stored:
0
31/08/2019 22:53:20 Completed storing historical data
31/08/2019 22:53:20
Skipping read because not safe to do so at this time
31/08/2019 22:54:01
Skipping read because not safe to do so at this time
31/08/2019 22:54:21
Skipping read because not safe to do so at this time
31/08/2019 22:54:31
Processing new data at address 0xF2B8
31/08/2019 22:54:31 Processing record
at address 0xF2B8 for 31/08/2019 22:54:31
31/08/2019 22:54:42 Saving record
to database
31/08/2019 22:55:27 Remembering rainfall count of 2516 for 31/08/2019
22:54:31
31/08/2019 22:55:27 Uploading record to MET WOW
31/08/2019
22:55:39 Skipping read because not safe to do so at this time
31/08/2019
22:55:49 Processing new data at address 0xF2CC
.
.
.
- Once the service is running correctly, you might to change the startup type
on the service from "Manual" to "Automatic" or "Automatic
(Delayed Start)" so that the service will auto restart whenever the computer
is rebooted.
Plotly Web Application
- I have also produced an Open Source Plotly Web application which interfaces
to the SQL Server database or Sqlite database file FOStation writes to. This
web application can be downloaded from
http://www.naughter.com/download/FOStation.py.
Once you have this web application installed locally, it produces a number of
nice tables and charts.
- Current Conditions table. This table
shows the most recent values read from the weather station. It also includes
a small indicator on whether the weather station is online (i.e. returned data
recently).
- High / Low / Avg table. This table show the Highs, Lows and Average values
for a specific date range. The date range defaults to today.

- Temperature Graph. This graph includes the outside temperature, Wind Chill
and Dew Point temperatures. The date range defaults to today.
- Temperature and Humidity Graph. Similiar to the temperature graph, this
also include the Humidty value.
- Humidity Graph. This graph only includes the Humidity value for a specific
date range.

- Wind Speed Graph. This graph show the Average Wind Speed and Gust Wind Speeds
for a specific date range.
- Wind Direction Graph. This graph shows the Wind Direction for a specific
date range.
- Precipitation Graph. This graph show the amount of rainfall for a specific
date range.
- Pressure Graph. This graph shows atmospheric pressure for a specific date
range.
- Illuminance Graph. The graph shows the Lux values for a specific date range.
- UV Graph. This graph shows the UV Index values for a specific date range.
History
v1.16 (11 February 2024)
- Updated copyright details.
- Updated the logic to correctly handle resetting the COM port when
interfacing to the microcontroller sketch if no data has been read from it
in 5 minutes.
v1.15 (30 October 2023)
- Updated the logic in the app to use the author's DTime+ open source
classes for date / time processing used by FOStation instead of
COleDateTime. This update clarifies variables which need to be local date /
times vs UTC date / times. Please note that the dateTime column in both the
SQLite3 and SQL Server code paths is still local time. This means that
during the "Fall back" time of Daylight Savings, rows written one hour
prior to the "Fallback" will be overwritten for one hour after the
"Fallback" time. Please note that I may provide a schema update in the
future to fix this issue. Note that the data uploaded to MET and Weather
Underground is not affected by this issue.
6 February 2022
- Updated this page to reference new Open Source Plotly Web application
which I have developed for FOStation.
v1.14 (26 November 2022)
- Updated the code which processes the "m_nMidnightRainfallCount"
variable to treat INT_MIN as an invalid value instead of -1 which the author
was able to obtain using a real weather station connection.
v1.13 (29 October 2022)
- Updated the code which parses the light message from the serial port to
ignore records where the LightStatus value is not ok. This change helps ignore
spurious light messages which sometimes can be received.
v1.12 (5 August 2022)
- Updated the logic in CMyService::CalculateRainfallValue to better handle
overflow of the rainfall counter.
v1.11 (1 August 2022)
- Added logging code to indicate when the total rain value was incremented
due to overflow
- Added logging code to report the raw received record.
- Added code to ignore total rain values when the reported value changes by
too much.
- The MET WOW "siteAuthenticationKey" parameter is now hidden in
disk logging.
- The Weather Underground "PASSWORD" parameter is now hidden in
disk logging.
- Updated the code to use C++ uniform initialization for all variable declarations.
- Added code to support using an Arduino Mega 2560 microcontroller (http://www.naughter.com/download/FineOffsetRFWeather.ino)
sketch to capture decoded weather station data instead of connecting via USB
to the indoor head unit.
v1.10 (19 January 2022)
- m_nDBLoggingInterval config value can now be set to 0. This setting will
save data to the database as soon as a new weather record is available.
- m_nMETWOWLoggingInterval config value can now be set to 0. This setting
will upload data to WOW as soon as a new weather record is available.
- m_nWeatherUndergroundLoggingInterval config value can now be set to 0. This
setting will upload data to Weather Underground as soon as a new weather record
is available.
- Updated copyright details.
v1.09 (29 October 2021)
- Updated the project settings to use more modern compiler and linker settings
- Updated the code to support uploading weather reports to Weather Underground.
v1.08 (9 April 2021)
- Addition of a new SqliteDatabase service configuration value. This is a
REG_SZ value and setting this value to a non-empty string will cause FOStation
to log data to a Sqlite database instead of to SQL Server.
v1.07 (14 January 2021)
- Addition of a new ResetUsingYKUSHXS service configuration value. This is
a REG_DWORD value and setting this value to 1, the service will use the author's
CYKUSHXSDevice code
to power off and power back on the weather station using the
YEPKIT YKUSH XS Switchable
USB Hub when the code detects the USB lockup bug on the weather station.
Please note that to use this feature, you must have a YEPKIT YKUSH switchable
USB hub connected to the computer on which FOStation is installed, the weather
station should be connected to the YKUSH USB hub and there should not be any
batteries installed in the weather station console. Using this device and the
author's code, the FOStation service can now automatically handle the infamous
USB lockup bug associated with Fine Offset Compatible Weather Stations.
v1.06 (23 December 2020)
- Updated the logic to determine if the current write address is valid. This
change avoids intermittent problems where the code picks up bad write addresses
which leads to the rainfall count becoming very large.
v1.05 (8 April 2020)
- Updated copyright details.
- Fixed more Clang-Tidy static code analysis warnings in the code.
- Updated the code to work with the latest version of the author's CNTService
framework.
v1.04 (28 December 2019)
- Fixed various Clang-Tidy static code analysis warnings in the code.
v1.03 (5 November 2019)
- Updated the code to report the "dewptf" Outdoor Dewpoint value
to the WOW web service.
v1.02 (31 October 2019)
- Updated the code to report three decimal digits for the "dailyrainin"
rainfall accumulation value to the WOW web service, instead of just one which
resulted in a previous granularity of 2.5 mm for the rainfall accumulation.
- Added debug auditing of the WOW request data to aid diagnosing WOW problems
going forward.
v1.01 (17 September 2019)
- Updated the service to handle SERVICE_ACCEPT_SHUTDOWN notifications.
v1.0 (7 September 2019)
Contacting the Author
PJ Naughter
Email: pjna@naughter.com
Web: http://www.naughter.com
11 February
2024