ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
sim800l.h
Go to the documentation of this file.
1#pragma once
2
3#include <utility>
4
7#ifdef USE_BINARY_SENSOR
9#endif
10#ifdef USE_SENSOR
12#endif
15
16namespace esphome::sim800l {
17
18const uint16_t SIM800L_READ_BUFFER_LENGTH = 1024;
19
48
50 public:
52 void update() override;
53 void loop() override;
54 void dump_config() override;
55#ifdef USE_BINARY_SENSOR
57 registered_binary_sensor_ = registered_binary_sensor;
58 }
59#endif
60#ifdef USE_SENSOR
61 void set_rssi_sensor(sensor::Sensor *rssi_sensor) { rssi_sensor_ = rssi_sensor; }
62#endif
63 template<typename F> void add_on_sms_received_callback(F &&callback) {
64 this->sms_received_callback_.add(std::forward<F>(callback));
65 }
66 template<typename F> void add_on_incoming_call_callback(F &&callback) {
67 this->incoming_call_callback_.add(std::forward<F>(callback));
68 }
69 template<typename F> void add_on_call_connected_callback(F &&callback) {
70 this->call_connected_callback_.add(std::forward<F>(callback));
71 }
72 template<typename F> void add_on_call_disconnected_callback(F &&callback) {
73 this->call_disconnected_callback_.add(std::forward<F>(callback));
74 }
75 template<typename F> void add_on_ussd_received_callback(F &&callback) {
76 this->ussd_received_callback_.add(std::forward<F>(callback));
77 }
78 void send_sms(const std::string &recipient, const std::string &message);
79 void send_ussd(const std::string &ussd_code);
80 void dial(const std::string &recipient);
81 void connect();
82 void disconnect();
83
84 protected:
85 void send_cmd_(const std::string &message);
86 void parse_cmd_(std::string message);
87 void set_registered_(bool registered);
88
89#ifdef USE_BINARY_SENSOR
91#endif
92
93#ifdef USE_SENSOR
95#endif
96 std::string sender_;
97 std::string message_;
99 size_t read_pos_{0};
100 uint8_t parse_index_{0};
101 uint8_t watch_dog_{0};
102 bool expect_ack_{false};
104 bool registered_{false};
105
106 std::string recipient_;
107 std::string outgoing_message_;
108 std::string ussd_;
109 bool send_pending_{false};
110 bool dial_pending_{false};
111 bool connect_pending_{false};
114 uint8_t call_state_{6};
115
116 CallbackManager<void(std::string, std::string)> sms_received_callback_;
121};
122
123template<typename... Ts> class Sim800LSendSmsAction : public Action<Ts...> {
124 public:
126 TEMPLATABLE_VALUE(std::string, recipient)
127 TEMPLATABLE_VALUE(std::string, message)
128
129 void play(const Ts &...x) {
130 auto recipient = this->recipient_.value(x...);
131 auto message = this->message_.value(x...);
132 this->parent_->send_sms(recipient, message);
133 }
134
135 protected:
137};
138
139template<typename... Ts> class Sim800LSendUssdAction : public Action<Ts...> {
140 public:
142 TEMPLATABLE_VALUE(std::string, ussd)
143
144 void play(const Ts &...x) {
145 auto ussd_code = this->ussd_.value(x...);
146 this->parent_->send_ussd(ussd_code);
147 }
148
149 protected:
151};
152
153template<typename... Ts> class Sim800LDialAction : public Action<Ts...> {
154 public:
156 TEMPLATABLE_VALUE(std::string, recipient)
157
158 void play(const Ts &...x) {
159 auto recipient = this->recipient_.value(x...);
160 this->parent_->dial(recipient);
161 }
162
163 protected:
165};
166template<typename... Ts> class Sim800LConnectAction : public Action<Ts...> {
167 public:
169
170 void play(const Ts &...x) { this->parent_->connect(); }
171
172 protected:
174};
175
176template<typename... Ts> class Sim800LDisconnectAction : public Action<Ts...> {
177 public:
179
180 void play(const Ts &...x) { this->parent_->disconnect(); }
181
182 protected:
184};
185
186} // namespace esphome::sim800l
virtual void play(const Ts &...x)=0
This class simplifies creating components that periodically check a state.
Definition component.h:585
Base class for all binary_sensor-type classes.
Base-class for all sensors.
Definition sensor.h:47
void add_on_call_disconnected_callback(F &&callback)
Definition sim800l.h:72
sensor::Sensor * rssi_sensor_
Definition sim800l.h:94
char read_buffer_[SIM800L_READ_BUFFER_LENGTH]
Definition sim800l.h:98
CallbackManager< void(std::string)> ussd_received_callback_
Definition sim800l.h:120
void add_on_sms_received_callback(F &&callback)
Definition sim800l.h:63
void send_cmd_(const std::string &message)
Definition sim800l.cpp:61
CallbackManager< void(std::string, std::string)> sms_received_callback_
Definition sim800l.h:116
void add_on_ussd_received_callback(F &&callback)
Definition sim800l.h:75
CallbackManager< void(std::string)> incoming_call_callback_
Definition sim800l.h:117
binary_sensor::BinarySensor * registered_binary_sensor_
Definition sim800l.h:90
CallbackManager< void()> call_connected_callback_
Definition sim800l.h:118
void set_registered_(bool registered)
Definition sim800l.cpp:486
void add_on_incoming_call_callback(F &&callback)
Definition sim800l.h:66
void send_sms(const std::string &recipient, const std::string &message)
Definition sim800l.cpp:458
void update() override
Retrieve the latest sensor values. This operation takes approximately 16ms.
Definition sim800l.cpp:13
void add_on_call_connected_callback(F &&callback)
Definition sim800l.h:69
void set_rssi_sensor(sensor::Sensor *rssi_sensor)
Definition sim800l.h:61
void parse_cmd_(std::string message)
Definition sim800l.cpp:69
CallbackManager< void()> call_disconnected_callback_
Definition sim800l.h:119
void dial(const std::string &recipient)
Definition sim800l.cpp:479
void send_ussd(const std::string &ussd_code)
Definition sim800l.cpp:464
void set_registered_binary_sensor(binary_sensor::BinarySensor *registered_binary_sensor)
Definition sim800l.h:56
Sim800LConnectAction(Sim800LComponent *parent)
Definition sim800l.h:168
Sim800LDialAction(Sim800LComponent *parent)
Definition sim800l.h:155
TEMPLATABLE_VALUE(std::string, recipient) void play(const Ts &...x)
Definition sim800l.h:156
Sim800LDisconnectAction(Sim800LComponent *parent)
Definition sim800l.h:178
Sim800LSendSmsAction(Sim800LComponent *parent)
Definition sim800l.h:125
TEMPLATABLE_VALUE(std::string, recipient) TEMPLATABLE_VALUE(std
Definition sim800l.h:126
Sim800LSendUssdAction(Sim800LComponent *parent)
Definition sim800l.h:141
TEMPLATABLE_VALUE(std::string, ussd) void play(const Ts &...x)
Definition sim800l.h:142
const LogString * message
Definition component.cpp:35
@ STATE_PARSE_SMS_RESPONSE
Definition sim800l.h:33
const uint16_t SIM800L_READ_BUFFER_LENGTH
Definition sim800l.h:18
uint16_t x
Definition tt21100.cpp:5