[BLUFI] Add Blufi activation and deactivation at runtime (#2058)

Co-authored-by: Florian <1technophile@users.noreply.github.com>
This commit is contained in:
FlorianandFlorian authored and GitHub committed 2024-09-17 09:32:20 -05:00
1 parent 776ed6568d
commit 4b20976a08
3 files changed
+57 -4

No files matched your search

+4
View File
@@ -648,6 +648,7 @@ enum PowerMode { DEACTIVATED = -1,
struct SYSConfig_s { struct SYSConfig_s {
bool mqtt; // if true the gateway will publish the received data on the MQTT broker 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 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 offline;
bool discovery; // HA discovery convention bool discovery; // HA discovery convention
bool ohdiscovery; // OH discovery specificities bool ohdiscovery; // OH discovery specificities
@@ -663,6 +664,9 @@ struct SYSConfig_s {
#ifndef DEFAULT_SERIAL #ifndef DEFAULT_SERIAL
# define DEFAULT_SERIAL false # define DEFAULT_SERIAL false
#endif #endif
#ifndef DEFAULT_BLUFI
# define DEFAULT_BLUFI true
#endif
#ifndef DEFAULT_OFFLINE #ifndef DEFAULT_OFFLINE
# define DEFAULT_OFFLINE false # define DEFAULT_OFFLINE false
#endif #endif
+18
View File
@@ -396,7 +396,25 @@ bool startBlufi() {
NimBLEDevice::init(advName); NimBLEDevice::init(advName);
esp_blufi_gatt_svr_init(); esp_blufi_gatt_svr_init();
ble_gatts_start(); ble_gatts_start();
Log.notice(F("BLUFI started" CR));
return esp_blufi_profile_init() == ESP_OK; 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) #endif // defined(ESP32) && defined(USE_BLUFI)
+35 -4
View File
@@ -795,6 +795,9 @@ void SYSConfig_init() {
SYSConfig.mqtt = DEFAULT_MQTT; SYSConfig.mqtt = DEFAULT_MQTT;
SYSConfig.serial = DEFAULT_SERIAL; SYSConfig.serial = DEFAULT_SERIAL;
SYSConfig.offline = DEFAULT_OFFLINE; SYSConfig.offline = DEFAULT_OFFLINE;
#if USE_BLUFI
SYSConfig.blufi = DEFAULT_BLUFI;
#endif
#ifdef ZmqttDiscovery #ifdef ZmqttDiscovery
SYSConfig.discovery = DEFAULT_DISCOVERY; SYSConfig.discovery = DEFAULT_DISCOVERY;
SYSConfig.ohdiscovery = OpenHABDiscovery; SYSConfig.ohdiscovery = OpenHABDiscovery;
@@ -809,6 +812,9 @@ void SYSConfig_fromJson(JsonObject& SYSdata) {
Config_update(SYSdata, "mqtt", SYSConfig.mqtt); Config_update(SYSdata, "mqtt", SYSConfig.mqtt);
Config_update(SYSdata, "serial", SYSConfig.serial); Config_update(SYSdata, "serial", SYSConfig.serial);
Config_update(SYSdata, "offline", SYSConfig.offline); Config_update(SYSdata, "offline", SYSConfig.offline);
#if USE_BLUFI
Config_update(SYSdata, "blufi", SYSConfig.blufi);
#endif
#ifdef ZmqttDiscovery #ifdef ZmqttDiscovery
Config_update(SYSdata, "disc", SYSConfig.discovery); Config_update(SYSdata, "disc", SYSConfig.discovery);
Config_update(SYSdata, "ohdisc", SYSConfig.ohdiscovery); Config_update(SYSdata, "ohdisc", SYSConfig.ohdiscovery);
@@ -827,6 +833,9 @@ void SYSConfig_save() {
SYSdata["serial"] = SYSConfig.serial; SYSdata["serial"] = SYSConfig.serial;
SYSdata["offline"] = SYSConfig.offline; SYSdata["offline"] = SYSConfig.offline;
SYSdata["powermode"] = SYSConfig.powerMode; SYSdata["powermode"] = SYSConfig.powerMode;
# if USE_BLUFI
SYSdata["blufi"] = SYSConfig.blufi;
# endif
# ifdef ZmqttDiscovery # ifdef ZmqttDiscovery
SYSdata["disc"] = SYSConfig.discovery; SYSdata["disc"] = SYSConfig.discovery;
SYSdata["ohdisc"] = SYSConfig.ohdiscovery; SYSdata["ohdisc"] = SYSConfig.ohdiscovery;
@@ -1374,6 +1383,7 @@ void setup() {
#endif #endif
#if defined(ESP32) && defined(USE_BLUFI) #if defined(ESP32) && defined(USE_BLUFI)
if (SYSConfig.blufi)
startBlufi(); startBlufi();
#endif #endif
@@ -2733,6 +2743,9 @@ String stateMeasures() {
#ifdef LED_ADDRESSABLE #ifdef LED_ADDRESSABLE
SYSdata["rgbb"] = SYSConfig.rgbbrightness; SYSdata["rgbb"] = SYSConfig.rgbbrightness;
#endif #endif
#if USE_BLUFI
SYSdata["blufi"] = SYSConfig.blufi;
#endif
#ifdef ZmqttDiscovery #ifdef ZmqttDiscovery
SYSdata["disc"] = SYSConfig.discovery; SYSdata["disc"] = SYSConfig.discovery;
SYSdata["ohdisc"] = SYSConfig.ohdiscovery; SYSdata["ohdisc"] = SYSConfig.ohdiscovery;
@@ -3268,6 +3281,7 @@ void readCntParameters(int index) {
void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
if (cmpToMainTopic(topicOri, subjectMQTTtoSYSset)) { if (cmpToMainTopic(topicOri, subjectMQTTtoSYSset)) {
bool restartESP = false; bool restartESP = false;
bool publishState = false;
Log.trace(F("MQTTtoSYS json" CR)); Log.trace(F("MQTTtoSYS json" CR));
if (SYSdata.containsKey("cmd")) { if (SYSdata.containsKey("cmd")) {
const char* cmd = SYSdata["cmd"]; const char* cmd = SYSdata["cmd"];
@@ -3279,7 +3293,7 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
setupwifi(true); setupwifi(true);
#endif #endif
} else if (strstr(cmd, statusCmd) != NULL) { //erase and restart } else if (strstr(cmd, statusCmd) != NULL) { //erase and restart
stateMeasures(); publishState = true;
} }
} }
#ifdef LED_ADDRESSABLE #ifdef LED_ADDRESSABLE
@@ -3291,7 +3305,7 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
updatePowerIndicator(); updatePowerIndicator();
# endif # endif
Log.notice(F("RGB brightness: %d" CR), SYSConfig.rgbbrightness); Log.notice(F("RGB brightness: %d" CR), SYSConfig.rgbbrightness);
stateMeasures(); publishState = true;
} else { } else {
Log.warning(F("RGB brightness value invalid - ignoring command" CR)); 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>()) { if (SYSdata.containsKey("ohdisc") && SYSdata["ohdisc"].is<bool>()) {
SYSConfig.ohdiscovery = SYSdata["ohdisc"]; SYSConfig.ohdiscovery = SYSdata["ohdisc"];
Log.notice(F("OpenHAB discovery: %T" CR), SYSConfig.ohdiscovery); Log.notice(F("OpenHAB discovery: %T" CR), SYSConfig.ohdiscovery);
stateMeasures(); publishState = true;
} }
#endif #endif
if (SYSdata.containsKey("wifi_ssid") && SYSdata["wifi_ssid"].is<char*>() && SYSdata.containsKey("wifi_pass") && SYSdata["wifi_pass"].is<char*>()) { 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"]; SYSConfig.powerMode = SYSdata["powermode"];
Log.notice(F("Power mode: %d" CR), SYSConfig.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.containsKey("disc")) {
if (SYSdata["disc"].is<bool>()) { if (SYSdata["disc"].is<bool>()) {
if (SYSdata["disc"] == true && SYSConfig.discovery == false) if (SYSdata["disc"] == true && SYSConfig.discovery == false)
lastDiscovery = millis(); lastDiscovery = millis();
SYSConfig.discovery = SYSdata["disc"]; SYSConfig.discovery = SYSdata["disc"];
stateMeasures(); publishState = true;
if (SYSConfig.discovery) if (SYSConfig.discovery)
pubMqttDiscovery(); pubMqttDiscovery();
} else { } else {
@@ -3510,6 +3538,9 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
if (SYSdata.containsKey("save") && SYSdata["save"].as<bool>()) { if (SYSdata.containsKey("save") && SYSdata["save"].as<bool>()) {
SYSConfig_save(); SYSConfig_save();
} }
if (publishState) {
stateMeasures();
}
if (restartESP) { if (restartESP) {
ESPRestart(7); ESPRestart(7);
} }