|
4 | 4 | from esphome.components import sensor
|
5 | 5 | from esphome.const import CONF_ID, STATE_CLASS_MEASUREMENT, UNIT_EMPTY, UNIT_METER
|
6 | 6 |
|
| 7 | + |
7 | 8 | # DEPENDENCIES = ["i2c"]
|
8 | 9 | AUTO_LOAD = ["sensor", "binary_sensor", "text_sensor"]
|
9 | 10 | MULTI_CONF = True
|
|
13 | 14 | roode_ns = cg.esphome_ns.namespace("roode")
|
14 | 15 | Roode = roode_ns.class_("Roode", cg.PollingComponent)
|
15 | 16 |
|
16 |
| -CONF_ROI_HEIGHT = 'roi_height' |
17 |
| -CONF_ROI_WIDTH = 'roi_width' |
18 |
| -CONF_ADVISED_SENSOR_ORIENTATION = 'advised_sensor_orientation' |
| 17 | +CONF_ROI_HEIGHT = "roi_height" |
| 18 | +CONF_ROI_WIDTH = "roi_width" |
| 19 | +CONF_ADVISED_SENSOR_ORIENTATION = "advised_sensor_orientation" |
19 | 20 | CONF_CALIBRATION = "calibration"
|
20 | 21 | CONF_ROI_CALIBRATION = "roi_calibration"
|
21 | 22 | CONF_INVERT_DIRECTION = "invert_direction"
|
|
30 | 31 | CONF_MANUAL_ACTIVE = "manual_active"
|
31 | 32 | CONF_CALIBRATION_ACTIVE = "calibration_active"
|
32 | 33 | CONF_TIMING_BUDGET = "timing_budget"
|
| 34 | +CONF_USE_SAMPLING = "use_sampling" |
33 | 35 | TYPES = [
|
34 |
| - CONF_RESTORE_VALUES, CONF_INVERT_DIRECTION, |
35 |
| - CONF_ADVISED_SENSOR_ORIENTATION, CONF_I2C_ADDRESS |
| 36 | + CONF_RESTORE_VALUES, |
| 37 | + CONF_INVERT_DIRECTION, |
| 38 | + CONF_ADVISED_SENSOR_ORIENTATION, |
| 39 | + CONF_I2C_ADDRESS, |
| 40 | + CONF_USE_SAMPLING, |
36 | 41 | ]
|
37 |
| -CONFIG_SCHEMA = (cv.Schema({ |
38 |
| - cv.GenerateID(): |
39 |
| - cv.declare_id(Roode), |
40 |
| - cv.Optional(CONF_INVERT_DIRECTION, default='false'): |
41 |
| - cv.boolean, |
42 |
| - cv.Optional(CONF_RESTORE_VALUES, default='false'): |
43 |
| - cv.boolean, |
44 |
| - cv.Optional(CONF_ADVISED_SENSOR_ORIENTATION, default='true'): |
45 |
| - cv.boolean, |
46 |
| - cv.Optional(CONF_I2C_ADDRESS, default=0x29): |
47 |
| - cv.uint8_t, |
48 |
| - cv.Exclusive( |
49 |
| - CONF_CALIBRATION, "mode", f"Only one mode, {CONF_MANUAL} or {CONF_CALIBRATION} is usable"): |
50 |
| - cv.Schema({ |
51 |
| - cv.Optional(CONF_CALIBRATION_ACTIVE, default='true'): |
52 |
| - cv.boolean, |
53 |
| - cv.Optional(CONF_MAX_THRESHOLD_PERCENTAGE, default=85): |
54 |
| - cv.int_range(min=50, max=100), |
55 |
| - cv.Optional(CONF_MIN_THRESHOLD_PERCENTAGE, default=0): |
56 |
| - cv.int_range(min=0, max=100), |
57 |
| - cv.Optional(CONF_ROI_CALIBRATION, default='false'): |
58 |
| - cv.boolean, |
59 |
| - }), |
60 |
| - cv.Exclusive( |
61 |
| - CONF_MANUAL, "mode", f"Only one mode, {CONF_MANUAL} or {CONF_CALIBRATION} is usable"): |
62 |
| - cv.Schema({ |
63 |
| - cv.Optional(CONF_MANUAL_ACTIVE, default='true'): |
64 |
| - cv.boolean, |
65 |
| - cv.Optional(CONF_TIMING_BUDGET, default=10): |
66 |
| - cv.int_range(min=10, max=1000), |
67 |
| - cv.Inclusive( |
68 |
| - CONF_SENSOR_MODE, |
69 |
| - "manual_mode", |
70 |
| - f"{CONF_SENSOR_MODE}, {CONF_ROI_HEIGHT}, {CONF_ROI_WIDTH} and {CONF_MANUAL_THRESHOLD} must be used together", |
71 |
| - ): |
72 |
| - cv.int_range(min=-1, max=2), |
73 |
| - cv.Inclusive( |
74 |
| - CONF_ROI_HEIGHT, |
75 |
| - "manual_mode", |
76 |
| - f"{CONF_SENSOR_MODE}, {CONF_ROI_HEIGHT}, {CONF_ROI_WIDTH} and {CONF_MANUAL_THRESHOLD} must be used together", |
77 |
| - ): |
78 |
| - cv.int_range(min=4, max=16), |
79 |
| - cv.Inclusive( |
80 |
| - CONF_ROI_WIDTH, |
81 |
| - "manual_mode", |
82 |
| - f"{CONF_SENSOR_MODE}, {CONF_ROI_HEIGHT}, {CONF_ROI_WIDTH} and {CONF_MANUAL_THRESHOLD} must be used together", |
83 |
| - ): |
84 |
| - cv.int_range(min=4, max=16), |
85 |
| - cv.Inclusive( |
86 |
| - CONF_MANUAL_THRESHOLD, |
87 |
| - "manual_mode", |
88 |
| - f"{CONF_SENSOR_MODE}, {CONF_ROI_HEIGHT}, {CONF_ROI_WIDTH} and {CONF_MANUAL_THRESHOLD} must be used together", |
89 |
| - ): |
90 |
| - cv.int_range(min=40, max=4000), |
91 |
| - }), |
92 |
| -}).extend(cv.polling_component_schema("100ms"))) |
| 42 | +CONFIG_SCHEMA = cv.Schema( |
| 43 | + { |
| 44 | + cv.GenerateID(): cv.declare_id(Roode), |
| 45 | + cv.Optional(CONF_INVERT_DIRECTION, default="false"): cv.boolean, |
| 46 | + cv.Optional(CONF_RESTORE_VALUES, default="false"): cv.boolean, |
| 47 | + cv.Optional(CONF_ADVISED_SENSOR_ORIENTATION, default="true"): cv.boolean, |
| 48 | + cv.Optional(CONF_USE_SAMPLING, default="false"): cv.boolean, |
| 49 | + cv.Optional(CONF_I2C_ADDRESS, default=0x29): cv.uint8_t, |
| 50 | + cv.Exclusive( |
| 51 | + CONF_CALIBRATION, |
| 52 | + "mode", |
| 53 | + f"Only one mode, {CONF_MANUAL} or {CONF_CALIBRATION} is usable", |
| 54 | + ): cv.Schema( |
| 55 | + { |
| 56 | + cv.Optional(CONF_CALIBRATION_ACTIVE, default="true"): cv.boolean, |
| 57 | + cv.Optional(CONF_MAX_THRESHOLD_PERCENTAGE, default=85): cv.int_range( |
| 58 | + min=50, max=100 |
| 59 | + ), |
| 60 | + cv.Optional(CONF_MIN_THRESHOLD_PERCENTAGE, default=0): cv.int_range( |
| 61 | + min=0, max=100 |
| 62 | + ), |
| 63 | + cv.Optional(CONF_ROI_CALIBRATION, default="false"): cv.boolean, |
| 64 | + } |
| 65 | + ), |
| 66 | + cv.Exclusive( |
| 67 | + CONF_MANUAL, |
| 68 | + "mode", |
| 69 | + f"Only one mode, {CONF_MANUAL} or {CONF_CALIBRATION} is usable", |
| 70 | + ): cv.Schema( |
| 71 | + { |
| 72 | + cv.Optional(CONF_MANUAL_ACTIVE, default="true"): cv.boolean, |
| 73 | + cv.Optional(CONF_TIMING_BUDGET, default=10): cv.int_range( |
| 74 | + min=10, max=1000 |
| 75 | + ), |
| 76 | + cv.Inclusive( |
| 77 | + CONF_SENSOR_MODE, |
| 78 | + "manual_mode", |
| 79 | + f"{CONF_SENSOR_MODE}, {CONF_ROI_HEIGHT}, {CONF_ROI_WIDTH} and {CONF_MANUAL_THRESHOLD} must be used together", |
| 80 | + ): cv.int_range(min=-1, max=2), |
| 81 | + cv.Inclusive( |
| 82 | + CONF_ROI_HEIGHT, |
| 83 | + "manual_mode", |
| 84 | + f"{CONF_SENSOR_MODE}, {CONF_ROI_HEIGHT}, {CONF_ROI_WIDTH} and {CONF_MANUAL_THRESHOLD} must be used together", |
| 85 | + ): cv.int_range(min=4, max=16), |
| 86 | + cv.Inclusive( |
| 87 | + CONF_ROI_WIDTH, |
| 88 | + "manual_mode", |
| 89 | + f"{CONF_SENSOR_MODE}, {CONF_ROI_HEIGHT}, {CONF_ROI_WIDTH} and {CONF_MANUAL_THRESHOLD} must be used together", |
| 90 | + ): cv.int_range(min=4, max=16), |
| 91 | + cv.Inclusive( |
| 92 | + CONF_MANUAL_THRESHOLD, |
| 93 | + "manual_mode", |
| 94 | + f"{CONF_SENSOR_MODE}, {CONF_ROI_HEIGHT}, {CONF_ROI_WIDTH} and {CONF_MANUAL_THRESHOLD} must be used together", |
| 95 | + ): cv.int_range(min=40, max=4000), |
| 96 | + } |
| 97 | + ), |
| 98 | + } |
| 99 | +).extend(cv.polling_component_schema("100ms")) |
93 | 100 |
|
94 | 101 |
|
95 | 102 | async def setup_conf(config, key, hub):
|
|
0 commit comments