Add BLE WS02 SensorBlue beacon (#932)

https://github.com/h2zero/NimBLE-Arduino/issues/215
This commit is contained in:
Florian authored and GitHub committed 2021-05-08 17:59:32 -05:00
1 parent 1de93d3f1d
commit 9fb3d90da9
3 files changed
+42 -1

No files matched your search

+2 -1
View File
@@ -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/)
+39
View File
@@ -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<const char*>();
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);
+1
View File
@@ -140,6 +140,7 @@ enum ble_sensor_model {
LYWSD03MMC_PVVX,
CGH1,
CGPR1,
WS02,
};
/*-------------------PIN DEFINITIONS----------------------*/