Farm Mode and Home Assistant
Primary files:
src/farm-state-collector.tssrc/farm-action-gateway.tssrc/home-assistant.ts- scripts:
scripts/farm-bootstrap.sh,scripts/farm-demo.sh,scripts/farm-onboarding.sh,scripts/farm-validate.sh
Farm State Collector
Enabled by FARM_STATE_ENABLED=true.
Three loops with independent cadence:
- fast loop (
FARM_STATE_FAST_MS): states ->current.jsonand telemetry append - medium loop (
FARM_STATE_MEDIUM_MS): alert snapshot ->alerts.json - slow loop (
FARM_STATE_SLOW_MS): devices + calendar ->devices.json,calendar.json
Output directory:
data/farm-state/
Generated files include:
current.jsonalerts.jsondevices.jsoncalendar.jsontelemetry.ndjson(daily rotation)screenshots/(for captured dashboard images)
Alert and Context Derivation
Collector computes:
- alert list from binary sensors/frost/soil moisture heuristics
- context attributes:
timeOfDayseasonweatherConditionalertLevelsuggestedTheme
Stale mode:
- if HA poll fails, collector writes stale snapshot with
haConnected=false.
Farm Action Gateway
Action envelope validated via Zod in executeFarmAction().
Global guards:
- allowlisted action name
- main-chat-only execution
- production control-action gate
Control actions (subject to production gate):
ha_call_serviceha_set_entityha_restartha_apply_dashboard
Production gate logic:
- if
FARM_MODE=production, control actions requireFARM_PROFILE_PATHJSON withvalidation.status == "pass".
Audit trail:
- every action appends NDJSON record to
data/farm-state/audit.ndjson.
Home Assistant Adapter
HomeAssistantAdapter wraps HA HTTP API:
getAllStates()getState(entityId)callService(domain, service, data)getCalendarEvents(entityId, start, end)
Auth model:
- bearer token from
HA_TOKEN
Farm Bootstrap Scripts
farm-bootstrap.sh:
- starts dashboard companion repo stack
- waits for HA reachability
- validates token
- writes farm env vars into
.env - runs demo or production flow
Production flow:
farm-onboarding.shbuilds/updatesdata/farm-profile.jsonmappingfarm-validate.shchecks mappings and HA services, writes validation status
Demo flow:
farm-demo.shruns telemetry simulator smoke checks.