- adopt Arduino 3.x core builds
- remove 3rd party LinkedList lib dependency
- update examples with more detailed callback code
- example on how to create and use TimeSeries data collector
- code style formatting
- Averaging function for TimeSeries container
- add DummyPZEM004 device with emulated metrics
- add NullQ and NullCable objects
- trivial virtual destructors were missing body
- minor code refactoring
- added PZEM::resetEnergyCounter(), PZPool::resetEnergyCounter() methods
- fix: PZPool::addPZEM() method unable to create new PZEM objects in the pool
- some code and examples refactoring
- fix stale data calculation
- fix IDF build with timeseries feature for IDF 3/4 and arduino core 1.x and 2.x
- fix incorrect byte shift for 4-byte values
- Abstracted Message Queue class
- Add TimeSeries feature
- RingBuffer class for storing data structs (support mem allocation in PSRAM)
- Iterator class to traverse ring buffers
- TimeSeries object and container for custom sets of TS data
- a pool class could manage mixed pzem device types simultaneously
- support for PZEM003
- building under esp-idf
- pzem_cli - added 'energy reset', 'alarm get/set' features
- examples for Sigle/Multiple PZEMs
- pzem_cli example
- initial version