Add Eddystone TLM BLE protocol (#972)

supporting battery, temperature, count and time from start in s
This commit is contained in:
Florian authored and GitHub committed 2021-06-08 17:53:58 -05:00
1 parent db2d2712a4
commit 2737a4cbf7
4 files changed
+43

No files matched your search

+1
View File
@@ -44,6 +44,7 @@ OpenMQTTGateway is able to scan all the BLE devices that advertise their data so
| iNode Energy Meter (1)||power/energy/battery|
| Thermobeacon|WS02|temperature/humidity/volt|
| ATorch Battery Capacity Monitor|DT24|volt/amp/watt|
| Eddystone TLM|protocol|temperature/count/volt/time|
Exhaustive list [here](https://compatible.openmqttgateway.com/index.php/devices/ble-devices/)
+37
View File
@@ -565,6 +565,20 @@ void DT24Discovery(const char* mac, const char* sensorModel) {
createDiscoveryFromList(mac, DT24sensor, DT24parametersCount, "DT24", "ATorch", sensorModel);
}
void EddystoneTLMDiscovery(const char* mac, const char* sensorModel) {
# define EddystoneTLMparametersCount 4
Log.trace(F("EddystoneTLMDiscovery" CR));
const char* EddystoneTLMsensor[EddystoneTLMparametersCount][8] = {
{"sensor", "EddystoneTLM-volt", mac, "", jsonVolt, "", "", "V"},
{"sensor", "EddystoneTLM-temp", mac, "temperature", jsonTempc, "", "", "°C"},
{"sensor", "EddystoneTLM-count", mac, "", jsonCount, "", "", ""},
{"sensor", "EddystoneTLM-time", mac, "", jsonTime, "", "", ""}
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
};
createDiscoveryFromList(mac, EddystoneTLMsensor, EddystoneTLMparametersCount, "EddystoneTLM", "SensorBlue", sensorModel);
}
# else
void MiFloraDiscovery(const char* mac, const char* sensorModel) {}
void VegTrugDiscovery(const char* mac, const char* sensorModel) {}
@@ -588,6 +602,7 @@ void MHO_C401Discovery(const char* mac, const char* sensorModel) {}
void INodeEMDiscovery(const char* mac, const char* sensorModel) {}
void WS02Discovery(const char* mac, const char* sensorModel) {}
void DT24Discovery(const char* mac, const char* sensorModel) {}
void EddystoneTLMDiscovery(const char* mac, const char* sensorModel) {}
# endif
# ifdef ESP32
@@ -1146,6 +1161,7 @@ void launchBTDiscovery() {
if (p->sensorModel == CGH1) CLEARGRASSCGH1Discovery(macWOdots.c_str(), "CGH1");
if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery(macWOdots.c_str(), "CGD1");
if (p->sensorModel == WS02) WS02Discovery(macWOdots.c_str(), "WS02");
if (p->sensorModel == EDDYSTONE_TLM) EddystoneTLMDiscovery(macWOdots.c_str(), "EDDYSTONE_TLM");
if (p->sensorModel == MIBAND) MiBandDiscovery(macWOdots.c_str(), "MIBAND");
if ((p->sensorModel == XMTZC04HM) ||
(p->sensorModel == XMTZC05HM)) MiScaleDiscovery(macWOdots.c_str(), "XMTZC0xHM");
@@ -1349,6 +1365,15 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
createOrUpdateDevice(mac, device_flags_init, XMTZC05HM);
return process_scale_v2(BLEdata);
}
// || strstr(service_datauuid, "0x2080") != NULL
Log.trace(F("Is it an EddystoneTLM?" CR));
if (strncmp(&service_data[0], "20", 2) == 0 && strstr(service_datauuid, "0xfeaa") != NULL) {
Log.trace(F("Eddystone TLM" CR));
BLEdata.set("model", "EDDYSTONE_TLM");
if (device->sensorModel == -1)
createOrUpdateDevice(mac, device_flags_init, EDDYSTONE_TLM);
return process_eddystonetlm(BLEdata);
}
}
} else {
Log.trace(F("Non valid service data, removing it" CR));
@@ -1521,6 +1546,18 @@ JsonObject& process_scale_v2(JsonObject& BLEdata) {
return BLEdata;
}
JsonObject& process_eddystonetlm(JsonObject& BLEdata) {
const char* servicedata = BLEdata["servicedata"].as<const char*>();
BLEdata.set("volt", (float)value_from_hex_data(servicedata, 4, 4, false) / 1000);
BLEdata.set("tempc", (float)value_from_hex_data(servicedata, 8, 2, false));
BLEdata.set("tempf", (float)convertTemp_CtoF(value_from_hex_data(servicedata, 8, 2, false)));
BLEdata.set("count", value_from_hex_data(servicedata, 12, 8, false));
BLEdata.set("time", value_from_hex_data(servicedata, 20, 8, false) / 100);
return BLEdata;
}
JsonObject& process_inkbird_th1(JsonObject& BLEdata) {
const char* manufacturerdata = BLEdata["manufacturerdata"].as<const char*>();
+1
View File
@@ -144,6 +144,7 @@ enum ble_sensor_model {
IBSTH2,
IBT4XS,
DT24,
EDDYSTONE_TLM,
};
/*-------------------PIN DEFINITIONS----------------------*/
+4
View File
@@ -79,6 +79,8 @@ extern void createDiscovery(const char* sensor_type,
# define jsonId "{{ value_json.id }}"
# define jsonAddress "{{ value_json.address }}"
# define jsonOpen "{{ value_json.open }}"
# define jsonTime "{{ value_json.time }}"
# define jsonCount "{{ value_json.count }}"
#else // Home assistant autodiscovery value key definition
# define jsonBatt "{{ value_json.batt | is_defined }}"
# define jsonLux "{{ value_json.lux | is_defined }}"
@@ -111,6 +113,8 @@ extern void createDiscovery(const char* sensor_type,
# define jsonId "{{ value_json.id | is_defined }}"
# define jsonAddress "{{ value_json.address | is_defined }}"
# define jsonOpen "{{ value_json.open | is_defined }}"
# define jsonTime "{{ value_json.time | is_defined }}"
# define jsonCount "{{ value_json.count | is_defined }}"
#endif
#endif