@uboness/homebridge-tedee
v0.2.2
Published
Homebridge plugin for Tedee locks using the local Tedee Bridge API
Maintainers
Readme
Homebridge Tedee
Homebridge plugin for Tedee locks using the local Tedee Bridge API only.
A single platform manages multiple Tedee bridges through one shared webhook server.
Local Development
Install dependencies with pnpm:
pnpm installEdit .homebridge/config.json with your Tedee bridge(s) IP/host and local API token.
Run Homebridge locally:
pnpm run homebridgeRun the Homebridge UI locally:
pnpm run uiConfiguration
{
"platform": "Tedee",
"name": "Tedee",
"webhook": { "port": 8088 },
"defaults": {
"bridge": { "port": 80, "tokenMode": "encrypted", "unlockMode": 3, "lowBatteryThreshold": 20, "refreshInterval": 600000 },
"lock": { "pullSpringSwitch": false, "unlockMode": 3 }
},
"bridges": [
{
"id": "main",
"host": "192.168.1.139",
"token": "…",
"locks": [ { "id": 77178, "pullSpringSwitch": true } ]
},
{
"id": "annex",
"host": "192.168.1.138",
"token": "…",
"locks": [ { "id": 77176 } ]
}
]
}- Each entry under
bridgesis one Tedee bridge, keyed by a unique, stableid. defaults.bridge/defaults.lockset values inherited by every bridge / lock; per-entry settings override them.webhook.hostis optional — leave it unset to auto-detect the local address each bridge can reach the plugin on; set it only for unusual multi-subnet setups.
The bridge id is part of each accessory's identity and of the webhook path, so changing it
re-creates that bridge's accessories in HomeKit.
Tedee Features
- Discovers all locks paired to each configured Tedee bridge.
- Exposes each lock as a HomeKit Lock Mechanism.
- Adds a Battery service per lock with battery level, low battery, and charging state.
- Adds a linked momentary Switch service for pulling the spring (per-lock, optional).
- Runs one shared local callback server registered with every Tedee bridge.
Webhook Registration
The callback server is mandatory and managed by the plugin. It listens on webhook.port
(default 8088) and receives events for every bridge at /tedee/events/<bridgeId>.
On startup, each bridge resolves the local address the Tedee bridge can reach the plugin on
(or uses webhook.host when set), registers a single POST callback tagged with an internal
X-Homebridge-Tedee-Instance secret header, updates it if the URL changed, and removes any
duplicates. The callback is removed from the bridge on shutdown, so a bridge removed from the
configuration doesn't leave an orphaned callback behind.
Migrating from 0.1.x
The multi-bridge configuration is a breaking change and accessories are re-created. A one-shot cleanup CLI removes the old callbacks left by the single-bridge version from your bridges:
npx tedee-cleanup <path-to-homebridge-config.json> [--dry-run]