29 Commits

Author SHA1 Message Date
Yurii
67adb3b9cf Merge branch 'async' into passive_ble 2026-01-26 02:23:19 +03:00
Yurii
ced0385d5b Merge branch 'master' into async 2026-01-26 02:19:54 +03:00
Yurii
7fcca3c4aa chore: fix ha blueprints to support all source sensors 2026-01-26 02:09:57 +03:00
Yurii
2f6bd237c7 chore: updated ha blueprints for new releases 2026-01-26 01:59:03 +03:00
Yurii
e4d1ba7d7b refactor: added different timeouts for wired and wireless sensors 2026-01-26 01:03:26 +03:00
Yurii
aae53d605a fix: move OpenThermTask to 0 core 2026-01-25 22:44:58 +03:00
Yurii
de9276d04e refactor: cosmetic changes 2026-01-25 22:42:48 +03:00
Yurii
cb8cd7c26e feat: added support BTHome v2 format for BLE sensors #215 2026-01-25 22:25:58 +03:00
Yurii
74e321cc1e Merge branch 'async' into passive_ble 2026-01-23 00:26:24 +03:00
Yurii
80e2d8e939 Merge branch 'master' into async 2026-01-23 00:25:12 +03:00
Yurii
b70c212235 fix: filtering fake data from ds18b20 (#217) 2026-01-23 00:19:03 +03:00
Yurii
781b2a1f9c chore: bump pioarduino/platform-espressif32 from 3.3.5 to 3.3.6 2026-01-23 00:17:30 +03:00
Yurii
1e83f284cb chore: dependencies fixed 2026-01-19 22:03:04 +03:00
Yurii
27baf675e5 chore: reformat platformio.ini 2026-01-19 21:44:18 +03:00
Yurii
1fdc06fce6 Merge branch 'async' into passive_ble 2026-01-19 21:38:12 +03:00
Yurii
725185beba chore: reformat platformio.ini and start of removing support esp8266 2026-01-19 21:34:52 +03:00
Yurii
c6518db0d3 Merge branch 'master' into async 2026-01-19 20:48:16 +03:00
Konstantin
10ab75c055 feat: dynamic filenames for backup/debug (#207)
* feat: generate dynamic filenames for JSON file downloads (backup and debug) based on hostname and timestamp

* fix: threadsafe getFilename
2025-12-23 11:32:40 +03:00
Yurii
c39eeee9cf Merge branch 'master' into passive_ble 2025-11-17 13:26:51 +03:00
Yurii
f2fe6036c2 chore: fix dependencies 2025-11-17 13:24:43 +03:00
Yurii
40dc863530 refactor: improved OTA upgrade
https://github.com/ESP32Async/ESPAsyncWebServer/pull/329
2025-11-03 03:19:50 +03:00
Yurii
a40413aeac style: formatting 2025-11-02 23:34:46 +03:00
Yurii
9a045bfc40 Merge branch 'async' into passive_ble 2025-11-02 11:45:06 +03:00
Yurii
c78d2d0c0b refactor: reduced tasks stack size 2025-11-01 19:12:03 +03:00
Yurii
b7825111bb refactor: active + passive BLE scanning 2025-10-22 20:37:36 +03:00
Yurii
d5691ef8f7 refactor: decreased interval and window for scanning BLE 2025-10-22 17:22:02 +03:00
Yurii
0213582464 fix: build for nodemcu32, c3, c6 boards; formatting `platformio.ini` 2025-10-21 13:43:41 +03:00
Yurii
396dc7f7e3 refactor: increased disconnected timeout for sensors 2025-10-20 18:37:35 +03:00
Yurii
9d38525251 refactor: passive scan instead of connecting to BLE devices 2025-10-20 17:59:52 +03:00
9 changed files with 626 additions and 959 deletions

View File

@@ -1,5 +1,5 @@
# Blueprint for reporting indoor/outdoor temperature to OpenTherm Gateway from any home assistant sensor # Blueprint for reporting indoor/outdoor temperature to OpenTherm Gateway from any home assistant sensor
# Updated: 03.09.2024 # Updated: 26.01.2026
blueprint: blueprint:
name: Report temp to OpenTherm Gateway name: Report temp to OpenTherm Gateway
@@ -15,7 +15,6 @@ blueprint:
multiple: false multiple: false
filter: filter:
- domain: sensor - domain: sensor
device_class: temperature
target_entity: target_entity:
name: Target entity name: Target entity
description: "Usually ``number.opentherm_indoor_temp`` or ``number.opentherm_outdoor_temp``" description: "Usually ``number.opentherm_indoor_temp`` or ``number.opentherm_outdoor_temp``"
@@ -38,8 +37,12 @@ condition:
value_template: "{{ states(source_entity) != 'unavailable' and states(target_entity) != 'unavailable' }}" value_template: "{{ states(source_entity) != 'unavailable' and states(target_entity) != 'unavailable' }}"
action: action:
- if: - if:
- condition: template - condition: or
value_template: "{{ (states(source_entity)|float(0) - states(target_entity)|float(0)) | abs | round(2) >= 0.01 }}" conditions:
- condition: template
value_template: "{{ (states(source_entity)|float(0) - states(target_entity)|float(0)) | abs | round(2) >= 0.01 }}"
- condition: template
value_template: "{{ (as_timestamp(now()) - as_timestamp(states[target_entity].last_updated)) | int(0) > 300 }}"
then: then:
- service: number.set_value - service: number.set_value
data: data:

View File

@@ -1,5 +1,5 @@
# Blueprint for reporting temperature to OpenTherm Gateway from home assistant weather integration # Blueprint for reporting temperature to OpenTherm Gateway from home assistant weather integration
# Updated: 03.09.2024 # Updated: 26.01.2026
blueprint: blueprint:
name: Report temp to OpenTherm Gateway from Weather name: Report temp to OpenTherm Gateway from Weather
@@ -37,8 +37,12 @@ condition:
value_template: "{{ states(source_entity) != 'unavailable' and states(target_entity) != 'unavailable' }}" value_template: "{{ states(source_entity) != 'unavailable' and states(target_entity) != 'unavailable' }}"
action: action:
- if: - if:
- condition: template - condition: or
value_template: "{{ (state_attr(source_entity, 'temperature')|float(0) - states(target_entity)|float(0)) | abs | round(2) >= 0.1 }}" conditions:
- condition: template
value_template: "{{ (state_attr(source_entity, 'temperature')|float(0) - states(target_entity)|float(0)) | abs | round(2) >= 0.1 }}"
- condition: template
value_template: "{{ (as_timestamp(now()) - as_timestamp(states[target_entity].last_updated)) | int(0) > 300 }}"
then: then:
- service: number.set_value - service: number.set_value
data: data:

View File

@@ -1,386 +1,220 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[platformio] [platformio]
;extra_configs = secrets.ini ;extra_configs = secrets.ini
extra_configs = secrets.default.ini extra_configs = secrets.default.ini
core_dir = .pio core_dir = .pio
[env] [env]
version = 1.6.0 version = 1.6.0-passiveble
framework = arduino framework = arduino
lib_deps = lib_deps = ESP32Async/AsyncTCP@^3.4.10
ESP32Async/AsyncTCP ESP32Async/ESPAsyncWebServer@^3.9.4
;ESP32Async/ESPAsyncWebServer mathieucarbou/MycilaWebSerial@^8.2.0
https://github.com/ESP32Async/ESPAsyncWebServer#main bblanchon/ArduinoJson@^7.4.2
mathieucarbou/MycilaWebSerial@^8.2.0 ;ihormelnyk/OpenTherm Library@^1.1.5
bblanchon/ArduinoJson@^7.4.2 https://github.com/Laxilef/opentherm_library#esp32_timer
;ihormelnyk/OpenTherm Library@^1.1.5 arduino-libraries/ArduinoMqttClient@^0.1.8
https://github.com/Laxilef/opentherm_library#esp32_timer gyverlibs/FileData@^1.0.3
arduino-libraries/ArduinoMqttClient@^0.1.8 gyverlibs/GyverPID@^3.3.2
gyverlibs/FileData@^1.0.3 gyverlibs/GyverBlinker@^1.1.1
gyverlibs/GyverPID@^3.3.2 pstolarz/OneWireNg@^0.14.1
gyverlibs/GyverBlinker@^1.1.1 ;milesburton/DallasTemperature@^4.0.5
https://github.com/pstolarz/Arduino-Temperature-Control-Library.git#OneWireNg https://github.com/Laxilef/Arduino-Temperature-Control-Library#fix_85c
;laxilef/TinyLogger@^1.1.1 ;laxilef/TinyLogger@^1.1.1
https://github.com/Laxilef/TinyLogger#custom_handlers https://github.com/Laxilef/TinyLogger#custom_handlers
build_type = ${secrets.build_type} lib_ignore = paulstoffregen/OneWire
build_flags = build_type = ${secrets.build_type}
-mtext-section-literals build_flags = -mtext-section-literals
-D MQTT_CLIENT_STD_FUNCTION_CALLBACK=1 -Wno-deprecated-declarations
;-D DEBUG_ESP_CORE -D DEBUG_ESP_WIFI -D DEBUG_ESP_HTTP_SERVER -D DEBUG_ESP_PORT=Serial -D MQTT_CLIENT_STD_FUNCTION_CALLBACK=1
-D BUILD_VERSION='"${this.version}"' ;-D DEBUG_ESP_CORE -D DEBUG_ESP_WIFI -D DEBUG_ESP_HTTP_SERVER -D DEBUG_ESP_PORT=Serial
-D BUILD_ENV='"$PIOENV"' -D BUILD_VERSION='"${this.version}"'
-D CONFIG_ASYNC_TCP_STACK_SIZE=4096 -D BUILD_ENV='"$PIOENV"'
-D ARDUINOJSON_USE_DOUBLE=0 -D CONFIG_ASYNC_TCP_STACK_SIZE=4096
-D ARDUINOJSON_USE_LONG_LONG=0 -D ARDUINOJSON_USE_DOUBLE=0
-D TINYLOGGER_GLOBAL -D ARDUINOJSON_USE_LONG_LONG=0
-D DEFAULT_SERIAL_ENABLED=${secrets.serial_enabled} -D TINYLOGGER_GLOBAL
-D DEFAULT_SERIAL_BAUD=${secrets.serial_baud} -D DEFAULT_SERIAL_ENABLED=${secrets.serial_enabled}
-D DEFAULT_WEBSERIAL_ENABLED=${secrets.webserial_enabled} -D DEFAULT_SERIAL_BAUD=${secrets.serial_baud}
-D DEFAULT_LOG_LEVEL=${secrets.log_level} -D DEFAULT_WEBSERIAL_ENABLED=${secrets.webserial_enabled}
-D DEFAULT_HOSTNAME='"${secrets.hostname}"' -D DEFAULT_LOG_LEVEL=${secrets.log_level}
-D DEFAULT_AP_SSID='"${secrets.ap_ssid}"' -D DEFAULT_HOSTNAME='"${secrets.hostname}"'
-D DEFAULT_AP_PASSWORD='"${secrets.ap_password}"' -D DEFAULT_AP_SSID='"${secrets.ap_ssid}"'
-D DEFAULT_STA_SSID='"${secrets.sta_ssid}"' -D DEFAULT_AP_PASSWORD='"${secrets.ap_password}"'
-D DEFAULT_STA_PASSWORD='"${secrets.sta_password}"' -D DEFAULT_STA_SSID='"${secrets.sta_ssid}"'
-D DEFAULT_PORTAL_LOGIN='"${secrets.portal_login}"' -D DEFAULT_STA_PASSWORD='"${secrets.sta_password}"'
-D DEFAULT_PORTAL_PASSWORD='"${secrets.portal_password}"' -D DEFAULT_PORTAL_LOGIN='"${secrets.portal_login}"'
-D DEFAULT_MQTT_ENABLED=${secrets.mqtt_enabled} -D DEFAULT_PORTAL_PASSWORD='"${secrets.portal_password}"'
-D DEFAULT_MQTT_SERVER='"${secrets.mqtt_server}"' -D DEFAULT_MQTT_ENABLED=${secrets.mqtt_enabled}
-D DEFAULT_MQTT_PORT=${secrets.mqtt_port} -D DEFAULT_MQTT_SERVER='"${secrets.mqtt_server}"'
-D DEFAULT_MQTT_USER='"${secrets.mqtt_user}"' -D DEFAULT_MQTT_PORT=${secrets.mqtt_port}
-D DEFAULT_MQTT_PASSWORD='"${secrets.mqtt_password}"' -D DEFAULT_MQTT_USER='"${secrets.mqtt_user}"'
-D DEFAULT_MQTT_PREFIX='"${secrets.mqtt_prefix}"' -D DEFAULT_MQTT_PASSWORD='"${secrets.mqtt_password}"'
upload_speed = 921600 -D DEFAULT_MQTT_PREFIX='"${secrets.mqtt_prefix}"'
monitor_speed = 115200 upload_speed = 921600
;monitor_filters = direct monitor_speed = 115200
monitor_filters = ;monitor_filters = direct
esp32_exception_decoder monitor_filters = esp32_exception_decoder
esp8266_exception_decoder board_build.flash_mode = dio
board_build.flash_mode = dio board_build.filesystem = littlefs
board_build.filesystem = littlefs check_tool = ;pvs-studio
check_tool = ; pvs-studio check_flags = ;pvs-studio: --analysis-mode=4 --exclude-path=./.pio/libdeps
check_flags =
; pvs-studio:
; --analysis-mode=4
; --exclude-path=./.pio/libdeps
; Defaults ; Defaults
[esp8266_defaults]
platform = espressif8266@^4.2.1
platform_packages = ${env.platform_packages}
lib_deps =
${env.lib_deps}
nrwiersma/ESP8266Scheduler@^1.2
lib_ignore =
extra_scripts =
post:tools/build.py
build_type = ${env.build_type}
build_flags =
${env.build_flags}
-D PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
;-D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH
-D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK305
board_build.ldscript = eagle.flash.4m1m.ld
check_tool = ${env.check_tool}
check_flags = ${env.check_flags}
[esp32_defaults] [esp32_defaults]
;platform = espressif32@^6.7 platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.36/platform-espressif32.zip
;platform = https://github.com/platformio/platform-espressif32.git platform_packages = ${env.platform_packages}
;platform_packages = board_build.partitions = esp32_partitions.csv
; framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.5 lib_deps = ${env.lib_deps}
; framework-arduinoespressif32-libs @ https://github.com/espressif/esp32-arduino-lib-builder/releases/download/idf-release_v5.1/esp32-arduino-libs-idf-release_v5.1-33fbade6.zip laxilef/ESP32Scheduler@^1.0.1
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip nimble_lib = https://github.com/h2zero/NimBLE-Arduino
platform_packages = ${env.platform_packages} lib_ignore = ${env.lib_ignore}
board_build.partitions = esp32_partitions.csv BluetoothSerial
lib_deps = SimpleBLE
${env.lib_deps} ESP RainMaker
laxilef/ESP32Scheduler@^1.0.1 RainMaker
nimble_lib = https://github.com/h2zero/NimBLE-Arduino ESP Insights
lib_ignore = Insights
extra_scripts = Zigbee
post:tools/esp32.py Matter
post:tools/build.py OpenThread
build_type = ${env.build_type} dsp
build_flags = custom_component_remove = espressif/esp_hosted
${env.build_flags} espressif/esp_wifi_remote
-D CORE_DEBUG_LEVEL=0 espressif/esp-dsp
-Wl,--wrap=esp_panic_handler espressif/esp_modem
check_tool = ${env.check_tool} espressif/esp_rainmaker
check_flags = ${env.check_flags} espressif/rmaker_common
espressif/esp_insights
espressif/esp_diag_data_store
espressif/esp_diagnostics
espressif/libsodium
espressif/esp-modbus
espressif/esp-cbor
espressif/esp-sr
espressif/esp32-camera
espressif/qrcode
espressif/esp-zboss-lib
espressif/esp-zigbee-lib
chmorgan/esp-libhelix-mp3
extra_scripts = post:tools/esp32.py
post:tools/build.py
build_type = ${env.build_type}
build_flags = ${env.build_flags}
-D CORE_DEBUG_LEVEL=0
-Wl,--wrap=esp_panic_handler
check_tool = ${env.check_tool}
check_flags = ${env.check_flags}
; Boards ; Boards
[env:d1_mini]
platform = ${esp8266_defaults.platform}
platform_packages = ${esp8266_defaults.platform_packages}
board = d1_mini
lib_deps = ${esp8266_defaults.lib_deps}
lib_ignore = ${esp8266_defaults.lib_ignore}
extra_scripts = ${esp8266_defaults.extra_scripts}
board_build.ldscript = ${esp8266_defaults.board_build.ldscript}
build_type = ${esp8266_defaults.build_type}
build_flags =
${esp8266_defaults.build_flags}
-D DEFAULT_OT_IN_GPIO=4
-D DEFAULT_OT_OUT_GPIO=5
-D DEFAULT_SENSOR_OUTDOOR_GPIO=12
-D DEFAULT_SENSOR_INDOOR_GPIO=14
-D DEFAULT_STATUS_LED_GPIO=13
-D DEFAULT_OT_RX_LED_GPIO=15
check_tool = ${esp8266_defaults.check_tool}
check_flags = ${esp8266_defaults.check_flags}
[env:d1_mini_lite]
platform = ${esp8266_defaults.platform}
platform_packages = ${esp8266_defaults.platform_packages}
board = d1_mini_lite
lib_deps = ${esp8266_defaults.lib_deps}
lib_ignore = ${esp8266_defaults.lib_ignore}
extra_scripts = ${esp8266_defaults.extra_scripts}
board_build.ldscript = ${esp8266_defaults.board_build.ldscript}
build_type = ${esp8266_defaults.build_type}
build_flags =
${esp8266_defaults.build_flags}
-D DEFAULT_OT_IN_GPIO=4
-D DEFAULT_OT_OUT_GPIO=5
-D DEFAULT_SENSOR_OUTDOOR_GPIO=12
-D DEFAULT_SENSOR_INDOOR_GPIO=14
-D DEFAULT_STATUS_LED_GPIO=13
-D DEFAULT_OT_RX_LED_GPIO=15
check_tool = ${esp8266_defaults.check_tool}
check_flags = ${esp8266_defaults.check_flags}
[env:d1_mini_pro]
platform = ${esp8266_defaults.platform}
platform_packages = ${esp8266_defaults.platform_packages}
board = d1_mini_pro
lib_deps = ${esp8266_defaults.lib_deps}
lib_ignore = ${esp8266_defaults.lib_ignore}
extra_scripts = ${esp8266_defaults.extra_scripts}
board_build.ldscript = ${esp8266_defaults.board_build.ldscript}
build_type = ${esp8266_defaults.build_type}
build_flags =
${esp8266_defaults.build_flags}
-D DEFAULT_OT_IN_GPIO=4
-D DEFAULT_OT_OUT_GPIO=5
-D DEFAULT_SENSOR_OUTDOOR_GPIO=12
-D DEFAULT_SENSOR_INDOOR_GPIO=14
-D DEFAULT_STATUS_LED_GPIO=13
-D DEFAULT_OT_RX_LED_GPIO=15
check_tool = ${esp8266_defaults.check_tool}
check_flags = ${esp8266_defaults.check_flags}
[env:nodemcu_8266]
platform = ${esp8266_defaults.platform}
platform_packages = ${esp8266_defaults.platform_packages}
board = nodemcuv2
lib_deps = ${esp8266_defaults.lib_deps}
lib_ignore = ${esp8266_defaults.lib_ignore}
extra_scripts = ${esp8266_defaults.extra_scripts}
board_build.ldscript = ${esp8266_defaults.board_build.ldscript}
build_type = ${esp8266_defaults.build_type}
build_flags =
${esp8266_defaults.build_flags}
-D DEFAULT_OT_IN_GPIO=13
-D DEFAULT_OT_OUT_GPIO=15
-D DEFAULT_SENSOR_OUTDOOR_GPIO=12
-D DEFAULT_SENSOR_INDOOR_GPIO=4
-D DEFAULT_STATUS_LED_GPIO=2
-D DEFAULT_OT_RX_LED_GPIO=16
check_tool = ${esp8266_defaults.check_tool}
check_flags = ${esp8266_defaults.check_flags}
[env:s2_mini] [env:s2_mini]
platform = ${esp32_defaults.platform} extends = esp32_defaults
platform_packages = ${esp32_defaults.platform_packages} board = lolin_s2_mini
board = lolin_s2_mini build_unflags = -DARDUINO_USB_MODE=1
board_build.partitions = ${esp32_defaults.board_build.partitions} build_flags = ${esp32_defaults.build_flags}
lib_deps = ${esp32_defaults.lib_deps} -D ARDUINO_USB_MODE=0
lib_ignore = ${esp32_defaults.lib_ignore} -D ARDUINO_USB_CDC_ON_BOOT=1
extra_scripts = ${esp32_defaults.extra_scripts} -D DEFAULT_OT_IN_GPIO=33
build_unflags = -D DEFAULT_OT_OUT_GPIO=35
-DARDUINO_USB_MODE=1 -D DEFAULT_SENSOR_OUTDOOR_GPIO=9
build_type = ${esp32_defaults.build_type} -D DEFAULT_SENSOR_INDOOR_GPIO=7
build_flags = -D DEFAULT_STATUS_LED_GPIO=11
${esp32_defaults.build_flags} -D DEFAULT_OT_RX_LED_GPIO=12
-D ARDUINO_USB_MODE=0
-D ARDUINO_USB_CDC_ON_BOOT=1
-D DEFAULT_OT_IN_GPIO=33
-D DEFAULT_OT_OUT_GPIO=35
-D DEFAULT_SENSOR_OUTDOOR_GPIO=9
-D DEFAULT_SENSOR_INDOOR_GPIO=7
-D DEFAULT_STATUS_LED_GPIO=11
-D DEFAULT_OT_RX_LED_GPIO=12
check_tool = ${esp32_defaults.check_tool}
check_flags = ${esp32_defaults.check_flags}
[env:s3_mini] [env:s3_mini]
platform = ${esp32_defaults.platform} extends = esp32_defaults
platform_packages = ${esp32_defaults.platform_packages} board = lolin_s3_mini
board = lolin_s3_mini lib_deps = ${esp32_defaults.lib_deps}
board_build.partitions = ${esp32_defaults.board_build.partitions} ${esp32_defaults.nimble_lib}
lib_deps = build_unflags = -DARDUINO_USB_MODE=1
${esp32_defaults.lib_deps} build_flags = ${esp32_defaults.build_flags}
${esp32_defaults.nimble_lib} -D ARDUINO_USB_MODE=0
lib_ignore = ${esp32_defaults.lib_ignore} -D ARDUINO_USB_CDC_ON_BOOT=1
extra_scripts = ${esp32_defaults.extra_scripts} -D MYNEWT_VAL_BLE_EXT_ADV=1
build_unflags = -D USE_BLE=1
-DARDUINO_USB_MODE=1 -D DEFAULT_OT_IN_GPIO=35
build_type = ${esp32_defaults.build_type} -D DEFAULT_OT_OUT_GPIO=36
build_flags = -D DEFAULT_SENSOR_OUTDOOR_GPIO=13
${esp32_defaults.build_flags} -D DEFAULT_SENSOR_INDOOR_GPIO=12
-D ARDUINO_USB_MODE=0 -D DEFAULT_STATUS_LED_GPIO=11
-D ARDUINO_USB_CDC_ON_BOOT=1 -D DEFAULT_OT_RX_LED_GPIO=10
-D MYNEWT_VAL_BLE_EXT_ADV=1
-D USE_BLE=1
-D DEFAULT_OT_IN_GPIO=35
-D DEFAULT_OT_OUT_GPIO=36
-D DEFAULT_SENSOR_OUTDOOR_GPIO=13
-D DEFAULT_SENSOR_INDOOR_GPIO=12
-D DEFAULT_STATUS_LED_GPIO=11
-D DEFAULT_OT_RX_LED_GPIO=10
check_tool = ${esp32_defaults.check_tool}
check_flags = ${esp32_defaults.check_flags}
[env:c3_mini] [env:c3_mini]
platform = ${esp32_defaults.platform} extends = esp32_defaults
platform_packages = ${esp32_defaults.platform_packages} board = lolin_c3_mini
board = lolin_c3_mini lib_deps = ${esp32_defaults.lib_deps}
board_build.partitions = ${esp32_defaults.board_build.partitions} ${esp32_defaults.nimble_lib}
lib_deps = build_unflags = -mtext-section-literals
${esp32_defaults.lib_deps} build_flags = ${esp32_defaults.build_flags}
${esp32_defaults.nimble_lib} -D MYNEWT_VAL_BLE_EXT_ADV=1
lib_ignore = ${esp32_defaults.lib_ignore} -D USE_BLE=1
extra_scripts = ${esp32_defaults.extra_scripts} -D DEFAULT_OT_IN_GPIO=8
build_unflags = -D DEFAULT_OT_OUT_GPIO=10
-mtext-section-literals -D DEFAULT_SENSOR_OUTDOOR_GPIO=0
build_type = ${esp32_defaults.build_type} -D DEFAULT_SENSOR_INDOOR_GPIO=1
build_flags = -D DEFAULT_STATUS_LED_GPIO=4
${esp32_defaults.build_flags} -D DEFAULT_OT_RX_LED_GPIO=5
-D MYNEWT_VAL_BLE_EXT_ADV=1
-D USE_BLE=1
-D DEFAULT_OT_IN_GPIO=8
-D DEFAULT_OT_OUT_GPIO=10
-D DEFAULT_SENSOR_OUTDOOR_GPIO=0
-D DEFAULT_SENSOR_INDOOR_GPIO=1
-D DEFAULT_STATUS_LED_GPIO=4
-D DEFAULT_OT_RX_LED_GPIO=5
check_tool = ${esp32_defaults.check_tool}
check_flags = ${esp32_defaults.check_flags}
[env:nodemcu_32] [env:nodemcu_32]
platform = ${esp32_defaults.platform} extends = esp32_defaults
platform_packages = ${esp32_defaults.platform_packages} board = nodemcu-32s
board = nodemcu-32s lib_deps = ${esp32_defaults.lib_deps}
board_build.partitions = ${esp32_defaults.board_build.partitions} ${esp32_defaults.nimble_lib}
lib_deps = build_flags = ${esp32_defaults.build_flags}
${esp32_defaults.lib_deps} -D USE_BLE=1
${esp32_defaults.nimble_lib} -D DEFAULT_OT_IN_GPIO=16
lib_ignore = ${esp32_defaults.lib_ignore} -D DEFAULT_OT_OUT_GPIO=4
extra_scripts = ${esp32_defaults.extra_scripts} -D DEFAULT_SENSOR_OUTDOOR_GPIO=15
build_type = ${esp32_defaults.build_type} -D DEFAULT_SENSOR_INDOOR_GPIO=26
build_flags = -D DEFAULT_STATUS_LED_GPIO=2
${esp32_defaults.build_flags} -D DEFAULT_OT_RX_LED_GPIO=19
-D USE_BLE=1
-D DEFAULT_OT_IN_GPIO=16
-D DEFAULT_OT_OUT_GPIO=4
-D DEFAULT_SENSOR_OUTDOOR_GPIO=15
-D DEFAULT_SENSOR_INDOOR_GPIO=26
-D DEFAULT_STATUS_LED_GPIO=2
-D DEFAULT_OT_RX_LED_GPIO=19
check_tool = ${esp32_defaults.check_tool}
check_flags = ${esp32_defaults.check_flags}
[env:nodemcu_32_160mhz] [env:nodemcu_32_160mhz]
extends = env:nodemcu_32 extends = env:nodemcu_32
board_build.f_cpu = 160000000L ; set frequency to 160MHz board_build.f_cpu = 160000000L ; set frequency to 160MHz
[env:d1_mini32] [env:d1_mini32]
platform = ${esp32_defaults.platform} extends = esp32_defaults
platform_packages = ${esp32_defaults.platform_packages} board = wemos_d1_mini32
board = wemos_d1_mini32 lib_deps = ${esp32_defaults.lib_deps}
board_build.partitions = ${esp32_defaults.board_build.partitions} ${esp32_defaults.nimble_lib}
lib_deps = build_flags = ${esp32_defaults.build_flags}
${esp32_defaults.lib_deps} -D USE_BLE=1
${esp32_defaults.nimble_lib} -D DEFAULT_OT_IN_GPIO=21
lib_ignore = ${esp32_defaults.lib_ignore} -D DEFAULT_OT_OUT_GPIO=22
extra_scripts = ${esp32_defaults.extra_scripts} -D DEFAULT_SENSOR_OUTDOOR_GPIO=12
build_type = ${esp32_defaults.build_type} -D DEFAULT_SENSOR_INDOOR_GPIO=18
build_flags = -D DEFAULT_STATUS_LED_GPIO=2
${esp32_defaults.build_flags} -D DEFAULT_OT_RX_LED_GPIO=19
-D USE_BLE=1
-D DEFAULT_OT_IN_GPIO=21
-D DEFAULT_OT_OUT_GPIO=22
-D DEFAULT_SENSOR_OUTDOOR_GPIO=12
-D DEFAULT_SENSOR_INDOOR_GPIO=18
-D DEFAULT_STATUS_LED_GPIO=2
-D DEFAULT_OT_RX_LED_GPIO=19
check_tool = ${esp32_defaults.check_tool}
check_flags = ${esp32_defaults.check_flags}
[env:esp32_c6] [env:esp32_c6]
platform = ${esp32_defaults.platform} extends = esp32_defaults
framework = arduino, espidf board = esp32-c6-devkitc-1
platform_packages = ${esp32_defaults.platform_packages} lib_deps = ${esp32_defaults.lib_deps}
board = esp32-c6-devkitm-1 ${esp32_defaults.nimble_lib}
board_build.partitions = ${esp32_defaults.board_build.partitions} build_unflags = -mtext-section-literals
board_build.embed_txtfiles = build_flags = ${esp32_defaults.build_flags}
managed_components/espressif__esp_insights/server_certs/https_server.crt -D USE_BLE=1
managed_components/espressif__esp_rainmaker/server_certs/rmaker_mqtt_server.crt -D DEFAULT_OT_IN_GPIO=15
managed_components/espressif__esp_rainmaker/server_certs/rmaker_claim_service_server.crt -D DEFAULT_OT_OUT_GPIO=23
managed_components/espressif__esp_rainmaker/server_certs/rmaker_ota_server.crt -D DEFAULT_SENSOR_OUTDOOR_GPIO=0
lib_deps = ${esp32_defaults.lib_deps} -D DEFAULT_SENSOR_INDOOR_GPIO=0
lib_ignore = -D DEFAULT_STATUS_LED_GPIO=11
${esp32_defaults.lib_ignore} -D DEFAULT_OT_RX_LED_GPIO=10
extra_scripts = ${esp32_defaults.extra_scripts}
build_unflags =
-mtext-section-literals
build_type = ${esp32_defaults.build_type}
build_flags =
${esp32_defaults.build_flags}
-D USE_BLE=1
-D DEFAULT_OT_IN_GPIO=15
-D DEFAULT_OT_OUT_GPIO=23
-D DEFAULT_SENSOR_OUTDOOR_GPIO=0
-D DEFAULT_SENSOR_INDOOR_GPIO=0
-D DEFAULT_STATUS_LED_GPIO=11
-D DEFAULT_OT_RX_LED_GPIO=10
check_tool = ${esp32_defaults.check_tool}
check_flags = ${esp32_defaults.check_flags}
[env:otthing] [env:otthing]
platform = ${esp32_defaults.platform} extends = esp32_defaults
platform_packages = ${esp32_defaults.platform_packages} board = lolin_c3_mini
board = lolin_c3_mini lib_deps = ${esp32_defaults.lib_deps}
board_build.partitions = ${esp32_defaults.board_build.partitions} ${esp32_defaults.nimble_lib}
lib_deps = build_unflags = -mtext-section-literals
${esp32_defaults.lib_deps} build_flags = ${esp32_defaults.build_flags}
${esp32_defaults.nimble_lib} -D MYNEWT_VAL_BLE_EXT_ADV=1
lib_ignore = ${esp32_defaults.lib_ignore} -D USE_BLE=1
extra_scripts = ${esp32_defaults.extra_scripts} -D DEFAULT_OT_IN_GPIO=3
build_unflags = -D DEFAULT_OT_OUT_GPIO=1
-mtext-section-literals ;-D DEFAULT_SENSOR_OUTDOOR_GPIO=0
build_type = ${esp32_defaults.build_type} ;-D DEFAULT_SENSOR_INDOOR_GPIO=1
build_flags = -D DEFAULT_STATUS_LED_GPIO=8
${esp32_defaults.build_flags} -D DEFAULT_OT_RX_LED_GPIO=2
-D MYNEWT_VAL_BLE_EXT_ADV=1 -D OT_BYPASS_RELAY_GPIO=20
-D USE_BLE=1
-D DEFAULT_OT_IN_GPIO=3
-D DEFAULT_OT_OUT_GPIO=1
; -D DEFAULT_SENSOR_OUTDOOR_GPIO=0
; -D DEFAULT_SENSOR_INDOOR_GPIO=1
-D DEFAULT_STATUS_LED_GPIO=8
-D DEFAULT_OT_RX_LED_GPIO=2
-D OT_BYPASS_RELAY_GPIO=20
check_tool = ${esp32_defaults.check_tool}
check_flags = ${esp32_defaults.check_flags}

View File

@@ -49,6 +49,10 @@ protected:
return "Main"; return "Main";
} }
uint32_t getTaskStackSize() override {
return 6000;
}
/*BaseType_t getTaskCore() override { /*BaseType_t getTaskCore() override {
return 1; return 1;
}*/ }*/
@@ -128,8 +132,6 @@ protected:
tMqtt->disable(); tMqtt->disable();
} }
Sensors::setConnectionStatusByType(Sensors::Type::MANUAL, !settings.mqtt.enabled || vars.mqtt.connected, false);
} else { } else {
if (this->ntpStarted) { if (this->ntpStarted) {
this->ntpStarted = false; this->ntpStarted = false;

View File

@@ -38,8 +38,12 @@ protected:
return "OpenTherm"; return "OpenTherm";
} }
uint32_t getTaskStackSize() override {
return 7500;
}
BaseType_t getTaskCore() override { BaseType_t getTaskCore() override {
return 1; return 0;
} }
int getTaskPriority() override { int getTaskPriority() override {

View File

@@ -172,8 +172,19 @@ protected:
sensorSettingsToJson(sensorId, Sensors::settings[sensorId], sensorsettingsDoc); sensorSettingsToJson(sensorId, Sensors::settings[sensorId], sensorsettingsDoc);
} }
char filename[64];
getFilename(filename, sizeof(filename), "backup");
char contentDispositionValue[128];
snprintf_P(
contentDispositionValue,
sizeof(contentDispositionValue),
PSTR("attachment; filename=\"%s\""),
filename
);
// send response // send response
response->addHeader("Content-Disposition", "attachment; filename=\"backup.json\""); response->addHeader("Content-Disposition", contentDispositionValue);
response->setLength(); response->setLength();
request->send(response); request->send(response);
}).addMiddleware(&authMiddleware); }).addMiddleware(&authMiddleware);
@@ -624,8 +635,19 @@ protected:
docCrash[FPSTR(S_EPC)] = epcStr; docCrash[FPSTR(S_EPC)] = epcStr;
} }
} }
char filename[64];
getFilename(filename, sizeof(filename), "debug");
char contentDispositionValue[128];
snprintf_P(
contentDispositionValue,
sizeof(contentDispositionValue),
PSTR("attachment; filename=\"%s\""),
filename
);
// send response // send response
response->addHeader("Content-Disposition", "attachment; filename=\"debug.json\""); response->addHeader("Content-Disposition", contentDispositionValue);
response->setLength(); response->setLength();
request->send(response); request->send(response);
}).addMiddleware(&authMiddleware); }).addMiddleware(&authMiddleware);
@@ -783,4 +805,12 @@ protected:
this->dnsServer->stop(); this->dnsServer->stop();
this->dnsServerEnabled = false; this->dnsServerEnabled = false;
} }
static void getFilename(char* filename, size_t maxSizeFilename, const char* type) {
const time_t now = time(nullptr);
const tm* localNow = localtime(&now);
char localNowValue[20];
strftime(localNowValue, sizeof(localNowValue), PSTR("%Y-%m-%d-%H-%M-%S"), localNow);
snprintf_P(filename, maxSizeFilename, PSTR("%s_%s_%s.json"), networkSettings.hostname, localNowValue, type);
}
}; };

View File

@@ -20,6 +20,10 @@ protected:
return "Regulator"; return "Regulator";
} }
uint32_t getTaskStackSize() override {
return 5000;
}
/*BaseType_t getTaskCore() override { /*BaseType_t getTaskCore() override {
return 1; return 1;
}*/ }*/

File diff suppressed because it is too large Load Diff

View File

@@ -2099,21 +2099,18 @@ bool jsonToSensorResult(const uint8_t sensorId, const JsonVariantConst src) {
return false; return false;
} }
auto& dst = Sensors::results[sensorId];
bool changed = false;
// value // value
if (!src[FPSTR(S_VALUE)].isNull()) { if (!src[FPSTR(S_VALUE)].isNull()) {
float value = src[FPSTR(S_VALUE)].as<float>(); return Sensors::setValueById(
sensorId,
uint8_t vType = static_cast<uint8_t>(Sensors::ValueType::PRIMARY); src[FPSTR(S_VALUE)].as<float>(),
if (fabsf(value - dst.values[vType]) > 0.0001f) { Sensors::ValueType::PRIMARY,
dst.values[vType] = roundf(value, 2); true,
changed = true; true
} );
} }
return changed; return false;
} }
void varsToJson(const Variables& src, JsonVariant dst) { void varsToJson(const Variables& src, JsonVariant dst) {