Skip to content

Commit 0c01ded

Browse files
authored
HASS Discovery - Create BLE devices automatically to gather entities (#826)
Create automatically devices into Home Assistant through MQTT auto discovery Before, only entities were created automaticaly and they were not linked to a device.
1 parent a83f725 commit 0c01ded

File tree

6 files changed

+200
-109
lines changed

6 files changed

+200
-109
lines changed

main/ZgatewayBT.ino

Lines changed: 61 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ void strupp(char* beg) {
185185
}
186186

187187
# ifdef ZmqttDiscovery
188-
void MiFloraDiscovery(char* mac) {
188+
void MiFloraDiscovery(char* mac, char* sensorModel) {
189189
# define MiFloraparametersCount 4
190190
Log.trace(F("MiFloraDiscovery" CR));
191191
char* MiFlorasensor[MiFloraparametersCount][8] = {
@@ -196,10 +196,10 @@ void MiFloraDiscovery(char* mac) {
196196
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
197197
};
198198

199-
createDiscoveryFromList(mac, MiFlorasensor, MiFloraparametersCount);
199+
createDiscoveryFromList(mac, MiFlorasensor, MiFloraparametersCount, "Mi-Flora", "Xiaomi", sensorModel);
200200
}
201201

202-
void VegTrugDiscovery(char* mac) {
202+
void VegTrugDiscovery(char* mac, char* sensorModel) {
203203
# define VegTrugparametersCount 4
204204
Log.trace(F("VegTrugDiscovery" CR));
205205
char* VegTrugsensor[VegTrugparametersCount][8] = {
@@ -210,10 +210,10 @@ void VegTrugDiscovery(char* mac) {
210210
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
211211
};
212212

213-
createDiscoveryFromList(mac, VegTrugsensor, VegTrugparametersCount);
213+
createDiscoveryFromList(mac, VegTrugsensor, VegTrugparametersCount, "VegTrug", "VEGTRUG", sensorModel);
214214
}
215215

216-
void MiJiaDiscovery(char* mac) {
216+
void MiJiaDiscovery(char* mac, char* sensorModel) {
217217
# define MiJiaparametersCount 3
218218
Log.trace(F("MiJiaDiscovery" CR));
219219
char* MiJiasensor[MiJiaparametersCount][8] = {
@@ -223,10 +223,10 @@ void MiJiaDiscovery(char* mac) {
223223
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
224224
};
225225

226-
createDiscoveryFromList(mac, MiJiasensor, MiJiaparametersCount);
226+
createDiscoveryFromList(mac, MiJiasensor, MiJiaparametersCount, "MiJia", "", sensorModel);
227227
}
228228

229-
void FormalDiscovery(char* mac) {
229+
void FormalDiscovery(char* mac, char* sensorModel) {
230230
# define FormalparametersCount 4
231231
Log.trace(F("FormalDiscovery" CR));
232232
char* Formalsensor[FormalparametersCount][8] = {
@@ -237,10 +237,10 @@ void FormalDiscovery(char* mac) {
237237
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
238238
};
239239

240-
createDiscoveryFromList(mac, Formalsensor, FormalparametersCount);
240+
createDiscoveryFromList(mac, Formalsensor, FormalparametersCount, "Formal", "", sensorModel);
241241
}
242242

243-
void LYWSD02Discovery(char* mac) {
243+
void LYWSD02Discovery(char* mac, char* sensorModel) {
244244
# define LYWSD02parametersCount 3
245245
Log.trace(F("LYWSD02Discovery" CR));
246246
char* LYWSD02sensor[LYWSD02parametersCount][8] = {
@@ -250,10 +250,10 @@ void LYWSD02Discovery(char* mac) {
250250
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
251251
};
252252

253-
createDiscoveryFromList(mac, LYWSD02sensor, LYWSD02parametersCount);
253+
createDiscoveryFromList(mac, LYWSD02sensor, LYWSD02parametersCount, "LYWSD02", "Xiaomi", sensorModel);
254254
}
255255

256-
void CLEARGRASSTRHDiscovery(char* mac) {
256+
void CLEARGRASSTRHDiscovery(char* mac, char* sensorModel) {
257257
# define CLEARGRASSTRHparametersCount 3
258258
Log.trace(F("CLEARGRASSTRHDiscovery" CR));
259259
char* CLEARGRASSTRHsensor[CLEARGRASSTRHparametersCount][8] = {
@@ -263,10 +263,10 @@ void CLEARGRASSTRHDiscovery(char* mac) {
263263
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
264264
};
265265

266-
createDiscoveryFromList(mac, CLEARGRASSTRHsensor, CLEARGRASSTRHparametersCount);
266+
createDiscoveryFromList(mac, CLEARGRASSTRHsensor, CLEARGRASSTRHparametersCount, "CLEARGRASSTRH", "ClearGrass", sensorModel);
267267
}
268268

269-
void CLEARGRASSCGD1Discovery(char* mac) {
269+
void CLEARGRASSCGD1Discovery(char* mac, char* sensorModel) {
270270
# define CLEARGRASSCGD1parametersCount 3
271271
Log.trace(F("CLEARGRASSCGD1Discovery" CR));
272272
char* CLEARGRASSCGD1sensor[CLEARGRASSCGD1parametersCount][8] = {
@@ -276,10 +276,10 @@ void CLEARGRASSCGD1Discovery(char* mac) {
276276
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
277277
};
278278

279-
createDiscoveryFromList(mac, CLEARGRASSCGD1sensor, CLEARGRASSCGD1parametersCount);
279+
createDiscoveryFromList(mac, CLEARGRASSCGD1sensor, CLEARGRASSCGD1parametersCount, "CLEARGRASSCGD1", "ClearGrass", sensorModel);
280280
}
281281

282-
void CLEARGRASSTRHKPADiscovery(char* mac) {
282+
void CLEARGRASSTRHKPADiscovery(char* mac, char* sensorModel) {
283283
# define CLEARGRASSTRHKPAparametersCount 3
284284
Log.trace(F("CLEARGRASSTRHKPADiscovery" CR));
285285
char* CLEARGRASSTRHKPAsensor[CLEARGRASSTRHKPAparametersCount][8] = {
@@ -289,43 +289,44 @@ void CLEARGRASSTRHKPADiscovery(char* mac) {
289289
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
290290
};
291291

292-
createDiscoveryFromList(mac, CLEARGRASSTRHKPAsensor, CLEARGRASSTRHKPAparametersCount);
292+
Log.trace(F("CLEARGRASSTRHKPADiscovery %s" CR), sensorModel);
293+
createDiscoveryFromList(mac, CLEARGRASSTRHKPAsensor, CLEARGRASSTRHKPAparametersCount, "CLEARGRASSTRHKPA", "ClearGrass", sensorModel);
293294
}
294295

295-
void MiScaleDiscovery(char* mac) {
296+
void MiScaleDiscovery(char* mac, char* sensorModel) {
296297
# define MiScaleparametersCount 1
297298
Log.trace(F("MiScaleDiscovery" CR));
298299
char* MiScalesensor[MiScaleparametersCount][8] = {
299300
{"sensor", "MiScale-weight", mac, "", jsonWeight, "", "", "kg"},
300301
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
301302
};
302303

303-
createDiscoveryFromList(mac, MiScalesensor, MiScaleparametersCount);
304+
createDiscoveryFromList(mac, MiScalesensor, MiScaleparametersCount, "MiScale", "Xiaomi", sensorModel);
304305
}
305306

306-
void MiLampDiscovery(char* mac) {
307+
void MiLampDiscovery(char* mac, char* sensorModel) {
307308
# define MiLampparametersCount 1
308309
Log.trace(F("MiLampDiscovery" CR));
309310
char* MiLampsensor[MiLampparametersCount][8] = {
310311
{"sensor", "MiLamp-presence", mac, "", jsonPresence, "", "", "d"},
311312
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
312313
};
313314

314-
createDiscoveryFromList(mac, MiLampsensor, MiLampparametersCount);
315+
createDiscoveryFromList(mac, MiLampsensor, MiLampparametersCount, "MiLamp", "Xiaomi", sensorModel);
315316
}
316317

317-
void MiBandDiscovery(char* mac) {
318+
void MiBandDiscovery(char* mac, char* sensorModel) {
318319
# define MiBandparametersCount 1
319320
Log.trace(F("MiBandDiscovery" CR));
320321
char* MiBandsensor[MiBandparametersCount][8] = {
321322
{"sensor", "MiBand-steps", mac, "", jsonStep, "", "", "nb"},
322323
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
323324
};
324325

325-
createDiscoveryFromList(mac, MiBandsensor, MiBandparametersCount);
326+
createDiscoveryFromList(mac, MiBandsensor, MiBandparametersCount, "MiBand", "Xiaomi", sensorModel);
326327
}
327328

328-
void InkBirdDiscovery(char* mac) {
329+
void InkBirdDiscovery(char* mac, char* sensorModel) {
329330
# define InkBirdparametersCount 3
330331
Log.trace(F("InkBirdDiscovery" CR));
331332
char* InkBirdsensor[InkBirdparametersCount][8] = {
@@ -335,10 +336,10 @@ void InkBirdDiscovery(char* mac) {
335336
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
336337
};
337338

338-
createDiscoveryFromList(mac, InkBirdsensor, InkBirdparametersCount);
339+
createDiscoveryFromList(mac, InkBirdsensor, InkBirdparametersCount, "", "InkBird", sensorModel);
339340
}
340341

341-
void LYWSD03MMCDiscovery(char* mac) {
342+
void LYWSD03MMCDiscovery(char* mac, char* sensorModel) {
342343
# define LYWSD03MMCparametersCount 4
343344
Log.trace(F("LYWSD03MMCDiscovery" CR));
344345
char* LYWSD03MMCsensor[LYWSD03MMCparametersCount][8] = {
@@ -349,10 +350,10 @@ void LYWSD03MMCDiscovery(char* mac) {
349350
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
350351
};
351352

352-
createDiscoveryFromList(mac, LYWSD03MMCsensor, LYWSD03MMCparametersCount);
353+
createDiscoveryFromList(mac, LYWSD03MMCsensor, LYWSD03MMCparametersCount, "LYWSD03MMC", "Xiaomi", sensorModel);
353354
}
354355

355-
void MHO_C401Discovery(char* mac) {
356+
void MHO_C401Discovery(char* mac, char* sensorModel) {
356357
# define MHO_C401parametersCount 4
357358
Log.trace(F("MHO_C401Discovery" CR));
358359
char* MHO_C401sensor[MHO_C401parametersCount][8] = {
@@ -363,10 +364,10 @@ void MHO_C401Discovery(char* mac) {
363364
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
364365
};
365366

366-
createDiscoveryFromList(mac, MHO_C401sensor, MHO_C401parametersCount);
367+
createDiscoveryFromList(mac, MHO_C401sensor, MHO_C401parametersCount, "MHO_C401", "Xiaomi", sensorModel);
367368
}
368369

369-
void INodeEMDiscovery(char* mac) {
370+
void INodeEMDiscovery(char* mac, char* sensorModel) {
370371
# define INodeEMparametersCount 3
371372
Log.trace(F("INodeEMDiscovery" CR));
372373
char* INodeEMsensor[INodeEMparametersCount][8] = {
@@ -376,25 +377,25 @@ void INodeEMDiscovery(char* mac) {
376377
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
377378
};
378379

379-
createDiscoveryFromList(mac, INodeEMsensor, INodeEMparametersCount);
380+
createDiscoveryFromList(mac, INodeEMsensor, INodeEMparametersCount, "INode-Energy-Meter", "INode", sensorModel);
380381
}
381382

382383
# else
383-
void MiFloraDiscovery(char* mac) {}
384-
void VegTrugDiscovery(char* mac) {}
385-
void MiJiaDiscovery(char* mac) {}
386-
void FormalDiscovery(char* mac) {}
387-
void LYWSD02Discovery(char* mac) {}
388-
void CLEARGRASSTRHDiscovery(char* mac) {}
389-
void CLEARGRASSCGD1Discovery(char* mac) {}
390-
void CLEARGRASSTRHKPADiscovery(char* mac) {}
391-
void MiScaleDiscovery(char* mac) {}
392-
void MiLampDiscovery(char* mac) {}
393-
void MiBandDiscovery(char* mac) {}
394-
void InkBirdDiscovery(char* mac) {}
395-
void LYWSD03MMCDiscovery(char* mac) {}
396-
void MHO_C401Discovery(char* mac) {}
397-
void INodeEMDiscovery(char* mac) {}
384+
void MiFloraDiscovery(char* mac, char* sensorModel) {}
385+
void VegTrugDiscovery(char* mac, char* sensorModel) {}
386+
void MiJiaDiscovery(char* mac, char* sensorModel) {}
387+
void FormalDiscovery(char* mac, char* sensorModel) {}
388+
void LYWSD02Discovery(char* mac, char* sensorModel) {}
389+
void CLEARGRASSTRHDiscovery(char* mac, char* sensorModel) {}
390+
void CLEARGRASSCGD1Discovery(char* mac, char* sensorModel) {}
391+
void CLEARGRASSTRHKPADiscovery(char* mac, char* sensorModel) {}
392+
void MiScaleDiscovery(char* mac, char* sensorModel) {}
393+
void MiLampDiscovery(char* mac, char* sensorModel) {}
394+
void MiBandDiscovery(char* mac, char* sensorModel) {}
395+
void InkBirdDiscovery(char* mac, char* sensorModel) {}
396+
void LYWSD03MMCDiscovery(char* mac, char* sensorModel) {}
397+
void MHO_C401Discovery(char* mac, char* sensorModel) {}
398+
void INodeEMDiscovery(char* mac, char* sensorModel) {}
398399
# endif
399400

400401
# ifdef ESP32
@@ -834,22 +835,22 @@ void launchDiscovery() {
834835
String macWOdots = String(p->macAdr);
835836
macWOdots.replace(":", "");
836837
Log.trace(F("Launching discovery of %s" CR), p->macAdr);
837-
if (p->sensorModel == HHCCJCY01HHCC) MiFloraDiscovery((char*)macWOdots.c_str());
838-
if (p->sensorModel == VEGTRUG) VegTrugDiscovery((char*)macWOdots.c_str());
839-
if (p->sensorModel == LYWSDCGQ) MiJiaDiscovery((char*)macWOdots.c_str());
840-
if (p->sensorModel == JQJCY01YM) FormalDiscovery((char*)macWOdots.c_str());
841-
if (p->sensorModel == LYWSD02) LYWSD02Discovery((char*)macWOdots.c_str());
842-
if (p->sensorModel == CGG1) CLEARGRASSTRHDiscovery((char*)macWOdots.c_str());
843-
if (p->sensorModel == CGP1W) CLEARGRASSTRHKPADiscovery((char*)macWOdots.c_str());
844-
if (p->sensorModel == MUE4094RT) MiLampDiscovery((char*)macWOdots.c_str());
845-
if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery((char*)macWOdots.c_str());
846-
if (p->sensorModel == MIBAND) MiBandDiscovery((char*)macWOdots.c_str());
838+
if (p->sensorModel == HHCCJCY01HHCC) MiFloraDiscovery((char*)macWOdots.c_str(), "HHCCJCY01HHCC");
839+
if (p->sensorModel == VEGTRUG) VegTrugDiscovery((char*)macWOdots.c_str(), "VEGTRUG");
840+
if (p->sensorModel == LYWSDCGQ) MiJiaDiscovery((char*)macWOdots.c_str(), "LYWSDCGQ");
841+
if (p->sensorModel == JQJCY01YM) FormalDiscovery((char*)macWOdots.c_str(), "JQJCY01YM");
842+
if (p->sensorModel == LYWSD02) LYWSD02Discovery((char*)macWOdots.c_str(), "LYWSD02");
843+
if (p->sensorModel == CGG1) CLEARGRASSTRHDiscovery((char*)macWOdots.c_str(), "CGG1");
844+
if (p->sensorModel == CGP1W) CLEARGRASSTRHKPADiscovery((char*)macWOdots.c_str(), "CGP1W");
845+
if (p->sensorModel == MUE4094RT) MiLampDiscovery((char*)macWOdots.c_str(), "MUE4094RT");
846+
if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery((char*)macWOdots.c_str(), "CGD1");
847+
if (p->sensorModel == MIBAND) MiBandDiscovery((char*)macWOdots.c_str(), "MIBAND");
847848
if ((p->sensorModel == XMTZC04HM) ||
848-
(p->sensorModel == XMTZC05HM)) MiScaleDiscovery((char*)macWOdots.c_str());
849-
if (p->sensorModel == INKBIRD) InkBirdDiscovery((char*)macWOdots.c_str());
850-
if (p->sensorModel == LYWSD03MMC || p->sensorModel == LYWSD03MMC_ATC) LYWSD03MMCDiscovery((char*)macWOdots.c_str());
851-
if (p->sensorModel == MHO_C401) MHO_C401Discovery((char*)macWOdots.c_str());
852-
if (p->sensorModel == INODE_EM) INodeEMDiscovery((char*)macWOdots.c_str());
849+
(p->sensorModel == XMTZC05HM)) MiScaleDiscovery((char*)macWOdots.c_str(), "XMTZC0xHM");
850+
if (p->sensorModel == INKBIRD) InkBirdDiscovery((char*)macWOdots.c_str(), "INKBIRD");
851+
if (p->sensorModel == LYWSD03MMC || p->sensorModel == LYWSD03MMC_ATC) LYWSD03MMCDiscovery((char*)macWOdots.c_str(), "LYWSD03MMC");
852+
if (p->sensorModel == MHO_C401) MHO_C401Discovery((char*)macWOdots.c_str(), "MHO_C401");
853+
if (p->sensorModel == INODE_EM) INodeEMDiscovery((char*)macWOdots.c_str(), "INODE_EM");
853854
createOrUpdateDevice(p->macAdr, device_flags_isDisc, p->sensorModel);
854855
} else {
855856
Log.trace(F("Device already discovered or UNKNOWN_MODEL" CR));

main/ZgatewayRF.ino

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ void RFtoMQTTdiscovery(SIGNAL_SIZE_UL_ULL MQTTvalue) { //on the fly switch creat
5050
subjectRFtoMQTT, switchRF[1], (char*)getUniqueId(switchRF[1], switchRF[2]).c_str(),
5151
will_Topic, switchRF[3], switchRF[4],
5252
switchRF[5], switchRF[6], switchRF[7],
53-
0, "", "", true, subjectMQTTtoRF);
53+
0, "", "", true, subjectMQTTtoRF,
54+
"", "", "", "");
5455
}
5556
# endif
5657

main/ZgatewayRF2.ino

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ void RF2toMQTTdiscovery(JsonObject& data) {
111111
createDiscovery(switchRF[0], "", switchRF[1],
112112
(char*)getUniqueId(switchRF[1], "").c_str(), will_Topic,
113113
switchRF[3], switchRF[4], switchRF[5], switchRF[6],
114-
switchRF[7], 0, "", "", true, subjectMQTTtoRF2);
114+
switchRF[7], 0, "", "", true, subjectMQTTtoRF2,
115+
"", "", "", "");
115116
}
116117
# endif
117118

0 commit comments

Comments
 (0)