add humidity sensor device type

This commit is contained in:
liyashuai
2023-04-21 18:54:37 +08:00
parent 0b1762e511
commit f6a2f5c5b3
6 changed files with 146 additions and 8 deletions
+33 -3
View File
@@ -1285,13 +1285,13 @@ attribute_t *create_pi_heating_demand(cluster_t *cluster, uint8_t value)
attribute_t *create_hvac_system_type_config(cluster_t *cluster, uint8_t value) attribute_t *create_hvac_system_type_config(cluster_t *cluster, uint8_t value)
{ {
return esp_matter::attribute::create(cluster, Thermostat::Attributes::HVACSystemTypeConfiguration::Id, return esp_matter::attribute::create(cluster, Thermostat::Attributes::HVACSystemTypeConfiguration::Id,
ATTRIBUTE_FLAG_NONVOLATILE | ATTRIBUTE_FLAG_WRITABLE, esp_matter_bitmap8(value)); ATTRIBUTE_FLAG_NONVOLATILE | ATTRIBUTE_FLAG_WRITABLE, esp_matter_bitmap8(value));
} }
attribute_t *create_local_temperature_calibration(cluster_t *cluster, int8_t value) attribute_t *create_local_temperature_calibration(cluster_t *cluster, int8_t value)
{ {
return esp_matter::attribute::create(cluster, Thermostat::Attributes::LocalTemperatureCalibration::Id, return esp_matter::attribute::create(cluster, Thermostat::Attributes::LocalTemperatureCalibration::Id,
ATTRIBUTE_FLAG_NONVOLATILE | ATTRIBUTE_FLAG_WRITABLE, esp_matter_int8(value)); ATTRIBUTE_FLAG_NONVOLATILE | ATTRIBUTE_FLAG_WRITABLE, esp_matter_int8(value));
} }
@@ -1414,7 +1414,7 @@ attribute_t *create_temperature_setpoint_hold(cluster_t *cluster, uint8_t value)
attribute_t *create_temperature_setpoint_hold_duration(cluster_t *cluster, nullable<uint16_t> value) attribute_t *create_temperature_setpoint_hold_duration(cluster_t *cluster, nullable<uint16_t> value)
{ {
return esp_matter::attribute::create(cluster, Thermostat::Attributes::TemperatureSetpointHoldDuration::Id, return esp_matter::attribute::create(cluster, Thermostat::Attributes::TemperatureSetpointHoldDuration::Id,
ATTRIBUTE_FLAG_NULLABLE | ATTRIBUTE_FLAG_NONVOLATILE | ATTRIBUTE_FLAG_WRITABLE, ATTRIBUTE_FLAG_NULLABLE | ATTRIBUTE_FLAG_NONVOLATILE | ATTRIBUTE_FLAG_WRITABLE,
esp_matter_nullable_uint16(value)); esp_matter_nullable_uint16(value));
} }
@@ -1783,6 +1783,36 @@ attribute_t *create_temperature_max_measured_value(cluster_t *cluster, nullable<
} /* attribute */ } /* attribute */
} /* temperature_measurement */ } /* temperature_measurement */
namespace relative_humidity_measurement {
namespace attribute {
attribute_t *create_relative_humidity_measured_value(cluster_t *cluster, nullable<uint16_t> value)
{
return esp_matter::attribute::create(cluster, RelativeHumidityMeasurement::Attributes::MeasuredValue::Id,
ATTRIBUTE_FLAG_NULLABLE, esp_matter_nullable_uint16(value));
}
attribute_t *create_relative_humidity_min_measured_value(cluster_t *cluster, nullable<uint16_t> value)
{
return esp_matter::attribute::create(cluster, RelativeHumidityMeasurement::Attributes::MinMeasuredValue::Id,
ATTRIBUTE_FLAG_NULLABLE, esp_matter_nullable_uint16(value));
}
attribute_t *create_relative_humidity_max_measured_value(cluster_t *cluster, nullable<uint16_t> value)
{
return esp_matter::attribute::create(cluster, RelativeHumidityMeasurement::Attributes::MaxMeasuredValue::Id,
ATTRIBUTE_FLAG_NULLABLE, esp_matter_nullable_uint16(value));
}
attribute_t *create_relative_humidity_tolerance(cluster_t *cluster, nullable<uint16_t> value)
{
return esp_matter::attribute::create(cluster, RelativeHumidityMeasurement::Attributes::Tolerance::Id,
ATTRIBUTE_FLAG_NULLABLE, esp_matter_nullable_uint16(value));
}
} /* attribute */
} /* relative_humidity_measurement */
namespace occupancy_sensing { namespace occupancy_sensing {
namespace attribute { namespace attribute {
@@ -424,6 +424,15 @@ attribute_t *create_temperature_max_measured_value(cluster_t *cluster, nullable<
} /* attribute */ } /* attribute */
} /* temperature_measurement */ } /* temperature_measurement */
namespace relative_humidity_measurement {
namespace attribute {
attribute_t *create_relative_humidity_measured_value(cluster_t *cluster, nullable<uint16_t> value);
attribute_t *create_relative_humidity_min_measured_value(cluster_t *cluster, nullable<uint16_t> value);
attribute_t *create_relative_humidity_max_measured_value(cluster_t *cluster, nullable<uint16_t> value);
attribute_t *create_relative_humidity_tolerance(cluster_t *cluster, nullable<uint16_t> value);
} /* attribute */
} /* relative_humidity_measurement */
namespace occupancy_sensing { namespace occupancy_sensing {
namespace attribute { namespace attribute {
attribute_t *create_occupancy(cluster_t *cluster, uint8_t value); attribute_t *create_occupancy(cluster_t *cluster, uint8_t value);
+43 -3
View File
@@ -1483,6 +1483,46 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
} }
} /* temperature_measurement */ } /* temperature_measurement */
namespace relative_humidity_measurement {
const function_generic_t *function_list = NULL;
const int function_flags = CLUSTER_FLAG_NONE;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
{
cluster_t *cluster = cluster::create(endpoint, RelativeHumidityMeasurement::Id, flags);
if (!cluster) {
ESP_LOGE(TAG, "Could not create cluster");
return NULL;
}
if (flags & CLUSTER_FLAG_SERVER) {
set_plugin_server_init_callback(cluster, MatterRelativeHumidityMeasurementPluginServerInitCallback);
add_function_list(cluster, function_list, function_flags);
}
if (flags & CLUSTER_FLAG_CLIENT) {
set_plugin_client_init_callback(cluster, MatterRelativeHumidityMeasurementPluginClientInitCallback);
create_default_binding_cluster(endpoint);
}
if (flags & CLUSTER_FLAG_SERVER) {
/* Attributes managed internally */
global::attribute::create_feature_map(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_relative_humidity_measured_value(cluster, config->measured_value);
attribute::create_relative_humidity_min_measured_value(cluster, config->min_measured_value);
attribute::create_relative_humidity_max_measured_value(cluster, config->max_measured_value);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
}
return cluster;
}
} /* relative_humidity_measurement */
namespace occupancy_sensing { namespace occupancy_sensing {
const function_generic_t *function_list = NULL; const function_generic_t *function_list = NULL;
const int function_flags = CLUSTER_FLAG_NONE; const int function_flags = CLUSTER_FLAG_NONE;
@@ -1789,11 +1829,11 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
set_plugin_client_init_callback(cluster, MatterPumpConfigurationAndControlPluginClientInitCallback); set_plugin_client_init_callback(cluster, MatterPumpConfigurationAndControlPluginClientInitCallback);
create_default_binding_cluster(endpoint); create_default_binding_cluster(endpoint);
} }
if (flags & CLUSTER_FLAG_SERVER) { if (flags & CLUSTER_FLAG_SERVER) {
/* Attributes managed internally */ /* Attributes managed internally */
global::attribute::create_feature_map(cluster, 0); global::attribute::create_feature_map(cluster, 0);
/** Attributes not managed internally **/ /** Attributes not managed internally **/
if (config) { if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision); global::attribute::create_cluster_revision(cluster, config->cluster_revision);
@@ -1808,7 +1848,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes."); ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
} }
} }
return cluster; return cluster;
} }
} /* pump_configuration_and_control */ } /* pump_configuration_and_control */
@@ -354,6 +354,18 @@ typedef struct config {
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags); cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* temperature_measurement */ } /* temperature_measurement */
namespace relative_humidity_measurement {
typedef struct config {
uint16_t cluster_revision;
nullable<uint16_t> measured_value;
nullable<uint16_t> min_measured_value;
nullable<uint16_t> max_measured_value;
config() : cluster_revision(3), measured_value(), min_measured_value(0), max_measured_value(10000) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* relative_humidity_measurement */
namespace occupancy_sensing { namespace occupancy_sensing {
typedef struct config { typedef struct config {
uint16_t cluster_revision; uint16_t cluster_revision;
+35 -2
View File
@@ -676,6 +676,39 @@ endpoint_t *add(endpoint_t *endpoint, config_t *config)
} }
} /* temperature_sensor */ } /* temperature_sensor */
namespace humidity_sensor {
uint32_t get_device_type_id()
{
return ESP_MATTER_HUMIDITY_SENSOR_DEVICE_TYPE_ID;
}
uint8_t get_device_type_version()
{
return ESP_MATTER_HUMIDITY_SENSOR_DEVICE_TYPE_VERSION;
}
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data)
{
endpoint_t *endpoint = endpoint::create(node, flags, priv_data);
return add(endpoint, config);
}
endpoint_t *add(endpoint_t *endpoint, config_t *config)
{
if (!endpoint) {
ESP_LOGE(TAG, "Endpoint cannot be NULL");
return NULL;
}
add_device_type(endpoint, get_device_type_id(), get_device_type_version());
descriptor::create(endpoint, CLUSTER_FLAG_SERVER);
identify::create(endpoint, &(config->identify), CLUSTER_FLAG_SERVER);
relative_humidity_measurement::create(endpoint, &(config->relative_humidity_measurement), CLUSTER_FLAG_SERVER);
return endpoint;
}
} /* humidity_sensor */
namespace occupancy_sensor { namespace occupancy_sensor {
uint32_t get_device_type_id() uint32_t get_device_type_id()
{ {
@@ -866,12 +899,12 @@ endpoint_t *add(endpoint_t *endpoint, config_t *config)
return NULL; return NULL;
} }
add_device_type(endpoint, get_device_type_id(), get_device_type_version()); add_device_type(endpoint, get_device_type_id(), get_device_type_version());
identify::create(endpoint, &(config->identify), CLUSTER_FLAG_SERVER); identify::create(endpoint, &(config->identify), CLUSTER_FLAG_SERVER);
descriptor::create(endpoint, CLUSTER_FLAG_SERVER); descriptor::create(endpoint, CLUSTER_FLAG_SERVER);
on_off::create(endpoint, &(config->on_off), CLUSTER_FLAG_SERVER, ESP_MATTER_NONE_FEATURE_ID); on_off::create(endpoint, &(config->on_off), CLUSTER_FLAG_SERVER, ESP_MATTER_NONE_FEATURE_ID);
pump_configuration_and_control::create(endpoint, &(config->pump_configuration_and_control), CLUSTER_FLAG_SERVER); pump_configuration_and_control::create(endpoint, &(config->pump_configuration_and_control), CLUSTER_FLAG_SERVER);
return endpoint; return endpoint;
} }
} /** pump **/ } /** pump **/
@@ -61,6 +61,8 @@
#define ESP_MATTER_PRESSURE_SENSOR_DEVICE_TYPE_VERSION 2 #define ESP_MATTER_PRESSURE_SENSOR_DEVICE_TYPE_VERSION 2
#define ESP_MATTER_FLOW_SENSOR_DEVICE_TYPE_ID 0x0306 #define ESP_MATTER_FLOW_SENSOR_DEVICE_TYPE_ID 0x0306
#define ESP_MATTER_FLOW_SENSOR_DEVICE_TYPE_VERSION 2 #define ESP_MATTER_FLOW_SENSOR_DEVICE_TYPE_VERSION 2
#define ESP_MATTER_HUMIDITY_SENSOR_DEVICE_TYPE_ID 0x0307
#define ESP_MATTER_HUMIDITY_SENSOR_DEVICE_TYPE_VERSION 2
#define ESP_MATTER_FAN_DEVICE_TYPE_ID 0x002B #define ESP_MATTER_FAN_DEVICE_TYPE_ID 0x002B
#define ESP_MATTER_FAN_DEVICE_TYPE_VERSION 1 #define ESP_MATTER_FAN_DEVICE_TYPE_VERSION 1
@@ -325,6 +327,18 @@ endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_dat
endpoint_t *add(endpoint_t *endpoint, config_t *config); endpoint_t *add(endpoint_t *endpoint, config_t *config);
} /* temperature_sensor */ } /* temperature_sensor */
namespace humidity_sensor {
typedef struct config {
cluster::identify::config_t identify;
cluster::relative_humidity_measurement::config_t relative_humidity_measurement;
} config_t;
uint32_t get_device_type_id();
uint8_t get_device_type_version();
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data);
endpoint_t *add(endpoint_t *endpoint, config_t *config);
} /* humidity_sensor */
namespace occupancy_sensor { namespace occupancy_sensor {
typedef struct config { typedef struct config {
cluster::identify::config_t identify; cluster::identify::config_t identify;