Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite3018b6

Browse files
feat(zigbee): Add method to set/get/report analog output (#11431)
* feat(zigbee): Add methot to set,get,report analog output* fix(ci): Update json file for example* fix(zigbee): Add missing keywords* ci(pre-commit): Apply automatic fixes---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parentcae66e6 commite3018b6

File tree

5 files changed

+74
-15
lines changed

5 files changed

+74
-15
lines changed

‎libraries/Zigbee/examples/Zigbee_Analog_Input_Output/Zigbee_Analog_Input_Output.ino

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
* Modified by Pat Clay
2727
*/
2828

29-
#ifndefZIGBEE_MODE_ED
30-
#error "Zigbeeend device mode is not selected in Tools->Zigbee mode"
29+
#ifndefZIGBEE_MODE_ZCZR
30+
#error "Zigbeecoordinator/router device mode is not selected in Tools->Zigbee mode"
3131
#endif
3232

3333
#include"Zigbee.h"
@@ -70,6 +70,7 @@ void setup() {
7070
zbAnalogDevice.addAnalogOutput();
7171
zbAnalogDevice.setAnalogOutputApplication(ESP_ZB_ZCL_AI_RPM_OTHER);
7272
zbAnalogDevice.setAnalogOutputDescription("Fan Speed (RPM)");
73+
zbAnalogDevice.setAnalogOutputResolution(1);
7374

7475
// If analog output cluster is added, set callback function for analog output change
7576
zbAnalogDevice.onAnalogOutputChange(onAnalogOutputChange);
@@ -99,8 +100,8 @@ void setup() {
99100
Zigbee.addEndpoint(&zbAnalogPercent);
100101

101102
Serial.println("Starting Zigbee...");
102-
// When all EPs are registered, start Zigbee inEnd Device mode
103-
if (!Zigbee.begin()) {
103+
// When all EPs are registered, start Zigbee inRouter Device mode
104+
if (!Zigbee.begin(ZIGBEE_ROUTER)) {
104105
Serial.println("Zigbee failed to start!");
105106
Serial.println("Rebooting...");
106107
ESP.restart();
@@ -151,6 +152,9 @@ void loop() {
151152
Zigbee.factoryReset();
152153
}
153154
}
155+
// For demonstration purposes, increment the analog output value by 100
156+
zbAnalogDevice.setAnalogOutput(zbAnalogDevice.getAnalogOutput() +100);
157+
zbAnalogDevice.reportAnalogOutput();
154158
}
155159
delay(100);
156160
}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
{
2-
"fqbn_append":"PartitionScheme=zigbee,ZigbeeMode=ed",
2+
"fqbn_append":"PartitionScheme=zigbee_zczr,ZigbeeMode=zczr",
33
"requires": [
4-
"CONFIG_SOC_IEEE802154_SUPPORTED=y",
54
"CONFIG_ZB_ENABLED=y"
65
]
76
}

‎libraries/Zigbee/keywords.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,21 @@ setSensorTypeKEYWORD2
143143
setCarbonDioxideKEYWORD2
144144

145145
# ZigbeeAnalog
146-
addAnalogValueKEYWORD2
147146
addAnalogInputKEYWORD2
148147
addAnalogOutputKEYWORD2
149148
onAnalogOutputChangeKEYWORD2
150-
setAnalogValueKEYWORD2
151149
setAnalogInputKEYWORD2
150+
setAnalogOutputKEYWORD2
151+
getAnalogOutputKEYWORD2
152152
reportAnalogInputKEYWORD2
153+
reportAnalogOutputKEYWORD2
153154
setAnalogInputReportingKEYWORD2
155+
setAnalogInputApplicationKEYWORD2
156+
setAnalogInputDescriptionKEYWORD2
157+
setAnalogInputResolutionKEYWORD2
158+
setAnalogOutputApplicationKEYWORD2
159+
setAnalogOutputDescriptionKEYWORD2
160+
setAnalogOutputResolutionKEYWORD2
154161

155162
# ZigbeeCarbonDioxideSensor
156163
setCarbonDioxideKEYWORD2

‎libraries/Zigbee/src/ep/ZigbeeAnalog.cpp

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ bool ZigbeeAnalog::setAnalogOutputApplication(uint32_t application_type) {
129129
voidZigbeeAnalog::zbAttributeSet(constesp_zb_zcl_set_attr_value_message_t *message) {
130130
if (message->info.cluster == ESP_ZB_ZCL_CLUSTER_ID_ANALOG_OUTPUT) {
131131
if (message->attribute.id == ESP_ZB_ZCL_ATTR_ANALOG_OUTPUT_PRESENT_VALUE_ID && message->attribute.data.type == ESP_ZB_ZCL_ATTR_TYPE_SINGLE) {
132-
float analog_output = *(float *)message->attribute.data.value;
133-
analogOutputChanged(analog_output);
132+
_output_state = *(float *)message->attribute.data.value;
133+
analogOutputChanged();
134134
}else {
135135
log_w("Received message ignored. Attribute ID: %d not supported for Analog Output", message->attribute.id);
136136
}
@@ -139,9 +139,9 @@ void ZigbeeAnalog::zbAttributeSet(const esp_zb_zcl_set_attr_value_message_t *mes
139139
}
140140
}
141141

142-
voidZigbeeAnalog::analogOutputChanged(float analog_output) {
142+
voidZigbeeAnalog::analogOutputChanged() {
143143
if (_on_analog_output_change) {
144-
_on_analog_output_change(analog_output);
144+
_on_analog_output_change(_output_state);
145145
}else {
146146
log_w("No callback function set for analog output change");
147147
}
@@ -166,6 +166,26 @@ bool ZigbeeAnalog::setAnalogInput(float analog) {
166166
returntrue;
167167
}
168168

169+
boolZigbeeAnalog::setAnalogOutput(float analog) {
170+
esp_zb_zcl_status_t ret = ESP_ZB_ZCL_STATUS_SUCCESS;
171+
_output_state = analog;
172+
analogOutputChanged();
173+
174+
log_v("Updating analog output to %.2f", analog);
175+
/* Update analog output*/
176+
esp_zb_lock_acquire(portMAX_DELAY);
177+
ret =esp_zb_zcl_set_attribute_val(
178+
_endpoint, ESP_ZB_ZCL_CLUSTER_ID_ANALOG_OUTPUT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE, ESP_ZB_ZCL_ATTR_ANALOG_OUTPUT_PRESENT_VALUE_ID, &_output_state,false
179+
);
180+
esp_zb_lock_release();
181+
182+
if (ret != ESP_ZB_ZCL_STATUS_SUCCESS) {
183+
log_e("Failed to set analog output: 0x%x: %s", ret,esp_zb_zcl_status_to_name(ret));
184+
returnfalse;
185+
}
186+
returntrue;
187+
}
188+
169189
boolZigbeeAnalog::reportAnalogInput() {
170190
/* Send report attributes command*/
171191
esp_zb_zcl_report_attr_cmd_t report_attr_cmd;
@@ -187,6 +207,27 @@ bool ZigbeeAnalog::reportAnalogInput() {
187207
returntrue;
188208
}
189209

210+
boolZigbeeAnalog::reportAnalogOutput() {
211+
/* Send report attributes command*/
212+
esp_zb_zcl_report_attr_cmd_t report_attr_cmd;
213+
report_attr_cmd.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
214+
report_attr_cmd.attributeID = ESP_ZB_ZCL_ATTR_ANALOG_OUTPUT_PRESENT_VALUE_ID;
215+
report_attr_cmd.direction = ESP_ZB_ZCL_CMD_DIRECTION_TO_CLI;
216+
report_attr_cmd.clusterID = ESP_ZB_ZCL_CLUSTER_ID_ANALOG_OUTPUT;
217+
report_attr_cmd.zcl_basic_cmd.src_endpoint = _endpoint;
218+
report_attr_cmd.manuf_code = ESP_ZB_ZCL_ATTR_NON_MANUFACTURER_SPECIFIC;
219+
220+
esp_zb_lock_acquire(portMAX_DELAY);
221+
esp_err_t ret =esp_zb_zcl_report_attr_cmd_req(&report_attr_cmd);
222+
esp_zb_lock_release();
223+
if (ret != ESP_OK) {
224+
log_e("Failed to send Analog Output report: 0x%x: %s", ret,esp_err_to_name(ret));
225+
returnfalse;
226+
}
227+
log_v("Analog Output report sent");
228+
returntrue;
229+
}
230+
190231
boolZigbeeAnalog::setAnalogInputReporting(uint16_t min_interval,uint16_t max_interval,float delta) {
191232
esp_zb_zcl_reporting_info_t reporting_info;
192233
memset(&reporting_info,0,sizeof(esp_zb_zcl_reporting_info_t));

‎libraries/Zigbee/src/ep/ZigbeeAnalog.h

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,18 @@ class ZigbeeAnalog : public ZigbeeEP {
4646
_on_analog_output_change = callback;
4747
}
4848

49-
// Set theanalog input value
49+
// Set theAnalog Input/Output value
5050
boolsetAnalogInput(float analog);
51+
boolsetAnalogOutput(float analog);
5152

52-
// Report Analog Input value
53+
// Get the Analog Output value
54+
floatgetAnalogOutput() {
55+
return _output_state;
56+
}
57+
58+
// Report Analog Input/Output
5359
boolreportAnalogInput();
60+
boolreportAnalogOutput();
5461

5562
// Set reporting for Analog Input
5663
boolsetAnalogInputReporting(uint16_t min_interval,uint16_t max_interval,float delta);
@@ -59,9 +66,10 @@ class ZigbeeAnalog : public ZigbeeEP {
5966
voidzbAttributeSet(constesp_zb_zcl_set_attr_value_message_t *message)override;
6067

6168
void (*_on_analog_output_change)(float);
62-
voidanalogOutputChanged(float analog_output);
69+
voidanalogOutputChanged();
6370

6471
uint8_t _analog_clusters;
72+
float _output_state;
6573
};
6674

6775
#endif// CONFIG_ZB_ENABLED

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp