esphome/esphome/components/remote_base/hob2hood_protocol.h

87 lines
2.4 KiB
C
Raw Normal View History

2023-04-14 23:10:44 +02:00
#pragma once
#include "remote_base.h"
namespace esphome {
namespace remote_base {
enum Hob2HoodCommand : uint8_t {
HOB2HOOD_CMD_LIGHT_OFF = 0,
HOB2HOOD_CMD_LIGHT_ON,
HOB2HOOD_CMD_FAN_OFF,
HOB2HOOD_CMD_FAN_LOW,
HOB2HOOD_CMD_FAN_MEDIUM,
HOB2HOOD_CMD_FAN_HIGH,
HOB2HOOD_CMD_FAN_MAX,
HOB2HOOD_CMD_UNKNOWN,
};
struct Hob2HoodData {
Hob2HoodData() {}
Hob2HoodData(Hob2HoodCommand command) { this->command = command; }
Hob2HoodCommand command{HOB2HOOD_CMD_UNKNOWN};
2023-04-15 01:24:27 +02:00
bool operator==(const Hob2HoodData &rhs) const { return this->command == rhs.command; }
2023-04-14 23:10:44 +02:00
std::string to_string() const {
switch (this->command) {
case HOB2HOOD_CMD_LIGHT_OFF:
return "Light off";
case HOB2HOOD_CMD_LIGHT_ON:
return "Light on";
case HOB2HOOD_CMD_FAN_OFF:
return "Fan off";
case HOB2HOOD_CMD_FAN_LOW:
return "Fan low";
case HOB2HOOD_CMD_FAN_MEDIUM:
return "Fan medium";
case HOB2HOOD_CMD_FAN_HIGH:
return "Fan high";
case HOB2HOOD_CMD_FAN_MAX:
return "Fan max";
default:
return "Unknown";
}
}
};
class Hob2HoodProtocol : public RemoteProtocol<Hob2HoodData> {
public:
void encode(RemoteTransmitData *dst, const Hob2HoodData &data) override;
2023-04-15 01:24:27 +02:00
optional<Hob2HoodData> decode(RemoteReceiveData src) override;
2023-04-14 23:10:44 +02:00
void dump(const Hob2HoodData &data) override;
2023-04-15 01:24:27 +02:00
2023-04-14 23:10:44 +02:00
protected:
2023-04-15 10:26:28 +02:00
void encode_data_(RemoteTransmitData *dst, const std::vector<int8_t> &data) const;
2023-04-14 23:10:44 +02:00
bool expect_data_(RemoteReceiveData &src, int8_t data);
2023-04-15 10:26:28 +02:00
bool expect_data_(RemoteReceiveData &src, const std::vector<int8_t> &data);
2023-04-14 23:10:44 +02:00
};
2023-12-21 11:24:56 +01:00
using Hob2HoodTrigger = RemoteReceiverTrigger<Hob2HoodProtocol>;
2023-12-21 11:34:26 +01:00
using Hob2HoodDumper = RemoteReceiverDumper<Hob2HoodProtocol>;
2023-04-14 23:10:44 +02:00
class Hob2HoodBinarySensor : public RemoteReceiverBinarySensorBase {
public:
bool matches(RemoteReceiveData src) override {
auto data = Hob2HoodProtocol().decode(src);
return data.has_value() && data.value() == this->data_;
}
void set_command(const Hob2HoodCommand command) { this->data_.command = command; }
2023-04-15 01:24:27 +02:00
2023-04-14 23:10:44 +02:00
protected:
Hob2HoodData data_;
};
template<typename... Ts> class Hob2HoodAction : public RemoteTransmitterActionBase<Ts...> {
TEMPLATABLE_VALUE(Hob2HoodCommand, command)
void encode(RemoteTransmitData *dst, Ts... x) override {
Hob2HoodData data;
data.command = this->command_.value(x...);
Hob2HoodProtocol().encode(dst, data);
}
};
} // namespace remote_base
} // namespace esphome