Bill's Weather Station - Cloud-based Instance
Current Obs Last 24h Last 48h Week to now Last 2 weeks Climate Table Climate Graph Web Cam
This is a primitive weather station presently recording only indoor and outdoor temperatures. It consists of a Raspberry Pi and several DS18B20 1-wire temperature sensors. The station software is written in Python, temperature data is logged into a sqlite3 database, reported to Wunderground and this instance of the station software running in the cloud, i.e. on a virtual private server. The sensors include:
- Inside - About 10" off an outside wall which is adjacent to a window. Radiator several feet away.
- Outside - Clamped to window trim on the north side of the house. Subject to solar gain in mornings between the start of spring and the start of fall when the sun rises and sets north of the east-west line.
- Above RPi - Mounted on an expansion shield above the RPi. Subject to a little warming from the RPi and significant cooling from a window, on the sill of which the RPi sits.
- Location: Little Silver, NJ
- Lat/Lon: 40.33762n, 74.01879w
- Sensor Elevation: 25'
- Wunderground Station ID: KNJLITTL12
- Wunderground Station Name: Little Silver Point
Full Size Snapshots
The image is captured by a Nikon D70 camera attached to the RPi and uploaded here and, as of 16 Nov 2017, no longer to Wunderground. The image is captured every ever hour during daylight hours (give or take) using the Linux gphoto2 program.
Static Temperature Graphs
These graphs show data current as of the past midnight and load much faster than the dynamic ones. The current week is generated daily just before midnight. The Current week static graph together with the Last 24 hours dynamic graph covers the current week to now.
- Current week
- Last 2 weeks
Yearly and monthly graphs.
2015 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2016 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2017 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
- Week of boiler failure - Look for inside temperature drop to 37 degrees on Monday. Without this weather station I would not have seen the failure and pipes, water heater, radiators, wine and beer bottles, toilets, etc., would have frozen.
Dynamic Temperature Graphs
These graphs show data up the the present. They require a bit of patience proportional to the length of the graph and can take several tens of seconds. The RPi is a great machine but for generating graphs with matplotlib it is a bit slow.
The climatological data includes temperature averages, lows, highs and degree-days by year, month and day in tabular form and averages, lows, and highs for every day in the year by year in graphical form.
Gas Consumption (Experimental)
I am interested in recording natural gas consumption with the thought that the data would help identify thermal parameters of my home, areas to improve thermal behavior, and provide feedback for changes. I hope to correlate gas usage with meteorological parameters including temperature and wind. Many years ago and in a different home I made daily recordings by hand of the gas meter during one heating season. That data showed clearly the benefits of keeping the door between the basement and the first floor closed. I'm no longer up for manual recording and daily readings lack sufficient resolution for the usage I want to study and so I looked for an automatic solution.
It turns out that my gas company reads the meter from a vehicle on the street. If they can read it I though I could as well. The technology of Automatic Meter Reading (AMR) is well described online and others have already developed both open-source and proprietery products for this using software-defined-radio concepts. It was a simple matter to glue a few existing parts together to receive the broadcasts from the meter and then write a little software to record and display it.
My gas meter, an Itron 100G DLT, periodically broadcasts Standard Consumption Messages (SCM) in bubble-up mode, a peculiar term that means it broadcasts spontaneously, not on demand from a reader. The messages are received with a RTL-SDR dongle (an inexpensive DVB-T receiver containing a Realtek RTL2832U demodulator and R820T tuner) connected to a Raspberry Pi 2 B+. The RPi runs a program known as RTLAMR (written by Douglas Hall and generously contributed to the open-source community) to decode the meter signal and convert it to JSON text. A Python program reads the output from RTLAMR and send it to the cloud server for storage and presentation. The processor load on the RPi 2 B+ is 100%. It appears to drop some packets but works well enough to provide the meter readings at an adequate sampling rate, typically once every few minutes. The capture process is stochastic in nature because of intereference from other meters in the neighborhood and the frequency-hopping nature of the transmissions.
The graphs linked in the following table explores the option space of graph period, histogram bucket size, and measurement units. This is experimental to help understand the most useful display formats. The % Max column is specific to my Weil-McLain ECO 155 boiler with a maximum input of 155,000 BTUs/hour. It shows the actual usage as a percentage of the maximum input to the boiler. The cost column includes only components proportional to usage (gas and delivery), excludes the fixed Residental Customer Charge. Note that all of the columns display identical data. The graphs differ only in the units and scale factor of the Y-axis.
|Period||Cubic Feet||BTU||% Max||Cost|
|Last 7 days by hour||Show||Show||Show||Show|
|Last 14 days by hour||Show||Show||Show||Show|
|Last 48 hours||Show||Show||Show||Show|
- BTU - the amount of energy needed to heat 1 pound of water 1 degree Farenheit.
- BTU Content - a number that relates a volume measurement such as cubic feet to an energy measurement such as BTU. There is a variation in the exact heat content of gas by region and year. This factor is used to convert the volume measured by gas meters to the heat content of gas for billing. The factor is typically a few percentage points around 1. A recent gas bill had an exact value of 1.067.
- CF - a cubic-foot of natural gas contains roughly 1000 BTUs, exactly 1067 BTUs applying the BTU content above.
- CCF - 100 cubic feet. A common unit of gas volume for billing. Roughly 1 Therm. Exactly 1.067 therms with the BTU content from above.
- Therm - 100,000 BTUs, a common unit of gas energy for billing. Roughly 1 CCF. Exactly 93.72 cubic feet with the BTU content from above.
- Hot Water - One gallon of water weighs 8.34 pounds. My 40 gallon hot water tank thus requires 333.6 BTUs to heat it 1 degree Farenheit, or 20,016 BTUs to heat it from a cold start from 60 degrees ambient to a common working temperature of 120 degrees. The output of my boiler is 143,000 BTUs/hour. At that rate it should take about 8.5 minutes to heat the tank from a cold start. A typical low-flow shower head consumes about 2 gallons/minute or 16.68 pounds/minute. It will take 1167 BTUs/minute (70,000 BTUs/hour) to heat that water coming in at 50 degrees to 120 degrees. Given my boiler output it should be able to supply two showers running continuously without running out of hot water.
I hope to add more sensors later including barometric pressure, wind speed an direction, and possibly more, depending on availability and cost.