diff --git a/custom_components/mikrotik_router/.translations/ru.json b/custom_components/mikrotik_router/.translations/ru.json new file mode 100644 index 0000000..3b0fc8d --- /dev/null +++ b/custom_components/mikrotik_router/.translations/ru.json @@ -0,0 +1,41 @@ +{ + "config": { + "title": "Mikrotik Роутер", + "step": { + "user": { + "title": "Mikrotik Роутер", + "description": "Настройка интеграции роутера Mikrotik.", + "data": { + "name": "Название интеграции", + "host": "Хост", + "port": "Порт", + "username": "Имя пользователя", + "password": "Пароль", + "ssl": "Использовать SSL", + "unit_of_measurement": "Единицы измерения" + } + } + }, + "error": { + "name_exists": "Имя уже используется.", + "cannot_connect": "Нет связи с Mikrotik.", + "ssl_handshake_failure": "Ошибка SSL-соединения", + "connection_timeout": "Таймаут подключения к Mikrotik.", + "wrong_login": "Неверные имя пользователя или пароль." + } + }, + "options": { + "step": { + "init": { + "data": {} + }, + "device_tracker": { + "data": { + "scan_interval": "Период сканирования (требуется перезагрузка HA)", + "track_arp": "Показывать в интерфейсе MAC и IP клиентов", + "unit_of_measurement": "Единицы измерения" + } + } + } + } +} \ No newline at end of file diff --git a/custom_components/mikrotik_router/helper.py b/custom_components/mikrotik_router/helper.py index db3eee3..194a306 100644 --- a/custom_components/mikrotik_router/helper.py +++ b/custom_components/mikrotik_router/helper.py @@ -2,13 +2,15 @@ import logging +from voluptuous import Optional + _LOGGER = logging.getLogger(__name__) # --------------------------- # from_entry # --------------------------- -def from_entry(entry, param, default="") -> dict: +def from_entry(entry, param, default="") -> str: """Validate and return str value from Mikrotik API dict""" if param not in entry: return default @@ -88,7 +90,7 @@ def parse_api( # --------------------------- # get_uid # --------------------------- -def get_uid(entry, key, key_search, keymap) -> str: +def get_uid(entry, key, key_search, keymap) -> Optional(str): """Get UID for data list""" uid = None if not key_search: @@ -111,7 +113,7 @@ def get_uid(entry, key, key_search, keymap) -> str: # --------------------------- # generate_keymap # --------------------------- -def generate_keymap(data, key_search) -> dict: +def generate_keymap(data, key_search) -> Optional(dict): """Generate keymap""" if not key_search: return None diff --git a/custom_components/mikrotik_router/mikrotik_controller.py b/custom_components/mikrotik_router/mikrotik_controller.py index 0949ced..7e43b1d 100644 --- a/custom_components/mikrotik_router/mikrotik_controller.py +++ b/custom_components/mikrotik_router/mikrotik_controller.py @@ -3,6 +3,8 @@ from datetime import timedelta import asyncio import logging + +from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.event import async_track_time_interval @@ -72,6 +74,7 @@ class MikrotikControllerData: # --------------------------- # force_update # --------------------------- + @callback async def force_update(self, _now=None): """Trigger update by timer""" await self.async_update() @@ -79,6 +82,7 @@ class MikrotikControllerData: # --------------------------- # force_fwupdate_check # --------------------------- + @callback async def force_fwupdate_check(self, _now=None): """Trigger hourly update by timer""" await self.async_fwupdate_check() diff --git a/custom_components/mikrotik_router/mikrotikapi.py b/custom_components/mikrotik_router/mikrotikapi.py index 210afbb..da72b3b 100644 --- a/custom_components/mikrotik_router/mikrotikapi.py +++ b/custom_components/mikrotik_router/mikrotikapi.py @@ -4,6 +4,9 @@ import ssl import logging import time from threading import Lock + +from voluptuous import Optional + from .exceptions import ApiEntryNotFound from .const import ( DEFAULT_LOGIN_METHOD, @@ -64,7 +67,7 @@ class MikrotikAPI: # --------------------------- # disconnect # --------------------------- - def disconnect(self) -> bool: + def disconnect(self): """Disconnect from Mikrotik device.""" self._connected = False self._connection = None @@ -161,7 +164,7 @@ class MikrotikAPI: # --------------------------- # path # --------------------------- - def path(self, path) -> list: + def path(self, path) -> Optional(list): """Retrieve data from Mikrotik API.""" if not self._connected or not self._connection: if self._connection_epoch > time.time() - self._connection_retry_sec: @@ -238,7 +241,7 @@ class MikrotikAPI: entry_found = False if not self._connected or not self._connection: if self._connection_epoch > time.time() - self._connection_retry_sec: - return None + return False if not self.connect(): return False @@ -313,7 +316,7 @@ class MikrotikAPI: entry_found = False if not self._connected or not self._connection: if self._connection_epoch > time.time() - self._connection_retry_sec: - return None + return False if not self.connect(): return False @@ -382,7 +385,7 @@ class MikrotikAPI: # --------------------------- # get_traffic # --------------------------- - def get_traffic(self, interfaces) -> list: + def get_traffic(self, interfaces) -> Optional(list): """Get traffic stats""" traffic = None if not self._connected or not self._connection: