Initial commit: PT1000 probe emulation bridge
Feeds third-party BBQ probes into a pellet grill's wired probe jacks by presenting the resistance a real PT1000 RTD would show at that temperature. The grill sees an ordinary wired probe, so its display, app, target-temp alarms and Keep Warm all work with no protocol reversing involved. Pluggable probe sources: ThermoWorks RFX (via ThermoWorks Cloud), MEATER (community-derived BLE decode), a synthetic simulator for hardware-free development, and a Combustion stub. Two safety invariants are load-bearing: - Stale, missing or implausible readings drive the channel cold, never hot. A stuck-hot channel could convince the grill a cook finished early. - Unimplemented sources raise rather than returning plausible numbers, since the grill acts on these values. Cloud sources are dated by the cloud's own timestamp rather than by fetch time, because ThermoWorks serves a dead probe's last value with a fresh 200. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
[project]
|
||||
name = "smokescreen"
|
||||
version = "0.1.0"
|
||||
description = "Feed third-party BBQ probes into a pellet grill's wired PT1000 probe jacks"
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
"pyyaml>=6.0",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
# BLE probe sources (MEATER, Combustion). Not needed for --dry-run development.
|
||||
ble = ["bleak>=0.22"]
|
||||
# ThermoWorks RFX via ThermoWorks Cloud. Kept optional partly because it is
|
||||
# GPLv3, which would otherwise attach to this whole project.
|
||||
thermoworks = ["thermoworks-cloud>=0.1.16", "aiohttp>=3.9"]
|
||||
# I2C rheostat control. Raspberry Pi only.
|
||||
hw = ["smbus2>=0.4"]
|
||||
dev = ["pytest>=8.0", "pytest-asyncio>=0.24"]
|
||||
|
||||
[project.scripts]
|
||||
smokescreen = "smokescreen.__main__:main"
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools>=68"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
where = ["src"]
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
testpaths = ["tests"]
|
||||
asyncio_mode = "auto"
|
||||
Reference in New Issue
Block a user