Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 40 additions & 4 deletions LSSensor.ino
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,31 @@ SoftwareSerial serial(4, 5);
EspDrv espDrv(&serial);
MQTTClient mqttClient(&espDrv, MQTTMessageReceive);
char data[32];

int wattMetter1Counter = 0;
int wattMetter2Counter = 0;
unsigned long lastSendToMQTT = 0;

unsigned long lastTime = 0;
bool closeRequired = false;

#pragma pack(push, 1)
struct DiagData {
uint32_t uptime;
uint16_t freeRam;
uint16_t wifiReconn;
uint16_t mqttFailCount;
uint8_t resetReason;
uint16_t loopMaxMs;
};
#pragma pack(pop)

DiagData currentDiagData;

extern int __heap_start, *__brkval;
int freeRam() {
int v;
return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
}

void WattMetter1Received()
{
unsigned long time = millis();
Expand Down Expand Up @@ -53,14 +71,20 @@ bool Connect()
if(wifiStatus == WL_DISCONNECTED || wifiStatus == WL_IDLE_STATUS)
{
wifiConnected = espDrv.Connect(WifiSSID, WifiPassword);
if(currentDiagData.wifiReconn < 65535)
{
currentDiagData.wifiReconn++;
}
}
if(wifiConnected)
{

bool isConnected = mqttClient.IsConnected();
if(!isConnected)
{
return mqttClient.Connect(mqttConnectData);
bool ok = mqttClient.Connect(mqttConnectData);
if(!ok && currentDiagData.mqttFailCount < 65535) currentDiagData.mqttFailCount++;
return ok;
}
else
{
Expand All @@ -83,6 +107,8 @@ void OnBusy(uint8_t count)
}

void setup() {
currentDiagData.resetReason = MCUSR;
MCUSR = 0;
// put your setup code here, to run once:
pinMode(LSSensorPIN1, INPUT);
pinMode(LSSensorPIN2, INPUT);
Expand All @@ -99,14 +125,14 @@ void setup() {
}

void loop() {
unsigned long currentMillis = millis();
wdt_reset();
if(closeRequired)
{
espDrv.Close();
closeRequired = false;
}
mqttClient.Loop();
unsigned long currentMillis = millis();
if(currentMillis - lastSendToMQTT >= 300000)
{
detachInterrupt(digitalPinToInterrupt(LSSensorPIN1));
Expand All @@ -121,9 +147,19 @@ void loop() {

wattMetter1Counter = 0;
wattMetter2Counter = 0;

currentDiagData.uptime = currentMillis / 60000UL;
currentDiagData.freeRam = freeRam();
mqttClient.Publish(LSSENSOR_DIAG, (const uint8_t*)&currentDiagData, sizeof(DiagData), false);
currentDiagData.loopMaxMs = 0;
}
lastSendToMQTT = currentMillis;
attachInterrupt(digitalPinToInterrupt(LSSensorPIN1), WattMetter1Received, RISING);
attachInterrupt(digitalPinToInterrupt(LSSensorPIN2), WattMetter2Received, RISING);
}
unsigned long iterDur = millis() - currentMillis;
if(iterDur > currentDiagData.loopMaxMs)
{
currentDiagData.loopMaxMs = (iterDur > 65535UL) ? 65535 : (uint16_t)iterDur;
}
}
1 change: 1 addition & 0 deletions config_default.h
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
#define ELCONSUMPTION "ELCONSUMPTION"
#define LSSENSOR_DIAG "LSSENSOR_DIAG"
Loading