Skip to content

Commit

Permalink
Merge pull request #34 from slacky1965/development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
slacky1965 authored Dec 23, 2024
2 parents 3ab5f4f + 3ce360d commit 9f8a020
Show file tree
Hide file tree
Showing 25 changed files with 424 additions and 34 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"_TZE204_aoclfnxz"
"_TZE204_edl8pz1k"
"_TZE204_tagezcph"
"_TZE204_xyugziqv"

<img src="https://raw.githubusercontent.com/slacky1965/tuya_thermostat_zrd/refs/heads/main/doc/images/TYBAC-006.png"/>

Expand Down Expand Up @@ -125,7 +126,7 @@ P.S. В реальной работе не проверялось, требуе

- [@immortal_serg](https://t.me/immortal_serg) за предоставленный термостат _TZE204_edl8pz1k.

- [@chernyshevruslan](https://t.me/chernyshevruslan) за предоставленные термостаты _TZE204_tagezcph в двух разных исполнениях.
- [@chernyshevruslan](https://t.me/chernyshevruslan) за предоставленные термостаты _TZE204_tagezcph в двух разных исполнениях и _TZE204_xyugziqv.

- [https://github.com/doctor64](https://github.com/doctor64) [@doctor_64](https://t.me/doctor_64) - за желание всегда помочь и направить в правильное русло.

Expand Down Expand Up @@ -162,5 +163,9 @@ P.S. В реальной работе не проверялось, требуе
- Отредактированы внутренние имена переменных, связанных с номером модели.
> Раньше счет шел от 0. Сейчас от 1. Сделано просто для удобства, чтобы самому не запустаться. Например, раньше было type0, теперь это type1 и т.д.
- Обновлены конверторы.
- 1.0.06
- Добавлен термостат с сигнатурой `_TZE204_xyugziqv`
- Увеличен буфер uart до 512 байт. Последний термостат присылает за один раз очень много пакетов.
- Обновлены конверторы

Binary file modified bin/1141-d3a3-1111114b-tuya_thermostat_zrd.zigbee
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added doc/images/model1-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/model3_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/model3_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/model4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions doc/thermostats/tuya_thermostat_r01/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@

"_TZE204_u9bfwha0"
"_TZE204_aoclfnxz"

###Внешний вид.

<img src="https://raw.githubusercontent.com/slacky1965/tuya_thermostat_zrd/refs/heads/main/doc/images/model1-2.png"/>
1 change: 1 addition & 0 deletions project.mk
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ $(OUT_PATH)/$(SRC_PATH)/app_thermostat.o \
$(OUT_PATH)/$(SRC_PATH)/app_thermostat_model1.o \
$(OUT_PATH)/$(SRC_PATH)/app_thermostat_model2.o \
$(OUT_PATH)/$(SRC_PATH)/app_thermostat_model3.o \
$(OUT_PATH)/$(SRC_PATH)/app_thermostat_model4.o \
$(OUT_PATH)/$(SRC_PATH)/app_reporting.o \
$(OUT_PATH)/$(SRC_PATH)/app_endpoint_cfg.o \
$(OUT_PATH)/$(SRC_PATH)/app_utility.o \
Expand Down
2 changes: 1 addition & 1 deletion src/app_thermostat_model1.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
* id, type, len, divisor, remote_commands_functionCb, local_commands_functionCb
*/

data_point_st_t data_point_model0[DP_IDX_MAXNUM] = {
data_point_st_t data_point_model1[DP_IDX_MAXNUM] = {
{DP_TYPE1_ID_01, DP_BOOL, 1, 1, remote_cmd_sys_mode_1, local_cmd_onoff_state_1}, // on off
{DP_TYPE1_ID_18, DP_VAL, 4, 10, NULL, local_cmd_inner_sensor_1}, // local temperature
{DP_TYPE1_ID_10, DP_VAL, 4, 1, remote_cmd_heating_set_1, local_cmd_heating_set_1}, // heat setpoint
Expand Down
2 changes: 1 addition & 1 deletion src/app_thermostat_model2.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*
* id, type, len, divisor, remote_commands_functionCb, local_commands_functionCb
*/
data_point_st_t data_point_model1[DP_IDX_MAXNUM] = {
data_point_st_t data_point_model2[DP_IDX_MAXNUM] = {
{DP_TYPE2_ID_01, DP_BOOL, 1, 1, remote_cmd_sys_mode_2, local_cmd_onoff_state_2}, // onoff
{DP_TYPE2_ID_18, DP_VAL, 4, 10, NULL, local_cmd_inner_sensor_2}, // local temperature
{DP_TYPE2_ID_10, DP_VAL, 4, 10, remote_cmd_heating_set_2, local_cmd_heating_set_2}, // heat setpoint
Expand Down
4 changes: 3 additions & 1 deletion src/app_thermostat_model3.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*
* id, type, len, divisor, remote_commands_functionCb, local_commands_functionCb
*/
data_point_st_t data_point_model2[DP_IDX_MAXNUM] = {
data_point_st_t data_point_model3[DP_IDX_MAXNUM] = {
{DP_TYPE3_ID_01, DP_BOOL, 1, 1, remote_cmd_sys_mode_3, local_cmd_onoff_state_3}, // onoff
{DP_TYPE3_ID_18, DP_VAL, 4, 10, NULL, local_cmd_inner_sensor_3}, // local temperature
{DP_TYPE3_ID_10, DP_VAL, 4, 10, remote_cmd_heating_set_3, local_cmd_heating_set_3}, // heat setpoint
Expand Down Expand Up @@ -92,6 +92,8 @@ void local_cmd_level_night_3(void *args) {
}

/*
*
* For models "tagezcph"
*
* Functions for remote commands. Zegbee -> ZT3L -> MCU
*
Expand Down
96 changes: 96 additions & 0 deletions src/app_thermostat_model4.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#include "app_main.h"

/* data point for manufacturer id -
* "xyugziqv"
*
* id, type, len, divisor, remote_commands_functionCb, local_commands_functionCb
*/
data_point_st_t data_point_model4[DP_IDX_MAXNUM] = {
{DP_TYPE4_ID_01, DP_BOOL, 1, 1, remote_cmd_sys_mode_4, local_cmd_onoff_state_4}, // onoff
{DP_TYPE4_ID_18, DP_VAL, 4, 10, NULL, local_cmd_inner_sensor_4}, // local temperature
{DP_TYPE4_ID_10, DP_VAL, 4, 10, remote_cmd_heating_set_4, local_cmd_heating_set_4}, // heat setpoint
{DP_TYPE4_ID_1A, DP_VAL, 4, 10, remote_cmd_min_setpoint_4, local_cmd_min_setpoint_4}, // min heat setpoint
{DP_TYPE4_ID_13, DP_VAL, 4, 10, remote_cmd_max_setpoint_4, local_cmd_max_setpoint_4}, // max heat setpoint
{DP_TYPE4_ID_67, DP_VAL, 4, 1, remote_cmd_deadband_4, local_cmd_deadband_4}, // hysteresis
{DP_TYPE4_ID_1B, DP_VAL, 4, 1, remote_cmd_temp_calibration_4, local_cmd_temp_calibration_4}, // local temperature calibration
{DP_TYPE4_ID_24, DP_ENUM, 1, 1, NULL, local_cmd_set_run_state_4}, // 0x00 - heat, 0x01 - idle
{DP_TYPE4_ID_66, DP_ENUM, 1, 1, remote_cmd_sensor_used_4, local_cmd_sensor_used_4}, // sensor IN/AL/OU
{DP_TYPE4_ID_02, DP_ENUM, 1, 1, remote_cmd_oper_mode_4, local_cmd_oper_mode_4}, // manual (setpoint) / programming (schedule)
{DP_TYPE4_ID_28, DP_BOOL, 1, 1, remote_cmd_keylock_4, local_cmd_keylock_4}, // lock / unlock keys (child lock)
{DP_TYPE4_ID_00, DP_RAW, 0, 1, remote_cmd_set_schedule_4, NULL}, // schedule
{DP_TYPE4_ID_00, DP_RAW, 0, 0, NULL, NULL}, // unknown
{DP_TYPE4_ID_71, DP_VAL, 4, 10, NULL, local_cmd_outdoor_sensor_4}, // temperature of outer sensor
{DP_TYPE4_ID_75, DP_VAL, 4, 10, remote_cmd_frost_protect_4, local_cmd_frost_protect_4}, // frost protected
{DP_TYPE4_ID_74, DP_VAL, 4, 10, remote_cmd_heat_protect_4, local_cmd_heat_protect_4}, // heat protected
{DP_TYPE4_ID_70, DP_RAW, 0x11, 10, NULL, local_cmd_set_schedule_4}, // schedule mon
{DP_TYPE4_ID_6F, DP_RAW, 0x11, 10, NULL, local_cmd_set_schedule_4}, // schedule tue
{DP_TYPE4_ID_6E, DP_RAW, 0x11, 10, NULL, local_cmd_set_schedule_4}, // schedule wed
{DP_TYPE4_ID_6D, DP_RAW, 0x11, 10, NULL, local_cmd_set_schedule_4}, // schedule thu
{DP_TYPE4_ID_6C, DP_RAW, 0x11, 10, NULL, local_cmd_set_schedule_4}, // schedule fri
{DP_TYPE4_ID_6B, DP_RAW, 0x11, 10, NULL, local_cmd_set_schedule_4}, // schedule sat
{DP_TYPE4_ID_6A, DP_RAW, 0x11, 10, NULL, local_cmd_set_schedule_4}, // schedule sun
{DP_TYPE4_ID_73, DP_VAL, 4, 1, remote_cmd_level_4, local_cmd_level_4}, // level brightness of screen
{DP_TYPE4_ID_00, DP_RAW, 0, 0, NULL, NULL}, //
{DP_TYPE4_ID_04, DP_BOOL, 1, 1, remote_cmd_eco_mode_4, local_cmd_eco_mode_4}, // eco mode
{DP_TYPE4_ID_69, DP_VAL, 4, 10, remote_cmd_eco_mode_temp_4, local_cmd_eco_mode_temp_4}, // eco mode's temperature
};

/*
*
* For models "xyugziqv"
*
* Funstions for local commands. MCU -> ZT3L -> Zegbee
*/


/*
*
* For models "xyugziqv"
*
* Functions for remote commands. Zegbee -> ZT3L -> MCU
*
*/

void remote_cmd_level_4(void *args) {

uint8_t *level = (uint8_t*)args;

// printf("remote_cmd_level_day_3(). level: %d\r\n", *level);

if (*level < 0 || *level > 9) return;

zcl_setAttrVal(APP_ENDPOINT1, ZCL_CLUSTER_GEN_LEVEL_CONTROL, ZCL_ATTRID_LEVEL_CURRENT_LEVEL, (uint8_t*)level);


pkt_tuya_t *out_pkt = (pkt_tuya_t*)remote_cmd_pkt_buff;
uint16_t seq_num = get_seq_num();
seq_num++;

set_header_pkt(remote_cmd_pkt_buff, sizeof(remote_cmd_pkt_buff), seq_num, COMMAND04);

out_pkt->len = reverse16(8);
out_pkt->pkt_len++;
out_pkt->pkt_len++;

data_point_t *data_point = (data_point_t*)out_pkt->data;
data_point->dp_id = data_point_model[DP_IDX_LEVEL_A].id;
out_pkt->pkt_len++;
data_point->dp_type = data_point_model[DP_IDX_LEVEL_A].type;
out_pkt->pkt_len++;
data_point->dp_len = (reverse16(4));
out_pkt->pkt_len++;
out_pkt->pkt_len++;
data_point->data[0] = (*level >> 24) & 0xFF;
data_point->data[1] = (*level >> 16) & 0xFF;
data_point->data[2] = (*level >> 8) & 0xFF;
data_point->data[3] = *level & 0xFF;
out_pkt->pkt_len += 4;
data_point->data[4] = checksum((uint8_t*)out_pkt, out_pkt->pkt_len++);
add_cmd_queue(out_pkt, true);

set_seq_num(seq_num);

thermostat_settings_save();
}


27 changes: 21 additions & 6 deletions src/app_tuya_datapoint.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,45 @@

#include "app_main.h"

static const char8_t *tuya_manuf_name0[] = {
static const char8_t *tuya_manuf_name1[] = {
"u9bfwha0",
"aoclfnxz",
// "ztvwu4nk",
// "5toc8efa",
// "ye5jkfsb",
NULL};

static const char8_t *tuya_manuf_name1[] = {
static const char8_t *tuya_manuf_name2[] = {
"edl8pz1k",
NULL};

static const char8_t *tuya_manuf_name2[] = {
static const char8_t *tuya_manuf_name3[] = {
"tagezcph",
NULL};

const char8_t **tuya_manuf_names[] = {tuya_manuf_name0, tuya_manuf_name1, tuya_manuf_name2};
static const char8_t *tuya_manuf_name4[] = {
"xyugziqv",
NULL};

const char8_t **tuya_manuf_names[] = {
tuya_manuf_name1,
tuya_manuf_name2,
tuya_manuf_name3,
tuya_manuf_name4
};

uint8_t manuf_name = MANUF_NAME_1;

data_point_st_t *data_point_model_arr[DP_IDX_MAXNUM] = {data_point_model0, data_point_model1, data_point_model2};
data_point_st_t *data_point_model_arr[DP_IDX_MAXNUM] = {
data_point_model1,
data_point_model2,
data_point_model3,
data_point_model4
};

// Not worked in gcc 4.5.1
//data_point_st_t *data_point_model = data_point_model_arr[MANUF_NAME_1];
data_point_st_t *data_point_model = data_point_model0;
data_point_st_t *data_point_model = data_point_model1;

void data_point_model_init() {

Expand Down
13 changes: 13 additions & 0 deletions src/app_uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ static void print_pkt_inp(uint8_t *data, uint32_t len) {

#if UART_PRINTF_MODE && DEBUG_PKT

#if DEBUG_PKT_FILTER

static uint8_t command = 0;
static uint32_t time_pkt = 0;
pkt_tuya_t *pkt = (pkt_tuya_t*)data;
Expand All @@ -46,17 +48,24 @@ static void print_pkt_inp(uint8_t *data, uint32_t len) {
}
time_pkt = clock_time();
}
#else
printf("inp_pkt ==> 0x");
print_pkt(data, len);
#endif
#endif
}

static void print_pkt_out(uint8_t *data, uint32_t len) {

#if UART_PRINTF_MODE && DEBUG_PKT

#if DEBUG_PKT_FILTER

static uint8_t command = 0;
static uint32_t time_pkt = 0;
pkt_tuya_t *pkt = (pkt_tuya_t*)data;


if (command != pkt->command) {
command = pkt->command;
time_pkt = clock_time();
Expand All @@ -69,6 +78,10 @@ static void print_pkt_out(uint8_t *data, uint32_t len) {
}
time_pkt = clock_time();
}
#else
printf("out_pkt <== 0x");
print_pkt(data, len);
#endif
#endif
}

Expand Down
1 change: 0 additions & 1 deletion src/app_uart_tuya.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,6 @@ static int32_t factory_resetCb(void *arg) {
return -1;
}


void uart_cmd_handler() {

size_t load_size = 0;
Expand Down
1 change: 1 addition & 0 deletions src/include/app_cfg.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ extern "C" {
#define USB_PRINTF_MODE OFF

#define DEBUG_PKT ON
#define DEBUG_PKT_FILTER ON
#define DEBUG_CMD OFF
#define DEBUG_DP OFF
#define DEBUG_TIME OFF
Expand Down
57 changes: 56 additions & 1 deletion src/include/app_thermostat.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,10 @@ typedef struct {
heatMode_t *heatMode;
} schedule_args_model2_t;

extern data_point_st_t data_point_model0[DP_IDX_MAXNUM];
extern data_point_st_t data_point_model1[DP_IDX_MAXNUM];
extern data_point_st_t data_point_model2[DP_IDX_MAXNUM];
extern data_point_st_t data_point_model3[DP_IDX_MAXNUM];
extern data_point_st_t data_point_model4[DP_IDX_MAXNUM];
extern uint8_t remote_cmd_pkt_buff[DATA_MAX_LEN+12];
extern uint8_t zb_modelId_arr[ZB_MODELID_ARR_NUM][ZB_MODELID_FULL_SIZE];

Expand Down Expand Up @@ -148,6 +149,32 @@ void remote_cmd_eco_mode_temp_3(void *args);
void remote_cmd_level_day_3(void *args);
void remote_cmd_level_night_3(void *args);

/*
* remote_cmd for signarure
* "xyugziqv"
*
* model4 - name_4
*/
#define remote_cmd_sys_mode_4 remote_cmd_sys_mode
#define remote_cmd_heating_set_4 remote_cmd_heating_set
#define remote_cmd_temp_calibration_4 remote_cmd_temp_calibration
#define remote_cmd_sensor_used_4 remote_cmd_sensor_used
#define remote_cmd_keylock_4 remote_cmd_keylock
#define remote_cmd_deadband_4 remote_cmd_deadband
#define remote_cmd_min_setpoint_4 remote_cmd_min_setpoint
#define remote_cmd_max_setpoint_4 remote_cmd_max_setpoint

#define remote_cmd_oper_mode_4 remote_cmd_oper_mode_2
#define remote_cmd_frost_protect_4 remote_cmd_frost_protect_2
#define remote_cmd_heat_protect_4 remote_cmd_heat_protect_2
#define remote_cmd_set_schedule_4 remote_cmd_set_schedule_2
#define remote_cmd_get_schedule_4 remote_cmd_get_schedule_2

#define remote_cmd_eco_mode_4 remote_cmd_eco_mode_3
#define remote_cmd_eco_mode_temp_4 remote_cmd_eco_mode_temp_3

void remote_cmd_level_4(void *args);

/*
* common functions local_cmd
*/
Expand Down Expand Up @@ -233,6 +260,34 @@ void local_cmd_eco_mode_temp_3(void *args);
void local_cmd_level_day_3(void *args);
void local_cmd_level_night_3(void *args);


/*
* local_cmd for signarure
* "xyugziqv"
*
* model4 - name_4
*/
#define local_cmd_inner_sensor_4 local_cmd_inner_sensor
#define local_cmd_heating_set_4 local_cmd_heating_set
#define local_cmd_temp_calibration_4 local_cmd_temp_calibration
#define local_cmd_min_setpoint_4 local_cmd_min_setpoint
#define local_cmd_max_setpoint_4 local_cmd_max_setpoint
#define local_cmd_deadband_4 local_cmd_deadband
#define local_cmd_keylock_4 local_cmd_keylock
#define local_cmd_sensor_used_4 local_cmd_sensor_used
#define local_cmd_set_run_state_4 local_cmd_set_run_state
#define local_cmd_onoff_state_4 local_cmd_onoff_state

#define local_cmd_oper_mode_4 local_cmd_oper_mode_2
#define local_cmd_frost_protect_4 local_cmd_frost_protect_2
#define local_cmd_heat_protect_4 local_cmd_heat_protect_2
#define local_cmd_outdoor_sensor_4 local_cmd_outdoor_sensor_2
#define local_cmd_set_schedule_4 local_cmd_set_schedule_2

#define local_cmd_eco_mode_4 local_cmd_eco_mode_3
#define local_cmd_eco_mode_temp_4 local_cmd_eco_mode_temp_3
#define local_cmd_level_4 local_cmd_level_day_3

/*
*
* common function
Expand Down
Loading

0 comments on commit 9f8a020

Please sign in to comment.