Add Eddystone TLM BLE protocol (#972)
supporting battery, temperature, count and time from start in s
This commit is contained in:
1 parent
db2d2712a4
commit
2737a4cbf7
4 files changed
+43
No files matched your search
@@ -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/)
|
||||
|
||||
|
||||
@@ -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*>();
|
||||
|
||||
|
||||
@@ -144,6 +144,7 @@ enum ble_sensor_model {
|
||||
IBSTH2,
|
||||
IBT4XS,
|
||||
DT24,
|
||||
EDDYSTONE_TLM,
|
||||
};
|
||||
|
||||
/*-------------------PIN DEFINITIONS----------------------*/
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user