Sim800L Component

The SIM800L Component provides the ability to 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.

../_images/sim800l-full.jpg
# 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()' ]

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 a sms is received. See on_sms_received Trigger.

on_sms_received Trigger

With this configuration option you can write complex automations whenever a 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");

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 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;'

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!"