diff --git a/README.md b/README.md
index f053e5b2..9245bbf1 100644
--- a/README.md
+++ b/README.md
@@ -85,9 +85,6 @@ You can also use "{identifier}" as place holder in the topic. It will be transla
After flashing the firmware via serial do a hard reset of the device (unplug & plug). There is an issue with the ESP.reset() method. Check [https://github.com/esp8266/Arduino/issues/1017][4] for more info.
-Current version of ESP8266httpUpdate restarts the modules after SPIFFS update, thus preventing the firmware to be updated too. There is a recent commit fixing that which is not yet pushed to PLatformIO. Check [Fix example for ESP8266httpUpdate][5] for more info. Anyway, current expected behaviour is to not resetting the board from the ESP8266httpUpdate class (comment out line 300 in ```ESP8266httpUpdate.cpp```).
-
-
[1]: https://www.itead.cc/sonoff-wifi-wireless-switch.html
[2]: http://tinkerman.cat/adding-rf-to-a-non-rf-itead-sonoff
[3]: http://www.platformio.org
diff --git a/code/lib/EmonLiteESP/EmonLiteESP.cpp b/code/lib/EmonLiteESP/EmonLiteESP.cpp
deleted file mode 100644
index 47f6a16c..00000000
--- a/code/lib/EmonLiteESP/EmonLiteESP.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- EmonLiteESP
-
- Energy Monitor Library for ESP8266 based on EmonLib
- Currently only support current sensing
-*/
-
-#include "Arduino.h"
-#include "EmonLiteESP.h"
-
-void EnergyMonitor::initCurrent(current_c callback, double ref, double ratio) {
-
- _currentCallback = callback;
- _referenceVoltage = ref;
- _currentRatio = ratio;
- _currentMidPoint = (ADC_COUNTS>>1);
- calculatePrecision();
- warmup();
-
-};
-
-void EnergyMonitor::warmup() {
- int sample;
- for (unsigned int n = 0; n < WARMUP_COUNTS; n++) {
- sample = _currentCallback();
- _currentMidPoint = (_currentMidPoint + (sample - _currentMidPoint) / ADC_COUNTS);
- }
-}
-
-void EnergyMonitor::calculatePrecision() {
- _currentFactor = _currentRatio * _referenceVoltage / ADC_COUNTS;
- _precision = 0;
- _multiplier = 1;
- while (_multiplier * _currentFactor < 1) {
- _multiplier *= 10;
- ++_precision;
- }
- --_precision;
- _multiplier /= 10;
-}
-
-void EnergyMonitor::setReference(double ref) {
- _referenceVoltage = ref;
-}
-
-void EnergyMonitor::setCurrentRatio(double ratio) {
- _currentRatio = ratio;
-}
-
-byte EnergyMonitor::getPrecision() {
- return _precision;
-}
-
-void EnergyMonitor::setPrecision(byte precision) {
- _precision = precision;
- _multiplier = 1;
- for (byte i=0; i<_precision; i++) _multiplier *= 10;
-}
-
-double EnergyMonitor::getCurrent(unsigned int samples) {
-
- int sample;
- double filtered;
- double sum;
-
- //Serial.print("_currentMidPoint: "); Serial.println(_currentMidPoint);
-
- for (unsigned int n = 0; n < samples; n++) {
-
- // Read analog value
- sample = _currentCallback();
-
- // Digital low pass filter extracts the VDC offset
- _currentMidPoint = (_currentMidPoint + (sample - _currentMidPoint) / ADC_COUNTS);
- filtered = sample - _currentMidPoint;
-
- // Root-mean-square method
- sum += (filtered * filtered);
-
- }
-
- double rms = sqrt(sum / samples) - COUNT_OFFSET;
- if (rms < 0) rms = 0;
- double current = _currentFactor * rms;
-
- /*
- Serial.print("_currentMidPoint: "); Serial.println(_currentMidPoint);
- Serial.print("sample : "); Serial.println(sample);
- Serial.print("sum : "); Serial.println(sum);
- Serial.print("samples : "); Serial.println(samples);
- Serial.print("rms1 : "); Serial.println(sqrt(sum / samples));
- Serial.print("rms2 : "); Serial.println(rms);
- Serial.print("current : "); Serial.println(current);
- */
-
- current = round(current * _multiplier) / _multiplier;
- return current;
-
-};
diff --git a/code/lib/EmonLiteESP/EmonLiteESP.h b/code/lib/EmonLiteESP/EmonLiteESP.h
deleted file mode 100644
index e0f10ece..00000000
--- a/code/lib/EmonLiteESP/EmonLiteESP.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- EmonLiteESP
-
- Energy Monitor Library for ESP8266 based on EmonLib
- Currently only support current sensing
-*/
-
-#ifndef EmonLiteESP_h
-#define EmonLiteESP_h
-
-#define ADC_BITS 10
-#define ADC_COUNTS (1<.
#define ENABLE_NOFUSS 1
#define ENABLE_MQTT 1
#define ENABLE_WEBSERVER 1
-#define ENABLE_ENERGYMONITOR 0
+#define ENABLE_POWERMONITOR 1
#define ENABLE_DHT 0
#define APP_NAME "Espurna"
@@ -109,9 +109,11 @@ along with this program. If not, see .
#define WIFI_STATUS_CONNECTED 1
#define WIFI_STATUS_AP 2
-#define CURRENT_PIN A0
+#define CURRENT_PIN 0
+#define ADC_BITS 10
#define REFERENCE_VOLTAGE 1.0
#define CURRENT_PRECISION 1
+#define CURRENT_OFFSET 0.3
#define SAMPLES_X_MEASUREMENT 1000
#define MEASUREMENT_INTERVAL 10000
#define MEASUREMENTS_X_MESSAGE 6
@@ -138,7 +140,7 @@ DebounceEvent button1 = false;
char mqttTemperatureTopic[40];
char mqttHumidityTopic[40];
#endif
- #if ENABLE_ENERGYMONITOR
+ #if ENABLE_POWERMONITOR
char mqttPowerTopic[40];
#endif
bool isMQTTMessage = false;
@@ -156,8 +158,8 @@ DebounceEvent button1 = false;
double humidity;
#endif
-#if ENABLE_ENERGYMONITOR
- EnergyMonitor monitor;
+#if ENABLE_POWERMONITOR
+ EmonLiteESP power;
double current;
#endif
@@ -707,7 +709,7 @@ void wifiLoop() {
root["rfDevice"] = config.rfDevice;
#endif
- #if ENABLE_ENERGYMONITOR
+ #if ENABLE_POWERMONITOR
root["pwMainsVoltage"] = config.pwMainsVoltage;
root["pwCurrentRatio"] = config.pwCurrentRatio;
#endif
@@ -730,7 +732,7 @@ void wifiLoop() {
#if ENABLE_MQTT
root["mqtt"] = mqtt.connected() ? 1: 0;
#endif
- #if ENABLE_ENERGYMONITOR
+ #if ENABLE_POWERMONITOR
root["power"] = current * config.pwMainsVoltage.toFloat();
#endif
#if ENABLE_DHT
@@ -776,7 +778,7 @@ void wifiLoop() {
if (server.hasArg("rfChannel")) config.rfChannel = server.arg("rfChannel");
if (server.hasArg("rfDevice")) config.rfDevice = server.arg("rfDevice");
#endif
- #if ENABLE_ENERGYMONITOR
+ #if ENABLE_POWERMONITOR
if (server.hasArg("pwMainsVoltage")) config.pwMainsVoltage = server.arg("pwMainsVoltage");
if (server.hasArg("pwCurrentRatio")) config.pwCurrentRatio = server.arg("pwCurrentRatio");
#endif
@@ -787,8 +789,8 @@ void wifiLoop() {
#if ENABLE_RF
rfBuildCodes();
#endif
- #if ENABLE_ENERGYMONITOR
- monitor.setCurrentRatio(config.pwCurrentRatio.toFloat());
+ #if ENABLE_POWERMONITOR
+ power.setCurrentRatio(config.pwCurrentRatio.toFloat());
#endif
wifiSetup(true);
@@ -859,7 +861,7 @@ void wifiLoop() {
mqttIPTopic[tmp.length()+1] = 0;
// Get publish current topic
- #if ENABLE_ENERGYMONITOR
+ #if ENABLE_POWERMONITOR
tmp = base + "/power";
tmp.toCharArray(mqttPowerTopic, tmp.length()+1);
mqttPowerTopic[tmp.length()+1] = 0;
@@ -1060,19 +1062,19 @@ void wifiLoop() {
// Energy Monitor
// -----------------------------------------------------------------------------
-#if ENABLE_ENERGYMONITOR
+#if ENABLE_POWERMONITOR
#if ENABLE_MQTT
- unsigned int getCurrent() {
+ unsigned int currentCallback() {
return analogRead(CURRENT_PIN);
}
- void energyMonitorSetup() {
- monitor.initCurrent(getCurrent, REFERENCE_VOLTAGE, config.pwCurrentRatio.toFloat());
- monitor.setPrecision(CURRENT_PRECISION);
+ void powerMonitorSetup() {
+ power.initCurrent(currentCallback, ADC_BITS, REFERENCE_VOLTAGE, config.pwCurrentRatio.toFloat());
+ power.setPrecision(CURRENT_PRECISION);
}
- void energyMonitorLoop() {
+ void powerMonitorLoop() {
static unsigned long next_measurement = millis();
static byte measurements = 0;
@@ -1088,7 +1090,8 @@ void wifiLoop() {
if (!digitalRead(RELAY_PIN)) {
current = 0;
} else {
- current = monitor.getCurrent(SAMPLES_X_MEASUREMENT);
+ current = power.getCurrent(SAMPLES_X_MEASUREMENT);
+ current -= CURRENT_OFFSET;
}
if (measurements == 0) {
@@ -1208,8 +1211,8 @@ void setup() {
#if ENABLE_DHT
dhtSetup();
#endif
- #if ENABLE_ENERGYMONITOR
- energyMonitorSetup();
+ #if ENABLE_POWERMONITOR
+ powerMonitorSetup();
#endif
}
@@ -1237,8 +1240,8 @@ void loop() {
#if ENABLE_DHT
dhtLoop();
#endif
- #if ENABLE_ENERGYMONITOR
- energyMonitorLoop();
+ #if ENABLE_POWERMONITOR
+ powerMonitorLoop();
#endif
delay(1);