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|
|
| iNode Energy Meter (1)||power/energy/battery|
|
||||||
| Thermobeacon|WS02|temperature/humidity/volt|
|
| Thermobeacon|WS02|temperature/humidity/volt|
|
||||||
| ATorch Battery Capacity Monitor|DT24|volt/amp/watt|
|
| 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/)
|
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);
|
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
|
# else
|
||||||
void MiFloraDiscovery(const char* mac, const char* sensorModel) {}
|
void MiFloraDiscovery(const char* mac, const char* sensorModel) {}
|
||||||
void VegTrugDiscovery(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 INodeEMDiscovery(const char* mac, const char* sensorModel) {}
|
||||||
void WS02Discovery(const char* mac, const char* sensorModel) {}
|
void WS02Discovery(const char* mac, const char* sensorModel) {}
|
||||||
void DT24Discovery(const char* mac, const char* sensorModel) {}
|
void DT24Discovery(const char* mac, const char* sensorModel) {}
|
||||||
|
void EddystoneTLMDiscovery(const char* mac, const char* sensorModel) {}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef ESP32
|
# ifdef ESP32
|
||||||
@@ -1146,6 +1161,7 @@ void launchBTDiscovery() {
|
|||||||
if (p->sensorModel == CGH1) CLEARGRASSCGH1Discovery(macWOdots.c_str(), "CGH1");
|
if (p->sensorModel == CGH1) CLEARGRASSCGH1Discovery(macWOdots.c_str(), "CGH1");
|
||||||
if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery(macWOdots.c_str(), "CGD1");
|
if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery(macWOdots.c_str(), "CGD1");
|
||||||
if (p->sensorModel == WS02) WS02Discovery(macWOdots.c_str(), "WS02");
|
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 == MIBAND) MiBandDiscovery(macWOdots.c_str(), "MIBAND");
|
||||||
if ((p->sensorModel == XMTZC04HM) ||
|
if ((p->sensorModel == XMTZC04HM) ||
|
||||||
(p->sensorModel == XMTZC05HM)) MiScaleDiscovery(macWOdots.c_str(), "XMTZC0xHM");
|
(p->sensorModel == XMTZC05HM)) MiScaleDiscovery(macWOdots.c_str(), "XMTZC0xHM");
|
||||||
@@ -1349,6 +1365,15 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
|
|||||||
createOrUpdateDevice(mac, device_flags_init, XMTZC05HM);
|
createOrUpdateDevice(mac, device_flags_init, XMTZC05HM);
|
||||||
return process_scale_v2(BLEdata);
|
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 {
|
} else {
|
||||||
Log.trace(F("Non valid service data, removing it" CR));
|
Log.trace(F("Non valid service data, removing it" CR));
|
||||||
@@ -1521,6 +1546,18 @@ JsonObject& process_scale_v2(JsonObject& BLEdata) {
|
|||||||
return 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) {
|
JsonObject& process_inkbird_th1(JsonObject& BLEdata) {
|
||||||
const char* manufacturerdata = BLEdata["manufacturerdata"].as<const char*>();
|
const char* manufacturerdata = BLEdata["manufacturerdata"].as<const char*>();
|
||||||
|
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ enum ble_sensor_model {
|
|||||||
IBSTH2,
|
IBSTH2,
|
||||||
IBT4XS,
|
IBT4XS,
|
||||||
DT24,
|
DT24,
|
||||||
|
EDDYSTONE_TLM,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*-------------------PIN DEFINITIONS----------------------*/
|
/*-------------------PIN DEFINITIONS----------------------*/
|
||||||
|
|||||||
@@ -79,6 +79,8 @@ extern void createDiscovery(const char* sensor_type,
|
|||||||
# define jsonId "{{ value_json.id }}"
|
# define jsonId "{{ value_json.id }}"
|
||||||
# define jsonAddress "{{ value_json.address }}"
|
# define jsonAddress "{{ value_json.address }}"
|
||||||
# define jsonOpen "{{ value_json.open }}"
|
# define jsonOpen "{{ value_json.open }}"
|
||||||
|
# define jsonTime "{{ value_json.time }}"
|
||||||
|
# define jsonCount "{{ value_json.count }}"
|
||||||
#else // Home assistant autodiscovery value key definition
|
#else // Home assistant autodiscovery value key definition
|
||||||
# define jsonBatt "{{ value_json.batt | is_defined }}"
|
# define jsonBatt "{{ value_json.batt | is_defined }}"
|
||||||
# define jsonLux "{{ value_json.lux | 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 jsonId "{{ value_json.id | is_defined }}"
|
||||||
# define jsonAddress "{{ value_json.address | is_defined }}"
|
# define jsonAddress "{{ value_json.address | is_defined }}"
|
||||||
# define jsonOpen "{{ value_json.open | 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
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
Reference in new issue
Block a user