From 8ef3a61e75da1f765ee4f603052b84d1947cecb3 Mon Sep 17 00:00:00 2001 From: Florian <1technophile@users.noreply.github.com> Date: Sun, 23 May 2021 14:45:57 -0500 Subject: [PATCH] Add INKBIRD IBBQ IBT-4XS (#955) * Add INKBIRD IBBQ IBT-4XS BBQ temperature sensor with 4 probes --- docs/prerequisites/devices.md | 2 ++ main/ZgatewayBT.ino | 49 +++++++++++++++++++++++++++++++++-- main/config_BT.h | 1 + main/config_mqttDiscovery.h | 6 +++++ 4 files changed, 56 insertions(+), 2 deletions(-) diff --git a/docs/prerequisites/devices.md b/docs/prerequisites/devices.md index 5e18dc1..4b4da5e 100644 --- a/docs/prerequisites/devices.md +++ b/docs/prerequisites/devices.md @@ -29,6 +29,8 @@ OpenMQTTGateway is able to scan all the BLE devices that advertise their data so | XIAOMI Mi Lamp |MUE4094RT|presence| | HONEYWELL |JQJCY01YM|formaldehyde/temperature/humidity/battery| | INKBIRD (1)|IBS-TH1|temperature/humidity/battery| +| INKBIRD (1)|IBS-TH2|temperature/battery| +| INKBIRD (1)|IBT-4XS|temperature1/temperature2/temperature3/temperature4| | ClearGrass |CGG1|temperature/humidity/battery| | Qingping |CGDK2|temperature/humidity| | Qingping |CGH1|open| diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index 70aeb26..b029eb2 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -467,7 +467,7 @@ void InkBirdTH1Discovery(const char* mac, const char* sensorModel) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, InkBirdTH1sensor, InkBirdTH1parametersCount, "", "Inkbird", sensorModel); + createDiscoveryFromList(mac, InkBirdTH1sensor, InkBirdTH1parametersCount, "IBS-TH1", "Inkbird", sensorModel); } void InkBirdTH2Discovery(const char* mac, const char* sensorModel) { @@ -479,7 +479,21 @@ void InkBirdTH2Discovery(const char* mac, const char* sensorModel) { //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; - createDiscoveryFromList(mac, InkBirdTH2sensor, InkBirdTH2parametersCount, "", "Inkbird", sensorModel); + createDiscoveryFromList(mac, InkBirdTH2sensor, InkBirdTH2parametersCount, "IBS-TH2", "Inkbird", sensorModel); +} + +void InkBird4XSDiscovery(const char* mac, const char* sensorModel) { +# define InkBird4XSparametersCount 4 + Log.trace(F("InkBird4XSDiscovery" CR)); + const char* InkBird4XSsensor[InkBird4XSparametersCount][8] = { + {"sensor", "InkBird4XS-temp1", mac, "temperature", jsonTempc, "", "", "°C"}, + {"sensor", "InkBird4XS-temp2", mac, "temperature", jsonTempc2, "", "", "°C"}, + {"sensor", "InkBird4XS-temp3", mac, "temperature", jsonTempc3, "", "", "°C"}, + {"sensor", "InkBird4XS-temp4", mac, "temperature", jsonTempc4, "", "", "°C"}, + //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement + }; + + createDiscoveryFromList(mac, InkBird4XSsensor, InkBird4XSparametersCount, "IBT-4XS", "Inkbird", sensorModel); } void LYWSD03MMCDiscovery(const char* mac, const char* sensorModel) { @@ -553,6 +567,7 @@ void MiLampDiscovery(const char* mac, const char* sensorModel) {} void MiBandDiscovery(const char* mac, const char* sensorModel) {} void InkBirdTH1Discovery(const char* mac, const char* sensorModel) {} void InkBirdTH2Discovery(const char* mac, const char* sensorModel) {} +void InkBird4XSDiscovery(const char* mac, const char* sensorModel) {} void LYWSD03MMCDiscovery(const char* mac, const char* sensorModel) {} void MHO_C401Discovery(const char* mac, const char* sensorModel) {} void INodeEMDiscovery(const char* mac, const char* sensorModel) {} @@ -1056,6 +1071,7 @@ void launchBTDiscovery() { (p->sensorModel == XMTZC05HM)) MiScaleDiscovery(macWOdots.c_str(), "XMTZC0xHM"); if (p->sensorModel == IBSTH1) InkBirdTH1Discovery(macWOdots.c_str(), "IBS-TH1"); if (p->sensorModel == IBSTH2) InkBirdTH2Discovery(macWOdots.c_str(), "IBS-TH2"); + if (p->sensorModel == IBT4XS) InkBird4XSDiscovery(macWOdots.c_str(), "IBT-4XS"); if (p->sensorModel == LYWSD03MMC || p->sensorModel == LYWSD03MMC_ATC || p->sensorModel == LYWSD03MMC_PVVX) LYWSD03MMCDiscovery(macWOdots.c_str(), "LYWSD03MMC"); if (p->sensorModel == MHO_C401) MHO_C401Discovery(macWOdots.c_str(), "MHO_C401"); if (p->sensorModel == INODE_EM) INodeEMDiscovery(macWOdots.c_str(), "INODE_EM"); @@ -1286,6 +1302,14 @@ JsonObject& process_bledata(JsonObject& BLEdata) { createOrUpdateDevice(mac, device_flags_init, IBSTH2); return process_inkbird_th2(BLEdata); } + Log.trace(F("Is it a INKBIRD IBT-4XS?" CR)); + if (strcmp(name, "iBBQ") == 0) { + Log.trace(F("INKBIRD IBT-4XS data reading" CR)); + BLEdata.set("model", "IBT-4XS"); + if (device->sensorModel == -1) + createOrUpdateDevice(mac, device_flags_init, IBT4XS); + return process_inkbird_4xs(BLEdata); + } } Log.trace(F("Is it a iNode Energy Meter?" CR)); if (strlen(manufacturerdata) == 26 && ((long)value_from_hex_data(manufacturerdata, 0, 4, true) & 0xFFF9) == 0x8290) { @@ -1438,6 +1462,27 @@ JsonObject& process_inkbird_th2(JsonObject& BLEdata) { return BLEdata; } +JsonObject& process_inkbird_4xs(JsonObject& BLEdata) { + const char* manufacturerdata = BLEdata["manufacturerdata"].as(); + + double temperature = (double)value_from_hex_data(manufacturerdata, 20, 4, true) / 10; + double temperature2 = (double)value_from_hex_data(manufacturerdata, 24, 4, true) / 10; + double temperature3 = (double)value_from_hex_data(manufacturerdata, 28, 4, true) / 10; + double temperature4 = (double)value_from_hex_data(manufacturerdata, 32, 4, true) / 10; + + //Set Json values + BLEdata.set("tempc", (double)temperature); + BLEdata.set("tempf", (double)convertTemp_CtoF(temperature)); + BLEdata.set("tempc2", (double)temperature2); + BLEdata.set("tempf2", (double)convertTemp_CtoF(temperature2)); + BLEdata.set("tempc3", (double)temperature3); + BLEdata.set("tempf3", (double)convertTemp_CtoF(temperature3)); + BLEdata.set("tempc4", (double)temperature4); + BLEdata.set("tempf4", (double)convertTemp_CtoF(temperature4)); + + return BLEdata; +} + JsonObject& process_miband(JsonObject& BLEdata) { const char* servicedata = BLEdata["servicedata"].as(); diff --git a/main/config_BT.h b/main/config_BT.h index 1bd9083..c0f643f 100644 --- a/main/config_BT.h +++ b/main/config_BT.h @@ -142,6 +142,7 @@ enum ble_sensor_model { CGPR1, WS02, IBSTH2, + IBT4XS, }; /*-------------------PIN DEFINITIONS----------------------*/ diff --git a/main/config_mqttDiscovery.h b/main/config_mqttDiscovery.h index ff568c7..bc9ee94 100644 --- a/main/config_mqttDiscovery.h +++ b/main/config_mqttDiscovery.h @@ -61,6 +61,9 @@ extern void createDiscovery(const char* sensor_type, # define jsonAltim "{{ value_json.altim }}" # define jsonAltif "{{ value_json.altift }}" # define jsonTempc "{{ value_json.tempc }}" +# define jsonTempc2 "{{ value_json.tempc2 }}" +# define jsonTempc3 "{{ value_json.tempc3 }}" +# define jsonTempc4 "{{ value_json.tempc4 }}" # define jsonTempf "{{ value_json.tempf }}" # define jsonMsg "{{ value_json.message }}" # define jsonVal "{{ value_json.value }}" @@ -90,6 +93,9 @@ extern void createDiscovery(const char* sensor_type, # define jsonAltim "{{ value_json.altim | is_defined }}" # define jsonAltif "{{ value_json.altift | is_defined }}" # define jsonTempc "{{ value_json.tempc | is_defined }}" +# define jsonTempc2 "{{ value_json.tempc2 | is_defined }}" +# define jsonTempc3 "{{ value_json.tempc3 | is_defined }}" +# define jsonTempc4 "{{ value_json.tempc4 | is_defined }}" # define jsonTempf "{{ value_json.tempf | is_defined }}" # define jsonMsg "{{ value_json.message | is_defined }}" # define jsonVal "{{ value_json.value | is_defined }}"