mirror of
https://github.com/Laxilef/OTGateway.git
synced 2026-02-27 19:57:07 +05:00
Merge branch 'async' into passive_ble
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,4 +1,5 @@
|
||||
.pio
|
||||
.dummy
|
||||
.vscode
|
||||
.PVS-Studio
|
||||
build/*
|
||||
@@ -10,5 +11,4 @@ package-lock.json
|
||||
*.lock
|
||||
sdkconfig.*
|
||||
CMakeLists.txt
|
||||
!sdkconfig.defaults
|
||||
!.gitkeep
|
||||
@@ -17,13 +17,14 @@ lib_deps = ESP32Async/AsyncTCP@^3.4.10
|
||||
gyverlibs/GyverPID@^3.3.2
|
||||
gyverlibs/GyverBlinker@^1.1.1
|
||||
pstolarz/OneWireNg@^0.14.1
|
||||
;milesburton/DallasTemperature@^4.0.5
|
||||
https://github.com/Laxilef/Arduino-Temperature-Control-Library#fix_85c
|
||||
milesburton/DallasTemperature@^4.0.6
|
||||
https://github.com/Laxilef/esp32DHT#idf5
|
||||
;laxilef/TinyLogger@^1.1.1
|
||||
https://github.com/Laxilef/TinyLogger#custom_handlers
|
||||
lib_ignore = paulstoffregen/OneWire
|
||||
lib_ignore = OneWire
|
||||
build_type = ${secrets.build_type}
|
||||
build_flags = -mtext-section-literals
|
||||
build_flags = ;-mtext-section-literals
|
||||
-O2
|
||||
-Wno-deprecated-declarations
|
||||
-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
|
||||
@@ -33,6 +34,7 @@ build_flags = -mtext-section-literals
|
||||
-D ARDUINOJSON_USE_DOUBLE=0
|
||||
-D ARDUINOJSON_USE_LONG_LONG=0
|
||||
-D TINYLOGGER_GLOBAL
|
||||
-D DHT_TASK_STACK_SIZE=4096
|
||||
-D DEFAULT_SERIAL_ENABLED=${secrets.serial_enabled}
|
||||
-D DEFAULT_SERIAL_BAUD=${secrets.serial_baud}
|
||||
-D DEFAULT_WEBSERIAL_ENABLED=${secrets.webserial_enabled}
|
||||
@@ -61,7 +63,7 @@ check_flags = ;pvs-studio: --analysis-mode=4 --exclude-path=./.pio/l
|
||||
|
||||
; Defaults
|
||||
[esp32_defaults]
|
||||
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.36/platform-espressif32.zip
|
||||
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.37/platform-espressif32.zip
|
||||
platform_packages = ${env.platform_packages}
|
||||
board_build.partitions = esp32_partitions.csv
|
||||
lib_deps = ${env.lib_deps}
|
||||
@@ -96,7 +98,8 @@ custom_component_remove = espressif/esp_hosted
|
||||
espressif/esp-zboss-lib
|
||||
espressif/esp-zigbee-lib
|
||||
chmorgan/esp-libhelix-mp3
|
||||
extra_scripts = post:tools/esp32.py
|
||||
extra_scripts = pre:tools/add_build_commit.py
|
||||
post:tools/esp32.py
|
||||
post:tools/build.py
|
||||
build_type = ${env.build_type}
|
||||
build_flags = ${env.build_flags}
|
||||
@@ -144,7 +147,7 @@ extends = esp32_defaults
|
||||
board = lolin_c3_mini
|
||||
lib_deps = ${esp32_defaults.lib_deps}
|
||||
${esp32_defaults.nimble_lib}
|
||||
build_unflags = -mtext-section-literals
|
||||
;build_unflags = -mtext-section-literals
|
||||
build_flags = ${esp32_defaults.build_flags}
|
||||
-D MYNEWT_VAL_BLE_EXT_ADV=1
|
||||
-D USE_BLE=1
|
||||
@@ -192,7 +195,7 @@ extends = esp32_defaults
|
||||
board = esp32-c6-devkitc-1
|
||||
lib_deps = ${esp32_defaults.lib_deps}
|
||||
${esp32_defaults.nimble_lib}
|
||||
build_unflags = -mtext-section-literals
|
||||
;build_unflags = -mtext-section-literals
|
||||
build_flags = ${esp32_defaults.build_flags}
|
||||
-D USE_BLE=1
|
||||
-D DEFAULT_OT_IN_GPIO=15
|
||||
@@ -201,13 +204,18 @@ build_flags = ${esp32_defaults.build_flags}
|
||||
-D DEFAULT_SENSOR_INDOOR_GPIO=0
|
||||
-D DEFAULT_STATUS_LED_GPIO=11
|
||||
-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]
|
||||
extends = esp32_defaults
|
||||
board = lolin_c3_mini
|
||||
lib_deps = ${esp32_defaults.lib_deps}
|
||||
${esp32_defaults.nimble_lib}
|
||||
build_unflags = -mtext-section-literals
|
||||
;build_unflags = -mtext-section-literals
|
||||
build_flags = ${esp32_defaults.build_flags}
|
||||
-D MYNEWT_VAL_BLE_EXT_ADV=1
|
||||
-D USE_BLE=1
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
# 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
|
||||
@@ -176,9 +176,10 @@ public:
|
||||
objId.c_str()
|
||||
);
|
||||
|
||||
// set device class, name, value template for bluetooth sensors
|
||||
// set device class, name, value template for Bluetooth/DHT 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
|
||||
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);
|
||||
|
||||
@@ -292,6 +292,14 @@ protected:
|
||||
this->haHelper->deleteDynamicSensor(prevSettings, Sensors::ValueType::RSSI);
|
||||
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:
|
||||
this->haHelper->deleteConnectionDynamicSensor(prevSettings);
|
||||
this->haHelper->deleteSignalQualityDynamicSensor(prevSettings);
|
||||
@@ -319,6 +327,14 @@ protected:
|
||||
this->haHelper->publishDynamicSensor(sSettings, Sensors::ValueType::RSSI, settings.system.unitSystem, false);
|
||||
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:
|
||||
this->haHelper->publishConnectionDynamicSensor(sSettings);
|
||||
this->haHelper->publishSignalQualityDynamicSensor(sSettings, false);
|
||||
|
||||
@@ -552,6 +552,7 @@ protected:
|
||||
|
||||
auto docBuild = doc[FPSTR(S_BUILD)].to<JsonObject>();
|
||||
docBuild[FPSTR(S_VERSION)] = BUILD_VERSION;
|
||||
docBuild[FPSTR(S_COMMIT)] = BUILD_COMMIT;
|
||||
docBuild[FPSTR(S_DATE)] = __DATE__ " " __TIME__;
|
||||
docBuild[FPSTR(S_ENV)] = BUILD_ENV;
|
||||
docBuild[FPSTR(S_CORE)] = ESP.getCoreVersion();
|
||||
@@ -592,6 +593,7 @@ protected:
|
||||
|
||||
auto docBuild = doc[FPSTR(S_BUILD)].to<JsonObject>();
|
||||
docBuild[FPSTR(S_VERSION)] = BUILD_VERSION;
|
||||
docBuild[FPSTR(S_COMMIT)] = BUILD_COMMIT;
|
||||
docBuild[FPSTR(S_DATE)] = __DATE__ " " __TIME__;
|
||||
docBuild[FPSTR(S_ENV)] = BUILD_ENV;
|
||||
docBuild[FPSTR(S_CORE)] = ESP.getCoreVersion();
|
||||
|
||||
@@ -32,7 +32,7 @@ protected:
|
||||
return 4;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void loop() {
|
||||
if (vars.states.restarting || vars.states.upgrading) {
|
||||
return;
|
||||
@@ -159,7 +159,7 @@ protected:
|
||||
);
|
||||
float etResult = settings.heating.target + settings.equitherm.shift + sf * (
|
||||
tempDelta >= 0
|
||||
? pow(tempDelta, 1.0f / settings.equitherm.exponent)
|
||||
? pow(tempDelta, 1.0f / settings.equitherm.exponent)
|
||||
: -(pow(-(tempDelta), 1.0f / settings.equitherm.exponent))
|
||||
);
|
||||
|
||||
@@ -208,7 +208,7 @@ protected:
|
||||
}*/
|
||||
|
||||
float error = pidRegulator.setpoint - pidRegulator.input;
|
||||
bool hasDeadband = settings.pid.deadband.enabled
|
||||
bool hasDeadband = settings.pid.deadband.enabled
|
||||
&& (error > -(settings.pid.deadband.thresholdHigh))
|
||||
&& (error < settings.pid.deadband.thresholdLow);
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ public:
|
||||
NTC_10K_TEMP = 50,
|
||||
DALLAS_TEMP = 51,
|
||||
BLUETOOTH = 52,
|
||||
DHT11 = 53,
|
||||
DHT22 = 54,
|
||||
|
||||
HEATING_SETPOINT_TEMP = 253,
|
||||
MANUAL = 254,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include <unordered_map>
|
||||
#include <OneWire.h>
|
||||
#include <DallasTemperature.h>
|
||||
#include <esp32DHT.h>
|
||||
|
||||
#if USE_BLE
|
||||
#include <NimBLEDevice.h>
|
||||
@@ -304,11 +305,13 @@ public:
|
||||
class SensorsTask : public LeanTask {
|
||||
public:
|
||||
SensorsTask(bool _enabled = false, unsigned long _interval = 0) : LeanTask(_enabled, _interval) {
|
||||
this->gpioLastPollingTime.reserve(2);
|
||||
|
||||
// OneWire
|
||||
this->owInstances.reserve(2);
|
||||
this->dallasInstances.reserve(2);
|
||||
this->dallasSearchTime.reserve(2);
|
||||
this->dallasPolling.reserve(2);
|
||||
this->dallasLastPollingTime.reserve(2);
|
||||
|
||||
#if USE_BLE
|
||||
this->pBLEScanCallbacks = new BluetoothScanCallbacks();
|
||||
@@ -316,11 +319,13 @@ public:
|
||||
}
|
||||
|
||||
~SensorsTask() {
|
||||
this->gpioLastPollingTime.clear();
|
||||
|
||||
// OneWire
|
||||
this->dallasInstances.clear();
|
||||
this->owInstances.clear();
|
||||
this->dallasSearchTime.clear();
|
||||
this->dallasPolling.clear();
|
||||
this->dallasLastPollingTime.clear();
|
||||
|
||||
#if USE_BLE
|
||||
delete this->pBLEScanCallbacks;
|
||||
@@ -332,13 +337,21 @@ protected:
|
||||
const unsigned int wirelessDisconnectTimeout = 600000u;
|
||||
const unsigned short dallasSearchInterval = 60000u;
|
||||
const unsigned short dallasPollingInterval = 10000u;
|
||||
const unsigned short dhtPollingInterval = 15000;
|
||||
const unsigned short globalPollingInterval = 15000u;
|
||||
|
||||
std::unordered_map<uint8_t, unsigned long> gpioLastPollingTime;
|
||||
|
||||
// OneWire
|
||||
std::unordered_map<uint8_t, OneWire> owInstances;
|
||||
std::unordered_map<uint8_t, DallasTemperature> dallasInstances;
|
||||
std::unordered_map<uint8_t, unsigned long> dallasSearchTime;
|
||||
std::unordered_map<uint8_t, bool> dallasPolling;
|
||||
std::unordered_map<uint8_t, unsigned long> dallasLastPollingTime;
|
||||
|
||||
// DHT
|
||||
DHT dhtInstance;
|
||||
bool dhtIsPolling = false;
|
||||
|
||||
#if USE_BLE
|
||||
NimBLEScan* pBLEScan = nullptr;
|
||||
BluetoothScanCallbacks* pBLEScanCallbacks = nullptr;
|
||||
@@ -379,6 +392,9 @@ protected:
|
||||
this->yield();
|
||||
}
|
||||
|
||||
pollingDhtSensors();
|
||||
this->yield();
|
||||
|
||||
if (millis() - this->globalLastPollingTime > this->globalPollingInterval) {
|
||||
cleanDallasInstances();
|
||||
makeDallasInstances();
|
||||
@@ -435,7 +451,7 @@ protected:
|
||||
|
||||
this->dallasSearchTime[sSensor.gpio] = 0;
|
||||
this->dallasPolling[sSensor.gpio] = false;
|
||||
this->dallasLastPollingTime[sSensor.gpio] = 0;
|
||||
this->gpioLastPollingTime[sSensor.gpio] = 0;
|
||||
|
||||
auto& instance = this->dallasInstances[sSensor.gpio];
|
||||
instance.setOneWire(&owInstance);
|
||||
@@ -470,7 +486,7 @@ protected:
|
||||
this->owInstances.erase(gpio);
|
||||
this->dallasSearchTime.erase(gpio);
|
||||
this->dallasPolling.erase(gpio);
|
||||
this->dallasLastPollingTime.erase(gpio);
|
||||
this->gpioLastPollingTime.erase(gpio);
|
||||
|
||||
Log.sinfoln(FPSTR(L_SENSORS_DALLAS), F("Stopped on GPIO %hhu"), gpio);
|
||||
continue;
|
||||
@@ -591,7 +607,7 @@ protected:
|
||||
|
||||
if (this->dallasPolling[gpio]) {
|
||||
unsigned long minPollingTime = instance.millisToWaitForConversion(12) * 2;
|
||||
unsigned long estimatePollingTime = ts - this->dallasLastPollingTime[gpio];
|
||||
unsigned long estimatePollingTime = ts - this->gpioLastPollingTime[gpio];
|
||||
|
||||
// check conversion time
|
||||
// isConversionComplete does not work with chinese clones!
|
||||
@@ -643,7 +659,7 @@ protected:
|
||||
this->dallasPolling[gpio] = false;
|
||||
|
||||
} else if (newPolling) {
|
||||
auto estimateLastPollingTime = ts - this->dallasLastPollingTime[gpio];
|
||||
auto estimateLastPollingTime = ts - this->gpioLastPollingTime[gpio];
|
||||
|
||||
// check last polling time
|
||||
if (estimateLastPollingTime < this->dallasPollingInterval) {
|
||||
@@ -654,13 +670,102 @@ protected:
|
||||
instance.setResolution(12);
|
||||
instance.requestTemperatures();
|
||||
this->dallasPolling[gpio] = true;
|
||||
this->dallasLastPollingTime[gpio] = ts;
|
||||
this->gpioLastPollingTime[gpio] = ts;
|
||||
|
||||
Log.straceln(FPSTR(L_SENSORS_DALLAS), F("GPIO %hhu, polling..."), gpio);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void pollingDhtSensors() {
|
||||
if (this->dhtIsPolling) {
|
||||
// busy
|
||||
return;
|
||||
}
|
||||
|
||||
for (uint8_t sensorId = 0; sensorId <= Sensors::getMaxSensorId(); sensorId++) {
|
||||
auto& sSensor = Sensors::settings[sensorId];
|
||||
|
||||
if (!sSensor.enabled || sSensor.purpose == Sensors::Purpose::NOT_CONFIGURED) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sSensor.type != Sensors::Type::DHT11 && sSensor.type != Sensors::Type::DHT22) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (this->gpioLastPollingTime.count(sSensor.gpio) && millis() - this->gpioLastPollingTime[sSensor.gpio] < this->dhtPollingInterval) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const auto sensorGpio = static_cast<gpio_num_t>(sSensor.gpio);
|
||||
if (this->dhtInstance.getGpio() != sensorGpio) {
|
||||
this->dhtInstance.reset();
|
||||
this->dhtInstance.onData([this, sensorId](float humidity, float temperature) {
|
||||
auto& sSensor = Sensors::settings[sensorId];
|
||||
|
||||
Log.straceln(
|
||||
FPSTR(L_SENSORS_DHT), F("GPIO %hhu, sensor #%hhu '%s', temp: %.2f, humidity: %.2f%%"),
|
||||
sSensor.gpio, sensorId, sSensor.name, temperature, humidity
|
||||
);
|
||||
|
||||
// set temperature
|
||||
Sensors::setValueById(sensorId, temperature, Sensors::ValueType::TEMPERATURE, true, true);
|
||||
|
||||
// set humidity
|
||||
Sensors::setValueById(sensorId, humidity, Sensors::ValueType::HUMIDITY, true, true);
|
||||
|
||||
auto& rSensor = Sensors::results[sensorId];
|
||||
if (rSensor.signalQuality < 100) {
|
||||
rSensor.signalQuality++;
|
||||
}
|
||||
|
||||
this->gpioLastPollingTime[sSensor.gpio] = millis();
|
||||
this->dhtIsPolling = false;
|
||||
});
|
||||
|
||||
this->dhtInstance.onError([this, sensorId](DHT::Status status) {
|
||||
auto& sSensor = Sensors::settings[sensorId];
|
||||
|
||||
Log.swarningln(
|
||||
FPSTR(L_SENSORS_DHT), F("GPIO %hhu, sensor #%hhu '%s': failed receiving data (err: %s)"),
|
||||
sSensor.gpio, sensorId, sSensor.name, DHT::statusToString(this->dhtInstance.getStatus())
|
||||
);
|
||||
|
||||
auto& rSensor = Sensors::results[sensorId];
|
||||
if (rSensor.signalQuality > 0) {
|
||||
rSensor.signalQuality--;
|
||||
}
|
||||
|
||||
this->gpioLastPollingTime[sSensor.gpio] = millis();
|
||||
this->dhtIsPolling = false;
|
||||
});
|
||||
|
||||
DHT::Type sType = DHT::Type::DHT22;
|
||||
if (sSensor.type == Sensors::Type::DHT11) {
|
||||
sType = DHT::Type::DHT11;
|
||||
|
||||
} else if (sSensor.type == Sensors::Type::DHT22) {
|
||||
sType = DHT::Type::DHT22;
|
||||
}
|
||||
|
||||
if (this->dhtInstance.setup(sensorGpio, sType)) {
|
||||
Log.sinfoln(FPSTR(L_SENSORS_DHT), F("Started on GPIO %hhu"), sSensor.gpio);
|
||||
|
||||
} else {
|
||||
Log.swarningln(
|
||||
FPSTR(L_SENSORS_DHT), F("Failed to start on GPIO %hhu (err: %s)"),
|
||||
sSensor.gpio, DHT::statusToString(this->dhtInstance.getStatus())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
this->dhtIsPolling = this->dhtInstance.poll();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void pollingNtcSensors() {
|
||||
for (uint8_t sensorId = 0; sensorId <= Sensors::getMaxSensorId(); sensorId++) {
|
||||
auto& sSensor = Sensors::settings[sensorId];
|
||||
|
||||
@@ -30,6 +30,10 @@
|
||||
#define BUILD_VERSION "0.0.0"
|
||||
#endif
|
||||
|
||||
#ifndef BUILD_COMMIT
|
||||
#define BUILD_COMMIT "undefined"
|
||||
#endif
|
||||
|
||||
#ifndef BUILD_ENV
|
||||
#define BUILD_ENV "undefined"
|
||||
#endif
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
dependencies:
|
||||
idf: ">=5.3.2"
|
||||
h2zero/esp-nimble-cpp: ">=2.2.1"
|
||||
@@ -24,6 +24,7 @@ const char L_OT_CH2[] PROGMEM = "OT.CH2";
|
||||
const char L_SENSORS[] PROGMEM = "SENSORS";
|
||||
const char L_SENSORS_SETTINGS[] PROGMEM = "SENSORS.SETTINGS";
|
||||
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_BLE[] PROGMEM = "SENSORS.BLE";
|
||||
const char L_REGULATOR[] PROGMEM = "REGULATOR";
|
||||
@@ -56,6 +57,7 @@ const char S_CHANNEL[] PROGMEM = "channel";
|
||||
const char S_CH2_ALWAYS_ENABLED[] PROGMEM = "ch2AlwaysEnabled";
|
||||
const char S_CHIP[] PROGMEM = "chip";
|
||||
const char S_CODE[] PROGMEM = "code";
|
||||
const char S_COMMIT[] PROGMEM = "commit";
|
||||
const char S_CONNECTED[] PROGMEM = "connected";
|
||||
const char S_CONTINUES[] PROGMEM = "continues";
|
||||
const char S_COOLING[] PROGMEM = "cooling";
|
||||
|
||||
@@ -1927,6 +1927,8 @@ 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::DALLAS_TEMP):
|
||||
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::MANUAL):
|
||||
case static_cast<uint8_t>(Sensors::Type::NOT_CONFIGURED):
|
||||
@@ -1943,7 +1945,8 @@ bool jsonToSensorSettings(const uint8_t sensorId, const JsonVariantConst src, Se
|
||||
|
||||
// gpio
|
||||
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) {
|
||||
dst.gpio = GPIO_IS_NOT_CONFIGURED;
|
||||
changed = true;
|
||||
@@ -2084,6 +2087,10 @@ 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_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 {
|
||||
dst[FPSTR(S_VALUE)] = roundf(rSensor.values[static_cast<uint8_t>(Sensors::ValueType::PRIMARY)], 3);
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"build": {
|
||||
"title": "Build",
|
||||
"version": "固件版本",
|
||||
"commit": "Commit",
|
||||
"date": "日期",
|
||||
"core": "内核版本",
|
||||
"sdk": "SDK"
|
||||
@@ -248,6 +249,8 @@
|
||||
"ntcTemp": "NTC 传感器",
|
||||
"dallasTemp": "DALLAS 传感器",
|
||||
"bluetooth": "BLE 传感器",
|
||||
"dht11": "DHT11 传感器",
|
||||
"dht22": "DHT22 传感器",
|
||||
"heatSetpointTemp": "Heating, setpoint temp",
|
||||
"manual": "通过 MQTT/API 手动配置",
|
||||
"notConfigured": "未配置"
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"build": {
|
||||
"title": "Build",
|
||||
"version": "Version",
|
||||
"commit": "Commit",
|
||||
"date": "Date",
|
||||
"core": "Core",
|
||||
"sdk": "SDK"
|
||||
@@ -248,6 +249,8 @@
|
||||
"ntcTemp": "NTC sensor",
|
||||
"dallasTemp": "DALLAS sensor",
|
||||
"bluetooth": "BLE sensor",
|
||||
"dht11": "DHT11 sensor",
|
||||
"dht22": "DHT22 sensor",
|
||||
"heatSetpointTemp": "Heating, setpoint temp",
|
||||
"manual": "Manual via MQTT/API",
|
||||
"notConfigured": "Not configured"
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"build": {
|
||||
"title": "Build",
|
||||
"version": "Versione",
|
||||
"commit": "Commit",
|
||||
"date": "Data",
|
||||
"core": "Core",
|
||||
"sdk": "SDK"
|
||||
@@ -248,6 +249,8 @@
|
||||
"ntcTemp": "Sensore NTC",
|
||||
"dallasTemp": "Sensore DALLAS",
|
||||
"bluetooth": "Sensore BLE",
|
||||
"dht11": "Sensore DHT11",
|
||||
"dht22": "Sensore DHT22",
|
||||
"heatSetpointTemp": "Riscaldamento, temp impostata",
|
||||
"manual": "Manuale via MQTT/API",
|
||||
"notConfigured": "Non configurato"
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
"build": {
|
||||
"title": "Build",
|
||||
"version": "Versie",
|
||||
"commit": "Commit",
|
||||
"date": "Datum",
|
||||
"core": "Core",
|
||||
"sdk": "SDK"
|
||||
@@ -227,6 +228,8 @@
|
||||
"ntcTemp": "NTC-sensor",
|
||||
"dallasTemp": "DALLAS-sensor",
|
||||
"bluetooth": "BLE-sensor",
|
||||
"dht11": "DHT11-sensor",
|
||||
"dht22": "DHT22-sensor",
|
||||
"heatSetpointTemp": "Verwarming, insteltemperatuur",
|
||||
"manual": "Handmatig via MQTT/API",
|
||||
"notConfigured": "Niet geconfigureerd"
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"build": {
|
||||
"title": "Билд",
|
||||
"version": "Версия",
|
||||
"commit": "Коммит",
|
||||
"date": "Дата",
|
||||
"core": "Ядро",
|
||||
"sdk": "SDK"
|
||||
@@ -248,6 +249,8 @@
|
||||
"ntcTemp": "NTC датчик",
|
||||
"dallasTemp": "DALLAS датчик",
|
||||
"bluetooth": "BLE датчик",
|
||||
"dht11": "DHT11 датчик",
|
||||
"dht22": "DHT22 датчик",
|
||||
"heatSetpointTemp": "Отопление, температура уставки",
|
||||
"manual": "Вручную через MQTT/API",
|
||||
"notConfigured": "Не сконфигурировано"
|
||||
|
||||
@@ -104,6 +104,7 @@
|
||||
<th scope="row" data-i18n>index.system.build.title</th>
|
||||
<td>
|
||||
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.core</span>: <b id="build-core"></b><br />
|
||||
<span data-i18n>index.system.build.sdk</span>: <b id="build-sdk"></b>
|
||||
@@ -206,6 +207,7 @@
|
||||
setBusy('#main-busy', '#main-table', false);
|
||||
|
||||
setValue('#build-version', result.build.version);
|
||||
setValue('#build-commit', result.build.commit);
|
||||
setValue('#build-date', result.build.date);
|
||||
setValue('#build-env', result.build.env);
|
||||
setValue('#build-core', result.build.core);
|
||||
|
||||
@@ -118,6 +118,8 @@
|
||||
<option value="50" data-i18n>sensors.types.ntcTemp</option>
|
||||
<option value="51" data-i18n>sensors.types.dallasTemp</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="254" data-i18n>sensors.types.manual</option>
|
||||
<option value="255" data-i18n>sensors.types.notConfigured</option>
|
||||
@@ -271,27 +273,35 @@
|
||||
}
|
||||
|
||||
switch(parseInt(event.target.value)) {
|
||||
// ntc
|
||||
// NTC10K
|
||||
case 50:
|
||||
parentGpio.classList.remove("hidden");
|
||||
parentAddress.classList.add("hidden");
|
||||
address.removeAttribute("pattern");
|
||||
break;
|
||||
|
||||
// dallas
|
||||
// OneWire
|
||||
case 51:
|
||||
parentGpio.classList.remove("hidden");
|
||||
parentAddress.classList.remove("hidden");
|
||||
address.setAttribute("pattern", "([A-Fa-f0-9]{2}:){7}[A-Fa-f0-9]{2}");
|
||||
break;
|
||||
|
||||
// ble
|
||||
// Bluetooth
|
||||
case 52:
|
||||
parentGpio.classList.add("hidden");
|
||||
parentAddress.classList.remove("hidden");
|
||||
address.setAttribute("pattern", "([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}");
|
||||
break;
|
||||
|
||||
// DHT
|
||||
case 53:
|
||||
case 54:
|
||||
parentGpio.classList.remove("hidden");
|
||||
parentAddress.classList.add("hidden");
|
||||
address.removeAttribute("pattern");
|
||||
break;
|
||||
|
||||
// other
|
||||
default:
|
||||
parentGpio.classList.add("hidden");
|
||||
|
||||
16
tools/add_build_commit.py
Normal file
16
tools/add_build_commit.py
Normal file
@@ -0,0 +1,16 @@
|
||||
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))
|
||||
Reference in New Issue
Block a user