codenotes666-blip/fireplace-cli
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
Fireplace CLI (Heat & Glo IntelliFire IPI relay control) Purpose - Control a Heat & Glo IntelliFire IPI fireplace using a Raspberry Pi and a mechanical relay HAT. - The fireplace does NOT accept a permanent short as a valid call; it expects wall-control-like behavior (momentary qualified closure). Project contents - fireplace.py: Python CLI that implements the timing model (boot guard + qualified pulse + optional maintained-call pattern) - test_relays.sh: Interactive relay click/LED test (safe to run with the relay shield NOT connected to the fireplace) Hardware used - Raspberry Pi host name: fireplace - Relay HAT: Inland “RPI 4 channel-Relay Shield” (SONGLE relays). This corresponds to Keyestudio KS0212. Relay shield documentation (pinout) - Keyestudio KS0212 wiki: https://wiki.keyestudio.com/KS0212_keyestudio_RPI_4-channel_Relay_Shield - BCM GPIO mapping for the 4 relays: 4, 22, 6, 26 - We confirmed audibly that all four channels click on this unit. Relay naming (used by fireplace.py) - low_flame -> BCM 4 - high_flame -> BCM 22 - aux_1 -> BCM 6 - aux_2 -> BCM 26 Confirmed physical relay positions (on the installed Pi) - low_flame is the 1st physical relay (furthest from the USB ports) - high_flame is the 2nd physical relay (one closer to the USB ports) Terminology note - The fireplace has a "main burner ON" call (R-W) and an optional "HIGH flame" call (G-W). - When the burner is ON but HIGH is not asserted, that state is effectively the "low flame" mode. Relay polarity (active-low vs active-high) - Some relay hats energize on GPIO HIGH, others on GPIO LOW. - For this KS0212/Inland shield, the vendor sample code toggles pins HIGH/LOW; in practice the safest approach is: - Default to ACTIVE-HIGH (omit --active-low). - Only use --active-low if you observe that the relay is ON when the CLI says OPEN. - The helper scripts default to ACTIVE-HIGH now, and can be forced to run active-low if needed. Confirmed for THIS installed shield - ACTIVE-HIGH confirmed: the relay LED/click occurs during the printed CLOSE-ACTIVATE phase when running without --active-low. Fireplace control terminals (Heat & Glo IntelliFire IPI) - User interface is the R / W / G terminal block. - W is the common/return. - R–W: request main burner ON. - G–W: request HIGH flame (only after burner is on). Key findings from the provided context PDF (why we pulse) - IPI sources ~8.3V DC open-circuit between R and W. - Shorting R–W collapses voltage (input is sensed), but: - A permanent R–W short does NOT ignite. - R–W through 2.2k resistor is also rejected. - Scope discovery: the IPI module injects a periodic diagnostic pulse to detect a valid wall control. - Static shorts/static loads are treated as faults and ignored. - Bottom line: the Pi must emulate wall-control behavior (a qualified edge), not just continuity. Wiring rules (SAFETY) - Use only the relay’s COM and NO contacts. - Do NOT use NC contacts. - Do NOT inject any external voltage into R/W/G. Suggested relay wiring - Channel for Main burner: relay COM -> W, relay NO -> R - Channel for High flame (optional): relay COM -> W, relay NO -> G Timing model (from PDF) - Boot guard: keep relay OPEN for ~12 seconds after Pi boot/reset (avoid detection window). - Ignition request: CLOSE relay for ~200–300 ms (pulse), then OPEN. - If unit drops without maintained call: use maintained-call pattern: - OPEN 1s - CLOSE 250ms - OPEN 250ms - CLOSE and HOLD while flame desired - OPEN to shut down How to test the relay shield (not connected to fireplace) - cd ~/fireplace-cli - ./test_relays.sh - Defaults to pins 4,22,6,26 and guides you pin-by-pin. - Optional: ./test_relays.sh "4,22,6,26" 900 2.0 1.0 2.0 1.0 both How to run the CLI (examples) - Show known relay names: - python3 fireplace.py list-relays - Dry run (no GPIO toggling): - python3 fireplace.py ignite --main-relay low_flame --dry-run - Real ignition pulse (after wiring and choosing the correct polarity): - python3 fireplace.py ignite --main-relay low_flame - python3 fireplace.py ignite --main-relay low_flame --active-low - Maintained-call mode: - python3 fireplace.py ignite --main-relay low_flame --maintained Environment variable option - export FIREPLACE_MAIN_RELAY=low_flame - export FIREPLACE_HIGH_RELAY=high_flame - export FIREPLACE_ACTIVE_LOW=1 (only if needed) - python3 fireplace.py ignite Local web UI (simple front-end) - A minimal local-only web server that calls fireplace.py for you. - Runs on 127.0.0.1:8080 by default. Install and run - cd ~/fireplace-cli - python3 -m pip install -r requirements-web.txt - python3 web_ui.py - Open: http://127.0.0.1:8080 Environment variables - FIREPLACE_WEB_HOST (default: 127.0.0.1) - FIREPLACE_WEB_PORT (default: 8080) - FIREPLACE_CLI_PYTHON (default: python3) - which Python runs fireplace.py when invoked by the web UI