Add Reticulum/LXMF integration for Home Assistant
Custom integration connecting Home Assistant to a Reticulum network over a TCPClientInterface and exchanging LXMF messages, with an Assist conversation bridge, notify entity, sensors (incl. interface telemetry), buttons, services, bus events and device triggers. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
164
custom_components/reticulum/translations/en.json
Normal file
164
custom_components/reticulum/translations/en.json
Normal file
@@ -0,0 +1,164 @@
|
||||
{
|
||||
"config": {
|
||||
"step": {
|
||||
"user": {
|
||||
"title": "Connect to Reticulum",
|
||||
"description": "Home Assistant will run a Reticulum instance and connect out to your Reticulum stack over TCP (the neighbouring machine must expose a TCPServerInterface).",
|
||||
"data": {
|
||||
"target_host": "Target host",
|
||||
"target_port": "Target port",
|
||||
"display_name": "Display name",
|
||||
"interface_name": "Interface name"
|
||||
},
|
||||
"data_description": {
|
||||
"target_host": "Hostname or IP of the machine running the Reticulum TCP server.",
|
||||
"target_port": "TCP port of the Reticulum TCPServerInterface (default 4242).",
|
||||
"display_name": "Name announced to other Reticulum peers for this Home Assistant.",
|
||||
"interface_name": "Label used for this connection in the Reticulum config."
|
||||
}
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"cannot_connect": "Could not reach the Reticulum TCP server at that host and port."
|
||||
},
|
||||
"abort": {
|
||||
"already_configured": "Reticulum is already configured.",
|
||||
"single_instance_allowed": "Only a single Reticulum instance is allowed."
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
"title": "Reticulum options",
|
||||
"data": {
|
||||
"enable_assist": "Route incoming messages to Assist",
|
||||
"assist_agent": "Assist agent (entity id / agent id, blank = default)",
|
||||
"assist_language": "Assist language (blank = system default)",
|
||||
"allow_all_senders": "Reply to any sender",
|
||||
"allowed_identities": "Allowed sender addresses",
|
||||
"default_recipient": "Default recipient address (for the notify entity)",
|
||||
"greeting": "Greeting message",
|
||||
"delivery_method": "Default delivery method",
|
||||
"announce_interval": "Announce interval",
|
||||
"propagation_node": "Propagation node address",
|
||||
"sync_interval": "Propagation sync interval",
|
||||
"loglevel": "Reticulum log level (0-7)"
|
||||
},
|
||||
"data_description": {
|
||||
"enable_assist": "When enabled, incoming LXMF messages are answered by the Assist conversation agent and the reply is sent back over Reticulum.",
|
||||
"allowed_identities": "One address per line (or comma separated). Only used when 'Reply to any sender' is off.",
|
||||
"default_recipient": "16-byte hex LXMF address that the notify.reticulum entity sends to.",
|
||||
"announce_interval": "How often (seconds) to announce our address. 0 disables periodic announces.",
|
||||
"propagation_node": "Optional LXMF propagation node for store-and-forward delivery.",
|
||||
"sync_interval": "How often (seconds) to pull queued messages from the propagation node. 0 disables."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"lxmf_address": { "name": "LXMF address" },
|
||||
"messages_received": { "name": "Messages received" },
|
||||
"messages_sent": { "name": "Messages sent" },
|
||||
"messages_failed": { "name": "Messages failed" },
|
||||
"peers": { "name": "Known peers" },
|
||||
"last_message": { "name": "Last message" },
|
||||
"last_message_time": { "name": "Last message time" },
|
||||
"rx_bytes": { "name": "Received" },
|
||||
"tx_bytes": { "name": "Transmitted" },
|
||||
"bitrate": { "name": "Bitrate" },
|
||||
"rssi": { "name": "RSSI" },
|
||||
"snr": { "name": "SNR" },
|
||||
"link_quality": { "name": "Link quality" }
|
||||
},
|
||||
"binary_sensor": {
|
||||
"connected": { "name": "Connected" }
|
||||
},
|
||||
"button": {
|
||||
"announce": { "name": "Announce" },
|
||||
"sync": { "name": "Sync propagation node" }
|
||||
},
|
||||
"notify": {
|
||||
"message": { "name": "Message" }
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"delivery_method": {
|
||||
"options": {
|
||||
"direct": "Direct (establish a link)",
|
||||
"opportunistic": "Opportunistic (single packet)",
|
||||
"propagated": "Propagated (store and forward)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"device_automation": {
|
||||
"trigger_type": {
|
||||
"message_received": "Message received",
|
||||
"message_delivered": "Message delivered",
|
||||
"message_failed": "Message delivery failed",
|
||||
"announce_received": "Announce received (peer heard)"
|
||||
}
|
||||
},
|
||||
"services": {
|
||||
"send_message": {
|
||||
"name": "Send message",
|
||||
"description": "Send an LXMF message to a Reticulum destination.",
|
||||
"fields": {
|
||||
"destination": {
|
||||
"name": "Destination",
|
||||
"description": "16-byte hex LXMF destination hash of the recipient."
|
||||
},
|
||||
"content": {
|
||||
"name": "Content",
|
||||
"description": "The message body."
|
||||
},
|
||||
"title": {
|
||||
"name": "Title",
|
||||
"description": "Optional message title / subject."
|
||||
},
|
||||
"method": {
|
||||
"name": "Method",
|
||||
"description": "Delivery method to use."
|
||||
},
|
||||
"fields": {
|
||||
"name": "Fields",
|
||||
"description": "Optional advanced LXMF fields dictionary."
|
||||
}
|
||||
}
|
||||
},
|
||||
"announce": {
|
||||
"name": "Announce",
|
||||
"description": "Announce this Home Assistant's LXMF destination on the network."
|
||||
},
|
||||
"request_path": {
|
||||
"name": "Request path",
|
||||
"description": "Ask the network for a path to a destination.",
|
||||
"fields": {
|
||||
"destination": {
|
||||
"name": "Destination",
|
||||
"description": "Destination hash to resolve a path to."
|
||||
}
|
||||
}
|
||||
},
|
||||
"set_propagation_node": {
|
||||
"name": "Set propagation node",
|
||||
"description": "Set the outbound LXMF propagation node.",
|
||||
"fields": {
|
||||
"destination": {
|
||||
"name": "Destination",
|
||||
"description": "Propagation node destination hash."
|
||||
}
|
||||
}
|
||||
},
|
||||
"sync_propagation": {
|
||||
"name": "Sync propagation node",
|
||||
"description": "Pull queued messages from the configured propagation node.",
|
||||
"fields": {
|
||||
"max_messages": {
|
||||
"name": "Max messages",
|
||||
"description": "Maximum number of messages to retrieve."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
164
custom_components/reticulum/translations/ru.json
Normal file
164
custom_components/reticulum/translations/ru.json
Normal file
@@ -0,0 +1,164 @@
|
||||
{
|
||||
"config": {
|
||||
"step": {
|
||||
"user": {
|
||||
"title": "Подключение к Reticulum",
|
||||
"description": "Home Assistant запустит экземпляр Reticulum и подключится к вашему стеку Reticulum по TCP (на соседней машине должен быть настроен TCPServerInterface).",
|
||||
"data": {
|
||||
"target_host": "Хост",
|
||||
"target_port": "Порт",
|
||||
"display_name": "Отображаемое имя",
|
||||
"interface_name": "Название интерфейса"
|
||||
},
|
||||
"data_description": {
|
||||
"target_host": "Имя хоста или IP-адрес машины с TCP-сервером Reticulum.",
|
||||
"target_port": "TCP-порт TCPServerInterface Reticulum (по умолчанию 4242).",
|
||||
"display_name": "Имя, анонсируемое другим узлам Reticulum для этого Home Assistant.",
|
||||
"interface_name": "Метка соединения в конфигурации Reticulum."
|
||||
}
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"cannot_connect": "Не удалось подключиться к TCP-серверу Reticulum по указанному адресу и порту."
|
||||
},
|
||||
"abort": {
|
||||
"already_configured": "Reticulum уже настроен.",
|
||||
"single_instance_allowed": "Допускается только один экземпляр Reticulum."
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
"title": "Параметры Reticulum",
|
||||
"data": {
|
||||
"enable_assist": "Направлять входящие сообщения в Assist",
|
||||
"assist_agent": "Агент Assist (id сущности/агента, пусто = по умолчанию)",
|
||||
"assist_language": "Язык Assist (пусто = язык системы)",
|
||||
"allow_all_senders": "Отвечать любому отправителю",
|
||||
"allowed_identities": "Разрешённые адреса отправителей",
|
||||
"default_recipient": "Адрес получателя по умолчанию (для сущности notify)",
|
||||
"greeting": "Приветственное сообщение",
|
||||
"delivery_method": "Способ доставки по умолчанию",
|
||||
"announce_interval": "Интервал анонсов",
|
||||
"propagation_node": "Адрес узла ретрансляции (propagation node)",
|
||||
"sync_interval": "Интервал синхронизации с узлом ретрансляции",
|
||||
"loglevel": "Уровень логирования Reticulum (0-7)"
|
||||
},
|
||||
"data_description": {
|
||||
"enable_assist": "Если включено, входящие сообщения LXMF обрабатываются агентом Assist, а ответ отправляется обратно через Reticulum.",
|
||||
"allowed_identities": "По одному адресу в строке (или через запятую). Используется только если «Отвечать любому отправителю» выключено.",
|
||||
"default_recipient": "16-байтовый hex-адрес LXMF, на который отправляет сущность notify.reticulum.",
|
||||
"announce_interval": "Как часто (в секундах) анонсировать наш адрес. 0 отключает периодические анонсы.",
|
||||
"propagation_node": "Необязательный узел ретрансляции LXMF для доставки по принципу store-and-forward.",
|
||||
"sync_interval": "Как часто (в секундах) забирать сообщения из очереди узла ретрансляции. 0 отключает."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"lxmf_address": { "name": "Адрес LXMF" },
|
||||
"messages_received": { "name": "Сообщений получено" },
|
||||
"messages_sent": { "name": "Сообщений отправлено" },
|
||||
"messages_failed": { "name": "Сообщений не доставлено" },
|
||||
"peers": { "name": "Известные узлы" },
|
||||
"last_message": { "name": "Последнее сообщение" },
|
||||
"last_message_time": { "name": "Время последнего сообщения" },
|
||||
"rx_bytes": { "name": "Принято" },
|
||||
"tx_bytes": { "name": "Передано" },
|
||||
"bitrate": { "name": "Битрейт" },
|
||||
"rssi": { "name": "RSSI" },
|
||||
"snr": { "name": "SNR" },
|
||||
"link_quality": { "name": "Качество канала" }
|
||||
},
|
||||
"binary_sensor": {
|
||||
"connected": { "name": "Подключено" }
|
||||
},
|
||||
"button": {
|
||||
"announce": { "name": "Анонсировать" },
|
||||
"sync": { "name": "Синхронизировать узел ретрансляции" }
|
||||
},
|
||||
"notify": {
|
||||
"message": { "name": "Сообщение" }
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"delivery_method": {
|
||||
"options": {
|
||||
"direct": "Прямая (установить канал)",
|
||||
"opportunistic": "Оппортунистическая (один пакет)",
|
||||
"propagated": "Через ретрансляцию (store-and-forward)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"device_automation": {
|
||||
"trigger_type": {
|
||||
"message_received": "Получено сообщение",
|
||||
"message_delivered": "Сообщение доставлено",
|
||||
"message_failed": "Сбой доставки сообщения",
|
||||
"announce_received": "Получен анонс (услышан узел)"
|
||||
}
|
||||
},
|
||||
"services": {
|
||||
"send_message": {
|
||||
"name": "Отправить сообщение",
|
||||
"description": "Отправить сообщение LXMF узлу Reticulum.",
|
||||
"fields": {
|
||||
"destination": {
|
||||
"name": "Получатель",
|
||||
"description": "16-байтовый hex-хэш адреса LXMF получателя."
|
||||
},
|
||||
"content": {
|
||||
"name": "Текст",
|
||||
"description": "Тело сообщения."
|
||||
},
|
||||
"title": {
|
||||
"name": "Заголовок",
|
||||
"description": "Необязательный заголовок/тема сообщения."
|
||||
},
|
||||
"method": {
|
||||
"name": "Способ",
|
||||
"description": "Используемый способ доставки."
|
||||
},
|
||||
"fields": {
|
||||
"name": "Поля",
|
||||
"description": "Необязательный словарь расширенных полей LXMF."
|
||||
}
|
||||
}
|
||||
},
|
||||
"announce": {
|
||||
"name": "Анонсировать",
|
||||
"description": "Анонсировать адрес LXMF этого Home Assistant в сети."
|
||||
},
|
||||
"request_path": {
|
||||
"name": "Запросить маршрут",
|
||||
"description": "Запросить у сети маршрут до узла.",
|
||||
"fields": {
|
||||
"destination": {
|
||||
"name": "Получатель",
|
||||
"description": "Хэш адреса, до которого нужно найти маршрут."
|
||||
}
|
||||
}
|
||||
},
|
||||
"set_propagation_node": {
|
||||
"name": "Задать узел ретрансляции",
|
||||
"description": "Задать исходящий узел ретрансляции LXMF.",
|
||||
"fields": {
|
||||
"destination": {
|
||||
"name": "Получатель",
|
||||
"description": "Хэш адреса узла ретрансляции."
|
||||
}
|
||||
}
|
||||
},
|
||||
"sync_propagation": {
|
||||
"name": "Синхронизировать узел ретрансляции",
|
||||
"description": "Забрать сообщения из очереди настроенного узла ретрансляции.",
|
||||
"fields": {
|
||||
"max_messages": {
|
||||
"name": "Макс. сообщений",
|
||||
"description": "Максимальное число сообщений для получения."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user