15 Commits

Author SHA1 Message Date
Yurii
74e321cc1e Merge branch 'async' into passive_ble 2026-01-23 00:26:24 +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
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
25 changed files with 289 additions and 814 deletions

2
.gitignore vendored
View File

@@ -1,5 +1,4 @@
.pio .pio
.dummy
.vscode .vscode
.PVS-Studio .PVS-Studio
build/* build/*
@@ -11,4 +10,5 @@ package-lock.json
*.lock *.lock
sdkconfig.* sdkconfig.*
CMakeLists.txt CMakeLists.txt
!sdkconfig.defaults
!.gitkeep !.gitkeep

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: 26.01.2026 # Updated: 03.09.2024
blueprint: blueprint:
name: Report temp to OpenTherm Gateway name: Report temp to OpenTherm Gateway
@@ -15,6 +15,7 @@ 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``"
@@ -37,12 +38,8 @@ 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: or - condition: template
conditions: value_template: "{{ (states(source_entity)|float(0) - states(target_entity)|float(0)) | abs | round(2) >= 0.01 }}"
- 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: 26.01.2026 # Updated: 03.09.2024
blueprint: blueprint:
name: Report temp to OpenTherm Gateway from Weather name: Report temp to OpenTherm Gateway from Weather
@@ -37,12 +37,8 @@ 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: or - condition: template
conditions: value_template: "{{ (state_attr(source_entity, 'temperature')|float(0) - states(target_entity)|float(0)) | abs | round(2) >= 0.1 }}"
- 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

@@ -4,7 +4,7 @@ extra_configs = secrets.default.ini
core_dir = .pio core_dir = .pio
[env] [env]
version = 1.6.0-async version = 1.6.0-passiveble
framework = arduino framework = arduino
lib_deps = ESP32Async/AsyncTCP@^3.4.10 lib_deps = ESP32Async/AsyncTCP@^3.4.10
ESP32Async/ESPAsyncWebServer@^3.9.4 ESP32Async/ESPAsyncWebServer@^3.9.4
@@ -17,14 +17,13 @@ lib_deps = ESP32Async/AsyncTCP@^3.4.10
gyverlibs/GyverPID@^3.3.2 gyverlibs/GyverPID@^3.3.2
gyverlibs/GyverBlinker@^1.1.1 gyverlibs/GyverBlinker@^1.1.1
pstolarz/OneWireNg@^0.14.1 pstolarz/OneWireNg@^0.14.1
milesburton/DallasTemperature@^4.0.6 ;milesburton/DallasTemperature@^4.0.5
https://github.com/Laxilef/esp32DHT#idf5 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
lib_ignore = OneWire lib_ignore = paulstoffregen/OneWire
build_type = ${secrets.build_type} build_type = ${secrets.build_type}
build_flags = ;-mtext-section-literals build_flags = -mtext-section-literals
-O2
-Wno-deprecated-declarations -Wno-deprecated-declarations
-D MQTT_CLIENT_STD_FUNCTION_CALLBACK=1 -D MQTT_CLIENT_STD_FUNCTION_CALLBACK=1
;-D DEBUG_ESP_CORE -D DEBUG_ESP_WIFI -D DEBUG_ESP_HTTP_SERVER -D DEBUG_ESP_PORT=Serial ;-D DEBUG_ESP_CORE -D DEBUG_ESP_WIFI -D DEBUG_ESP_HTTP_SERVER -D DEBUG_ESP_PORT=Serial
@@ -34,7 +33,6 @@ build_flags = ;-mtext-section-literals
-D ARDUINOJSON_USE_DOUBLE=0 -D ARDUINOJSON_USE_DOUBLE=0
-D ARDUINOJSON_USE_LONG_LONG=0 -D ARDUINOJSON_USE_LONG_LONG=0
-D TINYLOGGER_GLOBAL -D TINYLOGGER_GLOBAL
-D DHT_TASK_STACK_SIZE=4096
-D DEFAULT_SERIAL_ENABLED=${secrets.serial_enabled} -D DEFAULT_SERIAL_ENABLED=${secrets.serial_enabled}
-D DEFAULT_SERIAL_BAUD=${secrets.serial_baud} -D DEFAULT_SERIAL_BAUD=${secrets.serial_baud}
-D DEFAULT_WEBSERIAL_ENABLED=${secrets.webserial_enabled} -D DEFAULT_WEBSERIAL_ENABLED=${secrets.webserial_enabled}
@@ -63,7 +61,7 @@ check_flags = ;pvs-studio: --analysis-mode=4 --exclude-path=./.pio/l
; Defaults ; Defaults
[esp32_defaults] [esp32_defaults]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.37/platform-espressif32.zip platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.36/platform-espressif32.zip
platform_packages = ${env.platform_packages} platform_packages = ${env.platform_packages}
board_build.partitions = esp32_partitions.csv board_build.partitions = esp32_partitions.csv
lib_deps = ${env.lib_deps} lib_deps = ${env.lib_deps}
@@ -98,8 +96,7 @@ custom_component_remove = espressif/esp_hosted
espressif/esp-zboss-lib espressif/esp-zboss-lib
espressif/esp-zigbee-lib espressif/esp-zigbee-lib
chmorgan/esp-libhelix-mp3 chmorgan/esp-libhelix-mp3
extra_scripts = pre:tools/add_build_commit.py extra_scripts = post:tools/esp32.py
post:tools/esp32.py
post:tools/build.py post:tools/build.py
build_type = ${env.build_type} build_type = ${env.build_type}
build_flags = ${env.build_flags} build_flags = ${env.build_flags}
@@ -147,7 +144,7 @@ extends = esp32_defaults
board = lolin_c3_mini board = lolin_c3_mini
lib_deps = ${esp32_defaults.lib_deps} lib_deps = ${esp32_defaults.lib_deps}
${esp32_defaults.nimble_lib} ${esp32_defaults.nimble_lib}
;build_unflags = -mtext-section-literals build_unflags = -mtext-section-literals
build_flags = ${esp32_defaults.build_flags} build_flags = ${esp32_defaults.build_flags}
-D MYNEWT_VAL_BLE_EXT_ADV=1 -D MYNEWT_VAL_BLE_EXT_ADV=1
-D USE_BLE=1 -D USE_BLE=1
@@ -195,7 +192,7 @@ extends = esp32_defaults
board = esp32-c6-devkitc-1 board = esp32-c6-devkitc-1
lib_deps = ${esp32_defaults.lib_deps} lib_deps = ${esp32_defaults.lib_deps}
${esp32_defaults.nimble_lib} ${esp32_defaults.nimble_lib}
;build_unflags = -mtext-section-literals build_unflags = -mtext-section-literals
build_flags = ${esp32_defaults.build_flags} build_flags = ${esp32_defaults.build_flags}
-D USE_BLE=1 -D USE_BLE=1
-D DEFAULT_OT_IN_GPIO=15 -D DEFAULT_OT_IN_GPIO=15
@@ -204,18 +201,13 @@ build_flags = ${esp32_defaults.build_flags}
-D DEFAULT_SENSOR_INDOOR_GPIO=0 -D DEFAULT_SENSOR_INDOOR_GPIO=0
-D DEFAULT_STATUS_LED_GPIO=11 -D DEFAULT_STATUS_LED_GPIO=11
-D DEFAULT_OT_RX_LED_GPIO=10 -D DEFAULT_OT_RX_LED_GPIO=10
custom_sdkconfig = '# CONFIG_OPENTHREAD_ENABLED is not set'
'# CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT is not set'
'# CONFIG_LWIP_IPV6 is not set'
'# CONFIG_LWIP_IPV6_AUTOCONFIG is not set'
'# CONFIG_LWIP_PPP_SUPPORT is not set'
[env:otthing] [env:otthing]
extends = esp32_defaults extends = esp32_defaults
board = lolin_c3_mini board = lolin_c3_mini
lib_deps = ${esp32_defaults.lib_deps} lib_deps = ${esp32_defaults.lib_deps}
${esp32_defaults.nimble_lib} ${esp32_defaults.nimble_lib}
;build_unflags = -mtext-section-literals build_unflags = -mtext-section-literals
build_flags = ${esp32_defaults.build_flags} build_flags = ${esp32_defaults.build_flags}
-D MYNEWT_VAL_BLE_EXT_ADV=1 -D MYNEWT_VAL_BLE_EXT_ADV=1
-D USE_BLE=1 -D USE_BLE=1

33
sdkconfig.defaults Normal file
View File

@@ -0,0 +1,33 @@
# Source:
# https://github.com/pioarduino/platform-espressif32/tree/main/examples/espidf-arduino-h2zero-BLE_scan
CONFIG_FREERTOS_HZ=1000
CONFIG_MBEDTLS_PSK_MODES=y
CONFIG_MBEDTLS_KEY_EXCHANGE_PSK=y
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE=y
#
# BT config
CONFIG_BT_ENABLED=y
CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y
CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=n
CONFIG_BTDM_CTRL_MODE_BTDM=n
CONFIG_BT_BLUEDROID_ENABLED=n
CONFIG_BT_NIMBLE_ENABLED=y
#
# Arduino Configuration
CONFIG_AUTOSTART_ARDUINO=y
CONFIG_ARDUINO_SELECTIVE_COMPILATION=y
CONFIG_ARDUINO_SELECTIVE_Zigbee=n
CONFIG_ARDUINO_SELECTIVE_Matter=n
CONFIG_ARDUINO_SELECTIVE_WiFiProv=n
CONFIG_ARDUINO_SELECTIVE_BLE=n
CONFIG_ARDUINO_SELECTIVE_BluetoothSerial=n
CONFIG_ARDUINO_SELECTIVE_SimpleBLE=n
CONFIG_ARDUINO_SELECTIVE_RainMaker=n
CONFIG_ARDUINO_SELECTIVE_OpenThread=n
CONFIG_ARDUINO_SELECTIVE_Insights=n

View File

@@ -176,10 +176,9 @@ public:
objId.c_str() objId.c_str()
); );
// set device class, name, value template for Bluetooth/DHT sensors // set device class, name, value template for bluetooth sensors
// or name & value template for another sensors // or name & value template for another sensors
if (sSensor.type == Sensors::Type::BLUETOOTH || if (sSensor.type == Sensors::Type::BLUETOOTH) {
sSensor.type == Sensors::Type::DHT11 || sSensor.type == Sensors::Type::DHT22) {
// available state topic // available state topic
doc[FPSTR(HA_AVAILABILITY)][1][FPSTR(HA_TOPIC)] = doc[FPSTR(HA_STATE_TOPIC)]; doc[FPSTR(HA_AVAILABILITY)][1][FPSTR(HA_TOPIC)] = doc[FPSTR(HA_STATE_TOPIC)];
doc[FPSTR(HA_AVAILABILITY)][1][FPSTR(HA_VALUE_TEMPLATE)] = JsonString(AVAILABILITY_SENSOR_CONN, true); doc[FPSTR(HA_AVAILABILITY)][1][FPSTR(HA_VALUE_TEMPLATE)] = JsonString(AVAILABILITY_SENSOR_CONN, true);

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,6 +132,8 @@ 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

@@ -292,14 +292,6 @@ protected:
this->haHelper->deleteDynamicSensor(prevSettings, Sensors::ValueType::RSSI); this->haHelper->deleteDynamicSensor(prevSettings, Sensors::ValueType::RSSI);
break; break;
case Sensors::Type::DHT11:
case Sensors::Type::DHT22:
this->haHelper->deleteConnectionDynamicSensor(prevSettings);
this->haHelper->deleteSignalQualityDynamicSensor(prevSettings);
this->haHelper->deleteDynamicSensor(prevSettings, Sensors::ValueType::TEMPERATURE);
this->haHelper->deleteDynamicSensor(prevSettings, Sensors::ValueType::HUMIDITY);
break;
case Sensors::Type::DALLAS_TEMP: case Sensors::Type::DALLAS_TEMP:
this->haHelper->deleteConnectionDynamicSensor(prevSettings); this->haHelper->deleteConnectionDynamicSensor(prevSettings);
this->haHelper->deleteSignalQualityDynamicSensor(prevSettings); this->haHelper->deleteSignalQualityDynamicSensor(prevSettings);
@@ -327,14 +319,6 @@ protected:
this->haHelper->publishDynamicSensor(sSettings, Sensors::ValueType::RSSI, settings.system.unitSystem, false); this->haHelper->publishDynamicSensor(sSettings, Sensors::ValueType::RSSI, settings.system.unitSystem, false);
break; break;
case Sensors::Type::DHT11:
case Sensors::Type::DHT22:
this->haHelper->publishConnectionDynamicSensor(sSettings);
this->haHelper->publishSignalQualityDynamicSensor(sSettings, false);
this->haHelper->publishDynamicSensor(sSettings, Sensors::ValueType::TEMPERATURE, settings.system.unitSystem);
this->haHelper->publishDynamicSensor(sSettings, Sensors::ValueType::HUMIDITY, settings.system.unitSystem);
break;
case Sensors::Type::DALLAS_TEMP: case Sensors::Type::DALLAS_TEMP:
this->haHelper->publishConnectionDynamicSensor(sSettings); this->haHelper->publishConnectionDynamicSensor(sSettings);
this->haHelper->publishSignalQualityDynamicSensor(sSettings, false); this->haHelper->publishSignalQualityDynamicSensor(sSettings, false);

View File

@@ -38,6 +38,10 @@ protected:
return "OpenTherm"; return "OpenTherm";
} }
uint32_t getTaskStackSize() override {
return 7500;
}
BaseType_t getTaskCore() override { BaseType_t getTaskCore() override {
return 1; return 1;
} }

View File

@@ -552,7 +552,6 @@ protected:
auto docBuild = doc[FPSTR(S_BUILD)].to<JsonObject>(); auto docBuild = doc[FPSTR(S_BUILD)].to<JsonObject>();
docBuild[FPSTR(S_VERSION)] = BUILD_VERSION; docBuild[FPSTR(S_VERSION)] = BUILD_VERSION;
docBuild[FPSTR(S_COMMIT)] = BUILD_COMMIT;
docBuild[FPSTR(S_DATE)] = __DATE__ " " __TIME__; docBuild[FPSTR(S_DATE)] = __DATE__ " " __TIME__;
docBuild[FPSTR(S_ENV)] = BUILD_ENV; docBuild[FPSTR(S_ENV)] = BUILD_ENV;
docBuild[FPSTR(S_CORE)] = ESP.getCoreVersion(); docBuild[FPSTR(S_CORE)] = ESP.getCoreVersion();
@@ -593,7 +592,6 @@ protected:
auto docBuild = doc[FPSTR(S_BUILD)].to<JsonObject>(); auto docBuild = doc[FPSTR(S_BUILD)].to<JsonObject>();
docBuild[FPSTR(S_VERSION)] = BUILD_VERSION; docBuild[FPSTR(S_VERSION)] = BUILD_VERSION;
docBuild[FPSTR(S_COMMIT)] = BUILD_COMMIT;
docBuild[FPSTR(S_DATE)] = __DATE__ " " __TIME__; docBuild[FPSTR(S_DATE)] = __DATE__ " " __TIME__;
docBuild[FPSTR(S_ENV)] = BUILD_ENV; docBuild[FPSTR(S_ENV)] = BUILD_ENV;
docBuild[FPSTR(S_CORE)] = ESP.getCoreVersion(); docBuild[FPSTR(S_CORE)] = ESP.getCoreVersion();

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;
}*/ }*/

View File

@@ -39,8 +39,6 @@ public:
NTC_10K_TEMP = 50, NTC_10K_TEMP = 50,
DALLAS_TEMP = 51, DALLAS_TEMP = 51,
BLUETOOTH = 52, BLUETOOTH = 52,
DHT11 = 53,
DHT22 = 54,
HEATING_SETPOINT_TEMP = 253, HEATING_SETPOINT_TEMP = 253,
MANUAL = 254, MANUAL = 254,

File diff suppressed because it is too large Load Diff

View File

@@ -30,10 +30,6 @@
#define BUILD_VERSION "0.0.0" #define BUILD_VERSION "0.0.0"
#endif #endif
#ifndef BUILD_COMMIT
#define BUILD_COMMIT "undefined"
#endif
#ifndef BUILD_ENV #ifndef BUILD_ENV
#define BUILD_ENV "undefined" #define BUILD_ENV "undefined"
#endif #endif

3
src/idf_component.yml Normal file
View File

@@ -0,0 +1,3 @@
dependencies:
idf: ">=5.3.2"
h2zero/esp-nimble-cpp: ">=2.2.1"

View File

@@ -24,7 +24,6 @@ const char L_OT_CH2[] PROGMEM = "OT.CH2";
const char L_SENSORS[] PROGMEM = "SENSORS"; const char L_SENSORS[] PROGMEM = "SENSORS";
const char L_SENSORS_SETTINGS[] PROGMEM = "SENSORS.SETTINGS"; const char L_SENSORS_SETTINGS[] PROGMEM = "SENSORS.SETTINGS";
const char L_SENSORS_DALLAS[] PROGMEM = "SENSORS.DALLAS"; const char L_SENSORS_DALLAS[] PROGMEM = "SENSORS.DALLAS";
const char L_SENSORS_DHT[] PROGMEM = "SENSORS.DHT";
const char L_SENSORS_NTC[] PROGMEM = "SENSORS.NTC"; const char L_SENSORS_NTC[] PROGMEM = "SENSORS.NTC";
const char L_SENSORS_BLE[] PROGMEM = "SENSORS.BLE"; const char L_SENSORS_BLE[] PROGMEM = "SENSORS.BLE";
const char L_REGULATOR[] PROGMEM = "REGULATOR"; const char L_REGULATOR[] PROGMEM = "REGULATOR";
@@ -57,7 +56,6 @@ const char S_CHANNEL[] PROGMEM = "channel";
const char S_CH2_ALWAYS_ENABLED[] PROGMEM = "ch2AlwaysEnabled"; const char S_CH2_ALWAYS_ENABLED[] PROGMEM = "ch2AlwaysEnabled";
const char S_CHIP[] PROGMEM = "chip"; const char S_CHIP[] PROGMEM = "chip";
const char S_CODE[] PROGMEM = "code"; const char S_CODE[] PROGMEM = "code";
const char S_COMMIT[] PROGMEM = "commit";
const char S_CONNECTED[] PROGMEM = "connected"; const char S_CONNECTED[] PROGMEM = "connected";
const char S_CONTINUES[] PROGMEM = "continues"; const char S_CONTINUES[] PROGMEM = "continues";
const char S_COOLING[] PROGMEM = "cooling"; const char S_COOLING[] PROGMEM = "cooling";

View File

@@ -1927,8 +1927,6 @@ bool jsonToSensorSettings(const uint8_t sensorId, const JsonVariantConst src, Se
case static_cast<uint8_t>(Sensors::Type::NTC_10K_TEMP): case static_cast<uint8_t>(Sensors::Type::NTC_10K_TEMP):
case static_cast<uint8_t>(Sensors::Type::DALLAS_TEMP): case static_cast<uint8_t>(Sensors::Type::DALLAS_TEMP):
case static_cast<uint8_t>(Sensors::Type::BLUETOOTH): case static_cast<uint8_t>(Sensors::Type::BLUETOOTH):
case static_cast<uint8_t>(Sensors::Type::DHT11):
case static_cast<uint8_t>(Sensors::Type::DHT22):
case static_cast<uint8_t>(Sensors::Type::HEATING_SETPOINT_TEMP): case static_cast<uint8_t>(Sensors::Type::HEATING_SETPOINT_TEMP):
case static_cast<uint8_t>(Sensors::Type::MANUAL): case static_cast<uint8_t>(Sensors::Type::MANUAL):
case static_cast<uint8_t>(Sensors::Type::NOT_CONFIGURED): case static_cast<uint8_t>(Sensors::Type::NOT_CONFIGURED):
@@ -1945,8 +1943,7 @@ bool jsonToSensorSettings(const uint8_t sensorId, const JsonVariantConst src, Se
// gpio // gpio
if (!src[FPSTR(S_GPIO)].isNull()) { if (!src[FPSTR(S_GPIO)].isNull()) {
if (dst.type != Sensors::Type::DALLAS_TEMP && dst.type != Sensors::Type::NTC_10K_TEMP && if (dst.type != Sensors::Type::DALLAS_TEMP && dst.type != Sensors::Type::NTC_10K_TEMP) {
dst.type != Sensors::Type::DHT11 && dst.type != Sensors::Type::DHT22) {
if (dst.gpio != GPIO_IS_NOT_CONFIGURED) { if (dst.gpio != GPIO_IS_NOT_CONFIGURED) {
dst.gpio = GPIO_IS_NOT_CONFIGURED; dst.gpio = GPIO_IS_NOT_CONFIGURED;
changed = true; changed = true;
@@ -2087,10 +2084,6 @@ void sensorResultToJson(const uint8_t sensorId, JsonVariant dst) {
dst[FPSTR(S_BATTERY)] = roundf(rSensor.values[static_cast<uint8_t>(Sensors::ValueType::BATTERY)], 1); dst[FPSTR(S_BATTERY)] = roundf(rSensor.values[static_cast<uint8_t>(Sensors::ValueType::BATTERY)], 1);
dst[FPSTR(S_RSSI)] = roundf(rSensor.values[static_cast<uint8_t>(Sensors::ValueType::RSSI)], 0); dst[FPSTR(S_RSSI)] = roundf(rSensor.values[static_cast<uint8_t>(Sensors::ValueType::RSSI)], 0);
} else if (sSensor.type == Sensors::Type::DHT11 || sSensor.type == Sensors::Type::DHT22) {
dst[FPSTR(S_TEMPERATURE)] = roundf(rSensor.values[static_cast<uint8_t>(Sensors::ValueType::TEMPERATURE)], 3);
dst[FPSTR(S_HUMIDITY)] = roundf(rSensor.values[static_cast<uint8_t>(Sensors::ValueType::HUMIDITY)], 3);
} else { } else {
dst[FPSTR(S_VALUE)] = roundf(rSensor.values[static_cast<uint8_t>(Sensors::ValueType::PRIMARY)], 3); dst[FPSTR(S_VALUE)] = roundf(rSensor.values[static_cast<uint8_t>(Sensors::ValueType::PRIMARY)], 3);
} }
@@ -2106,18 +2099,21 @@ 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()) {
return Sensors::setValueById( float value = src[FPSTR(S_VALUE)].as<float>();
sensorId,
src[FPSTR(S_VALUE)].as<float>(), uint8_t vType = static_cast<uint8_t>(Sensors::ValueType::PRIMARY);
Sensors::ValueType::PRIMARY, if (fabsf(value - dst.values[vType]) > 0.0001f) {
true, dst.values[vType] = roundf(value, 2);
true changed = true;
); }
} }
return false; return changed;
} }
void varsToJson(const Variables& src, JsonVariant dst) { void varsToJson(const Variables& src, JsonVariant dst) {

View File

@@ -44,7 +44,6 @@
"build": { "build": {
"title": "Build", "title": "Build",
"version": "固件版本", "version": "固件版本",
"commit": "Commit",
"date": "日期", "date": "日期",
"core": "内核版本", "core": "内核版本",
"sdk": "SDK" "sdk": "SDK"
@@ -249,8 +248,6 @@
"ntcTemp": "NTC 传感器", "ntcTemp": "NTC 传感器",
"dallasTemp": "DALLAS 传感器", "dallasTemp": "DALLAS 传感器",
"bluetooth": "BLE 传感器", "bluetooth": "BLE 传感器",
"dht11": "DHT11 传感器",
"dht22": "DHT22 传感器",
"heatSetpointTemp": "Heating, setpoint temp", "heatSetpointTemp": "Heating, setpoint temp",
"manual": "通过 MQTT/API 手动配置", "manual": "通过 MQTT/API 手动配置",
"notConfigured": "未配置" "notConfigured": "未配置"

View File

@@ -44,7 +44,6 @@
"build": { "build": {
"title": "Build", "title": "Build",
"version": "Version", "version": "Version",
"commit": "Commit",
"date": "Date", "date": "Date",
"core": "Core", "core": "Core",
"sdk": "SDK" "sdk": "SDK"
@@ -249,8 +248,6 @@
"ntcTemp": "NTC sensor", "ntcTemp": "NTC sensor",
"dallasTemp": "DALLAS sensor", "dallasTemp": "DALLAS sensor",
"bluetooth": "BLE sensor", "bluetooth": "BLE sensor",
"dht11": "DHT11 sensor",
"dht22": "DHT22 sensor",
"heatSetpointTemp": "Heating, setpoint temp", "heatSetpointTemp": "Heating, setpoint temp",
"manual": "Manual via MQTT/API", "manual": "Manual via MQTT/API",
"notConfigured": "Not configured" "notConfigured": "Not configured"

View File

@@ -44,7 +44,6 @@
"build": { "build": {
"title": "Build", "title": "Build",
"version": "Versione", "version": "Versione",
"commit": "Commit",
"date": "Data", "date": "Data",
"core": "Core", "core": "Core",
"sdk": "SDK" "sdk": "SDK"
@@ -249,8 +248,6 @@
"ntcTemp": "Sensore NTC", "ntcTemp": "Sensore NTC",
"dallasTemp": "Sensore DALLAS", "dallasTemp": "Sensore DALLAS",
"bluetooth": "Sensore BLE", "bluetooth": "Sensore BLE",
"dht11": "Sensore DHT11",
"dht22": "Sensore DHT22",
"heatSetpointTemp": "Riscaldamento, temp impostata", "heatSetpointTemp": "Riscaldamento, temp impostata",
"manual": "Manuale via MQTT/API", "manual": "Manuale via MQTT/API",
"notConfigured": "Non configurato" "notConfigured": "Non configurato"

View File

@@ -40,7 +40,6 @@
"build": { "build": {
"title": "Build", "title": "Build",
"version": "Versie", "version": "Versie",
"commit": "Commit",
"date": "Datum", "date": "Datum",
"core": "Core", "core": "Core",
"sdk": "SDK" "sdk": "SDK"
@@ -228,8 +227,6 @@
"ntcTemp": "NTC-sensor", "ntcTemp": "NTC-sensor",
"dallasTemp": "DALLAS-sensor", "dallasTemp": "DALLAS-sensor",
"bluetooth": "BLE-sensor", "bluetooth": "BLE-sensor",
"dht11": "DHT11-sensor",
"dht22": "DHT22-sensor",
"heatSetpointTemp": "Verwarming, insteltemperatuur", "heatSetpointTemp": "Verwarming, insteltemperatuur",
"manual": "Handmatig via MQTT/API", "manual": "Handmatig via MQTT/API",
"notConfigured": "Niet geconfigureerd" "notConfigured": "Niet geconfigureerd"

View File

@@ -44,7 +44,6 @@
"build": { "build": {
"title": "Билд", "title": "Билд",
"version": "Версия", "version": "Версия",
"commit": "Коммит",
"date": "Дата", "date": "Дата",
"core": "Ядро", "core": "Ядро",
"sdk": "SDK" "sdk": "SDK"
@@ -249,8 +248,6 @@
"ntcTemp": "NTC датчик", "ntcTemp": "NTC датчик",
"dallasTemp": "DALLAS датчик", "dallasTemp": "DALLAS датчик",
"bluetooth": "BLE датчик", "bluetooth": "BLE датчик",
"dht11": "DHT11 датчик",
"dht22": "DHT22 датчик",
"heatSetpointTemp": "Отопление, температура уставки", "heatSetpointTemp": "Отопление, температура уставки",
"manual": "Вручную через MQTT/API", "manual": "Вручную через MQTT/API",
"notConfigured": "Не сконфигурировано" "notConfigured": "Не сконфигурировано"

View File

@@ -104,7 +104,6 @@
<th scope="row" data-i18n>index.system.build.title</th> <th scope="row" data-i18n>index.system.build.title</th>
<td> <td>
Env: <b id="build-env"></b><br /> Env: <b id="build-env"></b><br />
<span data-i18n>index.system.build.commit</span>: <b id="build-commit"></b><br />
<span data-i18n>index.system.build.date</span>: <b id="build-date"></b><br /> <span data-i18n>index.system.build.date</span>: <b id="build-date"></b><br />
<span data-i18n>index.system.build.core</span>: <b id="build-core"></b><br /> <span data-i18n>index.system.build.core</span>: <b id="build-core"></b><br />
<span data-i18n>index.system.build.sdk</span>: <b id="build-sdk"></b> <span data-i18n>index.system.build.sdk</span>: <b id="build-sdk"></b>
@@ -207,7 +206,6 @@
setBusy('#main-busy', '#main-table', false); setBusy('#main-busy', '#main-table', false);
setValue('#build-version', result.build.version); setValue('#build-version', result.build.version);
setValue('#build-commit', result.build.commit);
setValue('#build-date', result.build.date); setValue('#build-date', result.build.date);
setValue('#build-env', result.build.env); setValue('#build-env', result.build.env);
setValue('#build-core', result.build.core); setValue('#build-core', result.build.core);

View File

@@ -118,8 +118,6 @@
<option value="50" data-i18n>sensors.types.ntcTemp</option> <option value="50" data-i18n>sensors.types.ntcTemp</option>
<option value="51" data-i18n>sensors.types.dallasTemp</option> <option value="51" data-i18n>sensors.types.dallasTemp</option>
<option value="52" data-i18n>sensors.types.bluetooth</option> <option value="52" data-i18n>sensors.types.bluetooth</option>
<option value="53" data-i18n>sensors.types.dht11</option>
<option value="54" data-i18n>sensors.types.dht22</option>
<option value="253" data-i18n>sensors.types.heatSetpointTemp</option> <option value="253" data-i18n>sensors.types.heatSetpointTemp</option>
<option value="254" data-i18n>sensors.types.manual</option> <option value="254" data-i18n>sensors.types.manual</option>
<option value="255" data-i18n>sensors.types.notConfigured</option> <option value="255" data-i18n>sensors.types.notConfigured</option>
@@ -273,35 +271,27 @@
} }
switch(parseInt(event.target.value)) { switch(parseInt(event.target.value)) {
// NTC10K // ntc
case 50: case 50:
parentGpio.classList.remove("hidden"); parentGpio.classList.remove("hidden");
parentAddress.classList.add("hidden"); parentAddress.classList.add("hidden");
address.removeAttribute("pattern"); address.removeAttribute("pattern");
break; break;
// OneWire // dallas
case 51: case 51:
parentGpio.classList.remove("hidden"); parentGpio.classList.remove("hidden");
parentAddress.classList.remove("hidden"); parentAddress.classList.remove("hidden");
address.setAttribute("pattern", "([A-Fa-f0-9]{2}:){7}[A-Fa-f0-9]{2}"); address.setAttribute("pattern", "([A-Fa-f0-9]{2}:){7}[A-Fa-f0-9]{2}");
break; break;
// Bluetooth // ble
case 52: case 52:
parentGpio.classList.add("hidden"); parentGpio.classList.add("hidden");
parentAddress.classList.remove("hidden"); parentAddress.classList.remove("hidden");
address.setAttribute("pattern", "([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}"); address.setAttribute("pattern", "([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}");
break; break;
// DHT
case 53:
case 54:
parentGpio.classList.remove("hidden");
parentAddress.classList.add("hidden");
address.removeAttribute("pattern");
break;
// other // other
default: default:
parentGpio.classList.add("hidden"); parentGpio.classList.add("hidden");

View File

@@ -1,16 +0,0 @@
import subprocess
Import("env")
try:
commit_hash = "undefined"
result = subprocess.check_output(
["git", "rev-parse", "--short", "HEAD"]
)
commit_hash = result.decode("utf-8").strip()
env.Append(
CPPDEFINES=[
("BUILD_COMMIT", '\\"{}\\"'.format(commit_hash))
]
)
except Exception as error:
print("Failed to get commit hash: {}".format(error))