ble in HaHelper refactoring

This commit is contained in:
Yurii
2023-12-10 23:30:45 +03:00
parent 17b000bdfd
commit b6276ddb3f
3 changed files with 28 additions and 12 deletions

View File

@@ -29,17 +29,27 @@ public:
bool publishSelectIndoorSensorType(bool enabledByDefault = true) { bool publishSelectIndoorSensorType(bool enabledByDefault = true) {
StaticJsonDocument<1536> doc; StaticJsonDocument<1536> doc;
doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set");
#if USE_BLE
doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"sensors\": {\"indoor\": {\"type\": {% if value == 'Manual' %}1{% elif value == 'External' %}2{% elif value == 'Bluetooth' %}3{% endif %}}}}"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"sensors\": {\"indoor\": {\"type\": {% if value == 'Manual' %}1{% elif value == 'External' %}2{% elif value == 'Bluetooth' %}3{% endif %}}}}");
#else
doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"sensors\": {\"indoor\": {\"type\": {% if value == 'Manual' %}1{% elif value == 'External' %}2{% endif %}}}}");
#endif
doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault;
doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_indoor_sensor_type"); doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_indoor_sensor_type");
doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_indoor_sensor_type"); doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_indoor_sensor_type");
doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config");
doc[FPSTR(HA_NAME)] = F("Indoor temperature source"); doc[FPSTR(HA_NAME)] = F("Indoor temperature source");
doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings");
#if USE_BLE
doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{% if value_json.sensors.indoor.type == 1 %}Manual{% elif value_json.sensors.indoor.type == 2 %}External{% elif value_json.sensors.indoor.type == 3 %}Bluetooth{% endif %}"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{% if value_json.sensors.indoor.type == 1 %}Manual{% elif value_json.sensors.indoor.type == 2 %}External{% elif value_json.sensors.indoor.type == 3 %}Bluetooth{% endif %}");
#else
doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{% if value_json.sensors.indoor.type == 1 %}Manual{% elif value_json.sensors.indoor.type == 2 %}External{% endif %}");
#endif
doc[FPSTR(HA_OPTIONS)][0] = F("Manual"); doc[FPSTR(HA_OPTIONS)][0] = F("Manual");
doc[FPSTR(HA_OPTIONS)][1] = F("External"); doc[FPSTR(HA_OPTIONS)][1] = F("External");
#if USE_BLE
doc[FPSTR(HA_OPTIONS)][2] = F("Bluetooth"); doc[FPSTR(HA_OPTIONS)][2] = F("Bluetooth");
#endif
return publish(getTopic("select", "indoor_sensor_type").c_str(), doc); return publish(getTopic("select", "indoor_sensor_type").c_str(), doc);
} }

View File

@@ -64,8 +64,9 @@ protected:
if (settings.sensors.indoor.type == 2 && settings.sensors.indoor.pin) { if (settings.sensors.indoor.type == 2 && settings.sensors.indoor.pin) {
indoorTemperatureSensor(); indoorTemperatureSensor();
} }
#if USE_BLE #if USE_BLE
else if (settings.sensors.indoor.type == 3 && strlen(settings.sensors.indoor.bleAddresss)) { if (settings.sensors.indoor.type == 3 && strlen(settings.sensors.indoor.bleAddresss)) {
bluetoothSensor(); bluetoothSensor();
} }
#endif #endif
@@ -93,10 +94,10 @@ protected:
Log.sinfoln(FPSTR(S_SENSORS_BLE), "Failed to find environmental service"); Log.sinfoln(FPSTR(S_SENSORS_BLE), "Failed to find environmental service");
} }
} } else {
else {
Log.swarningln(FPSTR(S_SENSORS_BLE), "Error connecting to BLE device at %s", bleServerAddress.toString().c_str()); Log.swarningln(FPSTR(S_SENSORS_BLE), "Error connecting to BLE device at %s", bleServerAddress.toString().c_str());
} }
initBleSensor = true; initBleSensor = true;
} }
@@ -106,6 +107,7 @@ protected:
uint8_t batteryLevel = *reinterpret_cast<const uint8_t *>(pBleServiceBattery->getValue(bleUuidCharacteristicBatteryLevel).data()); uint8_t batteryLevel = *reinterpret_cast<const uint8_t *>(pBleServiceBattery->getValue(bleUuidCharacteristicBatteryLevel).data());
Log.straceln(FPSTR(S_SENSORS_BLE), "Battery: %d", batteryLevel); Log.straceln(FPSTR(S_SENSORS_BLE), "Battery: %d", batteryLevel);
} }
if (pBleServiceEnvironment) { if (pBleServiceEnvironment) {
float temperature = *reinterpret_cast<const int16_t *>(pBleServiceEnvironment->getValue(bleUuidCharacteristicTemperature).data()) / 100.0f; float temperature = *reinterpret_cast<const int16_t *>(pBleServiceEnvironment->getValue(bleUuidCharacteristicTemperature).data()) / 100.0f;
Log.straceln(FPSTR(S_SENSORS_BLE), "Temperature: %.2f", temperature); Log.straceln(FPSTR(S_SENSORS_BLE), "Temperature: %.2f", temperature);
@@ -114,9 +116,7 @@ protected:
vars.temperatures.indoor = temperature + settings.sensors.indoor.offset; vars.temperatures.indoor = temperature + settings.sensors.indoor.offset;
} }
} } else {
else
{
Log.straceln(FPSTR(S_SENSORS_BLE), "Not connected"); Log.straceln(FPSTR(S_SENSORS_BLE), "Not connected");
} }
} }

View File

@@ -28,7 +28,9 @@ CheckboxParameter* wmOtModSyncWithHeating;
UnsignedIntParameter* wmOutdoorSensorPin; UnsignedIntParameter* wmOutdoorSensorPin;
UnsignedIntParameter* wmIndoorSensorPin; UnsignedIntParameter* wmIndoorSensorPin;
WiFiManagerParameter* wmBleAddress; #if USE_BLE
WiFiManagerParameter* wmOutdoorSensorBleAddress;
#endif
CheckboxParameter* wmExtPumpUse; CheckboxParameter* wmExtPumpUse;
UnsignedIntParameter* wmExtPumpPin; UnsignedIntParameter* wmExtPumpPin;
@@ -171,8 +173,10 @@ protected:
wmIndoorSensorPin = new UnsignedIntParameter("indoor_sensor_pin", "Indoor sensor GPIO", settings.sensors.indoor.pin, 2); wmIndoorSensorPin = new UnsignedIntParameter("indoor_sensor_pin", "Indoor sensor GPIO", settings.sensors.indoor.pin, 2);
wm.addParameter(wmIndoorSensorPin); wm.addParameter(wmIndoorSensorPin);
wmBleAddress = new WiFiManagerParameter("ble_address", "BLE sensor address", settings.sensors.indoor.bleAddresss, 17); #if USE_BLE
wm.addParameter(wmBleAddress); wmOutdoorSensorBleAddress = new WiFiManagerParameter("ble_address", "BLE sensor address", settings.sensors.indoor.bleAddresss, 17);
wm.addParameter(wmOutdoorSensorBleAddress);
#endif
wmExtPumpHeader = new HeaderParameter("External pump"); wmExtPumpHeader = new HeaderParameter("External pump");
wm.addParameter(wmExtPumpHeader); wm.addParameter(wmExtPumpHeader);
@@ -449,12 +453,14 @@ protected:
Log.sinfoln(FPSTR(S_WIFI_SETTINGS), F("New sensors.indoor.pin: %hhu"), settings.sensors.indoor.pin); Log.sinfoln(FPSTR(S_WIFI_SETTINGS), F("New sensors.indoor.pin: %hhu"), settings.sensors.indoor.pin);
} }
if (strcmp(wmBleAddress->getValue(), settings.sensors.indoor.bleAddresss) != 0) { #if USE_BLE
if (strcmp(wmOutdoorSensorBleAddress->getValue(), settings.sensors.indoor.bleAddresss) != 0) {
changed = true; changed = true;
strcpy(settings.sensors.indoor.bleAddresss, wmBleAddress->getValue()); strcpy(settings.sensors.indoor.bleAddresss, wmOutdoorSensorBleAddress->getValue());
Log.sinfoln(FPSTR(S_WIFI_SETTINGS), F("New BLE address: %s"), settings.sensors.indoor.bleAddresss); Log.sinfoln(FPSTR(S_WIFI_SETTINGS), F("New sensors.indoor.bleAddresss: %s"), settings.sensors.indoor.bleAddresss);
} }
#endif
if (wmExtPumpUse->getCheckboxValue() != settings.externalPump.use) { if (wmExtPumpUse->getCheckboxValue() != settings.externalPump.use) {
changed = true; changed = true;