- Removed outdated TODOs and legacy references in hardware documentation. - Added details on the new CH32V203-based Sensor Module for CAN bus soil moisture sensors. - Documented updates to the Battery Management System (CH32V203-based) replacing the older bq34z100 design. - Refined sensor, pump, and power module descriptions with updated specifications. - Expanded firmware documentation to include Rust-based ESP32-C6 platform details, new OTA procedure, and MQTT telemetry topics. - Simplified toolchain setup and compilation process with updated scripts and instructions.
93 lines
4.5 KiB
Markdown
93 lines
4.5 KiB
Markdown
---
|
|
title: "MQTT"
|
|
date: 2025-01-27
|
|
draft: false
|
|
description: "a description"
|
|
tags: ["mqtt", "esp"]
|
|
---
|
|
# MQTT
|
|
|
|
The PlantCtrl firmware publishes comprehensive status and telemetry data via MQTT when configured. The system uses the **mcutie** crate for Home Assistant integration and standard MQTT topics.
|
|
|
|
### Topics
|
|
|
|
| Topic | Example | Description |
|
|
|-------|---------|-------------|
|
|
| `firmware/address` | `192.168.1.2` | IP address in station mode |
|
|
| `firmware/state` | `{...}` | Debug information about the current firmware and OTA slots |
|
|
| `firmware/last_online` | `2025-01-22T08:56:46.664+01:00` | Last time the board was online |
|
|
| `state` | `online` | Current state of the controller |
|
|
| `mppt` | `{"current_ma":1200,"voltage_ma":18500}` | MPPT charging metrics (current and voltage from solar panel) |
|
|
| `battery` | `{"Info":{"voltage_milli_volt":12860,"state_of_charge":95,...}}` | Battery health and charge data from the BMS |
|
|
| `water` | `{"enough_water":true,"warn_level":false,"left_ml":1337,...}` | Water tank status (level, temperature, frozen detection) |
|
|
| `plant{1-8}` | `{"sensor_a":...,"sensor_b":...,"mode":"TargetMoisture",...}` | Detailed status for each plant slot including moisture sensors |
|
|
| `pump{1-8}` | `{"enabled":true,"median_current_ma":500,...}` | Metrics for each pump output |
|
|
| `light` | `{"enabled":true,"active":true,...}` | Night light status |
|
|
| `deepsleep` | `night 1h` | Reason and duration of deep sleep |
|
|
|
|
Note: The batteries `average_current_milli_ampere` field uses a placeholder value (1337) and should be updated with actual current sensor readings when available.
|
|
|
|
### Data Structures
|
|
|
|
#### Firmware State (`firmware/state`)
|
|
Contains a debug dump of the `VersionInfo` struct:
|
|
- `git_hash`: Branch and commit hash
|
|
- `build_time`: Compilation timestamp
|
|
- `current`: Current running partition
|
|
- `slot0_state`: State of OTA slot 0
|
|
- `slot1_state`: State of OTA slot 1
|
|
|
|
#### MPPT (`mppt`)
|
|
- `current_ma`: Solar charging current in mA
|
|
- `voltage_ma`: Solar panel voltage in mV
|
|
|
|
#### Battery (`battery`)
|
|
Can be `"Unknown"` or an `Info` object. The battery data comes from a custom BMS (Battery Management System) board that uses the CH32V203 microcontroller with I2C communication.
|
|
|
|
- `voltage_milli_volt`: Battery voltage in millivolts
|
|
- `average_current_milli_ampere`: Current draw/charge in milliamperes (placeholder: 1337)
|
|
- `design_milli_ampere_hour`: Battery design capacity in milliampere-hours
|
|
- `remaining_milli_ampere_hour`: Remaining capacity in milliampere-hours
|
|
- `state_of_charge`: Charge percentage (0-100)
|
|
- `state_of_health`: Health percentage (0-100) based onLifetime capacity vs design capacity
|
|
- `temperature`: Battery temperature in degrees Celsius
|
|
|
|
#### Water (`water`)
|
|
- `enough_water`: Boolean, true if level is above empty threshold
|
|
- `warn_level`: Boolean, true if level is below warning threshold
|
|
- `left_ml`: Estimated remaining water in ml
|
|
- `percent`: Estimated fill level in percent
|
|
- `raw`: Raw sensor voltage in mV
|
|
- `sensor_error`: Details if the level sensor fails
|
|
- `water_frozen`: Boolean, true if temperature is below freezing
|
|
- `water_temp`: Water temperature in degrees Celsius
|
|
- `temp_sensor_error`: Details if the temperature sensor fails
|
|
|
|
#### Plant (`plant{1-8}`)
|
|
- `sensor_a` / `sensor_b`: Moisture sensor status
|
|
- `Disabled`
|
|
- `{"MoistureValue":{"raw_hz":5000,"moisture_percent":65}}`
|
|
- `{"SensorError":{"ShortCircuit":{"hz":...,"max":...}}}`
|
|
- `mode`: Watering mode (`Off`, `TargetMoisture`, `MinMoisture`, `TimerOnly`)
|
|
- `do_water`: Boolean, true if watering is currently required
|
|
- `dry`: Boolean, true if moisture is below target
|
|
- `cooldown`: Boolean, true if the pump is in cooldown period
|
|
- `out_of_work_hour`: Boolean, true if currently outside allowed watering hours
|
|
- `consecutive_pump_count`: Number of pump cycles without reaching target
|
|
- `pump_error`: Details if the pump is failing
|
|
- `last_pump`: Timestamp of last activity
|
|
- `next_pump`: Estimated timestamp for next allowed activity
|
|
|
|
#### Pump (`pump{1-8}`)
|
|
- `enabled`: Boolean, pump was active
|
|
- `pump_ineffective`: Boolean, no flow detected during pumping
|
|
- `median_current_ma`: Median pump current
|
|
- `max_current_ma`: Peak pump current
|
|
- `min_current_ma`: Minimum pump current
|
|
|
|
#### Light (`light`)
|
|
- `enabled`: Boolean, is enabled in config
|
|
- `active`: Boolean, led is currently on
|
|
- `out_of_work_hour`: Boolean, led should not be on at this time of day
|
|
- `battery_low`: Boolean, battery is low so led usage is restricted
|
|
- `is_day`: Boolean, the sun is up (determined by solar panel voltage) |