Skip to content
Devices

It asks for a pH reader, not for your probe.

The control logic binds to capabilities. The pH loop asks for "a pH reader in zone 3" and "a millilitre doser tagged pH-down", and it cannot discover whether that is an Atlas board on I²C, a 4–20 mA transmitter, or a register on an RS-485 unit. Swapping one for another is a configuration change, not a code change.

Transports, in the order they are worth building

Transport Where Control? Note
Direct — I²C, 1-Wire, GPIO, ADC On the node itself The sensors bolted to the controller. Lowest latency, no network in the path, and the only transport that is still working when the Wi-Fi is not.
MQTT with Home Assistant discovery Anything on the LAN Every Zigbee, Z-Wave, Matter, Tasmota, ESPHome and Shelly device already bridged into a Home Assistant becomes usable through this one integration. Thousands of devices, no drivers.
Modbus RTU over RS-485 Industrial probes and drives The industrial bread and butter, and the transport that works down a wet block-walled polyhouse where Wi-Fi is hopeless. Two wires and a hundred metres.
Modbus TCP PLCs and gateways The same register maps over Ethernet. Usually how a third-party climate PLC is reached.
HTTP polling Cloud-tethered consumer gear monitor only A last resort with a local endpoint where one exists. Anything that can only be reached through a vendor cloud is not eligible for a control channel here — see the transport rule below.
4–20 mA and 0–10 V Industrial transmitters, through an ADC or DAC board Noise-immune over long runs and still the default in agricultural instrumentation. A 4–20 mA loop also fails detectably: zero milliamps is a broken wire, not a zero reading.
LoRaWAN via ChirpStack Outdoor and long spans monitor only Kilometres, battery powered, and far too slow for a control loop. Monitoring only, and the abstraction enforces that rather than trusting a configuration screen.
BACnet/IP Commercial HVAC monitor only Last, and only for sites with a building-management system already in place.

The "control" column is a hard gate at pairing, not a warning. LoRaWAN can switch a relay perfectly well and may take four minutes to hear about it; an aeroponic manifold has fifteen. A cloud-tethered device switches in a second, right up until somebody else's data centre has a bad afternoon.

Profiles that ship

A profile is a YAML file, not code — which is what makes adding a device something a grower can do this afternoon rather than something that waits for a release. "Verified" means somebody has had the physical device on a bench. "Contributed" means the registers are probably right. That distinction is published because a list where everything looks equally trustworthy is how somebody ends up dosing acid against a register that turns out to be the firmware version.

Device Transport Reads / writes Status
Generic RS-485 EC/pH/temperature transmitter
Various (the ubiquitous blue-cased Chinese unit)
modbus_rtu Conductivity, pH, Temperature verified
Sold under a dozen names with the same register map. The one thing to check on a new batch is whether EC comes back in µS or mS — the scale below assumes µS, which is what every unit tested so far has done.
Atlas Scientific EZO pH
Atlas Scientific
direct pH verified
The reference against which the cheap boards are judged. Reports its own calibration point count, which is what makes a real probe-health score possible rather than a guess from drift.
Atlas Scientific EZO EC
Atlas Scientific
direct Conductivity verified
DS18B20 water temperature probe
Maxim and a great many clones
direct Temperature verified
Four hundred rupees, waterproof, and the single highest-value sensor per rupee in the entire bill of materials. Buy two.
Shelly Plug S
Shelly
mqtt Relay, Power verified
A switched socket with power measurement for under two thousand rupees, and the power channel is the useful half: it is how a controller tells a running air pump from a closed relay.
Anything published by Home Assistant discovery
Any
mqtt auto verified
Not a device profile so much as a doorway. Everything already bridged into a Home Assistant — Zigbee sensors, Z-Wave valves, Matter plugs, ESPHome boards — announces itself on homeassistant/# and is mapped onto the capability table automatically. This one entry is worth more than every other profile in the list combined.
Kamoer peristaltic dosing pump on a relay
Kamoer and equivalents
direct Metered dose verified
Metered by time against a calibrated flow rate, which is the arrangement almost everybody actually has. It also means the pump has no idea how much it delivered, so the firmware counter that enforces the dose cap is counting seconds and trusting a calibration — recalibrate it when the tubing is changed, because peristaltic tubing loses roughly a tenth of its throughput as it work-hardens.
Substrate water content / EC / temperature sensor
Grodan, Teros and equivalents
analog Substrate water content, Substrate conductivity, Temperature contributed
The sensor that makes crop steering real, and the most expensive item per node. Without one, dryback is an intention rather than a measurement and the steering slider is decoration.
Hall-effect flow meter (YF-S201 family)
Various
direct Flow verified
Three hundred rupees, and mandatory on NFT rather than optional. It is the only thing that distinguishes a running pump from a closed relay, and that distinction is the crop.
4–20 mA pressure transmitter
Various
analog Pressure contributed
Required for aeroponics and useful everywhere else. A 4–20 mA loop fails detectably, which a 0–5 V sensor does not: zero milliamps is a broken wire and cannot be confused with zero pressure.

What a profile looks like

id: generic_modbus_ec_ph_transmitter
name: "Generic RS-485 EC/pH/temperature transmitter"
transport: modbus_rtu
status: verified
note: "Sold under a dozen names with the same register map. The one thing to check on a new batch is whether EC comes back in µS or mS — the scale below assumes µS, which is what every unit tested so far has done."
channels:
  - capability: "ec_mscm"
    register: "0x0000"
    type: "float32_be"
    scale: 0.001
  - capability: "ph"
    register: "0x0002"
    type: "float32_be"
    scale: 1
  - capability: "temperature_c"
    register: "0x0004"
    type: "float32_be"
    scale: 1
calibration:
  supports: [two_point, slope_offset]
health:
  slope_min_pct: 85

Write one of these for a device that is not listed and it works. Send it back and it ships for everybody. The registry is deliberately open and not behind a licence, because a driver registry behind a paywall is a registry nobody contributes to.

Crop intelligence

Going in during August

Sowing windows open right now, from the crop reference.

Crop Sow Days pH Temp °C Yield
Guava Jul–Aug (planting) 2–3 yr to bear 6.0–7.5 23–30 20–25 t
Pomegranate Jul–Aug (planting) 2–3 yr to bear 6.5–7.5 20–35 15–20 t
Ber (Indian Jujube) Jul–Aug (planting) 2–3 yr to bear 6.0–8.5 20–35 15–20 t
Calamondin Jul–Aug 2–3 yr 5.5–6.5 18–32 12–20 t
Tea Jun–Aug (planting) 3–4 yr to pluck 4.5–5.5 18–30 2–3 t made tea
Oil Palm Jun–Sep (planting) 3–4 yr to bear 5.0–7.0 24–32 20–25 t FFB
Lemon Jul–Aug (planting) 3–4 yr to bear 6.0–7.5 20–32 15–20 t
Jojoba Jul–Aug 3–4 yr 6.0–8.0 20–35 1.5–3 t
Feijoa Jul–Aug 3–4 yr 5.5–7.0 10–25 10–15 t
Loquat Jul–Aug 3–4 yr 6.0–7.5 15–30 10–15 t
Jujube Jul–Aug 3–4 yr 6.0–8.0 15–35 10–15 t
Grapefruit Jul–Aug 3–4 yr 5.5–7.5 15–35 20–30 t
Citron Jul–Aug 3–4 yr 5.5–7.5 18–32 15–25 t
Kumquat Jul–Aug 3–4 yr 5.5–6.5 12–30 8–14 t

54 more in this list. All 538 crops, with every column → The sowing year →