535 lines
19 KiB
C
535 lines
19 KiB
C
|
#pragma once
|
||
|
|
||
|
#include "stdio.h"
|
||
|
#include "stdint.h"
|
||
|
#include "stdbool.h"
|
||
|
|
||
|
#define ZH_HIGH true
|
||
|
#define ZH_LOW false
|
||
|
|
||
|
#define ZH_ON true
|
||
|
#define ZH_OFF false
|
||
|
|
||
|
#define ZH_ONLINE true
|
||
|
#define ZH_OFFLINE false
|
||
|
|
||
|
#define ZH_NOT_USED 0xFF
|
||
|
//***********************************************************************************//
|
||
|
#define ZH_DEVICE_TYPE \
|
||
|
DF(ZHDT_NONE, "") \
|
||
|
DF(ZHDT_GATEWAY, "gateway") \
|
||
|
DF(ZHDT_SWITCH, "espnow_switch") \
|
||
|
DF(ZHDT_LED, "espnow_led") \
|
||
|
DF(ZHDT_SENSOR, "espnow_sensor") \
|
||
|
DF(ZHDT_RF_GATEWAY, "espnow_rf_gateway") \
|
||
|
DF(ZHDT_CONTROL_PANEL, "espnow_control_panel") \
|
||
|
DF(ZHDT_DIMMER, "espnow_dimmer") \
|
||
|
DF(ZHDT_TERRARIUM, "espnow_terrarium") \
|
||
|
DF(ZHDT_RF_SENSOR, "rf_sensor") \
|
||
|
DF(ZHDT_BINARY_SENSOR, "espnow_sensor") \
|
||
|
DF(ZHDT_MAX, "")
|
||
|
|
||
|
typedef enum zh_device_type_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
ZH_DEVICE_TYPE
|
||
|
#undef DF
|
||
|
} zh_device_type_t;
|
||
|
|
||
|
char *zh_get_device_type_value_name(zh_device_type_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define ZH_PAYLOAD_TYPE \
|
||
|
DF(ZHPT_NONE, "") \
|
||
|
DF(ZHPT_ATTRIBUTES, "attributes") \
|
||
|
DF(ZHPT_KEEP_ALIVE, "status") \
|
||
|
DF(ZHPT_SET, "set") \
|
||
|
DF(ZHPT_STATE, "state") \
|
||
|
DF(ZHPT_UPDATE, "update") \
|
||
|
DF(ZHPT_RESTART, "restart") \
|
||
|
DF(ZHPT_SYSTEM, "system") \
|
||
|
DF(ZHPT_CONFIG, "config") \
|
||
|
DF(ZHPT_FORWARD, "forward") \
|
||
|
DF(ZHPT_UPDATE_BEGIN, "") \
|
||
|
DF(ZHPT_UPDATE_PROGRESS, "") \
|
||
|
DF(ZHPT_UPDATE_END, "") \
|
||
|
DF(ZHPT_UPDATE_ERROR, "") \
|
||
|
DF(ZHPT_UPDATE_FAIL, "") \
|
||
|
DF(ZHPT_UPDATE_SUCCESS, "") \
|
||
|
DF(ZHPT_BRIGHTNESS, "brightness") \
|
||
|
DF(ZHPT_TEMPERATURE, "temperature") \
|
||
|
DF(ZHPT_RGB, "rgb") \
|
||
|
DF(ZHPT_EFFECT, "effect") \
|
||
|
DF(ZHPT_HARDWARE, "hardware") \
|
||
|
DF(ZHPT_MAX, "")
|
||
|
|
||
|
typedef enum zh_payload_type_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
ZH_PAYLOAD_TYPE
|
||
|
#undef DF
|
||
|
} zh_payload_type_t;
|
||
|
|
||
|
char *zh_get_payload_type_value_name(zh_payload_type_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define HA_COMPONENT_TYPE \
|
||
|
DF(HACT_NONE, "") \
|
||
|
DF(HACT_ALARM_CONTROL_PANEL, "alarm_control_panel") \
|
||
|
DF(HACT_BINARY_SENSOR, "binary_sensor") \
|
||
|
DF(HACT_BUTTON, "button") \
|
||
|
DF(HACT_CAMERA, "camera") \
|
||
|
DF(HACT_COVER, "cover") \
|
||
|
DF(HACT_DEVICE_TRACKER, "device_tracker") \
|
||
|
DF(HACT_FAN, "fan") \
|
||
|
DF(HACT_HUMIDIFIER, "humidifier") \
|
||
|
DF(HACT_CLIMATE_HVAC, "climate") \
|
||
|
DF(HACT_LIGHT, "light") \
|
||
|
DF(HACT_LOCK, "lock") \
|
||
|
DF(HACT_NUMBER, "number") \
|
||
|
DF(HACT_SCENE, "scene") \
|
||
|
DF(HACT_SELECT, "select") \
|
||
|
DF(HACT_SENSOR, "sensor") \
|
||
|
DF(HACT_SIREN, "siren") \
|
||
|
DF(HACT_SWITCH, "switch") \
|
||
|
DF(HACT_UPDATE, "update") \
|
||
|
DF(HACT_TEXT, "text") \
|
||
|
DF(HACT_VACUUM, "vacuum") \
|
||
|
DF(HACT_MAX, "")
|
||
|
|
||
|
typedef enum ha_component_type_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_COMPONENT_TYPE
|
||
|
#undef DF
|
||
|
} ha_component_type_t;
|
||
|
|
||
|
char *zh_get_component_type_value_name(ha_component_type_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define HA_BINARY_SENSOR_DEVICE_CLASS \
|
||
|
DF(HABSDC_NONE, "") \
|
||
|
DF(HABSDC_BATTERY, "battery") \
|
||
|
DF(HABSDC_BATTERY_CHARGING, "battery_charging") \
|
||
|
DF(HABSDC_CARBON_MONOXIDE, "carbon_monoxide") \
|
||
|
DF(HABSDC_COLD, "cold") \
|
||
|
DF(HABSDC_CONNECTIVITY, "connectivity") \
|
||
|
DF(HABSDC_DOOR, "door") \
|
||
|
DF(HABSDC_GARAGE_DOOR, "garage_door") \
|
||
|
DF(HABSDC_GAS, "gas") \
|
||
|
DF(HABSDC_HEAT, "heat") \
|
||
|
DF(HABSDC_LIGHT, "light") \
|
||
|
DF(HABSDC_LOCK, "lock") \
|
||
|
DF(HABSDC_MOISTURE, "moisture") \
|
||
|
DF(HABSDC_MOTION, "motion") \
|
||
|
DF(HABSDC_MOVING, "moving") \
|
||
|
DF(HABSDC_OCCUPANCY, "occupancy") \
|
||
|
DF(HABSDC_OPENING, "opening") \
|
||
|
DF(HABSDC_PLUG, "plug") \
|
||
|
DF(HABSDC_POWER, "power") \
|
||
|
DF(HABSDC_PRESENCE, "presence") \
|
||
|
DF(HABSDC_PROBLEM, "problem") \
|
||
|
DF(HABSDC_RUNNING, "running") \
|
||
|
DF(HABSDC_SAFETY, "safety") \
|
||
|
DF(HABSDC_SMOKE, "smoke") \
|
||
|
DF(HABSDC_SOUND, "sound") \
|
||
|
DF(HABSDC_TAMPER, "tamper") \
|
||
|
DF(HABSDC_UPDATE, "update") \
|
||
|
DF(HABSDC_VIBRATION, "vibration") \
|
||
|
DF(HABSDC_WINDOW, "window") \
|
||
|
DF(HABSDC_MAX, "")
|
||
|
|
||
|
typedef enum ha_binary_sensor_device_class_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_BINARY_SENSOR_DEVICE_CLASS
|
||
|
#undef DF
|
||
|
} ha_binary_sensor_device_class_t;
|
||
|
|
||
|
char *zh_get_binary_sensor_device_class_value_name(ha_binary_sensor_device_class_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define HA_COVER_DEVICE_CLASS \
|
||
|
DF(HACDC_NONE, "") \
|
||
|
DF(HACDC_AWNING, "awning") \
|
||
|
DF(HACDC_BLIND, "blind") \
|
||
|
DF(HACDC_CURTAIN, "curtain") \
|
||
|
DF(HACDC_DAMPER, "damper") \
|
||
|
DF(HACDC_DOOR, "door") \
|
||
|
DF(HACDC_GARAGE, "garage") \
|
||
|
DF(HACDC_GATE, "gate") \
|
||
|
DF(HACDC_SHADE, "shade") \
|
||
|
DF(HACDC_SHUTTER, "shutter") \
|
||
|
DF(HACDC_WINDOW, "window") \
|
||
|
DF(HACDC_MAX, "")
|
||
|
|
||
|
typedef enum ha_cover_device_class_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_COVER_DEVICE_CLASS
|
||
|
#undef DF
|
||
|
} ha_cover_device_class_t;
|
||
|
|
||
|
char *zh_get_cover_device_class_value_name(ha_cover_device_class_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define HA_SENSOR_DEVICE_CLASS \
|
||
|
DF(HASDC_NONE, "") \
|
||
|
DF(HASDC_APPARENT_POWER, "apparent_power") \
|
||
|
DF(HASDC_AQI, "aqi") \
|
||
|
DF(HASDC_BATTERY, "battery") \
|
||
|
DF(HASDC_CARBON_DIOXIDE, "carbon_dioxide") \
|
||
|
DF(HASDC_CARBON_MONOXIDE, "carbon_monoxide") \
|
||
|
DF(HASDC_CURRENT, "current") \
|
||
|
DF(HASDC_DATE, "date") \
|
||
|
DF(HASDC_DISTANCE, "distance") \
|
||
|
DF(HASDC_DURATION, "duration") \
|
||
|
DF(HASDC_ENERGY, "energy") \
|
||
|
DF(HASDC_FREQUENCY, "frequency") \
|
||
|
DF(HASDC_GAS, "gas") \
|
||
|
DF(HASDC_HUMIDITY, "humidity") \
|
||
|
DF(HASDC_ILLUMINANCE, "illuminance") \
|
||
|
DF(HASDC_MOISTURE, "moisture") \
|
||
|
DF(HASDC_MONETARY, "monetar") \
|
||
|
DF(HASDC_NITROGEN_DIOXIDE, "nitrogen_dioxide") \
|
||
|
DF(HASDC_NITROGEN_MONOXIDE, "nitrogen_monoxide") \
|
||
|
DF(HASDC_NITROUS_OXIDE, "nitrous_oxide") \
|
||
|
DF(HASDC_OZONE, "ozone") \
|
||
|
DF(HASDC_PM1, "pm1") \
|
||
|
DF(HASDC_PM10, "pm10") \
|
||
|
DF(HASDC_PM25, "pm25") \
|
||
|
DF(HASDC_POWER_FACTOR, "power_factor") \
|
||
|
DF(HASDC_POWER, "power") \
|
||
|
DF(HASDC_PRECIPITATION, "precipitation") \
|
||
|
DF(HASDC_PRECIPITATION_INTENSITY, "precipitation_intensity") \
|
||
|
DF(HASDC_PRESSURE, "pressure") \
|
||
|
DF(HASDC_REACTIVE_POWER, "reactive_power") \
|
||
|
DF(HASDC_SIGNAL_STRENGTH, "signal_strength") \
|
||
|
DF(HASDC_SPEED, "speed") \
|
||
|
DF(HASDC_SULPHUR_DIOXIDE, "sulphur_dioxide") \
|
||
|
DF(HASDC_TEMPERATURE, "temperature") \
|
||
|
DF(HASDC_TIMESTAMP, "timestamp") \
|
||
|
DF(HASDC_VOLATILE_ORGANIC_COMPOUNDS, "volatile_organic_compounds") \
|
||
|
DF(HASDC_VOLTAGE, "voltage") \
|
||
|
DF(HASDC_VOLUME, "volume") \
|
||
|
DF(HASDC_WATER, "water") \
|
||
|
DF(HASDC_WEIGHT, "weight") \
|
||
|
DF(HASDC_WIND_SPEED, "wind_speed") \
|
||
|
DF(HASDC_MAX, "")
|
||
|
|
||
|
typedef enum ha_sensor_device_class_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_SENSOR_DEVICE_CLASS
|
||
|
#undef DF
|
||
|
} ha_sensor_device_class_t;
|
||
|
|
||
|
char *zh_get_sensor_device_class_value_name(ha_sensor_device_class_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define HA_SWITCH_DEVICE_CLASS \
|
||
|
DF(HASWDC_NONE, "") \
|
||
|
DF(HASWDC_OUTLET, "outlet") \
|
||
|
DF(HASWDC_SWITCH, "switch") \
|
||
|
DF(HASWDC_MAX, "")
|
||
|
|
||
|
typedef enum ha_switch_device_class_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_SWITCH_DEVICE_CLASS
|
||
|
#undef DF
|
||
|
} ha_switch_device_class_t;
|
||
|
|
||
|
char *zh_get_switch_device_class_value_name(ha_switch_device_class_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define HA_ON_OFF_TYPE \
|
||
|
DF(HAONOFT_NONE, "") \
|
||
|
DF(HAONOFT_ON, "ON") \
|
||
|
DF(HAONOFT_OFF, "OFF") \
|
||
|
DF(HAONOFT_OPEN, "OPEN") \
|
||
|
DF(HAONOFT_CLOSE, "CLOSE") \
|
||
|
DF(HAONOFT_LOW, "LOW") \
|
||
|
DF(HAONOFT_MID, "MID") \
|
||
|
DF(HAONOFT_HIGH, "HIGH") \
|
||
|
DF(HAONOFT_ALARM, "ALARM") \
|
||
|
DF(HAONOFT_DRY, "DRY") \
|
||
|
DF(HAONOFT_MOTION, "MOTION") \
|
||
|
DF(HAONOFT_CONNECT, "CONNECT") \
|
||
|
DF(HAONOFT_LEAKAGE, "LEAKAGE") \
|
||
|
DF(HAONOFT_MAX, "")
|
||
|
|
||
|
typedef enum ha_on_off_type_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_ON_OFF_TYPE
|
||
|
#undef DF
|
||
|
} ha_on_off_type_t;
|
||
|
|
||
|
char *zh_get_on_off_type_value_name(ha_on_off_type_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define HA_CHIP_TYPE \
|
||
|
DF(HACHT_NONE, "") \
|
||
|
DF(HACHT_ESP32, "ESP32") \
|
||
|
DF(HACHT_ESP8266, "ESP8266") \
|
||
|
DF(HACHT_ESP32S2, "ESP32-S2") \
|
||
|
DF(HACHT_ESP32S3, "ESP32-S3") \
|
||
|
DF(HACHT_ESP32C2, "ESP32-C2") \
|
||
|
DF(HACHT_ESP32C3, "ESP32-C3") \
|
||
|
DF(HACHT_ESP32C6, "ESP32-C6") \
|
||
|
DF(HACHT_MAX, "")
|
||
|
|
||
|
typedef enum ha_chip_type_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_CHIP_TYPE
|
||
|
#undef DF
|
||
|
} ha_chip_type_t;
|
||
|
|
||
|
char *zh_get_chip_type_value_name(ha_chip_type_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define HA_LED_EFFECT_TYPE \
|
||
|
DF(HALET_NONE, "") \
|
||
|
DF(HALET_MAX, "")
|
||
|
|
||
|
typedef enum ha_led_effect_type_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_LED_EFFECT_TYPE
|
||
|
#undef DF
|
||
|
} ha_led_effect_type_t;
|
||
|
//***********************************************************************************//
|
||
|
#define HA_LED_TYPE \
|
||
|
DF(HALT_NONE, "") \
|
||
|
DF(HALT_W, "W") \
|
||
|
DF(HALT_WW, "WW") \
|
||
|
DF(HALT_RGB, "RGB") \
|
||
|
DF(HALT_RGBW, "RGBW") \
|
||
|
DF(HALT_RGBWW, "RGBWW") \
|
||
|
DF(HALT_MAX, "")
|
||
|
|
||
|
typedef enum ha_led_type_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_LED_TYPE
|
||
|
#undef DF
|
||
|
} ha_led_type_t;
|
||
|
|
||
|
char *zh_get_led_type_value_name(ha_led_type_t value);
|
||
|
//***********************************************************************************//
|
||
|
#define HA_SENSOR_TYPE \
|
||
|
DF(HAST_NONE, "") \
|
||
|
DF(HAST_DS18B20, "DS18B20") \
|
||
|
DF(HAST_DHT11, "DHT11") \
|
||
|
DF(HAST_DHT22, "DHT22") \
|
||
|
DF(HAST_GATEWAY, "GATEWAY") \
|
||
|
DF(HAST_WINDOW, "WINDOW") \
|
||
|
DF(HAST_DOOR, "DOOR") \
|
||
|
DF(HAST_LEAKAGE, "LEAKAGE") \
|
||
|
DF(HAST_MAX, "")
|
||
|
|
||
|
typedef enum ha_sensor_type_t
|
||
|
{
|
||
|
#define DF(_value, _name) _value,
|
||
|
HA_SENSOR_TYPE
|
||
|
#undef DF
|
||
|
} ha_sensor_type_t;
|
||
|
|
||
|
char *zh_get_sensor_type_value_name(ha_sensor_type_t value);
|
||
|
//***********************************************************************************//
|
||
|
typedef struct zh_sensor_config_message_t
|
||
|
{
|
||
|
uint8_t unique_id;
|
||
|
ha_sensor_device_class_t sensor_device_class;
|
||
|
char unit_of_measurement[5];
|
||
|
uint8_t suggested_display_precision;
|
||
|
uint16_t expire_after;
|
||
|
bool enabled_by_default;
|
||
|
bool force_update;
|
||
|
uint8_t qos;
|
||
|
bool retain;
|
||
|
} __attribute__((packed)) zh_sensor_config_message_t;
|
||
|
|
||
|
typedef struct zh_sensor_hardware_config_message_t
|
||
|
{
|
||
|
ha_sensor_type_t sensor_type;
|
||
|
uint8_t sensor_pin_1;
|
||
|
uint8_t sensor_pin_2;
|
||
|
uint8_t power_pin;
|
||
|
uint16_t measurement_frequency;
|
||
|
bool battery_power;
|
||
|
} __attribute__((packed)) zh_sensor_hardware_config_message_t;
|
||
|
|
||
|
typedef struct zh_binary_sensor_config_message_t
|
||
|
{
|
||
|
uint8_t unique_id;
|
||
|
ha_binary_sensor_device_class_t binary_sensor_device_class;
|
||
|
ha_on_off_type_t payload_on;
|
||
|
ha_on_off_type_t payload_off;
|
||
|
uint16_t expire_after;
|
||
|
uint16_t off_delay;
|
||
|
bool enabled_by_default;
|
||
|
bool force_update;
|
||
|
uint8_t qos;
|
||
|
bool retain;
|
||
|
} __attribute__((packed)) zh_binary_sensor_config_message_t;
|
||
|
|
||
|
typedef struct zh_led_config_message_t
|
||
|
{
|
||
|
uint8_t unique_id;
|
||
|
ha_led_type_t led_type;
|
||
|
ha_on_off_type_t payload_on;
|
||
|
ha_on_off_type_t payload_off;
|
||
|
bool enabled_by_default;
|
||
|
bool optimistic;
|
||
|
uint8_t qos;
|
||
|
bool retain;
|
||
|
} __attribute__((packed)) zh_led_config_message_t;
|
||
|
|
||
|
typedef struct zh_led_hardware_config_message_t
|
||
|
{
|
||
|
ha_led_type_t led_type;
|
||
|
uint8_t first_white_pin;
|
||
|
uint8_t second_white_pin;
|
||
|
uint8_t red_pin;
|
||
|
uint8_t green_pin;
|
||
|
uint8_t blue_pin;
|
||
|
} __attribute__((packed)) zh_led_hardware_config_message_t;
|
||
|
|
||
|
typedef struct zh_switch_config_message_t
|
||
|
{
|
||
|
uint8_t unique_id;
|
||
|
ha_switch_device_class_t device_class;
|
||
|
ha_on_off_type_t payload_on;
|
||
|
ha_on_off_type_t payload_off;
|
||
|
bool enabled_by_default;
|
||
|
bool optimistic;
|
||
|
uint8_t qos;
|
||
|
bool retain;
|
||
|
} __attribute__((packed)) zh_switch_config_message_t;
|
||
|
|
||
|
typedef struct zh_switch_hardware_config_message_t
|
||
|
{
|
||
|
uint8_t relay_pin;
|
||
|
bool relay_on_level;
|
||
|
uint8_t led_pin;
|
||
|
bool led_on_level;
|
||
|
uint8_t int_button_pin;
|
||
|
bool int_button_on_level;
|
||
|
uint8_t ext_button_pin;
|
||
|
bool ext_button_on_level;
|
||
|
uint8_t sensor_pin;
|
||
|
ha_sensor_type_t sensor_type;
|
||
|
} __attribute__((packed)) zh_switch_hardware_config_message_t;
|
||
|
//***********************************************************************************//
|
||
|
typedef struct zh_sensor_status_message_t
|
||
|
{
|
||
|
ha_sensor_type_t sensor_type;
|
||
|
float temperature;
|
||
|
float humidity;
|
||
|
float pressure;
|
||
|
float quality;
|
||
|
float voltage;
|
||
|
float reserved_1; // Reserved for future development.
|
||
|
float reserved_2; // Reserved for future development.
|
||
|
float reserved_3; // Reserved for future development.
|
||
|
float reserved_4; // Reserved for future development.
|
||
|
float reserved_5; // Reserved for future development.
|
||
|
} __attribute__((packed)) zh_sensor_status_message_t;
|
||
|
|
||
|
typedef struct zh_binary_sensor_status_message_t
|
||
|
{
|
||
|
ha_sensor_type_t sensor_type;
|
||
|
ha_on_off_type_t connect;
|
||
|
ha_on_off_type_t open;
|
||
|
ha_on_off_type_t battery;
|
||
|
ha_on_off_type_t leakage;
|
||
|
ha_on_off_type_t reserved_1; // Reserved for future development.
|
||
|
ha_on_off_type_t reserved_2; // Reserved for future development.
|
||
|
ha_on_off_type_t reserved_3; // Reserved for future development.
|
||
|
ha_on_off_type_t reserved_4; // Reserved for future development.
|
||
|
ha_on_off_type_t reserved_5; // Reserved for future development.
|
||
|
} __attribute__((packed)) zh_binary_sensor_status_message_t;
|
||
|
|
||
|
typedef struct zh_led_status_message_t
|
||
|
{
|
||
|
ha_on_off_type_t status;
|
||
|
uint8_t brightness;
|
||
|
uint16_t temperature;
|
||
|
uint8_t red;
|
||
|
uint8_t green;
|
||
|
uint8_t blue;
|
||
|
ha_led_effect_type_t effect; // Reserved for future development.
|
||
|
} __attribute__((packed)) zh_led_status_message_t;
|
||
|
|
||
|
typedef struct zh_switch_status_message_t
|
||
|
{
|
||
|
ha_on_off_type_t status;
|
||
|
} __attribute__((packed)) zh_switch_status_message_t;
|
||
|
//***********************************************************************************//
|
||
|
typedef struct zh_attributes_message_t
|
||
|
{
|
||
|
ha_chip_type_t chip_type;
|
||
|
ha_sensor_type_t sensor_type;
|
||
|
char flash_size[5];
|
||
|
uint8_t cpu_frequency;
|
||
|
uint32_t heap_size;
|
||
|
uint32_t min_heap_size;
|
||
|
uint8_t reset_reason;
|
||
|
char app_name[32];
|
||
|
char app_version[32];
|
||
|
uint32_t uptime;
|
||
|
} __attribute__((packed)) zh_attributes_message_t;
|
||
|
|
||
|
typedef struct zh_keep_alive_message_t
|
||
|
{
|
||
|
bool online_status;
|
||
|
uint8_t message_frequency;
|
||
|
} __attribute__((packed)) zh_keep_alive_message_t;
|
||
|
|
||
|
typedef union zh_config_message_t
|
||
|
{
|
||
|
zh_binary_sensor_config_message_t binary_sensor_config_message;
|
||
|
zh_sensor_config_message_t sensor_config_message;
|
||
|
zh_sensor_hardware_config_message_t sensor_hardware_config_message;
|
||
|
zh_led_config_message_t led_config_message;
|
||
|
zh_led_hardware_config_message_t led_hardware_config_message;
|
||
|
zh_switch_config_message_t switch_config_message;
|
||
|
zh_switch_hardware_config_message_t switch_hardware_config_message;
|
||
|
} __attribute__((packed)) zh_config_message_t;
|
||
|
|
||
|
typedef union zh_status_message_t
|
||
|
{
|
||
|
zh_binary_sensor_status_message_t binary_sensor_status_message;
|
||
|
zh_sensor_status_message_t sensor_status_message;
|
||
|
zh_led_status_message_t led_status_message;
|
||
|
zh_switch_status_message_t switch_status_message;
|
||
|
} __attribute__((packed)) zh_status_message_t;
|
||
|
|
||
|
typedef struct zh_espnow_ota_message_t
|
||
|
{
|
||
|
ha_chip_type_t chip_type;
|
||
|
char app_name[32];
|
||
|
char app_version[32];
|
||
|
uint16_t part;
|
||
|
uint8_t data_len;
|
||
|
uint8_t data[128];
|
||
|
} __attribute__((packed)) zh_espnow_ota_message_t;
|
||
|
|
||
|
typedef struct zh_espnow_ota_data_t
|
||
|
{
|
||
|
ha_chip_type_t chip_type;
|
||
|
zh_device_type_t device_type;
|
||
|
char app_name[32];
|
||
|
char app_version[32];
|
||
|
uint8_t mac_addr[6];
|
||
|
} __attribute__((packed)) zh_espnow_ota_data_t;
|
||
|
|
||
|
typedef union zh_payload_data_t
|
||
|
{
|
||
|
zh_attributes_message_t attributes_message;
|
||
|
zh_keep_alive_message_t keep_alive_message;
|
||
|
zh_config_message_t config_message;
|
||
|
zh_status_message_t status_message;
|
||
|
zh_espnow_ota_message_t espnow_ota_message;
|
||
|
} __attribute__((packed)) zh_payload_data_t;
|
||
|
|
||
|
typedef struct zh_espnow_data_t
|
||
|
{
|
||
|
zh_device_type_t device_type;
|
||
|
zh_payload_type_t payload_type;
|
||
|
zh_payload_data_t payload_data;
|
||
|
} __attribute__((packed)) zh_espnow_data_t;
|