37
37
#define BUTTON_PIN 9 // Boot button for C6/H2
38
38
#define THERMOSTAT_ENDPOINT_NUMBER 5
39
39
40
- class MyZigbeeThermostat : public ZigbeeThermostat {
41
- public:
42
- // Constructor that passes parameters to the base class constructor
43
- MyZigbeeThermostat (uint8_t endpoint) : ZigbeeThermostat(endpoint) {}
44
-
45
- // Override virtual functions from ZigbeeThermostat to handle temperature sensor data
46
- void temperatureRead (float temp) override {
47
- if (temperature != temp) {
48
- Serial.printf (" Temperature sensor value changed to: %.2f°C\n " , temp);
49
- temperature = temp;
50
- }
51
- }
52
-
53
- void temperatureMin (float temp) override {
54
- Serial.printf (" Temperature sensor min value: %.2f°C\n " , temp);
55
- min_temperature = temp;
56
- }
57
-
58
- void temperatureMax (float temp) override {
59
- Serial.printf (" Temperature sensor max value: %.2f°C\n " , temp);
60
- max_temperature = temp;
61
- }
62
-
63
- void temperatureTolerance (float tolerance) override {
64
- Serial.printf (" Temperature sensor tolerance: %.2f°C\n " , tolerance);
65
- temp_tolerance = tolerance;
66
- }
67
-
68
- float temperature;
69
- float max_temperature;
70
- float min_temperature;
71
- float temp_tolerance;
72
- };
73
-
74
- MyZigbeeThermostat zbThermostat = MyZigbeeThermostat(THERMOSTAT_ENDPOINT_NUMBER);
40
+ ZigbeeThermostat zbThermostat = ZigbeeThermostat(THERMOSTAT_ENDPOINT_NUMBER);
41
+
42
+ // Save temperature sensor data
43
+ float sensor_temp;
44
+ float sensor_max_temp;
45
+ float sensor_min_temp;
46
+ float sensor_tolerance;
47
+
48
+ /* ***************** Temperature sensor handling *******************/
49
+ void recieveSensorTemp (float temperature) {
50
+ Serial.printf (" Temperature sensor value: %.2f°C\n " , temperature);
51
+ sensor_temp = temperature;
52
+ }
75
53
54
+ void recieveSensorConfig (float min_temp, float max_temp, float tolerance) {
55
+ Serial.printf (" Temperature sensor settings: min %.2f°C, max %.2f°C, tolerance %.2f°C\n " , min_temp, max_temp, tolerance);
56
+ sensor_min_temp = min_temp;
57
+ sensor_max_temp = max_temp;
58
+ sensor_tolerance = tolerance;
59
+ }
76
60
/* ******************** Arduino functions **************************/
77
61
void setup () {
78
-
79
62
Serial.begin (115200 );
80
63
81
64
// Init button switch
82
65
pinMode (BUTTON_PIN, INPUT);
83
66
67
+ // Set callback functions for temperature and configuration recieve
68
+ zbThermostat.onTempRecieve (recieveSensorTemp);
69
+ zbThermostat.onConfigRecieve (recieveSensorConfig);
70
+
84
71
// Optional: set Zigbee device name and model
85
72
zbThermostat.setManufacturerAndModel (" Espressif" , " ZigbeeThermostat" );
86
73
@@ -94,16 +81,16 @@ void setup() {
94
81
Zigbee.begin (ZIGBEE_COORDINATOR);
95
82
96
83
Serial.println (" Waiting for Temperature sensor to bound to the switch" );
84
+
97
85
// Wait for switch to bound to a light:
98
86
while (!zbThermostat.isBound ())
99
87
{
100
88
Serial.printf (" ." );
101
89
delay (500 );
102
90
}
103
91
104
- // Get temperature sensor value to update min and max values
105
- zbThermostat.getTemperature ();
106
-
92
+ // Get temperature sensor configuration
93
+ zbThermostat.getSensorSettings ();
107
94
Serial.println ();
108
95
}
109
96
@@ -124,7 +111,7 @@ void loop() {
124
111
static uint32_t last_print = 0 ;
125
112
if (millis () - last_print > 10000 ) {
126
113
last_print = millis ();
127
- int temp_percent = (int )((zbThermostat. temperature - zbThermostat. min_temperature ) / (zbThermostat. max_temperature - zbThermostat. min_temperature ) * 100 );
128
- Serial.printf (" Temperature : %.2f°C (%d %%)\n " , zbThermostat. temperature , temp_percent);
114
+ int temp_percent = (int )((sensor_temp - sensor_min_temp ) / (sensor_max_temp - sensor_min_temp ) * 100 );
115
+ Serial.printf (" Loop temperature info : %.2f°C (%d %%)\n " , sensor_temp , temp_percent);
129
116
}
130
117
}
0 commit comments