esphome 2024.12.4__py3-none-any.whl → 2025.2.0b2__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 +16 -3
- esphome/components/adc/__init__.py +17 -11
- esphome/components/adc/adc_sensor.h +17 -0
- esphome/components/adc/adc_sensor_common.cpp +55 -0
- esphome/components/adc/adc_sensor_esp32.cpp +8 -5
- esphome/components/adc/adc_sensor_esp8266.cpp +10 -6
- esphome/components/adc/adc_sensor_libretiny.cpp +11 -6
- esphome/components/adc/adc_sensor_rp2040.cpp +13 -10
- esphome/components/adc/sensor.py +9 -3
- esphome/components/ads1115/ads1115.cpp +56 -7
- esphome/components/ads1115/ads1115.h +13 -1
- esphome/components/ads1115/sensor/__init__.py +16 -0
- esphome/components/ads1115/sensor/ads1115_sensor.cpp +2 -1
- esphome/components/ads1115/sensor/ads1115_sensor.h +2 -0
- esphome/components/animation/__init__.py +23 -261
- esphome/components/animation/animation.cpp +2 -2
- esphome/components/animation/animation.h +2 -1
- esphome/components/api/api_pb2.cpp +14 -0
- esphome/components/api/api_pb2.h +1 -0
- esphome/components/audio/__init__.py +112 -0
- esphome/components/audio/audio.cpp +67 -0
- esphome/components/audio/audio.h +125 -7
- esphome/components/audio/audio_decoder.cpp +361 -0
- esphome/components/audio/audio_decoder.h +135 -0
- esphome/components/audio/audio_reader.cpp +308 -0
- esphome/components/audio/audio_reader.h +85 -0
- esphome/components/audio/audio_resampler.cpp +159 -0
- esphome/components/audio/audio_resampler.h +101 -0
- esphome/components/audio/audio_transfer_buffer.cpp +165 -0
- esphome/components/audio/audio_transfer_buffer.h +139 -0
- esphome/components/audio_adc/__init__.py +41 -0
- esphome/components/audio_adc/audio_adc.h +17 -0
- esphome/components/audio_adc/automation.h +23 -0
- esphome/components/bk72xx/__init__.py +1 -0
- esphome/components/ble_client/ble_client.cpp +1 -2
- esphome/components/ble_client/sensor/__init__.py +1 -1
- esphome/components/ble_client/text_sensor/__init__.py +1 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -0
- esphome/components/bluetooth_proxy/bluetooth_connection.h +1 -0
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +5 -0
- esphome/components/ch422g/ch422g.h +2 -0
- esphome/components/climate/__init__.py +1 -1
- esphome/components/climate_ir/climate_ir.cpp +2 -1
- esphome/components/coolix/coolix.cpp +2 -1
- esphome/components/cse7766/cse7766.cpp +8 -16
- esphome/components/custom/__init__.py +0 -3
- esphome/components/custom/binary_sensor/__init__.py +2 -28
- esphome/components/custom/climate/__init__.py +2 -27
- esphome/components/custom/cover/__init__.py +2 -27
- esphome/components/custom/light/__init__.py +2 -27
- esphome/components/custom/output/__init__.py +2 -58
- esphome/components/custom/sensor/__init__.py +2 -24
- esphome/components/custom/switch/__init__.py +2 -24
- esphome/components/custom/text_sensor/__init__.py +2 -29
- esphome/components/custom_component/__init__.py +3 -27
- esphome/components/daly_bms/daly_bms.cpp +6 -0
- esphome/components/daly_bms/daly_bms.h +2 -0
- esphome/components/daly_bms/sensor.py +6 -0
- esphome/components/debug/debug_component.cpp +4 -0
- esphome/components/debug/debug_component.h +14 -0
- esphome/components/debug/debug_esp32.cpp +154 -74
- esphome/components/dfplayer/dfplayer.cpp +15 -2
- esphome/components/dfrobot_sen0395/dfrobot_sen0395.cpp +2 -1
- esphome/components/dht/dht.cpp +2 -1
- esphome/components/display/__init__.py +18 -5
- esphome/components/display/display.cpp +2 -1
- esphome/components/display/rect.cpp +2 -1
- esphome/components/es7210/__init__.py +0 -0
- esphome/components/es7210/audio_adc.py +51 -0
- esphome/components/es7210/es7210.cpp +228 -0
- esphome/components/es7210/es7210.h +62 -0
- esphome/components/es7210/es7210_const.h +129 -0
- esphome/components/es7243e/__init__.py +0 -0
- esphome/components/es7243e/audio_adc.py +34 -0
- esphome/components/es7243e/es7243e.cpp +125 -0
- esphome/components/es7243e/es7243e.h +37 -0
- esphome/components/es7243e/es7243e_const.h +54 -0
- esphome/components/es8156/__init__.py +0 -0
- esphome/components/es8156/audio_dac.py +27 -0
- esphome/components/es8156/es8156.cpp +87 -0
- esphome/components/es8156/es8156.h +51 -0
- esphome/components/es8156/es8156_const.h +68 -0
- esphome/components/es8311/audio_dac.py +1 -2
- esphome/components/esp32/__init__.py +1 -0
- esphome/components/esp32/core.cpp +5 -1
- esphome/components/esp32/gpio.h +2 -0
- esphome/components/esp32_ble/__init__.py +39 -0
- esphome/components/esp32_ble/queue.h +4 -4
- esphome/components/esp32_ble_client/ble_client_base.cpp +46 -0
- esphome/components/esp32_ble_client/ble_client_base.h +2 -0
- esphome/components/esp32_ble_server/__init__.py +582 -12
- esphome/components/esp32_ble_server/ble_characteristic.cpp +48 -60
- esphome/components/esp32_ble_server/ble_characteristic.h +24 -17
- esphome/components/esp32_ble_server/ble_descriptor.cpp +21 -9
- esphome/components/esp32_ble_server/ble_descriptor.h +17 -6
- esphome/components/esp32_ble_server/ble_server.cpp +62 -67
- esphome/components/esp32_ble_server/ble_server.h +28 -32
- esphome/components/esp32_ble_server/ble_server_automations.cpp +77 -0
- esphome/components/esp32_ble_server/ble_server_automations.h +115 -0
- esphome/components/esp32_ble_server/ble_service.cpp +17 -15
- esphome/components/esp32_ble_server/ble_service.h +10 -14
- esphome/components/esp32_ble_tracker/__init__.py +6 -39
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +33 -10
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +8 -4
- esphome/components/esp32_improv/__init__.py +2 -8
- esphome/components/esp32_improv/esp32_improv_component.cpp +21 -20
- esphome/components/esp32_improv/esp32_improv_component.h +3 -4
- esphome/components/esp32_rmt/__init__.py +28 -3
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +73 -6
- esphome/components/esp32_rmt_led_strip/led_strip.h +21 -3
- esphome/components/esp32_rmt_led_strip/light.py +72 -7
- esphome/components/esp32_touch/esp32_touch.cpp +5 -0
- esphome/components/esp8266/__init__.py +1 -0
- esphome/components/esp8266/gpio.h +1 -0
- esphome/components/ethernet/__init__.py +10 -10
- esphome/components/event/event.cpp +4 -2
- esphome/components/event/event.h +2 -0
- esphome/components/event_emitter/__init__.py +5 -0
- esphome/components/event_emitter/event_emitter.cpp +14 -0
- esphome/components/event_emitter/event_emitter.h +63 -0
- esphome/components/gcja5/gcja5.cpp +2 -1
- esphome/components/graph/graph.cpp +4 -9
- esphome/components/haier/haier_base.cpp +2 -1
- esphome/components/haier/hon_climate.cpp +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +2 -1
- esphome/components/host/__init__.py +1 -0
- esphome/components/host/gpio.h +1 -0
- esphome/components/http_request/http_request.h +2 -2
- esphome/components/http_request/http_request_arduino.cpp +1 -1
- esphome/components/http_request/http_request_idf.cpp +1 -1
- esphome/components/i2c/i2c_bus_esp_idf.cpp +4 -0
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +7 -5
- esphome/components/i2s_audio/speaker/__init__.py +53 -6
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +92 -46
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +8 -0
- esphome/components/ili9xxx/display.py +29 -11
- esphome/components/ili9xxx/ili9xxx_display.cpp +2 -5
- esphome/components/ili9xxx/ili9xxx_display.h +2 -1
- esphome/components/image/__init__.py +443 -255
- esphome/components/image/image.cpp +115 -61
- esphome/components/image/image.h +15 -24
- esphome/components/json/json_util.cpp +8 -34
- esphome/components/libretiny/__init__.py +1 -0
- esphome/components/libretiny/gpio_arduino.h +1 -0
- esphome/components/light/light_color_values.h +1 -1
- esphome/components/logger/__init__.py +43 -7
- esphome/components/logger/logger.cpp +16 -11
- esphome/components/logger/logger.h +11 -7
- esphome/components/logger/select/__init__.py +29 -0
- esphome/components/logger/select/logger_level_select.cpp +27 -0
- esphome/components/logger/select/logger_level_select.h +15 -0
- esphome/components/lvgl/__init__.py +96 -73
- esphome/components/lvgl/automation.py +39 -7
- esphome/components/lvgl/defines.py +8 -2
- esphome/components/lvgl/lvgl_esphome.cpp +8 -15
- esphome/components/lvgl/lvgl_esphome.h +20 -5
- esphome/components/lvgl/schemas.py +25 -14
- esphome/components/lvgl/trigger.py +27 -3
- esphome/components/lvgl/widgets/dropdown.py +1 -1
- esphome/components/lvgl/widgets/keyboard.py +8 -1
- esphome/components/lvgl/widgets/meter.py +2 -1
- esphome/components/lvgl/widgets/msgbox.py +1 -1
- esphome/components/lvgl/widgets/obj.py +1 -12
- esphome/components/lvgl/widgets/page.py +37 -2
- esphome/components/lvgl/widgets/tabview.py +1 -1
- esphome/components/max6956/max6956.h +2 -0
- esphome/components/mcp23016/mcp23016.h +2 -0
- esphome/components/mcp23xxx_base/mcp23xxx_base.h +2 -0
- esphome/components/mdns/__init__.py +1 -1
- esphome/components/media_player/__init__.py +37 -8
- esphome/components/media_player/automation.h +11 -2
- esphome/components/media_player/media_player.cpp +8 -0
- esphome/components/media_player/media_player.h +8 -4
- esphome/components/micronova/switch/micronova_switch.cpp +4 -2
- esphome/components/midea/ac_automations.h +3 -1
- esphome/components/midea/air_conditioner.cpp +7 -5
- esphome/components/midea/air_conditioner.h +1 -1
- esphome/components/midea/climate.py +4 -2
- esphome/components/midea/ir_transmitter.h +36 -5
- esphome/components/mixer/__init__.py +0 -0
- esphome/components/mixer/speaker/__init__.py +172 -0
- esphome/components/mixer/speaker/automation.h +19 -0
- esphome/components/mixer/speaker/mixer_speaker.cpp +624 -0
- esphome/components/mixer/speaker/mixer_speaker.h +207 -0
- esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp +7 -13
- esphome/components/mpr121/mpr121.h +2 -0
- esphome/components/mqtt/__init__.py +1 -1
- esphome/components/mqtt/mqtt_client.cpp +7 -1
- esphome/components/mqtt/mqtt_client.h +1 -1
- esphome/components/mqtt/mqtt_climate.cpp +2 -2
- esphome/components/network/ip_address.h +2 -0
- esphome/components/nextion/automation.h +17 -0
- esphome/components/nextion/display.py +42 -17
- esphome/components/nextion/nextion.cpp +4 -10
- esphome/components/nextion/nextion.h +89 -82
- esphome/components/nextion/nextion_commands.cpp +10 -10
- esphome/components/ntc/sensor.py +2 -4
- esphome/components/online_image/__init__.py +98 -46
- esphome/components/online_image/bmp_image.cpp +101 -0
- esphome/components/online_image/bmp_image.h +40 -0
- esphome/components/online_image/image_decoder.cpp +28 -2
- esphome/components/online_image/image_decoder.h +24 -15
- esphome/components/online_image/jpeg_image.cpp +90 -0
- esphome/components/online_image/jpeg_image.h +34 -0
- esphome/components/online_image/online_image.cpp +112 -53
- esphome/components/online_image/online_image.h +24 -7
- esphome/components/online_image/png_image.cpp +7 -3
- esphome/components/online_image/png_image.h +2 -1
- esphome/components/opentherm/__init__.py +73 -7
- esphome/components/opentherm/automation.h +25 -0
- esphome/components/opentherm/const.py +1 -0
- esphome/components/opentherm/generate.py +39 -6
- esphome/components/opentherm/hub.cpp +117 -79
- esphome/components/opentherm/hub.h +31 -15
- esphome/components/opentherm/opentherm.cpp +47 -23
- esphome/components/opentherm/opentherm.h +27 -6
- esphome/components/opentherm/opentherm_macros.h +11 -0
- esphome/components/opentherm/schema.py +78 -1
- esphome/components/opentherm/validate.py +7 -2
- esphome/components/pca6416a/pca6416a.h +2 -0
- esphome/components/pca9554/pca9554.h +2 -0
- esphome/components/pcf8574/pcf8574.h +2 -0
- esphome/components/preferences/__init__.py +2 -4
- esphome/components/preferences/syncer.h +10 -3
- esphome/components/prometheus/prometheus_handler.cpp +313 -0
- esphome/components/prometheus/prometheus_handler.h +48 -7
- esphome/components/psram/psram.cpp +8 -1
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +14 -9
- esphome/components/pulse_counter/pulse_counter_sensor.h +4 -4
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +2 -0
- esphome/components/qspi_dbi/__init__.py +3 -0
- esphome/components/qspi_dbi/display.py +74 -47
- esphome/components/qspi_dbi/models.py +245 -2
- esphome/components/qspi_dbi/qspi_dbi.cpp +9 -16
- esphome/components/qspi_dbi/qspi_dbi.h +2 -2
- esphome/components/remote_base/__init__.py +77 -25
- esphome/components/remote_base/remote_base.cpp +1 -1
- esphome/components/remote_base/remote_base.h +20 -2
- esphome/components/remote_base/toto_protocol.cpp +100 -0
- esphome/components/remote_base/toto_protocol.h +45 -0
- esphome/components/remote_receiver/__init__.py +55 -10
- esphome/components/remote_receiver/remote_receiver.h +36 -3
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +145 -6
- esphome/components/remote_transmitter/__init__.py +62 -4
- esphome/components/remote_transmitter/remote_transmitter.h +21 -2
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +140 -4
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +3 -3
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +3 -3
- esphome/components/resampler/__init__.py +0 -0
- esphome/components/resampler/speaker/__init__.py +103 -0
- esphome/components/resampler/speaker/resampler_speaker.cpp +318 -0
- esphome/components/resampler/speaker/resampler_speaker.h +107 -0
- esphome/components/resistance/resistance_sensor.h +2 -3
- esphome/components/resistance/sensor.py +2 -9
- esphome/components/rotary_encoder/rotary_encoder.cpp +8 -4
- esphome/components/rp2040/__init__.py +1 -0
- esphome/components/rp2040/gpio.h +1 -0
- esphome/components/rtl87xx/__init__.py +2 -0
- esphome/components/sdl/binary_sensor.py +270 -0
- esphome/components/sdl/sdl_esphome.cpp +16 -0
- esphome/components/sdl/sdl_esphome.h +9 -0
- esphome/components/seeed_mr60bha2/binary_sensor.py +25 -0
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +26 -2
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.h +9 -20
- esphome/components/seeed_mr60bha2/sensor.py +9 -1
- esphome/components/sn74hc165/sn74hc165.h +3 -0
- esphome/components/sn74hc595/sn74hc595.h +3 -0
- esphome/components/speaker/__init__.py +5 -4
- esphome/components/speaker/media_player/__init__.py +458 -0
- esphome/components/speaker/media_player/audio_pipeline.cpp +568 -0
- esphome/components/speaker/media_player/audio_pipeline.h +159 -0
- esphome/components/speaker/media_player/automation.h +26 -0
- esphome/components/speaker/media_player/speaker_media_player.cpp +577 -0
- esphome/components/speaker/media_player/speaker_media_player.h +160 -0
- esphome/components/speaker/speaker.h +20 -0
- esphome/components/spi/__init__.py +1 -5
- esphome/components/spi/spi.cpp +7 -1
- esphome/components/spi/spi.h +21 -2
- esphome/components/spi_led_strip/light.py +3 -5
- esphome/components/spi_led_strip/spi_led_strip.cpp +67 -0
- esphome/components/spi_led_strip/spi_led_strip.h +8 -60
- esphome/components/sprinkler/sprinkler.cpp +3 -1
- esphome/components/sx1509/sx1509_gpio_pin.h +2 -0
- esphome/components/tca9555/tca9555.h +2 -0
- esphome/components/toshiba/toshiba.cpp +2 -1
- esphome/components/tuya/light/tuya_light.cpp +4 -2
- esphome/components/uart/uart_component_esp32_arduino.cpp +2 -2
- esphome/components/uart/uart_component_esp_idf.cpp +2 -2
- esphome/components/udp/__init__.py +8 -2
- esphome/components/udp/udp_component.cpp +25 -56
- esphome/components/udp/udp_component.h +3 -0
- esphome/components/uponor_smatrix/sensor/__init__.py +14 -4
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +5 -0
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.h +1 -0
- esphome/components/uptime/text_sensor/__init__.py +19 -0
- esphome/components/uptime/text_sensor/uptime_text_sensor.cpp +63 -0
- esphome/components/uptime/text_sensor/uptime_text_sensor.h +25 -0
- esphome/components/voice_assistant/voice_assistant.cpp +24 -14
- esphome/components/voice_assistant/voice_assistant.h +8 -0
- esphome/components/waveshare_epaper/display.py +22 -1
- esphome/components/waveshare_epaper/waveshare_213v3.cpp +9 -3
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +1155 -44
- esphome/components/waveshare_epaper/waveshare_epaper.h +208 -7
- esphome/components/web_server/web_server.cpp +28 -6
- esphome/components/weikai/weikai.h +2 -0
- esphome/components/wifi/__init__.py +6 -6
- esphome/components/wifi/wifi_component.cpp +1 -1
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -1
- esphome/components/wireguard/__init__.py +2 -2
- esphome/components/xl9535/xl9535.h +2 -0
- esphome/components/xxtea/__init__.py +3 -0
- esphome/components/xxtea/xxtea.cpp +46 -0
- esphome/components/xxtea/xxtea.h +26 -0
- esphome/components/yashima/yashima.cpp +2 -1
- esphome/config.py +9 -5
- esphome/config_validation.py +55 -17
- esphome/const.py +7 -10
- esphome/core/__init__.py +6 -13
- esphome/core/base_automation.h +1 -0
- esphome/core/config.py +59 -72
- esphome/core/defines.h +9 -1
- esphome/core/gpio.h +7 -0
- esphome/core/helpers.cpp +19 -15
- esphome/core/helpers.h +57 -8
- esphome/core/log.h +9 -7
- esphome/cpp_generator.py +2 -2
- esphome/espota2.py +3 -2
- esphome/loader.py +12 -4
- esphome/log.py +5 -7
- esphome/yaml_util.py +2 -2
- {esphome-2024.12.4.dist-info → esphome-2025.2.0b2.dist-info}/METADATA +12 -7
- {esphome-2024.12.4.dist-info → esphome-2025.2.0b2.dist-info}/RECORD +341 -292
- esphome/components/custom/binary_sensor/custom_binary_sensor.cpp +0 -16
- esphome/components/custom/binary_sensor/custom_binary_sensor.h +0 -26
- esphome/components/custom/climate/custom_climate.h +0 -22
- esphome/components/custom/cover/custom_cover.h +0 -21
- esphome/components/custom/light/custom_light_output.h +0 -24
- esphome/components/custom/output/custom_output.h +0 -37
- esphome/components/custom/sensor/custom_sensor.cpp +0 -16
- esphome/components/custom/sensor/custom_sensor.h +0 -24
- esphome/components/custom/switch/custom_switch.cpp +0 -16
- esphome/components/custom/switch/custom_switch.h +0 -24
- esphome/components/custom/text_sensor/custom_text_sensor.cpp +0 -16
- esphome/components/custom/text_sensor/custom_text_sensor.h +0 -26
- esphome/components/custom_component/custom_component.h +0 -28
- esphome/components/esp32_ble_server/ble_2901.cpp +0 -18
- esphome/components/esp32_ble_server/ble_2901.h +0 -19
- esphome/components/resistance_sampler/__init__.py +0 -6
- esphome/components/resistance_sampler/resistance_sampler.h +0 -10
- esphome/components/uptime/{sensor.py → sensor/__init__.py} +3 -3
- /esphome/components/uptime/{uptime_seconds_sensor.cpp → sensor/uptime_seconds_sensor.cpp} +0 -0
- /esphome/components/uptime/{uptime_seconds_sensor.h → sensor/uptime_seconds_sensor.h} +0 -0
- /esphome/components/uptime/{uptime_timestamp_sensor.cpp → sensor/uptime_timestamp_sensor.cpp} +0 -0
- /esphome/components/uptime/{uptime_timestamp_sensor.h → sensor/uptime_timestamp_sensor.h} +0 -0
- {esphome-2024.12.4.dist-info → esphome-2025.2.0b2.dist-info}/LICENSE +0 -0
- {esphome-2024.12.4.dist-info → esphome-2025.2.0b2.dist-info}/WHEEL +0 -0
- {esphome-2024.12.4.dist-info → esphome-2025.2.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2024.12.4.dist-info → esphome-2025.2.0b2.dist-info}/top_level.txt +0 -0
@@ -27,10 +27,7 @@ class WaveshareEPaperBase : public display::DisplayBuffer,
|
|
27
27
|
|
28
28
|
void update() override;
|
29
29
|
|
30
|
-
void setup() override
|
31
|
-
this->setup_pins_();
|
32
|
-
this->initialize();
|
33
|
-
}
|
30
|
+
void setup() override;
|
34
31
|
|
35
32
|
void on_safe_shutdown() override;
|
36
33
|
|
@@ -86,6 +83,23 @@ class WaveshareEPaperBWR : public WaveshareEPaperBase {
|
|
86
83
|
uint32_t get_buffer_length_() override;
|
87
84
|
};
|
88
85
|
|
86
|
+
class WaveshareEPaper7C : public WaveshareEPaperBase {
|
87
|
+
public:
|
88
|
+
uint8_t color_to_hex(Color color);
|
89
|
+
void fill(Color color) override;
|
90
|
+
|
91
|
+
display::DisplayType get_display_type() override { return display::DisplayType::DISPLAY_TYPE_COLOR; }
|
92
|
+
|
93
|
+
protected:
|
94
|
+
void draw_absolute_pixel_internal(int x, int y, Color color) override;
|
95
|
+
uint32_t get_buffer_length_() override;
|
96
|
+
void setup() override;
|
97
|
+
void init_internal_7c_(uint32_t buffer_length);
|
98
|
+
|
99
|
+
static const int NUM_BUFFERS = 10;
|
100
|
+
uint8_t *buffers_[NUM_BUFFERS];
|
101
|
+
};
|
102
|
+
|
89
103
|
enum WaveshareEPaperTypeAModel {
|
90
104
|
WAVESHARE_EPAPER_1_54_IN = 0,
|
91
105
|
WAVESHARE_EPAPER_1_54_IN_V2,
|
@@ -160,6 +174,7 @@ enum WaveshareEPaperTypeBModel {
|
|
160
174
|
WAVESHARE_EPAPER_2_7_IN_B_V2,
|
161
175
|
WAVESHARE_EPAPER_4_2_IN,
|
162
176
|
WAVESHARE_EPAPER_4_2_IN_B_V2,
|
177
|
+
WAVESHARE_EPAPER_7_3_IN_F,
|
163
178
|
WAVESHARE_EPAPER_7_5_IN,
|
164
179
|
WAVESHARE_EPAPER_7_5_INV2,
|
165
180
|
WAVESHARE_EPAPER_7_5_IN_B_V2,
|
@@ -247,6 +262,37 @@ class WaveshareEPaper2P7InBV2 : public WaveshareEPaperBWR {
|
|
247
262
|
};
|
248
263
|
|
249
264
|
class GDEW029T5 : public WaveshareEPaper {
|
265
|
+
public:
|
266
|
+
void initialize() override;
|
267
|
+
|
268
|
+
void display() override;
|
269
|
+
|
270
|
+
void dump_config() override;
|
271
|
+
|
272
|
+
void deep_sleep() override;
|
273
|
+
void set_full_update_every(uint32_t full_update_every);
|
274
|
+
|
275
|
+
protected:
|
276
|
+
void init_display_();
|
277
|
+
void init_full_();
|
278
|
+
void init_partial_();
|
279
|
+
void write_lut_(const uint8_t *lut, uint8_t size);
|
280
|
+
void power_off_();
|
281
|
+
void power_on_();
|
282
|
+
int get_width_internal() override;
|
283
|
+
|
284
|
+
int get_height_internal() override;
|
285
|
+
|
286
|
+
private:
|
287
|
+
uint32_t full_update_every_{30};
|
288
|
+
uint32_t at_update_{0};
|
289
|
+
bool deep_sleep_between_updates_{false};
|
290
|
+
bool power_is_on_{false};
|
291
|
+
bool is_deep_sleep_{false};
|
292
|
+
uint8_t *old_buffer_{nullptr};
|
293
|
+
};
|
294
|
+
|
295
|
+
class GDEY029T94 : public WaveshareEPaper {
|
250
296
|
public:
|
251
297
|
void initialize() override;
|
252
298
|
|
@@ -255,9 +301,8 @@ class GDEW029T5 : public WaveshareEPaper {
|
|
255
301
|
void dump_config() override;
|
256
302
|
|
257
303
|
void deep_sleep() override {
|
258
|
-
//
|
259
|
-
this->
|
260
|
-
this->data(0xA5); // check byte
|
304
|
+
this->command(0x10); // Enter deep sleep
|
305
|
+
this->data(0x01);
|
261
306
|
}
|
262
307
|
|
263
308
|
protected:
|
@@ -416,6 +461,63 @@ class WaveshareEPaper2P9InDKE : public WaveshareEPaper {
|
|
416
461
|
int get_height_internal() override;
|
417
462
|
};
|
418
463
|
|
464
|
+
class WaveshareEPaper2P9InD : public WaveshareEPaper {
|
465
|
+
public:
|
466
|
+
void initialize() override;
|
467
|
+
|
468
|
+
void display() override;
|
469
|
+
|
470
|
+
void dump_config() override;
|
471
|
+
|
472
|
+
void deep_sleep() override {
|
473
|
+
// COMMAND DEEP SLEEP
|
474
|
+
this->command(0x07);
|
475
|
+
this->data(0xA5);
|
476
|
+
}
|
477
|
+
|
478
|
+
protected:
|
479
|
+
int get_width_internal() override;
|
480
|
+
|
481
|
+
int get_height_internal() override;
|
482
|
+
};
|
483
|
+
|
484
|
+
class GDEY042T81 : public WaveshareEPaper {
|
485
|
+
public:
|
486
|
+
GDEY042T81();
|
487
|
+
|
488
|
+
void initialize() override;
|
489
|
+
|
490
|
+
void display() override;
|
491
|
+
|
492
|
+
void dump_config() override;
|
493
|
+
|
494
|
+
void deep_sleep() override {
|
495
|
+
// COMMAND POWER OFF
|
496
|
+
this->command(0x22);
|
497
|
+
this->data(0x83);
|
498
|
+
this->command(0x20);
|
499
|
+
// COMMAND DEEP SLEEP
|
500
|
+
this->command(0x10);
|
501
|
+
this->data(0x01);
|
502
|
+
}
|
503
|
+
|
504
|
+
void set_full_update_every(uint32_t full_update_every);
|
505
|
+
|
506
|
+
protected:
|
507
|
+
uint32_t full_update_every_{30};
|
508
|
+
uint32_t at_update_{0};
|
509
|
+
|
510
|
+
int get_width_internal() override;
|
511
|
+
int get_height_internal() override;
|
512
|
+
uint32_t idle_timeout_() override;
|
513
|
+
|
514
|
+
private:
|
515
|
+
void reset_();
|
516
|
+
void update_full_();
|
517
|
+
void update_part_();
|
518
|
+
void init_display_();
|
519
|
+
};
|
520
|
+
|
419
521
|
class WaveshareEPaper4P2In : public WaveshareEPaper {
|
420
522
|
public:
|
421
523
|
void initialize() override;
|
@@ -487,6 +589,34 @@ class WaveshareEPaper4P2InBV2 : public WaveshareEPaper {
|
|
487
589
|
int get_height_internal() override;
|
488
590
|
};
|
489
591
|
|
592
|
+
class WaveshareEPaper4P2InBV2BWR : public WaveshareEPaperBWR {
|
593
|
+
public:
|
594
|
+
void initialize() override;
|
595
|
+
|
596
|
+
void display() override;
|
597
|
+
|
598
|
+
void dump_config() override;
|
599
|
+
|
600
|
+
void deep_sleep() override {
|
601
|
+
// COMMAND VCOM AND DATA INTERVAL SETTING
|
602
|
+
this->command(0x50);
|
603
|
+
this->data(0xF7); // border floating
|
604
|
+
|
605
|
+
// COMMAND POWER OFF
|
606
|
+
this->command(0x02);
|
607
|
+
this->wait_until_idle_();
|
608
|
+
|
609
|
+
// COMMAND DEEP SLEEP
|
610
|
+
this->command(0x07);
|
611
|
+
this->data(0xA5); // check code
|
612
|
+
}
|
613
|
+
|
614
|
+
protected:
|
615
|
+
int get_width_internal() override;
|
616
|
+
|
617
|
+
int get_height_internal() override;
|
618
|
+
};
|
619
|
+
|
490
620
|
class WaveshareEPaper5P8In : public WaveshareEPaper {
|
491
621
|
public:
|
492
622
|
void initialize() override;
|
@@ -553,6 +683,39 @@ class WaveshareEPaper5P8InV2 : public WaveshareEPaper {
|
|
553
683
|
int get_height_internal() override;
|
554
684
|
};
|
555
685
|
|
686
|
+
class WaveshareEPaper7P3InF : public WaveshareEPaper7C {
|
687
|
+
public:
|
688
|
+
void initialize() override;
|
689
|
+
|
690
|
+
void display() override;
|
691
|
+
|
692
|
+
void dump_config() override;
|
693
|
+
|
694
|
+
protected:
|
695
|
+
int get_width_internal() override;
|
696
|
+
|
697
|
+
int get_height_internal() override;
|
698
|
+
|
699
|
+
uint32_t idle_timeout_() override;
|
700
|
+
|
701
|
+
void deep_sleep() override { ; }
|
702
|
+
|
703
|
+
bool wait_until_idle_();
|
704
|
+
|
705
|
+
bool deep_sleep_between_updates_{true};
|
706
|
+
|
707
|
+
void reset_() {
|
708
|
+
if (this->reset_pin_ != nullptr) {
|
709
|
+
this->reset_pin_->digital_write(true);
|
710
|
+
delay(20);
|
711
|
+
this->reset_pin_->digital_write(false);
|
712
|
+
delay(1);
|
713
|
+
this->reset_pin_->digital_write(true);
|
714
|
+
delay(20);
|
715
|
+
}
|
716
|
+
};
|
717
|
+
};
|
718
|
+
|
556
719
|
class WaveshareEPaper7P5In : public WaveshareEPaper {
|
557
720
|
public:
|
558
721
|
void initialize() override;
|
@@ -744,6 +907,43 @@ class WaveshareEPaper7P5InV2alt : public WaveshareEPaper7P5InV2 {
|
|
744
907
|
};
|
745
908
|
};
|
746
909
|
|
910
|
+
class WaveshareEPaper7P5InV2P : public WaveshareEPaper {
|
911
|
+
public:
|
912
|
+
bool wait_until_idle_();
|
913
|
+
|
914
|
+
void initialize() override;
|
915
|
+
|
916
|
+
void display() override;
|
917
|
+
|
918
|
+
void dump_config() override;
|
919
|
+
|
920
|
+
void deep_sleep() override {
|
921
|
+
// COMMAND POWER OFF
|
922
|
+
this->command(0x02);
|
923
|
+
this->wait_until_idle_();
|
924
|
+
// COMMAND DEEP SLEEP
|
925
|
+
this->command(0x07);
|
926
|
+
this->data(0xA5); // check byte
|
927
|
+
}
|
928
|
+
|
929
|
+
void set_full_update_every(uint32_t full_update_every);
|
930
|
+
|
931
|
+
protected:
|
932
|
+
int get_width_internal() override;
|
933
|
+
|
934
|
+
int get_height_internal() override;
|
935
|
+
|
936
|
+
uint32_t idle_timeout_() override;
|
937
|
+
|
938
|
+
uint32_t full_update_every_{30};
|
939
|
+
uint32_t at_update_{0};
|
940
|
+
|
941
|
+
private:
|
942
|
+
void reset_();
|
943
|
+
|
944
|
+
void turn_on_display_();
|
945
|
+
};
|
946
|
+
|
747
947
|
class WaveshareEPaper7P5InHDB : public WaveshareEPaper {
|
748
948
|
public:
|
749
949
|
void initialize() override;
|
@@ -811,6 +1011,7 @@ class WaveshareEPaper2P13InV3 : public WaveshareEPaper {
|
|
811
1011
|
void initialize() override;
|
812
1012
|
|
813
1013
|
protected:
|
1014
|
+
int get_width_controller() override;
|
814
1015
|
int get_width_internal() override;
|
815
1016
|
int get_height_internal() override;
|
816
1017
|
uint32_t idle_timeout_() override;
|
@@ -455,8 +455,9 @@ void WebServer::handle_fan_request(AsyncWebServerRequest *request, const UrlMatc
|
|
455
455
|
} else if (match.method == "toggle") {
|
456
456
|
this->schedule_([obj]() { obj->toggle().perform(); });
|
457
457
|
request->send(200);
|
458
|
-
} else if (match.method == "turn_on") {
|
459
|
-
auto call = obj->turn_on();
|
458
|
+
} else if (match.method == "turn_on" || match.method == "turn_off") {
|
459
|
+
auto call = match.method == "turn_on" ? obj->turn_on() : obj->turn_off();
|
460
|
+
|
460
461
|
if (request->hasParam("speed_level")) {
|
461
462
|
auto speed_level = request->getParam("speed_level")->value();
|
462
463
|
auto val = parse_number<int>(speed_level.c_str());
|
@@ -486,9 +487,6 @@ void WebServer::handle_fan_request(AsyncWebServerRequest *request, const UrlMatc
|
|
486
487
|
}
|
487
488
|
this->schedule_([call]() mutable { call.perform(); });
|
488
489
|
request->send(200);
|
489
|
-
} else if (match.method == "turn_off") {
|
490
|
-
this->schedule_([obj]() { obj->turn_off().perform(); });
|
491
|
-
request->send(200);
|
492
490
|
} else {
|
493
491
|
request->send(404);
|
494
492
|
}
|
@@ -1415,6 +1413,30 @@ void WebServer::handle_alarm_control_panel_request(AsyncWebServerRequest *reques
|
|
1415
1413
|
request->send(200, "application/json", data.c_str());
|
1416
1414
|
return;
|
1417
1415
|
}
|
1416
|
+
|
1417
|
+
auto call = obj->make_call();
|
1418
|
+
if (request->hasParam("code")) {
|
1419
|
+
call.set_code(request->getParam("code")->value().c_str());
|
1420
|
+
}
|
1421
|
+
|
1422
|
+
if (match.method == "disarm") {
|
1423
|
+
call.disarm();
|
1424
|
+
} else if (match.method == "arm_away") {
|
1425
|
+
call.arm_away();
|
1426
|
+
} else if (match.method == "arm_home") {
|
1427
|
+
call.arm_home();
|
1428
|
+
} else if (match.method == "arm_night") {
|
1429
|
+
call.arm_night();
|
1430
|
+
} else if (match.method == "arm_vacation") {
|
1431
|
+
call.arm_vacation();
|
1432
|
+
} else {
|
1433
|
+
request->send(404);
|
1434
|
+
return;
|
1435
|
+
}
|
1436
|
+
|
1437
|
+
this->schedule_([call]() mutable { call.perform(); });
|
1438
|
+
request->send(200);
|
1439
|
+
return;
|
1418
1440
|
}
|
1419
1441
|
request->send(404);
|
1420
1442
|
}
|
@@ -1664,7 +1686,7 @@ bool WebServer::canHandle(AsyncWebServerRequest *request) {
|
|
1664
1686
|
#endif
|
1665
1687
|
|
1666
1688
|
#ifdef USE_ALARM_CONTROL_PANEL
|
1667
|
-
if (request->method() == HTTP_GET && match.domain == "alarm_control_panel")
|
1689
|
+
if ((request->method() == HTTP_GET || request->method() == HTTP_POST) && match.domain == "alarm_control_panel")
|
1668
1690
|
return true;
|
1669
1691
|
#endif
|
1670
1692
|
|
@@ -275,6 +275,8 @@ class WeikaiGPIOPin : public GPIOPin {
|
|
275
275
|
void set_inverted(bool inverted) { this->inverted_ = inverted; }
|
276
276
|
void set_flags(gpio::Flags flags) { this->flags_ = flags; }
|
277
277
|
|
278
|
+
gpio::Flags get_flags() const override { return this->flags_; }
|
279
|
+
|
278
280
|
void setup() override;
|
279
281
|
std::string dump_summary() const override;
|
280
282
|
void pin_mode(gpio::Flags flags) override { this->parent_->set_pin_direction_(this->pin_, flags); }
|
@@ -93,16 +93,16 @@ def validate_channel(value):
|
|
93
93
|
|
94
94
|
AP_MANUAL_IP_SCHEMA = cv.Schema(
|
95
95
|
{
|
96
|
-
cv.Required(CONF_STATIC_IP): cv.
|
97
|
-
cv.Required(CONF_GATEWAY): cv.
|
98
|
-
cv.Required(CONF_SUBNET): cv.
|
96
|
+
cv.Required(CONF_STATIC_IP): cv.ipv4address,
|
97
|
+
cv.Required(CONF_GATEWAY): cv.ipv4address,
|
98
|
+
cv.Required(CONF_SUBNET): cv.ipv4address,
|
99
99
|
}
|
100
100
|
)
|
101
101
|
|
102
102
|
STA_MANUAL_IP_SCHEMA = AP_MANUAL_IP_SCHEMA.extend(
|
103
103
|
{
|
104
|
-
cv.Optional(CONF_DNS1, default="0.0.0.0"): cv.
|
105
|
-
cv.Optional(CONF_DNS2, default="0.0.0.0"): cv.
|
104
|
+
cv.Optional(CONF_DNS1, default="0.0.0.0"): cv.ipv4address,
|
105
|
+
cv.Optional(CONF_DNS2, default="0.0.0.0"): cv.ipv4address,
|
106
106
|
}
|
107
107
|
)
|
108
108
|
|
@@ -364,7 +364,7 @@ def eap_auth(config):
|
|
364
364
|
def safe_ip(ip):
|
365
365
|
if ip is None:
|
366
366
|
return IPAddress(0, 0, 0, 0)
|
367
|
-
return IPAddress(
|
367
|
+
return IPAddress(str(ip))
|
368
368
|
|
369
369
|
|
370
370
|
def manual_ip(config):
|
@@ -66,7 +66,7 @@ void WiFiComponent::start() {
|
|
66
66
|
|
67
67
|
this->pref_ = global_preferences->make_preference<wifi::SavedWifiSettings>(hash, true);
|
68
68
|
if (this->fast_connect_) {
|
69
|
-
this->fast_connect_pref_ = global_preferences->make_preference<wifi::SavedWifiFastConnectSettings>(hash, false);
|
69
|
+
this->fast_connect_pref_ = global_preferences->make_preference<wifi::SavedWifiFastConnectSettings>(hash + 1, false);
|
70
70
|
}
|
71
71
|
|
72
72
|
SavedWifiSettings save{};
|
@@ -11,10 +11,19 @@
|
|
11
11
|
#ifdef USE_WIFI_WPA2_EAP
|
12
12
|
#include <esp_wpa2.h>
|
13
13
|
#endif
|
14
|
+
|
15
|
+
#ifdef USE_WIFI_AP
|
16
|
+
#include "dhcpserver/dhcpserver.h"
|
17
|
+
#endif // USE_WIFI_AP
|
18
|
+
|
14
19
|
#include "lwip/apps/sntp.h"
|
15
20
|
#include "lwip/dns.h"
|
16
21
|
#include "lwip/err.h"
|
17
22
|
|
23
|
+
#ifdef CONFIG_LWIP_TCPIP_CORE_LOCKING
|
24
|
+
#include "lwip/priv/tcpip_priv.h"
|
25
|
+
#endif
|
26
|
+
|
18
27
|
#include "esphome/core/application.h"
|
19
28
|
#include "esphome/core/hal.h"
|
20
29
|
#include "esphome/core/helpers.h"
|
@@ -286,11 +295,26 @@ bool WiFiComponent::wifi_sta_ip_config_(optional<ManualIP> manual_ip) {
|
|
286
295
|
}
|
287
296
|
|
288
297
|
if (!manual_ip.has_value()) {
|
298
|
+
// sntp_servermode_dhcp lwip/sntp.c (Required to lock TCPIP core functionality!)
|
299
|
+
// https://github.com/esphome/issues/issues/6591
|
300
|
+
// https://github.com/espressif/arduino-esp32/issues/10526
|
301
|
+
#ifdef CONFIG_LWIP_TCPIP_CORE_LOCKING
|
302
|
+
if (!sys_thread_tcpip(LWIP_CORE_LOCK_QUERY_HOLDER)) {
|
303
|
+
LOCK_TCPIP_CORE();
|
304
|
+
}
|
305
|
+
#endif
|
306
|
+
|
289
307
|
// lwIP starts the SNTP client if it gets an SNTP server from DHCP. We don't need the time, and more importantly,
|
290
308
|
// the built-in SNTP client has a memory leak in certain situations. Disable this feature.
|
291
309
|
// https://github.com/esphome/issues/issues/2299
|
292
310
|
sntp_servermode_dhcp(false);
|
293
311
|
|
312
|
+
#ifdef CONFIG_LWIP_TCPIP_CORE_LOCKING
|
313
|
+
if (sys_thread_tcpip(LWIP_CORE_LOCK_QUERY_HOLDER)) {
|
314
|
+
UNLOCK_TCPIP_CORE();
|
315
|
+
}
|
316
|
+
#endif
|
317
|
+
|
294
318
|
// No manual IP is set; use DHCP client
|
295
319
|
if (dhcp_status != ESP_NETIF_DHCP_STARTED) {
|
296
320
|
err = esp_netif_dhcpc_start(s_sta_netif);
|
@@ -638,7 +662,12 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
638
662
|
}
|
639
663
|
|
640
664
|
WiFiSTAConnectStatus WiFiComponent::wifi_sta_connect_status_() {
|
641
|
-
|
665
|
+
#if USE_ARDUINO_VERSION_CODE < VERSION_CODE(3, 1, 0)
|
666
|
+
const auto status = WiFiClass::status();
|
667
|
+
#else
|
668
|
+
const auto status = WiFi.status();
|
669
|
+
#endif
|
670
|
+
|
642
671
|
if (status == WL_CONNECT_FAILED || status == WL_CONNECTION_LOST) {
|
643
672
|
return WiFiSTAConnectStatus::ERROR_CONNECT_FAILED;
|
644
673
|
}
|
@@ -67,8 +67,8 @@ CONFIG_SCHEMA = cv.Schema(
|
|
67
67
|
{
|
68
68
|
cv.GenerateID(): cv.declare_id(Wireguard),
|
69
69
|
cv.GenerateID(CONF_TIME_ID): cv.use_id(time.RealTimeClock),
|
70
|
-
cv.Required(CONF_ADDRESS): cv.
|
71
|
-
cv.Optional(CONF_NETMASK, default="255.255.255.255"): cv.
|
70
|
+
cv.Required(CONF_ADDRESS): cv.ipv4address,
|
71
|
+
cv.Optional(CONF_NETMASK, default="255.255.255.255"): cv.ipv4address,
|
72
72
|
cv.Required(CONF_PRIVATE_KEY): _wireguard_key,
|
73
73
|
cv.Required(CONF_PEER_ENDPOINT): cv.string,
|
74
74
|
cv.Required(CONF_PEER_PUBLIC_KEY): _wireguard_key,
|
@@ -36,6 +36,8 @@ class XL9535GPIOPin : public GPIOPin {
|
|
36
36
|
void set_inverted(bool inverted) { this->inverted_ = inverted; }
|
37
37
|
void set_flags(gpio::Flags flags) { this->flags_ = flags; }
|
38
38
|
|
39
|
+
gpio::Flags get_flags() const override { return this->flags_; }
|
40
|
+
|
39
41
|
void setup() override;
|
40
42
|
std::string dump_summary() const override;
|
41
43
|
void pin_mode(gpio::Flags flags) override;
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#include "xxtea.h"
|
2
|
+
|
3
|
+
namespace esphome {
|
4
|
+
namespace xxtea {
|
5
|
+
|
6
|
+
static const uint32_t DELTA = 0x9e3779b9;
|
7
|
+
#define MX ((((z >> 5) ^ (y << 2)) + ((y >> 3) ^ (z << 4))) ^ ((sum ^ y) + (k[(p ^ e) & 7] ^ z)))
|
8
|
+
|
9
|
+
void encrypt(uint32_t *v, size_t n, const uint32_t *k) {
|
10
|
+
uint32_t z, y, sum, e;
|
11
|
+
size_t p;
|
12
|
+
size_t q = 6 + 52 / n;
|
13
|
+
sum = 0;
|
14
|
+
z = v[n - 1];
|
15
|
+
while (q-- != 0) {
|
16
|
+
sum += DELTA;
|
17
|
+
e = (sum >> 2);
|
18
|
+
for (p = 0; p != n - 1; p++) {
|
19
|
+
y = v[p + 1];
|
20
|
+
z = v[p] += MX;
|
21
|
+
}
|
22
|
+
y = v[0];
|
23
|
+
z = v[n - 1] += MX;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
void decrypt(uint32_t *v, size_t n, const uint32_t *k) {
|
28
|
+
uint32_t z, y, sum, e;
|
29
|
+
size_t p;
|
30
|
+
size_t q = 6 + 52 / n;
|
31
|
+
sum = q * DELTA;
|
32
|
+
y = v[0];
|
33
|
+
while (q-- != 0) {
|
34
|
+
e = (sum >> 2);
|
35
|
+
for (p = n - 1; p != 0; p--) {
|
36
|
+
z = v[p - 1];
|
37
|
+
y = v[p] -= MX;
|
38
|
+
}
|
39
|
+
z = v[n - 1];
|
40
|
+
y = v[0] -= MX;
|
41
|
+
sum -= DELTA;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
} // namespace xxtea
|
46
|
+
} // namespace esphome
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include <cstdint>
|
4
|
+
#include <cstddef>
|
5
|
+
|
6
|
+
namespace esphome {
|
7
|
+
namespace xxtea {
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Encrypt a block of data in-place using XXTEA algorithm with 256-bit key
|
11
|
+
* @param v Data to encrypt (as array of 32-bit words)
|
12
|
+
* @param n Number of 32-bit words in data
|
13
|
+
* @param k Key (array of 8 32-bit words)
|
14
|
+
*/
|
15
|
+
void encrypt(uint32_t *v, size_t n, const uint32_t *k);
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Decrypt a block of data in-place using XXTEA algorithm with 256-bit key
|
19
|
+
* @param v Data to decrypt (as array of 32-bit words)
|
20
|
+
* @param n Number of 32-bit words in data
|
21
|
+
* @param k Key (array of 8 32-bit words)
|
22
|
+
*/
|
23
|
+
void decrypt(uint32_t *v, size_t n, const uint32_t *k);
|
24
|
+
|
25
|
+
} // namespace xxtea
|
26
|
+
} // namespace esphome
|
@@ -104,8 +104,9 @@ void YashimaClimate::setup() {
|
|
104
104
|
this->publish_state();
|
105
105
|
});
|
106
106
|
this->current_temperature = this->sensor_->state;
|
107
|
-
} else
|
107
|
+
} else {
|
108
108
|
this->current_temperature = NAN;
|
109
|
+
}
|
109
110
|
// restore set points
|
110
111
|
auto restore = this->restore_state_();
|
111
112
|
if (restore.has_value()) {
|
esphome/config.py
CHANGED
@@ -18,10 +18,10 @@ from esphome.const import (
|
|
18
18
|
CONF_ESPHOME,
|
19
19
|
CONF_EXTERNAL_COMPONENTS,
|
20
20
|
CONF_ID,
|
21
|
+
CONF_MIN_VERSION,
|
21
22
|
CONF_PACKAGES,
|
22
23
|
CONF_PLATFORM,
|
23
24
|
CONF_SUBSTITUTIONS,
|
24
|
-
TARGET_PLATFORMS,
|
25
25
|
)
|
26
26
|
from esphome.core import CORE, DocumentRange, EsphomeError
|
27
27
|
import esphome.core.config as core_config
|
@@ -832,17 +832,21 @@ def validate_config(
|
|
832
832
|
result[CONF_ESPHOME] = config[CONF_ESPHOME]
|
833
833
|
result.add_output_path([CONF_ESPHOME], CONF_ESPHOME)
|
834
834
|
try:
|
835
|
-
core_config.preload_core_config(config, result)
|
835
|
+
target_platform = core_config.preload_core_config(config, result)
|
836
836
|
except vol.Invalid as err:
|
837
837
|
result.add_error(err)
|
838
838
|
return result
|
839
839
|
# Remove temporary esphome config path again, it will be reloaded later
|
840
840
|
result.remove_output_path([CONF_ESPHOME], CONF_ESPHOME)
|
841
841
|
|
842
|
+
# Check version number now to avoid loading components that are not supported
|
843
|
+
if min_version := config[CONF_ESPHOME].get(CONF_MIN_VERSION):
|
844
|
+
cv.All(cv.version_number, cv.validate_esphome_version)(min_version)
|
845
|
+
|
842
846
|
# First run platform validation steps
|
843
|
-
|
844
|
-
|
845
|
-
|
847
|
+
result.add_validation_step(
|
848
|
+
LoadValidationStep(target_platform, config[target_platform])
|
849
|
+
)
|
846
850
|
result.run_validation_steps()
|
847
851
|
|
848
852
|
if result.errors:
|