Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support of INKBIRD IBS-TH1 #644

Merged
merged 1 commit into from
Jul 3, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/prerequisites/devices.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ OpenMQTTGateway is able to scan all the BLE devices that advertise their data so
| XIAOMI Mi Flora |HHCCJCY01HHCC|temperature/moisture/luminance/fertility|
| XIAOMI Mi Jia |LYWSDCGO|temperature/humidity/battery|
| XIAOMI Mi Lamp |MUE4094RT|presence|
| INKBIRD |IBS-TH1|temperature/humidity/battery|
| ClearGrass |CGG1|temperature/humidity/battery|
| ClearGrass alarm clock|CGD1|temperature/humidity|
| ClearGrass with atmospheric pressure |CGP1W|temperature/humidity/air pressure|
Expand Down
59 changes: 54 additions & 5 deletions main/ZgatewayBT.ino
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,21 @@ void MiBandDiscovery(char* mac) {
createDiscoveryFromList(mac, MiBandsensor, MiBandparametersCount);
createOrUpdateDevice(mac, device_flags_isDisc);
}

void InkBirdDiscovery(char* mac) {
# define InkBirdparametersCount 3
Log.trace(F("InkBirdDiscovery" CR));
char* InkBirdsensor[InkBirdparametersCount][8] = {
{"sensor", "InkBird-batt", mac, "battery", jsonBatt, "", "", "%"},
{"sensor", "InkBird-tem", mac, "temperature", jsonTemp, "", "", "°C"},
{"sensor", "InkBird-hum", mac, "humidity", jsonHum, "", "", "%"}
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
};

createDiscoveryFromList(mac, InkBirdsensor, InkBirdparametersCount);
createOrUpdateDevice(mac, device_flags_isDisc);
}

# else
void MiFloraDiscovery(char* mac) {}
void VegTrugDiscovery(char* mac) {}
Expand All @@ -280,6 +295,7 @@ void CLEARGRASSTRHKPADiscovery(char* mac) {}
void MiScaleDiscovery(char* mac) {}
void MiLampDiscovery(char* mac) {}
void MiBandDiscovery(char* mac) {}
void InkBirdDiscovery(char* mac) {}
# endif

# ifdef ESP32
Expand Down Expand Up @@ -320,13 +336,11 @@ class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {
if ((!oneWhite || isWhite(device)) && !isBlack(device)) { //if not black listed mac we go AND if we have no white mac or this mac is white we go out
if (advertisedDevice.haveName())
BLEdata.set("name", (char*)advertisedDevice.getName().c_str());
# if pubBLEManufacturerData
if (advertisedDevice.haveManufacturerData()) {
char* manufacturerdata = BLEUtils::buildHexData(NULL, (uint8_t*)advertisedDevice.getManufacturerData().data(), advertisedDevice.getManufacturerData().length());
Log.trace(F("Manufacturer Data: %s" CR), manufacturerdata);
BLEdata.set("manufacturerdata", manufacturerdata);
}
# endif
if (advertisedDevice.haveRSSI())
BLEdata.set("rssi", (int)advertisedDevice.getRSSI());
if (advertisedDevice.haveTXPower())
Expand Down Expand Up @@ -378,8 +392,8 @@ void BLEscan() {
MyAdvertisedDeviceCallbacks myCallbacks;
pBLEScan->setAdvertisedDeviceCallbacks(&myCallbacks);
pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
BLEScanResults foundDevices = pBLEScan->start(Scan_duration);
Log.notice(F("Scan end, deinit controller" CR));
BLEScanResults foundDevices = pBLEScan->start(Scan_duration, false);
Log.notice(F("Found %d devices, scan end deinit controller" CR), foundDevices.getCount());
esp_bt_controller_deinit();
}

Expand Down Expand Up @@ -645,6 +659,7 @@ void launch_discovery(JsonObject& BLEdata, char* mac) {
if (strcmp(BLEdata["model"].as<const char*>(), "MiBand") == 0) MiBandDiscovery(mac);
if (strcmp(BLEdata["model"].as<const char*>(), "XMTZC04HM") == 0 ||
strcmp(BLEdata["model"].as<const char*>(), "XMTZC05HM") == 0) MiScaleDiscovery(mac);
if (strcmp(BLEdata["model"].as<const char*>(), "INKBIRD") == 0) InkBirdDiscovery(mac);
} else {
Log.trace(F("Device already discovered or model not detected" CR));
}
Expand Down Expand Up @@ -764,7 +779,6 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
if (strstr(service_datauuid, "181b") != NULL) {
Log.trace(F("XMTZC05HM data reading" CR));
BLEdata.set("model", "XMTZC05HM");
;

return process_scale_v2(BLEdata);
}
Expand All @@ -780,6 +794,26 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
# endif
}

if (BLEdata.containsKey("manufacturerdata")) {
const char* manufacturerdata = (const char*)(BLEdata["manufacturerdata"] | "");
Log.trace(F("manufacturerdata %s" CR), manufacturerdata);
if (BLEdata.containsKey("name")) {
const char* name = (const char*)(BLEdata["name"] | "");
Log.trace(F("name %s" CR), name);
Log.trace(F("Is it a INKBIRD?" CR));
if (strcmp(name, "sps") == 0) {
Log.trace(F("INKBIRD data reading" CR));
BLEdata.set("model", "INKBIRD");

return process_inkbird(BLEdata);
}
}
# if !pubBLEManufacturerData
Log.trace(F("Remove manufacturer data" CR));
BLEdata.remove("manufacturerdata");
# endif
}

return BLEdata;
}

Expand Down Expand Up @@ -864,6 +898,21 @@ JsonObject& process_scale_v2(JsonObject& BLEdata) {
return BLEdata;
}

JsonObject& process_inkbird(JsonObject& BLEdata) {
const char* manufacturerdata = BLEdata["manufacturerdata"].as<const char*>();

double temperature = value_from_service_data(manufacturerdata, 0, 4) / 100;
double humidity = value_from_service_data(manufacturerdata, 4, 4) / 100;
double battery = value_from_service_data(manufacturerdata, 14, 2);

//Set Json values
BLEdata.set("tem", (double)temperature);
BLEdata.set("hum", (double)humidity);
BLEdata.set("batt", (double)battery);

return BLEdata;
}

JsonObject& process_miband(JsonObject& BLEdata) {
const char* servicedata = BLEdata["servicedata"].as<const char*>();

Expand Down