Управление устройством ZONT через Home Assistant

14 января 2020, 15:58

В данной статье я расскажу, как достаточно просто и быстро прокинуть устройства из системы Zont в Home Assistant (HA). До этого момента я использовал плагин для Homebridge, написанный Maxmudjon. Он был удобен для управлением машины, но так как я все устройства держу в HA, жалко было тратить дополнительные ресурсы малины на Homebridge. Для меня было важно получить возможность запуска авто, открытия и закрытия, а также получение температуры с датчиков зонта. Включение самого термостата я не реализовывал (ни к чему мне), но кому надо - благодаря данной статье сможет реализовать. 

I. Подготовка

Для интеграции zont-online в систему HA нам необходимо получить токен, для этого нужно: 

1. Скачать Advanced REST Client (можно использовать плагин для хром).

2. Чтобы закодировать ваш login:password в Base64 формат использую https://www.base64decode.org/ 

 3. При помощи ARC (Advanced REST Client) отправить POST-request на https://zont-online.ru/api/get_authtoken  используя headers:

content-type: application/json
authorization: Basic XXXXXXXX
x-zont-client: your@email

  • (XXXXXXXX - ваш login:password закодированный в Bse64 (его должны были получить во втором шаге)
  • your@email – ваш e-mail, использующийся при авторизации на сайте zont-online)
Найти “token”: “yyyyyyyyyyyyyyyyyyyy” в ответе на запрос. Теперь у вас есть доступ к api через токен: x-zont-client: your@email x-zont-token: yyyyyyyyyyyyyyyyyyyy

4. Используя ARC, можете получить список команд всех ваших устройств. Отправить POST-request к https://zont-online.ru/api/devices, используя headers:

content-type: application/json
x-zont-client: your@email
x-zont-token: yyyyyyyyyyyyyyyyyy

и в body добавить: 
 {"load_io":true}

Теперь вы можете видеть все ваши параметры устройств в zont-online.

6. Найдите device id вашего устройство (к примеру “id”: 12345), вам необходимо скопировать Json путь до параметров устройства (для примера, devices[0].thermometers[0].last_value – ваше первое устройство, первый термометр, devices[0].thermometers[1].last_value - ваше первое устройство, первый термометр, devices[1].balance.value – ваше второе устройство, баланс устройства).

II. Интеграция в HA

7. В secrets.yaml добавляем наш e-mail адрес и токен (если нет данного файла, рекомендую его создать и хранить в нем все свои токены и пароли):
x_zont_client: your@email
x_zont_token: yyyyyyyyyyyyyyyyyyyy

8. Создаем rest/template sensor. Здесь прикладываю свой пример, где получаю информацию с датчиков температуры, состояния охраны и авто запуска авто.

- platform: rest
  resource: https://zont-online.ru/api/devices
  name: zont
  method: POST
  timeout: 30
  scan_interval: 10
  force_update: true
  headers:
    X-ZONT-Client: !secret x_zont_client
    X-ZONT-Token: !secret x_zont_token
    Content-Type: application/json
  payload: '{"load_io": true}'
  value_template: '{{ value_json.ok }}'
  json_attributes:
    - devices
- platform: template
  sensors:
    # Название сенсора
    zont_first_floor:
      # Можете найти devices[X] и thermometers[Y] в 6 шаге инструкции
      value_template: '{{ states.sensor.zont.attributes.devices[0].thermometers[0].last_value }}'
      device_class: temperature
      friendly_name: 'Первый этаж'
      unit_of_measurement: '°C'
- platform: template
  sensors:
    zont_second_floor:
      # Можете найти devices[X] и thermometers[Y] в 6 шаге инструкции
      value_template: '{{ states.sensor.zont.attributes.devices[0].thermometers[1].last_value }}'
      device_class: temperature
      friendly_name: 'Второй этаж'
      unit_of_measurement: '°C'
- platform: template
  sensors:
    zont_auto_ignition:
  # Здесь используется второе устройство из Zonta.
      value_template: '{{ states.sensor.zont.attributes.devices[1].io["auto-ignition"].state }}'
      friendly_name: 'Автозапуск'
- platform: template
  sensors:
    zont_guard:
      value_template: '{{ states.sensor.zont.attributes.devices[1].io["guard-state"] }}'
      friendly_name: 'Охрана'

9. Создаем rest-command (в configuration.yaml) 

  zont_set_auto_ignition_enabled:
    url: https://zont-online.ru/api/set_io_port
    method: POST
    headers:
      X-ZONT-Client: !secret x_zont_client
      X-ZONT-Token: !secret x_zont_token
      Content-Type: application/json
    # Измените device_id на свой и 6 пункта данной инструкции
    payload: '{"device_id":12345,"portname":"auto-ignition","type":"auto-ignition","value":{"state":"enabled"}}'
       
  zont_set_auto_ignition_disabled:
    url: https://zont-online.ru/api/set_io_port
    method: POST
    headers:
      X-ZONT-Client: !secret x_zont_client
      X-ZONT-Token: !secret x_zont_token
      Content-Type: application/json
    # Измените device_id на свой и 6 пункта данной инструкции
    payload: '{"device_id": 12345,"portname":"auto-ignition","type":"auto-ignition","value":{"state":"disabled"}}'
  zont_set_guard_state_enabled:
    url: https://zont-online.ru/api/set_io_port
    method: POST
    headers:
      X-ZONT-Client: !secret x_zont_client
      X-ZONT-Token: !secret x_zont_token
      Content-Type: application/json
    # Измените device_id на свой и 6 пункта данной инструкции
    payload: '{"device_id":12345,"portname": "guard-state",
       "type": "string", "value": "enabled"}'
  zont_set_guard_state_disabled:
    url: https://zont-online.ru/api/set_io_port
    method: POST
    headers:
      X-ZONT-Client: !secret x_zont_client
      X-ZONT-Token: !secret x_zont_token
      Content-Type: application/json
    # Измените device_id на свой и 6 пункта данной инструкции
    payload: '{"device_id":12345,"portname": "guard-state",
       "type": "string", "value": "disabled"}'

10. Создание template switch для управлением машины.

#ZONT автозапуск
  - platform: template
    switches:
      zont_start:
        value_template: "{{ is_state('sensor.zont_auto_ignition', 'enabled') }}"
        turn_on:
          service: rest_command.zont_set_auto_ignition_enabled
        turn_off:
          service: rest_command.zont_set_auto_ignition_disabled
#ZONT охрана          
  - platform: template
    switches:
      zont_guard:
        value_template: "{{ is_state('sensor.zont_guard', 'enabled') }}"
        turn_on:
          service: rest_command.zont_set_guard_state_enabled
        turn_off:
          service: rest_command.zont_set_guard_state_disabled

После перезапуска НА у Вас должны появится сенсоры с состоянием охраны и автозапуска, а также свитчи для запуска и постановки на охрану. 
Информация по API Zont

За основу был взят материал kirill_ru

Всем спасибо за уделенное время!


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @Soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Максим Лазарев (klouner)
    Максим Лазарев (klouner) 5 месяцев назад

    Спасибо! Подробная инструкция! Я примерно так же реализовал через приложение "команды". Для меня главное было чтоб сири включала автопрогрев.

    • Николай Торов (toroff)
      Николай Торов (toroff) 5 месяцев назад
      Для меня тоже главное удобство - это через Сири машину запускать)

      • Максим Лазарев (klouner)
        Максим Лазарев (klouner) 5 месяцев назад

        Если что, вот команда: https://www.icloud.com/shortcu...

        Достаточно просто реализовано. Работает зато безупречно :)

        При установке необходимо ввести username, почту, пароль и device_id (он есть в личном кабинете ZONT-Online, либо в приложении в настройках в Общих).

  2. (gvasiliy)
    (gvasiliy) отредактировано 5 месяцев назад

    Спасибо отличная работа . Может ошибка у ВАС . логин:пароль при генерации нужно писать через двоеточие . Через запятую у меня не получилось.

    Не подскажите у меня ZONT700 три датчика температуры как создать сенсоры для каждого ? Спасибо за работу

    • Николай Торов (toroff)
      Николай Торов (toroff) 5 месяцев назад
      так в описание указанно через двоеточие. 
      - platform: template
        sensors:
          # Название сенсора
          zont_first_floor:
            # Можете найти devices[X] и thermometers[Y] в 6 шаге инструкции
            value_template: '{{ states.sensor.zont.attributes.devices[0].thermometers[0].last_value }}'
            device_class: temperature
            friendly_name: 'Первый этаж'
            unit_of_measurement: '°C'
      - platform: template
        sensors:
          zont_second_floor:
            # Можете найти devices[X] и thermometers[Y] в 6 шаге инструкции
            value_template: '{{ states.sensor.zont.attributes.devices[0].thermometers[1].last_value }}'

      По этому примеру. 2 датчик будет -  value_template: '{{ states.sensor.zont.attributes.devices[0].thermometers[2].last_value }}'

  3. (Sonar)
    (Sonar) 5 месяцев назад

    Спасибо большое за статью.

    А как можно обратную связь получить от машины - успешны запуск или нет в HA?

    И как через Алису (может кто-то уже себе сделал) прикрутить команду запуска двигателя?

    И поддерживаю вопрос про 3 датчика температуры.

    Да, еще вопрос, а как через ARC подать команду на запуск двигателя?))

    • Николай Торов (toroff)
      Николай Торов (toroff) отредактировано 5 месяцев назад

      Для машины используем

      {{ states.sensor.zont.attributes.devices[1].io.temperature[0].value}} - для первого датчика

      {{ states.sensor.zont.attributes.devices[1].io.temperature[1].value}} - второго

      {{ states.sensor.zont.attributes.devices[1].io.temperature[2].value}} - третьего

      Только будьте внимательны к devices[1] - у меня сигналка второе устройство поэтому 1, если устройство первое то ставим devices[0]

    • (gvasiliy)
      (gvasiliy) 5 месяцев назад

      ZONT700 так заработало



      - platform: template

      sensors:

      # Your sensor name

      zont_car0:

      value_template: '{{ states.sensor.zont.attributes.devices[0].io.temperature[0].value }}'

      device_class: temperature

      # Your sensor friendly name

      friendly_name: 'Машина'

      unit_of_measurement: '°C'

      - platform: template

      sensors:

      # Your sensor name

      zont_car1:

      value_template: '{{ states.sensor.zont.attributes.devices[0].io.temperature[1].value }}'

      device_class: temperature

      # Your sensor friendly name

      friendly_name: 'Машина'

      unit_of_measurement: '°C'

      - platform: template

      sensors:

      # Your sensor name

      zont_car2:

      value_template: '{{ states.sensor.zont.attributes.devices[0].io.temperature[2].value }}'

      device_class: temperature

      # Your sensor friendly name

      friendly_name: 'Машина'

      unit_of_measurement: '°C'

  4. (Lastik_Lastikov)
    (Lastik_Lastikov) 5 месяцев назад

    в  sercets переменные через дефисы, а в конфиге через нижнее подчеркивание - в итоге ошибка:

    x-zont-client: your@email

    X-ZONT-Client: !secret x_zont_client

  5. (gvasiliy)
    (gvasiliy) 5 месяцев назад

    https://zont-online.ru/api/docs/ здесь можно много понять

К списку статей

Похожие статьи

04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
15 ноября 2018, 09:42
Способы автоматизации механических ворот
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации