alryaz / hass-moscow-pgu

Moscow PGU services for HomeAssistant
20 stars 2 forks source link
custom-component gosuslugi homeassistant

Московские Госуслуги для HomeAssistant

Предоставление информации о текущем состоянии ваших аккаунтов в Госуслуги Москвы.

  • Передача показаний по счётчикам ЖКХ (вода, электричество)
  • Проверка штрафов ГИБДД (по номеру В/У и СТС)
  • Проверка штрафов ФССП

hacs_badge Лицензия Поддержка

Пожертвование Yandex Пожертвование PayPal

Данная интеграция предоставляет возможность системе HomeAssistant опрашивать API Портала Московских Госуслуг.

Скриншоты

(Возможно увеличить, нажав на картинку и перейдя по ссылке)

Автомобиль без штрафов Автомобиль без штрафов
Водительское удостоверение со штрафами Водительское удостоверение со штрафами
Счётчик холодной воды Счётчик холодной воды
Передача показаний Передача показаний
Школьный дневник Школьный дневник

Установка

Посредством HACS

  1. Откройте HACS (через Extensions в боковой панели)
  2. Добавьте новый произвольный репозиторий:
    1. Выберите Integration (Интеграция) в качестве типа репозитория
    2. Введите ссылку на репозиторий: https://github.com/alryaz/hass-moscow-pgu
    3. Нажмите кнопку Add (Добавить)
    4. Дождитесь добавления репозитория (занимает до 10 секунд)
    5. Теперь вы должны видеть доступную интеграцию Moscow PGU (Госуслуги Москвы) в списке новых интеграций.
  3. Нажмите кнопку Install чтобы увидеть доступные версии
  4. Установите последнюю версию нажатием кнопки Install
  5. Перезапустите HomeAssistant

Примечание: Не рекомендуется устанавливать ветку main. Она используется исключительно для разработки.


Вручную

Клонируйте репозиторий во временный каталог, затем создайте каталог custom_components внутри папки конфигурации вашего HomeAssistant (если она еще не существует). Затем переместите папку moscow_pgu из папки custom_components репозитория в папку custom_components внутри папки конфигурации HomeAssistant. Пример (при условии, что конфигурация HomeAssistant доступна по адресу /mnt/homeassistant/config) для Unix-систем:

git clone https://github.com/alryaz/hass-moscow-pgu.git hass-moscow-pgu
mkdir -p /mnt/homeassistant/config/custom_components
mv hass-moscow-pgu/custom_components/moscow_pgu /mnt/homeassistant/config/custom_components

Конфигурация

Через интерфейс HomeAssistant

  1. Откройте Настройки -> Интеграции
  2. Нажмите внизу справа страницы кнопку с плюсом
  3. Введите в поле поиска Moscow PGU или Госуслуги Москвы
    1. Если по какой-то причине интеграция не была найдена, убедитесь, что HomeAssistant был перезапущен после установки интеграции.
  4. Выберите первый результат из списка
  5. Введите данные вашей учётной записи для ЛК "Госуслуги Москвы"
  6. Нажмите кнопку Продолжить
  7. Через несколько секунд начнётся обновление; проверяйте список ваших объектов на наличие объектов, чьи названия начинаются на MES.

Через configuration.yaml

Базовая конфигурация

Для настройки данной интеграции потребуются данные авторизации в ЛК Госуслуги Москвы.
username - Имя пользователя (телефон / адрес эл. почты)
password - Пароль

moscow_pgu:
  username: !secret moscow_pgu_username
  password: !secret moscow_pgu_password

Несколько пользователей

Возможно добавить несколько пользователей. Для этого вводите данные, используя пример ниже:

moscow_pgu:
    # First account
  - username: !secret first_moscow_pgu_username
    password: !secret first_moscow_pgu_password

    # Second account
  - username: !secret second_moscow_pgu_username
    password: !secret second_moscow_pgu_password

    # Third account
  - username: !secret third_moscow_pgu_username
    password: !secret third_moscow_pgu_password 

Изменение интервалов обновления (ключ scan_interval)

Частота обновления данных (scan_interval) по умолчанию: для каждой функции по-разному

moscow_pgu:
  ...
  # Интервал обновления данных
  scan_interval:
    hours: 6
    seconds: 3
    minutes: 1
    ...

  # ... также возможно задать секундами
  scan_interval: 21600

  # ... также возможно задать для определённых функций
  # Неупомянутые функции будут принимать их значения по умолчанию
  scan_interval:
    water_counters:
      days: 1
    fssp_debts: 3600
    profile:
      hours: 6
      minutes: 30
Фильтрация объектов до загрузки (ключ filter)

Фильтрация объектов может происхожить по двум стратегиям списков: белый (когда определённый набор объектов добавляется, а все остальные игнорируются) и чёрный (когда определённый набор объектов исключается, а все остальные добавляются). С помощью фильтрации также можно реализовать полное отключение обновлений определённых типов сенсоров.

Определяющим фактором, какая стратегия будет применена, является наличие специального символа в перечне добавляемых объектов: * (звёздочка).

При наличии звёздочки все объекты, перечисленные в том же списке, будут исключены из добавления. Пример:

moscow_pgu:
  ...
  filter:
    ...
    # Только дети, чьи имена совпадают с "Владимир" и "Сергей", будут добавлены.
    children: ["Владимир", "Сергей"]

    # Только дневники, чьё имя ребёнка не совпадает с именем "Владимир", будут добавлены.
    diaries: ["*", "Владимир"]

    # Только автомобиль с номером "Ж177ЭЪ799" будет запланирован на проверку штрафов.
    vehicles: "Ж177ЭЪ799"

    # Поддержка объектов долгов ФССП будет полностью отключена (в пределах конфигурации)
    # При этом, этот тип объектов (как и некоторые другие; см ниже) могут принимать только
    # значения `true` и `false` (или `["*"]` и `[]` соответственно). Это связано с тем,
    # что эти объекты повявляются при обновлении данных только в единственном изваянии.
    fssp_debts: false
    # profile: false | true
    # driving_licenses: false | true

Замечание: Для некоторых объектов доступна конфигурация, которая может порождать собой дополнительные сенсоры (Взыскания ФССП и Водительское удостоверение).


Конфигурация по умолчанию

moscow_pgu:
- device_info:
    app_version: 3.10.0.19 (122)
    device_agent: Android 11 (SDK 30) Xiaomi sagit (MI 6)
    device_os: Android
    guid: ''
    user_agent: okhttp/4.9.0
  driving_licenses: []
  filter:
    children:
    - '*'
    diaries:
    - '*'
    driving_licenses:
    - '*'
    electric_counters:
    - '*'
    flats:
    - '*'
    fssp_debts:
    - '*'
    profile:
    - '*'
    vehicles:
    - '*'
    water_counters:
    - '*'
  name_format:
    children: Child - {identifier}
    diaries: Diary - {identifier}
    driving_licenses: Driving license {identifier}
    electric_counters: Electric Counter {identifier}
    flats: Flat - {identifier}
    fssp_debts: FSSP Debts - {identifier}
    profile: Profile - {identifier}
    vehicles: Vehicle {identifier}
    water_counters: '{type} Water Counter - {identifier}'
  scan_interval:
    children:
      hours: 1
    diaries:
      hours: 1
    driving_licenses:
      hours: 2
    electric_counters:
      hours: 24
    flats:
      hours: 24
    fssp_debts:
      hours: 24
    profile:
      hours: 24
    vehicles:
      hours: 2
    water_counters:
      hours: 24
  token: null
  track_fssp_profiles: []

Использование

Ниже представлены примеры использования доступных сенсоров.

Счётчик водоснабжения (sensor.*_water_counter_*)

Значение объекта равно последним показаниям счётчика.

Атрибуты

Список может быть не полон. Некоторые атрибуты появляются в момент получения ответа от сервера.

Атрибут Тип(ы) Значение
id int Идентификатор счётчика
code str Номер счётчика
type str Тип счётчика (горячое = hot, холодное = cold)
flat_id int Идентификатор квартиры
checkup_date str Дата поверки
last_indication_value float Значение последнего переданного показания
last_indication_period str Период последней передачи показаний

Ребёнок (sensor.child_*)

Общая информация о ребёнке + если ребёнок находится сейчас в школе.

Атрибуты

Список может быть не полон. Некоторые атрибуты появляются в момент получения ответа от сервера.

Атрибут Тип(ы) Значение
school str Школа, в которой учится
last_name str Фамилия ребёнка
pay_limit float Ограничение по оплате
first_name str Имя ребёнка
middle_name str Отчество ребёнка
is_at_school bool Находится ли ребёнок в школе
last_update_date NoneType/date Последнее обновление состояния

Транспортное средство (sensor.vehicle_*)

Значение объекта равно:

Атрибуты

Список может быть не полон. Некоторые атрибуты появляются в момент получения ответа от сервера.

Атрибут Тип(ы) Значение
id str Идентификатор
is_evacuated bool Статус эвакуации
license_plate str Государственный регистрационный номер
certificate_series NoneType/str Номер СТС

Взыскания ФССП (sensor.fssp_debts_*)

Значение объекта равно сумме всех неуплаченных взысканий.

Атрибуты

Список может быть не полон. Некоторые атрибуты появляются в момент получения ответа от сервера.

Атрибут Тип(ы) Значение
last_name str Фамилия (запрашивающего)
birth_date str Дата рождения (запрашивающего)
first_name str Имя (запрашивающего)
middle_name str Отчество (запрашивающего)

Школьный дневник (sensor.diary_*)

Перечень оценок ученика в школе.

Состояние объекта равно минимальной оценке из списка доступных. Оценки по предметам указаны в виде атрибутов объекта (названия на русском языке).

Атрибуты

Список может быть не полон. Некоторые атрибуты появляются в момент получения ответа от сервера.

Атрибут Тип(ы) Значение
* float Оценка по предмету

Ребёнок (sensor.child_*)

Общая информация о ребёнке + если ребёнок находится сейчас в школе.

Атрибуты

Список может быть не полон. Некоторые атрибуты появляются в момент получения ответа от сервера.

Атрибут Тип(ы) Значение
school str Школа, в которой учится
last_name str Фамилия ребёнка
pay_limit float Ограничение по оплате
first_name str Имя ребёнка
middle_name str Отчество ребёнка
is_at_school bool Находится ли ребёнок в школе
last_update_date NoneType/date Последнее обновление состояния

Профиль (sensor.profile_*)

Атрибуты

Список может быть не полон. Некоторые атрибуты появляются в момент получения ответа от сервера.

Атрибут Тип(ы) Значение
email str Адрес электронной почты
last_name str Фамилия
birth_date str (date) Дата рождения
first_name str Имя
middle_name str Отчество
phone_number str Номер телефона
email_confirmed bool Статус подтверждения адреса электронной почты
driving_license_number NoneType/str Номер водительского удостоверения1
driving_license_issue_date NoneType/str Дата выдачи водительского удостоверения1

1 Существование данных атрибутов обусловлено задачей идентификации.


Счётчик электроэнергии (sensor.electric_counter_*)

Данный сенсор отображает последние переданные показания за текущий месяц. Если таковые отсутсвуют, счётчик будет принимать значение unknown.

Атрибуты

Список может быть не полон. Некоторые атрибуты появляются в момент получения ответа от сервера.

Атрибут Тип(ы) Значение
type str Тип счётчика
state str Текущее состояние счётчика
status str Коментарий к состоянию передачи показаний
flat_id int Идентификатор
debt_amount float Сумма задолжености
checkup_date str Дата поверки
charges_amount float Сумма начислений
returns_amount float Сумма возвратов
balance_message str Коментарий к балансу
payments_amount float Сумма учтённых платежей
settlement_date str (date) ...
submit_end_date str (date) Дата начала периода передачи показаний
transfer_amount float ...
submit_available bool Доступность передачи показаний
submit_begin_date str (date) Дата начала периода передачи показаний
whole_part_length int Длина целой части (кол-во цифр)
decimal_part_length int Точность счётчика
indications.t1.tariff str Тариф зоны T1
indications.t1.zone_name str Название зоны Т1
indications.t1.indication float Показание по зоне Т1
indications.t2.tariff str Тариф зоны T2
indications.t2.zone_name str Название зоны Т1
indications.t2.indication float Показание по зоне Т2
indications.t3.tariff str Тариф зоны T2
indications.t3.zone_name str Название зоны Т1
indications.t3.indication float Показание по тарифной зоне Т3

Службы

Передача показаний — moscow_pgu.push_indications

Компонент позволяет запускать службу moscow_pgu.push_indications с параметрами:

Раздел Параметр Описание Значения
data indications Показание Число / Числа через запятую / Список
data service_type Тип показаний electric, water 1
data force Игнорировать проверки true / false (опционально)
data dry_run Сухой прогон 2 true / false (опционально)
target entity_id Какой счётчик обновить Объект счётчика

1 Требуется только для объектов квартиры.
2 Не передаёт показания, а только симулирует попытку.

Данная служба применима к:

Данная служба автоматически определяет попытку передать показание меньшее, чем имеющееся количество показаний. Проверку передачи возможно отключить, ОДНАКО ДЕЛАТЬ ЭТО НАСТОЯТЕЛЬНО НЕ РЕКОМЕНДУЕТСЯ в связи с возможными отрицательными последствиями.

Ниже указан пример вызова службы:

service: moscow_pgu.push_indications
data:
  indication: 205
target:
  entity_id: sensor.hot_water_counter_123541

Результатом вызова службы будет событие moscow_pgu_electric_indications_push (для счётчиков электроэнергии) и moscow_pgu_water_indications_push (для счётчиков водоснабжения).

Атрибут Тип Описание
time str Дата и время вызова службы
entity_id str Идентификатор объекта
service_type str Тип счётчика (water, electric)
indications [float]/None Передаваемые показания (после обработки; если обработка не завершилась успехом, принимает значение None)
original_indications ... Показания, с которыми был произведён вызов службы
dry_run bool Если передача является тестовой (без фактической передачи)
success bool Если передача является успешной
reason str Причина ошибки / Сообщение об успешной передаче