В данной статье я расскажу, как достаточно просто и быстро прокинуть устройства из системы Zont в Home Assistant (HA). До этого момента я использовал плагин для Homebridge, написанный Maxmudjon. Он был удобен для управлением машины, но так как я все устройства держу в HA, жалко было тратить дополнительные ресурсы малины на Homebridge. Для меня было важно получить возможность запуска авто, открытия и закрытия, а также получение температуры с датчиков зонта. Включение самого термостата я не реализовывал (ни к чему мне), но кому надо - благодаря данной статье сможет реализовать.
I. Подготовка
Для интеграции zont-online в систему HA нам необходимо получить токен, для этого нужно:
1. Скачать Advanced REST Client (можно использовать плагин для хром).
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 три датчика температуры как создать сенсоры для каждого ? Спасибо за работу
По этому примеру. 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" прописывать?
https://pastebin.com/BeSwx1F0">https://pastebin.com/BeSwx1F0
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) Запрос для смены целевой температуры выглядит так:
Идентификатор прибора (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
Примерно так достал данные. Все работает. 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'