[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
+57
-4
No files matched your search
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user