Sim800L 组件
SIM800L 组件提供了拨号、接听电话、收发 SMS 短信以及收发 USSD 代码的能力。该设备必须通过支持发送和接收线路的 UART 总线 连接。UART 总线必须以与模块相同的速率配置,默认值为 9600bps。所需的连接导线为 +VCC、GND、RX 和 TX。
WARNING
如果你使用了 Logger,请确保不要将 TX 和 RX 使用同一引脚,否则请使用 baud_rate: 0 选项禁用 UART 日志记录。
NOTE
该模块需要电压在 3.8V 至 4.2V 之间、能承受最高 2 安培电流峰值的电源;仅使用 ESP 相同的 3.3V 电源将无法工作。不过你可以直接将 TX 和 RX 线路连接,无需电平转换器。
# 示例配置条目sim800l: on_sms_received: - logger.log: format: "Received '%s' from %s" args: [ 'message.c_str()', 'sender.c_str()' ]-
uart_id (可选, ID): 手动指定 UART 中心的 ID。
-
id (可选, ID): 手动指定用于代码生成的 ID。
-
on_sms_received (可选, Automation): 收到 SMS 时要执行的动作。参见
on_sms_received触发器。 -
on_incoming_call (可选, Automation): 收到来电时要执行的动作。参见
on_incoming_call触发器。 -
on_call_connected (可选, Automation): 电话接通时要执行的动作,原因可能是外拨电话被接听或来电被接听。
-
on_call_disconnected (可选, Automation): 电话断开时要执行的动作。
sensor: - platform: sim800l rssi: name: "Sim800L RSSI"-
rssi (可选): 报告收到的信号强度指示(RSSI),单位为 dBm。
- 所有选项来自 Sensor。
二进制传感器
Section titled “二进制传感器”binary_sensor: - platform: sim800l registered: name: "Sim800L Registered"-
registered (可选): 指示 SIM800L 是否已在蜂窝网络中成功注册。
- 所有选项来自 Binary Sensor。
on_sms_received 触发器
Section titled “on_sms_received 触发器”通过此配置选项,你可以编写在收到短信时触发的复杂自动化。要使用消息内容,请使用 lambda 模板;消息内容和发送方电话号码可在 lambda 中分别通过名为 message 和 sender 的变量访问。
on_sms_received: - lambda: |- id(sms_sender).publish_state(sender); id(sms_message).publish_state(message);on_incoming_call 触发器
Section titled “on_incoming_call 触发器”每次 SIM800L 发送 RING / 来电显示消息时,该自动化都会触发;每条电话记录通常会发送多次,大概每次电话“响铃”都会触发一次。该自动化提供了一个 caller_id 字符串参数,用于携带收到的信息。电话既不会被接听也不会被拒绝。
on_incoming_call: - logger.log: format: "Incoming call from '%s'" args: ["caller_id.c_str()"] - lambda: |- id(caller_id_text_sensor).publish_state(caller_id); - sim800l.disconnect - homeassistant.event: event: esphome.incoming_call_event data: payload: !lambda 'return id(caller_id_text_sensor).state;'on_ussd_received 触发器
Section titled “on_ussd_received 触发器”通过此配置选项,你可以在从网络收到 USSD 代码时编写复杂的自动化。
on_ussd_received:sim800l.send_sms 动作
Section titled “sim800l.send_sms 动作”在自动化中使用此动作向某位手机收件人发送短信。
on_...: then: - sim800l.send_sms: recipient: '+15551234567' message: Hello there
# 模板化: - 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";-
recipient (必选, string, 可模板化): 消息收件人的号码。
-
message (必选, string, 可模板化): 消息内容。
-
id (可选, ID): 如果你使用了多个组件,可手动指定 SIM800L 的 ID。
sim800l.dial 动作
Section titled “sim800l.dial 动作”在自动化中使用此动作拨打到某个手机号码。
on_...: then: - sim800l.dial: recipient: '+15551234567'sim800l.connect 动作
Section titled “sim800l.connect 动作”接听来电。
on_...: then: - sim800l.connectsim800l.disconnect 动作
Section titled “sim800l.disconnect 动作”断开电话,无论是拨出的还是接到的。
on_...: then: - sim800l.disconnectsim800l.send_ussd 动作
Section titled “sim800l.send_ussd 动作”向网络发送 USSD 代码。
on_...: then: - sim800l.send_ussd与 Home Assistant 配合使用入门
Section titled “与 Home Assistant 配合使用入门”以下代码将帮助你快速上手,配置的接收消息会在 Home Assistant 中更新,并且会设置一个服务,让你能够通过 SIM800L 发送消息和拨号。
api: actions: - action: send_sms variables: recipient: string message: string then: - sim800l.send_sms: recipient: !lambda 'return recipient;' message: !lambda 'return message;' - action: dial variables: recipient: string then: - sim800l.dial: recipient: !lambda 'return recipient;' - action: connect then: - sim800l.connect - action: disconnect then: - sim800l.disconnect - action: send_ussd variables: ussdCode: string then: - sim800l.send_ussd: ussd: !lambda 'return ussdCode;'
text_sensor: - platform: template id: sms_sender name: "Sms Sender" - platform: template id: sms_message name: "Sms Message" - platform: template id: caller_id_text_sensor name: "Caller ID" - platform: template id: ussd_message name: "Ussd Code"
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); on_incoming_call: - lambda: |- id(caller_id_text_sensor).publish_state(caller_id); on_call_connected: - logger.log: format: Call connected on_call_disconnected: - logger.log: format: Call disconnected on_ussd_received: - lambda: |- id(ussd_message).publish_state(ussd);此时最新收到的短信和发送方号码将通过文本传感器显示出来。
要触发来自 Home Assistant 的自动化,你可以用以下代码调用服务:
automation: # ... action: - action: esphome.livingroom_send_sms data: recipient: "+15551234567" message: "Hello World!" - action: esphome.livingroom_dial data: recipient: "+15551234567"将从经授权的发送方收到的中继管理命令传递下去:
sim800l: on_sms_received: - lambda: |- if ( (id(sms_sender).state == "+79991234567") && ( (id(sms_message).state == "relay_1_on") || (id(sms_message).state == "Relay_1_on") ) ) { id(relay_1).turn_on(); }switch: - platform: gpio id: relay_1 pin: GPIOXX