esphome/my_components/neopool/filtration_mode.h

57 lines
1.5 KiB
C++

#pragma once
#include <utility>
#include <vector>
#include "esphome/components/modbus_controller/modbus_controller.h"
#include "esphome/components/select/select.h"
#include "esphome/core/component.h"
namespace esphome {
namespace neopool {
/**
* @brief Controls the filtration mode of the Neopool device connected via modbus
*
* Possible states:
* - automatic
* - off
* - slow
* - medium
* - fast
*
* To read the state:
* reads relay register 0x010E, with bitmasks
* - 0x0100 slow
* - 0x0200 medium
* - 0x0400 high
* - 0x0010 filtering
* auto / non-auto: 0x0411:
* - MBV_PAR_FILT_MANUAL = 0, // This mode allows to turn the filtration (and all other systems that depend on it) on and off manually.
* MBV_PAR_FILT_AUTO = 1, // This mode allows filtering to be turned on and off according to the settings of the TIMER1, TIMER2 and TIMER3 timers.
*
* To set the manual state:
* set filtration speed to addr 0x050F (MBF_PAR_FILTRATION_CONF), register needs to be read first to be correctly modified
* set MBF_EXEC to 1
* set filtration mode to manual (=0) via MBF_PAR_FILT_MODE (0x0411)
* set manual mode filtration to on 0x0413 to 0, 1, 2, ?
*
*/
class FiltrationMode : public Component, public select::Select {
public:
void set_parent(ModbusController *const parent) { this->parent_ = parent; }
void dump_config() override;
void control(const std::string &value) override;
protected:
ModbusController *parent_;
};
} // namespace modbus_controller
} // namespace esphome