04-10-2025, 01:26 PM
This is an ongoing project, and I plan to deploy the station in a month or so. This setup leverages class B scientific grade meteorological instruments polled over serial MODBUS. The controller enclosure's environment is monitored by a Kilcony RS-485 temperature and relative humidity RTU, and barometric pressure is monitored by a BMP280 over I2C. The code base is in C i.e. ESP-IDF, and a sample implementation is available here.
Telemetry data model:
Telemetry data is uploaded to ThingSpeak once a minute over MQTT when connected to a Wi-Fi network.
Telemetry data model:
Code:
typedef struct rpu_telemetry_data_s {
uint64_t timestamp;
struct rpu_s {
char network_id[16];
char name[32];
uint32_t system_uptime;
uint64_t reboot_timestamp;
uint16_t reboot_counter;
} rpu;
struct atmospheric_s {
float spot_wind_speed;
uint16_t spot_wind_direction;
float avg_wind_speed;
uint16_t avg_wind_direction;
float max_wind_speed;
uint16_t max_wind_direction;
float air_temperature;
float relative_humidity;
float dewpoint_temperature;
float barometric_pressure;
float precipitation_rate;
hyrs2e_precip_types_t precipitation_type;
} atmospheric;
struct ground_s {
float soil_temperature;
} ground;
struct cabinet_s {
float air_temperature;
float relative_humidity;
float dewpoint_temperature;
cabinet_door_states_t door_status;
} cabinet;
} rpu_telemetry_data_t;
Telemetry data is uploaded to ThingSpeak once a minute over MQTT when connected to a Wi-Fi network.