- Make temp sensors get the temp by address
- publish data
pull/2/head
Andrew Woodlee 3 months ago
parent 16c5f212a0
commit ab0b6a6424

@ -94,6 +94,9 @@ struct tempSensors {
DallasTemperature oil, cabinet;
};
DeviceAddress oilTempSensorAddr;
DeviceAddress cabinetTempSensorAddr;
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oilTempBusOneWire(oilTempBus);
OneWire cabinetTempBusOneWire(cabinetTempBus);
@ -135,21 +138,24 @@ struct xformerMonitorData {
// End data structs for queue
// Global to be used in ISR
xformerMonitorData sensorData;
hw_timer_t *readEICTimer = NULL;
xformerMonitorData sensorData;
// Variables for tasks
TaskHandle_t taskReadEIC;
TaskHandle_t taskSendData;
QueueHandle_t eicDataQueue;
// End variables for tasks
// Functions for tasks
void readEICData( void * pvParameters );
void sendSensorDataOverMQTT( void * pvParameters );
// End functions for tasks
// Timer variable and function
hw_timer_t *readEICTimer = NULL;
void IRAM_ATTR ReadData();
// End timer variable and function
struct xformerMonConfigData {
char *wifiSsid;

@ -32,8 +32,12 @@ void setup()
#endif
// Start the DS18B20 sensors
// monitorTempSensors.cabinet.begin();
// monitorTempSensors.oil.begin();
monitorTempSensors.cabinet.begin();
monitorTempSensors.oil.begin();
// Get each DS18B20 sensors' address
monitorTempSensors.oil.getAddress(oilTempSensorAddr, 0);
monitorTempSensors.cabinet.getAddress(cabinetTempSensorAddr, 0);
setupMQTTClient();
@ -186,33 +190,36 @@ void sendSensorDataOverMQTT(void *pvParameters)
int emptySpaces = uxQueueSpacesAvailable(eicDataQueue);
for (;;)
{
xQueueReceive(eicDataQueue, &mqttSensorData, portMAX_DELAY);
char timeBuffer[32];
strftime(timeBuffer, sizeof(timeBuffer), "%FT%TZ", mqttSensorData.timeInfo);
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();
if (messagesWaiting > 2)
{
xQueueReceive(eicDataQueue, &mqttSensorData, portMAX_DELAY);
char timeBuffer[32];
strftime(timeBuffer, sizeof(timeBuffer), "%FT%TZ", mqttSensorData.timeInfo);
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;
char buffer[256];
size_t n = serializeJson(mqttJsonData, buffer);
mqttClient.publish("xfmormermon/", buffer, n);
}
mqttClient.loop();
delay(10); // <- fixes some issues with WiFi stability
@ -221,7 +228,6 @@ void sendSensorDataOverMQTT(void *pvParameters)
{
connect();
}
messagesWaiting = uxQueueMessagesWaiting(eicDataQueue);
emptySpaces = uxQueueMessagesWaiting(eicDataQueue);
}
@ -237,13 +243,13 @@ void IRAM_ATTR ReadData(){
// Obtain DS18B20 sensor data
if (timesEnteredISR == 60)
{
// TODO: find and hard-code addresses of sensors
timesEnteredISR = 0;
monitorTempSensors.cabinet.requestTemperatures();
monitorTempSensors.oil.requestTemperatures();
// get cabinet temp sensor data
// sensorData.temps.cabinetTemp = tempSensors.getTempC();
sensorData.temps.cabinet = monitorTempSensors.cabinet.getTempC(cabinetTempSensorAddr);
// get oil temp sensor data
// sensorData.temps.oilTemp = tempSensors.getTempC();
sensorData.temps.oil = monitorTempSensors.oil.getTempC(oilTempSensorAddr);
}

Loading…
Cancel
Save