Connect
Three routes. Pick one per device, change your mind later.
This is where most soil sensors quietly insist on their own hub, in range of their own
radio, powered forever. We never require one. All three routes below end at the same validated,
de-duplicated ingest pipeline and the same dashboard.
Wi-Fi, over signed HTTPS
The lawn is inside your house Wi-Fi. This is the simplest possible setup and needs nothing else running.
- What it needsRouter coverage at the exact spot the stake will live. Walk out there with a phone and check before you commit — a bar of signal at the back door is not a bar of signal at the fence.
- How it authenticatesEvery request carries an HMAC signature and a timestamp. A reading cannot be forged, and it cannot be replayed more than five minutes later.
- What setup hands youThe ingest endpoint, your key, and a copy-paste request-signing snippet.
MQTT, to a broker you control
You already run a broker or a home-automation stack and would rather have the sensor on the same fabric as everything else.
- What it needsA broker you control. We issue per-device credentials that are locked to that device’s own topic, so one sensor can neither read nor write another’s.
- How it authenticatesPer-device broker credentials, scoped to one topic. The device publishes the same metrics object as the HTTPS route.
- What setup hands youYour topic, your credentials, and a publish example.
LoRaWAN, through The Things Network
A paddock, an allotment, a far corner, a rental. It trades bandwidth for range, and a lawn sensor needs almost no bandwidth.
- What it needsA Things Network gateway in range — often one that already exists and is not yours. This is the answer when Wi-Fi simply does not reach.
- How it authenticatesNetwork-session keys on the Things Network side, plus a bearer token on the webhook that forwards uplinks to us.
- What setup hands youThe complete Things Network payload formatter, ready to paste into the console.
The same eight numbers, whichever route
POST /api/ingest.php
POST /api/ingest.php
X-MML-Key: mmlk_…
X-MML-Signature: t=<unix-ts>,v1=<hmac-sha256-hex>
{
"device_uid": "mml_8f3ad21c",
"recorded_at": "2026-06-21T14:30:05Z",
"metrics": {
"soil_moisture": 42.7, // %VWC
"soil_temperature": 19.4, // °C, canonical
"air_temperature": 24.1,
"air_humidity": 55.0,
"light": 38400, // lux
"rain": 0.0, // mm
"battery_voltage": 4.02,
"signal_strength": -67 // dBm
}
}
MQTT devices publish that same metrics object to
mml/<device_uid>/readings. LoRaWAN nodes send nothing like it —
The Things Network posts its own uplink shape to a separate endpoint and our payload formatter maps
the decoded fields onto the same eight keys, with the gateway’s RSSI becoming
signal_strength. You never write that mapping yourself; it is generated for
you on the claim screen.
-
How often should it report?
Your choice, set on the device. Every 5 to 15 minutes is typical and comfortably
inside our limits. Reporting more often costs battery and tells you very little extra, because
soil moisture moves slowly.
-
If it drops out
Readings buffered on the device are accepted when it reconnects, and a late reading
will not rewind your last-seen time. Nothing for three hours raises an offline alert and emails
you.
-
Secrets
Device secrets are stored only as hashes and shown to you exactly once, at the moment
they are issued. If you lose one, you rotate it rather than recover it.
Fig. 03 — A mixed fleet on one account is fine: Wi-Fi at the house, LoRaWAN
at the far paddock, all on the same dashboard. Nothing in this section is a product we sell you twice.