diff --git a/docs/prerequisites/devices.md b/docs/prerequisites/devices.md index 43c8dea..5e18dc1 100644 --- a/docs/prerequisites/devices.md +++ b/docs/prerequisites/devices.md @@ -39,7 +39,8 @@ OpenMQTTGateway is able to scan all the BLE devices that advertise their data so | XIAOMI Mi Scale v1 (1)|XMTZC04HM|weight| | XIAOMI Mi Scale v2 (1)|XMTZC05HM|weight| | XIAOMI Mi band (1)||steps| -| iNode Energy Meter (1)||power,energy,battery| +| iNode Energy Meter (1)||power/energy/battery| +| Thermobeacon|WS02|temperature/humidity/volt| Exhaustive list [here](https://compatible.openmqttgateway.com/index.php/devices/ble-devices/) diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index 595f814..982f5cc 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -511,6 +511,19 @@ void INodeEMDiscovery(char* mac, char* sensorModel) { createDiscoveryFromList(mac, INodeEMsensor, INodeEMparametersCount, "INode-Energy-Meter", "INode", sensorModel); } +void WS02Discovery(char* mac, char* sensorModel) { +# define WS02parametersCount 3 + Log.trace(F("WS02Discovery" CR)); + char* WS02sensor[WS02parametersCount][8] = { + {"sensor", "WS02-volt", mac, "", jsonVolt, "", "", "V"}, + {"sensor", "WS02-temp", mac, "temperature", jsonTempc, "", "", "°C"}, + {"sensor", "WS02-hum", mac, "humidity", jsonHum, "", "", "%"} + //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement + }; + + createDiscoveryFromList(mac, WS02sensor, WS02parametersCount, "WS02", "SensorBlue", sensorModel); +} + # else void MiFloraDiscovery(char* mac, char* sensorModel) {} void VegTrugDiscovery(char* mac, char* sensorModel) {} @@ -530,6 +543,7 @@ void InkBirdDiscovery(char* mac, char* sensorModel) {} void LYWSD03MMCDiscovery(char* mac, char* sensorModel) {} void MHO_C401Discovery(char* mac, char* sensorModel) {} void INodeEMDiscovery(char* mac, char* sensorModel) {} +void WS02Discovery(char* mac, char* sensorModel) {} # endif # ifdef ESP32 @@ -1027,6 +1041,7 @@ void launchBTDiscovery() { if (p->sensorModel == CGPR1) CLEARGRASSCGPR1Discovery((char*)macWOdots.c_str(), "CGPR1"); if (p->sensorModel == CGH1) CLEARGRASSCGH1Discovery((char*)macWOdots.c_str(), "CGH1"); if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery((char*)macWOdots.c_str(), "CGD1"); + if (p->sensorModel == WS02) WS02Discovery((char*)macWOdots.c_str(), "WS02"); if (p->sensorModel == MIBAND) MiBandDiscovery((char*)macWOdots.c_str(), "MIBAND"); if ((p->sensorModel == XMTZC04HM) || (p->sensorModel == XMTZC05HM)) MiScaleDiscovery((char*)macWOdots.c_str(), "XMTZC0xHM"); @@ -1262,6 +1277,14 @@ JsonObject& process_bledata(JsonObject& BLEdata) { createOrUpdateDevice(mac, device_flags_init, INODE_EM); return process_inode_em(BLEdata); } + Log.trace(F("Is it a WS02?" CR)); + if (strlen(manufacturerdata) >= 40 && (strstr(manufacturerdata, "100000001a11") != NULL)) { + Log.trace(F("WS02 data reading data reading" CR)); + BLEdata.set("model", "WS02"); + if (device->sensorModel == -1) + createOrUpdateDevice(mac, device_flags_init, WS02); + return process_ws02(BLEdata); + } # if !pubBLEManufacturerData Log.trace(F("Remove manufacturer data" CR)); BLEdata.remove("manufacturerdata"); @@ -1513,6 +1536,22 @@ JsonObject& process_inode_em(JsonObject& BLEdata) { return BLEdata; } +JsonObject& process_ws02(JsonObject& BLEdata) { + const char* manufacturerdata = BLEdata["manufacturerdata "].as(); + + double temperature = (double)value_from_hex_data(manufacturerdata, 20, 4, true) / 16; + double humidity = (double)value_from_hex_data(manufacturerdata, 24, 4, true) / 16; + double voltage = (double)value_from_hex_data(manufacturerdata, 16, 4, true) / 1000; + + //Set Json values + BLEdata.set("tempc", (double)temperature); + BLEdata.set("tempf", (double)convertTemp_CtoF(temperature)); + BLEdata.set("hum", (double)humidity); + BLEdata.set("volt", (double)voltage); + + return BLEdata; +} + void hass_presence(JsonObject& HomePresence) { int BLErssi = HomePresence["rssi"]; Log.trace(F("BLErssi %d" CR), BLErssi); diff --git a/main/config_BT.h b/main/config_BT.h index aa2b98e..2a067fa 100644 --- a/main/config_BT.h +++ b/main/config_BT.h @@ -140,6 +140,7 @@ enum ble_sensor_model { LYWSD03MMC_PVVX, CGH1, CGPR1, + WS02, }; /*-------------------PIN DEFINITIONS----------------------*/