Merge branch 'master' into patch-1
This commit is contained in:
commit
0bdad7f2a3
8 changed files with 172 additions and 9 deletions
|
|
@ -119,10 +119,10 @@ espHsvColor_t espRgbColorToHsvColor(espRgbColor_t rgb) {
|
|||
}
|
||||
|
||||
espRgbColor_t espXYColorToRgbColor(uint8_t Level, espXyColor_t xy) {
|
||||
return espXYToRgbColor(Level, xy.x, xy.y);
|
||||
return espXYToRgbColor(Level, xy.x, xy.y, true);
|
||||
}
|
||||
|
||||
espRgbColor_t espXYToRgbColor(uint8_t Level, uint16_t current_X, uint16_t current_Y) {
|
||||
espRgbColor_t espXYToRgbColor(uint8_t Level, uint16_t current_X, uint16_t current_Y, bool addXYZScaling) {
|
||||
// convert xyY color space to RGB
|
||||
|
||||
// https://www.easyrgb.com/en/math.php
|
||||
|
|
@ -156,9 +156,11 @@ espRgbColor_t espXYToRgbColor(uint8_t Level, uint16_t current_X, uint16_t curren
|
|||
// X, Y and Z input refer to a D65/2° standard illuminant.
|
||||
// sR, sG and sB (standard RGB) output range = 0 ÷ 255
|
||||
// convert XYZ to RGB - CIE XYZ to sRGB
|
||||
if (addXYZScaling) {
|
||||
X = X / 100.0f;
|
||||
Y = Y / 100.0f;
|
||||
Z = Z / 100.0f;
|
||||
}
|
||||
|
||||
r = (X * 3.2406f) - (Y * 1.5372f) - (Z * 0.4986f);
|
||||
g = -(X * 0.9689f) + (Y * 1.8758f) + (Z * 0.0415f);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
@ -49,7 +50,7 @@ typedef struct HsvColor_t espHsvColor_t;
|
|||
typedef struct XyColor_t espXyColor_t;
|
||||
typedef struct CtColor_t espCtColor_t;
|
||||
|
||||
espRgbColor_t espXYToRgbColor(uint8_t Level, uint16_t current_X, uint16_t current_Y);
|
||||
espRgbColor_t espXYToRgbColor(uint8_t Level, uint16_t current_X, uint16_t current_Y, bool addXYZScaling);
|
||||
espRgbColor_t espXYColorToRgb(uint8_t Level, espXyColor_t xy);
|
||||
espXyColor_t espRgbColorToXYColor(espRgbColor_t rgb);
|
||||
espXyColor_t espRgbToXYColor(uint8_t r, uint8_t g, uint8_t b);
|
||||
|
|
|
|||
133
docs/en/zigbee/ep_fan_control.rst
Normal file
133
docs/en/zigbee/ep_fan_control.rst
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
################
|
||||
ZigbeeFanControl
|
||||
################
|
||||
|
||||
About
|
||||
-----
|
||||
|
||||
The ``ZigbeeFanControl`` class provides a Zigbee endpoint for controlling fan devices in a Home Automation (HA) network. This endpoint implements the Fan Control cluster and allows for controlling fan modes and sequences.
|
||||
|
||||
**Features:**
|
||||
* Fan mode control (OFF, LOW, MEDIUM, HIGH, ON, AUTO, SMART)
|
||||
* Fan mode sequence configuration
|
||||
* State change callbacks
|
||||
* Zigbee HA standard compliance
|
||||
|
||||
**Use Cases:**
|
||||
* Smart ceiling fans
|
||||
* HVAC system fans
|
||||
* Exhaust fans
|
||||
* Any device requiring fan speed control
|
||||
|
||||
API Reference
|
||||
-------------
|
||||
|
||||
Constructor
|
||||
***********
|
||||
|
||||
ZigbeeFanControl
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
Creates a new Zigbee fan control endpoint.
|
||||
|
||||
.. code-block:: arduino
|
||||
|
||||
ZigbeeFanControl(uint8_t endpoint);
|
||||
|
||||
* ``endpoint`` - Endpoint number (1-254)
|
||||
|
||||
Fan Mode Enums
|
||||
**************
|
||||
|
||||
ZigbeeFanMode
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
Available fan modes for controlling the fan speed and operation.
|
||||
|
||||
.. code-block:: arduino
|
||||
|
||||
enum ZigbeeFanMode {
|
||||
FAN_MODE_OFF, // Fan is off
|
||||
FAN_MODE_LOW, // Low speed
|
||||
FAN_MODE_MEDIUM, // Medium speed
|
||||
FAN_MODE_HIGH, // High speed
|
||||
FAN_MODE_ON, // Fan is on (full speed)
|
||||
FAN_MODE_AUTO, // Automatic mode
|
||||
FAN_MODE_SMART, // Smart mode
|
||||
};
|
||||
|
||||
ZigbeeFanModeSequence
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Available fan mode sequences that define which modes are available for the fan.
|
||||
|
||||
.. code-block:: arduino
|
||||
|
||||
enum ZigbeeFanModeSequence {
|
||||
FAN_MODE_SEQUENCE_LOW_MED_HIGH, // Low -> Medium -> High
|
||||
FAN_MODE_SEQUENCE_LOW_HIGH, // Low -> High
|
||||
FAN_MODE_SEQUENCE_LOW_MED_HIGH_AUTO, // Low -> Medium -> High -> Auto
|
||||
FAN_MODE_SEQUENCE_LOW_HIGH_AUTO, // Low -> High -> Auto
|
||||
FAN_MODE_SEQUENCE_ON_AUTO, // On -> Auto
|
||||
};
|
||||
|
||||
API Methods
|
||||
***********
|
||||
|
||||
setFanModeSequence
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Sets the fan mode sequence and initializes the fan control.
|
||||
|
||||
.. code-block:: arduino
|
||||
|
||||
bool setFanModeSequence(ZigbeeFanModeSequence sequence);
|
||||
|
||||
* ``sequence`` - The fan mode sequence to set
|
||||
|
||||
This function will return ``true`` if successful, ``false`` otherwise.
|
||||
|
||||
getFanMode
|
||||
^^^^^^^^^^
|
||||
|
||||
Gets the current fan mode.
|
||||
|
||||
.. code-block:: arduino
|
||||
|
||||
ZigbeeFanMode getFanMode();
|
||||
|
||||
This function will return current fan mode.
|
||||
|
||||
getFanModeSequence
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Gets the current fan mode sequence.
|
||||
|
||||
.. code-block:: arduino
|
||||
|
||||
ZigbeeFanModeSequence getFanModeSequence();
|
||||
|
||||
This function will return current fan mode sequence.
|
||||
|
||||
Event Handling
|
||||
**************
|
||||
|
||||
onFanModeChange
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
Sets a callback function to be called when the fan mode changes.
|
||||
|
||||
.. code-block:: arduino
|
||||
|
||||
void onFanModeChange(void (*callback)(ZigbeeFanMode mode));
|
||||
|
||||
* ``callback`` - Function to call when fan mode changes
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
Fan Control Implementation
|
||||
**************************
|
||||
|
||||
.. literalinclude:: ../../../libraries/Zigbee/examples/Zigbee_Fan_Control/Zigbee_Fan_Control.ino
|
||||
:language: arduino
|
||||
|
|
@ -345,6 +345,19 @@ Performs a factory reset, clearing all network settings.
|
|||
|
||||
* ``restart`` - ``true`` to restart after reset (default: ``true``)
|
||||
|
||||
onGlobalDefaultResponse
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Sets a global callback for default response messages.
|
||||
|
||||
.. code-block:: arduino
|
||||
|
||||
void onGlobalDefaultResponse(void (*callback)(zb_cmd_type_t resp_to_cmd, esp_zb_zcl_status_t status, uint8_t endpoint, uint16_t cluster));
|
||||
|
||||
* ``callback`` - Function pointer to the callback function
|
||||
|
||||
This callback will be called for all endpoints when a default response is received.
|
||||
|
||||
Utility Functions
|
||||
*****************
|
||||
|
||||
|
|
|
|||
|
|
@ -345,6 +345,19 @@ Sets a callback function for identify events.
|
|||
* ``callback`` - Function to call when identify event occurs
|
||||
* ``time`` - Identify time in seconds
|
||||
|
||||
onDefaultResponse
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
Sets a callback for default response messages for this endpoint.
|
||||
|
||||
.. code-block:: arduino
|
||||
|
||||
void onDefaultResponse(void (*callback)(zb_cmd_type_t resp_to_cmd, esp_zb_zcl_status_t status));
|
||||
|
||||
* ``callback`` - Function pointer to the callback function
|
||||
|
||||
This callback will be called when a default response is received for this specific endpoint.
|
||||
|
||||
Supported Endpoints
|
||||
-------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -76,14 +76,13 @@ void ZigbeeColorDimmableLight::zbAttributeSet(const esp_zb_zcl_set_attr_value_me
|
|||
return;
|
||||
} else {
|
||||
log_w("Received message ignored. Attribute ID: %d not supported for Level Control", message->attribute.id);
|
||||
//TODO: implement more attributes -> includes/zcl/esp_zigbee_zcl_level.h
|
||||
}
|
||||
} else if (message->info.cluster == ESP_ZB_ZCL_CLUSTER_ID_COLOR_CONTROL) {
|
||||
if (message->attribute.id == ESP_ZB_ZCL_ATTR_COLOR_CONTROL_CURRENT_X_ID && message->attribute.data.type == ESP_ZB_ZCL_ATTR_TYPE_U16) {
|
||||
uint16_t light_color_x = (*(uint16_t *)message->attribute.data.value);
|
||||
uint16_t light_color_y = getCurrentColorY();
|
||||
//calculate RGB from XY and call setColor()
|
||||
_current_color = espXYToRgbColor(255, light_color_x, light_color_y); //TODO: Check if level is correct
|
||||
_current_color = espXYToRgbColor(255, light_color_x, light_color_y, false);
|
||||
lightChanged();
|
||||
return;
|
||||
|
||||
|
|
@ -91,7 +90,7 @@ void ZigbeeColorDimmableLight::zbAttributeSet(const esp_zb_zcl_set_attr_value_me
|
|||
uint16_t light_color_x = getCurrentColorX();
|
||||
uint16_t light_color_y = (*(uint16_t *)message->attribute.data.value);
|
||||
//calculate RGB from XY and call setColor()
|
||||
_current_color = espXYToRgbColor(255, light_color_x, light_color_y); //TODO: Check if level is correct
|
||||
_current_color = espXYToRgbColor(255, light_color_x, light_color_y, false);
|
||||
lightChanged();
|
||||
return;
|
||||
} else if (message->attribute.id == ESP_ZB_ZCL_ATTR_COLOR_CONTROL_CURRENT_HUE_ID && message->attribute.data.type == ESP_ZB_ZCL_ATTR_TYPE_U8) {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define Pins_Arduino_h
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define USB_VID 0x303a
|
||||
#define USB_PID 0x1001
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "Arduino.h"
|
||||
#include "pins_arduino.h"
|
||||
|
||||
float getBatteryVoltage() {
|
||||
int analogVolt = analogReadMilliVolts(1);
|
||||
|
|
|
|||
Loading…
Reference in a new issue