Add support for iBeacons. (#1016)

This commit is contained in:
h2zero authored and GitHub committed 2021-07-11 19:50:06 -05:00
1 parent 4b135049a5
commit 45e9ba79d1
2 files changed
+22

No files matched your search

+21
View File
@@ -1363,6 +1363,14 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
createOrUpdateDevice(mac, device_flags_init, WS02);
return process_ws02(BLEdata);
}
Log.trace(F("Is it an iBeacon? %u" CR), strlen(manufacturerdata));
if (strlen(manufacturerdata) == 50 && strncmp(&manufacturerdata[0], "4c00", 4) == NULL) {
Log.trace(F("iBeacon data reading" CR));
BLEdata.set("model", "IBEACON");
if (device->sensorModel == -1)
createOrUpdateDevice(mac, device_flags_init, IBEACON);
return process_ibeacon(BLEdata);
}
# if !pubBLEManufacturerData
Log.trace(F("Remove manufacturer data" CR));
BLEdata.remove("manufacturerdata");
@@ -1731,6 +1739,19 @@ JsonObject& process_mokobeaconXPro(JsonObject& BLEdata) {
return BLEdata;
}
JsonObject& process_ibeacon(JsonObject& BLEdata) {
const char* manufacturerdata = BLEdata["manufacturerdata"].as<const char*>();
char mfid[5] = {NULL};
char proxUUID[33] = {NULL};
strncpy(&mfid[0], manufacturerdata, 4);
strncpy(&proxUUID[0], manufacturerdata + 8, 32);
BLEdata.set("MFID:", mfid);
BLEdata.set("UUID:", proxUUID);
BLEdata.set("Major:", (uint16_t)value_from_hex_data(manufacturerdata, 40, 4, false, false));
BLEdata.set("Minor:", (uint16_t)value_from_hex_data(manufacturerdata, 44, 4, false, false));
BLEdata.set("Power:", (int8_t)value_from_hex_data(manufacturerdata, 48, 4, false));
}
void hass_presence(JsonObject& HomePresence) {
int BLErssi = HomePresence["rssi"];
Log.trace(F("BLErssi %d" CR), BLErssi);
+1
View File
@@ -154,6 +154,7 @@ enum ble_sensor_model {
EDDYSTONE_TLM,
MOKOBEACON,
MOKOBEACONXPRO,
IBEACON,
GENERIC,
};