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_LIMITATION_STATUS_REQ:
35 return "LIMITATION_STATUS_REQ";
36 case CMD_LIMITATION_STATUS_RESP:
37 return "LIMITATION_STATUS_RESP";
38 case CMD_DISCOVER_REQ:
39 return "DISCOVER_REQ";
40 case CMD_DISCOVER_RESP:
41 return "DISCOVER_RESP";
42 case CMD_DISCOVER_SPE_REQ:
43 return "DISCOVER_SPE_REQ";
44 case CMD_DISCOVER_SPE_RESP:
45 return "DISCOVER_SPE_RESP";
46 case CMD_DISCOVER_CONFIRM:
47 return "DISCOVER_CONFIRM";
48 case CMD_DISCOVER_CONFIRM_ACK:
49 return "DISCOVER_CONFIRM_ACK";
50 case CMD_DISCOVER_ALT_REQ:
51 return "DISCOVER_ALT_REQ";
52 case CMD_DISCOVER_ALT_RESP:
53 return "DISCOVER_ALT_RESP";
54 case CMD_ONEWAY_ADD_CONTROLLER:
55 return "ONEWAY_ADD_CONTROLLER";
56 case CMD_ONEWAY_REMOVE:
57 return "ONEWAY_REMOVE";
58 case CMD_KEY_INIT:
59 return "KEY_INIT";
60 case CMD_KEY_TRANSFER:
61 return "KEY_TRANSFER";
62 case CMD_KEY_CONFIRM:
63 return "KEY_CONFIRM";
64 case CMD_NODE_VERIFY_REQ:
65 return "NODE_VERIFY_REQ";
66 case CMD_NODE_VERIFY_RESP:
67 return "NODE_VERIFY_RESP";
68 case CMD_LAUNCH_KEY_TRANSFER:
69 return "LAUNCH_KEY_TRANSFER";
70 case CMD_TRANSFER_OPEN:
71 return "TRANSFER_OPEN";
72 case CMD_TRANSFER_OPEN_RESP:
73 return "TRANSFER_OPEN_RESP";
74 case CMD_UNKNOWN4A_REQ:
75 return "UNKNOWN4A_REQ";
76 case CMD_UNKNOWN4A_RESP:
77 return "UNKNOWN4A_RESP";
78 case CMD_CHALLENGE_REQ:
79 return "CHALLENGE_REQ";
80 case CMD_CHALLENGE_RESP:
81 return "CHALLENGE_RESP";
82 case CMD_GET_NAME:
83 return "GET_NAME";
84 case CMD_GET_NAME_RESP:
85 return "GET_NAME_RESP";
86 case CMD_SET_NAME:
87 return "SET_NAME";
88 case CMD_SET_NAME_RESP:
89 return "SET_NAME_RESP";
90 case CMD_GET_INFO1:
91 return "GET_INFO1";
92 case CMD_GET_INFO1_RESP:
93 return "GET_INFO1_RESP";
94 case CMD_GET_INFO2:
95 return "GET_INFO2";
96 case CMD_GET_INFO2_RESP:
97 return "GET_INFO2_RESP";
98 case CMD_GET_GENERAL_INFO3:
99 return "GET_GENERAL_INFO3";
100 case CMD_GET_GENERAL_INFO3_RESP:
101 return "GET_GENERAL_INFO3_RESP";
102 case CMD_SET_CONFIG1:
103 return "SET_CONFIG1";
104 case CMD_SET_CONFIG1_RESP:
105 return "SET_CONFIG1_RESP";
106 case CMD_SUBSCRIBE_EVENT:
107 return "SUBSCRIBE_EVENT";
108 case CMD_STATUS_UPDATE:
109 return "STATUS_UPDATE";
110 case CMD_STATUS_UPDATE_RESP:
111 return "STATUS_UPDATE_RESP";
112 case CMD_SEND_RAW_MESSAGE:
113 return "SEND_RAW_MESSAGE";
114 case CMD_READ_GROUPS:
115 return "READ_GROUPS";
116 case CMD_REBOOT:
117 return "REBOOT";
118 case CMD_SERVICE_STATUS_ACK:
119 return "SERVICE_STATUS_ACK";
120 case CMD_ERROR_RESP:
121 return "ERROR_RESP";
122 default:
123 return "UNKNOWN_CMD";
124 }
125}
126
127const char *manufacturer_name(uint8_t id) {
128 switch (id) {
129 case MANUFACTURER_VELUX:
130 return "VELUX";
131 case MANUFACTURER_SOMFY:
132 return "Somfy";
133 case MANUFACTURER_HONEYWELL:
134 return "Honeywell";
135 case MANUFACTURER_HORMANN:
136 return "Hörmann";
137 case MANUFACTURER_ASSA_ABLOY:
138 return "ASSA ABLOY";
139 case MANUFACTURER_NIKO:
140 return "Niko";
141 case MANUFACTURER_WINDOW_MASTER:
142 return "WINDOW MASTER";
143 case MANUFACTURER_RENSON:
144 return "Renson";
145 case MANUFACTURER_CIAT:
146 return "CIAT";
147 case MANUFACTURER_SECUYOU:
148 return "Secuyou";
149 case MANUFACTURER_OVERKIZ:
150 return "OVERKIZ";
151 case MANUFACTURER_ATLANTIC_GROUP:
152 return "Atlantic Group";
153 default:
154 return "unknown";
155 }
156}
157
158const char *att_class_name(uint8_t att_class) {
159 switch (att_class) {
160 case ATT_CLASS_5MS:
161 return "5ms";
162 case ATT_CLASS_10MS:
163 return "10ms";
164 case ATT_CLASS_20MS:
165 return "20ms";
166 case ATT_CLASS_40MS:
167 return "40ms";
168 default:
169 return "unknown";
170 }
171}
172
173const char *power_save_mode_name(uint8_t mode) {
174 switch (mode) {
175 case POWER_SAVE_ALWAYS_ALIVE:
176 return "always_alive";
177 case POWER_SAVE_LOW_POWER:
178 return "low_power";
179 default:
180 return "unknown";
181 }
182}
183
184const char *originator_name(uint8_t originator) {
185 switch (originator) {
186 case ORIGINATOR_LOCAL_USER:
187 return "local_user";
188 case ORIGINATOR_USER_REMOTE:
189 return "user_remote";
190 case ORIGINATOR_RAIN_SENSOR:
191 return "rain_sensor";
192 case ORIGINATOR_TIMER:
193 return "timer";
194 case ORIGINATOR_SECURITY:
195 return "security";
196 case ORIGINATOR_UPS:
197 return "ups";
198 case ORIGINATOR_SMART_CONTROLLER:
199 return "smart_controller";
200 case ORIGINATOR_LIFESTYLE:
201 return "lifestyle";
202 case ORIGINATOR_SAAC:
203 return "saac";
204 case ORIGINATOR_WIND_SENSOR:
205 return "wind_sensor";
206 case ORIGINATOR_LOAD_SHEDDING:
207 return "load_shedding";
208 case ORIGINATOR_LOCAL_LIGHT:
209 return "local_light";
210 case ORIGINATOR_ENVIRONMENT:
211 return "environment";
212 case ORIGINATOR_MYSELF:
213 return "myself";
214 case ORIGINATOR_AUTOMATIC_CYCLE:
215 return "automatic_cycle";
216 case ORIGINATOR_EMERGENCY:
217 return "emergency";
218 default:
219 return "unknown";
220 }
221}
222
223const char *acei_level_name(uint8_t level) {
224 switch (level) {
225 case ACEI_LEVEL_PROTECTION_HUMAN:
226 return "protection_human";
227 case ACEI_LEVEL_PROTECTION_SENSOR:
228 return "protection_sensor";
229 case ACEI_LEVEL_USER_HIGH:
230 return "user_high";
231 case ACEI_LEVEL_USER_DEFAULT:
232 return "user_default";
233 case ACEI_LEVEL_COMFORT_1:
234 return "comfort_1";
235 case ACEI_LEVEL_COMFORT_2:
236 return "comfort_2";
237 case ACEI_LEVEL_AUTO_SAAC:
238 return "auto_saac";
239 case ACEI_LEVEL_AUTO_DEFAULT:
240 return "auto_default";
241 default:
242 return "unknown";
243 }
244}
245
246const char *command_result_name(uint8_t result) {
247 switch (result) {
248 case RESULT_UNKNOWN_STATUS_REPLY:
249 return "UNKNOWN_STATUS_REPLY";
250 case RESULT_COMMAND_COMPLETED_OK:
251 return "COMMAND_COMPLETED_OK";
252 case RESULT_NO_CONTACT:
253 return "NO_CONTACT";
254 case RESULT_MANUALLY_OPERATED:
255 return "MANUALLY_OPERATED";
256 case RESULT_BLOCKED:
257 return "BLOCKED";
258 case RESULT_WRONG_SYSTEMKEY:
259 return "WRONG_SYSTEMKEY";
260 case RESULT_PRIORITY_LEVEL_LOCKED:
261 return "PRIORITY_LEVEL_LOCKED";
262 case RESULT_REACHED_WRONG_POSITION:
263 return "REACHED_WRONG_POSITION";
264 case RESULT_NO_EXECUTION:
265 return "NO_EXECUTION";
266 case RESULT_CALIBRATING:
267 return "CALIBRATING";
268 case RESULT_POWER_CONSUMPTION_TOO_HIGH:
269 return "POWER_CONSUMPTION_TOO_HIGH";
270 case RESULT_POWER_CONSUMPTION_TOO_LOW:
271 return "POWER_CONSUMPTION_TOO_LOW";
272 case RESULT_LOCK_POSITION_OPEN:
273 return "LOCK_POSITION_OPEN";
274 case RESULT_MOTION_TIME_TOO_LONG:
275 return "MOTION_TIME_TOO_LONG";
276 case RESULT_THERMAL_PROTECTION:
277 return "THERMAL_PROTECTION";
278 case RESULT_FILTER_MAINTENANCE_NEEDED:
279 return "FILTER_MAINTENANCE_NEEDED";
280 case RESULT_BATTERY_LEVEL:
281 return "BATTERY_LEVEL";
282 case RESULT_TARGET_MODIFIED:
283 return "TARGET_MODIFIED";
284 case RESULT_MODE_NOT_IMPLEMENTED:
285 return "MODE_NOT_IMPLEMENTED";
286 case RESULT_COMMAND_INCOMPATIBLE_TO_MOVEMENT:
287 return "COMMAND_INCOMPATIBLE_TO_MOVEMENT";
288 case RESULT_USER_ACTION:
289 return "USER_ACTION";
290 case RESULT_DEAD_BOLT_ERROR:
291 return "DEAD_BOLT_ERROR";
292 case RESULT_WRONG_LOAD_CONNECTED:
293 return "WRONG_LOAD_CONNECTED";
294 case RESULT_COLOUR_NOT_REACHABLE:
295 return "COLOUR_NOT_REACHABLE";
296 case RESULT_TARGET_NOT_REACHABLE:
297 return "TARGET_NOT_REACHABLE";
298 case RESULT_BAD_INDEX_RECEIVED:
299 return "BAD_INDEX_RECEIVED";
300 case RESULT_COMMAND_OVERRULED:
301 return "COMMAND_OVERRULED";
302 case RESULT_NODE_WAITING_FOR_POWER:
303 return "NODE_WAITING_FOR_POWER";
304 case RESULT_WRONG_POSITION:
305 return "WRONG_POSITION";
306 case RESULT_LIMITS_NOT_SET:
307 return "LIMITS_NOT_SET";
308 case RESULT_IP_NOT_SET:
309 return "IP_NOT_SET";
310 case RESULT_OUT_OF_RANGE:
311 return "OUT_OF_RANGE";
312 case RESULT_COMMAND_UNKNOWN:
313 return "COMMAND_UNKNOWN";
314 case RESULT_MODE_OR_STATE_UNKNOWN:
315 return "MODE_OR_STATE_UNKNOWN";
316 case RESULT_BAD_MAC:
317 return "BAD_MAC";
318 case RESULT_SETUP_REQUIRED:
319 return "SETUP_REQUIRED";
320 case RESULT_PARAMETER_UNKNOWN:
321 return "PARAMETER_UNKNOWN";
322 case RESULT_ORIGINATOR_DISABLED:
323 return "ORIGINATOR_DISABLED";
324 case RESULT_PRIORITY_LOCKED:
325 return "PRIORITY_LOCKED";
326 case RESULT_PRIORITY_SERVICE_NOT_SUPPORTED:
327 return "PRIORITY_SERVICE_NOT_SUPPORTED";
328 case RESULT_PARAMETER_LIMITATION_ADJUSTMENT:
329 return "PARAMETER_LIMITATION_ADJUSTMENT";
330 case RESULT_PARAMETER_INCOHERENCE_ADJUSTMENT:
331 return "PARAMETER_INCOHERENCE_ADJUSTMENT";
332 case RESULT_TOTAL_INCOHERENCE:
333 return "TOTAL_INCOHERENCE";
334 case RESULT_SERVICE_FULL:
335 return "SERVICE_FULL";
336 case RESULT_ALIAS_INCOHERENCE:
337 return "ALIAS_INCOHERENCE";
338 case RESULT_SESSION_INTERRUPTED:
339 return "SESSION_INTERRUPTED";
340 case RESULT_NOT_IMPLEMENTED:
341 return "NOT_IMPLEMENTED";
342 case RESULT_COMMAND_REJECTED:
343 return "COMMAND_REJECTED";
344 case RESULT_ALREADY_CONFIGURED:
345 return "ALREADY_CONFIGURED";
346 case RESULT_INFORMATION_CODE:
347 return "INFORMATION_CODE";
348 case RESULT_PARAMETER_LIMITED:
349 return "PARAMETER_LIMITED";
350 case RESULT_LIMITATION_BY_LOCAL_USER:
351 return "LIMITATION_BY_LOCAL_USER";
352 case RESULT_LIMITATION_BY_USER:
353 return "LIMITATION_BY_USER";
354 case RESULT_LIMITATION_BY_RAIN:
355 return "LIMITATION_BY_RAIN";
356 case RESULT_LIMITATION_BY_TIMER:
357 return "LIMITATION_BY_TIMER";
358 case RESULT_LIMITATION_BY_SCD:
359 return "LIMITATION_BY_SCD";
360 case RESULT_LIMITATION_BY_UPS:
361 return "LIMITATION_BY_UPS";
362 case RESULT_LIMITATION_BY_UNKNOWN_DEVICE:
363 return "LIMITATION_BY_UNKNOWN_DEVICE";
364 case RESULT_LIMITATION_BY_SAAC:
365 return "LIMITATION_BY_SAAC";
366 case RESULT_LIMITATION_BY_WIND:
367 return "LIMITATION_BY_WIND";
368 case RESULT_LIMITATION_BY_MYSELF:
369 return "LIMITATION_BY_MYSELF";
370 case RESULT_LIMITATION_BY_AUTOMATIC_CYCLE:
371 return "LIMITATION_BY_AUTOMATIC_CYCLE";
372 case RESULT_LIMITATION_BY_EMERGENCY:
373 return "LIMITATION_BY_EMERGENCY";
374 default:
375 return "UNKNOWN_RESULT_CODE";
376 }
377}
378
379const char *command_result_description(uint8_t result) {
380 switch (result) {
381 case RESULT_UNKNOWN_STATUS_REPLY:
382 return "unknown reply";
383 case RESULT_COMMAND_COMPLETED_OK:
384 return "no errors detected";
385 case RESULT_NO_CONTACT:
386 return "no communication to node";
387 case RESULT_MANUALLY_OPERATED:
388 return "manually operated by a user";
389 case RESULT_BLOCKED:
390 return "node has been blocked by an object";
391 case RESULT_WRONG_SYSTEMKEY:
392 return "node contains the wrong system key";
393 case RESULT_PRIORITY_LEVEL_LOCKED:
394 return "node is locked on this priority level";
395 case RESULT_REACHED_WRONG_POSITION:
396 return "node stopped in another position than expected";
397 case RESULT_NO_EXECUTION:
398 return "no movement of the node parameter";
399 case RESULT_CALIBRATING:
400 return "node is calibrating the parameters";
401 case RESULT_POWER_CONSUMPTION_TOO_HIGH:
402 return "node power consumption is too high";
403 case RESULT_POWER_CONSUMPTION_TOO_LOW:
404 return "node power consumption is too low";
405 case RESULT_LOCK_POSITION_OPEN:
406 return "door open during lock command";
407 case RESULT_MOTION_TIME_TOO_LONG:
408 return "target was not reached in time";
409 case RESULT_THERMAL_PROTECTION:
410 return "node has gone into thermal protection mode";
411 case RESULT_FILTER_MAINTENANCE_NEEDED:
412 return "filter needs maintenance";
413 case RESULT_BATTERY_LEVEL:
414 return "battery level is low";
415 case RESULT_TARGET_MODIFIED:
416 return "node modified the requested target value";
417 case RESULT_MODE_NOT_IMPLEMENTED:
418 return "node does not support the received mode";
419 case RESULT_COMMAND_INCOMPATIBLE_TO_MOVEMENT:
420 return "node cannot move in the requested direction";
421 case RESULT_USER_ACTION:
422 return "user action overrode the command";
423 case RESULT_DEAD_BOLT_ERROR:
424 return "dead bolt error";
425 case RESULT_WRONG_LOAD_CONNECTED:
426 return "wrong load connected to node";
427 case RESULT_COLOUR_NOT_REACHABLE:
428 return "node cannot reach the requested colour";
429 case RESULT_TARGET_NOT_REACHABLE:
430 return "node cannot reach the requested target position";
431 case RESULT_BAD_INDEX_RECEIVED:
432 return "invalid index received";
433 case RESULT_COMMAND_OVERRULED:
434 return "command was overruled by a newer command";
435 case RESULT_NODE_WAITING_FOR_POWER:
436 return "node is waiting for power";
437 case RESULT_WRONG_POSITION:
438 return "wrong position";
439 case RESULT_LIMITS_NOT_SET:
440 return "limits are not set";
441 case RESULT_IP_NOT_SET:
442 return "intermediate position is not set";
443 case RESULT_OUT_OF_RANGE:
444 return "requested value is out of range";
445 case RESULT_COMMAND_UNKNOWN:
446 return "the device does not offer this command in its current state";
447 case RESULT_MODE_OR_STATE_UNKNOWN:
448 return "mode or state number unknown to the device";
449 case RESULT_BAD_MAC:
450 return "the device rejected our challenge answer (wrong system key?)";
451 case RESULT_SETUP_REQUIRED:
452 return "the device needs setting up first";
453 case RESULT_PARAMETER_UNKNOWN:
454 return "parameter, alias or access method unknown to the device";
455 case RESULT_ORIGINATOR_DISABLED:
456 return "command originator disabled on the device";
457 case RESULT_PRIORITY_LOCKED:
458 return "command priority too low, node rejected execution";
459 case RESULT_PRIORITY_SERVICE_NOT_SUPPORTED:
460 return "priority service not supported by the device";
461 case RESULT_PARAMETER_LIMITATION_ADJUSTMENT:
462 return "the device adjusted the parameter to a limitation";
463 case RESULT_PARAMETER_INCOHERENCE_ADJUSTMENT:
464 return "the device adjusted an incoherent parameter";
465 case RESULT_TOTAL_INCOHERENCE:
466 return "the request does not fit what the device implements";
467 case RESULT_SERVICE_FULL:
468 return "the device has no room left for this request";
469 case RESULT_ALIAS_INCOHERENCE:
470 return "alias incoherence";
471 case RESULT_SESSION_INTERRUPTED:
472 return "session interrupted";
473 case RESULT_NOT_IMPLEMENTED:
474 return "not implemented by the device";
475 case RESULT_COMMAND_REJECTED:
476 return "the device rejected the command";
477 case RESULT_ALREADY_CONFIGURED:
478 return "the device is already configured";
479 case RESULT_INFORMATION_CODE:
480 return "information-only result with unknown semantics";
481 case RESULT_PARAMETER_LIMITED:
482 return "parameter was limited by an unknown device";
483 case RESULT_LIMITATION_BY_LOCAL_USER:
484 return "parameter was limited by the local button";
485 case RESULT_LIMITATION_BY_USER:
486 return "parameter was limited by a remote control";
487 case RESULT_LIMITATION_BY_RAIN:
488 return "parameter was limited by a rain sensor";
489 case RESULT_LIMITATION_BY_TIMER:
490 return "parameter was limited by a timer";
491 case RESULT_LIMITATION_BY_SCD:
492 return "parameter was limited by a security controlling actuator";
493 case RESULT_LIMITATION_BY_UPS:
494 return "parameter was limited by a power supply";
495 case RESULT_LIMITATION_BY_UNKNOWN_DEVICE:
496 return "parameter was limited by an unknown device";
497 case RESULT_LIMITATION_BY_SAAC:
498 return "parameter was limited by a standalone automatic controller";
499 case RESULT_LIMITATION_BY_WIND:
500 return "parameter was limited by a wind sensor";
501 case RESULT_LIMITATION_BY_MYSELF:
502 return "parameter was limited by the node itself";
503 case RESULT_LIMITATION_BY_AUTOMATIC_CYCLE:
504 return "parameter was limited by an automatic cycle";
505 case RESULT_LIMITATION_BY_EMERGENCY:
506 return "parameter was limited by an emergency";
507 default:
508 return "unknown result code";
509 }
510}
511
512bool is_limitation_result(uint8_t result) {
513 switch (result) {
514 case RESULT_PARAMETER_LIMITED:
515 case RESULT_LIMITATION_BY_LOCAL_USER:
516 case RESULT_LIMITATION_BY_USER:
517 case RESULT_LIMITATION_BY_RAIN:
518 case RESULT_LIMITATION_BY_TIMER:
519 case RESULT_LIMITATION_BY_SCD:
520 case RESULT_LIMITATION_BY_UPS:
521 case RESULT_LIMITATION_BY_UNKNOWN_DEVICE:
522 case RESULT_LIMITATION_BY_SAAC:
523 case RESULT_LIMITATION_BY_WIND:
524 case RESULT_LIMITATION_BY_MYSELF:
525 case RESULT_LIMITATION_BY_AUTOMATIC_CYCLE:
526 case RESULT_LIMITATION_BY_EMERGENCY:
527 return true;
528 default:
529 return false;
530 }
531}
532
533} // namespace home_io_control
534} // 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.