homebridge-netro
v2.0.3
Published
Control Netro Spark, Sprite, Pixie and Stream watering zones and read Whisperer soil data from Apple Home.
Maintainers
Readme
homebridge-netro
Control your Netro watering zones from the Home app and Siri, and read your Whisperer soil sensor. Talks to the Netro cloud API — no local gateway needed.
Supported hardware
| Device | Supported | Notes | |---|---|---| | Spark, Sprite, Pixie, Stream | Yes | One valve per zone, manual watering, live state | | Whisperer soil sensor | Yes | Soil moisture, temperature, sunlight, battery | | Lapland S1 lamp | No | The Netro public API has no lamp endpoint, in v1 or v2. Support was removed in 2.0.0 rather than pretending |
You need the serial number of each device, shown in the Netro app under Settings → Device → Serial. It doubles as the API key.
What appears in HomeKit
| Measurement | HomeKit service | Displayed unit | Notes |
|---|---|---|---|
| Watering zone | Valve (irrigation) | On / off, remaining time | One accessory per zone by default |
| Zone watering mode | Custom characteristic on the valve | SMART, ASSISTANT, TIMER | Shown by Eve, Controller for HomeKit and Home+; ignored by the Home app |
| Estimated soil moisture, per zone | Humidity sensor | % | Netro's own estimate, refreshed a few times a day. Published only for zones Netro has a value for |
| Controller on / off | Switch, <name> Enabled | On / off | Enables or puts the controller in standby |
| Suspend watering | Switch, <name> No Watering | Momentary | Netro offers no way to cancel a suspension, so the switch turns itself back off |
| Controller status | Custom characteristic on the Enabled switch | ONLINE, WATERING, OFFLINE… | Third-party controllers only |
| Whisperer soil moisture | Humidity sensor | % | |
| Whisperer soil temperature | Temperature sensor | °C | |
| Whisperer sunlight | Light sensor | lux | The API reports kilolux; HomeKit caps the value at 100 000 lux |
| Whisperer battery | Battery | % | Reported low at 20 % or under |
Three limits worth knowing before you build automations on this:
- Stopping one zone stops them all, and cancels pending manual runs.
stop_wateris device-wide in the Netro API and also drops the manual schedules still queued for the day. There is no per-zone stop. The plugin resets every zone of the controller together and says so in the log. - HomeKit caps a valve duration at 60 minutes. Longer runs have to be scheduled in the Netro app.
- Netro allows 2000 API calls per device per day. The plugin tracks the remaining budget of each device separately, slows down below 200 calls left, and suspends the calls of a device that runs out — without silencing the others.
Requirements
- Homebridge 1.8 or 2.x
- Node.js 22 or 24
- A Netro account with at least one device. The controller does not have to be online: the Netro cloud still serves its zones, so the plugin can be set up while it is unplugged. Only the watering commands need the device itself.
Install
From the Homebridge UI: Plugins → search homebridge-netro → Install.
From a terminal on an hb-service installation:
sudo hb-service add homebridge-netroConfiguration
Open Plugins → Netro → Settings. The plugin does nothing until at least one device is added.
Netro devices — one entry per device:
- Serial number (API key) — the serial shown in the Netro app. No spaces.
- Custom name — optional, used in the Homebridge log and for the controller accessory.
- Device type — leave on Auto (detect). An irrigation controller is recognised by the zones it reports; a Whisperer by the soil sensor endpoint answering.
- Expose only these zones — leave empty to expose every zone. One zone number per line, as numbered in the Netro app. A list that matches no zone is reported as an error and nothing is published or removed.
- Manual watering duration for this device (minutes) — overrides the general default.
General settings:
- Default watering duration (minutes) — 1 to 60, used when a device defines nothing.
- Status polling interval (seconds) — 300 to 3600, default 600. At 600 s one device uses about 144 of its 2000 daily calls.
- Suspension length (days) — how long the No Watering switch suspends watering.
- Remove accessories for zones that no longer exist — on by default. A zone is only removed after the device has reported it missing twice in a row, and never while the device is unreachable.
- Accessory layout — one accessory per zone (default) or one irrigation accessory grouping every zone. The grouped layout uses different HomeKit identifiers, so it has to be added to the Home app again; the per-zone accessories are kept so that switching back restores them.
- Netro API version — v1 (device serial) or v2 (account API key). Some recent Netro devices only answer on v2. Untested by the author: keep v1 unless v1 fails.
- Account API key — only shown when the version is v2. Generated on netrohome.com under Account → API Key.
- Platform name — the name used for this platform in the Homebridge log.
Equivalent config.json:
{
"platforms": [
{
"platform": "Netro",
"name": "Netro",
"devices": [
{
"serial": "0011aabbccdd",
"name": "Garden",
"type": "auto",
"includeZones": [1, 2, 3],
"defaultDurationMinutes": 10
}
],
"defaultDurationMinutes": 5,
"pollInterval": 600,
"suspendDays": 1,
"autoPruneAccessories": true,
"layout": "legacy",
"apiVersion": "v1"
}
]
}Troubleshooting
| Symptom | What to look for in the log |
|---|---|
| No valve appears | [Discover] … reported no usable zone or [Config] … "Expose only these zones" … matches none of the — clear the zone filter and check the serial |
| Everything shows Not responding | [Netro] … the controller reports status OFFLINE — the controller lost its connection to the Netro cloud, this is not a plugin problem |
| Netro error 1 … Invalid key | The serial is wrong, or it belongs to another account |
| Netro error 3 / [Quota] Netro daily quota exceeded | Too many calls today. Raise Status polling interval; the quota resets at midnight UTC |
| A valve stays on after you switch it off | [Watering] … stop_water FAILED after 3 attempts — this is deliberate: the water may still be running, so the plugin refuses to show the valve as closed |
| An accessory you deleted comes back | It is still reported by the device. Remove the zone in the Netro app, or filter it out with Expose only these zones |
Changelog
See CHANGELOG.md and the GitHub releases.
Licence and support
MIT — see LICENSE. Made by Régis Jehl (mashgundash). Bugs and ideas: GitHub issues. If it saves you time: ☕ Buy me a coffee.
