Продолжая изучать сайт и возможности ESP Home, я наткнулся на интересный компонент по работе с модулями sim800l. По счастливой случайности у меня был такой модуль, и я смог попробовать собрать на нем проект.
Translation to English is here. Также основной канал в telegram.
Ранее gsm модули стоили очень дорого и проще было найти и реализовать проект на стареньком Сименсе. Сегодня ситуация поменялась в корне, старенький Сименс продолжает дорожать, а модули simXXX подешевели до нескольких баксов за штуку, да еще и антенна, и слот и минимальная обвязка в подарок, просто песня. Однако прежде, чем это произошло, на рынок должны были ворваться конкуренты, поэтому у меня скопилось некоторое количество прочих модулей, писал про них ранее:
И даже делал несколько примитивных проектов на них:
Сейчас же у меня, очевидно, идет неделя "ESP Home". На сайте мне на глаза попалось много интересных проектов, и я начал реализовывать некоторые из них, благо были необходимые компоненты. Так как в описании компонентов была указана совместимость с модулями Sim800l, то эксперименты я начал именно с него. Вот страничка описания:
Создаем проект, закидываем в него:
# 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
Подробнее про то, как это делать и как создавать проекты - уже писал в прошлых публикациях:
Далее подключаем модуль к ESP, подаем питание и ничего не работает. Подобно модулю Neoway M590E, для его питания требуется много энергии в момент передачи данных, да и диапазон рабочего напряжения нестандартный. Я взял mini360 DC-DC преобразователь, с ним ситуация стала сильно лучше и модуль перестал уходить в ребут в 100% случаев. Эту проблему удалось полностью победить только сократив длину линии от преобразователя до модуля до минимума. Были еще попытки использовать обычные электролиты, но ситуацию это толком не улучшило, колебания напряжения на них было видно невооруженным глазом. Так вот, модуль работал и не перезагружался, но ESP упорно не видела модуль. Вначале я подумал, что скорость модуля уже была поменяна на заводе, но это также не дало результата. Предположив, что дело в том, что TX и RX на плате D1 уже разведены и это может быть причиной, поменял пины RX и TX на D1 и D2 и тогда все заработало.
Выглядит это все довольно страшно, но нужно понимать, что это только рабочий образец нового устройства, а о красоте подумаю на следующем этапе. Про радиатор, который установлен на esp, тоже прошу внимание не заострять, эта тестовая плата и она многое в жизни повидала:
Для интеграции в Home Assistant нужно добавить в код строчки:
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);
Итоговый код стал выглядеть так:
esphome:
name: gsm-hub
esp8266:
board: d1_mini
# Enable Home Assistant API
api:
encryption:
key: "123"
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"
ota:
password: "123"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Gsm-Hub Fallback Hotspot"
password: "123"
captive_portal:
#Add web server:
web_server:
port: 80
# Example configuration entry
uart:
baud_rate: 9600
tx_pin: D1
rx_pin: D2
sim800l:
on_sms_received:
- logger.log:
format: "Received '%s' from %s"
args: [ 'message.c_str()', 'sender.c_str()' ]
- lambda: |-
id(sms_sender).publish_state(sender);
id(sms_message).publish_state(message);
sensor:
- platform: sim800l
rssi:
name: "Sim800L RSSI"
- platform: uptime
name: Test Uptime Sensor
binary_sensor:
- platform: sim800l
registered:
name: "Sim800L Registered"
- platform: status
name: "Test"
logger:
baud_rate: 0 # disable uart logger on esp 8266
В такой конфигурации esp залетает в home assistant в следующем виде:
Можем видеть параметры сети, статус модуля и последнюю полученную смс. В Web страничке все будет выглядеть так:
Пока не обращаем внимания на длинный текст в поле смс текста. Про него я расскажу позже. Берем телефон и отправляем пару смс на номер сим-карты в модуле sim800l:
Английский текст выглядит вполне нормально, а вот русский язык приходит цифрами
Также, для отправки сообщений из Home Assistant теперь есть сервис:
Теперь подходим к Русскому языку. Так как модуль пилился не нашими разработчиками, то и поддержку Русского языка никто не завез. Но это совершенно не значит, что такие сообщения нельзя прочитать. Возьмем, например код из сообщения:
043E044504400430043D043804420441044F00200432044B0441043E043A0430044F0020043F043E043604300440043D0430044F0020043E043F04300441043D043E04410442044C002000340020043A043B0430044104410430002E002004220435043B002E0020003100310032
При помощи онлайн конвертера, например тут, можно легко перевести русский текст в этот код и назад:
Оказывается, нас предупреждают о пожарной опасности. Home Assistant тоже кстати шлет русский язык не в той кодировке, поэтому придется либо отказаться от его использования, либо дописывать модуль самостоятельно. На этом все, всем добра.
Подпишитесь, чтобы не пропускать следующий контент.
Нажмите лайк, если интересно, так я пойму какие публикации больше нужны моей публике.
Также публикации можно найти на других площадках: Instagram, telegram (RU, EN, DE), Medium, LiveJournal, YouTube.
Мой блог является некоммерческим, поэтому позитивный комментарий, лайк или репост поможет публикациям выходить чаще ☺.