Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "esphome.h"
- const int PIN_METER = D3;
- int previousState = 0;
- int currentState = 0;
- long pulseCount = 0;
- unsigned long pulseTime, lastTime;
- unsigned long debounceDelay = 50000;
- double power, elapsedkWh;
- int ppkWh = 1500;
- class EnergyMeterSensor : public Component, public Sensor {
- public:
- Sensor *power_sensor = new Sensor();
- Sensor *elapsedkWh_sensor = new Sensor();
- void setup() override
- {
- pinMode(PIN_METER, INPUT);
- digitalWrite(PIN_METER, HIGH);
- }
- void loop() override {
- currentState = digitalRead(PIN_METER);
- if (currentState != previousState)
- {
- digitalWrite(LED_BUILTIN, currentState);
- if (currentState == LOW)
- {
- lastTime = pulseTime;
- pulseTime = micros();
- if ((pulseTime - lastTime) > debounceDelay) {
- pulseCount++;
- power = (3600000000000.0 / (pulseTime - lastTime)) / ppkWh;
- elapsedkWh = (1.0 * pulseCount / (ppkWh));
- power_sensor->publish_state(power);
- elapsedkWh_sensor->publish_state(elapsedkWh);
- }
- }
- previousState = currentState;
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement