esphome 2025.6.2__py3-none-any.whl → 2025.7.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 +1 -3
- esphome/codegen.py +2 -0
- esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
- esphome/components/adc/__init__.py +25 -1
- esphome/components/adc/adc_sensor.h +11 -11
- esphome/components/adc/adc_sensor_common.cpp +1 -1
- esphome/components/adc/adc_sensor_esp32.cpp +16 -8
- esphome/components/ade7880/ade7880.h +0 -2
- esphome/components/ads1115/ads1115.h +0 -1
- esphome/components/ads1118/ads1118.h +0 -1
- esphome/components/ags10/ags10.h +0 -2
- esphome/components/aic3204/aic3204.h +0 -1
- esphome/components/alarm_control_panel/__init__.py +5 -2
- esphome/components/alpha3/alpha3.h +0 -1
- esphome/components/am43/cover/am43_cover.h +0 -1
- esphome/components/am43/sensor/am43_sensor.h +0 -1
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
- esphome/components/anova/anova.cpp +5 -1
- esphome/components/anova/anova.h +0 -1
- esphome/components/apds9960/apds9960.cpp +1 -1
- esphome/components/api/__init__.py +57 -21
- esphome/components/api/api_connection.cpp +344 -539
- esphome/components/api/api_connection.h +224 -141
- esphome/components/api/api_frame_helper.cpp +91 -127
- esphome/components/api/api_frame_helper.h +64 -54
- esphome/components/api/api_pb2.cpp +1837 -9044
- esphome/components/api/api_pb2.h +532 -685
- esphome/components/api/api_pb2_dump.cpp +4432 -0
- esphome/components/api/api_pb2_service.cpp +184 -425
- esphome/components/api/api_pb2_service.h +13 -6
- esphome/components/api/api_server.cpp +131 -167
- esphome/components/api/api_server.h +38 -10
- esphome/components/api/client.py +10 -4
- esphome/components/api/custom_api_device.h +8 -0
- esphome/components/api/list_entities.cpp +37 -104
- esphome/components/api/list_entities.h +33 -23
- esphome/components/api/proto.h +532 -26
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- esphome/components/api/user_services.h +2 -0
- esphome/components/as3935_spi/as3935_spi.h +0 -2
- esphome/components/as5600/as5600.h +0 -1
- esphome/components/async_tcp/__init__.py +14 -5
- esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
- esphome/components/atm90e32/atm90e32.cpp +2 -1
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_transfer_buffer.cpp +2 -2
- esphome/components/b_parasite/b_parasite.h +0 -1
- esphome/components/bedjet/bedjet_hub.cpp +5 -1
- esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
- esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
- esphome/components/bh1750/bh1750.cpp +5 -5
- esphome/components/binary_sensor/__init__.py +82 -5
- esphome/components/binary_sensor/automation.h +19 -1
- esphome/components/binary_sensor/binary_sensor.cpp +12 -30
- esphome/components/binary_sensor/binary_sensor.h +11 -25
- esphome/components/binary_sensor/filter.cpp +29 -24
- esphome/components/binary_sensor/filter.h +20 -10
- esphome/components/ble_client/output/ble_binary_output.h +0 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
- esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_sensor.h +0 -1
- esphome/components/ble_client/switch/ble_switch.h +0 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
- esphome/components/ble_presence/ble_presence_device.h +0 -1
- esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
- esphome/components/ble_scanner/ble_scanner.h +0 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
- esphome/components/bme680/sensor.py +1 -1
- esphome/components/bmp581/bmp581.h +0 -2
- esphome/components/button/__init__.py +5 -2
- esphome/components/camera/__init__.py +1 -0
- esphome/components/camera/camera.cpp +22 -0
- esphome/components/camera/camera.h +80 -0
- esphome/components/canbus/__init__.py +1 -0
- esphome/components/cap1188/cap1188.h +0 -1
- esphome/components/captive_portal/__init__.py +12 -2
- esphome/components/captive_portal/captive_portal.cpp +12 -2
- esphome/components/captive_portal/captive_portal.h +5 -2
- esphome/components/ccs811/ccs811.h +0 -2
- esphome/components/climate/__init__.py +5 -2
- esphome/components/cm1106/sensor.py +2 -2
- esphome/components/const/__init__.py +2 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
- esphome/components/copy/button/copy_button.h +0 -1
- esphome/components/copy/cover/copy_cover.h +0 -1
- esphome/components/copy/fan/copy_fan.h +0 -1
- esphome/components/copy/lock/copy_lock.h +0 -1
- esphome/components/copy/number/copy_number.h +0 -1
- esphome/components/copy/select/copy_select.h +0 -1
- esphome/components/copy/sensor/copy_sensor.h +0 -1
- esphome/components/copy/switch/copy_switch.h +0 -1
- esphome/components/copy/text/copy_text.h +0 -1
- esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
- esphome/components/cover/__init__.py +5 -2
- esphome/components/cs5460a/cs5460a.h +0 -1
- esphome/components/datetime/__init__.py +4 -2
- esphome/components/debug/__init__.py +20 -0
- esphome/components/debug/debug_esp32.cpp +2 -0
- esphome/components/deep_sleep/__init__.py +43 -9
- esphome/components/demo/__init__.py +2 -2
- esphome/components/display/display.cpp +4 -3
- esphome/components/display/display.h +0 -2
- esphome/components/display/display_buffer.cpp +1 -1
- esphome/components/ds2484/__init__.py +1 -0
- esphome/components/ds2484/ds2484.cpp +209 -0
- esphome/components/ds2484/ds2484.h +43 -0
- esphome/components/ds2484/one_wire.py +37 -0
- esphome/components/duty_time/duty_time_sensor.h +0 -1
- esphome/components/ens160_base/ens160_base.h +0 -1
- esphome/components/es7210/es7210.h +0 -1
- esphome/components/es7243e/es7243e.h +0 -1
- esphome/components/es8156/es8156.h +0 -1
- esphome/components/es8311/es8311.h +0 -1
- esphome/components/es8388/es8388.h +0 -1
- esphome/components/esp32/__init__.py +103 -135
- esphome/components/esp32/core.cpp +0 -4
- esphome/components/esp32/gpio.h +1 -1
- esphome/components/esp32/helpers.cpp +69 -0
- esphome/components/esp32_ble/ble.cpp +5 -6
- esphome/components/esp32_ble/ble.h +29 -14
- esphome/components/esp32_ble/ble_event.h +6 -6
- esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
- esphome/components/esp32_ble_client/ble_client_base.h +24 -9
- esphome/components/esp32_ble_tracker/__init__.py +2 -8
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
- esphome/components/esp32_camera/__init__.py +112 -98
- esphome/components/esp32_camera/esp32_camera.cpp +41 -31
- esphome/components/esp32_camera/esp32_camera.h +35 -30
- esphome/components/esp32_camera_web_server/__init__.py +2 -1
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
- esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
- esphome/components/esp32_hall/sensor.py +2 -21
- esphome/components/esp32_hosted/__init__.py +101 -0
- esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
- esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
- esphome/components/esp32_rmt/__init__.py +0 -58
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
- esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
- esphome/components/esp32_rmt_led_strip/light.py +14 -76
- esphome/components/esp32_touch/esp32_touch.h +174 -28
- esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +2 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -0
- esphome/components/esp_ldo/__init__.py +10 -8
- esphome/components/esp_ldo/esp_ldo.h +3 -0
- esphome/components/esphome/ota/__init__.py +1 -0
- esphome/components/esphome/ota/ota_esphome.cpp +24 -19
- esphome/components/ethernet/__init__.py +42 -23
- esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
- esphome/components/ethernet/ethernet_component.cpp +69 -29
- esphome/components/ethernet/ethernet_component.h +18 -10
- esphome/components/event/__init__.py +5 -2
- esphome/components/ezo/ezo.h +0 -1
- esphome/components/ezo_pmp/ezo_pmp.h +0 -1
- esphome/components/fan/__init__.py +5 -2
- esphome/components/fan/fan.cpp +4 -0
- esphome/components/feedback/feedback_cover.h +0 -1
- esphome/components/font/__init__.py +92 -82
- esphome/components/font/font.cpp +9 -2
- esphome/components/font/font.h +20 -5
- esphome/components/fs3000/fs3000.h +0 -1
- esphome/components/gcja5/gcja5.h +0 -1
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/gp8403/gp8403.h +0 -1
- esphome/components/gpio/binary_sensor/__init__.py +39 -1
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
- esphome/components/he60r/he60r.h +0 -1
- esphome/components/heatpumpir/climate.py +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +1 -0
- esphome/components/heatpumpir/heatpumpir.h +1 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
- esphome/components/host/__init__.py +3 -1
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/http_request/__init__.py +19 -1
- esphome/components/http_request/http_request.h +1 -1
- esphome/components/http_request/http_request_arduino.cpp +0 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/http_request_idf.cpp +0 -1
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +35 -16
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
- esphome/components/hydreon_rgxx/sensor.py +1 -1
- esphome/components/i2c/__init__.py +23 -11
- esphome/components/i2c/i2c_bus.h +8 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
- esphome/components/i2c/i2c_bus_arduino.h +6 -3
- esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
- esphome/components/i2c_device/i2c_device.h +0 -1
- esphome/components/i2s_audio/__init__.py +2 -10
- esphome/components/i2s_audio/i2s_audio.cpp +1 -5
- esphome/components/i2s_audio/media_player/__init__.py +2 -2
- esphome/components/i2s_audio/speaker/__init__.py +1 -1
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
- esphome/components/iaqcore/iaqcore.h +0 -2
- esphome/components/image/__init__.py +123 -24
- esphome/components/improv_serial/improv_serial_component.cpp +0 -4
- esphome/components/ina219/ina219.cpp +7 -0
- esphome/components/ina219/ina219.h +1 -0
- esphome/components/ina260/ina260.h +0 -2
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
- esphome/components/inkplate6/display.py +15 -0
- esphome/components/inkplate6/inkplate.cpp +2 -2
- esphome/components/integration/integration_sensor.h +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +8 -27
- esphome/components/internal_temperature/sensor.py +0 -26
- esphome/components/interval/interval.h +0 -2
- esphome/components/json/__init__.py +1 -1
- esphome/components/json/json_util.cpp +56 -63
- esphome/components/ld2410/button/__init__.py +3 -3
- esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2410/ld2410.cpp +421 -268
- esphome/components/ld2410/ld2410.h +44 -146
- esphome/components/ld2410/number/__init__.py +2 -2
- esphome/components/ld2410/sensor.py +1 -1
- esphome/components/ld2410/switch/__init__.py +1 -1
- esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.cpp +2 -2
- esphome/components/ld2420/button/reconfig_buttons.cpp +1 -1
- esphome/components/ld2420/ld2420.cpp +252 -147
- esphome/components/ld2420/ld2420.h +52 -126
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/number/gate_config_number.cpp +1 -1
- esphome/components/ld2420/select/operating_mode_select.cpp +1 -1
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.cpp +2 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2420/text_sensor/text_sensor.cpp +2 -2
- esphome/components/ld2450/button/__init__.py +3 -3
- esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2450/ld2450.cpp +384 -232
- esphome/components/ld2450/ld2450.h +60 -69
- esphome/components/ld2450/switch/__init__.py +1 -1
- esphome/components/ledc/ledc_output.cpp +1 -63
- esphome/components/libretiny/__init__.py +5 -3
- esphome/components/libretiny/const.py +5 -0
- esphome/components/libretiny/generate_components.py +1 -0
- esphome/components/libretiny/helpers.cpp +35 -0
- esphome/components/libretiny/lt_component.cpp +5 -3
- esphome/components/light/__init__.py +4 -2
- esphome/components/light/addressable_light.h +3 -3
- esphome/components/light/light_call.cpp +180 -243
- esphome/components/light/light_call.h +72 -20
- esphome/components/light/light_color_values.h +14 -14
- esphome/components/light/light_json_schema.cpp +17 -16
- esphome/components/light/light_state.h +15 -13
- esphome/components/light/transformers.h +2 -2
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +5 -2
- esphome/components/logger/__init__.py +40 -3
- esphome/components/logger/logger.cpp +47 -12
- esphome/components/logger/logger.h +80 -49
- esphome/components/logger/logger_esp32.cpp +3 -3
- esphome/components/lps22/__init__.py +0 -0
- esphome/components/lps22/lps22.cpp +75 -0
- esphome/components/lps22/lps22.h +27 -0
- esphome/components/lps22/sensor.py +58 -0
- esphome/components/ltr390/ltr390.h +0 -1
- esphome/components/ltr501/ltr501.h +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/schemas.py +66 -6
- esphome/components/lvgl/styles.py +24 -16
- esphome/components/lvgl/widgets/__init__.py +12 -2
- esphome/components/lvgl/widgets/lv_bar.py +40 -19
- esphome/components/lvgl/widgets/meter.py +20 -13
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
- esphome/components/max9611/max9611.h +0 -1
- esphome/components/mcp23016/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +1 -1
- esphome/components/mcp4461/__init__.py +1 -1
- esphome/components/mcp4461/output/__init__.py +3 -2
- esphome/components/mcp9600/mcp9600.h +0 -2
- esphome/components/md5/md5.cpp +3 -3
- esphome/components/md5/md5.h +1 -6
- esphome/components/mdns/__init__.py +22 -11
- esphome/components/media_player/__init__.py +4 -3
- esphome/components/micro_wake_word/__init__.py +1 -5
- esphome/components/micro_wake_word/streaming_model.cpp +2 -2
- esphome/components/microphone/microphone.cpp +7 -9
- esphome/components/microphone/microphone.h +0 -2
- esphome/components/mipi_spi/display.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +1 -1
- esphome/components/modbus/modbus.cpp +33 -15
- esphome/components/modbus/modbus.h +9 -0
- esphome/components/modbus_controller/__init__.py +42 -10
- esphome/components/modbus_controller/modbus_controller.cpp +92 -11
- esphome/components/modbus_controller/modbus_controller.h +61 -7
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
- esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
- esphome/components/mpl3115a2/mpl3115a2.h +0 -2
- esphome/components/mqtt/__init__.py +16 -0
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +2 -1
- esphome/components/mqtt/mqtt_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_binary_sensor.cpp +1 -0
- esphome/components/mqtt/mqtt_button.cpp +4 -1
- esphome/components/mqtt/mqtt_client.cpp +17 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/mqtt/mqtt_climate.cpp +6 -4
- esphome/components/mqtt/mqtt_component.cpp +3 -1
- esphome/components/mqtt/mqtt_cover.cpp +1 -0
- esphome/components/mqtt/mqtt_date.cpp +4 -3
- esphome/components/mqtt/mqtt_datetime.cpp +7 -6
- esphome/components/mqtt/mqtt_event.cpp +6 -3
- esphome/components/mqtt/mqtt_fan.cpp +1 -0
- esphome/components/mqtt/mqtt_light.cpp +8 -4
- esphome/components/mqtt/mqtt_lock.cpp +3 -1
- esphome/components/mqtt/mqtt_number.cpp +1 -0
- esphome/components/mqtt/mqtt_select.cpp +2 -1
- esphome/components/mqtt/mqtt_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_switch.cpp +3 -1
- esphome/components/mqtt/mqtt_text.cpp +1 -0
- esphome/components/mqtt/mqtt_text_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_time.cpp +4 -3
- esphome/components/mqtt/mqtt_update.cpp +1 -0
- esphome/components/mqtt/mqtt_valve.cpp +3 -1
- esphome/components/ms8607/ms8607.cpp +1 -1
- esphome/components/ms8607/ms8607.h +0 -1
- esphome/components/neopixelbus/light.py +4 -1
- esphome/components/neopixelbus/neopixelbus_light.h +1 -1
- esphome/components/network/__init__.py +4 -1
- esphome/components/network/ip_address.h +1 -0
- esphome/components/nextion/__init__.py +16 -0
- esphome/components/nextion/base_component.py +1 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
- esphome/components/nextion/display.py +14 -4
- esphome/components/nextion/nextion.cpp +166 -101
- esphome/components/nextion/nextion.h +84 -53
- esphome/components/nextion/nextion_commands.cpp +11 -10
- esphome/components/nextion/nextion_component.cpp +28 -28
- esphome/components/nextion/nextion_component.h +53 -18
- esphome/components/nextion/nextion_component_base.h +3 -0
- esphome/components/nextion/nextion_upload.cpp +36 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
- esphome/components/nextion/nextion_upload_idf.cpp +9 -33
- esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
- esphome/components/nextion/switch/nextion_switch.cpp +1 -1
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
- esphome/components/nfc/nfc.cpp +3 -22
- esphome/components/nfc/nfc.h +3 -3
- esphome/components/number/__init__.py +5 -2
- esphome/components/online_image/__init__.py +9 -1
- esphome/components/online_image/online_image.cpp +17 -7
- esphome/components/online_image/online_image.h +10 -2
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/opentherm/output/output.cpp +1 -1
- esphome/components/openthread/__init__.py +47 -40
- esphome/components/openthread/const.py +1 -0
- esphome/components/openthread/openthread_esp.cpp +27 -5
- esphome/components/opt3001/__init__.py +0 -0
- esphome/components/opt3001/opt3001.cpp +122 -0
- esphome/components/opt3001/opt3001.h +27 -0
- esphome/components/opt3001/sensor.py +35 -0
- esphome/components/ota/__init__.py +17 -0
- esphome/components/ota/ota_backend.h +27 -1
- esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
- esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
- esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
- esphome/components/ota/ota_backend_esp_idf.h +1 -0
- esphome/components/packages/__init__.py +5 -2
- esphome/components/packet_transport/binary_sensor.py +61 -4
- esphome/components/packet_transport/packet_transport.cpp +34 -1
- esphome/components/packet_transport/packet_transport.h +11 -5
- esphome/components/pcf8574/__init__.py +1 -1
- esphome/components/pi4ioe5v6408/__init__.py +84 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
- esphome/components/pmsa003i/pmsa003i.h +0 -1
- esphome/components/pmsx003/pmsx003.h +0 -1
- esphome/components/pn7150/pn7150.cpp +7 -7
- esphome/components/pn7150/pn7150.h +0 -1
- esphome/components/pn7160/pn7160.cpp +7 -7
- esphome/components/pn7160/pn7160.h +0 -1
- esphome/components/preferences/syncer.h +2 -0
- esphome/components/prometheus/prometheus_handler.h +1 -1
- esphome/components/psram/psram.cpp +0 -20
- esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
- esphome/components/pulse_width/pulse_width.h +0 -1
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
- esphome/components/qr_code/__init__.py +13 -10
- esphome/components/qwiic_pir/qwiic_pir.h +0 -1
- esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
- esphome/components/rc522/rc522.h +0 -1
- esphome/components/rdm6300/rdm6300.h +0 -2
- esphome/components/remote_base/__init__.py +7 -5
- esphome/components/remote_base/remote_base.cpp +24 -21
- esphome/components/remote_base/remote_base.h +3 -26
- esphome/components/remote_receiver/__init__.py +40 -46
- esphome/components/remote_receiver/remote_receiver.h +4 -18
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
- esphome/components/remote_transmitter/__init__.py +42 -43
- esphome/components/remote_transmitter/remote_transmitter.h +2 -14
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
- esphome/components/resistance/resistance_sensor.h +0 -1
- esphome/components/rp2040/__init__.py +2 -0
- esphome/components/rp2040/helpers.cpp +55 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
- esphome/components/rtttl/__init__.py +4 -4
- esphome/components/rtttl/rtttl.cpp +10 -1
- esphome/components/ruuvitag/ruuvitag.h +0 -1
- esphome/components/safe_mode/safe_mode.cpp +2 -0
- esphome/components/safe_mode/safe_mode.h +4 -1
- esphome/components/scd30/scd30.h +0 -1
- esphome/components/scd30/sensor.py +2 -2
- esphome/components/scd4x/scd4x.cpp +61 -54
- esphome/components/scd4x/scd4x.h +17 -15
- esphome/components/scd4x/sensor.py +4 -4
- esphome/components/script/script.h +0 -2
- esphome/components/sdp3x/sensor.py +1 -1
- esphome/components/select/__init__.py +5 -2
- esphome/components/sen5x/sen5x.h +0 -1
- esphome/components/senseair/senseair.h +0 -1
- esphome/components/sensor/__init__.py +4 -2
- esphome/components/sensor/filter.cpp +1 -1
- esphome/components/sensor/sensor.cpp +12 -6
- esphome/components/sensor/sensor.h +13 -5
- esphome/components/servo/servo.cpp +2 -2
- esphome/components/servo/servo.h +0 -1
- esphome/components/sfa30/sfa30.h +0 -1
- esphome/components/sgp30/sgp30.h +0 -1
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
- esphome/components/sht4x/sht4x.h +0 -1
- esphome/components/sm300d2/sm300d2.h +0 -2
- esphome/components/smt100/sensor.py +8 -4
- esphome/components/smt100/smt100.cpp +5 -5
- esphome/components/smt100/smt100.h +3 -3
- esphome/components/sn74hc595/__init__.py +1 -1
- esphome/components/sn74hc595/sn74hc595.cpp +5 -4
- esphome/components/sntp/sntp_component.cpp +9 -3
- esphome/components/sntp/time.py +2 -0
- esphome/components/socket/__init__.py +17 -0
- esphome/components/spi/__init__.py +27 -6
- esphome/components/spi/spi.cpp +3 -2
- esphome/components/spi/spi.h +9 -3
- esphome/components/spi/spi_arduino.cpp +3 -5
- esphome/components/spi/spi_esp_idf.cpp +40 -21
- esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
- esphome/components/sps30/sps30.h +0 -1
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +0 -4
- esphome/components/status/status_binary_sensor.h +0 -2
- esphome/components/substitutions/__init__.py +81 -21
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +1 -5
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/usb_host/usb_host_client.cpp +10 -10
- esphome/components/usb_uart/cp210x.cpp +1 -1
- esphome/components/usb_uart/usb_uart.cpp +41 -44
- esphome/components/usb_uart/usb_uart.h +4 -3
- esphome/components/valve/__init__.py +5 -2
- esphome/components/vbus/vbus.h +0 -1
- esphome/components/veml3235/veml3235.h +0 -1
- esphome/components/veml7700/veml7700.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
- esphome/components/voice_assistant/voice_assistant.cpp +4 -4
- esphome/components/watchdog/watchdog.cpp +0 -4
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
- esphome/components/web_server/__init__.py +34 -19
- esphome/components/web_server/ota/__init__.py +32 -0
- esphome/components/web_server/ota/ota_web_server.cpp +210 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/web_server.cpp +324 -439
- esphome/components/web_server/web_server.h +33 -23
- esphome/components/web_server/web_server_v1.cpp +4 -5
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/components/web_server_base/web_server_base.cpp +2 -94
- esphome/components/web_server_base/web_server_base.h +5 -25
- esphome/components/web_server_idf/multipart.cpp +254 -0
- esphome/components/web_server_idf/multipart.h +86 -0
- esphome/components/web_server_idf/utils.cpp +32 -0
- esphome/components/web_server_idf/utils.h +10 -0
- esphome/components/web_server_idf/web_server_idf.cpp +164 -16
- esphome/components/web_server_idf/web_server_idf.h +11 -10
- esphome/components/wiegand/wiegand.cpp +2 -2
- esphome/components/wifi/__init__.py +18 -0
- esphome/components/wifi/wifi_component.cpp +17 -22
- esphome/components/wifi/wifi_component.h +27 -23
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
- esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
- esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
- esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
- esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
- esphome/components/wireguard/__init__.py +2 -11
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
- esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
- esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
- esphome/components/zyaura/zyaura.h +0 -1
- esphome/config.py +88 -22
- esphome/config_helpers.py +74 -1
- esphome/config_validation.py +12 -1
- esphome/const.py +65 -10
- esphome/core/__init__.py +18 -2
- esphome/core/application.cpp +169 -10
- esphome/core/application.h +145 -165
- esphome/core/area.h +19 -0
- esphome/core/automation.h +58 -9
- esphome/core/color.cpp +3 -5
- esphome/core/color.h +16 -16
- esphome/core/component.cpp +156 -22
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +11 -9
- esphome/core/component_iterator.h +12 -10
- esphome/core/config.py +155 -6
- esphome/core/controller.cpp +4 -2
- esphome/core/controller.h +1 -1
- esphome/core/datatypes.h +2 -2
- esphome/core/defines.h +17 -2
- esphome/core/device.h +20 -0
- esphome/core/entity_base.cpp +20 -15
- esphome/core/entity_base.h +76 -0
- esphome/core/entity_helpers.py +168 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +165 -105
- esphome/core/lock_free_queue.h +151 -0
- esphome/core/log.cpp +2 -2
- esphome/core/log.h +2 -0
- esphome/core/optional.h +5 -0
- esphome/core/ring_buffer.cpp +2 -2
- esphome/core/scheduler.cpp +275 -103
- esphome/core/scheduler.h +154 -17
- esphome/core/time.cpp +5 -5
- esphome/core/time.h +5 -5
- esphome/cpp_generator.py +17 -0
- esphome/cpp_helpers.py +0 -22
- esphome/cpp_types.py +3 -1
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/text.py +5 -21
- esphome/dashboard/web_server.py +9 -1
- esphome/helpers.py +47 -0
- esphome/loader.py +15 -1
- esphome/pins.py +14 -8
- esphome/platformio_api.py +2 -0
- esphome/wizard.py +17 -4
- esphome/writer.py +44 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/RECORD +639 -580
- esphome/components/api/api_pb2_size.h +0 -361
- esphome/components/esp32_ble/ble_event_pool.h +0 -72
- esphome/components/esp32_ble/queue.h +0 -85
- esphome/components/esp32_hall/esp32_hall.cpp +0 -25
- esphome/components/esp32_hall/esp32_hall.h +0 -23
- esphome/components/esp32_touch/esp32_touch.cpp +0 -355
- esphome/components/ld2410/button/reset_button.cpp +0 -9
- esphome/components/ld2450/button/reset_button.cpp +0 -9
- esphome/components/openthread/tlv.py +0 -65
- /esphome/{dashboard/enum.py → enum.py} +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/WHEEL +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
|
@@ -6,7 +6,7 @@ from esphome.config_validation import Invalid
|
|
|
6
6
|
from esphome.const import CONF_DEFAULT, CONF_GROUP, CONF_ID, CONF_STATE, CONF_TYPE
|
|
7
7
|
from esphome.core import ID, TimePeriod
|
|
8
8
|
from esphome.coroutine import FakeAwaitable
|
|
9
|
-
from esphome.cpp_generator import
|
|
9
|
+
from esphome.cpp_generator import MockObj
|
|
10
10
|
|
|
11
11
|
from ..defines import (
|
|
12
12
|
CONF_FLEX_ALIGN_CROSS,
|
|
@@ -453,7 +453,17 @@ async def widget_to_code(w_cnfig, w_type: WidgetType, parent):
|
|
|
453
453
|
|
|
454
454
|
w = Widget.create(wid, var, spec, w_cnfig)
|
|
455
455
|
if theme := theme_widget_map.get(w_type):
|
|
456
|
-
|
|
456
|
+
for part, states in theme.items():
|
|
457
|
+
part = "LV_PART_" + part.upper()
|
|
458
|
+
for state, style in states.items():
|
|
459
|
+
state = "LV_STATE_" + state.upper()
|
|
460
|
+
if state == "LV_STATE_DEFAULT":
|
|
461
|
+
lv_state = literal(part)
|
|
462
|
+
elif part == "LV_PART_MAIN":
|
|
463
|
+
lv_state = literal(state)
|
|
464
|
+
else:
|
|
465
|
+
lv_state = join_enums((state, part))
|
|
466
|
+
lv.obj_add_style(w.obj, style, lv_state)
|
|
457
467
|
await set_obj_properties(w, w_cnfig)
|
|
458
468
|
await add_widgets(w, w_cnfig)
|
|
459
469
|
await spec.to_code(w, w_cnfig)
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import esphome.config_validation as cv
|
|
2
2
|
from esphome.const import CONF_MAX_VALUE, CONF_MIN_VALUE, CONF_MODE, CONF_VALUE
|
|
3
3
|
|
|
4
|
-
from ..defines import
|
|
5
|
-
|
|
4
|
+
from ..defines import (
|
|
5
|
+
BAR_MODES,
|
|
6
|
+
CONF_ANIMATED,
|
|
7
|
+
CONF_INDICATOR,
|
|
8
|
+
CONF_MAIN,
|
|
9
|
+
CONF_START_VALUE,
|
|
10
|
+
literal,
|
|
11
|
+
)
|
|
12
|
+
from ..lv_validation import animated, lv_int
|
|
6
13
|
from ..lvcode import lv
|
|
7
14
|
from ..types import LvNumber, NumberType
|
|
8
15
|
from . import Widget
|
|
@@ -10,22 +17,30 @@ from . import Widget
|
|
|
10
17
|
# Note this file cannot be called "bar.py" because that name is disallowed.
|
|
11
18
|
|
|
12
19
|
CONF_BAR = "bar"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def validate_bar(config):
|
|
23
|
+
if config.get(CONF_MODE) != "LV_BAR_MODE_RANGE" and CONF_START_VALUE in config:
|
|
24
|
+
raise cv.Invalid(
|
|
25
|
+
f"{CONF_START_VALUE} is only allowed when {CONF_MODE} is set to 'RANGE'"
|
|
26
|
+
)
|
|
27
|
+
if (CONF_MIN_VALUE in config) != (CONF_MAX_VALUE in config):
|
|
28
|
+
raise cv.Invalid(
|
|
29
|
+
f"If either {CONF_MIN_VALUE} or {CONF_MAX_VALUE} is set, both must be set"
|
|
30
|
+
)
|
|
31
|
+
return config
|
|
32
|
+
|
|
19
33
|
|
|
20
34
|
BAR_SCHEMA = cv.Schema(
|
|
21
35
|
{
|
|
22
|
-
cv.Optional(CONF_VALUE):
|
|
23
|
-
cv.Optional(
|
|
24
|
-
cv.Optional(
|
|
25
|
-
cv.Optional(
|
|
36
|
+
cv.Optional(CONF_VALUE): lv_int,
|
|
37
|
+
cv.Optional(CONF_START_VALUE): lv_int,
|
|
38
|
+
cv.Optional(CONF_MIN_VALUE): lv_int,
|
|
39
|
+
cv.Optional(CONF_MAX_VALUE): lv_int,
|
|
40
|
+
cv.Optional(CONF_MODE): BAR_MODES.one_of,
|
|
26
41
|
cv.Optional(CONF_ANIMATED, default=True): animated,
|
|
27
42
|
}
|
|
28
|
-
)
|
|
43
|
+
).add_extra(validate_bar)
|
|
29
44
|
|
|
30
45
|
|
|
31
46
|
class BarType(NumberType):
|
|
@@ -35,17 +50,23 @@ class BarType(NumberType):
|
|
|
35
50
|
LvNumber("lv_bar_t"),
|
|
36
51
|
parts=(CONF_MAIN, CONF_INDICATOR),
|
|
37
52
|
schema=BAR_SCHEMA,
|
|
38
|
-
modify_schema=BAR_MODIFY_SCHEMA,
|
|
39
53
|
)
|
|
40
54
|
|
|
41
55
|
async def to_code(self, w: Widget, config):
|
|
42
56
|
var = w.obj
|
|
57
|
+
if mode := config.get(CONF_MODE):
|
|
58
|
+
lv.bar_set_mode(var, literal(mode))
|
|
59
|
+
is_animated = literal(config[CONF_ANIMATED])
|
|
43
60
|
if CONF_MIN_VALUE in config:
|
|
44
|
-
lv.bar_set_range(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
61
|
+
lv.bar_set_range(
|
|
62
|
+
var,
|
|
63
|
+
await lv_int.process(config[CONF_MIN_VALUE]),
|
|
64
|
+
await lv_int.process(config[CONF_MAX_VALUE]),
|
|
65
|
+
)
|
|
66
|
+
if value := await lv_int.process(config.get(CONF_VALUE)):
|
|
67
|
+
lv.bar_set_value(var, value, is_animated)
|
|
68
|
+
if start_value := await lv_int.process(config.get(CONF_START_VALUE)):
|
|
69
|
+
lv.bar_set_start_value(var, start_value, is_animated)
|
|
49
70
|
|
|
50
71
|
@property
|
|
51
72
|
def animated(self):
|
|
@@ -29,9 +29,9 @@ from ..defines import (
|
|
|
29
29
|
)
|
|
30
30
|
from ..helpers import add_lv_use, lvgl_components_required
|
|
31
31
|
from ..lv_validation import (
|
|
32
|
-
angle,
|
|
33
32
|
get_end_value,
|
|
34
33
|
get_start_value,
|
|
34
|
+
lv_angle,
|
|
35
35
|
lv_bool,
|
|
36
36
|
lv_color,
|
|
37
37
|
lv_float,
|
|
@@ -162,7 +162,7 @@ SCALE_SCHEMA = cv.Schema(
|
|
|
162
162
|
cv.Optional(CONF_RANGE_FROM, default=0.0): cv.float_,
|
|
163
163
|
cv.Optional(CONF_RANGE_TO, default=100.0): cv.float_,
|
|
164
164
|
cv.Optional(CONF_ANGLE_RANGE, default=270): cv.int_range(0, 360),
|
|
165
|
-
cv.Optional(CONF_ROTATION):
|
|
165
|
+
cv.Optional(CONF_ROTATION): lv_angle,
|
|
166
166
|
cv.Optional(CONF_INDICATORS): cv.ensure_list(INDICATOR_SCHEMA),
|
|
167
167
|
}
|
|
168
168
|
)
|
|
@@ -187,7 +187,7 @@ class MeterType(WidgetType):
|
|
|
187
187
|
for scale_conf in config.get(CONF_SCALES, ()):
|
|
188
188
|
rotation = 90 + (360 - scale_conf[CONF_ANGLE_RANGE]) / 2
|
|
189
189
|
if CONF_ROTATION in scale_conf:
|
|
190
|
-
rotation = scale_conf[CONF_ROTATION]
|
|
190
|
+
rotation = await lv_angle.process(scale_conf[CONF_ROTATION])
|
|
191
191
|
with LocalVariable(
|
|
192
192
|
"meter_var", "lv_meter_scale_t", lv_expr.meter_add_scale(var)
|
|
193
193
|
) as meter_var:
|
|
@@ -205,21 +205,20 @@ class MeterType(WidgetType):
|
|
|
205
205
|
var,
|
|
206
206
|
meter_var,
|
|
207
207
|
ticks[CONF_COUNT],
|
|
208
|
-
ticks[CONF_WIDTH],
|
|
209
|
-
ticks[CONF_LENGTH],
|
|
208
|
+
await size.process(ticks[CONF_WIDTH]),
|
|
209
|
+
await size.process(ticks[CONF_LENGTH]),
|
|
210
210
|
color,
|
|
211
211
|
)
|
|
212
212
|
if CONF_MAJOR in ticks:
|
|
213
213
|
major = ticks[CONF_MAJOR]
|
|
214
|
-
color = await lv_color.process(major[CONF_COLOR])
|
|
215
214
|
lv.meter_set_scale_major_ticks(
|
|
216
215
|
var,
|
|
217
216
|
meter_var,
|
|
218
217
|
major[CONF_STRIDE],
|
|
219
|
-
major[CONF_WIDTH],
|
|
220
|
-
major[CONF_LENGTH],
|
|
221
|
-
|
|
222
|
-
major[CONF_LABEL_GAP],
|
|
218
|
+
await size.process(major[CONF_WIDTH]),
|
|
219
|
+
await size.process(major[CONF_LENGTH]),
|
|
220
|
+
await lv_color.process(major[CONF_COLOR]),
|
|
221
|
+
await size.process(major[CONF_LABEL_GAP]),
|
|
223
222
|
)
|
|
224
223
|
for indicator in scale_conf.get(CONF_INDICATORS, ()):
|
|
225
224
|
(t, v) = next(iter(indicator.items()))
|
|
@@ -233,7 +232,11 @@ class MeterType(WidgetType):
|
|
|
233
232
|
lv_assign(
|
|
234
233
|
ivar,
|
|
235
234
|
lv_expr.meter_add_needle_line(
|
|
236
|
-
var,
|
|
235
|
+
var,
|
|
236
|
+
meter_var,
|
|
237
|
+
await size.process(v[CONF_WIDTH]),
|
|
238
|
+
color,
|
|
239
|
+
await size.process(v[CONF_R_MOD]),
|
|
237
240
|
),
|
|
238
241
|
)
|
|
239
242
|
if t == CONF_ARC:
|
|
@@ -241,7 +244,11 @@ class MeterType(WidgetType):
|
|
|
241
244
|
lv_assign(
|
|
242
245
|
ivar,
|
|
243
246
|
lv_expr.meter_add_arc(
|
|
244
|
-
var,
|
|
247
|
+
var,
|
|
248
|
+
meter_var,
|
|
249
|
+
await size.process(v[CONF_WIDTH]),
|
|
250
|
+
color,
|
|
251
|
+
await size.process(v[CONF_R_MOD]),
|
|
245
252
|
),
|
|
246
253
|
)
|
|
247
254
|
if t == CONF_TICK_STYLE:
|
|
@@ -257,7 +264,7 @@ class MeterType(WidgetType):
|
|
|
257
264
|
color_start,
|
|
258
265
|
color_end,
|
|
259
266
|
v[CONF_LOCAL],
|
|
260
|
-
v[CONF_WIDTH],
|
|
267
|
+
size.process(v[CONF_WIDTH]),
|
|
261
268
|
),
|
|
262
269
|
)
|
|
263
270
|
if t == CONF_IMAGE:
|
|
@@ -8,7 +8,7 @@ namespace m5stack_8angle {
|
|
|
8
8
|
static const char *const TAG = "m5stack_8angle.light";
|
|
9
9
|
|
|
10
10
|
void M5Stack8AngleLightOutput::setup() {
|
|
11
|
-
|
|
11
|
+
RAMAllocator<uint8_t> allocator;
|
|
12
12
|
this->buf_ = allocator.allocate(M5STACK_8ANGLE_NUM_LEDS * M5STACK_8ANGLE_BYTES_PER_LED);
|
|
13
13
|
if (this->buf_ == nullptr) {
|
|
14
14
|
ESP_LOGE(TAG, "Failed to allocate buffer of size %u", M5STACK_8ANGLE_NUM_LEDS * M5STACK_8ANGLE_BYTES_PER_LED);
|
|
@@ -38,7 +38,6 @@ class MAX9611Component : public PollingComponent, public i2c::I2CDevice {
|
|
|
38
38
|
public:
|
|
39
39
|
void setup() override;
|
|
40
40
|
void dump_config() override;
|
|
41
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
42
41
|
void update() override;
|
|
43
42
|
void set_voltage_sensor(sensor::Sensor *vs) { voltage_sensor_ = vs; }
|
|
44
43
|
void set_current_sensor(sensor::Sensor *cs) { current_sensor_ = cs; }
|
|
@@ -60,7 +60,7 @@ MCP23XXX_PIN_SCHEMA = pins.gpio_base_schema(
|
|
|
60
60
|
cv.int_range(min=0, max=15),
|
|
61
61
|
modes=[CONF_INPUT, CONF_OUTPUT, CONF_PULLUP],
|
|
62
62
|
mode_validator=validate_mode,
|
|
63
|
-
|
|
63
|
+
invertible=True,
|
|
64
64
|
).extend(
|
|
65
65
|
{
|
|
66
66
|
cv.Required(CONF_MCP23XXX): cv.use_id(MCP23XXXBase),
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import esphome.codegen as cg
|
|
2
|
-
import esphome.config_validation as cv
|
|
3
2
|
from esphome.components import output
|
|
3
|
+
import esphome.config_validation as cv
|
|
4
4
|
from esphome.const import CONF_CHANNEL, CONF_ID, CONF_INITIAL_VALUE
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
from .. import CONF_MCP4461_ID, Mcp4461Component, mcp4461_ns
|
|
6
7
|
|
|
7
8
|
DEPENDENCIES = ["mcp4461"]
|
|
8
9
|
|
|
@@ -24,8 +24,6 @@ class MCP9600Component : public PollingComponent, public i2c::I2CDevice {
|
|
|
24
24
|
void dump_config() override;
|
|
25
25
|
void update() override;
|
|
26
26
|
|
|
27
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
28
|
-
|
|
29
27
|
void set_hot_junction(sensor::Sensor *hot_junction) { this->hot_junction_sensor_ = hot_junction; }
|
|
30
28
|
void set_cold_junction(sensor::Sensor *cold_junction) { this->cold_junction_sensor_ = cold_junction; }
|
|
31
29
|
void set_thermocouple_type(MCP9600ThermocoupleType thermocouple_type) {
|
esphome/components/md5/md5.cpp
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
namespace esphome {
|
|
8
8
|
namespace md5 {
|
|
9
9
|
|
|
10
|
-
#if defined(USE_ARDUINO) && !defined(USE_RP2040)
|
|
10
|
+
#if defined(USE_ARDUINO) && !defined(USE_RP2040) && !defined(USE_ESP32)
|
|
11
11
|
void MD5Digest::init() {
|
|
12
12
|
memset(this->digest_, 0, 16);
|
|
13
13
|
MD5Init(&this->ctx_);
|
|
@@ -18,7 +18,7 @@ void MD5Digest::add(const uint8_t *data, size_t len) { MD5Update(&this->ctx_, da
|
|
|
18
18
|
void MD5Digest::calculate() { MD5Final(this->digest_, &this->ctx_); }
|
|
19
19
|
#endif // USE_ARDUINO && !USE_RP2040
|
|
20
20
|
|
|
21
|
-
#ifdef
|
|
21
|
+
#ifdef USE_ESP32
|
|
22
22
|
void MD5Digest::init() {
|
|
23
23
|
memset(this->digest_, 0, 16);
|
|
24
24
|
esp_rom_md5_init(&this->ctx_);
|
|
@@ -27,7 +27,7 @@ void MD5Digest::init() {
|
|
|
27
27
|
void MD5Digest::add(const uint8_t *data, size_t len) { esp_rom_md5_update(&this->ctx_, data, len); }
|
|
28
28
|
|
|
29
29
|
void MD5Digest::calculate() { esp_rom_md5_final(this->digest_, &this->ctx_); }
|
|
30
|
-
#endif //
|
|
30
|
+
#endif // USE_ESP32
|
|
31
31
|
|
|
32
32
|
#ifdef USE_RP2040
|
|
33
33
|
void MD5Digest::init() {
|
esphome/components/md5/md5.h
CHANGED
|
@@ -3,16 +3,11 @@
|
|
|
3
3
|
#include "esphome/core/defines.h"
|
|
4
4
|
#ifdef USE_MD5
|
|
5
5
|
|
|
6
|
-
#ifdef
|
|
6
|
+
#ifdef USE_ESP32
|
|
7
7
|
#include "esp_rom_md5.h"
|
|
8
8
|
#define MD5_CTX_TYPE md5_context_t
|
|
9
9
|
#endif
|
|
10
10
|
|
|
11
|
-
#if defined(USE_ARDUINO) && defined(USE_ESP32)
|
|
12
|
-
#include "rom/md5_hash.h"
|
|
13
|
-
#define MD5_CTX_TYPE MD5Context
|
|
14
|
-
#endif
|
|
15
|
-
|
|
16
11
|
#if defined(USE_ARDUINO) && defined(USE_ESP8266)
|
|
17
12
|
#include <md5.h>
|
|
18
13
|
#define MD5_CTX_TYPE md5_context_t
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import esphome.codegen as cg
|
|
2
2
|
from esphome.components.esp32 import add_idf_component
|
|
3
|
+
from esphome.config_helpers import filter_source_files_from_platform
|
|
3
4
|
import esphome.config_validation as cv
|
|
4
5
|
from esphome.const import (
|
|
5
6
|
CONF_DISABLED,
|
|
@@ -8,8 +9,7 @@ from esphome.const import (
|
|
|
8
9
|
CONF_PROTOCOL,
|
|
9
10
|
CONF_SERVICE,
|
|
10
11
|
CONF_SERVICES,
|
|
11
|
-
|
|
12
|
-
KEY_FRAMEWORK_VERSION,
|
|
12
|
+
PlatformFramework,
|
|
13
13
|
)
|
|
14
14
|
from esphome.core import CORE, coroutine_with_priority
|
|
15
15
|
|
|
@@ -85,15 +85,8 @@ async def to_code(config):
|
|
|
85
85
|
elif CORE.is_rp2040:
|
|
86
86
|
cg.add_library("LEAmDNS", None)
|
|
87
87
|
|
|
88
|
-
if CORE.using_esp_idf
|
|
89
|
-
|
|
90
|
-
):
|
|
91
|
-
add_idf_component(
|
|
92
|
-
name="mdns",
|
|
93
|
-
repo="https://github.com/espressif/esp-protocols.git",
|
|
94
|
-
ref="mdns-v1.8.2",
|
|
95
|
-
path="components/mdns",
|
|
96
|
-
)
|
|
88
|
+
if CORE.using_esp_idf:
|
|
89
|
+
add_idf_component(name="espressif/mdns", ref="1.8.2")
|
|
97
90
|
|
|
98
91
|
cg.add_define("USE_MDNS")
|
|
99
92
|
|
|
@@ -117,3 +110,21 @@ async def to_code(config):
|
|
|
117
110
|
)
|
|
118
111
|
|
|
119
112
|
cg.add(var.add_extra_service(exp))
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
FILTER_SOURCE_FILES = filter_source_files_from_platform(
|
|
116
|
+
{
|
|
117
|
+
"mdns_esp32.cpp": {
|
|
118
|
+
PlatformFramework.ESP32_ARDUINO,
|
|
119
|
+
PlatformFramework.ESP32_IDF,
|
|
120
|
+
},
|
|
121
|
+
"mdns_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
|
|
122
|
+
"mdns_host.cpp": {PlatformFramework.HOST_NATIVE},
|
|
123
|
+
"mdns_rp2040.cpp": {PlatformFramework.RP2040_ARDUINO},
|
|
124
|
+
"mdns_libretiny.cpp": {
|
|
125
|
+
PlatformFramework.BK72XX_ARDUINO,
|
|
126
|
+
PlatformFramework.RTL87XX_ARDUINO,
|
|
127
|
+
PlatformFramework.LN882X_ARDUINO,
|
|
128
|
+
},
|
|
129
|
+
}
|
|
130
|
+
)
|
|
@@ -11,9 +11,9 @@ from esphome.const import (
|
|
|
11
11
|
CONF_VOLUME,
|
|
12
12
|
)
|
|
13
13
|
from esphome.core import CORE
|
|
14
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
14
15
|
from esphome.coroutine import coroutine_with_priority
|
|
15
16
|
from esphome.cpp_generator import MockObjClass
|
|
16
|
-
from esphome.cpp_helpers import setup_entity
|
|
17
17
|
|
|
18
18
|
CODEOWNERS = ["@jesserockz"]
|
|
19
19
|
|
|
@@ -81,7 +81,7 @@ IsAnnouncingCondition = media_player_ns.class_(
|
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
async def setup_media_player_core_(var, config):
|
|
84
|
-
await setup_entity(var, config)
|
|
84
|
+
await setup_entity(var, config, "media_player")
|
|
85
85
|
for conf in config.get(CONF_ON_STATE, []):
|
|
86
86
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
|
87
87
|
await automation.build_automation(trigger, [], conf)
|
|
@@ -143,6 +143,8 @@ _MEDIA_PLAYER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(
|
|
|
143
143
|
}
|
|
144
144
|
)
|
|
145
145
|
|
|
146
|
+
_MEDIA_PLAYER_SCHEMA.add_extra(entity_duplicate_validator("media_player"))
|
|
147
|
+
|
|
146
148
|
|
|
147
149
|
def media_player_schema(
|
|
148
150
|
class_: MockObjClass,
|
|
@@ -166,7 +168,6 @@ def media_player_schema(
|
|
|
166
168
|
MEDIA_PLAYER_SCHEMA = media_player_schema(MediaPlayer)
|
|
167
169
|
MEDIA_PLAYER_SCHEMA.add_extra(cv.deprecated_schema_constant("media_player"))
|
|
168
170
|
|
|
169
|
-
|
|
170
171
|
MEDIA_PLAYER_ACTION_SCHEMA = automation.maybe_simple_id(
|
|
171
172
|
cv.Schema(
|
|
172
173
|
{
|
|
@@ -449,11 +449,7 @@ async def to_code(config):
|
|
|
449
449
|
cg.add_define("USE_MICRO_WAKE_WORD")
|
|
450
450
|
cg.add_define("USE_OTA_STATE_CALLBACK")
|
|
451
451
|
|
|
452
|
-
esp32.add_idf_component(
|
|
453
|
-
name="esp-tflite-micro",
|
|
454
|
-
repo="https://github.com/espressif/esp-tflite-micro",
|
|
455
|
-
ref="v1.3.3.1",
|
|
456
|
-
)
|
|
452
|
+
esp32.add_idf_component(name="espressif/esp-tflite-micro", ref="1.3.3~1")
|
|
457
453
|
|
|
458
454
|
cg.add_build_flag("-DTF_LITE_STATIC_MEMORY")
|
|
459
455
|
cg.add_build_flag("-DTF_LITE_DISABLE_X86_NEON")
|
|
@@ -27,7 +27,7 @@ void VADModel::log_model_config() {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
bool StreamingModel::load_model_() {
|
|
30
|
-
RAMAllocator<uint8_t> arena_allocator
|
|
30
|
+
RAMAllocator<uint8_t> arena_allocator;
|
|
31
31
|
|
|
32
32
|
if (this->tensor_arena_ == nullptr) {
|
|
33
33
|
this->tensor_arena_ = arena_allocator.allocate(this->tensor_arena_size_);
|
|
@@ -96,7 +96,7 @@ bool StreamingModel::load_model_() {
|
|
|
96
96
|
void StreamingModel::unload_model() {
|
|
97
97
|
this->interpreter_.reset();
|
|
98
98
|
|
|
99
|
-
RAMAllocator<uint8_t> arena_allocator
|
|
99
|
+
RAMAllocator<uint8_t> arena_allocator;
|
|
100
100
|
|
|
101
101
|
if (this->tensor_arena_ != nullptr) {
|
|
102
102
|
arena_allocator.deallocate(this->tensor_arena_, this->tensor_arena_size_);
|
|
@@ -5,17 +5,15 @@ namespace microphone {
|
|
|
5
5
|
|
|
6
6
|
void Microphone::add_data_callback(std::function<void(const std::vector<uint8_t> &)> &&data_callback) {
|
|
7
7
|
std::function<void(const std::vector<uint8_t> &)> mute_handled_callback =
|
|
8
|
-
[this, data_callback](const std::vector<uint8_t> &data) {
|
|
8
|
+
[this, data_callback](const std::vector<uint8_t> &data) {
|
|
9
|
+
if (this->mute_state_) {
|
|
10
|
+
data_callback(std::vector<uint8_t>(data.size(), 0));
|
|
11
|
+
} else {
|
|
12
|
+
data_callback(data);
|
|
13
|
+
};
|
|
14
|
+
};
|
|
9
15
|
this->data_callbacks_.add(std::move(mute_handled_callback));
|
|
10
16
|
}
|
|
11
17
|
|
|
12
|
-
std::vector<uint8_t> Microphone::silence_audio_(std::vector<uint8_t> data) {
|
|
13
|
-
if (this->mute_state_) {
|
|
14
|
-
std::memset((void *) data.data(), 0, data.size());
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
return data;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
18
|
} // namespace microphone
|
|
21
19
|
} // namespace esphome
|
|
@@ -39,7 +39,7 @@ void MMC5603Component::setup() {
|
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
if (id != MMC56X3_CHIP_ID) {
|
|
42
|
+
if (id != 0 && id != MMC56X3_CHIP_ID) { // ID is not reported correctly by all chips, 0 on some chips
|
|
43
43
|
ESP_LOGCONFIG(TAG, "Chip Wrong");
|
|
44
44
|
this->error_code_ = ID_REGISTERS;
|
|
45
45
|
this->mark_failed();
|
|
@@ -90,15 +90,24 @@ bool Modbus::parse_modbus_byte_(uint8_t byte) {
|
|
|
90
90
|
|
|
91
91
|
} else {
|
|
92
92
|
// data starts at 2 and length is 4 for read registers commands
|
|
93
|
-
if (this->role == ModbusRole::SERVER
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
93
|
+
if (this->role == ModbusRole::SERVER) {
|
|
94
|
+
if (function_code == 0x1 || function_code == 0x3 || function_code == 0x4 || function_code == 0x6) {
|
|
95
|
+
data_offset = 2;
|
|
96
|
+
data_len = 4;
|
|
97
|
+
} else if (function_code == 0x10) {
|
|
98
|
+
if (at < 6) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
data_offset = 2;
|
|
102
|
+
// starting address (2 bytes) + quantity of registers (2 bytes) + byte count itself (1 byte) + actual byte count
|
|
103
|
+
data_len = 2 + 2 + 1 + raw[6];
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
// the response for write command mirrors the requests and data starts at offset 2 instead of 3 for read commands
|
|
107
|
+
if (function_code == 0x5 || function_code == 0x06 || function_code == 0xF || function_code == 0x10) {
|
|
108
|
+
data_offset = 2;
|
|
109
|
+
data_len = 4;
|
|
110
|
+
}
|
|
102
111
|
}
|
|
103
112
|
|
|
104
113
|
// Error ( msb indicates error )
|
|
@@ -132,6 +141,7 @@ bool Modbus::parse_modbus_byte_(uint8_t byte) {
|
|
|
132
141
|
bool found = false;
|
|
133
142
|
for (auto *device : this->devices_) {
|
|
134
143
|
if (device->address_ == address) {
|
|
144
|
+
found = true;
|
|
135
145
|
// Is it an error response?
|
|
136
146
|
if ((function_code & 0x80) == 0x80) {
|
|
137
147
|
ESP_LOGD(TAG, "Modbus error function code: 0x%X exception: %d", function_code, raw[2]);
|
|
@@ -141,13 +151,21 @@ bool Modbus::parse_modbus_byte_(uint8_t byte) {
|
|
|
141
151
|
// Ignore modbus exception not related to a pending command
|
|
142
152
|
ESP_LOGD(TAG, "Ignoring Modbus error - not expecting a response");
|
|
143
153
|
}
|
|
144
|
-
|
|
145
|
-
device->on_modbus_read_registers(function_code, uint16_t(data[1]) | (uint16_t(data[0]) << 8),
|
|
146
|
-
uint16_t(data[3]) | (uint16_t(data[2]) << 8));
|
|
147
|
-
} else {
|
|
148
|
-
device->on_modbus_data(data);
|
|
154
|
+
continue;
|
|
149
155
|
}
|
|
150
|
-
|
|
156
|
+
if (this->role == ModbusRole::SERVER) {
|
|
157
|
+
if (function_code == 0x3 || function_code == 0x4) {
|
|
158
|
+
device->on_modbus_read_registers(function_code, uint16_t(data[1]) | (uint16_t(data[0]) << 8),
|
|
159
|
+
uint16_t(data[3]) | (uint16_t(data[2]) << 8));
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
if (function_code == 0x6 || function_code == 0x10) {
|
|
163
|
+
device->on_modbus_write_registers(function_code, data);
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// fallthrough for other function codes
|
|
168
|
+
device->on_modbus_data(data);
|
|
151
169
|
}
|
|
152
170
|
}
|
|
153
171
|
waiting_for_response = 0;
|
|
@@ -59,11 +59,20 @@ class ModbusDevice {
|
|
|
59
59
|
virtual void on_modbus_data(const std::vector<uint8_t> &data) = 0;
|
|
60
60
|
virtual void on_modbus_error(uint8_t function_code, uint8_t exception_code) {}
|
|
61
61
|
virtual void on_modbus_read_registers(uint8_t function_code, uint16_t start_address, uint16_t number_of_registers){};
|
|
62
|
+
virtual void on_modbus_write_registers(uint8_t function_code, const std::vector<uint8_t> &data){};
|
|
62
63
|
void send(uint8_t function, uint16_t start_address, uint16_t number_of_entities, uint8_t payload_len = 0,
|
|
63
64
|
const uint8_t *payload = nullptr) {
|
|
64
65
|
this->parent_->send(this->address_, function, start_address, number_of_entities, payload_len, payload);
|
|
65
66
|
}
|
|
66
67
|
void send_raw(const std::vector<uint8_t> &payload) { this->parent_->send_raw(payload); }
|
|
68
|
+
void send_error(uint8_t function_code, uint8_t exception_code) {
|
|
69
|
+
std::vector<uint8_t> error_response;
|
|
70
|
+
error_response.reserve(3);
|
|
71
|
+
error_response.push_back(this->address_);
|
|
72
|
+
error_response.push_back(function_code | 0x80);
|
|
73
|
+
error_response.push_back(exception_code);
|
|
74
|
+
this->send_raw(error_response);
|
|
75
|
+
}
|
|
67
76
|
// If more than one device is connected block sending a new command before a response is received
|
|
68
77
|
bool waiting_for_response() { return parent_->waiting_for_response != 0; }
|
|
69
78
|
|