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|
|
| INKBIRD (1)|IBS-TH1|temperature/humidity/battery|
|
||||||
| ClearGrass |CGG1|temperature/humidity/battery|
|
| ClearGrass |CGG1|temperature/humidity/battery|
|
||||||
| Qingping |CGDK2|temperature/humidity|
|
| Qingping |CGDK2|temperature/humidity|
|
||||||
|
| Qingping |CGH1|open|
|
||||||
| ClearGrass alarm clock|CGD1|temperature/humidity|
|
| ClearGrass alarm clock|CGD1|temperature/humidity|
|
||||||
| ClearGrass with atmospheric pressure |CGP1W|temperature/humidity/air pressure|
|
| ClearGrass with atmospheric pressure |CGP1W|temperature/humidity/air pressure|
|
||||||
| Clock |LYWDS02|temperature/humidity|
|
| Clock |LYWDS02|temperature/humidity|
|
||||||
|
|||||||
@@ -384,6 +384,17 @@ void CLEARGRASSCGDK2Discovery(char* mac, char* sensorModel) {
|
|||||||
createDiscoveryFromList(mac, CLEARGRASSCGDK2sensor, CLEARGRASSCGDK2parametersCount, "CLEARGRASSCGDK2", "ClearGrass", 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) {
|
void CLEARGRASSTRHKPADiscovery(char* mac, char* sensorModel) {
|
||||||
# define CLEARGRASSTRHKPAparametersCount 3
|
# define CLEARGRASSTRHKPAparametersCount 3
|
||||||
Log.trace(F("CLEARGRASSTRHKPADiscovery" CR));
|
Log.trace(F("CLEARGRASSTRHKPADiscovery" CR));
|
||||||
@@ -999,6 +1010,7 @@ void launchBTDiscovery() {
|
|||||||
if (p->sensorModel == CGP1W) CLEARGRASSTRHKPADiscovery((char*)macWOdots.c_str(), "CGP1W");
|
if (p->sensorModel == CGP1W) CLEARGRASSTRHKPADiscovery((char*)macWOdots.c_str(), "CGP1W");
|
||||||
if (p->sensorModel == MUE4094RT) MiLampDiscovery((char*)macWOdots.c_str(), "MUE4094RT");
|
if (p->sensorModel == MUE4094RT) MiLampDiscovery((char*)macWOdots.c_str(), "MUE4094RT");
|
||||||
if (p->sensorModel == CGDK2) CLEARGRASSCGDK2Discovery((char*)macWOdots.c_str(), "CGDK2");
|
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 == CGD1) CLEARGRASSCGD1Discovery((char*)macWOdots.c_str(), "CGD1");
|
||||||
if (p->sensorModel == MIBAND) MiBandDiscovery((char*)macWOdots.c_str(), "MIBAND");
|
if (p->sensorModel == MIBAND) MiBandDiscovery((char*)macWOdots.c_str(), "MIBAND");
|
||||||
if ((p->sensorModel == XMTZC04HM) ||
|
if ((p->sensorModel == XMTZC04HM) ||
|
||||||
@@ -1129,6 +1141,14 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
|
|||||||
createOrUpdateDevice(mac, device_flags_init, CGDK2);
|
createOrUpdateDevice(mac, device_flags_init, CGDK2);
|
||||||
return process_cleargrass(BLEdata, false);
|
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));
|
Log.trace(F("Is it a MHO_C401?" CR));
|
||||||
if (strstr(service_data, "588703") != NULL) {
|
if (strstr(service_data, "588703") != NULL) {
|
||||||
Log.trace(F("MHO_C401 add to list for future connect" CR));
|
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;
|
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) {
|
JsonObject& process_atc(JsonObject& BLEdata) {
|
||||||
const char* servicedata = BLEdata["servicedata"].as<const char*>();
|
const char* servicedata = BLEdata["servicedata"].as<const char*>();
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -74,7 +74,7 @@ bool bleConnect = AttemptBLECOnnect;
|
|||||||
#define CRLR_Length 4
|
#define CRLR_Length 4
|
||||||
#define BLE_CNCT_TIMEOUT 3000
|
#define BLE_CNCT_TIMEOUT 3000
|
||||||
|
|
||||||
#define ServicedataMinLength 29
|
#define ServicedataMinLength 27
|
||||||
|
|
||||||
unsigned int BLEinterval = TimeBtwRead; //time between 2 scans
|
unsigned int BLEinterval = TimeBtwRead; //time between 2 scans
|
||||||
unsigned int BLEscanBeforeConnect = ScanBeforeConnect; //Number of BLE scans between connection cycles
|
unsigned int BLEscanBeforeConnect = ScanBeforeConnect; //Number of BLE scans between connection cycles
|
||||||
@@ -123,6 +123,7 @@ enum ble_sensor_model {
|
|||||||
INODE_EM,
|
INODE_EM,
|
||||||
CGDK2,
|
CGDK2,
|
||||||
LYWSD03MMC_PVVX,
|
LYWSD03MMC_PVVX,
|
||||||
|
CGH1,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*-------------------PIN DEFINITIONS----------------------*/
|
/*-------------------PIN DEFINITIONS----------------------*/
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ extern void createDiscovery(char* sensor_type,
|
|||||||
# define jsonPa "{{ float(value_json.pa) * 0.01 }}"
|
# define jsonPa "{{ float(value_json.pa) * 0.01 }}"
|
||||||
# define jsonId "{{ value_json.id }}"
|
# define jsonId "{{ value_json.id }}"
|
||||||
# define jsonAddress "{{ value_json.address }}"
|
# define jsonAddress "{{ value_json.address }}"
|
||||||
|
# define jsonOpen "{{ value_json.open }}"
|
||||||
#else // Home assistant autodiscovery value key definition
|
#else // Home assistant autodiscovery value key definition
|
||||||
# define jsonBatt "{{ value_json.batt | is_defined }}"
|
# define jsonBatt "{{ value_json.batt | is_defined }}"
|
||||||
# define jsonLux "{{ value_json.lux | 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 jsonPa "{{ float(value_json.pa) * 0.01 | is_defined }}"
|
||||||
# define jsonId "{{ value_json.id | is_defined }}"
|
# define jsonId "{{ value_json.id | is_defined }}"
|
||||||
# define jsonAddress "{{ value_json.address | is_defined }}"
|
# define jsonAddress "{{ value_json.address | is_defined }}"
|
||||||
|
# define jsonOpen "{{ value_json.open | is_defined }}"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
Reference in new issue
Block a user