ESPHome 2026.2.1
Loading...
Searching...
No Matches
datetime_entity.h
Go to the documentation of this file.
1#pragma once
5#ifdef USE_DATETIME_DATETIME
6
9#include "esphome/core/time.h"
10
11#include "datetime_base.h"
12
13namespace esphome::datetime {
14
15#define LOG_DATETIME_DATETIME(prefix, type, obj) \
16 if ((obj) != nullptr) { \
17 ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \
18 LOG_ENTITY_ICON(TAG, prefix, *(obj)); \
19 }
20
21class DateTimeCall;
22class DateTimeEntity;
23
25 uint16_t year;
26 uint8_t month;
27 uint8_t day;
28 uint8_t hour;
29 uint8_t minute;
30 uint8_t second;
31
33 void apply(DateTimeEntity *datetime);
34} __attribute__((packed));
35
37 protected:
38 uint16_t year_;
39 uint8_t month_;
40 uint8_t day_;
41 uint8_t hour_;
42 uint8_t minute_;
43 uint8_t second_;
44
45 public:
46 void publish_state();
48
49 ESPTime state_as_esptime() const override;
50
51 const uint16_t &year = year_;
52 const uint8_t &month = month_;
53 const uint8_t &day = day_;
54 const uint8_t &hour = hour_;
55 const uint8_t &minute = minute_;
56 const uint8_t &second = second_;
57
58 protected:
59 friend class DateTimeCall;
61 friend class OnDateTimeTrigger;
62
63 virtual void control(const DateTimeCall &call) = 0;
64};
65
67 public:
68 explicit DateTimeCall(DateTimeEntity *parent) : parent_(parent) {}
69 void perform();
70 DateTimeCall &set_datetime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second);
72 DateTimeCall &set_datetime(const char *datetime, size_t len);
73 DateTimeCall &set_datetime(const char *datetime) { return this->set_datetime(datetime, strlen(datetime)); }
74 DateTimeCall &set_datetime(const std::string &datetime) {
75 return this->set_datetime(datetime.c_str(), datetime.size());
76 }
77 DateTimeCall &set_datetime(time_t epoch_seconds);
78
80 this->year_ = year;
81 return *this;
82 }
84 this->month_ = month;
85 return *this;
86 }
88 this->day_ = day;
89 return *this;
90 }
92 this->hour_ = hour;
93 return *this;
94 }
96 this->minute_ = minute;
97 return *this;
98 }
100 this->second_ = second;
101 return *this;
102 }
103
104 optional<uint16_t> get_year() const { return this->year_; }
105 optional<uint8_t> get_month() const { return this->month_; }
106 optional<uint8_t> get_day() const { return this->day_; }
107 optional<uint8_t> get_hour() const { return this->hour_; }
108 optional<uint8_t> get_minute() const { return this->minute_; }
109 optional<uint8_t> get_second() const { return this->second_; }
110
111 protected:
112 void validate_();
113
115
122};
123
124template<typename... Ts> class DateTimeSetAction : public Action<Ts...>, public Parented<DateTimeEntity> {
125 public:
127
128 void play(const Ts &...x) override {
129 auto call = this->parent_->make_call();
130
131 if (this->datetime_.has_value()) {
132 call.set_datetime(this->datetime_.value(x...));
133 }
134 call.perform();
135 }
136};
137
138#ifdef USE_TIME
139class OnDateTimeTrigger : public Trigger<>, public Component, public Parented<DateTimeEntity> {
140 public:
141 void loop() override;
142
143 protected:
144 bool matches_(const ESPTime &time) const;
145
147};
148#endif
149
150} // namespace esphome::datetime
151
152#endif // USE_DATETIME_DATETIME
virtual void play(const Ts &...x)=0
Helper class to easily give an object a parent of type T.
Definition helpers.h:1471
DateTimeCall & set_datetime(const char *datetime)
optional< uint16_t > get_year() const
DateTimeCall(DateTimeEntity *parent)
optional< uint8_t > get_hour() const
optional< uint8_t > get_month() const
DateTimeCall & set_year(uint16_t year)
DateTimeCall & set_day(uint8_t day)
optional< uint8_t > get_minute() const
optional< uint8_t > get_day() const
optional< uint8_t > get_second() const
DateTimeCall & set_month(uint8_t month)
DateTimeCall & set_datetime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
DateTimeCall & set_second(uint8_t second)
DateTimeCall & set_minute(uint8_t minute)
DateTimeCall & set_hour(uint8_t hour)
DateTimeCall & set_datetime(const std::string &datetime)
virtual void control(const DateTimeCall &call)=0
ESPTime state_as_esptime() const override
TEMPLATABLE_VALUE(ESPTime, datetime) void play(const Ts &...x) override
bool matches_(const ESPTime &time) const
uint8_t month
Definition date_entity.h:1
uint16_t year
Definition date_entity.h:0
uint8_t day
Definition date_entity.h:2
uint8_t second
uint8_t minute
uint8_t hour
esphome::datetime::DateEntity __attribute__
std::string size_t len
Definition helpers.h:692
A more user-friendly version of struct tm from time.h.
Definition time.h:17
DateTimeCall to_call(DateTimeEntity *datetime)
uint16_t x
Definition tt21100.cpp:5