[BLUFI] Add Blufi activation and deactivation at runtime (#2058)
Co-authored-by: Florian <1technophile@users.noreply.github.com>
This commit is contained in:
1 parent
776ed6568d
commit
4b20976a08
3 files changed
+58
-5
No files matched your search
@@ -648,6 +648,7 @@ enum PowerMode { DEACTIVATED = -1,
|
||||
struct SYSConfig_s {
|
||||
bool mqtt; // if true the gateway will publish the received data on the MQTT broker
|
||||
bool serial; // if true the gateway will publish the received data on the SERIAL
|
||||
bool blufi; // if true the gateway will be accesible with blufi
|
||||
bool offline;
|
||||
bool discovery; // HA discovery convention
|
||||
bool ohdiscovery; // OH discovery specificities
|
||||
@@ -663,6 +664,9 @@ struct SYSConfig_s {
|
||||
#ifndef DEFAULT_SERIAL
|
||||
# define DEFAULT_SERIAL false
|
||||
#endif
|
||||
#ifndef DEFAULT_BLUFI
|
||||
# define DEFAULT_BLUFI true
|
||||
#endif
|
||||
#ifndef DEFAULT_OFFLINE
|
||||
# define DEFAULT_OFFLINE false
|
||||
#endif
|
||||
|
||||
@@ -396,7 +396,25 @@ bool startBlufi() {
|
||||
NimBLEDevice::init(advName);
|
||||
esp_blufi_gatt_svr_init();
|
||||
ble_gatts_start();
|
||||
Log.notice(F("BLUFI started" CR));
|
||||
return esp_blufi_profile_init() == ESP_OK;
|
||||
}
|
||||
|
||||
bool stopBlufi() {
|
||||
esp_err_t result = ESP_OK;
|
||||
if (omg_blufi_ble_connected) {
|
||||
esp_blufi_disconnect();
|
||||
delay(50);
|
||||
}
|
||||
|
||||
ble_gap_adv_stop();
|
||||
result = esp_blufi_profile_deinit();
|
||||
if (result != ESP_OK) {
|
||||
Log.error(F("Failed to deinit blufi profile: %d" CR), result);
|
||||
return false;
|
||||
}
|
||||
Log.notice(F("BLUFI stopped" CR));
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif // defined(ESP32) && defined(USE_BLUFI)
|
||||
+36
-5
@@ -795,6 +795,9 @@ void SYSConfig_init() {
|
||||
SYSConfig.mqtt = DEFAULT_MQTT;
|
||||
SYSConfig.serial = DEFAULT_SERIAL;
|
||||
SYSConfig.offline = DEFAULT_OFFLINE;
|
||||
#if USE_BLUFI
|
||||
SYSConfig.blufi = DEFAULT_BLUFI;
|
||||
#endif
|
||||
#ifdef ZmqttDiscovery
|
||||
SYSConfig.discovery = DEFAULT_DISCOVERY;
|
||||
SYSConfig.ohdiscovery = OpenHABDiscovery;
|
||||
@@ -809,6 +812,9 @@ void SYSConfig_fromJson(JsonObject& SYSdata) {
|
||||
Config_update(SYSdata, "mqtt", SYSConfig.mqtt);
|
||||
Config_update(SYSdata, "serial", SYSConfig.serial);
|
||||
Config_update(SYSdata, "offline", SYSConfig.offline);
|
||||
#if USE_BLUFI
|
||||
Config_update(SYSdata, "blufi", SYSConfig.blufi);
|
||||
#endif
|
||||
#ifdef ZmqttDiscovery
|
||||
Config_update(SYSdata, "disc", SYSConfig.discovery);
|
||||
Config_update(SYSdata, "ohdisc", SYSConfig.ohdiscovery);
|
||||
@@ -827,6 +833,9 @@ void SYSConfig_save() {
|
||||
SYSdata["serial"] = SYSConfig.serial;
|
||||
SYSdata["offline"] = SYSConfig.offline;
|
||||
SYSdata["powermode"] = SYSConfig.powerMode;
|
||||
# if USE_BLUFI
|
||||
SYSdata["blufi"] = SYSConfig.blufi;
|
||||
# endif
|
||||
# ifdef ZmqttDiscovery
|
||||
SYSdata["disc"] = SYSConfig.discovery;
|
||||
SYSdata["ohdisc"] = SYSConfig.ohdiscovery;
|
||||
@@ -1374,7 +1383,8 @@ void setup() {
|
||||
#endif
|
||||
|
||||
#if defined(ESP32) && defined(USE_BLUFI)
|
||||
startBlufi();
|
||||
if (SYSConfig.blufi)
|
||||
startBlufi();
|
||||
#endif
|
||||
|
||||
#if defined(ESPWifiManualSetup)
|
||||
@@ -2733,6 +2743,9 @@ String stateMeasures() {
|
||||
#ifdef LED_ADDRESSABLE
|
||||
SYSdata["rgbb"] = SYSConfig.rgbbrightness;
|
||||
#endif
|
||||
#if USE_BLUFI
|
||||
SYSdata["blufi"] = SYSConfig.blufi;
|
||||
#endif
|
||||
#ifdef ZmqttDiscovery
|
||||
SYSdata["disc"] = SYSConfig.discovery;
|
||||
SYSdata["ohdisc"] = SYSConfig.ohdiscovery;
|
||||
@@ -3268,6 +3281,7 @@ void readCntParameters(int index) {
|
||||
void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
||||
if (cmpToMainTopic(topicOri, subjectMQTTtoSYSset)) {
|
||||
bool restartESP = false;
|
||||
bool publishState = false;
|
||||
Log.trace(F("MQTTtoSYS json" CR));
|
||||
if (SYSdata.containsKey("cmd")) {
|
||||
const char* cmd = SYSdata["cmd"];
|
||||
@@ -3279,7 +3293,7 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
||||
setupwifi(true);
|
||||
#endif
|
||||
} else if (strstr(cmd, statusCmd) != NULL) { //erase and restart
|
||||
stateMeasures();
|
||||
publishState = true;
|
||||
}
|
||||
}
|
||||
#ifdef LED_ADDRESSABLE
|
||||
@@ -3291,7 +3305,7 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
||||
updatePowerIndicator();
|
||||
# endif
|
||||
Log.notice(F("RGB brightness: %d" CR), SYSConfig.rgbbrightness);
|
||||
stateMeasures();
|
||||
publishState = true;
|
||||
} else {
|
||||
Log.warning(F("RGB brightness value invalid - ignoring command" CR));
|
||||
}
|
||||
@@ -3301,7 +3315,7 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
||||
if (SYSdata.containsKey("ohdisc") && SYSdata["ohdisc"].is<bool>()) {
|
||||
SYSConfig.ohdiscovery = SYSdata["ohdisc"];
|
||||
Log.notice(F("OpenHAB discovery: %T" CR), SYSConfig.ohdiscovery);
|
||||
stateMeasures();
|
||||
publishState = true;
|
||||
}
|
||||
#endif
|
||||
if (SYSdata.containsKey("wifi_ssid") && SYSdata["wifi_ssid"].is<char*>() && SYSdata.containsKey("wifi_pass") && SYSdata["wifi_pass"].is<char*>()) {
|
||||
@@ -3494,12 +3508,26 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
||||
SYSConfig.powerMode = SYSdata["powermode"];
|
||||
Log.notice(F("Power mode: %d" CR), SYSConfig.powerMode);
|
||||
}
|
||||
#if USE_BLUFI
|
||||
if (SYSdata.containsKey("blufi") && SYSdata["blufi"].is<bool>()) {
|
||||
bool res = false;
|
||||
if (SYSdata["blufi"] && !SYSConfig.blufi) { // Start Blufi
|
||||
res = startBlufi();
|
||||
} else if (!SYSdata["blufi"] && SYSConfig.blufi) { // Stop Blufi
|
||||
res = stopBlufi();
|
||||
}
|
||||
if (res)
|
||||
SYSConfig.blufi = SYSdata["blufi"];
|
||||
publishState = true;
|
||||
Log.notice(F("Blufi: %T" CR), SYSConfig.blufi);
|
||||
}
|
||||
#endif
|
||||
if (SYSdata.containsKey("disc")) {
|
||||
if (SYSdata["disc"].is<bool>()) {
|
||||
if (SYSdata["disc"] == true && SYSConfig.discovery == false)
|
||||
lastDiscovery = millis();
|
||||
SYSConfig.discovery = SYSdata["disc"];
|
||||
stateMeasures();
|
||||
publishState = true;
|
||||
if (SYSConfig.discovery)
|
||||
pubMqttDiscovery();
|
||||
} else {
|
||||
@@ -3510,6 +3538,9 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
||||
if (SYSdata.containsKey("save") && SYSdata["save"].as<bool>()) {
|
||||
SYSConfig_save();
|
||||
}
|
||||
if (publishState) {
|
||||
stateMeasures();
|
||||
}
|
||||
if (restartESP) {
|
||||
ESPRestart(7);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user