esphome-ratgdo/components/ratgdo/dry_contact.h

79 lines
2.2 KiB
C++

#pragma once
#include "esphome/core/defines.h"
#include "SoftwareSerial.h" // Using espsoftwareserial https://github.com/plerup/espsoftwareserial
#include "esphome/core/gpio.h"
#include "esphome/core/optional.h"
#include "callbacks.h"
#include "observable.h"
#include "protocol.h"
#include "ratgdo_state.h"
namespace esphome {
class Scheduler;
class InternalGPIOPin;
namespace ratgdo {
namespace dry_contact {
using namespace esphome::ratgdo::protocol;
using namespace esphome::gpio;
class DryContact : public Protocol {
public:
void setup(RATGDOComponent* ratgdo, Scheduler* scheduler, InternalGPIOPin* rx_pin, InternalGPIOPin* tx_pin);
void loop();
void dump_config();
void sync();
void light_action(LightAction action);
void lock_action(LockAction action);
void door_action(DoorAction action);
void set_open_limit(bool state);
void set_close_limit(bool state);
void send_door_state();
void set_discrete_open_pin(InternalGPIOPin* pin)
{
this->discrete_open_pin_ = pin;
this->discrete_open_pin_->setup();
this->discrete_open_pin_->pin_mode(gpio::FLAG_OUTPUT);
}
void set_discrete_close_pin(InternalGPIOPin* pin)
{
this->discrete_close_pin_ = pin;
this->discrete_close_pin_->setup();
this->discrete_close_pin_->pin_mode(gpio::FLAG_OUTPUT);
}
Result call(Args args);
const Traits& traits() const { return this->traits_; }
protected:
Traits traits_;
InternalGPIOPin* tx_pin_;
InternalGPIOPin* rx_pin_;
InternalGPIOPin* discrete_open_pin_;
InternalGPIOPin* discrete_close_pin_;
RATGDOComponent* ratgdo_;
Scheduler* scheduler_;
DoorState door_state_;
bool open_limit_reached_;
bool last_open_limit_;
bool close_limit_reached_;
bool last_close_limit_;
};
} // namespace dry_contact
} // namespace ratgdo
} // namespace esphome