Node.js Raspberry Pi Pellet Stove Controller
Go to file
2023-11-17 11:43:04 -05:00
.vscode Refactoring for SQLite 2023-01-21 21:33:52 -05:00
assets Adding schematics 2022-11-28 00:49:24 -05:00
data Sure 2023-01-22 23:10:22 -05:00
modules Implement GPIO pins 2023-11-17 11:43:04 -05:00
templates Begin db migration 2023-01-21 10:48:16 -05:00
www Disable left enable right 2023-11-17 11:00:50 -05:00
.DS_Store fds 2022-12-20 15:17:38 -05:00
.gitignore Ignore config.db 2023-01-22 23:10:07 -05:00
hestia.sh Remove redundant self-call 2023-01-22 23:18:36 -05:00
LICENSE Initial commit 2022-11-15 21:19:39 -05:00
main.js Implement GPIO pins 2023-11-17 11:43:04 -05:00
package-lock.json versioning, new name 2023-11-17 10:54:08 -05:00
package.json versioning, new name 2023-11-17 10:54:08 -05:00
README.md Added timings 2023-11-13 17:35:25 -05:00
TODO simplifying to temp launch 2023-01-06 15:58:42 -05:00

Hestia

Node.js Raspberry Pi Pellet Stove Controller, named after the Greek virgin goddess of the hearth.

About

This project seeks to replace the OEM control panel on a Lennox Winslow PS40 pellet stove with a Raspberry Pi. I will be utilizing a Raspberry Pi Zero W, relays, and switches already installed on the pellet stove. I chose a Pi Zero W for its small form factor, the lack of pre-installed headers, its wireless connectivity, and familiarity with the platform. I had previously used an Arduino Nano for a much more rudimentary version of this project and found great difficulty in making adjustments to the code. Additionally the Raspberry Pi platform will allow for expansion in the future to include IoT controls and logging of usage utilizing networked databases. The project will be written using Node.js and the rpi-gpio Node module. I've chosen Node.js for its familiarity as well as ease of implementation of a web server for future expansion.

GPIO

Three GPIO pins are used along with a common ground to control three relays, supplying 120VAC power to the igniter and combustion blower when appropriate, and supplying power to the auger motor in pulses. Two more GPIO pins are used to detect open/closed status of a temperature-controlled snap switch and a vacuum switch. Another temperature-controlled snap switch is used to supply power to the convection motor when the pellet stove has reached a suitable temperature. A final temperature-controlled snap switch us used to interrupt the circuit for the auger motor to shut the stove off when an over-temperature condition is met. I will be utilizing a OneWire DS18B20 temperature sensor to detect the temperature of air exiting the stove vents.

Pi Pin Function Direction Wire Color
7 Auger Relay Out Blue
13 Igniter Relay Out Blue/White
15 Combustion Blower Relay Out Orange
16 Proof of Fire Switch In Orange/White
18 OneWire Temp Sensor In Brown
22 Vacuum Switch In Brown/White
4 +5VDC for Switches N/A Green
6 GND for Relays N/A Green/White

Schematics

The Current Setup

Current Schematic

The End Goal

Future Schematic

Oddities

For ease of adaption, connection, and prototyping I've decided to use Cat 5 ethernet cabling and RJ45 connectors to connect the Raspberry Pi to the stove, and to a breadboard mockup of the sensors and switches for testing.

Environment Variables

  • ONTIME - How long to turn the auger on, in milliseconds.
  • OFFTIME - How long to wait between turning the auger on, in milliseconds.
  • PAUSETIME - How long to pause when a pause file is detected, in milliseconds.
  • DEBUG - Displays extra log information when set to true

Controls

  • Run with node main.js > log.txt & to launch it in the background, piping output to a file log.txt which can be read from later.
  • Pause the script by creating a file named pause in the root directory.
  • Reload the environment variables by creating a file named reload in the root directory.
  • Quit the script by creating a file named quit in the root directory.

Roadmap

  • v0.1 - Get the pellet stove operating at a basic level. Only implements the auger relay and no safeties.
  • v0.2 - Implement safety switches and put the igniter and combustion blowers on relays controlled by the Pi.
  • v0.3 - Implement the HTTP module to allow controlling the stove from the LAN.
  • v0.4 - Implement usage logging with a SQL database.

Testing Procedure

  1. Launch app, check startup messages, check that it idles and pauses properly.
  2. Provide ignite command, observe if the igniter, blower, and auger get turned on. Make sure the igniter turns off after the pre-set time.
  3. Test that the following conditions cause a shutdown:
    • Proof of Fire Switch OPEN after igniter shutoff.
    • Vacuum Switch OPEN after igniter start.
  4. Test manipulation of feed rates.
  5. Test shutdown sequence.

SQLite Database Tables

status

Field Type Null Key Default Extra
id int(10) No PRI NULL auto_increment
key varchar(100) No
value varchar(1000) No
id key value
0 igniter 0
1 blower 0
2 auger 0
3 igniter_finished false
4 shutdown_initiated 0
5 vacuum 0
6 proof_of_fire 0
7 shutdown_next_cycle 0

timestamps

Field Type Null Key Default Extra
id int(10) No PRI NULL auto_increment
key varchar(100) No
value varchar(1000) No
id key value
0 process_start 0
1 blower_on 0
2 blower_off 0
3 igniter_on 0
4 igniter_off 0

intervals

Field Type Null Key Default Extra
id int(10) No PRI NULL auto_increment
key varchar(100) No
value varchar(1000) No
id key value
0 auger_on 600
1 auger_off 1400
2 pause 5000
3 igniter_start 420000
4 blower_stop 600000

Startup Procedure

  1. Manually toggle the "I" Igniter switch ON
  2. Wait 60 seconds
  3. Manually toggle the "E" Exhaust switch ON
  4. Using the Hestia Web Portal, set Feed Rate to 2
  5. Enable the Auger
  6. Wait up to three minutes for pellets to ignite
  7. Manually toggle the "I" Ingniter switch OFF
  8. Monitor fire and adjust feed rates as necessary

Timings

  • 60-90 seconds igniter preheat
  • 120-180 seconds for pellet ignition
  • 4 minutes from ignition to PoF Close
  • 7:30 minutes total