34 void setWire(TwoWire& wire) { _wire = &wire; }
35 TwoWire& getWire()
const {
return *_wire; }
37 void setSKU(SKU sku) { _sku = sku; }
38 SKU getSKU()
const {
return _sku; }
45 Output getOutput()
const {
return _output; }
52 uint8_t getDeviceAddress()
const {
return _deviceAddress; }
62 uint8_t getChannel()
const {
return _channel; }
69 case SKU::DFR1071_GP8211S:
71 case SKU::DFR1073_GP8413:
73 case SKU::DFR0971_GP8403:
86 bool begin()
override;
95 const char* type()
const override {
return "dfrobot"; }
97 bool calculateMetrics(Metrics& metrics,
float gridVoltage,
float loadResistance)
const override {
98 return isEnabled() && _calculatePhaseControlMetrics(metrics, _dutyCycleFire, gridVoltage, loadResistance);
101#ifdef MYCILA_JSON_SUPPORT
107 void toJson(
const JsonObject& root)
const override {
108 Dimmer::toJson(root);
109 root[
"sku"] = _sku == SKU::DFR1071_GP8211S ?
"DFR1071_GP8211S" : _sku == SKU::DFR1073_GP8413 ?
"DFR1073_GP8413"
110 : _sku == SKU::DFR0971_GP8403 ?
"DFR0971_GP8403"
112 root[
"output"] = _output == Output::RANGE_0_5V ?
"0-5V" :
"0-10V";
113 root[
"i2c_address"] = _deviceAddress;
114 root[
"channel"] = _channel;
120 bool _apply()
override {
122 return _sendDutyCycle(_deviceAddress, 0) == ESP_OK;
124 uint16_t duty = _dutyCycleFire * ((1 <<
getResolution()) - 1);
125 return _sendDutyCycle(_deviceAddress, duty) == ESP_OK;
128 bool _calculateHarmonics(
float* array,
size_t n)
const override {
129 return _calculatePhaseControlHarmonics(_dutyCycleFire, array, n);
133 SKU _sku = SKU::UNKNOWN;
134 Output _output = Output::RANGE_0_10V;
135 TwoWire* _wire = &Wire;
136 uint8_t _deviceAddress;
137 uint8_t _channel = 0;
139 uint8_t _sendDutyCycle(uint8_t address, uint16_t duty);
140 uint8_t _sendOutput(uint8_t address, Output output);
141 uint8_t _send(uint8_t address, uint8_t reg, uint8_t* buffer,
size_t size);
142 uint8_t _test(uint8_t address);