Skip to Content
User guideHome Assistant

Home Assistant

seedypod talks to Home Assistant over MQTT, from two places that show up as one device:

  1. hald publishes discovery for everything physical: the light, the pump, the sensors, the alerts and the button. This works with no core at all.
  2. Core’s bridge adds what only core knows: the grow day and stage, reminders with “done” buttons, light hours, and a “water now” button.

Connect the daemon

Point Home Assistant’s MQTT integration  and hald at the same broker: either the unit’s own (installed by install-hal, opened to the LAN on port 1884 with --mqtt-lan) or Home Assistant’s add-on (see Install). hald uses mqtt_url in /etc/seedypod/hal.toml (default mqtt://127.0.0.1:1883; set mqtt_username and mqtt_password if your broker needs them). A device called Gardyn followed by the unit id appears with these entities:

EntityTypeNotes
LightlightBrightness 0–100.
PumpfanHA’s 100 % is the duty cap (30 % by default); runs are bounded by the guard.
Air, board and water temperaturesensor°C
Humiditysensor%
Water distance, water levelsensorcm, %
Pump voltage, current, powersensorV, A, W
pH, ECsensorOnly when the optional probes are configured.
Water low, pump faultbinary_sensorproblem
Over temperaturebinary_sensorheat
Acknowledge pump faultbuttonClears a latched pump fault.
Buttoneventsingle, double, long presses of the physical button.

The full discovery table is in the hald reference.

The pump fault is latched on purpose. Pressing Acknowledge pump fault re-enables the pump, so refill the tank or let the board cool first.

Core bridge

In the web UI, open Settings → Home Assistant bridge and enter your broker URL (for example mqtt://homeassistant.local:1883), plus a username and password if needed. TLS is opt-in, and accepting a self-signed certificate is a separate switch that stays off by default. The bridge stays dormant until a broker URL is set and reconnects when you change the settings.

It adds these entities to the same device:

EntityType
Grow day, grow stagesensor
Grow light hourssensor (total, for LED ageing)
Thin seedlings, Check roots, Harvest window, Add nutrientsbinary_sensor, on when due
… : donebutton that marks the reminder done
Backup overduebinary_sensor (problem), on after 7 days without an off-card backup
Water now (5 min)button, runs a bounded pump cycle through the guard

If the pump refuses a “water now” press (dry tank, latched fault), the refusal shows up on the daemon’s own alert entities.

Example dashboard and automations

The core repository has a ready-made Lovelace view  and automations . A notification when the tank runs low looks like this:

- alias: Gardyn — notify on water low trigger: - platform: state entity_id: binary_sensor.gardyn_water_low to: 'on' action: - service: notify.mobile_app_phone data: title: Gardyn needs water message: Tank is low; the pump will refuse to run until refilled.

Entity ids depend on your unit id and Home Assistant’s naming, so check yours under Settings → Devices & services → MQTT.


Design: ADR 0007: HAL contract · ADR 0013: Core-level MQTT bridge

Last updated on