Skip to content

Commit

Permalink
Add iNode Energy Meter support
Browse files Browse the repository at this point in the history
  • Loading branch information
nemoo2580 committed Sep 1, 2020
1 parent 7b9944d commit 2ef51ff
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/prerequisites/devices.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,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/)

Expand Down
39 changes: 39 additions & 0 deletions main/ZgatewayBT.ino
Original file line number Diff line number Diff line change
Expand Up @@ -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) {}
Expand All @@ -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
Expand Down Expand Up @@ -864,6 +878,7 @@ void launchDiscovery() {
if (p->sensorModel == INKBIRD) InkBirdDiscovery((char*)macWOdots.c_str());
if (p->sensorModel == LYWSD03MMC) 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));
Expand Down Expand Up @@ -1045,6 +1060,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) & 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");
Expand Down Expand Up @@ -1203,6 +1226,22 @@ JsonObject& process_cleargrass(JsonObject& BLEdata, boolean air) {
return BLEdata;
}

JsonObject& process_inode_em(JsonObject& BLEdata) {
const char* manufacturerdata = BLEdata["manufacturerdata"].as<const char*>();

long impPerKWh = (long)value_from_service_data(manufacturerdata, 16, 4) & 0x3FFF;
double power = ((double)value_from_service_data(manufacturerdata, 4, 4) / impPerKWh) * 60000;
double energy = (double)value_from_service_data(manufacturerdata, 8, 8) / impPerKWh;
long battery = (((long)value_from_service_data(manufacturerdata, 20, 2) >> 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"];
Expand Down
1 change: 1 addition & 0 deletions main/config_BT.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ enum ble_sensor_model {
INKBIRD,
LYWSD03MMC,
MHO_C401,
INODE_EM
};

/*-------------------PIN DEFINITIONS----------------------*/
Expand Down
2 changes: 2 additions & 0 deletions main/config_mqttDiscovery.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}"
Expand Down Expand Up @@ -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 }}"
Expand Down

0 comments on commit 2ef51ff

Please sign in to comment.