...but I've finally made significant progress on my smart heatpump thermostat. I got my hands on several RasPi 3's, and I'm using 2 of them for this project. I might later reduce that to the single unit I originally intended to use, but for now 2 is the ticket. I have been working with Node-RED and MQTT (using mosquitto) for most of the last 3 weeks or so, and the results are pretty nice so far.
Here's where I am now, after more than a year of nothing:
- One RasPi 3 will be connected to the heatpump via a half-dozen solid-state relays. I plan to use a PiFace Digital 2 to bridge the GPIO header to the SSRs. A Node-RED flow runs here to toggle the relays and interface with the main thermostat logic.
- The second RasPi 3 will be placed in the location of my current digital thermostat. This one will connect to a temperature sensor (planning on a SenseHAT for the time being, as well as a touchscreen LCD. A Node-RED flow runs here to send the SenseHAT environmental data out to the rest of the system, with an additional flow for testing behavior across different temperature ranges. The SenseHAT includes an 8x8 array of RGB LEDs, which I might use as an additional signal for alerts (an actual "red alert"!).
- Ubuntu 16.04 Server machine running Node-RED and mosquitto server. The main Node-RED flows run here: main thermostat logic, display UI using Node-RED dashboard, processes to retrive current weather conditions and any weather alerts for my area, display statistical graphs, and initialize some parameters. Using Node-RED dashboard, I have developed several pages to display weather conditions, 3-day forecast, some statistical graphs, and the main thermostat controls, which I can display on any browser on my network. Mosquitto/MQTT is used to coordinate data communications between the 3 component systems.
Current feature set:
- Display current weather conditions, including barometer, solar radiation and UV, 3-day forecast, solar and lunar cycles, and wind speed and direction. This data comes from the WeatherUnderground API, updated 4 times per hour.
- Display indoor temperature and humidity.
- Display temperature setpoint and heatpump operating status.
- Display an alert to change the air filter. Buttons to set reminders for 30- and 90-day filters.
- Display a modal dialog upon receipt of any weather alerts provided by WUnderground, push an alert via PushBullet, and speak the text audibly.
- Set the desired temperature, enable/disable the entire system, set/unset away mode, manually engage the fan or emergency heat mode.
- Automatically switch between heat and cool modes based on the season.
- Automatically engage auxilliary heat if the interior temperature falls too quickly for the first stage to keep up, or if the outside temperature drops below 40° F, as heatpumps are not effective below that temperature.
- Away mode: switch to a lower-energy operating mode. Engage cooling when interior temp reaches 80° or heat when interior drops to 55°.
Some features still to come:
- Scheduling interface (though this may not be necessary with presence detection)
- Presence detection: Automatically switch away mode on and off based on presence determined by smartphones.
- Refresh mode: if the system has been completely idle for at least an hour, run the fan for up to 20 minutes to equalize room temperatures and recirculate stuffy air.
- Track operating time each month, display when each mode is used and correlate to indoor and outdoor temperatures.
- Voice activation via Alexa or others.
I'm also working on the display screen. I have an old 17" Dell LCD that runs 1280x1024 resolution. I hope to upgrade it to use LED backlighting and replace the existing VGA-only with an HDMI interface capable of playing audio. Then I can mount it as a single unit on the wall in the hallway where the current thermostat is.
I'll throw some screenshots of the web dashboard and some of the Node-RED flows into the project gallery.