@@ -511,6 +511,19 @@ void INodeEMDiscovery(char* mac, char* sensorModel) {
511511 createDiscoveryFromList (mac, INodeEMsensor, INodeEMparametersCount, " INode-Energy-Meter" , " INode" , sensorModel);
512512}
513513
514+ void WS02Discovery (char * mac, char * sensorModel) {
515+ # define WS02parametersCount 3
516+ Log.trace (F (" WS02Discovery" CR));
517+ char * WS02sensor[WS02parametersCount][8 ] = {
518+ {" sensor" , " WS02-volt" , mac, " " , jsonVolt, " " , " " , " V" },
519+ {" sensor" , " WS02-temp" , mac, " temperature" , jsonTempc, " " , " " , " °C" },
520+ {" sensor" , " WS02-hum" , mac, " humidity" , jsonHum, " " , " " , " %" }
521+ // component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
522+ };
523+
524+ createDiscoveryFromList (mac, WS02sensor, WS02parametersCount, " WS02" , " SensorBlue" , sensorModel);
525+ }
526+
514527# else
515528void MiFloraDiscovery (char * mac, char * sensorModel) {}
516529void VegTrugDiscovery (char * mac, char * sensorModel) {}
@@ -530,6 +543,7 @@ void InkBirdDiscovery(char* mac, char* sensorModel) {}
530543void LYWSD03MMCDiscovery (char * mac, char * sensorModel) {}
531544void MHO_C401Discovery (char * mac, char * sensorModel) {}
532545void INodeEMDiscovery (char * mac, char * sensorModel) {}
546+ void WS02Discovery (char * mac, char * sensorModel) {}
533547# endif
534548
535549# ifdef ESP32
@@ -1027,6 +1041,7 @@ void launchBTDiscovery() {
10271041 if (p->sensorModel == CGPR1) CLEARGRASSCGPR1Discovery ((char *)macWOdots.c_str (), " CGPR1" );
10281042 if (p->sensorModel == CGH1) CLEARGRASSCGH1Discovery ((char *)macWOdots.c_str (), " CGH1" );
10291043 if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery ((char *)macWOdots.c_str (), " CGD1" );
1044+ if (p->sensorModel == WS02) WS02Discovery ((char *)macWOdots.c_str (), " WS02" );
10301045 if (p->sensorModel == MIBAND) MiBandDiscovery ((char *)macWOdots.c_str (), " MIBAND" );
10311046 if ((p->sensorModel == XMTZC04HM) ||
10321047 (p->sensorModel == XMTZC05HM)) MiScaleDiscovery ((char *)macWOdots.c_str (), " XMTZC0xHM" );
@@ -1262,6 +1277,14 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
12621277 createOrUpdateDevice (mac, device_flags_init, INODE_EM);
12631278 return process_inode_em (BLEdata);
12641279 }
1280+ Log.trace (F (" Is it a WS02?" CR));
1281+ if (strlen (manufacturerdata) >= 40 && (strstr (manufacturerdata, " 100000001a11" ) != NULL )) {
1282+ Log.trace (F (" WS02 data reading data reading" CR));
1283+ BLEdata.set (" model" , " WS02" );
1284+ if (device->sensorModel == -1 )
1285+ createOrUpdateDevice (mac, device_flags_init, WS02);
1286+ return process_ws02 (BLEdata);
1287+ }
12651288# if !pubBLEManufacturerData
12661289 Log.trace (F (" Remove manufacturer data" CR));
12671290 BLEdata.remove (" manufacturerdata" );
@@ -1513,6 +1536,22 @@ JsonObject& process_inode_em(JsonObject& BLEdata) {
15131536 return BLEdata;
15141537}
15151538
1539+ JsonObject& process_ws02 (JsonObject& BLEdata) {
1540+ const char * manufacturerdata = BLEdata[" manufacturerdata " ].as <const char *>();
1541+
1542+ double temperature = (double )value_from_hex_data (manufacturerdata, 20 , 4 , true ) / 16 ;
1543+ double humidity = (double )value_from_hex_data (manufacturerdata, 24 , 4 , true ) / 16 ;
1544+ double voltage = (double )value_from_hex_data (manufacturerdata, 16 , 4 , true ) / 1000 ;
1545+
1546+ // Set Json values
1547+ BLEdata.set (" tempc" , (double )temperature);
1548+ BLEdata.set (" tempf" , (double )convertTemp_CtoF (temperature));
1549+ BLEdata.set (" hum" , (double )humidity);
1550+ BLEdata.set (" volt" , (double )voltage);
1551+
1552+ return BLEdata;
1553+ }
1554+
15161555void hass_presence (JsonObject& HomePresence) {
15171556 int BLErssi = HomePresence[" rssi" ];
15181557 Log.trace (F (" BLErssi %d" CR), BLErssi);
0 commit comments