// -----------------------------------------------------------------------------
|
|
// Abstract emon sensor class (other sensor classes extend this class)
|
|
// Copyright (C) 2017-2019 by Xose Pérez <xose dot perez at gmail dot com>
|
|
// -----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "../sensor.h"
|
|
#include "BaseSensor.h"
|
|
|
|
class BaseEmonSensor : public BaseSensor {
|
|
|
|
public:
|
|
|
|
BaseEmonSensor(size_t devices) :
|
|
_energy(devices),
|
|
_devices(devices)
|
|
{}
|
|
|
|
BaseEmonSensor() :
|
|
BaseEmonSensor(1)
|
|
{}
|
|
|
|
unsigned char type() {
|
|
return sensor::type::Emon;
|
|
}
|
|
|
|
// --- energy monitoring --
|
|
|
|
virtual void resizeDevices(size_t devices) {
|
|
_energy.resize(devices);
|
|
_devices = devices;
|
|
}
|
|
|
|
virtual size_t countDevices() {
|
|
return _devices;
|
|
}
|
|
|
|
virtual void resetEnergy(unsigned char index, sensor::Energy energy) {
|
|
_energy[index] = energy;
|
|
}
|
|
|
|
virtual void resetEnergy(unsigned char index) {
|
|
_energy[index].reset();
|
|
};
|
|
|
|
virtual void resetEnergy() {
|
|
for (auto& energy : _energy) {
|
|
energy.reset();
|
|
}
|
|
}
|
|
|
|
virtual sensor::Energy totalEnergy(unsigned char index) {
|
|
return _energy[index];
|
|
}
|
|
|
|
virtual sensor::Energy totalEnergy() {
|
|
return totalEnergy(0);
|
|
}
|
|
|
|
virtual double getEnergy(unsigned char index) {
|
|
return _energy[index].asDouble();
|
|
}
|
|
|
|
virtual double getEnergy() {
|
|
return getEnergy(0);
|
|
}
|
|
|
|
// --- configuration ---
|
|
|
|
// when sensor needs explicit mains voltage value
|
|
virtual void setVoltage(double) {}
|
|
virtual double getVoltage() { return 0.0; }
|
|
virtual double getVoltage(unsigned char index) { return getVoltage(); }
|
|
|
|
// when sensor implements ratios / multipliers
|
|
virtual void setCurrentRatio(double) {}
|
|
virtual void setVoltageRatio(double) {}
|
|
virtual void setPowerRatio(double) {}
|
|
virtual void setEnergyRatio(double) {}
|
|
|
|
// when sensor implements ratios / multipliers
|
|
virtual void setCurrentRatio(unsigned char index, double) {}
|
|
virtual void setVoltageRatio(unsigned char index, double) {}
|
|
virtual void setPowerRatio(unsigned char index, double) {}
|
|
virtual void setEnergyRatio(unsigned char index, double) {}
|
|
|
|
// when sensor implements a single device
|
|
virtual double getCurrentRatio() { return 0.0; }
|
|
virtual double getVoltageRatio() { return 0.0; }
|
|
virtual double getPowerRatio() { return 0.0; }
|
|
virtual double getEnergyRatio() { return 0.0; }
|
|
|
|
// when sensor implements more than one device
|
|
virtual double getCurrentRatio(unsigned char index) { return getCurrentRatio(); }
|
|
virtual double getVoltageRatio(unsigned char index) { return getCurrentRatio(); }
|
|
virtual double getPowerRatio(unsigned char index) { return getCurrentRatio(); }
|
|
virtual double getEnergyRatio(unsigned char index) { return getCurrentRatio(); }
|
|
|
|
virtual void expectedCurrent(double value) {}
|
|
virtual void expectedVoltage(unsigned int value) {}
|
|
virtual void expectedPower(unsigned int value) {}
|
|
|
|
virtual void resetCalibration(double value) {}
|
|
virtual void resetRatios() {}
|
|
|
|
protected:
|
|
|
|
std::vector<sensor::Energy> _energy;
|
|
size_t _devices;
|
|
|
|
};
|
|
|