ESPHome 2026.5.0-dev
Loading...
Searching...
No Matches
binary_sensor.h
Go to the documentation of this file.
1#pragma once
2
5#ifdef USE_BINARY_SENSOR_FILTER
7#endif
8
9#include <initializer_list>
10
11namespace esphome::binary_sensor {
12
13class BinarySensor;
14void log_binary_sensor(const char *tag, const char *prefix, const char *type, BinarySensor *obj);
15
16#define LOG_BINARY_SENSOR(prefix, type, obj) log_binary_sensor(TAG, prefix, LOG_STR_LITERAL(type), obj)
17
18#define SUB_BINARY_SENSOR(name) \
19 protected: \
20 binary_sensor::BinarySensor *name##_binary_sensor_{nullptr}; \
21\
22 public: \
23 void set_##name##_binary_sensor(binary_sensor::BinarySensor *binary_sensor) { \
24 this->name##_binary_sensor_ = binary_sensor; \
25 }
26
33class BinarySensor : public StatefulEntityBase<bool> {
34 public:
35 explicit BinarySensor() = default;
36
37 const bool &get_state() const override { return this->state; }
38 void set_trigger_on_initial_state(bool value) { this->trigger_on_initial_state_ = value; }
39
44 void publish_state(bool new_state);
45
51 void publish_initial_state(bool new_state);
52
53#ifdef USE_BINARY_SENSOR_FILTER
54 void add_filter(Filter *filter);
55 void add_filters(std::initializer_list<Filter *> filters);
56#endif
57
58 // ========== INTERNAL METHODS ==========
59 // (In most use cases you won't need these)
60 void send_state_internal(bool new_state) {
61 // Fast path: skip virtual dispatch when state hasn't changed
62 if (this->flags_.has_state && this->state == new_state)
63 return;
64 this->set_new_state(new_state);
65 }
66
68 virtual bool is_status_binary_sensor() const;
69
71 bool state{};
72
73 protected:
74 bool get_trigger_on_initial_state() const override { return this->trigger_on_initial_state_; }
75 void set_state_value(const bool &value) override { this->state = value; }
76
78#ifdef USE_BINARY_SENSOR_FILTER
80#endif
81
82 bool set_new_state(const optional<bool> &new_state) override;
83};
84
86 public:
88};
89
90} // namespace esphome::binary_sensor
struct esphome::EntityBase::EntityFlags flags_
void set_has_state(bool state)
Base class for entities that track a typed state value with change-detection and callbacks.
Base class for all binary_sensor-type classes.
void add_filters(std::initializer_list< Filter * > filters)
void publish_state(bool new_state)
Publish a new state to the front-end.
void send_state_internal(bool new_state)
bool state
The current state of this binary sensor. Also used as the backing storage for StatefulEntityBase.
void publish_initial_state(bool new_state)
Publish the initial state, this will not make the callback manager send callbacks and is meant only f...
void set_trigger_on_initial_state(bool value)
const bool & get_state() const override
void set_state_value(const bool &value) override
bool set_new_state(const optional< bool > &new_state) override
bool get_trigger_on_initial_state() const override
virtual bool is_status_binary_sensor() const
Return whether this binary sensor has outputted a state.
uint16_t type
void log_binary_sensor(const char *tag, const char *prefix, const char *type, BinarySensor *obj)
const char * tag
Definition log.h:74