- Move back to multiple pins for temp sensors
- finalize JSON data for MQTT
pull/2/head
Andrew Woodlee 3 months ago
parent c34c62da31
commit 16c5f212a0

@ -84,35 +84,53 @@ ATM90E36_IC SetupEic(ctLine, ic);
// we are using the ESP32's MAC address to provide a unique ID
String client_id = "xformermon-";
// GPIO where the DS18B20 is connected to
const int tempBus = 4;
const int oilTempBus = 4;
const int cabinetTempBus = 9;
struct tempSensors {
DallasTemperature oil, cabinet;
};
// Setup a oneWire instance to communicate with any OneWire devices
OneWire tempBusOneWire(tempBus);
OneWire oilTempBusOneWire(oilTempBus);
OneWire cabinetTempBusOneWire(cabinetTempBus);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature tempSensors(&tempBusOneWire);
DallasTemperature oilTempSensor(&oilTempBusOneWire);
DallasTemperature cabinetTempSensor(&cabinetTempBusOneWire);
tempSensors monitorTempSensors{oilTempSensor, cabinetTempSensor};
StaticJsonDocument<256> dataStore[60];
time_t now;
// Data structs for queue
struct tempData {
float cabinetTemp, oilTemp;
float cabinet, oil;
};
struct powerData {
float activePower, passivePower;
double active, apparent, reactive, factor;
};
struct harmonicData {
double voltage, current;
};
struct energyData {
double import, exp;
};
struct xformerMonitorData {
unsigned short SysStatus, meterStatus;
double activeCurrent, passiveCurrent, lineCurrent, lineVoltage,
activePower, passivePower, importEnergy, exportEnergy;
unsigned short sysStatus, meterStatus;
double lineCurrent, neutralCurrent, lineVoltage, phase;
tm *timeInfo;
tempData temps;
powerData power;
harmonicData harmonics;
energyData energy;
};
// End data structs for queue

@ -37,10 +37,6 @@ void ATM90E36_IC::begin(){
return lv;
}
double ATM90E36_IC::GetSysStatus()
{
return eic->GetSysStatus0();
}
double ATM90E36_IC::GetActivePower()
{
@ -118,3 +114,78 @@ void ATM90E36_IC::begin(){
{
return eic->GetTotalApparentPower();
}
double ATM90E36_IC::GetPhase()
{
double p;
switch (ctLine)
{
case 'A':
p = eic->GetPhaseA();
break;
case 'B':
p = eic->GetPhaseB();
break;
case 'C':
p = eic->GetPhaseC();
break;
}
return p;
}
double ATM90E36_IC::GetLineCurrent()
{
double i;
switch (ctLine)
{
case 'A':
i = eic->GetLineCurrentA();
break;
case 'B':
i = eic->GetLineCurrentB();
break;
case 'C':
i = eic->GetLineCurrentC();
break;
}
return i;
}
double ATM90E36_IC::GetLineCurrentN()
{
return eic->GetLineCurrentN();
}
double ATM90E36_IC::GetTemperature()
{
return eic->GetTemperature();
}
double ATM90E36_IC::GetMeterStatus0()
{
return eic->GetMeterStatus0();
}
double ATM90E36_IC::GetMeterStatus1()
{
return eic->GetMeterStatus1();
}
double ATM90E36_IC::GetSysStatus0()
{
return eic->GetSysStatus0();
}
double ATM90E36_IC::GetSysStatus1()
{
return eic->GetSysStatus1();
}
double ATM90E36_IC::GetImportEnergy()
{
return eic->GetImportEnergy();
}
double ATM90E36_IC::GetExportEnergy()
{
return eic->GetExportEnergy();
}

@ -6,7 +6,6 @@ class ATM90E36_IC : public transformerEnergyMonitor {
private:
char ctLine;
int status;
public:
ATM90E36 *eic;
ATM90E36_IC(const char ctLineLetter, ATM90E36 ic);
@ -15,7 +14,16 @@ public:
double GetLineVoltage();
double GetActivePower();
double GetSysStatus();
double GetMeterStatus0();
double GetMeterStatus1();
double GetSysStatus0();
double GetSysStatus1();
double GetTemperature();
double GetPhase();
double GetLineCurrent();
double GetLineCurrentN();
@ -27,5 +35,6 @@ public:
double GetVHarm();
double GetCHarm();
double GetImportEnergy();
double GetExportEnergy();
};

@ -1,15 +1,27 @@
{
"time": "2021-05-04T13:13:04Z",
"volts": 120.00,
"amps": 600,
"deviceId": "esp32-blah-blah-random",
"time": 1351824120,
"voltage": 120,
"lineCurrent": 60,
"neutralLineCurrent": 60,
"meterStatus": 100,
"sysStatus": 60,
"energy": {
"export": 40,
"import": 40
},
"harmonics": {
"voltage": 6,
"current": 6
},
"power": {
"active": 90,
"passive": 8
"active": 6,
"apparent": 6,
"reactive": 6,
"factor": 60
},
"meterStatus": 60,
"id": "xformermon-random-data",
"temps": {
"oil": 70.0,
"cabinet": 60.0
"oil": 150,
"cabinet": 60
}
}

@ -17,7 +17,6 @@ void setupEnergyMonitor();
// const char* test_client_cert = ""; //to verify the client
void setup()
{
eicDataQueue = xQueueCreate( 50, sizeof( xformerMonitorData ) );
// configure time
@ -180,6 +179,8 @@ void sendSensorDataOverMQTT(void *pvParameters)
StaticJsonDocument<512> mqttJsonData;
JsonObject tempObj = mqttJsonData.createNestedObject("temps");
JsonObject powerObj = mqttJsonData.createNestedObject("power");
JsonObject energyObj = mqttJsonData.createNestedObject("energy");
JsonObject harmonicObj = mqttJsonData.createNestedObject("harmonics");
xformerMonitorData mqttSensorData;
int messagesWaiting = uxQueueMessagesWaiting(eicDataQueue);
int emptySpaces = uxQueueSpacesAvailable(eicDataQueue);
@ -189,9 +190,27 @@ void sendSensorDataOverMQTT(void *pvParameters)
char timeBuffer[32];
strftime(timeBuffer, sizeof(timeBuffer), "%FT%TZ", mqttSensorData.timeInfo);
powerObj["active"] = eic.GetActivePower();
powerObj["apparent"] = eic.GetApparentPower();
mqttJsonData["deviceId"] = "esp32-random-id";
mqttJsonData["time"] = timeBuffer;
mqttJsonData["meterStatus"] = mqttSensorData.meterStatus;
mqttJsonData["sysStatus"] = mqttSensorData.sysStatus;
mqttJsonData["current"] = mqttSensorData.lineCurrent;
mqttJsonData["neutralCurrent"] = mqttSensorData.neutralCurrent;
mqttJsonData["voltage"] = mqttSensorData.lineCurrent;
powerObj["active"] = mqttSensorData.power.active;
powerObj["apparent"] = mqttSensorData.power.apparent;
powerObj["factor"] = mqttSensorData.power.factor;
powerObj["reactive"] = mqttSensorData.power.reactive;
tempObj["oil"] = mqttSensorData.temps.oil;
tempObj["cabinet"] = mqttSensorData.temps.cabinet;
energyObj["export"] = mqttSensorData.energy.exp;
energyObj["import"] = mqttSensorData.energy.import;
energyObj["harmonics"] = mqttSensorData.harmonics.current;
energyObj["harmonics"] = mqttSensorData.harmonics.voltage;
lastMillis = millis();
@ -219,7 +238,8 @@ void IRAM_ATTR ReadData(){
if (timesEnteredISR == 60)
{
// TODO: find and hard-code addresses of sensors
tempSensors.requestTemperatures();
monitorTempSensors.cabinet.requestTemperatures();
monitorTempSensors.oil.requestTemperatures();
// get cabinet temp sensor data
// sensorData.temps.cabinetTemp = tempSensors.getTempC();
// get oil temp sensor data
@ -233,6 +253,8 @@ void IRAM_ATTR ReadData(){
sensorData.timeInfo = gmtime(&now);
sensorData.lineVoltage = eic.GetLineVoltage();
sensorData.neutralCurrent = eic.GetLineCurrentN();
// sensorData.energy.exp =
xQueueSend(eicDataQueue, &sensorData, portMAX_DELAY);

Loading…
Cancel
Save