Home IO Control
ESPHome add-on for IO-Homecontrol devices
Loading...
Searching...
No Matches
proto_constants.cpp
Go to the documentation of this file.
1/// @file proto_constants.cpp
2/// @brief Name/description lookups for IO-Homecontrol commands, results and enumerations.
3/// @ingroup hioc_protocol
4
5#include "proto_constants.h"
6
7namespace esphome {
8namespace home_io_control {
9
10const char *command_name(uint8_t cmd) {
11 switch (cmd) {
12 case CMD_EXECUTE:
13 return "EXECUTE";
14 case CMD_ACTIVATE_MODE:
15 return "ACTIVATE_MODE";
16 case CMD_PRIVATE:
17 return "PRIVATE";
18 case CMD_PRIVATE_RESP:
19 return "PRIVATE_RESP";
20 case CMD_PRIVATE2:
21 return "PRIVATE2";
22 case CMD_PRIVATE2_RESP:
23 return "PRIVATE2_RESP";
24 case CMD_PRIORITY_LEVEL_REQ:
25 return "PRIORITY_LEVEL_REQ";
26 case CMD_PRIORITY_LEVEL_RESP:
27 return "PRIORITY_LEVEL_RESP";
28 case CMD_IDENTIFY:
29 return "IDENTIFY";
30 case CMD_WRITE_PRIVATE:
31 return "WRITE_PRIVATE";
32 case CMD_WRITE_PRIVATE_ACK:
33 return "WRITE_PRIVATE_ACK";
34 case CMD_DISCOVER_REQ:
35 return "DISCOVER_REQ";
36 case CMD_DISCOVER_RESP:
37 return "DISCOVER_RESP";
38 case CMD_DISCOVER_SPE_REQ:
39 return "DISCOVER_SPE_REQ";
40 case CMD_DISCOVER_SPE_RESP:
41 return "DISCOVER_SPE_RESP";
42 case CMD_DISCOVER_CONFIRM:
43 return "DISCOVER_CONFIRM";
44 case CMD_DISCOVER_CONFIRM_ACK:
45 return "DISCOVER_CONFIRM_ACK";
46 case CMD_DISCOVER_ALT_REQ:
47 return "DISCOVER_ALT_REQ";
48 case CMD_DISCOVER_ALT_RESP:
49 return "DISCOVER_ALT_RESP";
50 case CMD_ONEWAY_ADD_CONTROLLER:
51 return "ONEWAY_ADD_CONTROLLER";
52 case CMD_ONEWAY_REMOVE:
53 return "ONEWAY_REMOVE";
54 case CMD_KEY_INIT:
55 return "KEY_INIT";
56 case CMD_KEY_TRANSFER:
57 return "KEY_TRANSFER";
58 case CMD_KEY_CONFIRM:
59 return "KEY_CONFIRM";
60 case CMD_NODE_VERIFY_REQ:
61 return "NODE_VERIFY_REQ";
62 case CMD_NODE_VERIFY_RESP:
63 return "NODE_VERIFY_RESP";
64 case CMD_LAUNCH_KEY_TRANSFER:
65 return "LAUNCH_KEY_TRANSFER";
66 case CMD_UNKNOWN4A_REQ:
67 return "UNKNOWN4A_REQ";
68 case CMD_UNKNOWN4A_RESP:
69 return "UNKNOWN4A_RESP";
70 case CMD_CHALLENGE_REQ:
71 return "CHALLENGE_REQ";
72 case CMD_CHALLENGE_RESP:
73 return "CHALLENGE_RESP";
74 case CMD_GET_NAME:
75 return "GET_NAME";
76 case CMD_GET_NAME_RESP:
77 return "GET_NAME_RESP";
78 case CMD_SET_NAME:
79 return "SET_NAME";
80 case CMD_SET_NAME_RESP:
81 return "SET_NAME_RESP";
82 case CMD_GET_INFO1:
83 return "GET_INFO1";
84 case CMD_GET_INFO1_RESP:
85 return "GET_INFO1_RESP";
86 case CMD_GET_INFO2:
87 return "GET_INFO2";
88 case CMD_GET_INFO2_RESP:
89 return "GET_INFO2_RESP";
90 case CMD_GET_GENERAL_INFO3:
91 return "GET_GENERAL_INFO3";
92 case CMD_GET_GENERAL_INFO3_RESP:
93 return "GET_GENERAL_INFO3_RESP";
94 case CMD_SET_CONFIG1:
95 return "SET_CONFIG1";
96 case CMD_SET_CONFIG1_RESP:
97 return "SET_CONFIG1_RESP";
98 case CMD_STATUS_UPDATE:
99 return "STATUS_UPDATE";
100 case CMD_STATUS_UPDATE_RESP:
101 return "STATUS_UPDATE_RESP";
102 case CMD_SEND_RAW_MESSAGE:
103 return "SEND_RAW_MESSAGE";
104 case CMD_READ_GROUPS:
105 return "READ_GROUPS";
106 case CMD_REBOOT:
107 return "REBOOT";
108 case CMD_SERVICE_STATUS_ACK:
109 return "SERVICE_STATUS_ACK";
110 case CMD_ERROR_RESP:
111 return "ERROR_RESP";
112 default:
113 return "UNKNOWN_CMD";
114 }
115}
116
117const char *manufacturer_name(uint8_t id) {
118 switch (id) {
119 case MANUFACTURER_VELUX:
120 return "VELUX";
121 case MANUFACTURER_SOMFY:
122 return "Somfy";
123 case MANUFACTURER_HONEYWELL:
124 return "Honeywell";
125 case MANUFACTURER_HORMANN:
126 return "Hörmann";
127 case MANUFACTURER_ASSA_ABLOY:
128 return "ASSA ABLOY";
129 case MANUFACTURER_NIKO:
130 return "Niko";
131 case MANUFACTURER_WINDOW_MASTER:
132 return "WINDOW MASTER";
133 case MANUFACTURER_RENSON:
134 return "Renson";
135 case MANUFACTURER_CIAT:
136 return "CIAT";
137 case MANUFACTURER_SECUYOU:
138 return "Secuyou";
139 case MANUFACTURER_OVERKIZ:
140 return "OVERKIZ";
141 case MANUFACTURER_ATLANTIC_GROUP:
142 return "Atlantic Group";
143 default:
144 return "unknown";
145 }
146}
147
148const char *att_class_name(uint8_t att_class) {
149 switch (att_class) {
150 case ATT_CLASS_5MS:
151 return "5ms";
152 case ATT_CLASS_10MS:
153 return "10ms";
154 case ATT_CLASS_20MS:
155 return "20ms";
156 case ATT_CLASS_40MS:
157 return "40ms";
158 default:
159 return "unknown";
160 }
161}
162
163const char *power_save_mode_name(uint8_t mode) {
164 switch (mode) {
165 case POWER_SAVE_ALWAYS_ALIVE:
166 return "always_alive";
167 case POWER_SAVE_LOW_POWER:
168 return "low_power";
169 default:
170 return "unknown";
171 }
172}
173
174const char *originator_name(uint8_t originator) {
175 switch (originator) {
176 case ORIGINATOR_LOCAL_USER:
177 return "local_user";
178 case ORIGINATOR_USER_REMOTE:
179 return "user_remote";
180 case ORIGINATOR_RAIN_SENSOR:
181 return "rain_sensor";
182 case ORIGINATOR_TIMER:
183 return "timer";
184 case ORIGINATOR_SECURITY:
185 return "security";
186 case ORIGINATOR_UPS:
187 return "ups";
188 case ORIGINATOR_SMART_CONTROLLER:
189 return "smart_controller";
190 case ORIGINATOR_LIFESTYLE:
191 return "lifestyle";
192 case ORIGINATOR_SAAC:
193 return "saac";
194 case ORIGINATOR_WIND_SENSOR:
195 return "wind_sensor";
196 case ORIGINATOR_LOAD_SHEDDING:
197 return "load_shedding";
198 case ORIGINATOR_LOCAL_LIGHT:
199 return "local_light";
200 case ORIGINATOR_ENVIRONMENT:
201 return "environment";
202 case ORIGINATOR_MYSELF:
203 return "myself";
204 case ORIGINATOR_AUTOMATIC_CYCLE:
205 return "automatic_cycle";
206 case ORIGINATOR_EMERGENCY:
207 return "emergency";
208 default:
209 return "unknown";
210 }
211}
212
213const char *acei_level_name(uint8_t level) {
214 switch (level) {
215 case ACEI_LEVEL_PROTECTION_HUMAN:
216 return "protection_human";
217 case ACEI_LEVEL_PROTECTION_SENSOR:
218 return "protection_sensor";
219 case ACEI_LEVEL_USER_HIGH:
220 return "user_high";
221 case ACEI_LEVEL_USER_DEFAULT:
222 return "user_default";
223 case ACEI_LEVEL_COMFORT_1:
224 return "comfort_1";
225 case ACEI_LEVEL_COMFORT_2:
226 return "comfort_2";
227 case ACEI_LEVEL_AUTO_SAAC:
228 return "auto_saac";
229 case ACEI_LEVEL_AUTO_DEFAULT:
230 return "auto_default";
231 default:
232 return "unknown";
233 }
234}
235
236const char *command_result_name(uint8_t result) {
237 switch (result) {
238 case RESULT_UNKNOWN_STATUS_REPLY:
239 return "UNKNOWN_STATUS_REPLY";
240 case RESULT_COMMAND_COMPLETED_OK:
241 return "COMMAND_COMPLETED_OK";
242 case RESULT_NO_CONTACT:
243 return "NO_CONTACT";
244 case RESULT_MANUALLY_OPERATED:
245 return "MANUALLY_OPERATED";
246 case RESULT_BLOCKED:
247 return "BLOCKED";
248 case RESULT_WRONG_SYSTEMKEY:
249 return "WRONG_SYSTEMKEY";
250 case RESULT_PRIORITY_LEVEL_LOCKED:
251 return "PRIORITY_LEVEL_LOCKED";
252 case RESULT_REACHED_WRONG_POSITION:
253 return "REACHED_WRONG_POSITION";
254 case RESULT_ERROR_DURING_EXECUTION:
255 return "ERROR_DURING_EXECUTION";
256 case RESULT_NO_EXECUTION:
257 return "NO_EXECUTION";
258 case RESULT_CALIBRATING:
259 return "CALIBRATING";
260 case RESULT_POWER_CONSUMPTION_TOO_HIGH:
261 return "POWER_CONSUMPTION_TOO_HIGH";
262 case RESULT_POWER_CONSUMPTION_TOO_LOW:
263 return "POWER_CONSUMPTION_TOO_LOW";
264 case RESULT_LOCK_POSITION_OPEN:
265 return "LOCK_POSITION_OPEN";
266 case RESULT_MOTION_TIME_TOO_LONG:
267 return "MOTION_TIME_TOO_LONG";
268 case RESULT_THERMAL_PROTECTION:
269 return "THERMAL_PROTECTION";
270 case RESULT_PRODUCT_NOT_OPERATIONAL:
271 return "PRODUCT_NOT_OPERATIONAL";
272 case RESULT_FILTER_MAINTENANCE_NEEDED:
273 return "FILTER_MAINTENANCE_NEEDED";
274 case RESULT_BATTERY_LEVEL:
275 return "BATTERY_LEVEL";
276 case RESULT_TARGET_MODIFIED:
277 return "TARGET_MODIFIED";
278 case RESULT_MODE_NOT_IMPLEMENTED:
279 return "MODE_NOT_IMPLEMENTED";
280 case RESULT_COMMAND_INCOMPATIBLE_TO_MOVEMENT:
281 return "COMMAND_INCOMPATIBLE_TO_MOVEMENT";
282 case RESULT_USER_ACTION:
283 return "USER_ACTION";
284 case RESULT_DEAD_BOLT_ERROR:
285 return "DEAD_BOLT_ERROR";
286 case RESULT_AUTOMATIC_CYCLE_ENGAGED:
287 return "AUTOMATIC_CYCLE_ENGAGED";
288 case RESULT_WRONG_LOAD_CONNECTED:
289 return "WRONG_LOAD_CONNECTED";
290 case RESULT_COLOUR_NOT_REACHABLE:
291 return "COLOUR_NOT_REACHABLE";
292 case RESULT_TARGET_NOT_REACHABLE:
293 return "TARGET_NOT_REACHABLE";
294 case RESULT_BAD_INDEX_RECEIVED:
295 return "BAD_INDEX_RECEIVED";
296 case RESULT_COMMAND_OVERRULED:
297 return "COMMAND_OVERRULED";
298 case RESULT_NODE_WAITING_FOR_POWER:
299 return "NODE_WAITING_FOR_POWER";
300 case RESULT_NODE_LOCKED:
301 return "NODE_LOCKED";
302 case RESULT_WRONG_POSITION:
303 return "WRONG_POSITION";
304 case RESULT_LIMITS_NOT_SET:
305 return "LIMITS_NOT_SET";
306 case RESULT_IP_NOT_SET:
307 return "IP_NOT_SET";
308 case RESULT_OUT_OF_RANGE:
309 return "OUT_OF_RANGE";
310 case RESULT_PRIORITY_LOCKED_NON_EXEC:
311 return "PRIORITY_LOCKED";
312 case RESULT_INVALID_FUNCTION_INDEX:
313 return "INVALID_FUNCTION_INDEX";
314 case RESULT_INFORMATION_CODE:
315 return "INFORMATION_CODE";
316 case RESULT_PARAMETER_LIMITED:
317 return "PARAMETER_LIMITED";
318 case RESULT_LIMITATION_BY_LOCAL_USER:
319 return "LIMITATION_BY_LOCAL_USER";
320 case RESULT_LIMITATION_BY_USER:
321 return "LIMITATION_BY_USER";
322 case RESULT_LIMITATION_BY_RAIN:
323 return "LIMITATION_BY_RAIN";
324 case RESULT_LIMITATION_BY_TIMER:
325 return "LIMITATION_BY_TIMER";
326 case RESULT_LIMITATION_BY_SCD:
327 return "LIMITATION_BY_SCD";
328 case RESULT_LIMITATION_BY_UPS:
329 return "LIMITATION_BY_UPS";
330 case RESULT_LIMITATION_BY_UNKNOWN_DEVICE:
331 return "LIMITATION_BY_UNKNOWN_DEVICE";
332 case RESULT_LIMITATION_BY_SAAC:
333 return "LIMITATION_BY_SAAC";
334 case RESULT_LIMITATION_BY_WIND:
335 return "LIMITATION_BY_WIND";
336 case RESULT_LIMITATION_BY_MYSELF:
337 return "LIMITATION_BY_MYSELF";
338 case RESULT_LIMITATION_BY_AUTOMATIC_CYCLE:
339 return "LIMITATION_BY_AUTOMATIC_CYCLE";
340 case RESULT_LIMITATION_BY_EMERGENCY:
341 return "LIMITATION_BY_EMERGENCY";
342 default:
343 return "UNKNOWN_RESULT_CODE";
344 }
345}
346
347const char *command_result_description(uint8_t result) {
348 switch (result) {
349 case RESULT_UNKNOWN_STATUS_REPLY:
350 return "unknown reply";
351 case RESULT_COMMAND_COMPLETED_OK:
352 return "no errors detected";
353 case RESULT_NO_CONTACT:
354 return "no communication to node";
355 case RESULT_MANUALLY_OPERATED:
356 return "manually operated by a user";
357 case RESULT_BLOCKED:
358 return "node has been blocked by an object";
359 case RESULT_WRONG_SYSTEMKEY:
360 return "node contains the wrong system key";
361 case RESULT_PRIORITY_LEVEL_LOCKED:
362 return "node is locked on this priority level";
363 case RESULT_REACHED_WRONG_POSITION:
364 return "node stopped in another position than expected";
365 case RESULT_ERROR_DURING_EXECUTION:
366 return "an error occurred during command execution";
367 case RESULT_NO_EXECUTION:
368 return "no movement of the node parameter";
369 case RESULT_CALIBRATING:
370 return "node is calibrating the parameters";
371 case RESULT_POWER_CONSUMPTION_TOO_HIGH:
372 return "node power consumption is too high";
373 case RESULT_POWER_CONSUMPTION_TOO_LOW:
374 return "node power consumption is too low";
375 case RESULT_LOCK_POSITION_OPEN:
376 return "door open during lock command";
377 case RESULT_MOTION_TIME_TOO_LONG:
378 return "target was not reached in time";
379 case RESULT_THERMAL_PROTECTION:
380 return "node has gone into thermal protection mode";
381 case RESULT_PRODUCT_NOT_OPERATIONAL:
382 return "node is not currently operational";
383 case RESULT_FILTER_MAINTENANCE_NEEDED:
384 return "filter needs maintenance";
385 case RESULT_BATTERY_LEVEL:
386 return "battery level is low";
387 case RESULT_TARGET_MODIFIED:
388 return "node modified the requested target value";
389 case RESULT_MODE_NOT_IMPLEMENTED:
390 return "node does not support the received mode";
391 case RESULT_COMMAND_INCOMPATIBLE_TO_MOVEMENT:
392 return "node cannot move in the requested direction";
393 case RESULT_USER_ACTION:
394 return "user action overrode the command";
395 case RESULT_DEAD_BOLT_ERROR:
396 return "dead bolt error";
397 case RESULT_AUTOMATIC_CYCLE_ENGAGED:
398 return "node has gone into automatic cycle mode";
399 case RESULT_WRONG_LOAD_CONNECTED:
400 return "wrong load connected to node";
401 case RESULT_COLOUR_NOT_REACHABLE:
402 return "node cannot reach the requested colour";
403 case RESULT_TARGET_NOT_REACHABLE:
404 return "node cannot reach the requested target position";
405 case RESULT_BAD_INDEX_RECEIVED:
406 return "invalid index received";
407 case RESULT_COMMAND_OVERRULED:
408 return "command was overruled by a newer command";
409 case RESULT_NODE_WAITING_FOR_POWER:
410 return "node is waiting for power";
411 case RESULT_NODE_LOCKED:
412 return "node is locked";
413 case RESULT_WRONG_POSITION:
414 return "wrong position";
415 case RESULT_LIMITS_NOT_SET:
416 return "limits are not set";
417 case RESULT_IP_NOT_SET:
418 return "intermediate position is not set";
419 case RESULT_OUT_OF_RANGE:
420 return "requested value is out of range";
421 case RESULT_PRIORITY_LOCKED_NON_EXEC:
422 return "command priority too low, node rejected execution";
423 case RESULT_INVALID_FUNCTION_INDEX:
424 return "requested function/sub-index is not implemented by the device";
425 case RESULT_INFORMATION_CODE:
426 return "information-only result with unknown semantics";
427 case RESULT_PARAMETER_LIMITED:
428 return "parameter was limited by an unknown device";
429 case RESULT_LIMITATION_BY_LOCAL_USER:
430 return "parameter was limited by the local button";
431 case RESULT_LIMITATION_BY_USER:
432 return "parameter was limited by a remote control";
433 case RESULT_LIMITATION_BY_RAIN:
434 return "parameter was limited by a rain sensor";
435 case RESULT_LIMITATION_BY_TIMER:
436 return "parameter was limited by a timer";
437 case RESULT_LIMITATION_BY_SCD:
438 return "parameter was limited by a security controlling actuator";
439 case RESULT_LIMITATION_BY_UPS:
440 return "parameter was limited by a power supply";
441 case RESULT_LIMITATION_BY_UNKNOWN_DEVICE:
442 return "parameter was limited by an unknown device";
443 case RESULT_LIMITATION_BY_SAAC:
444 return "parameter was limited by a standalone automatic controller";
445 case RESULT_LIMITATION_BY_WIND:
446 return "parameter was limited by a wind sensor";
447 case RESULT_LIMITATION_BY_MYSELF:
448 return "parameter was limited by the node itself";
449 case RESULT_LIMITATION_BY_AUTOMATIC_CYCLE:
450 return "parameter was limited by an automatic cycle";
451 case RESULT_LIMITATION_BY_EMERGENCY:
452 return "parameter was limited by an emergency";
453 default:
454 return "unknown result code";
455 }
456}
457
458bool is_limitation_result(uint8_t result) {
459 switch (result) {
460 case RESULT_PARAMETER_LIMITED:
461 case RESULT_LIMITATION_BY_LOCAL_USER:
462 case RESULT_LIMITATION_BY_USER:
463 case RESULT_LIMITATION_BY_RAIN:
464 case RESULT_LIMITATION_BY_TIMER:
465 case RESULT_LIMITATION_BY_SCD:
466 case RESULT_LIMITATION_BY_UPS:
467 case RESULT_LIMITATION_BY_UNKNOWN_DEVICE:
468 case RESULT_LIMITATION_BY_SAAC:
469 case RESULT_LIMITATION_BY_WIND:
470 case RESULT_LIMITATION_BY_MYSELF:
471 case RESULT_LIMITATION_BY_AUTOMATIC_CYCLE:
472 case RESULT_LIMITATION_BY_EMERGENCY:
473 return true;
474 default:
475 return false;
476 }
477}
478
479} // namespace home_io_control
480} // namespace esphome
const char * manufacturer_name(uint8_t id)
Get a human-readable manufacturer name from the protocol manufacturer byte.
const char * att_class_name(uint8_t att_class)
Get a human-readable turnaround time string for an ATT class value.
const char * power_save_mode_name(uint8_t mode)
Get a human-readable power save mode name.
const char * command_name(uint8_t cmd)
Get a human-readable name for any IO-Homecontrol command ID.
const char * command_result_description(uint8_t result)
Return a human-readable explanation for a CMD_ERROR_RESP result code.
const char * command_result_name(uint8_t result)
Return a stable symbolic name for a CMD_ERROR_RESP result code.
const char * acei_level_name(uint8_t level)
Get a human-readable name for an ACEI priority level (0–7).
bool is_limitation_result(uint8_t result)
Check whether a result code represents an environmental or control limitation.
const char * originator_name(uint8_t originator)
Get a human-readable name for a command originator byte.
IO-Homecontrol command IDs, result codes and protocol enumerations.