esphome 2024.7.2__py3-none-any.whl → 2024.8.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +15 -81
- esphome/automation.py +1 -1
- esphome/codegen.py +53 -53
- esphome/components/ade7953/sensor.py +1 -1
- esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
- esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +5 -2
- esphome/components/airthings_wave_plus/airthings_wave_plus.h +2 -0
- esphome/components/airthings_wave_plus/sensor.py +12 -0
- esphome/components/alarm_control_panel/__init__.py +75 -66
- esphome/components/apds9306/__init__.py +4 -0
- esphome/components/apds9306/apds9306.cpp +151 -0
- esphome/components/apds9306/apds9306.h +66 -0
- esphome/components/apds9306/sensor.py +95 -0
- esphome/components/api/__init__.py +80 -52
- esphome/components/api/api_connection.cpp +14 -1
- esphome/components/api/api_pb2.cpp +33 -4
- esphome/components/api/api_pb2.h +8 -1
- esphome/components/api/api_server.cpp +10 -0
- esphome/components/api/api_server.h +3 -0
- esphome/components/atm90e32/__init__.py +7 -0
- esphome/components/atm90e32/atm90e32.cpp +68 -16
- esphome/components/atm90e32/atm90e32.h +20 -7
- esphome/components/atm90e32/atm90e32_reg.h +2 -0
- esphome/components/atm90e32/button/__init__.py +43 -0
- esphome/components/atm90e32/button/atm90e32_button.cpp +20 -0
- esphome/components/atm90e32/button/atm90e32_button.h +27 -0
- esphome/components/atm90e32/sensor.py +15 -11
- esphome/components/bedjet/bedjet_codec.h +1 -1
- esphome/components/binary/light/binary_light_output.h +3 -2
- esphome/components/binary_sensor/__init__.py +5 -5
- esphome/components/ble_client/__init__.py +3 -3
- esphome/components/ble_client/output/__init__.py +1 -1
- esphome/components/ble_client/sensor/__init__.py +4 -3
- esphome/components/ble_client/switch/__init__.py +2 -1
- esphome/components/ble_client/text_sensor/__init__.py +4 -3
- esphome/components/ble_presence/binary_sensor.py +3 -3
- esphome/components/ble_rssi/sensor.py +2 -2
- esphome/components/ble_scanner/text_sensor.py +1 -1
- esphome/components/bluetooth_proxy/__init__.py +3 -3
- esphome/components/bme68x_bsec2/__init__.py +196 -0
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +523 -0
- esphome/components/bme68x_bsec2/bme68x_bsec2.h +163 -0
- esphome/components/bme68x_bsec2/sensor.py +130 -0
- esphome/components/bme68x_bsec2/text_sensor.py +33 -0
- esphome/components/bme68x_bsec2_i2c/__init__.py +28 -0
- esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +53 -0
- esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.h +28 -0
- esphome/components/bmp3xx/sensor.py +1 -1
- esphome/components/button/__init__.py +4 -4
- esphome/components/climate/__init__.py +5 -5
- esphome/components/climate/climate.h +1 -1
- esphome/components/cover/__init__.py +8 -8
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +11 -7
- esphome/components/cst226/touchscreen/cst226_touchscreen.h +1 -1
- esphome/components/datetime/__init__.py +11 -13
- esphome/components/demo/demo_sensor.h +3 -2
- esphome/components/display/display.cpp +31 -0
- esphome/components/display/display.h +3 -0
- esphome/components/display_menu_base/__init__.py +14 -13
- esphome/components/ens160/sensor.py +1 -1
- esphome/components/esp32/__init__.py +22 -10
- esphome/components/esp32/boards.py +1 -1
- esphome/components/esp32/gpio.py +12 -13
- esphome/components/esp32/gpio_esp32.py +1 -2
- esphome/components/esp32/gpio_esp32_c2.py +1 -2
- esphome/components/esp32/gpio_esp32_c3.py +1 -5
- esphome/components/esp32/gpio_esp32_c6.py +1 -2
- esphome/components/esp32/gpio_esp32_h2.py +1 -2
- esphome/components/esp32/gpio_esp32_s2.py +1 -2
- esphome/components/esp32/gpio_esp32_s3.py +1 -6
- esphome/components/esp32_ble/__init__.py +20 -3
- esphome/components/esp32_ble/ble.cpp +9 -1
- esphome/components/esp32_ble/ble.h +9 -0
- esphome/components/esp32_ble/ble_advertising.cpp +42 -9
- esphome/components/esp32_ble/ble_advertising.h +21 -1
- esphome/components/esp32_ble_beacon/__init__.py +17 -7
- esphome/components/esp32_ble_beacon/esp32_ble_beacon.cpp +45 -113
- esphome/components/esp32_ble_beacon/esp32_ble_beacon.h +17 -19
- esphome/components/esp32_ble_client/__init__.py +0 -1
- esphome/components/esp32_ble_server/__init__.py +2 -3
- esphome/components/esp32_ble_tracker/__init__.py +2 -2
- esphome/components/esp32_improv/__init__.py +2 -4
- esphome/components/ethernet/__init__.py +17 -17
- esphome/components/ethernet_info/text_sensor.py +2 -2
- esphome/components/event/__init__.py +5 -5
- esphome/components/fan/__init__.py +14 -14
- esphome/components/fan/fan.cpp +2 -2
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +1 -1
- esphome/components/fingerprint_grow/fingerprint_grow.h +1 -1
- esphome/components/graphical_display_menu/__init__.py +11 -8
- esphome/components/haier/haier_base.h +2 -2
- esphome/components/homeassistant/__init__.py +8 -1
- esphome/components/homeassistant/number/__init__.py +33 -0
- esphome/components/homeassistant/number/homeassistant_number.cpp +100 -0
- esphome/components/homeassistant/number/homeassistant_number.h +31 -0
- esphome/components/homeassistant/switch/__init__.py +30 -0
- esphome/components/homeassistant/switch/homeassistant_switch.cpp +59 -0
- esphome/components/homeassistant/switch/homeassistant_switch.h +22 -0
- esphome/components/host/__init__.py +3 -7
- esphome/components/http_request/__init__.py +12 -1
- esphome/components/http_request/http_request_arduino.cpp +2 -2
- esphome/components/http_request/http_request_idf.cpp +11 -2
- esphome/components/http_request/http_request_idf.h +10 -0
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +2 -2
- esphome/components/http_request/update/http_request_update.h +2 -1
- esphome/components/hx711/hx711.cpp +10 -1
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +1 -1
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +11 -2
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +2 -0
- esphome/components/ili9xxx/ili9xxx_defines.h +3 -1
- esphome/components/ili9xxx/ili9xxx_display.cpp +9 -22
- esphome/components/ili9xxx/ili9xxx_display.h +5 -7
- esphome/components/ili9xxx/ili9xxx_init.h +4 -4
- esphome/components/improv_base/__init__.py +2 -3
- esphome/components/improv_serial/__init__.py +4 -10
- esphome/components/improv_serial/improv_serial_component.cpp +4 -0
- esphome/components/jsn_sr04t/jsn_sr04t.cpp +18 -1
- esphome/components/jsn_sr04t/jsn_sr04t.h +7 -1
- esphome/components/jsn_sr04t/sensor.py +13 -0
- esphome/components/kalman_combinator/sensor.py +1 -1
- esphome/components/light/__init__.py +16 -15
- esphome/components/light/addressable_light_effect.h +12 -8
- esphome/components/light/automation.h +16 -1
- esphome/components/light/automation.py +21 -0
- esphome/components/light/base_light_effects.h +5 -5
- esphome/components/light/esp_color_correction.h +8 -8
- esphome/components/light/types.py +7 -0
- esphome/components/lock/__init__.py +3 -3
- esphome/components/logger/__init__.py +15 -18
- esphome/components/lvgl/__init__.py +346 -0
- esphome/components/lvgl/automation.py +226 -0
- esphome/components/lvgl/binary_sensor/__init__.py +43 -0
- esphome/components/lvgl/defines.py +508 -0
- esphome/components/lvgl/encoders.py +77 -0
- esphome/components/lvgl/font.cpp +76 -0
- esphome/components/lvgl/helpers.py +49 -0
- esphome/components/lvgl/light/__init__.py +32 -0
- esphome/components/lvgl/light/lvgl_light.h +48 -0
- esphome/components/lvgl/lv_validation.py +303 -0
- esphome/components/lvgl/lvcode.py +349 -0
- esphome/components/lvgl/lvgl_esphome.cpp +407 -0
- esphome/components/lvgl/lvgl_esphome.h +274 -0
- esphome/components/lvgl/lvgl_hal.h +21 -0
- esphome/components/lvgl/number/__init__.py +66 -0
- esphome/components/lvgl/number/lvgl_number.h +34 -0
- esphome/components/lvgl/schemas.py +436 -0
- esphome/components/lvgl/select/__init__.py +55 -0
- esphome/components/lvgl/select/lvgl_select.h +62 -0
- esphome/components/lvgl/sensor/__init__.py +47 -0
- esphome/components/lvgl/styles.py +58 -0
- esphome/components/lvgl/switch/__init__.py +56 -0
- esphome/components/lvgl/switch/lvgl_switch.h +34 -0
- esphome/components/lvgl/text/__init__.py +50 -0
- esphome/components/lvgl/text/lvgl_text.h +34 -0
- esphome/components/lvgl/text_sensor/__init__.py +42 -0
- esphome/components/lvgl/touchscreens.py +45 -0
- esphome/components/lvgl/trigger.py +74 -0
- esphome/components/lvgl/types.py +191 -0
- esphome/components/lvgl/widgets/__init__.py +419 -0
- esphome/components/lvgl/widgets/animimg.py +117 -0
- esphome/components/lvgl/widgets/arc.py +78 -0
- esphome/components/lvgl/widgets/button.py +20 -0
- esphome/components/lvgl/widgets/buttonmatrix.py +275 -0
- esphome/components/lvgl/widgets/checkbox.py +27 -0
- esphome/components/lvgl/widgets/dropdown.py +76 -0
- esphome/components/lvgl/widgets/img.py +85 -0
- esphome/components/lvgl/widgets/keyboard.py +49 -0
- esphome/components/lvgl/widgets/label.py +42 -0
- esphome/components/lvgl/widgets/led.py +29 -0
- esphome/components/lvgl/widgets/line.py +50 -0
- esphome/components/lvgl/widgets/lv_bar.py +55 -0
- esphome/components/lvgl/widgets/meter.py +302 -0
- esphome/components/lvgl/widgets/msgbox.py +134 -0
- esphome/components/lvgl/widgets/obj.py +28 -0
- esphome/components/lvgl/widgets/page.py +113 -0
- esphome/components/lvgl/widgets/roller.py +77 -0
- esphome/components/lvgl/widgets/slider.py +63 -0
- esphome/components/lvgl/widgets/spinbox.py +178 -0
- esphome/components/lvgl/widgets/spinner.py +43 -0
- esphome/components/lvgl/widgets/switch.py +20 -0
- esphome/components/lvgl/widgets/tabview.py +114 -0
- esphome/components/lvgl/widgets/textarea.py +66 -0
- esphome/components/lvgl/widgets/tileview.py +128 -0
- esphome/components/m5stack_8angle/__init__.py +33 -0
- esphome/components/m5stack_8angle/binary_sensor/__init__.py +30 -0
- esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.cpp +17 -0
- esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.h +19 -0
- esphome/components/m5stack_8angle/light/__init__.py +31 -0
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +45 -0
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.h +37 -0
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +74 -0
- esphome/components/m5stack_8angle/m5stack_8angle.h +34 -0
- esphome/components/m5stack_8angle/sensor/__init__.py +66 -0
- esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.cpp +24 -0
- esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.h +27 -0
- esphome/components/matrix_keypad/matrix_keypad.cpp +2 -0
- esphome/components/max31856/sensor.py +5 -5
- esphome/components/media_player/__init__.py +3 -5
- esphome/components/media_player/automation.h +31 -27
- esphome/components/micro_wake_word/__init__.py +20 -25
- esphome/components/micro_wake_word/streaming_model.cpp +6 -4
- esphome/components/microphone/microphone.h +4 -1
- esphome/components/mitsubishi/mitsubishi.cpp +7 -1
- esphome/components/modbus_controller/__init__.py +26 -2
- esphome/components/modbus_controller/automation.h +19 -0
- esphome/components/modbus_controller/const.py +1 -0
- esphome/components/modbus_controller/modbus_controller.cpp +8 -0
- esphome/components/modbus_controller/modbus_controller.h +3 -0
- esphome/components/mqtt/__init__.py +20 -9
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +128 -0
- esphome/components/mqtt/mqtt_alarm_control_panel.h +39 -0
- esphome/components/mqtt/mqtt_backend.h +3 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +4 -1
- esphome/components/mqtt/mqtt_backend_esp32.h +3 -1
- esphome/components/mqtt/mqtt_backend_esp8266.h +3 -1
- esphome/components/mqtt/mqtt_backend_libretiny.h +3 -1
- esphome/components/mqtt/mqtt_client.cpp +16 -3
- esphome/components/mqtt/mqtt_client.h +5 -1
- esphome/components/mqtt/mqtt_component.cpp +32 -4
- esphome/components/mqtt/mqtt_const.h +2 -0
- esphome/components/network/__init__.py +15 -12
- esphome/components/network/ip_address.h +3 -0
- esphome/components/network/util.cpp +2 -1
- esphome/components/network/util.h +3 -1
- esphome/components/nextion/base_component.py +5 -8
- esphome/components/number/__init__.py +7 -8
- esphome/components/online_image/__init__.py +167 -0
- esphome/components/online_image/image_decoder.cpp +44 -0
- esphome/components/online_image/image_decoder.h +112 -0
- esphome/components/online_image/online_image.cpp +283 -0
- esphome/components/online_image/online_image.h +195 -0
- esphome/components/online_image/png_image.cpp +68 -0
- esphome/components/online_image/png_image.h +33 -0
- esphome/components/ota/__init__.py +8 -4
- esphome/components/pid/pid_climate.h +2 -0
- esphome/components/pmwcs3/pmwcs3.cpp +31 -30
- esphome/components/remote_base/pronto_protocol.cpp +0 -3
- esphome/components/remote_transmitter/remote_transmitter.h +1 -1
- esphome/components/rgbct/rgbct_light_output.h +3 -2
- esphome/components/rgbw/rgbw_light_output.h +3 -2
- esphome/components/rgbww/rgbww_light_output.h +3 -2
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +31 -5
- esphome/components/rp2040_pio_led_strip/led_strip.h +5 -0
- esphome/components/rtttl/rtttl.cpp +108 -21
- esphome/components/rtttl/rtttl.h +15 -6
- esphome/components/select/__init__.py +7 -7
- esphome/components/sensor/__init__.py +29 -10
- esphome/components/sensor/filter.cpp +8 -0
- esphome/components/sensor/filter.h +9 -0
- esphome/components/sml/sml_parser.cpp +48 -22
- esphome/components/socket/socket.cpp +11 -14
- esphome/components/speaker/__init__.py +14 -5
- esphome/components/speaker/automation.h +10 -0
- esphome/components/speaker/speaker.h +9 -0
- esphome/components/spi/spi.cpp +0 -6
- esphome/components/spi/spi.h +2 -19
- esphome/components/spi_led_strip/spi_led_strip.h +5 -4
- esphome/components/sprinkler/sprinkler.cpp +2 -2
- esphome/components/sprinkler/sprinkler.h +1 -1
- esphome/components/switch/__init__.py +3 -3
- esphome/components/text/__init__.py +5 -5
- esphome/components/text_sensor/__init__.py +7 -7
- esphome/components/time/__init__.py +8 -8
- esphome/components/touchscreen/binary_sensor/__init__.py +24 -10
- esphome/components/touchscreen/binary_sensor/touchscreen_binary_sensor.cpp +3 -2
- esphome/components/touchscreen/binary_sensor/touchscreen_binary_sensor.h +4 -2
- esphome/components/uart/uart_component_host.cpp +6 -2
- esphome/components/update/__init__.py +33 -15
- esphome/components/update/automation.h +23 -0
- esphome/components/update/update_entity.h +3 -1
- esphome/components/valve/__init__.py +3 -3
- esphome/components/voice_assistant/__init__.py +7 -8
- esphome/components/wake_on_lan/wake_on_lan.cpp +2 -0
- esphome/components/wake_on_lan/wake_on_lan.h +3 -1
- esphome/components/watchdog/__init__.py +1 -0
- esphome/components/{http_request → watchdog}/watchdog.cpp +0 -2
- esphome/components/{http_request → watchdog}/watchdog.h +0 -2
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +5 -5
- esphome/components/web_server/server_index_v3.h +3615 -3603
- esphome/components/web_server/web_server.cpp +0 -209
- esphome/components/web_server/web_server.h +1 -1
- esphome/components/web_server/web_server_v1.cpp +217 -0
- esphome/components/web_server_base/web_server_base.h +1 -0
- esphome/components/wifi/__init__.py +15 -14
- esphome/components/wifi/wifi_component.cpp +2 -0
- esphome/components/wifi/wifi_component.h +7 -1
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +5 -2
- esphome/components/wifi/wifi_component_esp8266.cpp +2 -0
- esphome/components/wifi/wifi_component_esp_idf.cpp +43 -7
- esphome/components/wifi/wifi_component_libretiny.cpp +2 -0
- esphome/components/wifi/wifi_component_pico_w.cpp +2 -0
- esphome/components/wifi/wpa2_eap.py +6 -7
- esphome/components/wifi_info/text_sensor.py +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +2 -0
- esphome/components/wifi_info/wifi_info_text_sensor.h +2 -0
- esphome/components/wifi_signal/sensor.py +1 -1
- esphome/components/wifi_signal/wifi_signal_sensor.cpp +2 -0
- esphome/components/wifi_signal/wifi_signal_sensor.h +2 -1
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +20 -3
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_lywsd02mmc/__init__.py +0 -0
- esphome/components/xiaomi_lywsd02mmc/sensor.py +77 -0
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +73 -0
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +37 -0
- esphome/config.py +17 -19
- esphome/config_validation.py +55 -23
- esphome/const.py +25 -9
- esphome/core/__init__.py +17 -14
- esphome/core/application.h +42 -21
- esphome/core/automation.h +5 -3
- esphome/core/base_automation.h +3 -2
- esphome/core/bytebuffer.cpp +134 -0
- esphome/core/bytebuffer.h +96 -0
- esphome/core/color.h +24 -16
- esphome/core/config.py +3 -3
- esphome/core/defines.h +14 -1
- esphome/core/entity_base.h +2 -2
- esphome/core/entity_helpers.py +1 -2
- esphome/core/gpio.h +0 -18
- esphome/core/helpers.h +1 -1
- esphome/core/optional.h +15 -16
- esphome/coroutine.py +1 -1
- esphome/cpp_generator.py +1 -1
- esphome/cpp_helpers.py +3 -5
- esphome/dashboard/core.py +3 -3
- esphome/dashboard/dashboard.py +3 -3
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/file.py +1 -1
- esphome/dashboard/web_server.py +3 -3
- esphome/external_files.py +5 -3
- esphome/final_validate.py +2 -2
- esphome/git.py +4 -4
- esphome/helpers.py +5 -5
- esphome/loader.py +15 -10
- esphome/mqtt.py +4 -8
- esphome/pins.py +6 -6
- esphome/platformio_api.py +5 -5
- esphome/storage_json.py +2 -1
- esphome/types.py +1 -1
- esphome/util.py +2 -3
- esphome/voluptuous_schema.py +1 -0
- esphome/vscode.py +5 -4
- esphome/wizard.py +1 -1
- esphome/writer.py +7 -7
- esphome/yaml_util.py +3 -3
- esphome/zeroconf.py +1 -1
- {esphome-2024.7.2.dist-info → esphome-2024.8.0.dist-info}/METADATA +3 -3
- {esphome-2024.7.2.dist-info → esphome-2024.8.0.dist-info}/RECORD +353 -247
- {esphome-2024.7.2.dist-info → esphome-2024.8.0.dist-info}/LICENSE +0 -0
- {esphome-2024.7.2.dist-info → esphome-2024.8.0.dist-info}/WHEEL +0 -0
- {esphome-2024.7.2.dist-info → esphome-2024.8.0.dist-info}/entry_points.txt +0 -0
- {esphome-2024.7.2.dist-info → esphome-2024.8.0.dist-info}/top_level.txt +0 -0
@@ -10,7 +10,7 @@ SmlFile::SmlFile(bytes buffer) : buffer_(std::move(buffer)) {
|
|
10
10
|
this->pos_ = 0;
|
11
11
|
while (this->pos_ < this->buffer_.size()) {
|
12
12
|
if (this->buffer_[this->pos_] == 0x00)
|
13
|
-
break; //
|
13
|
+
break; // EndOfSmlMsg
|
14
14
|
|
15
15
|
SmlNode message = SmlNode();
|
16
16
|
if (!this->setup_node(&message))
|
@@ -20,40 +20,66 @@ SmlFile::SmlFile(bytes buffer) : buffer_(std::move(buffer)) {
|
|
20
20
|
}
|
21
21
|
|
22
22
|
bool SmlFile::setup_node(SmlNode *node) {
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
// If the TL field is 0x00, this is the end of the message
|
24
|
+
// (see 6.3.1 of SML protocol definition)
|
25
|
+
if (this->buffer_[this->pos_] == 0x00) {
|
26
|
+
// Increment past this byte and signal that the message is done
|
27
|
+
this->pos_ += 1;
|
28
|
+
return true;
|
29
|
+
}
|
30
|
+
|
31
|
+
// Extract data from initial TL field
|
32
|
+
uint8_t type = (this->buffer_[this->pos_] >> 4) & 0x07; // type without overlength info
|
33
|
+
bool overlength = (this->buffer_[this->pos_] >> 4) & 0x08; // overlength information
|
34
|
+
uint8_t length = this->buffer_[this->pos_] & 0x0f; // length (including TL bytes)
|
35
|
+
|
36
|
+
// Check if we need additional length bytes
|
37
|
+
if (overlength) {
|
38
|
+
// Shift the current length to the higher nibble
|
39
|
+
// and add the lower nibble of the next byte to the length
|
29
40
|
length = (length << 4) + (this->buffer_[this->pos_ + 1] & 0x0f);
|
30
|
-
|
41
|
+
// We are basically done with the first TL field now,
|
42
|
+
// so increment past that, we now point to the second TL field
|
31
43
|
this->pos_ += 1;
|
44
|
+
// Decrement the length for value fields (not lists),
|
45
|
+
// since the byte we just handled is counted as part of the field
|
46
|
+
// in case of values but not for lists
|
47
|
+
if (type != SML_LIST)
|
48
|
+
length -= 1;
|
49
|
+
|
50
|
+
// Technically, this is not enough, the standard allows for more than two length fields.
|
51
|
+
// However I don't think it is very common to have more than 255 entries in a list
|
32
52
|
}
|
33
53
|
|
34
|
-
|
54
|
+
// We are done with the last TL field(s), so advance the position
|
55
|
+
this->pos_ += 1;
|
56
|
+
// and decrement the length for non-list fields
|
57
|
+
if (type != SML_LIST)
|
58
|
+
length -= 1;
|
59
|
+
|
60
|
+
// Check if the buffer length is long enough
|
61
|
+
if (this->pos_ + length > this->buffer_.size())
|
35
62
|
return false;
|
36
63
|
|
37
|
-
node->type = type
|
64
|
+
node->type = type;
|
38
65
|
node->nodes.clear();
|
39
66
|
node->value_bytes.clear();
|
40
67
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
} else if (is_list) { // list
|
45
|
-
this->pos_ += 1;
|
46
|
-
node->nodes.reserve(parse_length);
|
47
|
-
for (size_t i = 0; i != parse_length; i++) {
|
68
|
+
if (type == SML_LIST) {
|
69
|
+
node->nodes.reserve(length);
|
70
|
+
for (size_t i = 0; i != length; i++) {
|
48
71
|
SmlNode child_node = SmlNode();
|
49
72
|
if (!this->setup_node(&child_node))
|
50
73
|
return false;
|
51
74
|
node->nodes.emplace_back(child_node);
|
52
75
|
}
|
53
|
-
} else {
|
54
|
-
|
55
|
-
|
56
|
-
|
76
|
+
} else {
|
77
|
+
// Value starts at the current position
|
78
|
+
// Value ends "length" bytes later,
|
79
|
+
// (since the TL field is counted but already subtracted from length)
|
80
|
+
node->value_bytes = bytes(this->buffer_.begin() + this->pos_, this->buffer_.begin() + this->pos_ + length);
|
81
|
+
// Increment the pointer past all consumed bytes
|
82
|
+
this->pos_ += length;
|
57
83
|
}
|
58
84
|
return true;
|
59
85
|
}
|
@@ -101,7 +127,7 @@ int64_t bytes_to_int(const bytes &buffer) {
|
|
101
127
|
// see https://stackoverflow.com/questions/42534749/signed-extension-from-24-bit-to-32-bit-in-c
|
102
128
|
if (buffer.size() < 8) {
|
103
129
|
const int bits = buffer.size() * 8;
|
104
|
-
const uint64_t m =
|
130
|
+
const uint64_t m = 1ull << (bits - 1);
|
105
131
|
tmp = (tmp ^ m) - m;
|
106
132
|
}
|
107
133
|
|
@@ -19,24 +19,22 @@ std::unique_ptr<Socket> socket_ip(int type, int protocol) {
|
|
19
19
|
|
20
20
|
socklen_t set_sockaddr(struct sockaddr *addr, socklen_t addrlen, const std::string &ip_address, uint16_t port) {
|
21
21
|
#if USE_NETWORK_IPV6
|
22
|
-
if (
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
22
|
+
if (ip_address.find(':') != std::string::npos) {
|
23
|
+
if (addrlen < sizeof(sockaddr_in6)) {
|
24
|
+
errno = EINVAL;
|
25
|
+
return 0;
|
26
|
+
}
|
27
|
+
auto *server = reinterpret_cast<sockaddr_in6 *>(addr);
|
28
|
+
memset(server, 0, sizeof(sockaddr_in6));
|
29
|
+
server->sin6_family = AF_INET6;
|
30
|
+
server->sin6_port = htons(port);
|
30
31
|
|
31
|
-
if (ip_address.find('.') != std::string::npos) {
|
32
|
-
server->sin6_addr.un.u32_addr[3] = inet_addr(ip_address.c_str());
|
33
|
-
} else {
|
34
32
|
ip6_addr_t ip6;
|
35
33
|
inet6_aton(ip_address.c_str(), &ip6);
|
36
34
|
memcpy(server->sin6_addr.un.u32_addr, ip6.addr, sizeof(ip6.addr));
|
35
|
+
return sizeof(sockaddr_in6);
|
37
36
|
}
|
38
|
-
|
39
|
-
#else
|
37
|
+
#endif /* USE_NETWORK_IPV6 */
|
40
38
|
if (addrlen < sizeof(sockaddr_in)) {
|
41
39
|
errno = EINVAL;
|
42
40
|
return 0;
|
@@ -47,7 +45,6 @@ socklen_t set_sockaddr(struct sockaddr *addr, socklen_t addrlen, const std::stri
|
|
47
45
|
server->sin_addr.s_addr = inet_addr(ip_address.c_str());
|
48
46
|
server->sin_port = htons(port);
|
49
47
|
return sizeof(sockaddr_in);
|
50
|
-
#endif /* USE_NETWORK_IPV6 */
|
51
48
|
}
|
52
49
|
|
53
50
|
socklen_t set_sockaddr_any(struct sockaddr *addr, socklen_t addrlen, uint16_t port) {
|
@@ -1,13 +1,11 @@
|
|
1
1
|
from esphome import automation
|
2
|
-
import esphome.config_validation as cv
|
3
|
-
import esphome.codegen as cg
|
4
|
-
|
5
2
|
from esphome.automation import maybe_simple_id
|
6
|
-
|
3
|
+
import esphome.codegen as cg
|
4
|
+
import esphome.config_validation as cv
|
5
|
+
from esphome.const import CONF_DATA, CONF_ID
|
7
6
|
from esphome.core import CORE
|
8
7
|
from esphome.coroutine import coroutine_with_priority
|
9
8
|
|
10
|
-
|
11
9
|
CODEOWNERS = ["@jesserockz"]
|
12
10
|
|
13
11
|
IS_PLATFORM_COMPONENT = True
|
@@ -22,8 +20,12 @@ PlayAction = speaker_ns.class_(
|
|
22
20
|
StopAction = speaker_ns.class_(
|
23
21
|
"StopAction", automation.Action, cg.Parented.template(Speaker)
|
24
22
|
)
|
23
|
+
FinishAction = speaker_ns.class_(
|
24
|
+
"FinishAction", automation.Action, cg.Parented.template(Speaker)
|
25
|
+
)
|
25
26
|
|
26
27
|
IsPlayingCondition = speaker_ns.class_("IsPlayingCondition", automation.Condition)
|
28
|
+
IsStoppedCondition = speaker_ns.class_("IsStoppedCondition", automation.Condition)
|
27
29
|
|
28
30
|
|
29
31
|
async def setup_speaker_core_(var, config):
|
@@ -75,11 +77,18 @@ async def speaker_play_action(config, action_id, template_arg, args):
|
|
75
77
|
automation.register_action("speaker.stop", StopAction, SPEAKER_AUTOMATION_SCHEMA)(
|
76
78
|
speaker_action
|
77
79
|
)
|
80
|
+
automation.register_action("speaker.finish", FinishAction, SPEAKER_AUTOMATION_SCHEMA)(
|
81
|
+
speaker_action
|
82
|
+
)
|
78
83
|
|
79
84
|
automation.register_condition(
|
80
85
|
"speaker.is_playing", IsPlayingCondition, SPEAKER_AUTOMATION_SCHEMA
|
81
86
|
)(speaker_action)
|
82
87
|
|
88
|
+
automation.register_condition(
|
89
|
+
"speaker.is_stopped", IsStoppedCondition, SPEAKER_AUTOMATION_SCHEMA
|
90
|
+
)(speaker_action)
|
91
|
+
|
83
92
|
|
84
93
|
@coroutine_with_priority(100.0)
|
85
94
|
async def to_code(config):
|
@@ -39,10 +39,20 @@ template<typename... Ts> class StopAction : public Action<Ts...>, public Parente
|
|
39
39
|
void play(Ts... x) override { this->parent_->stop(); }
|
40
40
|
};
|
41
41
|
|
42
|
+
template<typename... Ts> class FinishAction : public Action<Ts...>, public Parented<Speaker> {
|
43
|
+
public:
|
44
|
+
void play(Ts... x) override { this->parent_->finish(); }
|
45
|
+
};
|
46
|
+
|
42
47
|
template<typename... Ts> class IsPlayingCondition : public Condition<Ts...>, public Parented<Speaker> {
|
43
48
|
public:
|
44
49
|
bool check(Ts... x) override { return this->parent_->is_running(); }
|
45
50
|
};
|
46
51
|
|
52
|
+
template<typename... Ts> class IsStoppedCondition : public Condition<Ts...>, public Parented<Speaker> {
|
53
|
+
public:
|
54
|
+
bool check(Ts... x) override { return this->parent_->is_stopped(); }
|
55
|
+
};
|
56
|
+
|
47
57
|
} // namespace speaker
|
48
58
|
} // namespace esphome
|
@@ -1,5 +1,9 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
|
+
#include <stddef.h>
|
4
|
+
#include <cstdint>
|
5
|
+
#include <vector>
|
6
|
+
|
3
7
|
namespace esphome {
|
4
8
|
namespace speaker {
|
5
9
|
|
@@ -17,10 +21,15 @@ class Speaker {
|
|
17
21
|
|
18
22
|
virtual void start() = 0;
|
19
23
|
virtual void stop() = 0;
|
24
|
+
// In compare between *STOP()* and *FINISH()*; *FINISH()* will stop after emptying the play buffer,
|
25
|
+
// while *STOP()* will break directly.
|
26
|
+
// When finish() is not implemented on the plateform component it should just do a normal stop.
|
27
|
+
virtual void finish() { this->stop(); }
|
20
28
|
|
21
29
|
virtual bool has_buffered_data() const = 0;
|
22
30
|
|
23
31
|
bool is_running() const { return this->state_ == STATE_RUNNING; }
|
32
|
+
bool is_stopped() const { return this->state_ == STATE_STOPPED; }
|
24
33
|
|
25
34
|
protected:
|
26
35
|
State state_{STATE_STOPPED};
|
esphome/components/spi/spi.cpp
CHANGED
@@ -7,10 +7,6 @@ namespace spi {
|
|
7
7
|
|
8
8
|
const char *const TAG = "spi";
|
9
9
|
|
10
|
-
SPIDelegate *const SPIDelegate::NULL_DELEGATE = // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
11
|
-
new SPIDelegateDummy();
|
12
|
-
// https://bugs.llvm.org/show_bug.cgi?id=48040
|
13
|
-
|
14
10
|
bool SPIDelegate::is_ready() { return true; }
|
15
11
|
|
16
12
|
GPIOPin *const NullPin::NULL_PIN = new NullPin(); // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
@@ -79,8 +75,6 @@ void SPIComponent::dump_config() {
|
|
79
75
|
}
|
80
76
|
}
|
81
77
|
|
82
|
-
void SPIDelegateDummy::begin_transaction() { ESP_LOGE(TAG, "SPIDevice not initialised - did you call spi_setup()?"); }
|
83
|
-
|
84
78
|
uint8_t SPIDelegateBitBash::transfer(uint8_t data) { return this->transfer_(data, 8); }
|
85
79
|
|
86
80
|
void SPIDelegateBitBash::write(uint16_t data, size_t num_bits) { this->transfer_(data, num_bits); }
|
esphome/components/spi/spi.h
CHANGED
@@ -163,8 +163,6 @@ class Utility {
|
|
163
163
|
}
|
164
164
|
};
|
165
165
|
|
166
|
-
class SPIDelegateDummy;
|
167
|
-
|
168
166
|
// represents a device attached to an SPI bus, with a defined clock rate, mode and bit order. On Arduino this is
|
169
167
|
// a thin wrapper over SPIClass.
|
170
168
|
class SPIDelegate {
|
@@ -250,21 +248,6 @@ class SPIDelegate {
|
|
250
248
|
uint32_t data_rate_{1000000};
|
251
249
|
SPIMode mode_{MODE0};
|
252
250
|
GPIOPin *cs_pin_{NullPin::NULL_PIN};
|
253
|
-
static SPIDelegate *const NULL_DELEGATE; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
254
|
-
};
|
255
|
-
|
256
|
-
/**
|
257
|
-
* A dummy SPIDelegate that complains if it's used.
|
258
|
-
*/
|
259
|
-
|
260
|
-
class SPIDelegateDummy : public SPIDelegate {
|
261
|
-
public:
|
262
|
-
SPIDelegateDummy() = default;
|
263
|
-
|
264
|
-
uint8_t transfer(uint8_t data) override { return 0; }
|
265
|
-
void end_transaction() override{};
|
266
|
-
|
267
|
-
void begin_transaction() override;
|
268
251
|
};
|
269
252
|
|
270
253
|
/**
|
@@ -382,7 +365,7 @@ class SPIClient {
|
|
382
365
|
|
383
366
|
virtual void spi_teardown() {
|
384
367
|
this->parent_->unregister_device(this);
|
385
|
-
this->delegate_ =
|
368
|
+
this->delegate_ = nullptr;
|
386
369
|
}
|
387
370
|
|
388
371
|
bool spi_is_ready() { return this->delegate_->is_ready(); }
|
@@ -393,7 +376,7 @@ class SPIClient {
|
|
393
376
|
uint32_t data_rate_{1000000};
|
394
377
|
SPIComponent *parent_{nullptr};
|
395
378
|
GPIOPin *cs_{nullptr};
|
396
|
-
SPIDelegate *delegate_{
|
379
|
+
SPIDelegate *delegate_{nullptr};
|
397
380
|
};
|
398
381
|
|
399
382
|
/**
|
@@ -13,7 +13,7 @@ class SpiLedStrip : public light::AddressableLight,
|
|
13
13
|
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_HIGH, spi::CLOCK_PHASE_TRAILING,
|
14
14
|
spi::DATA_RATE_1MHZ> {
|
15
15
|
public:
|
16
|
-
void setup() { this->spi_setup(); }
|
16
|
+
void setup() override { this->spi_setup(); }
|
17
17
|
|
18
18
|
int32_t size() const override { return this->num_leds_; }
|
19
19
|
|
@@ -43,13 +43,14 @@ class SpiLedStrip : public light::AddressableLight,
|
|
43
43
|
memset(this->buf_, 0, 4);
|
44
44
|
}
|
45
45
|
|
46
|
-
void dump_config() {
|
46
|
+
void dump_config() override {
|
47
47
|
esph_log_config(TAG, "SPI LED Strip:");
|
48
48
|
esph_log_config(TAG, " LEDs: %d", this->num_leds_);
|
49
|
-
if (this->data_rate_ >= spi::DATA_RATE_1MHZ)
|
49
|
+
if (this->data_rate_ >= spi::DATA_RATE_1MHZ) {
|
50
50
|
esph_log_config(TAG, " Data rate: %uMHz", (unsigned) (this->data_rate_ / 1000000));
|
51
|
-
else
|
51
|
+
} else {
|
52
52
|
esph_log_config(TAG, " Data rate: %ukHz", (unsigned) (this->data_rate_ / 1000));
|
53
|
+
}
|
53
54
|
}
|
54
55
|
|
55
56
|
void write_state(light::LightState *state) override {
|
@@ -647,7 +647,7 @@ void Sprinkler::set_valve_run_duration(const optional<size_t> valve_number, cons
|
|
647
647
|
return;
|
648
648
|
}
|
649
649
|
auto call = this->valve_[valve_number.value()].run_duration_number->make_call();
|
650
|
-
if (this->valve_[valve_number.value()].run_duration_number->traits.get_unit_of_measurement() ==
|
650
|
+
if (this->valve_[valve_number.value()].run_duration_number->traits.get_unit_of_measurement() == MIN_STR) {
|
651
651
|
call.set_value(run_duration.value() / 60.0);
|
652
652
|
} else {
|
653
653
|
call.set_value(run_duration.value());
|
@@ -729,7 +729,7 @@ uint32_t Sprinkler::valve_run_duration(const size_t valve_number) {
|
|
729
729
|
return 0;
|
730
730
|
}
|
731
731
|
if (this->valve_[valve_number].run_duration_number != nullptr) {
|
732
|
-
if (this->valve_[valve_number].run_duration_number->traits.get_unit_of_measurement() ==
|
732
|
+
if (this->valve_[valve_number].run_duration_number->traits.get_unit_of_measurement() == MIN_STR) {
|
733
733
|
return static_cast<uint32_t>(roundf(this->valve_[valve_number].run_duration_number->state * 60));
|
734
734
|
} else {
|
735
735
|
return static_cast<uint32_t>(roundf(this->valve_[valve_number].run_duration_number->state));
|
@@ -11,7 +11,7 @@
|
|
11
11
|
namespace esphome {
|
12
12
|
namespace sprinkler {
|
13
13
|
|
14
|
-
const std::string
|
14
|
+
const std::string MIN_STR = "min";
|
15
15
|
|
16
16
|
enum SprinklerState : uint8_t {
|
17
17
|
// NOTE: these states are used by both SprinklerValveOperator and Sprinkler (the controller)!
|
@@ -1,8 +1,8 @@
|
|
1
|
-
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
1
|
from esphome import automation
|
4
2
|
from esphome.automation import Condition, maybe_simple_id
|
3
|
+
import esphome.codegen as cg
|
5
4
|
from esphome.components import mqtt, web_server
|
5
|
+
import esphome.config_validation as cv
|
6
6
|
from esphome.const import (
|
7
7
|
CONF_DEVICE_CLASS,
|
8
8
|
CONF_ENTITY_CATEGORY,
|
@@ -10,11 +10,11 @@ from esphome.const import (
|
|
10
10
|
CONF_ID,
|
11
11
|
CONF_INVERTED,
|
12
12
|
CONF_MQTT_ID,
|
13
|
-
CONF_WEB_SERVER_ID,
|
14
13
|
CONF_ON_TURN_OFF,
|
15
14
|
CONF_ON_TURN_ON,
|
16
15
|
CONF_RESTORE_MODE,
|
17
16
|
CONF_TRIGGER_ID,
|
17
|
+
CONF_WEB_SERVER_ID,
|
18
18
|
DEVICE_CLASS_EMPTY,
|
19
19
|
DEVICE_CLASS_OUTLET,
|
20
20
|
DEVICE_CLASS_SWITCH,
|
@@ -1,18 +1,18 @@
|
|
1
1
|
from typing import Optional
|
2
|
-
|
3
|
-
import esphome.config_validation as cv
|
2
|
+
|
4
3
|
from esphome import automation
|
4
|
+
import esphome.codegen as cg
|
5
5
|
from esphome.components import mqtt, web_server
|
6
|
+
import esphome.config_validation as cv
|
6
7
|
from esphome.const import (
|
7
8
|
CONF_ID,
|
8
9
|
CONF_MODE,
|
10
|
+
CONF_MQTT_ID,
|
9
11
|
CONF_ON_VALUE,
|
10
12
|
CONF_TRIGGER_ID,
|
11
|
-
CONF_MQTT_ID,
|
12
|
-
CONF_WEB_SERVER_ID,
|
13
13
|
CONF_VALUE,
|
14
|
+
CONF_WEB_SERVER_ID,
|
14
15
|
)
|
15
|
-
|
16
16
|
from esphome.core import CORE, coroutine_with_priority
|
17
17
|
from esphome.cpp_helpers import setup_entity
|
18
18
|
|
@@ -1,21 +1,21 @@
|
|
1
|
-
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
1
|
from esphome import automation
|
2
|
+
import esphome.codegen as cg
|
4
3
|
from esphome.components import mqtt, web_server
|
4
|
+
import esphome.config_validation as cv
|
5
5
|
from esphome.const import (
|
6
6
|
CONF_DEVICE_CLASS,
|
7
7
|
CONF_ENTITY_CATEGORY,
|
8
8
|
CONF_FILTERS,
|
9
|
+
CONF_FROM,
|
9
10
|
CONF_ICON,
|
10
11
|
CONF_ID,
|
11
|
-
CONF_ON_VALUE,
|
12
|
-
CONF_ON_RAW_VALUE,
|
13
|
-
CONF_TRIGGER_ID,
|
14
12
|
CONF_MQTT_ID,
|
15
|
-
|
13
|
+
CONF_ON_RAW_VALUE,
|
14
|
+
CONF_ON_VALUE,
|
16
15
|
CONF_STATE,
|
17
|
-
CONF_FROM,
|
18
16
|
CONF_TO,
|
17
|
+
CONF_TRIGGER_ID,
|
18
|
+
CONF_WEB_SERVER_ID,
|
19
19
|
DEVICE_CLASS_DATE,
|
20
20
|
DEVICE_CLASS_EMPTY,
|
21
21
|
DEVICE_CLASS_TIMESTAMP,
|
@@ -1,32 +1,32 @@
|
|
1
|
-
import logging
|
2
1
|
from importlib import resources
|
2
|
+
import logging
|
3
3
|
from typing import Optional
|
4
4
|
|
5
5
|
import tzlocal
|
6
6
|
|
7
|
+
from esphome import automation
|
8
|
+
from esphome.automation import Condition
|
7
9
|
import esphome.codegen as cg
|
8
10
|
import esphome.config_validation as cv
|
9
|
-
from esphome import automation
|
10
11
|
from esphome.const import (
|
11
|
-
|
12
|
+
CONF_AT,
|
12
13
|
CONF_CRON,
|
13
14
|
CONF_DAYS_OF_MONTH,
|
14
15
|
CONF_DAYS_OF_WEEK,
|
16
|
+
CONF_HOUR,
|
15
17
|
CONF_HOURS,
|
18
|
+
CONF_ID,
|
19
|
+
CONF_MINUTE,
|
16
20
|
CONF_MINUTES,
|
17
21
|
CONF_MONTHS,
|
18
22
|
CONF_ON_TIME,
|
19
23
|
CONF_ON_TIME_SYNC,
|
24
|
+
CONF_SECOND,
|
20
25
|
CONF_SECONDS,
|
21
26
|
CONF_TIMEZONE,
|
22
27
|
CONF_TRIGGER_ID,
|
23
|
-
CONF_AT,
|
24
|
-
CONF_SECOND,
|
25
|
-
CONF_HOUR,
|
26
|
-
CONF_MINUTE,
|
27
28
|
)
|
28
29
|
from esphome.core import coroutine_with_priority
|
29
|
-
from esphome.automation import Condition
|
30
30
|
|
31
31
|
_LOGGER = logging.getLogger(__name__)
|
32
32
|
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
|
-
|
4
2
|
from esphome.components import binary_sensor, display
|
5
|
-
|
3
|
+
import esphome.config_validation as cv
|
4
|
+
from esphome.const import CONF_PAGE_ID, CONF_PAGES
|
6
5
|
|
7
|
-
from .. import
|
6
|
+
from .. import CONF_TOUCHSCREEN_ID, TouchListener, Touchscreen, touchscreen_ns
|
8
7
|
|
9
8
|
DEPENDENCIES = ["touchscreen"]
|
10
9
|
|
@@ -22,7 +21,7 @@ CONF_Y_MIN = "y_min"
|
|
22
21
|
CONF_Y_MAX = "y_max"
|
23
22
|
|
24
23
|
|
25
|
-
def
|
24
|
+
def _validate_coords(config):
|
26
25
|
if (
|
27
26
|
config[CONF_X_MAX] < config[CONF_X_MIN]
|
28
27
|
or config[CONF_Y_MAX] < config[CONF_Y_MIN]
|
@@ -33,6 +32,15 @@ def validate_coords(config):
|
|
33
32
|
return config
|
34
33
|
|
35
34
|
|
35
|
+
def _set_pages(config: dict) -> dict:
|
36
|
+
if CONF_PAGES in config or CONF_PAGE_ID not in config:
|
37
|
+
return config
|
38
|
+
|
39
|
+
config = config.copy()
|
40
|
+
config[CONF_PAGES] = [config.pop(CONF_PAGE_ID)]
|
41
|
+
return config
|
42
|
+
|
43
|
+
|
36
44
|
CONFIG_SCHEMA = cv.All(
|
37
45
|
binary_sensor.binary_sensor_schema(TouchscreenBinarySensor)
|
38
46
|
.extend(
|
@@ -42,11 +50,17 @@ CONFIG_SCHEMA = cv.All(
|
|
42
50
|
cv.Required(CONF_X_MAX): cv.int_range(min=0, max=2000),
|
43
51
|
cv.Required(CONF_Y_MIN): cv.int_range(min=0, max=2000),
|
44
52
|
cv.Required(CONF_Y_MAX): cv.int_range(min=0, max=2000),
|
45
|
-
cv.
|
53
|
+
cv.Exclusive(CONF_PAGE_ID, group_of_exclusion=CONF_PAGES): cv.use_id(
|
54
|
+
display.DisplayPage
|
55
|
+
),
|
56
|
+
cv.Exclusive(CONF_PAGES, group_of_exclusion=CONF_PAGES): cv.ensure_list(
|
57
|
+
cv.use_id(display.DisplayPage)
|
58
|
+
),
|
46
59
|
}
|
47
60
|
)
|
48
61
|
.extend(cv.COMPONENT_SCHEMA),
|
49
|
-
|
62
|
+
_validate_coords,
|
63
|
+
_set_pages,
|
50
64
|
)
|
51
65
|
|
52
66
|
|
@@ -64,6 +78,6 @@ async def to_code(config):
|
|
64
78
|
)
|
65
79
|
)
|
66
80
|
|
67
|
-
|
68
|
-
page = await cg.get_variable(
|
69
|
-
cg.add(var.
|
81
|
+
for page_id in config.get(CONF_PAGES, []):
|
82
|
+
page = await cg.get_variable(page_id)
|
83
|
+
cg.add(var.add_page(page))
|
@@ -11,8 +11,9 @@ void TouchscreenBinarySensor::setup() {
|
|
11
11
|
void TouchscreenBinarySensor::touch(TouchPoint tp) {
|
12
12
|
bool touched = (tp.x >= this->x_min_ && tp.x <= this->x_max_ && tp.y >= this->y_min_ && tp.y <= this->y_max_);
|
13
13
|
|
14
|
-
if (this->
|
15
|
-
|
14
|
+
if (!this->pages_.empty()) {
|
15
|
+
auto *current_page = this->parent_->get_display()->get_active_page();
|
16
|
+
touched &= std::find(this->pages_.begin(), this->pages_.end(), current_page) != this->pages_.end();
|
16
17
|
}
|
17
18
|
if (touched) {
|
18
19
|
this->publish_state(true);
|
@@ -6,6 +6,8 @@
|
|
6
6
|
#include "esphome/core/component.h"
|
7
7
|
#include "esphome/core/helpers.h"
|
8
8
|
|
9
|
+
#include <vector>
|
10
|
+
|
9
11
|
namespace esphome {
|
10
12
|
namespace touchscreen {
|
11
13
|
|
@@ -30,14 +32,14 @@ class TouchscreenBinarySensor : public binary_sensor::BinarySensor,
|
|
30
32
|
int16_t get_width() { return this->x_max_ - this->x_min_; }
|
31
33
|
int16_t get_height() { return this->y_max_ - this->y_min_; }
|
32
34
|
|
33
|
-
void
|
35
|
+
void add_page(display::DisplayPage *page) { this->pages_.push_back(page); }
|
34
36
|
|
35
37
|
void touch(TouchPoint tp) override;
|
36
38
|
void release() override;
|
37
39
|
|
38
40
|
protected:
|
39
41
|
int16_t x_min_, x_max_, y_min_, y_max_;
|
40
|
-
display::DisplayPage
|
42
|
+
std::vector<display::DisplayPage *> pages_{};
|
41
43
|
};
|
42
44
|
|
43
45
|
} // namespace touchscreen
|
@@ -5,8 +5,8 @@
|
|
5
5
|
#include "esphome/core/helpers.h"
|
6
6
|
#include "esphome/core/log.h"
|
7
7
|
|
8
|
-
#
|
9
|
-
#error This HostUartComponent implementation is
|
8
|
+
#if !(defined(__linux__) || defined(__APPLE__))
|
9
|
+
#error This HostUartComponent implementation is not supported on this host OS
|
10
10
|
#endif
|
11
11
|
|
12
12
|
#include <stdio.h>
|
@@ -24,6 +24,9 @@
|
|
24
24
|
namespace {
|
25
25
|
|
26
26
|
speed_t get_baud(int baud) {
|
27
|
+
#ifdef __APPLE__
|
28
|
+
return baud;
|
29
|
+
#else
|
27
30
|
switch (baud) {
|
28
31
|
case 50:
|
29
32
|
return B50;
|
@@ -88,6 +91,7 @@ speed_t get_baud(int baud) {
|
|
88
91
|
default:
|
89
92
|
return B0;
|
90
93
|
}
|
94
|
+
#endif
|
91
95
|
}
|
92
96
|
|
93
97
|
} // namespace
|