button
This commit is contained in:
parent
a30cacabd6
commit
1bf07caf3a
|
@ -17,6 +17,7 @@ TYPES = {
|
||||||
"motion": SensorType.RATGDO_SENSOR_MOTION,
|
"motion": SensorType.RATGDO_SENSOR_MOTION,
|
||||||
"obstruction": SensorType.RATGDO_SENSOR_OBSTRUCTION,
|
"obstruction": SensorType.RATGDO_SENSOR_OBSTRUCTION,
|
||||||
"motor": SensorType.RATGDO_SENSOR_MOTOR,
|
"motor": SensorType.RATGDO_SENSOR_MOTOR,
|
||||||
|
"button": SensorType.RATGDO_SENSOR_BUTTON,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,8 @@ namespace ratgdo {
|
||||||
ESP_LOGCONFIG(TAG, " Type: Obstruction");
|
ESP_LOGCONFIG(TAG, " Type: Obstruction");
|
||||||
} else if (this->binary_sensor_type_ == SensorType::RATGDO_SENSOR_MOTOR) {
|
} else if (this->binary_sensor_type_ == SensorType::RATGDO_SENSOR_MOTOR) {
|
||||||
ESP_LOGCONFIG(TAG, " Type: Motor");
|
ESP_LOGCONFIG(TAG, " Type: Motor");
|
||||||
|
} else if (this->binary_sensor_type_ == SensorType::RATGDO_SENSOR_BUTTON) {
|
||||||
|
ESP_LOGCONFIG(TAG, " Type: Button");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void RATGDOBinarySensor::on_motion_state(MotionState state)
|
void RATGDOBinarySensor::on_motion_state(MotionState state)
|
||||||
|
@ -45,6 +47,13 @@ namespace ratgdo {
|
||||||
ESP_LOGD(TAG, "name: %s this->type_:%d on_motor_state: %d", this->get_name(), this->binary_sensor_type_, state);
|
ESP_LOGD(TAG, "name: %s this->type_:%d on_motor_state: %d", this->get_name(), this->binary_sensor_type_, state);
|
||||||
this->publish_state(state == MotorState::MOTOR_STATE_ON);
|
this->publish_state(state == MotorState::MOTOR_STATE_ON);
|
||||||
}
|
}
|
||||||
|
void RATGDOBinarySensor::on_button_state(ButtonState state)
|
||||||
|
{
|
||||||
|
if (this->binary_sensor_type_ != SensorType::RATGDO_SENSOR_BUTTON)
|
||||||
|
return;
|
||||||
|
ESP_LOGD(TAG, "name: %s this->type_:%d on_button_state: %d", this->get_name(), this->binary_sensor_type_, state);
|
||||||
|
this->publish_state(state == ButtonState::BUTTON_STATE_PRESSED);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ratgdo
|
} // namespace ratgdo
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|
|
@ -24,6 +24,7 @@ namespace ratgdo {
|
||||||
void on_motion_state(MotionState state) override;
|
void on_motion_state(MotionState state) override;
|
||||||
void on_obstruction_state(ObstructionState state) override;
|
void on_obstruction_state(ObstructionState state) override;
|
||||||
void on_motor_state(MotorState state) override;
|
void on_motor_state(MotorState state) override;
|
||||||
|
void on_button_state(ButtonState state) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SensorType binary_sensor_type_;
|
SensorType binary_sensor_type_;
|
||||||
|
|
|
@ -74,7 +74,7 @@ namespace ratgdo {
|
||||||
ESP_LOGCONFIG(TAG, " Rolling Code Counter: %d", this->rollingCodeCounter);
|
ESP_LOGCONFIG(TAG, " Rolling Code Counter: %d", this->rollingCodeCounter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RATGDOComponent::readRollingCode(bool& isStatus, uint8_t& door, uint8_t& light, uint8_t& lock, uint8_t& motion, uint8_t& obstruction, uint8_t& motor, uint16_t& openings)
|
void RATGDOComponent::readRollingCode(bool& isStatus, uint8_t& door, uint8_t& light, uint8_t& lock, uint8_t& motion, uint8_t& obstruction, uint8_t& motor, uint16_t& openings, uint8_t& button)
|
||||||
{
|
{
|
||||||
uint32_t rolling = 0;
|
uint32_t rolling = 0;
|
||||||
uint64_t fixed = 0;
|
uint64_t fixed = 0;
|
||||||
|
@ -112,6 +112,7 @@ namespace ratgdo {
|
||||||
} else if (cmd == 0x284) {
|
} else if (cmd == 0x284) {
|
||||||
motor = 1;
|
motor = 1;
|
||||||
} else if (cmd == 0x280) {
|
} else if (cmd == 0x280) {
|
||||||
|
button = bytes1 == 1
|
||||||
ESP_LOGD(TAG, "Pressed: %s", byte1 == 1 ? "pressed" : "released");
|
ESP_LOGD(TAG, "Pressed: %s", byte1 == 1 ? "pressed" : "released");
|
||||||
} else if (cmd == 0x48c) {
|
} else if (cmd == 0x48c) {
|
||||||
openings = (byte1 << 8) | byte2;
|
openings = (byte1 << 8) | byte2;
|
||||||
|
@ -294,6 +295,10 @@ namespace ratgdo {
|
||||||
sendMotionStatus();
|
sendMotionStatus();
|
||||||
this->motionState = MotionState::MOTION_STATE_CLEAR;
|
this->motionState = MotionState::MOTION_STATE_CLEAR;
|
||||||
}
|
}
|
||||||
|
if (this->buttonState != this->previousButtonState) {
|
||||||
|
sendButtonStatus();
|
||||||
|
this->previousButtonState = this->buttonState;
|
||||||
|
}
|
||||||
if (this->openings != this->previousOpenings) {
|
if (this->openings != this->previousOpenings) {
|
||||||
sendOpenings();
|
sendOpenings();
|
||||||
this->previousOpenings = this->openings;
|
this->previousOpenings = this->openings;
|
||||||
|
@ -350,6 +355,15 @@ namespace ratgdo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RATGDOComponent::sendButtonStatus()
|
||||||
|
{
|
||||||
|
ButtonState val = static_cast<ButtonState>(this->buttonState);
|
||||||
|
ESP_LOGD(TAG, "Button state %s", button_state_to_string(val));
|
||||||
|
for (auto* child : this->children_) {
|
||||||
|
child->on_button_state(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RATGDOComponent::sendMotorStatus()
|
void RATGDOComponent::sendMotorStatus()
|
||||||
{
|
{
|
||||||
MotorState val = static_cast<MotorState>(this->motorState);
|
MotorState val = static_cast<MotorState>(this->motorState);
|
||||||
|
|
|
@ -94,6 +94,7 @@ namespace ratgdo {
|
||||||
uint8_t previousLockState { LockState::LOCK_STATE_UNKNOWN };
|
uint8_t previousLockState { LockState::LOCK_STATE_UNKNOWN };
|
||||||
uint8_t previousObstructionState { ObstructionState::OBSTRUCTION_STATE_UNKNOWN };
|
uint8_t previousObstructionState { ObstructionState::OBSTRUCTION_STATE_UNKNOWN };
|
||||||
uint8_t previousMotorState { MotorState::MOTOR_STATE_UNKNOWN };
|
uint8_t previousMotorState { MotorState::MOTOR_STATE_UNKNOWN };
|
||||||
|
uint8_t previousButtonState { ButtonState::BUTTON_STATE_UNKNOWN };
|
||||||
|
|
||||||
uint8_t obstructionState { ObstructionState::OBSTRUCTION_STATE_UNKNOWN };
|
uint8_t obstructionState { ObstructionState::OBSTRUCTION_STATE_UNKNOWN };
|
||||||
uint8_t motionState { MotionState::MOTION_STATE_CLEAR };
|
uint8_t motionState { MotionState::MOTION_STATE_CLEAR };
|
||||||
|
@ -101,6 +102,7 @@ namespace ratgdo {
|
||||||
uint8_t lockState { LockState::LOCK_STATE_UNKNOWN };
|
uint8_t lockState { LockState::LOCK_STATE_UNKNOWN };
|
||||||
uint8_t lightState { LightState::LIGHT_STATE_UNKNOWN };
|
uint8_t lightState { LightState::LIGHT_STATE_UNKNOWN };
|
||||||
uint8_t doorState { DoorState::DOOR_STATE_UNKNOWN };
|
uint8_t doorState { DoorState::DOOR_STATE_UNKNOWN };
|
||||||
|
uint8_t buttonState { ButtonState::BUTTON_STATE_UNKNOWN };
|
||||||
|
|
||||||
void set_output_gdo_pin(InternalGPIOPin* pin) { this->output_gdo_pin_ = pin; };
|
void set_output_gdo_pin(InternalGPIOPin* pin) { this->output_gdo_pin_ = pin; };
|
||||||
void set_input_gdo_pin(InternalGPIOPin* pin) { this->input_gdo_pin_ = pin; };
|
void set_input_gdo_pin(InternalGPIOPin* pin) { this->input_gdo_pin_ = pin; };
|
||||||
|
@ -132,7 +134,7 @@ namespace ratgdo {
|
||||||
void lock();
|
void lock();
|
||||||
void unlock();
|
void unlock();
|
||||||
void sendLockStatus();
|
void sendLockStatus();
|
||||||
|
void sendButtonStatus();
|
||||||
void sendMotionStatus();
|
void sendMotionStatus();
|
||||||
void sendMotorStatus();
|
void sendMotorStatus();
|
||||||
void query();
|
void query();
|
||||||
|
@ -141,7 +143,7 @@ namespace ratgdo {
|
||||||
void getRollingCode(cmd command);
|
void getRollingCode(cmd command);
|
||||||
void gdoStateLoop();
|
void gdoStateLoop();
|
||||||
void statusUpdateLoop();
|
void statusUpdateLoop();
|
||||||
void readRollingCode(bool& isStatus, uint8_t& door, uint8_t& light, uint8_t& lock, uint8_t& motion, uint8_t& obstruction, uint8_t& motor, uint16_t& openings);
|
void readRollingCode(bool& isStatus, uint8_t& door, uint8_t& light, uint8_t& lock, uint8_t& motion, uint8_t& obstruction, uint8_t& motor, uint16_t& openings, uint8_t& button);
|
||||||
void incrementRollingCodeCounter();
|
void incrementRollingCodeCounter();
|
||||||
void sendRollingCodeChanged();
|
void sendRollingCodeChanged();
|
||||||
void setRollingCodeCounter(uint32_t counter);
|
void setRollingCodeCounter(uint32_t counter);
|
||||||
|
|
|
@ -87,5 +87,18 @@ namespace ratgdo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* button_state_to_string(ButtonState state)
|
||||||
|
{
|
||||||
|
switch (state) {
|
||||||
|
case BUTTON_STATE_PRESSED:
|
||||||
|
return "PRESSED";
|
||||||
|
case BUTTON_STATE_RELEASED:
|
||||||
|
return "RELEASED";
|
||||||
|
case BUTTON_STATE_UNKNOWN:
|
||||||
|
default:
|
||||||
|
return "UNKNOWN";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ratgdo
|
} // namespace ratgdo
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|
|
@ -70,5 +70,13 @@ namespace ratgdo {
|
||||||
};
|
};
|
||||||
const char* motor_state_to_string(MotorState state);
|
const char* motor_state_to_string(MotorState state);
|
||||||
|
|
||||||
|
/// Enum for all states the button can be in.
|
||||||
|
enum ButtonState : uint8_t {
|
||||||
|
BUTTON_STATE_PRESSED = 0,
|
||||||
|
BUTTON_STATE_RELEASED = 1,
|
||||||
|
BUTTON_STATE_UNKNOWN = 2,
|
||||||
|
};
|
||||||
|
const char* button_state_to_string(ButtonState state);
|
||||||
|
|
||||||
} // namespace ratgdo
|
} // namespace ratgdo
|
||||||
} // namespace esphome
|
} // namespace esphome
|
Loading…
Reference in New Issue