Add INKBIRD IBBQ IBT-4XS (#955)

* Add INKBIRD IBBQ IBT-4XS

BBQ temperature sensor with 4 probes
This commit is contained in:
Florian authored and GitHub committed 2021-05-23 14:45:57 -05:00
1 parent fb7ad1b2ca
commit 8ef3a61e75
4 files changed
+56 -2

No files matched your search

+2
View File
@@ -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|
+47 -2
View File
@@ -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<const char*>();
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<const char*>();
+1
View File
@@ -142,6 +142,7 @@ enum ble_sensor_model {
CGPR1,
WS02,
IBSTH2,
IBT4XS,
};
/*-------------------PIN DEFINITIONS----------------------*/
+6
View File
@@ -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 }}"