Sim800L Component¶
Component/Hub¶
The SIM800L
Component provides the ability to dial, send and receive SMS text messages. The device must be
connected via a UART bus supporting both receiving and transmitting line.
The UART bus must be configured at the same speed of the module which is by default 9600bps.
The required connection wires are +VCC
, GND
, RX
and TX
.
Warning
If you are using the Logger Component make sure you are not using the same pins for TX
and RX
or
otherwise disable the UART logging with the baud_rate: 0
option.
Note
This module requires a power supply between 3.8V and 4.2V that can handle current spikes up
to 2 amps, it will not work by powering from the same 3.3V power source of the ESP. However you can
connect TX
and RX
lines directly without any level shifter.

# Example configuration entry
uart:
baud_rate: 9600
tx_pin: TX
rx_pin: RX
sim800l:
on_sms_received:
- logger.log:
format: "Received '%s' from %s"
args: [ 'message.c_str()', 'sender.c_str()' ]
sensor:
- platform: sim800l
rssi:
name: "Sim800L RSSI"
binary_sensor:
- platform: sim800l
registered:
name: "Sim800L Registered"
logger:
baud_rate: 0 # disable uart logger on esp 8266
Configuration variables:
uart_id (Optional, ID): Manually specify the ID of the UART hub.
id (Optional, ID): Manually specify the ID used for code generation.
on_sms_received (Optional, Automation): An action to be performed when an SMS is received. See on_sms_received Trigger.
Sensor¶
Configuration variables:
Binary Sensor¶
Configuration variables:
registered (Optional): Indicates if the SIM800L has successfully registered in the cellular network.
name (Required, string): The name for the registered binary sensor.
id (Optional, ID): Set the ID of this sensor for use in lambdas.
All other options from Binary Sensor.
on_sms_received
Trigger¶
With this configuration option you can write complex automations whenever an SMS message
is received. To use the message content, use a lambda
template, the message content and the sender phone number are available inside that lambda
under the variables named message
and sender
respectively.
on_sms_received:
- lambda: |-
id(sms_sender).publish_state(sender);
id(sms_message).publish_state(message);
sim800l.send_sms
Action¶
Send a SMS message to a phone recipient using this action in automations.
on_...:
then:
- sim800l.send_sms:
recipient: '+15551234567'
message: Hello there
# Templated:
- sim800l.send_sms:
recipient: !lambda |-
if (id(reed_switch).state) return "+15551234567";
else return "15551234568";
message: !lambda |-
return id(reed_switch).state ? "Door is now OPEN" : "Hey door just CLOSED";
Configuration options:
recipient (Required, string, templatable): The message recipient. number.
message (Required, string, templatable): The message content.
id (Optional, ID): Manually specify the ID of the SIM800L if you have multiple components.
Note
This action can also be written in lambdas:
id(sim800l1).send_sms("+15551234567", "The message content");
sim800l.dial
Action¶
Dial to a phone recipient using this action in automations.
on_...:
then:
- sim800l.dial:
recipient: '+15551234567'
Configuration options:
recipient (Required, string, templatable): The number to dial.
id (Optional, ID): Manually specify the ID of the SIM800L if you have multiple components.
Getting started with Home Assistant¶
The following code will get you up and running with a configuration updating received messages on Home Assistant and will also setup a service so you can send messages and dial with your SIM800L.
api:
services:
- service: send_sms
variables:
recipient: string
message: string
then:
- sim800l.send_sms:
recipient: !lambda 'return recipient;'
message: !lambda 'return message;'
- service: dial
variables:
recipient: string
then:
- sim800l.dial:
recipient: !lambda 'return recipient;'
text_sensor:
- platform: template
id: sms_sender
name: "Sms Sender"
- platform: template
id: sms_message
name: "Sms Message"
uart:
baud_rate: 9600
tx_pin: TX
rx_pin: RX
sim800l:
on_sms_received:
- lambda: |-
id(sms_sender).publish_state(sender);
id(sms_message).publish_state(message);
Now your latest received SMS and sender number will be displayed by the text sensors.
To trigger the automation from Home Assistant you can invoke the service with this code:
automation:
# ...
action:
- service: esphome.livingroom_send_sms
data:
recipient: "+15551234567"
message: "Hello World!"
- service: esphome.livingroom_dial
data:
recipient: "+15551234567"
Relay management commands received from an authorized sender:
sim800l:
on_sms_received:
- lambda: |-
if ( (id(sms_sender).state == "+79991234567") && ( (id(sms_message).state == "relay_1_on") OR (id(sms_message).state == "Relay_1_on") ) ) {
id(relay_1).turn_on();
}
switch:
- platform: gpio
id: relay_1
pin: 0