ESPHome 2026.11.0-dev
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 (log_entity_header(TAG, prefix, LOG_STR_LITERAL(type), (obj))) { \
17 LOG_ENTITY_ICON(TAG, prefix, *(obj)); \
18 }
19
20class DateTimeCall;
21class DateTimeEntity;
22
24 uint16_t year;
25 uint8_t month;
26 uint8_t day;
27 uint8_t hour;
28 uint8_t minute;
29 uint8_t second;
30
32 void apply(DateTimeEntity *datetime);
33} __attribute__((packed));
34
36 protected:
37 uint16_t year_;
38 uint8_t month_;
39 uint8_t day_;
40 uint8_t hour_;
41 uint8_t minute_;
42 uint8_t second_;
43
44 public:
45 void publish_state();
47
48 ESPTime state_as_esptime() const override;
49
50 const uint16_t &year = year_;
51 const uint8_t &month = month_;
52 const uint8_t &day = day_;
53 const uint8_t &hour = hour_;
54 const uint8_t &minute = minute_;
55 const uint8_t &second = second_;
56
57 protected:
58 friend class DateTimeCall;
60 friend class OnDateTimeTrigger;
61
62 virtual void control(const DateTimeCall &call) = 0;
63};
64
66 public:
67 explicit DateTimeCall(DateTimeEntity *parent) : parent_(parent) {}
68 void perform();
69 DateTimeCall &set_datetime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second);
71 DateTimeCall &set_datetime(const char *datetime, size_t len);
72 DateTimeCall &set_datetime(const char *datetime) { return this->set_datetime(datetime, strlen(datetime)); }
73 DateTimeCall &set_datetime(const std::string &datetime) {
74 return this->set_datetime(datetime.c_str(), datetime.size());
75 }
76 DateTimeCall &set_datetime(time_t epoch_seconds);
77
79 this->year_ = year;
80 return *this;
81 }
83 this->month_ = month;
84 return *this;
85 }
87 this->day_ = day;
88 return *this;
89 }
91 this->hour_ = hour;
92 return *this;
93 }
95 this->minute_ = minute;
96 return *this;
97 }
99 this->second_ = second;
100 return *this;
101 }
102
103 optional<uint16_t> get_year() const { return this->year_; }
104 optional<uint8_t> get_month() const { return this->month_; }
105 optional<uint8_t> get_day() const { return this->day_; }
106 optional<uint8_t> get_hour() const { return this->hour_; }
107 optional<uint8_t> get_minute() const { return this->minute_; }
108 optional<uint8_t> get_second() const { return this->second_; }
109
110 protected:
111 void validate_();
112
114
115 optional<uint16_t> year_;
116 optional<uint8_t> month_;
117 optional<uint8_t> day_;
118 optional<uint8_t> hour_;
119 optional<uint8_t> minute_;
120 optional<uint8_t> second_;
121};
122
124
125#ifdef USE_TIME
126class OnDateTimeTrigger final : public Trigger<>, public Component, public Parented<DateTimeEntity> {
127 public:
128 void loop() override;
129
130 protected:
131 bool matches_(const ESPTime &time) const;
132
133 optional<ESPTime> last_check_;
134};
135#endif
136
137} // namespace esphome::datetime
138
139#endif // USE_DATETIME_DATETIME
Helper class to easily give an object a parent of type T.
Definition helpers.h:2073
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
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__
const void size_t len
Definition hal.h:68
A more user-friendly version of struct tm from time.h.
Definition time.h:23
DateTimeCall to_call(DateTimeEntity *datetime)