esphome 2025.6.3__py3-none-any.whl → 2025.7.0b1__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 +42 -20
- esphome/components/api/api_connection.cpp +318 -391
- esphome/components/api/api_connection.h +206 -126
- esphome/components/api/api_frame_helper.cpp +89 -124
- esphome/components/api/api_frame_helper.h +57 -45
- esphome/components/api/api_pb2.cpp +414 -4350
- esphome/components/api/api_pb2.h +287 -198
- esphome/components/api/api_pb2_dump.cpp +4333 -0
- esphome/components/api/api_pb2_service.cpp +180 -425
- esphome/components/api/api_pb2_service.h +7 -6
- esphome/components/api/api_pb2_size.h +2 -4
- esphome/components/api/api_server.cpp +138 -167
- esphome/components/api/api_server.h +66 -12
- esphome/components/api/client.py +8 -2
- esphome/components/api/list_entities.cpp +36 -105
- esphome/components/api/list_entities.h +31 -23
- esphome/components/api/proto.h +26 -3
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- 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/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 +102 -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 +111 -97
- 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 +238 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +1 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -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/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 +17 -0
- 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 +2 -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.h +1 -0
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +28 -9
- 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/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/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 +430 -261
- 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/ld2420.cpp +196 -100
- esphome/components/ld2420/ld2420.h +46 -118
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- 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 +4 -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_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/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_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +126 -45
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_client.cpp +15 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- 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 +5 -0
- esphome/components/online_image/online_image.cpp +6 -2
- esphome/components/online_image/online_image.h +4 -1
- esphome/components/opentherm/opentherm.cpp +7 -12
- 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 +31 -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 +1 -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.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 +76 -19
- 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 +0 -4
- 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/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 +305 -427
- 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 +162 -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 +163 -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 +151 -18
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +7 -7
- esphome/core/component_iterator.h +9 -7
- 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 +162 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +164 -104
- 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 +278 -103
- esphome/core/scheduler.h +157 -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/wizard.py +16 -3
- esphome/writer.py +21 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/METADATA +10 -9
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/RECORD +591 -531
- 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.3.dist-info → esphome-2025.7.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from collections.abc import MutableMapping
|
|
2
2
|
import functools
|
|
3
3
|
import hashlib
|
|
4
|
+
from itertools import accumulate
|
|
4
5
|
import logging
|
|
5
6
|
import os
|
|
6
7
|
from pathlib import Path
|
|
@@ -468,8 +469,9 @@ class EFont:
|
|
|
468
469
|
|
|
469
470
|
|
|
470
471
|
class GlyphInfo:
|
|
471
|
-
def __init__(self,
|
|
472
|
-
self.
|
|
472
|
+
def __init__(self, glyph, data, advance, offset_x, offset_y, width, height):
|
|
473
|
+
self.glyph = glyph
|
|
474
|
+
self.bitmap_data = data
|
|
473
475
|
self.advance = advance
|
|
474
476
|
self.offset_x = offset_x
|
|
475
477
|
self.offset_y = offset_y
|
|
@@ -477,6 +479,62 @@ class GlyphInfo:
|
|
|
477
479
|
self.height = height
|
|
478
480
|
|
|
479
481
|
|
|
482
|
+
def glyph_to_glyphinfo(glyph, font, size, bpp):
|
|
483
|
+
scale = 256 // (1 << bpp)
|
|
484
|
+
if not font.is_scalable:
|
|
485
|
+
sizes = [pt_to_px(x.size) for x in font.available_sizes]
|
|
486
|
+
if size in sizes:
|
|
487
|
+
font.select_size(sizes.index(size))
|
|
488
|
+
else:
|
|
489
|
+
font.set_pixel_sizes(size, 0)
|
|
490
|
+
flags = FT_LOAD_RENDER
|
|
491
|
+
if bpp != 1:
|
|
492
|
+
flags |= FT_LOAD_NO_BITMAP
|
|
493
|
+
else:
|
|
494
|
+
flags |= FT_LOAD_TARGET_MONO
|
|
495
|
+
font.load_char(glyph, flags)
|
|
496
|
+
width = font.glyph.bitmap.width
|
|
497
|
+
height = font.glyph.bitmap.rows
|
|
498
|
+
buffer = font.glyph.bitmap.buffer
|
|
499
|
+
pitch = font.glyph.bitmap.pitch
|
|
500
|
+
glyph_data = [0] * ((height * width * bpp + 7) // 8)
|
|
501
|
+
src_mode = font.glyph.bitmap.pixel_mode
|
|
502
|
+
pos = 0
|
|
503
|
+
for y in range(height):
|
|
504
|
+
for x in range(width):
|
|
505
|
+
if src_mode == ft_pixel_mode_mono:
|
|
506
|
+
pixel = (
|
|
507
|
+
(1 << bpp) - 1
|
|
508
|
+
if buffer[y * pitch + x // 8] & (1 << (7 - x % 8))
|
|
509
|
+
else 0
|
|
510
|
+
)
|
|
511
|
+
else:
|
|
512
|
+
pixel = buffer[y * pitch + x] // scale
|
|
513
|
+
for bit_num in range(bpp):
|
|
514
|
+
if pixel & (1 << (bpp - bit_num - 1)):
|
|
515
|
+
glyph_data[pos // 8] |= 0x80 >> (pos % 8)
|
|
516
|
+
pos += 1
|
|
517
|
+
ascender = pt_to_px(font.size.ascender)
|
|
518
|
+
if ascender == 0:
|
|
519
|
+
if not font.is_scalable:
|
|
520
|
+
ascender = size
|
|
521
|
+
else:
|
|
522
|
+
_LOGGER.error(
|
|
523
|
+
"Unable to determine ascender of font %s %s",
|
|
524
|
+
font.family_name,
|
|
525
|
+
font.style_name,
|
|
526
|
+
)
|
|
527
|
+
return GlyphInfo(
|
|
528
|
+
glyph,
|
|
529
|
+
glyph_data,
|
|
530
|
+
pt_to_px(font.glyph.metrics.horiAdvance),
|
|
531
|
+
font.glyph.bitmap_left,
|
|
532
|
+
ascender - font.glyph.bitmap_top,
|
|
533
|
+
width,
|
|
534
|
+
height,
|
|
535
|
+
)
|
|
536
|
+
|
|
537
|
+
|
|
480
538
|
async def to_code(config):
|
|
481
539
|
"""
|
|
482
540
|
Collect all glyph codepoints, construct a map from a codepoint to a font file.
|
|
@@ -506,98 +564,47 @@ async def to_code(config):
|
|
|
506
564
|
|
|
507
565
|
codepoints = list(point_set)
|
|
508
566
|
codepoints.sort(key=functools.cmp_to_key(glyph_comparator))
|
|
509
|
-
glyph_args = {}
|
|
510
|
-
data = []
|
|
511
567
|
bpp = config[CONF_BPP]
|
|
512
|
-
scale = 256 // (1 << bpp)
|
|
513
568
|
size = config[CONF_SIZE]
|
|
514
569
|
# create the data array for all glyphs
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
if size in sizes:
|
|
520
|
-
font.select_size(sizes.index(size))
|
|
521
|
-
else:
|
|
522
|
-
font.set_pixel_sizes(size, 0)
|
|
523
|
-
flags = FT_LOAD_RENDER
|
|
524
|
-
if bpp != 1:
|
|
525
|
-
flags |= FT_LOAD_NO_BITMAP
|
|
526
|
-
else:
|
|
527
|
-
flags |= FT_LOAD_TARGET_MONO
|
|
528
|
-
font.load_char(codepoint, flags)
|
|
529
|
-
width = font.glyph.bitmap.width
|
|
530
|
-
height = font.glyph.bitmap.rows
|
|
531
|
-
buffer = font.glyph.bitmap.buffer
|
|
532
|
-
pitch = font.glyph.bitmap.pitch
|
|
533
|
-
glyph_data = [0] * ((height * width * bpp + 7) // 8)
|
|
534
|
-
src_mode = font.glyph.bitmap.pixel_mode
|
|
535
|
-
pos = 0
|
|
536
|
-
for y in range(height):
|
|
537
|
-
for x in range(width):
|
|
538
|
-
if src_mode == ft_pixel_mode_mono:
|
|
539
|
-
pixel = (
|
|
540
|
-
(1 << bpp) - 1
|
|
541
|
-
if buffer[y * pitch + x // 8] & (1 << (7 - x % 8))
|
|
542
|
-
else 0
|
|
543
|
-
)
|
|
544
|
-
else:
|
|
545
|
-
pixel = buffer[y * pitch + x] // scale
|
|
546
|
-
for bit_num in range(bpp):
|
|
547
|
-
if pixel & (1 << (bpp - bit_num - 1)):
|
|
548
|
-
glyph_data[pos // 8] |= 0x80 >> (pos % 8)
|
|
549
|
-
pos += 1
|
|
550
|
-
ascender = pt_to_px(font.size.ascender)
|
|
551
|
-
if ascender == 0:
|
|
552
|
-
if not font.is_scalable:
|
|
553
|
-
ascender = size
|
|
554
|
-
else:
|
|
555
|
-
_LOGGER.error(
|
|
556
|
-
"Unable to determine ascender of font %s", config[CONF_FILE]
|
|
557
|
-
)
|
|
558
|
-
glyph_args[codepoint] = GlyphInfo(
|
|
559
|
-
len(data),
|
|
560
|
-
pt_to_px(font.glyph.metrics.horiAdvance),
|
|
561
|
-
font.glyph.bitmap_left,
|
|
562
|
-
ascender - font.glyph.bitmap_top,
|
|
563
|
-
width,
|
|
564
|
-
height,
|
|
565
|
-
)
|
|
566
|
-
data += glyph_data
|
|
567
|
-
|
|
568
|
-
rhs = [HexInt(x) for x in data]
|
|
570
|
+
glyph_args = [
|
|
571
|
+
glyph_to_glyphinfo(x, point_font_map[x], size, bpp) for x in codepoints
|
|
572
|
+
]
|
|
573
|
+
rhs = [HexInt(x) for x in flatten([x.bitmap_data for x in glyph_args])]
|
|
569
574
|
prog_arr = cg.progmem_array(config[CONF_RAW_DATA_ID], rhs)
|
|
570
575
|
|
|
571
576
|
# Create the glyph table that points to data in the above array.
|
|
572
|
-
glyph_initializer = [
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
(
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
("offset_y", glyph_args[codepoint].offset_y),
|
|
592
|
-
("width", glyph_args[codepoint].width),
|
|
593
|
-
("height", glyph_args[codepoint].height),
|
|
594
|
-
)
|
|
577
|
+
glyph_initializer = [
|
|
578
|
+
cg.StructInitializer(
|
|
579
|
+
GlyphData,
|
|
580
|
+
(
|
|
581
|
+
"a_char",
|
|
582
|
+
cg.RawExpression(f"(const uint8_t *){cpp_string_escape(x.glyph)}"),
|
|
583
|
+
),
|
|
584
|
+
(
|
|
585
|
+
"data",
|
|
586
|
+
cg.RawExpression(f"{str(prog_arr)} + {str(y - len(x.bitmap_data))}"),
|
|
587
|
+
),
|
|
588
|
+
("advance", x.advance),
|
|
589
|
+
("offset_x", x.offset_x),
|
|
590
|
+
("offset_y", x.offset_y),
|
|
591
|
+
("width", x.width),
|
|
592
|
+
("height", x.height),
|
|
593
|
+
)
|
|
594
|
+
for (x, y) in zip(
|
|
595
|
+
glyph_args, list(accumulate([len(x.bitmap_data) for x in glyph_args]))
|
|
595
596
|
)
|
|
597
|
+
]
|
|
596
598
|
|
|
597
599
|
glyphs = cg.static_const_array(config[CONF_RAW_GLYPH_ID], glyph_initializer)
|
|
598
600
|
|
|
599
601
|
font_height = pt_to_px(base_font.size.height)
|
|
600
602
|
ascender = pt_to_px(base_font.size.ascender)
|
|
603
|
+
descender = abs(pt_to_px(base_font.size.descender))
|
|
604
|
+
g = glyph_to_glyphinfo("x", base_font, size, bpp)
|
|
605
|
+
xheight = g.height if len(g.bitmap_data) > 1 else 0
|
|
606
|
+
g = glyph_to_glyphinfo("X", base_font, size, bpp)
|
|
607
|
+
capheight = g.height if len(g.bitmap_data) > 1 else 0
|
|
601
608
|
if font_height == 0:
|
|
602
609
|
if not base_font.is_scalable:
|
|
603
610
|
font_height = size
|
|
@@ -610,5 +617,8 @@ async def to_code(config):
|
|
|
610
617
|
len(glyph_initializer),
|
|
611
618
|
ascender,
|
|
612
619
|
font_height,
|
|
620
|
+
descender,
|
|
621
|
+
xheight,
|
|
622
|
+
capheight,
|
|
613
623
|
bpp,
|
|
614
624
|
)
|
esphome/components/font/font.cpp
CHANGED
|
@@ -45,8 +45,15 @@ void Glyph::scan_area(int *x1, int *y1, int *width, int *height) const {
|
|
|
45
45
|
*height = this->glyph_data_->height;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
Font::Font(const GlyphData *data, int data_nr, int baseline, int height,
|
|
49
|
-
|
|
48
|
+
Font::Font(const GlyphData *data, int data_nr, int baseline, int height, int descender, int xheight, int capheight,
|
|
49
|
+
uint8_t bpp)
|
|
50
|
+
: baseline_(baseline),
|
|
51
|
+
height_(height),
|
|
52
|
+
descender_(descender),
|
|
53
|
+
linegap_(height - baseline - descender),
|
|
54
|
+
xheight_(xheight),
|
|
55
|
+
capheight_(capheight),
|
|
56
|
+
bpp_(bpp) {
|
|
50
57
|
glyphs_.reserve(data_nr);
|
|
51
58
|
for (int i = 0; i < data_nr; ++i)
|
|
52
59
|
glyphs_.emplace_back(&data[i]);
|
esphome/components/font/font.h
CHANGED
|
@@ -50,11 +50,17 @@ class Font
|
|
|
50
50
|
public:
|
|
51
51
|
/** Construct the font with the given glyphs.
|
|
52
52
|
*
|
|
53
|
-
* @param
|
|
53
|
+
* @param data A vector of glyphs, must be sorted lexicographically.
|
|
54
|
+
* @param data_nr The number of glyphs in data.
|
|
54
55
|
* @param baseline The y-offset from the top of the text to the baseline.
|
|
55
|
-
* @param
|
|
56
|
+
* @param height The y-offset from the top of the text to the bottom.
|
|
57
|
+
* @param descender The y-offset from the baseline to the lowest stroke in the font (e.g. from letters like g or p).
|
|
58
|
+
* @param xheight The height of lowercase letters, usually measured at the "x" glyph.
|
|
59
|
+
* @param capheight The height of capital letters, usually measured at the "X" glyph.
|
|
60
|
+
* @param bpp The bits per pixel used for this font. Used to read data out of the glyph bitmaps.
|
|
56
61
|
*/
|
|
57
|
-
Font(const GlyphData *data, int data_nr, int baseline, int height,
|
|
62
|
+
Font(const GlyphData *data, int data_nr, int baseline, int height, int descender, int xheight, int capheight,
|
|
63
|
+
uint8_t bpp = 1);
|
|
58
64
|
|
|
59
65
|
int match_next_glyph(const uint8_t *str, int *match_length);
|
|
60
66
|
|
|
@@ -65,14 +71,23 @@ class Font
|
|
|
65
71
|
#endif
|
|
66
72
|
inline int get_baseline() { return this->baseline_; }
|
|
67
73
|
inline int get_height() { return this->height_; }
|
|
74
|
+
inline int get_ascender() { return this->baseline_; }
|
|
75
|
+
inline int get_descender() { return this->descender_; }
|
|
76
|
+
inline int get_linegap() { return this->linegap_; }
|
|
77
|
+
inline int get_xheight() { return this->xheight_; }
|
|
78
|
+
inline int get_capheight() { return this->capheight_; }
|
|
68
79
|
inline int get_bpp() { return this->bpp_; }
|
|
69
80
|
|
|
70
|
-
const std::vector<Glyph,
|
|
81
|
+
const std::vector<Glyph, RAMAllocator<Glyph>> &get_glyphs() const { return glyphs_; }
|
|
71
82
|
|
|
72
83
|
protected:
|
|
73
|
-
std::vector<Glyph,
|
|
84
|
+
std::vector<Glyph, RAMAllocator<Glyph>> glyphs_;
|
|
74
85
|
int baseline_;
|
|
75
86
|
int height_;
|
|
87
|
+
int descender_;
|
|
88
|
+
int linegap_;
|
|
89
|
+
int xheight_;
|
|
90
|
+
int capheight_;
|
|
76
91
|
uint8_t bpp_; // bits per pixel
|
|
77
92
|
};
|
|
78
93
|
|
|
@@ -18,7 +18,6 @@ class FS3000Component : public PollingComponent, public i2c::I2CDevice, public s
|
|
|
18
18
|
void update() override;
|
|
19
19
|
|
|
20
20
|
void dump_config() override;
|
|
21
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
22
21
|
|
|
23
22
|
void set_model(FS3000Model model) { this->model_ = model; }
|
|
24
23
|
|
esphome/components/gcja5/gcja5.h
CHANGED
|
@@ -12,7 +12,6 @@ class GCJA5Component : public Component, public uart::UARTDevice {
|
|
|
12
12
|
public:
|
|
13
13
|
void dump_config() override;
|
|
14
14
|
void loop() override;
|
|
15
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
16
15
|
|
|
17
16
|
void set_pm_1_0_sensor(sensor::Sensor *pm_1_0) { pm_1_0_sensor_ = pm_1_0; }
|
|
18
17
|
void set_pm_2_5_sensor(sensor::Sensor *pm_2_5) { pm_2_5_sensor_ = pm_2_5; }
|
|
File without changes
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#include "esphome/core/log.h"
|
|
2
|
+
#include "esphome/core/hal.h"
|
|
3
|
+
#include "gl_r01_i2c.h"
|
|
4
|
+
|
|
5
|
+
namespace esphome {
|
|
6
|
+
namespace gl_r01_i2c {
|
|
7
|
+
|
|
8
|
+
static const char *const TAG = "gl_r01_i2c";
|
|
9
|
+
|
|
10
|
+
// Register definitions from datasheet
|
|
11
|
+
static const uint8_t REG_VERSION = 0x00;
|
|
12
|
+
static const uint8_t REG_DISTANCE = 0x02;
|
|
13
|
+
static const uint8_t REG_TRIGGER = 0x10;
|
|
14
|
+
static const uint8_t CMD_TRIGGER = 0xB0;
|
|
15
|
+
static const uint8_t RESTART_CMD1 = 0x5A;
|
|
16
|
+
static const uint8_t RESTART_CMD2 = 0xA5;
|
|
17
|
+
static const uint8_t READ_DELAY = 40; // minimum milliseconds from datasheet to safely read measurement result
|
|
18
|
+
|
|
19
|
+
void GLR01I2CComponent::setup() {
|
|
20
|
+
ESP_LOGCONFIG(TAG, "Setting up GL-R01 I2C...");
|
|
21
|
+
// Verify sensor presence
|
|
22
|
+
if (!this->read_byte_16(REG_VERSION, &this->version_)) {
|
|
23
|
+
ESP_LOGE(TAG, "Failed to communicate with GL-R01 I2C sensor!");
|
|
24
|
+
this->mark_failed();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
ESP_LOGD(TAG, "Found GL-R01 I2C with version 0x%04X", this->version_);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
void GLR01I2CComponent::dump_config() {
|
|
31
|
+
ESP_LOGCONFIG(TAG, "GL-R01 I2C:");
|
|
32
|
+
ESP_LOGCONFIG(TAG, " Firmware Version: 0x%04X", this->version_);
|
|
33
|
+
LOG_I2C_DEVICE(this);
|
|
34
|
+
LOG_SENSOR(" ", "Distance", this);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
void GLR01I2CComponent::update() {
|
|
38
|
+
// Trigger a new measurement
|
|
39
|
+
if (!this->write_byte(REG_TRIGGER, CMD_TRIGGER)) {
|
|
40
|
+
ESP_LOGE(TAG, "Failed to trigger measurement!");
|
|
41
|
+
this->status_set_warning();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Schedule reading the result after the read delay
|
|
46
|
+
this->set_timeout(READ_DELAY, [this]() { this->read_distance_(); });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void GLR01I2CComponent::read_distance_() {
|
|
50
|
+
uint16_t distance = 0;
|
|
51
|
+
if (!this->read_byte_16(REG_DISTANCE, &distance)) {
|
|
52
|
+
ESP_LOGE(TAG, "Failed to read distance value!");
|
|
53
|
+
this->status_set_warning();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (distance == 0xFFFF) {
|
|
58
|
+
ESP_LOGW(TAG, "Invalid measurement received!");
|
|
59
|
+
this->status_set_warning();
|
|
60
|
+
} else {
|
|
61
|
+
ESP_LOGV(TAG, "Distance: %umm", distance);
|
|
62
|
+
this->publish_state(distance);
|
|
63
|
+
this->status_clear_warning();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
} // namespace gl_r01_i2c
|
|
68
|
+
} // namespace esphome
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "esphome/core/component.h"
|
|
4
|
+
#include "esphome/components/sensor/sensor.h"
|
|
5
|
+
#include "esphome/components/i2c/i2c.h"
|
|
6
|
+
|
|
7
|
+
namespace esphome {
|
|
8
|
+
namespace gl_r01_i2c {
|
|
9
|
+
|
|
10
|
+
class GLR01I2CComponent : public sensor::Sensor, public i2c::I2CDevice, public PollingComponent {
|
|
11
|
+
public:
|
|
12
|
+
void setup() override;
|
|
13
|
+
void dump_config() override;
|
|
14
|
+
void update() override;
|
|
15
|
+
|
|
16
|
+
protected:
|
|
17
|
+
void read_distance_();
|
|
18
|
+
uint16_t version_{0};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
} // namespace gl_r01_i2c
|
|
22
|
+
} // namespace esphome
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import esphome.codegen as cg
|
|
2
|
+
import esphome.config_validation as cv
|
|
3
|
+
from esphome.components import i2c, sensor
|
|
4
|
+
from esphome.const import (
|
|
5
|
+
CONF_ID,
|
|
6
|
+
DEVICE_CLASS_DISTANCE,
|
|
7
|
+
STATE_CLASS_MEASUREMENT,
|
|
8
|
+
UNIT_MILLIMETER,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
CODEOWNERS = ["@pkejval"]
|
|
12
|
+
DEPENDENCIES = ["i2c"]
|
|
13
|
+
|
|
14
|
+
gl_r01_i2c_ns = cg.esphome_ns.namespace("gl_r01_i2c")
|
|
15
|
+
GLR01I2CComponent = gl_r01_i2c_ns.class_(
|
|
16
|
+
"GLR01I2CComponent", i2c.I2CDevice, cg.PollingComponent
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
CONFIG_SCHEMA = (
|
|
20
|
+
sensor.sensor_schema(
|
|
21
|
+
GLR01I2CComponent,
|
|
22
|
+
unit_of_measurement=UNIT_MILLIMETER,
|
|
23
|
+
accuracy_decimals=0,
|
|
24
|
+
device_class=DEVICE_CLASS_DISTANCE,
|
|
25
|
+
state_class=STATE_CLASS_MEASUREMENT,
|
|
26
|
+
)
|
|
27
|
+
.extend(cv.polling_component_schema("60s"))
|
|
28
|
+
.extend(i2c.i2c_device_schema(0x74))
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
async def to_code(config):
|
|
33
|
+
var = cg.new_Pvariable(config[CONF_ID])
|
|
34
|
+
await cg.register_component(var, config)
|
|
35
|
+
await sensor.register_sensor(var, config)
|
|
36
|
+
await i2c.register_i2c_device(var, config)
|
|
@@ -15,7 +15,6 @@ class GP8403 : public Component, public i2c::I2CDevice {
|
|
|
15
15
|
public:
|
|
16
16
|
void setup() override;
|
|
17
17
|
void dump_config() override;
|
|
18
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
19
18
|
|
|
20
19
|
void set_voltage(gp8403::GP8403Voltage voltage) { this->voltage_ = voltage; }
|
|
21
20
|
|
|
@@ -10,11 +10,24 @@ GPIOBinarySensor = gpio_ns.class_(
|
|
|
10
10
|
"GPIOBinarySensor", binary_sensor.BinarySensor, cg.Component
|
|
11
11
|
)
|
|
12
12
|
|
|
13
|
+
CONF_USE_INTERRUPT = "use_interrupt"
|
|
14
|
+
CONF_INTERRUPT_TYPE = "interrupt_type"
|
|
15
|
+
|
|
16
|
+
INTERRUPT_TYPES = {
|
|
17
|
+
"RISING": gpio_ns.INTERRUPT_RISING_EDGE,
|
|
18
|
+
"FALLING": gpio_ns.INTERRUPT_FALLING_EDGE,
|
|
19
|
+
"ANY": gpio_ns.INTERRUPT_ANY_EDGE,
|
|
20
|
+
}
|
|
21
|
+
|
|
13
22
|
CONFIG_SCHEMA = (
|
|
14
23
|
binary_sensor.binary_sensor_schema(GPIOBinarySensor)
|
|
15
24
|
.extend(
|
|
16
25
|
{
|
|
17
26
|
cv.Required(CONF_PIN): pins.gpio_input_pin_schema,
|
|
27
|
+
cv.Optional(CONF_USE_INTERRUPT, default=True): cv.boolean,
|
|
28
|
+
cv.Optional(CONF_INTERRUPT_TYPE, default="ANY"): cv.enum(
|
|
29
|
+
INTERRUPT_TYPES, upper=True
|
|
30
|
+
),
|
|
18
31
|
}
|
|
19
32
|
)
|
|
20
33
|
.extend(cv.COMPONENT_SCHEMA)
|
|
@@ -27,3 +40,7 @@ async def to_code(config):
|
|
|
27
40
|
|
|
28
41
|
pin = await cg.gpio_pin_expression(config[CONF_PIN])
|
|
29
42
|
cg.add(var.set_pin(pin))
|
|
43
|
+
|
|
44
|
+
cg.add(var.set_use_interrupt(config[CONF_USE_INTERRUPT]))
|
|
45
|
+
if config[CONF_USE_INTERRUPT]:
|
|
46
|
+
cg.add(var.set_interrupt_type(config[CONF_INTERRUPT_TYPE]))
|
|
@@ -6,17 +6,91 @@ namespace gpio {
|
|
|
6
6
|
|
|
7
7
|
static const char *const TAG = "gpio.binary_sensor";
|
|
8
8
|
|
|
9
|
+
void IRAM_ATTR GPIOBinarySensorStore::gpio_intr(GPIOBinarySensorStore *arg) {
|
|
10
|
+
bool new_state = arg->isr_pin_.digital_read();
|
|
11
|
+
if (new_state != arg->last_state_) {
|
|
12
|
+
arg->state_ = new_state;
|
|
13
|
+
arg->last_state_ = new_state;
|
|
14
|
+
arg->changed_ = true;
|
|
15
|
+
// Wake up the component from its disabled loop state
|
|
16
|
+
if (arg->component_ != nullptr) {
|
|
17
|
+
arg->component_->enable_loop_soon_any_context();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
void GPIOBinarySensorStore::setup(InternalGPIOPin *pin, gpio::InterruptType type, Component *component) {
|
|
23
|
+
pin->setup();
|
|
24
|
+
this->isr_pin_ = pin->to_isr();
|
|
25
|
+
this->component_ = component;
|
|
26
|
+
|
|
27
|
+
// Read initial state
|
|
28
|
+
this->last_state_ = pin->digital_read();
|
|
29
|
+
this->state_ = this->last_state_;
|
|
30
|
+
|
|
31
|
+
// Attach interrupt - from this point on, any changes will be caught by the interrupt
|
|
32
|
+
pin->attach_interrupt(&GPIOBinarySensorStore::gpio_intr, this, type);
|
|
33
|
+
}
|
|
34
|
+
|
|
9
35
|
void GPIOBinarySensor::setup() {
|
|
10
|
-
this->pin_->
|
|
11
|
-
|
|
36
|
+
if (this->use_interrupt_ && !this->pin_->is_internal()) {
|
|
37
|
+
ESP_LOGD(TAG, "GPIO is not internal, falling back to polling mode");
|
|
38
|
+
this->use_interrupt_ = false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (this->use_interrupt_) {
|
|
42
|
+
auto *internal_pin = static_cast<InternalGPIOPin *>(this->pin_);
|
|
43
|
+
this->store_.setup(internal_pin, this->interrupt_type_, this);
|
|
44
|
+
this->publish_initial_state(this->store_.get_state());
|
|
45
|
+
} else {
|
|
46
|
+
this->pin_->setup();
|
|
47
|
+
this->publish_initial_state(this->pin_->digital_read());
|
|
48
|
+
}
|
|
12
49
|
}
|
|
13
50
|
|
|
14
51
|
void GPIOBinarySensor::dump_config() {
|
|
15
52
|
LOG_BINARY_SENSOR("", "GPIO Binary Sensor", this);
|
|
16
53
|
LOG_PIN(" Pin: ", this->pin_);
|
|
54
|
+
const char *mode = this->use_interrupt_ ? "interrupt" : "polling";
|
|
55
|
+
ESP_LOGCONFIG(TAG, " Mode: %s", mode);
|
|
56
|
+
if (this->use_interrupt_) {
|
|
57
|
+
const char *interrupt_type;
|
|
58
|
+
switch (this->interrupt_type_) {
|
|
59
|
+
case gpio::INTERRUPT_RISING_EDGE:
|
|
60
|
+
interrupt_type = "RISING_EDGE";
|
|
61
|
+
break;
|
|
62
|
+
case gpio::INTERRUPT_FALLING_EDGE:
|
|
63
|
+
interrupt_type = "FALLING_EDGE";
|
|
64
|
+
break;
|
|
65
|
+
case gpio::INTERRUPT_ANY_EDGE:
|
|
66
|
+
interrupt_type = "ANY_EDGE";
|
|
67
|
+
break;
|
|
68
|
+
default:
|
|
69
|
+
interrupt_type = "UNKNOWN";
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
ESP_LOGCONFIG(TAG, " Interrupt Type: %s", interrupt_type);
|
|
73
|
+
}
|
|
17
74
|
}
|
|
18
75
|
|
|
19
|
-
void GPIOBinarySensor::loop() {
|
|
76
|
+
void GPIOBinarySensor::loop() {
|
|
77
|
+
if (this->use_interrupt_) {
|
|
78
|
+
if (this->store_.is_changed()) {
|
|
79
|
+
// Clear the flag immediately to minimize the window where we might miss changes
|
|
80
|
+
this->store_.clear_changed();
|
|
81
|
+
// Read the state and publish it
|
|
82
|
+
// Note: If the ISR fires between clear_changed() and get_state(), that's fine -
|
|
83
|
+
// we'll process the new change on the next loop iteration
|
|
84
|
+
bool state = this->store_.get_state();
|
|
85
|
+
this->publish_state(state);
|
|
86
|
+
} else {
|
|
87
|
+
// No changes, disable the loop until the next interrupt
|
|
88
|
+
this->disable_loop();
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
this->publish_state(this->pin_->digital_read());
|
|
92
|
+
}
|
|
93
|
+
}
|
|
20
94
|
|
|
21
95
|
float GPIOBinarySensor::get_setup_priority() const { return setup_priority::HARDWARE; }
|
|
22
96
|
|
|
@@ -2,14 +2,51 @@
|
|
|
2
2
|
|
|
3
3
|
#include "esphome/core/component.h"
|
|
4
4
|
#include "esphome/core/hal.h"
|
|
5
|
+
#include "esphome/core/helpers.h"
|
|
5
6
|
#include "esphome/components/binary_sensor/binary_sensor.h"
|
|
6
7
|
|
|
7
8
|
namespace esphome {
|
|
8
9
|
namespace gpio {
|
|
9
10
|
|
|
11
|
+
// Store class for ISR data (no vtables, ISR-safe)
|
|
12
|
+
class GPIOBinarySensorStore {
|
|
13
|
+
public:
|
|
14
|
+
void setup(InternalGPIOPin *pin, gpio::InterruptType type, Component *component);
|
|
15
|
+
|
|
16
|
+
static void gpio_intr(GPIOBinarySensorStore *arg);
|
|
17
|
+
|
|
18
|
+
bool get_state() const {
|
|
19
|
+
// No lock needed: state_ is atomically updated by ISR
|
|
20
|
+
// Volatile ensures we read the latest value
|
|
21
|
+
return this->state_;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
bool is_changed() const {
|
|
25
|
+
// Simple read of volatile bool - no clearing here
|
|
26
|
+
return this->changed_;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
void clear_changed() {
|
|
30
|
+
// Separate method to clear the flag
|
|
31
|
+
this->changed_ = false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
protected:
|
|
35
|
+
ISRInternalGPIOPin isr_pin_;
|
|
36
|
+
volatile bool state_{false};
|
|
37
|
+
volatile bool last_state_{false};
|
|
38
|
+
volatile bool changed_{false};
|
|
39
|
+
Component *component_{nullptr}; // Pointer to the component for enable_loop_soon_any_context()
|
|
40
|
+
};
|
|
41
|
+
|
|
10
42
|
class GPIOBinarySensor : public binary_sensor::BinarySensor, public Component {
|
|
11
43
|
public:
|
|
44
|
+
// No destructor needed: ESPHome components are created at boot and live forever.
|
|
45
|
+
// Interrupts are only detached on reboot when memory is cleared anyway.
|
|
46
|
+
|
|
12
47
|
void set_pin(GPIOPin *pin) { pin_ = pin; }
|
|
48
|
+
void set_use_interrupt(bool use_interrupt) { use_interrupt_ = use_interrupt; }
|
|
49
|
+
void set_interrupt_type(gpio::InterruptType type) { interrupt_type_ = type; }
|
|
13
50
|
// ========== INTERNAL METHODS ==========
|
|
14
51
|
// (In most use cases you won't need these)
|
|
15
52
|
/// Setup pin
|
|
@@ -22,6 +59,9 @@ class GPIOBinarySensor : public binary_sensor::BinarySensor, public Component {
|
|
|
22
59
|
|
|
23
60
|
protected:
|
|
24
61
|
GPIOPin *pin_;
|
|
62
|
+
bool use_interrupt_{true};
|
|
63
|
+
gpio::InterruptType interrupt_type_{gpio::INTERRUPT_ANY_EDGE};
|
|
64
|
+
GPIOBinarySensorStore store_;
|
|
25
65
|
};
|
|
26
66
|
|
|
27
67
|
} // namespace gpio
|
esphome/components/he60r/he60r.h
CHANGED
|
@@ -13,7 +13,6 @@ class HE60rCover : public cover::Cover, public Component, public uart::UARTDevic
|
|
|
13
13
|
void setup() override;
|
|
14
14
|
void loop() override;
|
|
15
15
|
void dump_config() override;
|
|
16
|
-
float get_setup_priority() const override { return setup_priority::DATA; };
|
|
17
16
|
|
|
18
17
|
void set_open_duration(uint32_t duration) { this->open_duration_ = duration; }
|
|
19
18
|
void set_close_duration(uint32_t duration) { this->close_duration_ = duration; }
|
|
@@ -70,6 +70,7 @@ PROTOCOLS = {
|
|
|
70
70
|
"airway": Protocol.PROTOCOL_AIRWAY,
|
|
71
71
|
"bgh_aud": Protocol.PROTOCOL_BGH_AUD,
|
|
72
72
|
"panasonic_altdke": Protocol.PROTOCOL_PANASONIC_ALTDKE,
|
|
73
|
+
"philco_phs32": Protocol.PROTOCOL_PHILCO_PHS32,
|
|
73
74
|
"vaillantvai8": Protocol.PROTOCOL_VAILLANTVAI8,
|
|
74
75
|
"r51m": Protocol.PROTOCOL_R51M,
|
|
75
76
|
}
|
|
@@ -125,6 +126,6 @@ async def to_code(config):
|
|
|
125
126
|
cg.add(var.set_max_temperature(config[CONF_MAX_TEMPERATURE]))
|
|
126
127
|
cg.add(var.set_min_temperature(config[CONF_MIN_TEMPERATURE]))
|
|
127
128
|
|
|
128
|
-
cg.add_library("tonia/HeatpumpIR", "1.0.
|
|
129
|
+
cg.add_library("tonia/HeatpumpIR", "1.0.35")
|
|
129
130
|
if CORE.is_libretiny:
|
|
130
131
|
CORE.add_platformio_option("lib_ignore", "IRremoteESP8266")
|
|
@@ -65,6 +65,7 @@ const std::map<Protocol, std::function<HeatpumpIR *()>> PROTOCOL_CONSTRUCTOR_MAP
|
|
|
65
65
|
{PROTOCOL_AIRWAY, []() { return new AIRWAYHeatpumpIR(); }}, // NOLINT
|
|
66
66
|
{PROTOCOL_BGH_AUD, []() { return new BGHHeatpumpIR(); }}, // NOLINT
|
|
67
67
|
{PROTOCOL_PANASONIC_ALTDKE, []() { return new PanasonicAltDKEHeatpumpIR(); }}, // NOLINT
|
|
68
|
+
{PROTOCOL_PHILCO_PHS32, []() { return new PhilcoPHS32HeatpumpIR(); }}, // NOLINT
|
|
68
69
|
{PROTOCOL_VAILLANTVAI8, []() { return new VaillantHeatpumpIR(); }}, // NOLINT
|
|
69
70
|
{PROTOCOL_R51M, []() { return new R51MHeatpumpIR(); }}, // NOLINT
|
|
70
71
|
};
|