diff --git a/docs/integrate/openhab3.md b/docs/integrate/openhab3.md index 05ecfe2..0be500b 100644 --- a/docs/integrate/openhab3.md +++ b/docs/integrate/openhab3.md @@ -78,7 +78,7 @@ You should see the gateway connected to your broker by checking with an MQTT cli To make the auto discovery compatible with OpenHAB you have to send the following command with a retain flag. -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"ohdiscovery":true}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"ohdisc":true}'` ## Adding the things 1. From the Administration click on "Things" under "Settings", you should see a number in the INBOX button diff --git a/docs/use/ble.md b/docs/use/ble.md index cb47567..e03a808 100644 --- a/docs/use/ble.md +++ b/docs/use/ble.md @@ -225,11 +225,11 @@ Or by an MQTT command. To change presence publication topic, use this MQTT command: -`mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{"presenceTopic":"presence/"}'` +`mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{"prestopic":"presence/"}'` To use iBeacon UUID for presence, instead of sender (random) MAC address, use this MQTT command: -`mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{"presenceUseBeaconUuid":true}'` +`mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{"presuseuuid":true}'` This will change usual payload for iBeacon from: `{"id":"60:87:57:4C:9B:C2","mac_type":1,"rssi":-78,"distance":7.85288,"brand":"GENERIC","model":"iBeacon","model_id":"IBEACON","mfid":"4c00","uuid":"1de4b189115e45f6b44e509352269977","major":0,"minor":0,"txpower":-66}` @@ -250,7 +250,7 @@ home/OpenMQTTGateway/BTtoMQTT/5210A84690AC {"id":"52:10:A8:46:90:AC","mac_type": To use iBeacon UUID as topic, use this MQTT command: -`mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{"pubBeaconUuidForTopic":true}'` +`mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{"pubuuid4topic":true}'` Resulting in such messages (for the same iBeacon as previously): ``` diff --git a/docs/use/gateway.md b/docs/use/gateway.md index 3121c6e..39b3aa4 100644 --- a/docs/use/gateway.md +++ b/docs/use/gateway.md @@ -22,13 +22,13 @@ With Home Assistant, this command is directly available through MQTT auto discov ## Auto discovery You can deactivate the MQTT auto discovery function, this function enables to automatically create devices/entities with Home Assistant convention. ### Deactivate -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"discovery":false}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"disc":false}'` ### Activate -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"discovery":true}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"disc":true}'` If you want the settings to be kept upon gateway restart, you can save the state by adding `"save":true` (ESP32 only). -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"discovery":false, "save":true}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"disc":false, "save":true}'` ::: tip Auto discovery is enable by default on release binaries, on platformio (except for UNO). With Arduino IDE please read the [advanced configuration section](../upload/advanced-configuration#auto-discovery) of the documentation. @@ -37,10 +37,10 @@ Auto discovery is enable by default on release binaries, on platformio (except f ## AutoDiscovery compatible with OpenHAB (default: false) OpenHAB does not support the key `is_defined` in the json template, to remove it at runtime and make the auto discovery compatible you can use the following command with a retain flag. -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"ohdiscovery":true}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"ohdisc":true}'` If you want the settings to be kept upon gateway restart, you can save the state by adding `"save":true` (ESP32 only). -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"ohdiscovery":true, "save":true}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m '{"ohdisc":true, "save":true}'` ::: tip This command can also be used with other controllers that does not support the is_defined key. diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index e3e057c..7346453 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -122,21 +122,22 @@ String stateBTMeasures(bool start) { jo["onlysensors"] = BTConfig.pubOnlySensors; jo["randommacs"] = BTConfig.pubRandomMACs; jo["hasspresence"] = BTConfig.presenceEnable; - jo["presenceTopic"] = BTConfig.presenceTopic; - jo["presenceUseBeaconUuid"] = BTConfig.presenceUseBeaconUuid; + jo["prestopic"] = BTConfig.presenceTopic; + jo["presuseuuid"] = BTConfig.presenceUseBeaconUuid; jo["minrssi"] = -abs(BTConfig.minRssi); // Always export as negative value jo["extDecoderEnable"] = BTConfig.extDecoderEnable; jo["extDecoderTopic"] = BTConfig.extDecoderTopic; jo["filterConnectable"] = BTConfig.filterConnectable; jo["pubadvdata"] = BTConfig.pubAdvData; - jo["pubBeaconUuidForTopic"] = BTConfig.pubBeaconUuidForTopic; + jo["pubuuid4topic"] = BTConfig.pubBeaconUuidForTopic; jo["ignoreWBlist"] = BTConfig.ignoreWBlist; jo["presenceawaytimer"] = BTConfig.presenceAwayTimer; jo["movingtimer"] = BTConfig.movingTimer; - jo["forcepassivescan"] = BTConfig.forcePassiveScan; + jo["forcepscn"] = BTConfig.forcePassiveScan; + jo["tskstck"] = uxTaskGetStackHighWaterMark(xProcBLETaskHandle); + jo["crstck"] = uxTaskGetStackHighWaterMark(xCoreTaskHandle); jo["enabled"] = BTConfig.enabled; - jo["bletaskstack"] = uxTaskGetStackHighWaterMark(xProcBLETaskHandle); - jo["blecoretaskstack"] = uxTaskGetStackHighWaterMark(xCoreTaskHandle); + jo["scnct"] = scanCount; if (start) { Log.notice(F("BT sys: ")); @@ -211,15 +212,15 @@ void BTConfig_fromJson(JsonObject& BTdata, bool startup = false) { // publish devices which randomly change their MAC addresses Config_update(BTdata, "randommacs", BTConfig.pubRandomMACs); // Home Assistant presence message topic - Config_update(BTdata, "presenceTopic", BTConfig.presenceTopic); + Config_update(BTdata, "prestopic", BTConfig.presenceTopic); // Home Assistant presence message use iBeacon UUID - Config_update(BTdata, "presenceUseBeaconUuid", BTConfig.presenceUseBeaconUuid); + Config_update(BTdata, "presuseuuid", BTConfig.presenceUseBeaconUuid); // Timer to trigger a device state as offline if not seen Config_update(BTdata, "presenceawaytimer", BTConfig.presenceAwayTimer); // Timer to trigger a device state as offline if not seen Config_update(BTdata, "movingtimer", BTConfig.movingTimer); // Force passive scan - Config_update(BTdata, "forcepassivescan", BTConfig.forcePassiveScan); + Config_update(BTdata, "forcepscn", BTConfig.forcePassiveScan); // MinRSSI set Config_update(BTdata, "minrssi", BTConfig.minRssi); // Send undecoded device data @@ -231,7 +232,7 @@ void BTConfig_fromJson(JsonObject& BTdata, bool startup = false) { // Publish advertisement data Config_update(BTdata, "pubadvdata", BTConfig.pubAdvData); // Use iBeacon UUID as topic, instead of sender (random) MAC address - Config_update(BTdata, "pubBeaconUuidForTopic", BTConfig.pubBeaconUuidForTopic); + Config_update(BTdata, "pubuuid4topic", BTConfig.pubBeaconUuidForTopic); // Disable Whitelist & Blacklist Config_update(BTdata, "ignoreWBlist", (BTConfig.ignoreWBlist)); // Enable or disable the BT gateway @@ -265,18 +266,18 @@ void BTConfig_fromJson(JsonObject& BTdata, bool startup = false) { jo["onlysensors"] = BTConfig.pubOnlySensors; jo["randommacs"] = BTConfig.pubRandomMACs; jo["hasspresence"] = BTConfig.presenceEnable; - jo["presenceTopic"] = BTConfig.presenceTopic; - jo["presenceUseBeaconUuid"] = BTConfig.presenceUseBeaconUuid; + jo["prestopic"] = BTConfig.presenceTopic; + jo["presuseuuid"] = BTConfig.presenceUseBeaconUuid; jo["minrssi"] = -abs(BTConfig.minRssi); // Always export as negative value jo["extDecoderEnable"] = BTConfig.extDecoderEnable; jo["extDecoderTopic"] = BTConfig.extDecoderTopic; jo["filterConnectable"] = BTConfig.filterConnectable; jo["pubadvdata"] = BTConfig.pubAdvData; - jo["pubBeaconUuidForTopic"] = BTConfig.pubBeaconUuidForTopic; + jo["pubuuid4topic"] = BTConfig.pubBeaconUuidForTopic; jo["ignoreWBlist"] = BTConfig.ignoreWBlist; jo["presenceawaytimer"] = BTConfig.presenceAwayTimer; jo["movingtimer"] = BTConfig.movingTimer; - jo["forcepassivescan"] = BTConfig.forcePassiveScan; + jo["forcepscn"] = BTConfig.forcePassiveScan; jo["enabled"] = BTConfig.enabled; // Save config into NVS (non-volatile storage) String conf = ""; diff --git a/main/ZmqttDiscovery.ino b/main/ZmqttDiscovery.ino index bd88978..84cd28c 100644 --- a/main/ZmqttDiscovery.ino +++ b/main/ZmqttDiscovery.ino @@ -497,9 +497,9 @@ void pubMqttDiscovery() { stateClassNone //State Class ); createDiscovery("switch", //set Type - subjectSYStoMQTT, "SYS: Auto discovery", (char*)getUniqueId("discovery", "").c_str(), //set state_topic,name,uniqueId - will_Topic, "", "{{ value_json.discovery }}", //set availability_topic,device_class,value_template, - "{\"discovery\":true,\"save\":true}", "{\"discovery\":false,\"save\":true}", "", //set,payload_on,payload_off,unit_of_meas, + subjectSYStoMQTT, "SYS: Auto discovery", (char*)getUniqueId("disc", "").c_str(), //set state_topic,name,uniqueId + will_Topic, "", "{{ value_json.disc }}", //set availability_topic,device_class,value_template, + "{\"disc\":true,\"save\":true}", "{\"disc\":false,\"save\":true}", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic "", "", "", "", false, // device name, device manufacturer, device model, device MAC, retain, @@ -507,9 +507,9 @@ void pubMqttDiscovery() { "false", "true" //state_off, state_on ); createDiscovery("switch", //set Type - subjectSYStoMQTT, "SYS: OpenHAB discovery", (char*)getUniqueId("ohdiscovery", "").c_str(), //set state_topic,name,uniqueId - will_Topic, "", "{{ value_json.ohdiscovery }}", //set availability_topic,device_class,value_template, - "{\"ohdiscovery\":true,\"save\":true}", "{\"ohdiscovery\":false,\"save\":true}", "", //set,payload_on,payload_off,unit_of_meas, + subjectSYStoMQTT, "SYS: OpenHAB discovery", (char*)getUniqueId("ohdisc", "").c_str(), //set state_topic,name,uniqueId + will_Topic, "", "{{ value_json.ohdisc }}", //set availability_topic,device_class,value_template, + "{\"ohdisc\":true,\"save\":true}", "{\"ohdisc\":false,\"save\":true}", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic "", "", "", "", false, // device name, device manufacturer, device model, device MAC, retain, @@ -518,9 +518,9 @@ void pubMqttDiscovery() { ); # ifdef RGB_INDICATORS createDiscovery("number", //set Type - subjectSYStoMQTT, "SYS: LED Brightness", (char*)getUniqueId("rgbbrightness", "").c_str(), //set state_topic,name,uniqueId - will_Topic, "", "{{ (value_json.rgbbrightness/2.55) | round(0) }}", //set availability_topic,device_class,value_template, - "{\"rgbbrightness\":{{ (value*2.55) | round(0) }},\"save\":true}", "", "", //set,payload_on,payload_off,unit_of_meas, + subjectSYStoMQTT, "SYS: LED Brightness", (char*)getUniqueId("rgbb", "").c_str(), //set state_topic,name,uniqueId + will_Topic, "", "{{ (value_json.rgbb/2.55) | round(0) }}", //set availability_topic,device_class,value_template, + "{\"rgbb\":{{ (value*2.55) | round(0) }},\"save\":true}", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_available,payload_not available ,is a gateway entity, command topic "", "", "", "", false, // device name, device manufacturer, device model, device ID, retain, @@ -1227,7 +1227,7 @@ void pubMqttDiscovery() { "false", "true" //state_off, state_on ); -# define EntitiesCount 8 +# define EntitiesCount 10 const char* obsoleteEntities[EntitiesCount][2] = { // Remove previously created entities for version < 1.4.0 {"switch", "active_scan"}, // Replaced by adaptive scan @@ -1238,7 +1238,9 @@ void pubMqttDiscovery() { {"switch", "erase"}, // Now a button {"switch", "force_scan"}, // Now a button {"sensor", "interval"}, // Now a number - {"sensor", "scanbcnct"}}; // Now a number + {"sensor", "scanbcnct"}, // Now a number + {"switch", "ohdiscovery"}, // Now a new key + {"switch", "discovery"}}; // Now a new key for (int i = 0; i < EntitiesCount; i++) { eraseTopic(obsoleteEntities[i][0], (char*)getUniqueId(obsoleteEntities[i][1], "").c_str()); diff --git a/main/main.ino b/main/main.ino index f5c1c70..b0db9fa 100644 --- a/main/main.ino +++ b/main/main.ino @@ -811,10 +811,10 @@ void SYSConfig_init() { } void SYSConfig_fromJson(JsonObject& SYSdata) { - Config_update(SYSdata, "discovery", SYSConfig.discovery); - Config_update(SYSdata, "ohdiscovery", SYSConfig.ohdiscovery); + Config_update(SYSdata, "disc", SYSConfig.discovery); + Config_update(SYSdata, "ohdisc", SYSConfig.ohdiscovery); # ifdef RGB_INDICATORS - Config_update(SYSdata, "rgbbrightness", SYSConfig.rgbbrightness); + Config_update(SYSdata, "rgbb", SYSConfig.rgbbrightness); # endif } #else @@ -2367,17 +2367,17 @@ void eraseAndRestart() { #if defined(ESP8266) || defined(ESP32) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) String stateMeasures() { - StaticJsonDocument<1024> SYSdata; + StaticJsonDocument SYSdata; SYSdata["uptime"] = uptime(); SYSdata["version"] = OMG_VERSION; # ifdef RGB_INDICATORS - SYSdata["rgbbrightness"] = SYSConfig.rgbbrightness; + SYSdata["rgbb"] = SYSConfig.rgbbrightness; # endif # ifdef ZmqttDiscovery - SYSdata["discovery"] = SYSConfig.discovery; - SYSdata["ohdiscovery"] = SYSConfig.ohdiscovery; + SYSdata["disc"] = SYSConfig.discovery; + SYSdata["ohdisc"] = SYSConfig.ohdiscovery; # endif # if defined(ESP8266) || defined(ESP32) SYSdata["env"] = ENV_NAME; @@ -2392,22 +2392,21 @@ String stateMeasures() { } # endif SYSdata["freemem"] = freeMem; - SYSdata["mqttport"] = mqtt_port; - SYSdata["mqttsecure"] = mqtt_secure; - SYSdata["msgproc"] = queueLengthSum; - SYSdata["msgspeed"] = round2((float)queueLengthSum / uptime()); - SYSdata["msgblock"] = blockedMessages; - SYSdata["maxqueue"] = maxQueueLength; + SYSdata["mqttp"] = mqtt_port; + SYSdata["mqtts"] = mqtt_secure; + SYSdata["msgprc"] = queueLengthSum; + SYSdata["msgblck"] = blockedMessages; + SYSdata["maxq"] = maxQueueLength; # ifdef ESP32 minFreeMem = ESP.getMinFreeHeap(); - SYSdata["minfreemem"] = minFreeMem; + SYSdata["minmem"] = minFreeMem; # ifndef NO_INT_TEMP_READING - SYSdata["tempc"] = intTemperatureRead(); + SYSdata["tempc"] = round2(intTemperatureRead()); # endif - SYSdata["freestack"] = uxTaskGetStackHighWaterMark(NULL); + SYSdata["freestck"] = uxTaskGetStackHighWaterMark(NULL); # endif - SYSdata["ethernet"] = ethConnected; + SYSdata["eth"] = ethConnected; if (ethConnected) { # ifdef ESP32_ETHERNET SYSdata["mac"] = (char*)ETH.macAddress().c_str(); @@ -2428,9 +2427,6 @@ String stateMeasures() { # ifdef ESP32 SYSdata["lowpowermode"] = (int)lowpowermode; # endif - SYSdata["interval"] = BTConfig.BLEinterval; - SYSdata["intervalcnct"] = BTConfig.intervalConnect; - SYSdata["scnct"] = scanCount; # endif # ifdef ZboardM5STACK M5.Power.begin(); @@ -2468,6 +2464,7 @@ String stateMeasures() { _modules.replace("\"", "'"); SYSdata["modules"] = _modules.c_str(); + String output; serializeJson(SYSdata, output); return output; @@ -2868,9 +2865,9 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding } } # ifdef RGB_INDICATORS - if (SYSdata.containsKey("rgbbrightness") && SYSdata["rgbbrightness"].is()) { - if (SYSdata["rgbbrightness"] >= 0 && SYSdata["rgbbrightness"] <= 255) { - SYSConfig.rgbbrightness = round2(SYSdata["rgbbrightness"]); + if (SYSdata.containsKey("rgbb") && SYSdata["rgbb"].is()) { + if (SYSdata["rgbb"] >= 0 && SYSdata["rgbb"] <= 255) { + SYSConfig.rgbbrightness = round2(SYSdata["rgbb"]); leds.setBrightness(SYSConfig.rgbbrightness); leds.show(); # ifdef ZactuatorONOFF @@ -2884,8 +2881,8 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding } # endif # ifdef ZmqttDiscovery - if (SYSdata.containsKey("ohdiscovery") && SYSdata["ohdiscovery"].is()) { - SYSConfig.ohdiscovery = SYSdata["ohdiscovery"]; + if (SYSdata.containsKey("ohdisc") && SYSdata["ohdisc"].is()) { + SYSConfig.ohdiscovery = SYSdata["ohdisc"]; Log.notice(F("OpenHAB discovery: %T" CR), SYSConfig.ohdiscovery); stateMeasures(); } @@ -3046,11 +3043,11 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding #endif #ifdef ZmqttDiscovery - if (SYSdata.containsKey("discovery")) { - if (SYSdata["discovery"].is()) { - if (SYSdata["discovery"] == true && SYSConfig.discovery == false) + if (SYSdata.containsKey("disc")) { + if (SYSdata["disc"].is()) { + if (SYSdata["disc"] == true && SYSConfig.discovery == false) lastDiscovery = millis(); - SYSConfig.discovery = SYSdata["discovery"]; + SYSConfig.discovery = SYSdata["disc"]; stateMeasures(); if (SYSConfig.discovery) pubMqttDiscovery(); @@ -3063,10 +3060,10 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding if (SYSdata.containsKey("save") && SYSdata["save"].as()) { StaticJsonDocument jsonBuffer; JsonObject jo = jsonBuffer.to(); - jo["discovery"] = SYSConfig.discovery; - jo["ohdiscovery"] = SYSConfig.ohdiscovery; + jo["disc"] = SYSConfig.discovery; + jo["ohdisc"] = SYSConfig.ohdiscovery; # ifdef RGB_INDICATORS - jo["rgbbrightness"] = SYSConfig.rgbbrightness; + jo["rgbb"] = SYSConfig.rgbbrightness; # endif // Save config into NVS (non-volatile storage) String conf = "";