Agent and CLI for Sensibo smart-AC control at home: discover devices, collect every sensor reading locally (temperature, humidity, air quality), and set up automated conditions that drive the AC (mode, target, fan, schedules, thresholds). Unofficial community tool; Sensibo is a trademark of Sensibo Ltd.
Project description
sensibo-cli
Agent and CLI for Sensibo smart-AC control at home: discover devices, collect every sensor reading into a local store you own, and set up automated conditions that drive the AC.
Unofficial community tool. Sensibo is a trademark of Sensibo Ltd. This project is not affiliated with, endorsed by, or supported by them.
Status: scaffold. The CLI today ships only its introspection verbs (
whoami,learn,explain,overview,doctor). None of the AC control, collection, or automation features exist yet. See the roadmap.
What it will do
- Control the AC — power, mode, target temperature, fan speed, swing; per device or across the house.
- Collect every sensor reading locally — poll on a cadence and persist to a local time-series store you own and can query offline, retained past the window Sensibo's own cloud keeps.
- Automate conditions that drive the AC — thresholds, schedules, occupancy, and the cross-room logic Sensibo's own engine cannot express.
"Locally" — read this before you assume
Sensibo devices are cloud-only. There is no LAN-local API: no local REST
endpoint, no MQTT, no documented on-network protocol on stock firmware. We
verified this rather than assuming it — Home Assistant's Sensibo integration is
classified iot_class: cloud_polling, the de-facto Python client pysensibo
contains no local code path, and Sensibo's official OpenAPI spec declares exactly
one server (home.sensibo.com).
So this tool polls Sensibo's cloud API and persists the readings on your machine. "Locally" means the data lands and lives with you — a store you own, queryable offline, retained on your terms — not that the transport avoids the internet. We would prefer a local protocol. It does not exist.
That constraint is also the strongest argument for the local store: because there is no device to fall back on, once a reading ages out of Sensibo's cloud history it is gone unless you kept it.
(The one genuine exception is Apple HomeKit on Sensibo Air Pro, which really is a
LAN protocol — but it exposes only mode and target temperature, with no fan,
swing, air-quality, or history, and it pairs exclusively to one controller. It is
not a viable basis for this tool. Details in docs/sensibo-api.md.)
Quickstart
uv sync
uv run pytest -n auto # run the test suite
uv run sensibo whoami # identity from culture.yaml
uv run sensibo learn # self-teaching prompt (add --json)
uv run sensibo doctor # agent-identity invariants
The PyPI dist is sensibo-cli, the import package is sensibo, and the console
command is sensibo.
When the API-backed verbs land they will read the key from the environment:
export SENSIBO_API_KEY=... # from https://home.sensibo.com/me/api
CLI
| Verb | What it does |
|---|---|
whoami |
Report this agent's nick, version, backend, and model from culture.yaml. |
learn |
Print a structured self-teaching prompt. |
explain <path> |
Markdown docs for any noun/verb path. |
overview |
Read-only descriptive snapshot of the agent. |
doctor |
Check the agent-identity invariants. |
cli overview |
Describe the CLI surface itself. |
Every command supports --json. Results go to stdout, errors and diagnostics to
stderr — never mixed. Exit codes: 0 success, 1 user error, 2 environment
error, 3+ reserved.
Every write verb will be dry-run by default, with --apply to commit. This
tool turns on air conditioners in someone's home; a command that acts by accident
is a bug.
Docs
docs/sensibo-api.md— the Sensibo API surface, what's confirmed vs. unverified, rate limits, and the per-model sensor traps.docs/architecture.md— how the CLI is put together and how to add a verb.docs/roadmap.md— build order, and which automations run in Sensibo's cloud vs. need a daemon alive.docs/skill-sources.md— vendored-skill provenance.CLAUDE.md— conventions for working in this repo.
License
Apache 2.0 — see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sensibo_cli-0.5.0.tar.gz.
File metadata
- Download URL: sensibo_cli-0.5.0.tar.gz
- Upload date:
- Size: 143.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f132d2a6d627dba4a6d4b03a8b14344b78a6a58d5814a92c42cb07913dba62c2
|
|
| MD5 |
419bfa54581c992a82fa346672e0945f
|
|
| BLAKE2b-256 |
1597324ce5c2e0da3564aaa17a6703fa89bd3d4805e267f44ad986c04cfb2691
|
File details
Details for the file sensibo_cli-0.5.0-py3-none-any.whl.
File metadata
- Download URL: sensibo_cli-0.5.0-py3-none-any.whl
- Upload date:
- Size: 24.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c342be87579fe53801b427042027306a9da746f62b33bb4c1c960f0e4f2b88b1
|
|
| MD5 |
17014b011cf52c9c34be42085ff8da68
|
|
| BLAKE2b-256 |
2b81af51062e80578bad0a9abee64b453dc375c15dd2f71fe2124d23688bb5d0
|