mirror of https://github.com/arendst/Tasmota.git
Merge pull request #7561 from s-hadinger/zigbee_names_2
Minor fixes to Zigbee friendly names
This commit is contained in:
commit
b474bef30a
|
@ -624,6 +624,16 @@ void Z_Devices::jsonAppend(uint16_t shortaddr, const JsonObject &values) {
|
||||||
if (nullptr == device.json) {
|
if (nullptr == device.json) {
|
||||||
device.json = &(device.json_buffer->createObject());
|
device.json = &(device.json_buffer->createObject());
|
||||||
}
|
}
|
||||||
|
// Prepend Device, will be removed later if redundant
|
||||||
|
char sa[8];
|
||||||
|
snprintf_P(sa, sizeof(sa), PSTR("0x%04X"), shortaddr);
|
||||||
|
device.json->set(F(D_JSON_ZIGBEE_DEVICE), sa);
|
||||||
|
// Prepend Friendly Name if it has one
|
||||||
|
const String * fname = zigbee_devices.getFriendlyName(shortaddr);
|
||||||
|
if (fname) {
|
||||||
|
device.json->set(F(D_JSON_ZIGBEE_NAME), (char*)fname->c_str()); // (char*) forces ArduinoJson to make a copy of the cstring
|
||||||
|
}
|
||||||
|
|
||||||
// copy all values from 'values' to 'json'
|
// copy all values from 'values' to 'json'
|
||||||
CopyJsonObject(*device.json, values);
|
CopyJsonObject(*device.json, values);
|
||||||
}
|
}
|
||||||
|
@ -643,13 +653,20 @@ void Z_Devices::jsonPublishFlush(uint16_t shortaddr) {
|
||||||
const String * fname = zigbee_devices.getFriendlyName(shortaddr);
|
const String * fname = zigbee_devices.getFriendlyName(shortaddr);
|
||||||
bool use_fname = (Settings.flag4.zigbee_use_names) && (fname); // should we replace shortaddr with friendlyname?
|
bool use_fname = (Settings.flag4.zigbee_use_names) && (fname); // should we replace shortaddr with friendlyname?
|
||||||
|
|
||||||
|
// if (use_fname) {
|
||||||
|
// // we need to add the Device short_addr inside the JSON
|
||||||
|
// char sa[8];
|
||||||
|
// snprintf_P(sa, sizeof(sa), PSTR("0x%04X"), shortaddr);
|
||||||
|
// json->set(F(D_JSON_ZIGBEE_DEVICE), sa);
|
||||||
|
// } else if (fname) {
|
||||||
|
// json->set(F(D_JSON_NAME), (char*) fname);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Remove redundant "Name" or "Device"
|
||||||
if (use_fname) {
|
if (use_fname) {
|
||||||
// we need to add the Device short_addr inside the JSON
|
json->remove(F(D_JSON_ZIGBEE_NAME));
|
||||||
char sa[8];
|
} else {
|
||||||
snprintf_P(sa, sizeof(sa), PSTR("0x%04X"), shortaddr);
|
json->remove(F(D_JSON_ZIGBEE_DEVICE));
|
||||||
json->set(F(D_JSON_ZIGBEE_DEVICE), sa);
|
|
||||||
} else if (fname) {
|
|
||||||
json->set(F(D_JSON_NAME), (char*) fname);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String msg = "";
|
String msg = "";
|
||||||
|
|
|
@ -32,7 +32,6 @@ const uint8_t ZIGBEE_STATUS_DEVICE_ANNOUNCE = 30; // Device announces its
|
||||||
const uint8_t ZIGBEE_STATUS_NODE_DESC = 31; // Node descriptor
|
const uint8_t ZIGBEE_STATUS_NODE_DESC = 31; // Node descriptor
|
||||||
const uint8_t ZIGBEE_STATUS_ACTIVE_EP = 32; // Endpoints descriptor
|
const uint8_t ZIGBEE_STATUS_ACTIVE_EP = 32; // Endpoints descriptor
|
||||||
const uint8_t ZIGBEE_STATUS_SIMPLE_DESC = 33; // Simple Descriptor (clusters)
|
const uint8_t ZIGBEE_STATUS_SIMPLE_DESC = 33; // Simple Descriptor (clusters)
|
||||||
const uint8_t ZIGBEE_STATUS_DEVICE_INDICATION = 34; // Device announces its address
|
|
||||||
const uint8_t ZIGBEE_STATUS_CC_VERSION = 50; // Status: CC2530 ZNP Version
|
const uint8_t ZIGBEE_STATUS_CC_VERSION = 50; // Status: CC2530 ZNP Version
|
||||||
const uint8_t ZIGBEE_STATUS_CC_INFO = 51; // Status: CC2530 Device Configuration
|
const uint8_t ZIGBEE_STATUS_CC_INFO = 51; // Status: CC2530 Device Configuration
|
||||||
const uint8_t ZIGBEE_STATUS_UNSUPPORTED_VERSION = 98; // Unsupported ZNP version
|
const uint8_t ZIGBEE_STATUS_UNSUPPORTED_VERSION = 98; // Unsupported ZNP version
|
||||||
|
|
|
@ -432,16 +432,7 @@ int32_t Z_ReceiveAfIncomingMessage(int32_t res, const class SBuffer &buf) {
|
||||||
snprintf_P(shortaddr, sizeof(shortaddr), PSTR("0x%04X"), srcaddr);
|
snprintf_P(shortaddr, sizeof(shortaddr), PSTR("0x%04X"), srcaddr);
|
||||||
|
|
||||||
DynamicJsonBuffer jsonBuffer;
|
DynamicJsonBuffer jsonBuffer;
|
||||||
JsonObject& json_root = jsonBuffer.createObject();
|
JsonObject& json = jsonBuffer.createObject();
|
||||||
|
|
||||||
JsonObject& json1 = json_root.createNestedObject(F(D_CMND_ZIGBEE_RECEIVED));
|
|
||||||
|
|
||||||
const String * fname = zigbee_devices.getFriendlyName(srcaddr);
|
|
||||||
bool use_fname = (Settings.flag4.zigbee_use_names) && (fname); // should we replace shortaddr with friendlyname?
|
|
||||||
JsonObject& json = json1.createNestedObject(use_fname ? fname->c_str() : shortaddr);
|
|
||||||
if (use_fname) {
|
|
||||||
json[F(D_JSON_ZIGBEE_DEVICE)] = shortaddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( (!zcl_received.isClusterSpecificCommand()) && (ZCL_REPORT_ATTRIBUTES == zcl_received.getCmdId())) {
|
if ( (!zcl_received.isClusterSpecificCommand()) && (ZCL_REPORT_ATTRIBUTES == zcl_received.getCmdId())) {
|
||||||
zcl_received.parseRawAttributes(json);
|
zcl_received.parseRawAttributes(json);
|
||||||
|
@ -453,13 +444,8 @@ int32_t Z_ReceiveAfIncomingMessage(int32_t res, const class SBuffer &buf) {
|
||||||
}
|
}
|
||||||
String msg("");
|
String msg("");
|
||||||
msg.reserve(100);
|
msg.reserve(100);
|
||||||
json_root.printTo(msg);
|
json.printTo(msg);
|
||||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("ZigbeeZCLRawReceived: %s"), msg.c_str());
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "ZigbeeZCLRawReceived: {\"0x%04X\":%s}"), srcaddr, msg.c_str());
|
||||||
|
|
||||||
// Add friendly name
|
|
||||||
if ((!use_fname) && (fname)) {
|
|
||||||
json[F(D_JSON_ZIGBEE_NAME)] = (char*)fname->c_str(); // (char*) will force a copy of the string
|
|
||||||
}
|
|
||||||
|
|
||||||
zcl_received.postProcessAttributes(srcaddr, json);
|
zcl_received.postProcessAttributes(srcaddr, json);
|
||||||
// Add linkquality
|
// Add linkquality
|
||||||
|
@ -476,11 +462,7 @@ int32_t Z_ReceiveAfIncomingMessage(int32_t res, const class SBuffer &buf) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Publish immediately
|
// Publish immediately
|
||||||
msg = "";
|
zigbee_devices.jsonPublishNow(srcaddr, json);
|
||||||
json_root.printTo(msg);
|
|
||||||
Response_P(PSTR("%s"), msg.c_str());
|
|
||||||
MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR));
|
|
||||||
XdrvRulesProcess();
|
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -575,10 +575,10 @@ void CmndZigbeeName(void) {
|
||||||
|
|
||||||
if (p == nullptr) {
|
if (p == nullptr) {
|
||||||
const String * friendlyName = zigbee_devices.getFriendlyName(shortaddr);
|
const String * friendlyName = zigbee_devices.getFriendlyName(shortaddr);
|
||||||
Response_P(PSTR("{\"0x%04X\":{\"name\":\"%s\"}}"), shortaddr, friendlyName ? friendlyName->c_str() : "");
|
Response_P(PSTR("{\"0x%04X\":{\"" D_JSON_ZIGBEE_NAME "\":\"%s\"}}"), shortaddr, friendlyName ? friendlyName->c_str() : "");
|
||||||
} else {
|
} else {
|
||||||
zigbee_devices.setFriendlyName(shortaddr, p);
|
zigbee_devices.setFriendlyName(shortaddr, p);
|
||||||
Response_P(PSTR("{\"0x%04X\":{\"name\":\"%s\"}}"), shortaddr, p);
|
Response_P(PSTR("{\"0x%04X\":{\"" D_JSON_ZIGBEE_NAME "\":\"%s\"}}"), shortaddr, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue