ESPHome 2026.4.0
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 {
17namespace sim800l {
18
19const uint16_t SIM800L_READ_BUFFER_LENGTH = 1024;
20
49
51 public:
53 void update() override;
54 void loop() override;
55 void dump_config() override;
56#ifdef USE_BINARY_SENSOR
58 registered_binary_sensor_ = registered_binary_sensor;
59 }
60#endif
61#ifdef USE_SENSOR
62 void set_rssi_sensor(sensor::Sensor *rssi_sensor) { rssi_sensor_ = rssi_sensor; }
63#endif
64 template<typename F> void add_on_sms_received_callback(F &&callback) {
65 this->sms_received_callback_.add(std::forward<F>(callback));
66 }
67 template<typename F> void add_on_incoming_call_callback(F &&callback) {
68 this->incoming_call_callback_.add(std::forward<F>(callback));
69 }
70 template<typename F> void add_on_call_connected_callback(F &&callback) {
71 this->call_connected_callback_.add(std::forward<F>(callback));
72 }
73 template<typename F> void add_on_call_disconnected_callback(F &&callback) {
74 this->call_disconnected_callback_.add(std::forward<F>(callback));
75 }
76 template<typename F> void add_on_ussd_received_callback(F &&callback) {
77 this->ussd_received_callback_.add(std::forward<F>(callback));
78 }
79 void send_sms(const std::string &recipient, const std::string &message);
80 void send_ussd(const std::string &ussd_code);
81 void dial(const std::string &recipient);
82 void connect();
83 void disconnect();
84
85 protected:
86 void send_cmd_(const std::string &message);
87 void parse_cmd_(std::string message);
88 void set_registered_(bool registered);
89
90#ifdef USE_BINARY_SENSOR
92#endif
93
94#ifdef USE_SENSOR
96#endif
97 std::string sender_;
98 std::string message_;
100 size_t read_pos_{0};
101 uint8_t parse_index_{0};
102 uint8_t watch_dog_{0};
103 bool expect_ack_{false};
105 bool registered_{false};
106
107 std::string recipient_;
108 std::string outgoing_message_;
109 std::string ussd_;
110 bool send_pending_{false};
111 bool dial_pending_{false};
112 bool connect_pending_{false};
115 uint8_t call_state_{6};
116
117 CallbackManager<void(std::string, std::string)> sms_received_callback_;
122};
123
124template<typename... Ts> class Sim800LSendSmsAction : public Action<Ts...> {
125 public:
127 TEMPLATABLE_VALUE(std::string, recipient)
128 TEMPLATABLE_VALUE(std::string, message)
129
130 void play(const Ts &...x) {
131 auto recipient = this->recipient_.value(x...);
132 auto message = this->message_.value(x...);
133 this->parent_->send_sms(recipient, message);
134 }
135
136 protected:
138};
139
140template<typename... Ts> class Sim800LSendUssdAction : public Action<Ts...> {
141 public:
143 TEMPLATABLE_VALUE(std::string, ussd)
144
145 void play(const Ts &...x) {
146 auto ussd_code = this->ussd_.value(x...);
147 this->parent_->send_ussd(ussd_code);
148 }
149
150 protected:
152};
153
154template<typename... Ts> class Sim800LDialAction : public Action<Ts...> {
155 public:
157 TEMPLATABLE_VALUE(std::string, recipient)
158
159 void play(const Ts &...x) {
160 auto recipient = this->recipient_.value(x...);
161 this->parent_->dial(recipient);
162 }
163
164 protected:
166};
167template<typename... Ts> class Sim800LConnectAction : public Action<Ts...> {
168 public:
170
171 void play(const Ts &...x) { this->parent_->connect(); }
172
173 protected:
175};
176
177template<typename... Ts> class Sim800LDisconnectAction : public Action<Ts...> {
178 public:
180
181 void play(const Ts &...x) { this->parent_->disconnect(); }
182
183 protected:
185};
186
187} // namespace sim800l
188} // namespace esphome
virtual void play(const Ts &...x)=0
This class simplifies creating components that periodically check a state.
Definition component.h:589
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:73
sensor::Sensor * rssi_sensor_
Definition sim800l.h:95
char read_buffer_[SIM800L_READ_BUFFER_LENGTH]
Definition sim800l.h:99
CallbackManager< void(std::string)> ussd_received_callback_
Definition sim800l.h:121
void add_on_sms_received_callback(F &&callback)
Definition sim800l.h:64
void send_cmd_(const std::string &message)
Definition sim800l.cpp:62
CallbackManager< void(std::string, std::string)> sms_received_callback_
Definition sim800l.h:117
void add_on_ussd_received_callback(F &&callback)
Definition sim800l.h:76
CallbackManager< void(std::string)> incoming_call_callback_
Definition sim800l.h:118
binary_sensor::BinarySensor * registered_binary_sensor_
Definition sim800l.h:91
CallbackManager< void()> call_connected_callback_
Definition sim800l.h:119
void set_registered_(bool registered)
Definition sim800l.cpp:488
void add_on_incoming_call_callback(F &&callback)
Definition sim800l.h:67
void send_sms(const std::string &recipient, const std::string &message)
Definition sim800l.cpp:460
void update() override
Retrieve the latest sensor values. This operation takes approximately 16ms.
Definition sim800l.cpp:14
void add_on_call_connected_callback(F &&callback)
Definition sim800l.h:70
void set_rssi_sensor(sensor::Sensor *rssi_sensor)
Definition sim800l.h:62
void parse_cmd_(std::string message)
Definition sim800l.cpp:70
CallbackManager< void()> call_disconnected_callback_
Definition sim800l.h:120
void dial(const std::string &recipient)
Definition sim800l.cpp:481
void send_ussd(const std::string &ussd_code)
Definition sim800l.cpp:466
void set_registered_binary_sensor(binary_sensor::BinarySensor *registered_binary_sensor)
Definition sim800l.h:57
Sim800LConnectAction(Sim800LComponent *parent)
Definition sim800l.h:169
Sim800LDialAction(Sim800LComponent *parent)
Definition sim800l.h:156
TEMPLATABLE_VALUE(std::string, recipient) void play(const Ts &...x)
Definition sim800l.h:157
Sim800LDisconnectAction(Sim800LComponent *parent)
Definition sim800l.h:179
Sim800LSendSmsAction(Sim800LComponent *parent)
Definition sim800l.h:126
TEMPLATABLE_VALUE(std::string, recipient) TEMPLATABLE_VALUE(std
Definition sim800l.h:127
Sim800LSendUssdAction(Sim800LComponent *parent)
Definition sim800l.h:142
TEMPLATABLE_VALUE(std::string, ussd) void play(const Ts &...x)
Definition sim800l.h:143
const char * message
Definition component.cpp:35
@ STATE_PARSE_SMS_RESPONSE
Definition sim800l.h:34
const uint16_t SIM800L_READ_BUFFER_LENGTH
Definition sim800l.h:19
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
uint16_t x
Definition tt21100.cpp:5