

Если сеть MeshCore в городе развита, то вполне себе неплохой выход из положения, если нет Интернета.
Можно получать различные уведомления (например произошла протечка, или сработал датчик дыма), есть возможность делать опрос различных датчиков (например температура, влажность и т.д.), ну и конечно можно включать и выключать различные приборы, открывать/закрывать ворота и т.д.
Как пример: лето, жарко - едем домой. Делаем опрос температурных датчиков, если температура высокая, включаем кондиционер на нужную температуру. Приезжаем, а температура в помещении уже комфортная.
Тут можно придумать великое множество автоматизаций и различных уведомлений. И да, оно действительно работает.
Что нужно?
Нужна нода типа Heltec Meshtastic LoRa32 V3 или V4 или T114 V2 Meshtastic Tracker NRF52840 и аналогичные, которую нужно подключить к Home Assistant через USB, BLE или TCP. Мне больше понравилось подключение по USB. Ну и вторая, носимая нода, с помощью которой мы и будем управлять HA и получать от него уведомления.
Устанавливаем дополнение MeshCore for Home Assistant через HACS. Подключаем через мастер настройки свою домашнюю ноду. Ну а далее - есть хорошая инструкция с примерами.
Нужно узнать pubkey_prefix от ноды с которой вы будете отправлять и получать обратно сообщения. Ведь мы же не хотим, чтобы кто угодно смог управлять вашим HA :) В инструментах разработчика нужно подписаться на события meshcore_message - отправить сообщения и там увидим нужный нам pubkey_prefix с которым дальше будем работать. Если кто-то другой отправит сообщение и префикс не совпадёт, то автоматизация просто проигнорирует.
Получим что-то типа этого:
event_type: meshcore_message
data:
message: Тест
sender_name: ИМЯ НОДЫ
pubkey_prefix: 2g668a875ssd - ЭТО ДЛЯ ПРИМЕРА НУЖНЫЙ НАМ ПРЕФИКС
receiver_name: meshcore
entity_id: binary_sensor.meshcore_32334_3a4664_messages
domain: meshcore
timestamp: "ТУТ ДАТА"
message_type: direct
origin: LOCAL
time_fired: "дата и время"
context:
id: ТУТ ID
parent_id: null
user_id: null
Я, конечно, выложу несколько своих рабочих примеров.
Вот пример опроса температурных датчиков:
alias: "MeshCore: Температура"
description: Отправляет температуру с трёх датчиков по запросу
triggers:
- event_type: meshcore_message
trigger: event
conditions:
- condition: template
value_template: "{{ trigger.event.data.message_type == 'direct' }}"
- condition: template
value_template: "{{ trigger.event.data.pubkey_prefix.startswith('ВАЖНО! ТУТ ПРЕФИКС') }}"
- condition: template
value_template: "{{ trigger.event.data.message == 'Температура' }}"
actions:
- action: text.set_value
target:
entity_id: text.meshcore_message
data:
value: >-
Кухня: {% if states('sensor.esp32_2_dht11') not in
['unknown','unavailable'] %}{{ states('sensor.esp32_2_dht11') | round(0)
}}°C{% else %}н/д{% endif %}, Спальня: {% if
states('sensor.0xa4ckas34_temperature') not in
['unknown','unavailable'] %}{{
states('sensor.sjdkc9389e6fc6f_temperature') | round(0) }}°C{% else
%}н/д{% endif %}, Мастерская: {% if
states('sensor.esp32_7_temperatura_masterskoi') not in
['unknown','unavailable'] %}{{
states('sensor.esp32_7_temperatura_masterskoi') | round(0) }}°C{% else
%}н/д{% endif %}, На улице: {% if
states('sensor.datchik_t_ulitsa_temperature') not in
['unknown','unavailable'] %}{{
states('sensor.datchik_t_ulitsa_temperature') | round(0) }}°C{% else
%}н/д{% endif %}
- action: select.select_option
target:
entity_id: select.meshcore_recipient_type
data:
option: Contact
- action: select.select_option
target:
entity_id: select.meshcore_contact
data:
option: >-
{{ trigger.event.data.sender_name }} ({{
trigger.event.data.pubkey_prefix }})
- action: meshcore.send_ui_message
data: {}
mode: single
Как работает? С носимой ноды отправляем текстовое сообщение "Температура" на домашнюю ноду. И получаем ответ:
"Кухня: 26°C, Спальня: 24°C, Мастерская: 22°C, На улице: 27°C"
Вот ещё один пример включения кондиционера. У меня он управляется через инфракрасный порт скриптом. Отправляем на домашнюю ноду сообщение "Кондей кухня вкл" - он включается и обратно получаем сообщение "Кондей на кухне включён - на охлаждение +24":
alias: "MeshCore: Кондей кухня вкл"
description: Включает кондиционер на кухне на охлаждение 24 градуса
triggers:
- event_type: meshcore_message
event_data:
message_type: direct
trigger: event
conditions:
- condition: template
value_template: "{{ trigger.event.data.pubkey_prefix.startswith('ВАЖНО! ТУТ ПРЕФИКС') }}"
- condition: template
value_template: >-
{{ (trigger.event.data.message | default('')) | trim == 'Кондей кухня вкл'
}}
actions:
- action: script.24_3
data: {}
- sequence:
- action: select.select_option
target:
entity_id: select.meshcore_recipient_type
data:
option: Contact
- action: select.select_option
target:
entity_id: select.meshcore_contact
data:
option: >-
{{ trigger.event.data.sender_name }} ({{
trigger.event.data.pubkey_prefix }})
- action: text.set_value
target:
entity_id: text.meshcore_message
data:
value: Кондей на кухне включён - на охлаждение +24
- action: meshcore.send_ui_message
data: {}
mode: single
У вас уже скопилось много разных команд и не всегда их можно запомнить. А вводить их нужно точно. Если хоть один символ не совпадёт - не сработает.
Можно сделать напоминалочку например по команде "Help" - отправляется список доступных команд:
alias: "MeshCore: Справка Help"
description: Отправляет список команд по команде Help
triggers:
- event_type: meshcore_message
trigger: event
conditions:
- condition: template
value_template: "{{ trigger.event.data.message_type == 'direct' }}"
- condition: template
value_template: "{{ trigger.event.data.pubkey_prefix.startswith('ВАЖНО! ВАШ ПРЕФИКС') }}"
- condition: template
value_template: "{{ trigger.event.data.message == 'Help' }}"
actions:
- action: text.set_value
target:
entity_id: text.meshcore_message
data:
value: >-
Доступные команды: Температура, Кондей кухня вкл/выкл, Кондей мастерская
вкл/выкл, Help
- action: select.select_option
target:
entity_id: select.meshcore_recipient_type
data:
option: Contact
- action: select.select_option
target:
entity_id: select.meshcore_contact
data:
option: ТУТ НАЗВАНИЕ ВАШЕЙ НОДЫ (ТУТ ПРЕФИКС)
- action: meshcore.send_ui_message
data: {}
mode: single
Ну, а далее тут уж кто во что горазд - автоматизаций можно сделать каких угодно. Конечно, сохраняется обычный обмен сообщениями между домашней нодой и носимой. В HA по примерам можно сделать нужные карточки. Например, минимум: форма отправки с выбором кому, и карточка просмотра сообщений.
Вот примерная карточка для HA отправки с выборос Контакт/Канал:
type: vertical-stack
cards:
- type: entities
title: Отправка сообщений
entities:
- entity: select.meshcore_recipient_type
name: Send To
state_color: true
show_header_toggle: false
- type: conditional
conditions:
- entity: select.meshcore_recipient_type
state: Channel
card:
type: entities
entities:
- entity: select.meshcore_channel
name: Channel
state_color: true
- type: conditional
conditions:
- entity: select.meshcore_recipient_type
state: Contact
card:
type: entities
entities:
- entity: select.meshcore_contact
name: Contact
state_color: true
- type: entities
entities:
- entity: text.meshcore_message
name: Message
state_color: true
- show_name: true
show_icon: true
type: button
name: Отправить сообщение
icon: mdi:send
tap_action:
action: call-service
service: meshcore.send_ui_message
icon_height: 24px
show_state: false
color: orange
В примерах на Гите есть формы отправки команд на ноду, менеджер контактов и много других.
Именно с помощью формы менеджера контактов, удобно добавялять/удалять контакты и каналы для домашней ноды подклёчённой к HA.
Ещё существует интеграция для Meshtastic - посмотрите, может вам больше понравится.