diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index e49c780a2f..f2fec5fd18 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -185,7 +185,7 @@ void strupp(char* beg) { } # ifdef ZmqttDiscovery -void MiFloraDiscovery(char* mac) { +void MiFloraDiscovery(char* mac, char* sensorModel) { # define MiFloraparametersCount 4 Log.trace(F("MiFloraDiscovery" CR)); char* MiFlorasensor[MiFloraparametersCount][8] = { @@ -196,10 +196,10 @@ void MiFloraDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, MiFlorasensor, MiFloraparametersCount); + createDiscoveryFromList(mac, MiFlorasensor, MiFloraparametersCount, "Mi-Flora", "Xiaomi", sensorModel); } -void VegTrugDiscovery(char* mac) { +void VegTrugDiscovery(char* mac, char* sensorModel) { # define VegTrugparametersCount 4 Log.trace(F("VegTrugDiscovery" CR)); char* VegTrugsensor[VegTrugparametersCount][8] = { @@ -210,10 +210,10 @@ void VegTrugDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, VegTrugsensor, VegTrugparametersCount); + createDiscoveryFromList(mac, VegTrugsensor, VegTrugparametersCount, "VegTrug", "VEGTRUG", sensorModel); } -void MiJiaDiscovery(char* mac) { +void MiJiaDiscovery(char* mac, char* sensorModel) { # define MiJiaparametersCount 3 Log.trace(F("MiJiaDiscovery" CR)); char* MiJiasensor[MiJiaparametersCount][8] = { @@ -223,10 +223,10 @@ void MiJiaDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, MiJiasensor, MiJiaparametersCount); + createDiscoveryFromList(mac, MiJiasensor, MiJiaparametersCount, "MiJia", "", sensorModel); } -void FormalDiscovery(char* mac) { +void FormalDiscovery(char* mac, char* sensorModel) { # define FormalparametersCount 4 Log.trace(F("FormalDiscovery" CR)); char* Formalsensor[FormalparametersCount][8] = { @@ -237,10 +237,10 @@ void FormalDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, Formalsensor, FormalparametersCount); + createDiscoveryFromList(mac, Formalsensor, FormalparametersCount, "Formal", "", sensorModel); } -void LYWSD02Discovery(char* mac) { +void LYWSD02Discovery(char* mac, char* sensorModel) { # define LYWSD02parametersCount 3 Log.trace(F("LYWSD02Discovery" CR)); char* LYWSD02sensor[LYWSD02parametersCount][8] = { @@ -250,10 +250,10 @@ void LYWSD02Discovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, LYWSD02sensor, LYWSD02parametersCount); + createDiscoveryFromList(mac, LYWSD02sensor, LYWSD02parametersCount, "LYWSD02", "Xiaomi", sensorModel); } -void CLEARGRASSTRHDiscovery(char* mac) { +void CLEARGRASSTRHDiscovery(char* mac, char* sensorModel) { # define CLEARGRASSTRHparametersCount 3 Log.trace(F("CLEARGRASSTRHDiscovery" CR)); char* CLEARGRASSTRHsensor[CLEARGRASSTRHparametersCount][8] = { @@ -263,10 +263,10 @@ void CLEARGRASSTRHDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, CLEARGRASSTRHsensor, CLEARGRASSTRHparametersCount); + createDiscoveryFromList(mac, CLEARGRASSTRHsensor, CLEARGRASSTRHparametersCount, "CLEARGRASSTRH", "ClearGrass", sensorModel); } -void CLEARGRASSCGD1Discovery(char* mac) { +void CLEARGRASSCGD1Discovery(char* mac, char* sensorModel) { # define CLEARGRASSCGD1parametersCount 3 Log.trace(F("CLEARGRASSCGD1Discovery" CR)); char* CLEARGRASSCGD1sensor[CLEARGRASSCGD1parametersCount][8] = { @@ -276,10 +276,10 @@ void CLEARGRASSCGD1Discovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, CLEARGRASSCGD1sensor, CLEARGRASSCGD1parametersCount); + createDiscoveryFromList(mac, CLEARGRASSCGD1sensor, CLEARGRASSCGD1parametersCount, "CLEARGRASSCGD1", "ClearGrass", sensorModel); } -void CLEARGRASSTRHKPADiscovery(char* mac) { +void CLEARGRASSTRHKPADiscovery(char* mac, char* sensorModel) { # define CLEARGRASSTRHKPAparametersCount 3 Log.trace(F("CLEARGRASSTRHKPADiscovery" CR)); char* CLEARGRASSTRHKPAsensor[CLEARGRASSTRHKPAparametersCount][8] = { @@ -289,10 +289,11 @@ void CLEARGRASSTRHKPADiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, CLEARGRASSTRHKPAsensor, CLEARGRASSTRHKPAparametersCount); + Log.trace(F("CLEARGRASSTRHKPADiscovery %s" CR), sensorModel); + createDiscoveryFromList(mac, CLEARGRASSTRHKPAsensor, CLEARGRASSTRHKPAparametersCount, "CLEARGRASSTRHKPA", "ClearGrass", sensorModel); } -void MiScaleDiscovery(char* mac) { +void MiScaleDiscovery(char* mac, char* sensorModel) { # define MiScaleparametersCount 1 Log.trace(F("MiScaleDiscovery" CR)); char* MiScalesensor[MiScaleparametersCount][8] = { @@ -300,10 +301,10 @@ void MiScaleDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, MiScalesensor, MiScaleparametersCount); + createDiscoveryFromList(mac, MiScalesensor, MiScaleparametersCount, "MiScale", "Xiaomi", sensorModel); } -void MiLampDiscovery(char* mac) { +void MiLampDiscovery(char* mac, char* sensorModel) { # define MiLampparametersCount 1 Log.trace(F("MiLampDiscovery" CR)); char* MiLampsensor[MiLampparametersCount][8] = { @@ -311,10 +312,10 @@ void MiLampDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, MiLampsensor, MiLampparametersCount); + createDiscoveryFromList(mac, MiLampsensor, MiLampparametersCount, "MiLamp", "Xiaomi", sensorModel); } -void MiBandDiscovery(char* mac) { +void MiBandDiscovery(char* mac, char* sensorModel) { # define MiBandparametersCount 1 Log.trace(F("MiBandDiscovery" CR)); char* MiBandsensor[MiBandparametersCount][8] = { @@ -322,10 +323,10 @@ void MiBandDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, MiBandsensor, MiBandparametersCount); + createDiscoveryFromList(mac, MiBandsensor, MiBandparametersCount, "MiBand", "Xiaomi", sensorModel); } -void InkBirdDiscovery(char* mac) { +void InkBirdDiscovery(char* mac, char* sensorModel) { # define InkBirdparametersCount 3 Log.trace(F("InkBirdDiscovery" CR)); char* InkBirdsensor[InkBirdparametersCount][8] = { @@ -335,10 +336,10 @@ void InkBirdDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, InkBirdsensor, InkBirdparametersCount); + createDiscoveryFromList(mac, InkBirdsensor, InkBirdparametersCount, "", "InkBird", sensorModel); } -void LYWSD03MMCDiscovery(char* mac) { +void LYWSD03MMCDiscovery(char* mac, char* sensorModel) { # define LYWSD03MMCparametersCount 4 Log.trace(F("LYWSD03MMCDiscovery" CR)); char* LYWSD03MMCsensor[LYWSD03MMCparametersCount][8] = { @@ -349,10 +350,10 @@ void LYWSD03MMCDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, LYWSD03MMCsensor, LYWSD03MMCparametersCount); + createDiscoveryFromList(mac, LYWSD03MMCsensor, LYWSD03MMCparametersCount, "LYWSD03MMC", "Xiaomi", sensorModel); } -void MHO_C401Discovery(char* mac) { +void MHO_C401Discovery(char* mac, char* sensorModel) { # define MHO_C401parametersCount 4 Log.trace(F("MHO_C401Discovery" CR)); char* MHO_C401sensor[MHO_C401parametersCount][8] = { @@ -363,10 +364,10 @@ void MHO_C401Discovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, MHO_C401sensor, MHO_C401parametersCount); + createDiscoveryFromList(mac, MHO_C401sensor, MHO_C401parametersCount, "MHO_C401", "Xiaomi", sensorModel); } -void INodeEMDiscovery(char* mac) { +void INodeEMDiscovery(char* mac, char* sensorModel) { # define INodeEMparametersCount 3 Log.trace(F("INodeEMDiscovery" CR)); char* INodeEMsensor[INodeEMparametersCount][8] = { @@ -376,25 +377,25 @@ void INodeEMDiscovery(char* mac) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, INodeEMsensor, INodeEMparametersCount); + createDiscoveryFromList(mac, INodeEMsensor, INodeEMparametersCount, "INode-Energy-Meter", "INode", sensorModel); } # else -void MiFloraDiscovery(char* mac) {} -void VegTrugDiscovery(char* mac) {} -void MiJiaDiscovery(char* mac) {} -void FormalDiscovery(char* mac) {} -void LYWSD02Discovery(char* mac) {} -void CLEARGRASSTRHDiscovery(char* mac) {} -void CLEARGRASSCGD1Discovery(char* mac) {} -void CLEARGRASSTRHKPADiscovery(char* mac) {} -void MiScaleDiscovery(char* mac) {} -void MiLampDiscovery(char* mac) {} -void MiBandDiscovery(char* mac) {} -void InkBirdDiscovery(char* mac) {} -void LYWSD03MMCDiscovery(char* mac) {} -void MHO_C401Discovery(char* mac) {} -void INodeEMDiscovery(char* mac) {} +void MiFloraDiscovery(char* mac, char* sensorModel) {} +void VegTrugDiscovery(char* mac, char* sensorModel) {} +void MiJiaDiscovery(char* mac, char* sensorModel) {} +void FormalDiscovery(char* mac, char* sensorModel) {} +void LYWSD02Discovery(char* mac, char* sensorModel) {} +void CLEARGRASSTRHDiscovery(char* mac, char* sensorModel) {} +void CLEARGRASSCGD1Discovery(char* mac, char* sensorModel) {} +void CLEARGRASSTRHKPADiscovery(char* mac, char* sensorModel) {} +void MiScaleDiscovery(char* mac, char* sensorModel) {} +void MiLampDiscovery(char* mac, char* sensorModel) {} +void MiBandDiscovery(char* mac, char* sensorModel) {} +void InkBirdDiscovery(char* mac, char* sensorModel) {} +void LYWSD03MMCDiscovery(char* mac, char* sensorModel) {} +void MHO_C401Discovery(char* mac, char* sensorModel) {} +void INodeEMDiscovery(char* mac, char* sensorModel) {} # endif # ifdef ESP32 @@ -834,22 +835,22 @@ void launchDiscovery() { String macWOdots = String(p->macAdr); macWOdots.replace(":", ""); Log.trace(F("Launching discovery of %s" CR), p->macAdr); - if (p->sensorModel == HHCCJCY01HHCC) MiFloraDiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == VEGTRUG) VegTrugDiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == LYWSDCGQ) MiJiaDiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == JQJCY01YM) FormalDiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == LYWSD02) LYWSD02Discovery((char*)macWOdots.c_str()); - if (p->sensorModel == CGG1) CLEARGRASSTRHDiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == CGP1W) CLEARGRASSTRHKPADiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == MUE4094RT) MiLampDiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery((char*)macWOdots.c_str()); - if (p->sensorModel == MIBAND) MiBandDiscovery((char*)macWOdots.c_str()); + if (p->sensorModel == HHCCJCY01HHCC) MiFloraDiscovery((char*)macWOdots.c_str(), "HHCCJCY01HHCC"); + if (p->sensorModel == VEGTRUG) VegTrugDiscovery((char*)macWOdots.c_str(), "VEGTRUG"); + if (p->sensorModel == LYWSDCGQ) MiJiaDiscovery((char*)macWOdots.c_str(), "LYWSDCGQ"); + if (p->sensorModel == JQJCY01YM) FormalDiscovery((char*)macWOdots.c_str(), "JQJCY01YM"); + if (p->sensorModel == LYWSD02) LYWSD02Discovery((char*)macWOdots.c_str(), "LYWSD02"); + if (p->sensorModel == CGG1) CLEARGRASSTRHDiscovery((char*)macWOdots.c_str(), "CGG1"); + if (p->sensorModel == CGP1W) CLEARGRASSTRHKPADiscovery((char*)macWOdots.c_str(), "CGP1W"); + if (p->sensorModel == MUE4094RT) MiLampDiscovery((char*)macWOdots.c_str(), "MUE4094RT"); + if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery((char*)macWOdots.c_str(), "CGD1"); + if (p->sensorModel == MIBAND) MiBandDiscovery((char*)macWOdots.c_str(), "MIBAND"); if ((p->sensorModel == XMTZC04HM) || - (p->sensorModel == XMTZC05HM)) MiScaleDiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == INKBIRD) InkBirdDiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == LYWSD03MMC || p->sensorModel == LYWSD03MMC_ATC) LYWSD03MMCDiscovery((char*)macWOdots.c_str()); - if (p->sensorModel == MHO_C401) MHO_C401Discovery((char*)macWOdots.c_str()); - if (p->sensorModel == INODE_EM) INodeEMDiscovery((char*)macWOdots.c_str()); + (p->sensorModel == XMTZC05HM)) MiScaleDiscovery((char*)macWOdots.c_str(), "XMTZC0xHM"); + if (p->sensorModel == INKBIRD) InkBirdDiscovery((char*)macWOdots.c_str(), "INKBIRD"); + if (p->sensorModel == LYWSD03MMC || p->sensorModel == LYWSD03MMC_ATC) LYWSD03MMCDiscovery((char*)macWOdots.c_str(), "LYWSD03MMC"); + if (p->sensorModel == MHO_C401) MHO_C401Discovery((char*)macWOdots.c_str(), "MHO_C401"); + if (p->sensorModel == INODE_EM) INodeEMDiscovery((char*)macWOdots.c_str(), "INODE_EM"); createOrUpdateDevice(p->macAdr, device_flags_isDisc, p->sensorModel); } else { Log.trace(F("Device already discovered or UNKNOWN_MODEL" CR)); diff --git a/main/ZgatewayRF.ino b/main/ZgatewayRF.ino index fa15123b88..57367a7cf2 100644 --- a/main/ZgatewayRF.ino +++ b/main/ZgatewayRF.ino @@ -50,7 +50,8 @@ void RFtoMQTTdiscovery(SIGNAL_SIZE_UL_ULL MQTTvalue) { //on the fly switch creat subjectRFtoMQTT, switchRF[1], (char*)getUniqueId(switchRF[1], switchRF[2]).c_str(), will_Topic, switchRF[3], switchRF[4], switchRF[5], switchRF[6], switchRF[7], - 0, "", "", true, subjectMQTTtoRF); + 0, "", "", true, subjectMQTTtoRF, + "", "", "", ""); } # endif diff --git a/main/ZgatewayRF2.ino b/main/ZgatewayRF2.ino index cf56fa4cc1..6dccfd8cff 100644 --- a/main/ZgatewayRF2.ino +++ b/main/ZgatewayRF2.ino @@ -111,7 +111,8 @@ void RF2toMQTTdiscovery(JsonObject& data) { createDiscovery(switchRF[0], "", switchRF[1], (char*)getUniqueId(switchRF[1], "").c_str(), will_Topic, switchRF[3], switchRF[4], switchRF[5], switchRF[6], - switchRF[7], 0, "", "", true, subjectMQTTtoRF2); + switchRF[7], 0, "", "", true, subjectMQTTtoRF2, + "", "", "", ""); } # endif diff --git a/main/ZmqttDiscovery.ino b/main/ZmqttDiscovery.ino index a80c014c1f..36c88cdbac 100644 --- a/main/ZmqttDiscovery.ino +++ b/main/ZmqttDiscovery.ino @@ -48,7 +48,8 @@ String getUniqueId(String name, String sufix) { } # ifdef ZgatewayBT -void createDiscoveryFromList(char* mac, char* sensorList[][8], int sensorCount) { +void createDiscoveryFromList(char* mac, char* sensorList[][8], int sensorCount, + char* device_name, char* device_manufacturer, char* device_model) { for (int i = 0; i < sensorCount; i++) { Log.trace(F("CreateDiscoverySensor %s" CR), sensorList[i][1]); String discovery_topic = String(subjectBTtoMQTT) + "/" + String(mac); @@ -57,7 +58,8 @@ void createDiscoveryFromList(char* mac, char* sensorList[][8], int sensorCount) (char*)discovery_topic.c_str(), sensorList[i][1], (char*)unique_id.c_str(), will_Topic, sensorList[i][3], sensorList[i][4], sensorList[i][5], sensorList[i][6], sensorList[i][7], - 0, "", "", false, ""); + 0, "", "", false, "", + device_name, device_manufacturer, device_model, mac); } } # endif @@ -67,7 +69,8 @@ void createDiscovery(char* sensor_type, char* availability_topic, char* device_class, char* value_template, char* payload_on, char* payload_off, char* unit_of_meas, int off_delay, - char* payload_available, char* payload_not_avalaible, bool child_device, char* cmd_topic) { + char* payload_available, char* payload_not_avalaible, bool gateway_entity, char* cmd_topic, + char* device_name, char* device_manufacturer, char* device_model, char* device_mac) { const int JSON_MSG_CALC_BUFFER = JSON_OBJECT_SIZE(14) + JSON_OBJECT_SIZE(5) + JSON_ARRAY_SIZE(1); StaticJsonBuffer jsonBuffer; JsonObject& sensor = jsonBuffer.createObject(); @@ -82,7 +85,7 @@ void createDiscovery(char* sensor_type, char state_topic[mqtt_topic_max_size]; // If not an entity belonging to the gateway we put wild card for the location and gateway name // allowing to have the entity detected by several gateways and a consistent discovery topic among the gateways - child_device ? strcpy(state_topic, mqtt_topic) : strcpy(state_topic, "+/+"); + gateway_entity ? strcpy(state_topic, mqtt_topic) : strcpy(state_topic, "+/+"); strcat(state_topic, st_topic); sensor.set("stat_t", state_topic); } @@ -113,7 +116,7 @@ void createDiscovery(char* sensor_type, sensor.set("cmd_t", command_topic); //command_topic } - if (child_device) { + if (gateway_entity) { StaticJsonBuffer jsonDeviceBuffer; JsonObject& device = jsonDeviceBuffer.createObject(); char JSONmessageBuffer[JSON_MSG_BUFFER]; @@ -125,7 +128,32 @@ void createDiscovery(char* sensor_type, device.set("sw_version", OMG_VERSION); JsonArray& identifiers = device.createNestedArray("identifiers"); identifiers.add(getMacAddress()); - sensor.set("device", device); //device sensor is connected to + sensor.set("device", device); //device representing the board + } else { + char deviceid[13]; + memcpy(deviceid, &unique_id[0], 12); + deviceid[12] = '\0'; + StaticJsonBuffer jsonDeviceBuffer; + JsonObject& device = jsonDeviceBuffer.createObject(); + if (device_mac != "") { + JsonArray& connections = device.createNestedArray("connections"); + JsonArray& connection_mac = connections.createNestedArray(); + connection_mac.add("mac"); + connection_mac.add(device_mac); + } + JsonArray& identifiers = device.createNestedArray("identifiers"); + identifiers.add(deviceid); + if (device_manufacturer[0]) { + device.set("manufacturer", device_manufacturer); + } + if (device_model[0]) { + device.set("model", device_model); + } + if (device_name[0]) { + device.set("name", device_name); + } + device.set("via_device", gateway_name); //device name of the board + sensor.set("device", device); //device representing the actual sensor/switch device } String topic = String(discovery_Topic) + "/" + String(sensor_type) + "/" + String(unique_id) + "/config"; pub_custom_topic((char*)topic.c_str(), sensor, true); @@ -138,14 +166,16 @@ void pubMqttDiscovery() { will_Topic, "connectivity", "", //set availability_topic,device_class,value_template, Gateway_AnnouncementMsg, will_Message, "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - Gateway_AnnouncementMsg, will_Message, true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + Gateway_AnnouncementMsg, will_Message, true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: Uptime", (char*)getUniqueId("uptime", "").c_str(), //set state_topic,name,uniqueId "", "", "{{ value_json.uptime }}", //set availability_topic,device_class,value_template, "", "", "s", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); # if defined(ESP8266) || defined(ESP32) @@ -154,14 +184,16 @@ void pubMqttDiscovery() { "", "", "{{ value_json.freemem }}", //set availability_topic,device_class,value_template, "", "", "B", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: IP", (char*)getUniqueId("ip", "").c_str(), //set state_topic,name,uniqueId "", "", "{{ value_json.ip }}", //set availability_topic,device_class,value_template, "", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); # ifndef ESP32_ETHERNET createDiscovery("sensor", //set Type @@ -169,7 +201,8 @@ void pubMqttDiscovery() { "", "", "{{ value_json.rssi }}", //set availability_topic,device_class,value_template, "", "", "dB", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); # endif # endif @@ -179,7 +212,8 @@ void pubMqttDiscovery() { "", "", "{{ value_json.lowpowermode }}", //set availability_topic,device_class,value_template, "", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); # if defined(ZboardM5STICKC) || defined(ZboardM5STICKCP) createDiscovery("sensor", //set Type @@ -187,28 +221,32 @@ void pubMqttDiscovery() { "", "", "{{ value_json.m5batvoltage }}", //set availability_topic,device_class,value_template, "", "", "V", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: Bat current", (char*)getUniqueId("m5batcurrent", "").c_str(), //set state_topic,name,uniqueId "", "", "{{ value_json.m5batcurrent }}", //set availability_topic,device_class,value_template, "", "", "A", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: Vin voltage", (char*)getUniqueId("m5vinvoltage", "").c_str(), //set state_topic,name,uniqueId "", "", "{{ value_json.m5vinvoltage }}", //set availability_topic,device_class,value_template, "", "", "V", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: Vin current", (char*)getUniqueId("m5vincurrent", "").c_str(), //set state_topic,name,uniqueId "", "", "{{ value_json.m5vincurrent }}", //set availability_topic,device_class,value_template, "", "", "A", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); # endif # ifdef ZboardM5STACK @@ -217,21 +255,24 @@ void pubMqttDiscovery() { "", "", "{{ value_json.m5battlevel }}", //set availability_topic,device_class,value_template, "", "", "%", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("binary_sensor", //set Type subjectSYStoMQTT, "SYS: Is Charging", (char*)getUniqueId("m5ischarging", "").c_str(), //set state_topic,name,uniqueId "", "{{ value_json.m5ischarging }}", "", //set availability_topic,device_class,value_template, "", "", "%", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("binary_sensor", //set Type subjectSYStoMQTT, "SYS: Is Charge Full", (char*)getUniqueId("m5ischargefull", "").c_str(), //set state_topic,name,uniqueId "", "{{ value_json.m5ischargefull }}", "", //set availability_topic,device_class,value_template, "", "", "%", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); # endif # endif @@ -240,14 +281,16 @@ void pubMqttDiscovery() { will_Topic, "", "", //set availability_topic,device_class,value_template, "{\"cmd\":\"restart\"}", "", "", //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 child device, command topic + Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("switch", //set Type will_Topic, "SYS: Erase credentials", (char*)getUniqueId("erase", "").c_str(), //set state_topic,name,uniqueId will_Topic, "", "", //set availability_topic,device_class,value_template, "{\"cmd\":\"erase\"}", "", "", //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 child device, command topic + Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); # ifdef ZsensorBME280 @@ -269,7 +312,9 @@ void pubMqttDiscovery() { BMETOPIC, BMEsensor[i][1], (char*)getUniqueId(BMEsensor[i][1], BMEsensor[i][2]).c_str(), will_Topic, BMEsensor[i][3], BMEsensor[i][4], BMEsensor[i][5], BMEsensor[i][6], BMEsensor[i][7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); } # endif @@ -289,7 +334,9 @@ void pubMqttDiscovery() { HTUTOPIC, HTUsensor[i][1], (char*)getUniqueId(HTUsensor[i][1], HTUsensor[i][2]).c_str(), will_Topic, HTUsensor[i][3], HTUsensor[i][4], HTUsensor[i][5], HTUsensor[i][6], HTUsensor[i][7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); } # endif @@ -308,7 +355,9 @@ void pubMqttDiscovery() { AHTTOPIC, AHTsensor[i][1], (char*)getUniqueId(AHTsensor[i][1], AHTsensor[i][2]).c_str(), will_Topic, AHTsensor[i][3], AHTsensor[i][4], AHTsensor[i][5], AHTsensor[i][6], AHTsensor[i][7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); } # endif @@ -328,7 +377,9 @@ void pubMqttDiscovery() { DHTTOPIC, DHTsensor[i][1], (char*)getUniqueId(DHTsensor[i][1], DHTsensor[i][2]).c_str(), will_Topic, DHTsensor[i][3], DHTsensor[i][4], DHTsensor[i][5], DHTsensor[i][6], DHTsensor[i][7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); } # endif @@ -343,7 +394,9 @@ void pubMqttDiscovery() { ADCTOPIC, ADCsensor[1], (char*)getUniqueId(ADCsensor[1], ADCsensor[2]).c_str(), will_Topic, ADCsensor[3], ADCsensor[4], ADCsensor[5], ADCsensor[6], ADCsensor[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZsensorBH1750 @@ -363,7 +416,9 @@ void pubMqttDiscovery() { subjectBH1750toMQTT, BH1750sensor[i][1], (char*)getUniqueId(BH1750sensor[i][1], BH1750sensor[i][2]).c_str(), will_Topic, BH1750sensor[i][3], BH1750sensor[i][4], BH1750sensor[i][5], BH1750sensor[i][6], BH1750sensor[i][7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); } # endif @@ -384,7 +439,9 @@ void pubMqttDiscovery() { subjectTSL12561toMQTT, TSL2561sensor[i][1], (char*)getUniqueId(TSL2561sensor[i][1], TSL2561sensor[i][2]).c_str(), will_Topic, TSL2561sensor[i][3], TSL2561sensor[i][4], TSL2561sensor[i][5], TSL2561sensor[i][6], TSL2561sensor[i][7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); } # endif @@ -399,7 +456,9 @@ void pubMqttDiscovery() { subjectHCSR501toMQTT, HCSR501sensor[1], (char*)getUniqueId(HCSR501sensor[1], HCSR501sensor[2]).c_str(), will_Topic, HCSR501sensor[3], HCSR501sensor[4], HCSR501sensor[5], HCSR501sensor[6], HCSR501sensor[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZsensorGPIOInput @@ -413,7 +472,9 @@ void pubMqttDiscovery() { subjectGPIOInputtoMQTT, GPIOInputsensor[1], (char*)getUniqueId(GPIOInputsensor[1], GPIOInputsensor[2]).c_str(), will_Topic, GPIOInputsensor[3], GPIOInputsensor[4], GPIOInputsensor[5], GPIOInputsensor[6], GPIOInputsensor[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZsensorINA226 @@ -433,7 +494,9 @@ void pubMqttDiscovery() { subjectINA226toMQTT, INA226sensor[i][1], (char*)getUniqueId(INA226sensor[i][1], INA226sensor[i][2]).c_str(), will_Topic, INA226sensor[i][3], INA226sensor[i][4], INA226sensor[i][5], INA226sensor[i][6], INA226sensor[i][7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); } # endif @@ -453,7 +516,9 @@ void pubMqttDiscovery() { subjectGTWONOFFtoMQTT, actuatorONOFF[1], (char*)getUniqueId(actuatorONOFF[1], actuatorONOFF[2]).c_str(), will_Topic, actuatorONOFF[3], actuatorONOFF[4], actuatorONOFF[5], actuatorONOFF[6], actuatorONOFF[7], - 0, "", "", true, subjectMQTTtoONOFF); + 0, "", "", true, subjectMQTTtoONOFF, + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZgatewayRF @@ -468,7 +533,9 @@ void pubMqttDiscovery() { subjectRFtoMQTT, gatewayRF[1], (char*)getUniqueId(gatewayRF[1], gatewayRF[2]).c_str(), will_Topic, gatewayRF[3], gatewayRF[4], gatewayRF[5], gatewayRF[6], gatewayRF[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZgatewayRF2 @@ -483,7 +550,9 @@ void pubMqttDiscovery() { subjectRF2toMQTT, gatewayRF2[1], (char*)getUniqueId(gatewayRF2[1], gatewayRF2[2]).c_str(), will_Topic, gatewayRF2[3], gatewayRF2[4], gatewayRF2[5], gatewayRF2[6], gatewayRF2[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZgatewayRFM69 @@ -498,7 +567,9 @@ void pubMqttDiscovery() { subjectRFM69toMQTT, gatewayRFM69[1], (char*)getUniqueId(gatewayRFM69[1], gatewayRFM69[2]).c_str(), will_Topic, gatewayRFM69[3], gatewayRFM69[4], gatewayRFM69[5], gatewayRFM69[6], gatewayRFM69[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZgatewayLORA @@ -513,7 +584,9 @@ void pubMqttDiscovery() { subjectLORAtoMQTT, gatewayLORA[1], (char*)getUniqueId(gatewayLORA[1], gatewayLORA[2]).c_str(), will_Topic, gatewayLORA[3], gatewayLORA[4], gatewayLORA[5], gatewayLORA[6], gatewayLORA[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZgatewaySRFB @@ -528,7 +601,9 @@ void pubMqttDiscovery() { subjectSRFBtoMQTT, gatewaySRFB[1], (char*)getUniqueId(gatewaySRFB[1], gatewaySRFB[2]).c_str(), will_Topic, gatewaySRFB[3], gatewaySRFB[4], gatewaySRFB[5], gatewaySRFB[6], gatewaySRFB[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZgatewayPilight @@ -543,7 +618,9 @@ void pubMqttDiscovery() { subjectPilighttoMQTT, gatewayPilight[1], (char*)getUniqueId(gatewayPilight[1], gatewayPilight[2]).c_str(), will_Topic, gatewayPilight[3], gatewayPilight[4], gatewayPilight[5], gatewayPilight[6], gatewayPilight[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZgatewayIR @@ -558,7 +635,9 @@ void pubMqttDiscovery() { subjectIRtoMQTT, gatewayIR[1], (char*)getUniqueId(gatewayIR[1], gatewayIR[2]).c_str(), will_Topic, gatewayIR[3], gatewayIR[4], gatewayIR[5], gatewayIR[6], gatewayIR[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef Zgateway2G @@ -573,7 +652,9 @@ void pubMqttDiscovery() { subject2GtoMQTT, gateway2G[1], (char*)getUniqueId(gateway2G[1], gateway2G[2]).c_str(), will_Topic, gateway2G[3], gateway2G[4], gateway2G[5], gateway2G[6], gateway2G[7], - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", "" // device name, device manufacturer, device model, device mac + ); # endif # ifdef ZgatewayBT @@ -582,28 +663,32 @@ void pubMqttDiscovery() { "", "", "{{ value_json.interval }}", //set availability_topic,device_class,value_template, "", "", "ms", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "BT: Connnect every X scan(s)", (char*)getUniqueId("scanbcnct", "").c_str(), //set state_topic,name,uniqueId "", "", "{{ value_json.scanbcnct }}", //set availability_topic,device_class,value_template, "", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - "", "", true, "" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("switch", //set Type will_Topic, "BT: Force scan", (char*)getUniqueId("force_scan", "").c_str(), //set state_topic,name,uniqueId will_Topic, "", "", //set availability_topic,device_class,value_template, "{\"interval\":0}", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); createDiscovery("switch", //set Type "", "BT: Publish only sensors", (char*)getUniqueId("only_sensors", "").c_str(), //set state_topic,name,uniqueId "", "", "", //set availability_topic,device_class,value_template, "{\"onlysensors\":true}", "{\"onlysensors\":false}", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay - Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset //set,payload_avalaible,payload_not avalaible ,is a child device, command topic + Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic + "", "", "", "" // device name, device manufacturer, device model, device mac ); # endif } diff --git a/main/ZsensorDS1820.ino b/main/ZsensorDS1820.ino index d0c55b6957..2ceceecdb8 100644 --- a/main/ZsensorDS1820.ino +++ b/main/ZsensorDS1820.ino @@ -110,7 +110,8 @@ void pubOneWire_HADiscovery() { "temperature", jsonTempc, "", "", "°C", - 0, "", "", true, ""); + 0, "", "", true, "", + "", "", "", ""); } # endif } diff --git a/main/config_mqttDiscovery.h b/main/config_mqttDiscovery.h index 28dd25ff0f..4cc7e9f76f 100644 --- a/main/config_mqttDiscovery.h +++ b/main/config_mqttDiscovery.h @@ -29,13 +29,15 @@ extern String getUniqueId(String name, String sufix); extern void pubMqttDiscovery(); -extern void createDiscoveryFromList(char* mac, char* sensorList[][8], int sensorCount); +extern void createDiscoveryFromList(char* mac, char* sensorList[][8], int sensorCount, + char* device_name, char* device_manufacturer, char* device_model); extern void createDiscovery(char* sensor_type, char* state_topic, char* s_name, char* unique_id, char* availability_topic, char* device_class, char* value_template, char* payload_on, char* payload_off, char* unit_of_meas, int off_delay, - char* payload_available, char* payload_not_avalaible, bool child_device, char* command_topic); + char* payload_available, char* payload_not_avalaible, bool gateway_entity, char* command_topic, + char* device_name, char* device_manufacturer, char* device_model, char* device_mac); #define discovery_Topic "homeassistant"