FOStation v1.16 An Open Source Windows
service to collect data from Fine Offset Compatible Weather Stations
(Obsolete)
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 WS3085 weather station (and previously a WS3083) which I have tested FOStation
with. The service is implemented with STL and ATL with no MFC dependencies with Visual C++ 2019.
Features
- 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.
- 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.
- 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.
- 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.
- 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
lockups 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.
- 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 15 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.
The enclosed zip file contains the VC
2019 source code
and pre compiled binaries for x86 and x64.
Copyright
- You are allowed to include the source code in any product (commercial, shareware,
freeware or otherwise) when your product is released in binary form.
- You are allowed to modify the source code in any way you want except you
cannot modify the copyright details at the top of each module.
- If you want to distribute source code with your application, then you are
only allowed to distribute versions released by the author. This is to maintain
a single distribution point for the source code.
Updates
3 September 2024
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 2023
- 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)