Статья

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

В данной статье я расскажу, как достаточно просто и быстро прокинуть устройства из системы 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

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


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

Для меня тоже главное удобство - это через Сири машину запускать)

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

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

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

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

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

так в описание указанно через двоеточие. 
- 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 }}'

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

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

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

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

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

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


{{ 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]

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'

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



x-zont-client: your@email





X-ZONT-Client: !secret x_zont_client

Да мой косяк. Сейчас попробуем исправить

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



Спасибо за статью, в версии Home Assistant 0.116.4 удалось получить данные температуры с такими исправлениями:

https://sprut.ai/static/media/cache/00/66/85/5/5594040/69052/1000x_image.png?1603705870" alt="1000x_image.png?1603705870" />

т.е. аттрибуты получаю через state_attr(), при попытке получать как в примере - были ошибки в консоле

рабочий темплейт:  value_template: "{{ state_attr('sensor.zont','devices')[0].thermometers[0].last_value }}"

Помогите, пожалуйста, новичку.
Пытаюсь подружить Home Assistant c Mega SX 350, чтобы получать данные с датчиков температуры и отправлять команды  (кнопки в web интерфейсе).

Дошел до шага 8.

далее затык

"
8. Создаем rest/template sensor.

" -  это нужно в "configuration.yaml" прописывать?

sensors:


- platform: rest


resource: https://zont-online.ru/api/devices">https://zont-online.ru/api/dev...


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: "{{ state_attr('sensor.zont','devices')[0].thermometers[0].last_value }}"


device_class: temperature


friendly_name: 'Первый этаж'


unit_of_measurement: '°C'

с такой конфигурацией возникает ошибка   - Component error: sensors - Integration 'sensors' not found.

Рабочий конфиг с Zont: https://pastebin.com/BeSwx1F0">https://pastebin.com/BeSwx1F0

Спасибо! Буду пробовать. 

Добавлю по управлению котлом. Хоть этого вопроса напрямую в статье не касались, но есть ссылка на документацию с описанием API, которая к сожалению, частично не актуальна. Обращался в тех. поддержку, вот такой ответ (речь шла про устройства H2000+ и Connect+, не исключено, что для других устройства запросы отличаются):


1) Запрос для смены целевой температуры выглядит так:


  1. https://zont-online.ru/api/send_z3k_command">https://zont-online.ru/api/sen... 
  2. {
  3. "device_id": ..., // идентификатор прибора 
  4. "object_id": ..., // идентификатор контура 
  5. "command_name": "TargetTemperature", 
  6. "command_args": {"value": 56}, // желаемая целевая 
  7. "is_guaranteed": false/true
  8. }

Идентификатор прибора (device_id) можно увидеть в настройках. Идентификатор отопительного контура (object_id) добыть чуть сложнее: нужно отправить запрос на https://zont-online.ru/api/devices, найти нужный контур в ответе на этот вопрос в массиве devices[].z3k_config.heating_circuits, и у нужного контура взять значение поля id. 



is_guaranteed — признак гарантированной доставки команды. Если команду не удастся доставить сразу же, сервер запомнит её и будет пытаться доставить снова при выходе прибора на связь, пока прибор не подтвердит получение. Если false, сервер сделает однократную попытку доставить команду.


2) Запрос для смены режима:


https://zont-online.ru/api/send_z3k_command">https://zont-online.ru/api/sen... 


{


"device_id": ..., // идентификатор прибора 


"object_id": ..., // идентификатор режима 


"command_name": "SelectHeatingMode", 


"command_args": null, 


"is_guaranteed": false/true 


}

P.S. Оформил более удобным методом: https://pastebin.com/paKVNypA">https://pastebin.com/paKVNypA

У меня при запросе https://zont-online.ru/api/devices в выданном DETAILS нет информации типа: devices[0].thermometers[0].last_value, хотя в системе есть один датчик температуры. В чем может быть причина?
У меня тоже thermometers нет. То ли Api изменилось, то ли специфично для каких то устройств. У меня Zont Climatic. До железок добрался через "io" и далее по коду устройства. Аттрибута lastvalue больше нет. В "io" по id'шнику устройства будут специфичные данному устройству свойства.

Примерно так достал данные. Все работает. 20526 и 20522 - id шники устройств. Их несложно найти в devices.

- platform: template
sensors:
zont_street_temp:
value_template: "{{ state_attr('sensor.zont','devices')[0].io['z3k-state']['20526'].curr_temp }}"
device_class: temperature
friendly_name: 'Улица'
unit_of_measurement: '°C'

- platform: template
sensors:
zont_radiators_temp:
value_template: "{{ state_attr('sensor.zont','devices')[0].io['z3k-state']['20522'].curr_temp }}"
device_class: temperature
friendly_name: 'tТН Радиторы'
unit_of_measurement: '°C'

Вернуться назад
Вернуться назад