Add iNode Energy Meter support (#755)

This commit is contained in:
Michał Rybicki authored and GitHub committed 2020-09-03 16:09:34 -05:00
1 parent 0600b89190
commit caad5dde1a
4 files changed
+43

No files matched your search

+1
View File
@@ -35,6 +35,7 @@ OpenMQTTGateway is able to scan all the BLE devices that advertise their data so
| XIAOMI Mi Scale v1 *|XMTZC04HM|weight|
| XIAOMI Mi Scale v2 *|XMTZC05HM|weight|
| XIAOMI Mi band * ||steps|
| iNode Energy Meter * ||power,energy,battery|
Exhaustive list [here](https://compatible.openmqttgateway.com/index.php/devices/ble-devices/)
+39
View File
@@ -382,6 +382,19 @@ void MHO_C401Discovery(char* mac) {
createDiscoveryFromList(mac, MHO_C401sensor, MHO_C401parametersCount);
}
void INodeEMDiscovery(char* mac) {
# define INodeEMparametersCount 3
Log.trace(F("INodeEMDiscovery" CR));
char* INodeEMsensor[INodeEMparametersCount][8] = {
{"sensor", "iNodeEM-power", mac, "power", jsonPower, "", "", "W"},
{"sensor", "iNodeEM-energy", mac, "", jsonEnergy, "", "", "kWh"},
{"sensor", "iNodeEM-batt", mac, "battery", jsonBatt, "", "", "%"}
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
};
createDiscoveryFromList(mac, INodeEMsensor, INodeEMparametersCount);
}
# else
void MiFloraDiscovery(char* mac) {}
void VegTrugDiscovery(char* mac) {}
@@ -397,6 +410,7 @@ void MiBandDiscovery(char* mac) {}
void InkBirdDiscovery(char* mac) {}
void LYWSD03MMCDiscovery(char* mac) {}
void MHO_C401Discovery(char* mac) {}
void INodeEMDiscovery(char* mac) {}
# endif
# ifdef ESP32
@@ -871,6 +885,7 @@ void launchDiscovery() {
if (p->sensorModel == INKBIRD) InkBirdDiscovery((char*)macWOdots.c_str());
if (p->sensorModel == LYWSD03MMC || p->sensorModel == LYWSD03MMC_ATC) LYWSD03MMCDiscovery((char*)macWOdots.c_str());
if (p->sensorModel == MHO_C401) MHO_C401Discovery((char*)macWOdots.c_str());
if (p->sensorModel == INODE_EM) INodeEMDiscovery((char*)macWOdots.c_str());
createOrUpdateDevice(p->macAdr, device_flags_isDisc, p->sensorModel);
} else {
Log.trace(F("Device already discovered or UNKNOWN_MODEL" CR));
@@ -1060,6 +1075,14 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
return process_inkbird(BLEdata);
}
}
Log.trace(F("Is it a iNode Energy Meter?" CR));
if (strlen(manufacturerdata) == 26 && ((long)value_from_service_data(manufacturerdata, 0, 4, true) & 0xFFF9) == 0x8290) {
Log.trace(F("iNode Energy Meter data reading" CR));
BLEdata.set("model", "INODE_EM");
if (device->sensorModel == -1)
createOrUpdateDevice(mac, device_flags_init, INODE_EM);
return process_inode_em(BLEdata);
}
# if !pubBLEManufacturerData
Log.trace(F("Remove manufacturer data" CR));
BLEdata.remove("manufacturerdata");
@@ -1236,6 +1259,22 @@ JsonObject& process_atc(JsonObject& BLEdata) {
return BLEdata;
}
JsonObject& process_inode_em(JsonObject& BLEdata) {
const char* manufacturerdata = BLEdata["manufacturerdata"].as<const char*>();
long impPerKWh = value_from_service_data(manufacturerdata, 16, 4, true) & 0x3FFF;
double power = ((double)value_from_service_data(manufacturerdata, 4, 4, true) / impPerKWh) * 60000;
double energy = (double)value_from_service_data(manufacturerdata, 8, 8, true) / impPerKWh;
long battery = ((value_from_service_data(manufacturerdata, 20, 2, true) >> 4) - 2) * 10;
//Set Json values
BLEdata.set("power", (double)power);
BLEdata.set("energy", (double)energy);
BLEdata.set("batt", battery);
return BLEdata;
}
# ifdef subjectHomePresence
void haRoomPresence(JsonObject& HomePresence) {
int BLErssi = HomePresence["rssi"];
+1
View File
@@ -102,6 +102,7 @@ enum ble_sensor_model {
LYWSD03MMC,
MHO_C401,
LYWSD03MMC_ATC,
INODE_EM
};
/*-------------------PIN DEFINITIONS----------------------*/
+2
View File
@@ -66,6 +66,7 @@ extern void createDiscovery(char* sensor_type,
# define jsonVolt "{{ value_json.volt }}"
# define jsonCurrent "{{ value_json.current }}"
# define jsonPower "{{ value_json.power }}"
# define jsonEnergy "{{ value_json.energy }}"
# define jsonGpio "{{ value_json.gpio }}"
# define jsonFtcd "{{ value_json.ftcd }}"
# define jsonWm2 "{{ value_json.wattsm2 }}"
@@ -93,6 +94,7 @@ extern void createDiscovery(char* sensor_type,
# define jsonVolt "{{ value_json.volt | is_defined }}"
# define jsonCurrent "{{ value_json.current | is_defined }}"
# define jsonPower "{{ value_json.power | is_defined }}"
# define jsonEnergy "{{ value_json.energy | is_defined }}"
# define jsonGpio "{{ value_json.gpio | is_defined }}"
# define jsonFtcd "{{ value_json.ftcd | is_defined }}"
# define jsonWm2 "{{ value_json.wattsm2 | is_defined }}"