Add CGH1 Qingping Cleargrass window and door sensor (#899)
This commit is contained in:
1 parent
46e1ee422a
commit
ad72211d71
4 files changed
+42
-1
No files matched your search
@@ -30,6 +30,7 @@ OpenMQTTGateway is able to scan all the BLE devices that advertise their data so
|
||||
| INKBIRD (1)|IBS-TH1|temperature/humidity/battery|
|
||||
| ClearGrass |CGG1|temperature/humidity/battery|
|
||||
| Qingping |CGDK2|temperature/humidity|
|
||||
| Qingping |CGH1|open|
|
||||
| ClearGrass alarm clock|CGD1|temperature/humidity|
|
||||
| ClearGrass with atmospheric pressure |CGP1W|temperature/humidity/air pressure|
|
||||
| Clock |LYWDS02|temperature/humidity|
|
||||
|
||||
@@ -384,6 +384,17 @@ void CLEARGRASSCGDK2Discovery(char* mac, char* sensorModel) {
|
||||
createDiscoveryFromList(mac, CLEARGRASSCGDK2sensor, CLEARGRASSCGDK2parametersCount, "CLEARGRASSCGDK2", "ClearGrass", sensorModel);
|
||||
}
|
||||
|
||||
void CLEARGRASSCGH1Discovery(char* mac, char* sensorModel) {
|
||||
# define CLEARGRASSCGH1parametersCount 1
|
||||
Log.trace(F("CLEARGRASSCGH1Discovery" CR));
|
||||
char* CLEARGRASSCGH1sensor[CLEARGRASSCGH1parametersCount][8] = {
|
||||
{"binary_sensor", "CLEARGRASSCGH1-open", mac, "door", jsonOpen, "True", "False", ""},
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
};
|
||||
|
||||
createDiscoveryFromList(mac, CLEARGRASSCGH1sensor, CLEARGRASSCGH1parametersCount, "CLEARGRASSCGH1", "ClearGrass", sensorModel);
|
||||
}
|
||||
|
||||
void CLEARGRASSTRHKPADiscovery(char* mac, char* sensorModel) {
|
||||
# define CLEARGRASSTRHKPAparametersCount 3
|
||||
Log.trace(F("CLEARGRASSTRHKPADiscovery" CR));
|
||||
@@ -999,6 +1010,7 @@ void launchBTDiscovery() {
|
||||
if (p->sensorModel == CGP1W) CLEARGRASSTRHKPADiscovery((char*)macWOdots.c_str(), "CGP1W");
|
||||
if (p->sensorModel == MUE4094RT) MiLampDiscovery((char*)macWOdots.c_str(), "MUE4094RT");
|
||||
if (p->sensorModel == CGDK2) CLEARGRASSCGDK2Discovery((char*)macWOdots.c_str(), "CGDK2");
|
||||
if (p->sensorModel == CGH1) CLEARGRASSCGH1Discovery((char*)macWOdots.c_str(), "CGH1");
|
||||
if (p->sensorModel == CGD1) CLEARGRASSCGD1Discovery((char*)macWOdots.c_str(), "CGD1");
|
||||
if (p->sensorModel == MIBAND) MiBandDiscovery((char*)macWOdots.c_str(), "MIBAND");
|
||||
if ((p->sensorModel == XMTZC04HM) ||
|
||||
@@ -1129,6 +1141,14 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
|
||||
createOrUpdateDevice(mac, device_flags_init, CGDK2);
|
||||
return process_cleargrass(BLEdata, false);
|
||||
}
|
||||
Log.trace(F("Is it a CGH1?" CR));
|
||||
if (service_len > ServicedataMinLength && (strncmp(&service_data[0], "c804", 4) == 0 || strncmp(&service_data[0], "8804", 4) == 0 || strncmp(&service_data[0], "0804", 4) == 0 || strncmp(&service_data[0], "4804", 4) == 0)) {
|
||||
Log.trace(F("CGH1 data reading" CR));
|
||||
BLEdata.set("model", "CGH1");
|
||||
if (device->sensorModel == -1)
|
||||
createOrUpdateDevice(mac, device_flags_init, CGH1);
|
||||
return process_cgh1(BLEdata);
|
||||
}
|
||||
Log.trace(F("Is it a MHO_C401?" CR));
|
||||
if (strstr(service_data, "588703") != NULL) {
|
||||
Log.trace(F("MHO_C401 add to list for future connect" CR));
|
||||
@@ -1383,6 +1403,23 @@ JsonObject& process_cleargrass(JsonObject& BLEdata, boolean air) {
|
||||
return BLEdata;
|
||||
}
|
||||
|
||||
JsonObject& process_cgh1(JsonObject& BLEdata) {
|
||||
const char* servicedata = BLEdata["servicedata"].as<const char*>();
|
||||
int value = -1;
|
||||
if (strncmp(&servicedata[0], "0804", 4) == 0 || strncmp(&servicedata[0], "8804", 4) == 0) { // state
|
||||
value = value_from_hex_data(servicedata, 33, 1, false);
|
||||
} else if (strncmp(&servicedata[0], "4804", 4) == 0 || strncmp(&servicedata[0], "c804", 4) == 0) { // action
|
||||
value = value_from_hex_data(servicedata, 21, 1, false);
|
||||
}
|
||||
|
||||
if (value == 0)
|
||||
BLEdata.set("open", true);
|
||||
if (value == 1)
|
||||
BLEdata.set("open", false);
|
||||
|
||||
return BLEdata;
|
||||
}
|
||||
|
||||
JsonObject& process_atc(JsonObject& BLEdata) {
|
||||
const char* servicedata = BLEdata["servicedata"].as<const char*>();
|
||||
|
||||
|
||||
+2
-1
@@ -74,7 +74,7 @@ bool bleConnect = AttemptBLECOnnect;
|
||||
#define CRLR_Length 4
|
||||
#define BLE_CNCT_TIMEOUT 3000
|
||||
|
||||
#define ServicedataMinLength 29
|
||||
#define ServicedataMinLength 27
|
||||
|
||||
unsigned int BLEinterval = TimeBtwRead; //time between 2 scans
|
||||
unsigned int BLEscanBeforeConnect = ScanBeforeConnect; //Number of BLE scans between connection cycles
|
||||
@@ -123,6 +123,7 @@ enum ble_sensor_model {
|
||||
INODE_EM,
|
||||
CGDK2,
|
||||
LYWSD03MMC_PVVX,
|
||||
CGH1,
|
||||
};
|
||||
|
||||
/*-------------------PIN DEFINITIONS----------------------*/
|
||||
|
||||
@@ -75,6 +75,7 @@ extern void createDiscovery(char* sensor_type,
|
||||
# define jsonPa "{{ float(value_json.pa) * 0.01 }}"
|
||||
# define jsonId "{{ value_json.id }}"
|
||||
# define jsonAddress "{{ value_json.address }}"
|
||||
# define jsonOpen "{{ value_json.open }}"
|
||||
#else // Home assistant autodiscovery value key definition
|
||||
# define jsonBatt "{{ value_json.batt | is_defined }}"
|
||||
# define jsonLux "{{ value_json.lux | is_defined }}"
|
||||
@@ -103,6 +104,7 @@ extern void createDiscovery(char* sensor_type,
|
||||
# define jsonPa "{{ float(value_json.pa) * 0.01 | is_defined }}"
|
||||
# define jsonId "{{ value_json.id | is_defined }}"
|
||||
# define jsonAddress "{{ value_json.address | is_defined }}"
|
||||
# define jsonOpen "{{ value_json.open | is_defined }}"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user