Files
energys 4d873b0331
Build and Push / maintence (push) Successful in 3s
Build and Push / buildApp (push) Successful in 13s
Build and Push / pushApp (push) Successful in 8s
Add api.html
2026-09-30 11:26:11 +09:00

3516 lines
244 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>ZONT API</title>
<style>
.highlight table td { padding: 5px; }
.highlight table pre { margin: 0; }
.highlight .gh {
color: #999999;
}
.highlight .sr {
color: #f6aa11;
}
.highlight .go {
color: #888888;
}
.highlight .gp {
color: #555555;
}
.highlight .gs {
}
.highlight .gu {
color: #aaaaaa;
}
.highlight .nb {
color: #f6aa11;
}
.highlight .cm {
color: #75715e;
}
.highlight .cp {
color: #75715e;
}
.highlight .c1 {
color: #75715e;
}
.highlight .cs {
color: #75715e;
}
.highlight .c, .highlight .cd {
color: #75715e;
}
.highlight .err {
color: #960050;
}
.highlight .gr {
color: #960050;
}
.highlight .gt {
color: #960050;
}
.highlight .gd {
color: #49483e;
}
.highlight .gi {
color: #49483e;
}
.highlight .ge {
color: #49483e;
}
.highlight .kc {
color: #66d9ef;
}
.highlight .kd {
color: #66d9ef;
}
.highlight .kr {
color: #66d9ef;
}
.highlight .no {
color: #66d9ef;
}
.highlight .kt {
color: #66d9ef;
}
.highlight .mf {
color: #ae81ff;
}
.highlight .mh {
color: #ae81ff;
}
.highlight .il {
color: #ae81ff;
}
.highlight .mi {
color: #ae81ff;
}
.highlight .mo {
color: #ae81ff;
}
.highlight .m, .highlight .mb, .highlight .mx {
color: #ae81ff;
}
.highlight .sc {
color: #ae81ff;
}
.highlight .se {
color: #ae81ff;
}
.highlight .ss {
color: #ae81ff;
}
.highlight .sd {
color: #e6db74;
}
.highlight .s2 {
color: #e6db74;
}
.highlight .sb {
color: #e6db74;
}
.highlight .sh {
color: #e6db74;
}
.highlight .si {
color: #e6db74;
}
.highlight .sx {
color: #e6db74;
}
.highlight .s1 {
color: #e6db74;
}
.highlight .s {
color: #e6db74;
}
.highlight .na {
color: #a6e22e;
}
.highlight .nc {
color: #a6e22e;
}
.highlight .nd {
color: #a6e22e;
}
.highlight .ne {
color: #a6e22e;
}
.highlight .nf {
color: #a6e22e;
}
.highlight .vc {
color: #ffffff;
}
.highlight .nn {
color: #ffffff;
}
.highlight .nl {
color: #ffffff;
}
.highlight .ni {
color: #ffffff;
}
.highlight .bp {
color: #ffffff;
}
.highlight .vg {
color: #ffffff;
}
.highlight .vi {
color: #ffffff;
}
.highlight .nv {
color: #ffffff;
}
.highlight .w {
color: #ffffff;
}
.highlight {
color: #ffffff;
}
.highlight .n, .highlight .py, .highlight .nx {
color: #ffffff;
}
.highlight .ow {
color: #f92672;
}
.highlight .nt {
color: #f92672;
}
.highlight .k, .highlight .kv {
color: #f92672;
}
.highlight .kn {
color: #f92672;
}
.highlight .kp {
color: #f92672;
}
.highlight .o {
color: #f92672;
}
</style>
<link href="stylesheets/screen-a1ce949a.css" rel="stylesheet" media="screen" />
<link href="stylesheets/print-bccf8c07.css" rel="stylesheet" media="print" />
<script src="javascripts/all_nosearch-c275c2f6.js"></script>
</head>
<body class="index" data-languages="[&quot;shell&quot;,&quot;python&quot;,&quot;php&quot;]">
<a href="#" id="nav-button">
<span>
NAV
<img src="images/navbar-cad8cdcb.png" alt="Navbar" />
</span>
</a>
<div class="toc-wrapper">
<img src="images/logo-5b4d15c3.png" class="logo" alt="Logo" />
<div class="lang-selector">
<a href="#" data-language-name="shell">curl</a>
<a href="#" data-language-name="python">python</a>
<a href="#" data-language-name="php">php</a>
</div>
<ul id="toc" class="toc-list-h1">
<li>
<a href="#3394112aa9" class="toc-h1 toc-link" data-title="Введение">Введение</a>
<ul class="toc-list-h2">
<li>
<a href="#api" class="toc-h2 toc-link" data-title="Облегчённое API">Облегчённое API</a>
</li>
<li>
<a href="#59221eefb0" class="toc-h2 toc-link" data-title="Примеры">Примеры</a>
</li>
</ul>
</li>
<li>
<a href="#8ff625527c" class="toc-h1 toc-link" data-title="Формат запросов">Формат запросов</a>
<ul class="toc-list-h2">
<li>
<a href="#54a7a7ceec" class="toc-h2 toc-link" data-title="Результат запроса">Результат запроса</a>
</li>
</ul>
</li>
<li>
<a href="#a1ce3c1a83" class="toc-h1 toc-link" data-title="Аутентификация">Аутентификация</a>
<ul class="toc-list-h2">
<li>
<a href="#3e1d89448d" class="toc-h2 toc-link" data-title="Аутентификация паролем">Аутентификация паролем</a>
</li>
<li>
<a href="#2da6c128e5" class="toc-h2 toc-link" data-title="Аутентификация с помощью токена">Аутентификация с помощью токена</a>
</li>
<li>
<a href="#get_authtoken" class="toc-h2 toc-link" data-title="Метод get_authtoken — Получение аутентификационного токена">Метод get_authtoken — Получение аутентификационного токена</a>
</li>
</ul>
</li>
<li>
<a href="#7ab03d602e" class="toc-h1 toc-link" data-title="Устройства">Устройства</a>
<ul class="toc-list-h2">
<li>
<a href="#devices" class="toc-h2 toc-link" data-title="devices — Запрос устройств">devices — Запрос устройств</a>
</li>
<li>
<a href="#add_device" class="toc-h2 toc-link" data-title="add_device — Добавить устройство">add_device — Добавить устройство</a>
</li>
<li>
<a href="#delete_device" class="toc-h2 toc-link" data-title="delete_device — Удалить устройство">delete_device — Удалить устройство</a>
</li>
<li>
<a href="#update_device" class="toc-h2 toc-link" data-title="update_device — Изменение настроек устройства">update_device — Изменение настроек устройства</a>
</li>
<li>
<a href="#set_io_port" class="toc-h2 toc-link" data-title="set_io_port — Управление состоянием устройства">set_io_port — Управление состоянием устройства</a>
</li>
<li>
<a href="#send_custom_command" class="toc-h2 toc-link" data-title="send_custom_command — Отправка пользовательской команды">send_custom_command — Отправка пользовательской команды</a>
</li>
</ul>
</li>
<li>
<a href="#60aabf0ce3" class="toc-h1 toc-link" data-title="Загрузка данных">Загрузка данных</a>
<ul class="toc-list-h2">
<li>
<a href="#load_data" class="toc-h2 toc-link" data-title="load_data — Загрузка различных видов данных">load_data — Загрузка различных видов данных</a>
</li>
<li>
<a href="#raw_events" class="toc-h2 toc-link" data-title="raw_events — История событий">raw_events — История событий</a>
</li>
</ul>
</li>
<li>
<a href="#d6a1387469" class="toc-h1 toc-link" data-title="Типы сохраняемых данных">Типы сохраняемых данных</a>
<ul class="toc-list-h2">
<li>
<a href="#delta-time-array" class="toc-h2 toc-link" data-title="Формат Delta-time Array">Формат Delta-time Array</a>
</li>
<li>
<a href="#temperature" class="toc-h2 toc-link" data-title="temperature — показания температурных датчиков">temperature — показания температурных датчиков</a>
</li>
<li>
<a href="#thermostat_work" class="toc-h2 toc-link" data-title="thermostat_work — данные о работе термостата">thermostat_work — данные о работе термостата</a>
</li>
<li>
<a href="#custom_controls" class="toc-h2 toc-link" data-title="custom_controls — история состояний пользовательских статусов">custom_controls — история состояний пользовательских статусов</a>
</li>
<li>
<a href="#z3k_temperature" class="toc-h2 toc-link" data-title="z3k_temperature — история состояний пользовательских статусов">z3k_temperature — история состояний пользовательских статусов</a>
</li>
<li>
<a href="#z3k_radio_sensor" class="toc-h2 toc-link" data-title="z3k_radio_sensor — история значений с радиодатчиков">z3k_radio_sensor — история значений с радиодатчиков</a>
</li>
<li>
<a href="#z3k_heating_circuit" class="toc-h2 toc-link" data-title="z3k_heating_circuit — история состояний контуров отопления">z3k_heating_circuit — история состояний контуров отопления</a>
</li>
<li>
<a href="#z3k_web_element" class="toc-h2 toc-link" data-title="z3k_web_element — история состояний пользовательских кнопок">z3k_web_element — история состояний пользовательских кнопок</a>
</li>
<li>
<a href="#z3k_boiler_adapter-opentherm-ems-bsb" class="toc-h2 toc-link" data-title="z3k_boiler_adapter — данные о работе котла по OpenTherm / EMS / BSB">z3k_boiler_adapter — данные о работе котла по OpenTherm / EMS / BSB</a>
</li>
<li>
<a href="#ztc_state-gsm-wi-fi" class="toc-h2 toc-link" data-title="ztc_state — состояние контроллера (питание, GSM, Wi-Fi)">ztc_state — состояние контроллера (питание, GSM, Wi-Fi)</a>
</li>
</ul>
</li>
<li>
<a href="#140df53891" class="toc-h1 toc-link" data-title="Типы устройств">Типы устройств</a>
</li>
<li>
<a href="#d6d82d68e1" class="toc-h1 toc-link" data-title="Параметры устройств">Параметры устройств</a>
<ul class="toc-list-h2">
<li>
<a href="#2abb8ebaca" class="toc-h2 toc-link" data-title="Общие для всех типов устройств">Общие для всех типов устройств</a>
</li>
<li>
<a href="#34520a8155" class="toc-h2 toc-link" data-title="Состояние беспроводной сети">Состояние беспроводной сети</a>
</li>
<li>
<a href="#ztc-mega-sx-zont-h" class="toc-h2 toc-link" data-title="Охрана (ZTC, Mega SX, ZONT H)">Охрана (ZTC, Mega SX, ZONT H)</a>
</li>
<li>
<a href="#ztc" class="toc-h2 toc-link" data-title="Взаимодействие с автомобилем (ZTC)">Взаимодействие с автомобилем (ZTC)</a>
</li>
<li>
<a href="#zont-h" class="toc-h2 toc-link" data-title="Управление отоплением (ZONT H)">Управление отоплением (ZONT H)</a>
</li>
<li>
<a href="#ztc-7xx-mega-sx" class="toc-h2 toc-link" data-title="Пользовательские команды и статусы (ZTC-7xx, Mega SX)">Пользовательские команды и статусы (ZTC-7xx, Mega SX)</a>
</li>
</ul>
</li>
<li>
<a href="#61b7f2ae17" class="toc-h1 toc-link" data-title="Получение архивов данных">Получение архивов данных</a>
<ul class="toc-list-h2">
<li>
<a href="#generate_archive" class="toc-h2 toc-link" data-title="generate_archive — создать архив">generate_archive — создать архив</a>
</li>
<li>
<a href="#download_generated_archive" class="toc-h2 toc-link" data-title="download_generated_archive — скачать файл архива">download_generated_archive — скачать файл архива</a>
</li>
</ul>
</li>
</ul>
<ul class="toc-footer">
<li><a href='https://zont.online/register'>Зарегистрироваться на zont.online</a></li>
<li><a href='https://github.com/lord/slate'>Оформлено с помощью Slate</a></li>
</ul>
</div>
<div class="page-wrapper">
<div class="dark-box"></div>
<div class="content">
<h1 id='3394112aa9'>Введение</h1>
<p>Система <a href="https://zont.online">ZONT</a> предоставляет API для получения информации
о состоянии устройств ZONT и Mega SX, а также для управления ими через внешние приложения и сайты.</p>
<p>Все функции, доступные в <a href="https://my.zont.online/">веб-интерфейсе личного кабинета</a>, доступны и
через API, что позволяет реализовать полноценную интеграцию с системой.</p>
<blockquote>
<p>Обратите внимание: документация API находится в процессе обновления.
Если вы не нашли необходимую функцию — <a href="mailto:admin@zont.online">свяжитесь с нами</a>,
и мы постараемся помочь или дополнить описание.</p>
</blockquote>
<h3 id='api'>Облегчённое API</h3>
<p>Если вам не требуется вся полнота возможностей, рекомендуем воспользоваться
<a href="https://my.zont.online/api/widget/v3">облегчённым API</a> — оно предназначено
для базового взаимодействия с приборами и может быть удобным решением для быстрых интеграций.</p>
<h2 id='59221eefb0'>Примеры</h2><pre class="highlight python tab-python"><code><span class="c"># $ pip install requests</span>
<span class="kn">import</span> <span class="nn">requests</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
</code></pre>
<p>В правой части страницы вы найдёте готовые работающие примеры кода на разных языках,
которые делают соответствующие запросы к API. Язык примеров можно переключить
с помощью кнопок справа вверху.</p>
<ul>
<li>Примеры на Python используют библиотеку <a href="http://docs.python-requests.org/">requests</a></li>
<li>Примеры на PHP используют библиотеку <a href="http://requests.ryanmccue.info/">Requests for PHP</a></li>
</ul>
<h1 id='8ff625527c'>Формат запросов</h1><pre class="highlight http tab-http"><code><span class="nf">POST</span> <span class="nn">https://my.zont.online/api/set_io_port</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
<span class="na">Host</span><span class="p">:</span> <span class="s">zont-online.ru</span>
<span class="na">Content-Type</span><span class="p">:</span> <span class="s">application/json</span>
<span class="na">Content-Length</span><span class="p">:</span> <span class="s">88</span>
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic ZWxvbjptYXJzNGV2ZXI=</span>
<span class="na">X-ZONT-Client</span><span class="p">:</span> <span class="s">elon@tesla.com</span>
<span class="p">{</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1209</span><span class="p">,</span><span class="w">
</span><span class="s2">"portname"</span><span class="p">:</span><span class="w"> </span><span class="s2">"siren"</span><span class="p">,</span><span class="w">
</span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"bool"</span><span class="p">,</span><span class="w">
</span><span class="s2">"value"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p>Обращения к API производятся с помощью POST-запросов на адрес <code>https://my.zont.online/api/method</code>, где <em>method</em> — названия метода API. Некоторые методы вызываются с помощью метода GET, это оговаривается отдельно в описании этих методов.</p>
<p>В каждом запросе должен быть указан заголовок <code>X-ZONT-Client</code>. Укажите в этом заголовке ваш e-mail или иной контакт, по которому мы сможем связаться с вами в случае планируемых изменений в API.</p>
<p>Параметры запроса передаются одним из способов:</p>
<ul>
<li>В теле запроса в формате <a href="https://ru.wikipedia.org/wiki/JSON">JSON</a>. Заголовок <code>Content-Type</code> при этом должен быть равен <code>application/json</code>. Этот способ является предпочтительным.</li>
<li>В теле запроса в формате <code>имя1=значение1&amp;имя2=значение2</code>. Это стандартный формат передачи параметров в POST-запросах. Заголовок <code>Content-Type</code> при этом должен быть равен <code>application/x-www-form-urlencoded</code>. Такой способ передачи параметров может использоваться только в тех случаях, когда параметры простые, без вложенности.</li>
<li>В случае GET-запроса параметры передаются в URL, например: <code>https://my.zont.online/api/method?arg1=value1&amp;arg2=value2</code>.</li>
</ul>
<h2 id='54a7a7ceec'>Результат запроса</h2><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="s2">"error"</span><span class="p">:</span><span class="w"> </span><span class="s2">"no_such_device"</span><span class="p">,</span><span class="w">
</span><span class="s2">"error_ui"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Устройство не найдено"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p>Если не оговорено иное, сервер отвечает на запрос результатом в формате <a href="https://ru.wikipedia.org/wiki/JSON">JSON</a>.
В возвращаемом объекте всегда присутствует поле <code>&quot;ok&quot;</code>, которое равно <code>true</code> в случае успеха или <code>false</code> в случае
ошибки. Если поле <code>&quot;ok&quot;</code> равно <code>false</code>, то в ответе также будут присутствовать поля <code>&quot;error&quot;</code> с кодом ошибки
и <code>&quot;error_ui&quot;</code> с её описанием на русском языке. <code>&quot;error_ui&quot;</code> может содержать либо строку, либо массив строк если
возникло несколько ошибок.</p>
<h1 id='a1ce3c1a83'>Аутентификация</h1>
<p>Большинство запросов к API требуют аутентификации. В данный момент поддерживается два метода аутентификации:
с помощью пароля, и с помощью аутентификационного токена.</p>
<p>Предпочтительная схема взаимодействия с API выглядит так:</p>
<ol>
<li>Получить аутентификационный токен с помощью метода <a href="#get_authtoken"><code>get_authtoken</code></a>. Этот запрос подтвердить
логином и паролем пользователя.</li>
<li>Дальнейшие запросы аутентифицировать полученным токеном, а пароль пользователя больше не использовать и не хранить.</li>
<li>Если запрос к API провалился с кодом 403, то возможно токен был отозван пользователем. В этом случае
нужно предложить пользователю снова ввести логин и пароль, получить новый токен с помощью <code>get_authtoken</code>
и в дальнешем использовать его.</li>
</ol>
<p><a name="password_auth"></a> </p>
<h2 id='3e1d89448d'>Аутентификация паролем</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/get_authtoken'</span> <span class="se">\</span>
-u <span class="s1">'login:password'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"client_name": "My cool app"}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
<span class="s">'https://my.zont.online/api/get_authtoken'</span><span class="p">,</span>
<span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'login'</span><span class="p">,</span> <span class="s">'password'</span><span class="p">),</span>
<span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">},</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span><span class="s">"client_name"</span><span class="p">:</span> <span class="s">"My cool app"</span><span class="p">}</span>
<span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span>
<span class="s1">'https://my.zont.online/api/get_authtoken'</span><span class="p">,</span>
<span class="p">[</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">],</span>
<span class="nb">json_encode</span><span class="p">([</span><span class="s1">'client_name'</span> <span class="o">=&gt;</span> <span class="s1">'My cool app'</span><span class="p">]),</span>
<span class="p">[</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s1">'login'</span><span class="p">,</span> <span class="s1">'password'</span><span class="p">]]</span>
<span class="p">);</span>
</code></pre>
<blockquote>
<p>Не забудьте заменить login, password на логин и пароль пользователя, your@email.com на email разработчика, а &quot;My cool app&quot; — на название вашего приложения</p>
</blockquote>
<p>Просто укажите логин и пароль пользователя с помощью HTTP Basic Authentication. Это можно сделать либо встроенными средствами вашей http-библиотеки, либо указав заголовок:</p>
<p><code>Authorization: Basic XXX</code></p>
<p>где <code>XXX</code> — это строка <code>логин:пароль</code>, закодированная в <a href="https://ru.wikipedia.org/wiki/Base64">Base64</a>.</p>
<aside class="notice">
Хотя пароль пользователя указывается в открытом виде, тем не менее это безопасно, так как API доступно только по зашифрованному протоколу HTTPS.
</aside>
<h2 id='2da6c128e5'>Аутентификация с помощью токена</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/some_method'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Token: xxxxxxxxxxxxxxxxxx'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
<span class="s">'https://my.zont.online/api/some_method'</span><span class="p">,</span>
<span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">,</span>
<span class="s">'X-ZONT-Token'</span><span class="p">:</span> <span class="s">'xxxxxxxxx'</span><span class="p">}</span>
<span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span>
<span class="s1">'https://my.zont.online/api/some_method'</span><span class="p">,</span>
<span class="p">[</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'X-ZONT-Token'</span><span class="o">:</span> <span class="s1">'xxxxxxxx'</span><span class="p">]</span>
<span class="p">);</span>
</code></pre>
<p>Укажите аутентификационный токен в заголовке <code>X-ZONT-Token</code>.</p>
<p><a name="get_authtoken"></a></p>
<h2 id='get_authtoken'>Метод get_authtoken — Получение аутентификационного токена</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/get_authtoken'</span> <span class="se">\</span>
-u <span class="s1">'login:password'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"client_name": "My cool app"}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
<span class="s">'https://my.zont.online/api/get_authtoken'</span><span class="p">,</span>
<span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'login'</span><span class="p">,</span> <span class="s">'password'</span><span class="p">),</span>
<span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">},</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span><span class="s">"client_name"</span><span class="p">:</span> <span class="s">"My cool app"</span><span class="p">}</span>
<span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">token</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="s">'token'</span><span class="p">]</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span>
<span class="s1">'https://my.zont.online/api/get_authtoken'</span><span class="p">,</span>
<span class="p">[</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">],</span>
<span class="nb">json_encode</span><span class="p">([</span><span class="s1">'client_name'</span> <span class="o">=&gt;</span> <span class="s1">'My cool app'</span><span class="p">]),</span>
<span class="p">[</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s1">'login'</span><span class="p">,</span> <span class="s1">'password'</span><span class="p">]]</span>
<span class="p">);</span>
<span class="nv">$token</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">token</span><span class="p">;</span>
</code></pre>
<p><code>POST https://my.zont.online/api/get_authtoken</code></p>
<p>Возвращает аутентификационный токен для использования в дальнейшем для запросов от имени указанного пользователя.</p>
<p>Этот метод должен отправляться с <a href="#password_auth">аутентификацией по паролю</a>.</p>
<h3 id='6744ad4c7a'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>client_name</code></td>
<td>string</td>
<td>человекопонятное название вашего приложения</td>
</tr>
</tbody></table>
<h3 id='9fa227c53f'>Результат</h3>
<p>В поле <code>token</code> будет строка — аутентификационный токен, который нужно указывать в заголовке <code>X-ZONT-Token</code>
в последующих запросах.</p>
<h1 id='7ab03d602e'>Устройства</h1>
<p><a name="devices"></a></p>
<h2 id='devices'>devices — Запрос устройств</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/devices'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"load_io": true}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/devices'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">'load_io'</span><span class="p">:</span> <span class="bp">True</span><span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/devices'</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'load_io'</span> <span class="o">=&gt;</span> <span class="kc">true</span><span class="p">);</span>
<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">);</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$data</span><span class="p">),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nv">$result</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"devices"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1209</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p><code>POST https://my.zont.online/api/devices</code></p>
<p>Возвращает список всех устройств пользователя, а также их параметров.</p>
<h3 id='6744ad4c7a'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>load_io</code></td>
<td>bool</td>
<td>возвращать ли в поле <code>io</code> <em>Состояния</em> устройства (см. <a href="#device-settings">Параметры устройств</a>)</td>
</tr>
</tbody></table>
<h3 id='9fa227c53f'>Результат</h3>
<p>В поле <code>devices</code> возвращается массив объектов, описывающих устройства. Порядок элементво в массиве соответствует порядку устройств в личном кабинете пользователя.</p>
<p>Каждый объект, описывающий устройство, может иметь поля, описанные в разделе <a href="#device-settings">Параметры устройств</a>.</p>
<p><a name="add_device"></a></p>
<h2 id='add_device'>add_device — Добавить устройство</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/add_device'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"devtype": "ZTC-700", "name": "my car", "serial": "012345678915", "timezone": 3}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/add_device'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'devtype'</span><span class="p">:</span> <span class="s">'ZTC-700'</span><span class="p">,</span>
<span class="s">'name'</span><span class="p">:</span> <span class="s">'my car'</span><span class="p">,</span>
<span class="s">'serial'</span><span class="p">:</span> <span class="s">'012345678915'</span><span class="p">,</span>
<span class="s">'timezone'</span><span class="p">:</span> <span class="mi">3</span>
<span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/add_device'</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'devtype'</span> <span class="o">=&gt;</span> <span class="s2">"ZTC-700"</span><span class="p">,</span>
<span class="s1">'name'</span> <span class="o">=&gt;</span> <span class="s2">"my car"</span><span class="p">,</span>
<span class="s1">'serial'</span> <span class="o">=&gt;</span> <span class="s2">"012345678915"</span><span class="p">,</span>
<span class="s1">'timezone'</span> <span class="o">=&gt;</span> <span class="mi">3</span>
<span class="p">);</span>
<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">);</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$data</span><span class="p">),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nv">$result</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1209</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p><code>POST https://my.zont.online/api/add_device</code></p>
<p>Добавить устройство в аккаунт пользователя.</p>
<h3 id='6744ad4c7a-2'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Обязательный</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>devtype</code></td>
<td><code>string</code></td>
<td>да</td>
<td>Тип устройства. Один из идентификаторов, описанных в разделе <a href="#device-types">Типы устройств</a>.</td>
</tr>
<tr>
<td><code>name</code></td>
<td><code>string</code></td>
<td>да</td>
<td>Название устройства для пользователя.</td>
</tr>
<tr>
<td><code>serial</code></td>
<td><code>string</code></td>
<td>да</td>
<td>Серийный номер</td>
</tr>
<tr>
<td><code>timezone</code></td>
<td><code>int</code></td>
<td>да</td>
<td>Часовой пояс</td>
</tr>
<tr>
<td><code>tel_password</code></td>
<td><code>string</code></td>
<td>нет</td>
<td>Телефонный пароль (для GSM-устройств). Телефонный пароль запрашивается устройством при дозвоне на него с номера, не являющегося доверенным. Строка должна состоять только из цифр.</td>
</tr>
<tr>
<td><code>notes</code></td>
<td><code>string</code></td>
<td>нет</td>
<td>Произвольные заметки об устройстве (например, номер его SIM-карты, чтобы не забыть)</td>
</tr>
<tr>
<td><code>wifi_credentials</code></td>
<td><code>array</code></td>
<td>нет</td>
<td>Параметры Wi-Fi-сети (только для устройств с Wi-Fi). Массив объектов вида <code>{&quot;ssid&quot;: &quot;имя_сети&quot;, &quot;password&quot;: &quot;пароль_сети&quot;}</code>. ZONT H-2 поддерживает не более одной сети.</td>
</tr>
<tr>
<td><code>boiler_vendor</code></td>
<td><code>string</code></td>
<td>нет</td>
<td>Производитель котла (для отопительных устройств)</td>
</tr>
<tr>
<td><code>boiler_model</code></td>
<td><code>string</code></td>
<td>нет</td>
<td>Модель котла (для отопительных устройств)</td>
</tr>
</tbody></table>
<h3 id='9fa227c53f-2'>Результат</h3>
<p>Возвращается объект с полем <code>device_id</code> равным ID нового устройства.</p>
<p><a name="delete_device"></a></p>
<h2 id='delete_device'>delete_device — Удалить устройство</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/delete_device'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"device_id": 1209, "clear_data": true}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/delete_device'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'device_id'</span><span class="p">:</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s">'clear_data'</span><span class="p">:</span> <span class="bp">True</span>
<span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/delete_device'</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'device_id'</span> <span class="o">=&gt;</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s1">'clear_data'</span> <span class="o">=&gt;</span> <span class="kc">true</span>
<span class="p">);</span>
<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">);</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$data</span><span class="p">),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nv">$result</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p><code>POST https://my.zont.online/api/delete_device</code></p>
<p>Удалить устройство из аккаунта пользователя.</p>
<h3 id='6744ad4c7a-3'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Обязательный</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>device_id</code></td>
<td><code>int</code></td>
<td>да</td>
<td>ID устройства</td>
</tr>
<tr>
<td><code>transfer</code></td>
<td><code>bool</code></td>
<td>нет</td>
<td>Передать устройство другому пользователю вместо удаления</td>
</tr>
<tr>
<td><code>transfer_username</code></td>
<td><code>string</code></td>
<td>нет</td>
<td>Логин пользователя, которому передать устройство. Применяется только если параметр <code>transfer</code> равен <code>true</code>.</td>
</tr>
<tr>
<td><code>clear_access</code></td>
<td><code>bool</code></td>
<td>нет</td>
<td>Отозвать доступ других пользователей к этому устройству. Если поле <code>transfer</code> не равно <code>true</code>, то доступ других пользователей к устройству отзывается независимо от значения этого параметра.</td>
</tr>
<tr>
<td><code>clear_data</code></td>
<td><code>bool</code></td>
<td>нет</td>
<td>Удалить все накопленные данные по этому устройству</td>
</tr>
</tbody></table>
<h3 id='9fa227c53f-3'>Результат</h3>
<p><code>{&quot;ok&quot;: true}</code></p>
<p><a name="update_device"></a></p>
<h2 id='update_device'>update_device — Изменение настроек устройства</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/update_device'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"device_id": 1580, "thermostat_mode_temps": {"comfort": 21}}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/update_device'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'device_id'</span><span class="p">:</span> <span class="mi">1580</span><span class="p">,</span>
<span class="s">'thermostat_mode_temps'</span><span class="p">:</span> <span class="p">{</span>
<span class="s">'comfort'</span><span class="p">:</span> <span class="mi">21</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/update_device'</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'device_id'</span> <span class="o">=&gt;</span> <span class="mi">1580</span><span class="p">,</span>
<span class="s1">'thermostat_mode_temps'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'comfort'</span> <span class="o">=&gt;</span> <span class="mi">21</span>
<span class="p">)</span>
<span class="p">);</span>
<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">);</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$data</span><span class="p">),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nv">$result</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"thermostat_mode_temps"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"comfort"</span><span class="p">:</span><span class="w"> </span><span class="mi">21</span><span class="p">,</span><span class="w"> </span><span class="c1">// только это поле было изменено</span><span class="w">
</span><span class="s2">"econom"</span><span class="p">:</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span><span class="w">
</span><span class="s2">"idle"</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w">
</span><span class="s2">"full_off"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p><code>POST https://my.zont.online/api/update_device</code></p>
<p>Изменяет параметры устройства. Если устройство на связи, обновлённые параметры будут сразу же отправлены ему. Если связи с устройством в данные момент нет, то настройки будут отправлены при следующем выходе на связь.</p>
<h3 id='6744ad4c7a-4'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>device_id</code></td>
<td><code>int</code></td>
<td>ID устройства</td>
</tr>
</tbody></table>
<p>Все остальные параметры в запросе обозначают настройки устройства, которым нужно установить соответствующие значения. Возможные имена, значения и форматы настроек описаны в разделе <a href="#device-settings">Параметры устройств</a>.</p>
<p>В случае составного параметра, имеющего внутренние поля, в запросе могут быть указаны только некоторые поля этого параметра. Остальные поля сохранят своё прежнее значение. Так, в примере справа была изменена только целевая температура режима Комфорт, а температуры других режимов остались прежними.</p>
<h3 id='9fa227c53f-4'>Результат</h3>
<p>В возвращаемом объекте указываются все параметры, которые были изменены по запросу, и их новые значения.</p>
<p><a name="set_io_port"></a></p>
<h2 id='set_io_port'>set_io_port — Управление состоянием устройства</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/set_io_port'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"device_id": 1209, "portname": "guard-state",
"type": "string", "value": "enabled"}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/set_io_port'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'device_id'</span><span class="p">:</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s">'portname'</span><span class="p">:</span> <span class="s">'guard-state'</span><span class="p">,</span>
<span class="s">'type'</span><span class="p">:</span> <span class="s">'string'</span><span class="p">,</span>
<span class="s">'value'</span><span class="p">:</span> <span class="s">'enabled'</span>
<span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/set_io_port'</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'device_id'</span> <span class="o">=&gt;</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s1">'portname'</span> <span class="o">=&gt;</span> <span class="s1">'guard-state'</span><span class="p">,</span>
<span class="s1">'type'</span> <span class="o">=&gt;</span> <span class="s1">'string'</span><span class="p">,</span>
<span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'enabled'</span>
<span class="p">);</span>
<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">);</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$data</span><span class="p">),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nv">$result</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p><code>POST https://my.zont.online/api/set_io_port</code></p>
<p>Посылает устройству команду на изменение одного из следующих <a href="#device-settings"><em>Состояний</em></a>:</p>
<ul>
<li><code>guard-state</code> — состояние охраны</li>
<li><code>siren</code> — состояние сирены</li>
<li><code>engine-block</code> — состояние блокировки двигателя</li>
<li><code>webasto</code> — состояние подогревателя двигателя</li>
<li><code>auto-ignition</code> — состояние автозапуска</li>
</ul>
<p>Отправка команды возможна только тогда, когда устройство на связи. Метод всегда возвращает успешное значение, даже в случае, когда связи с устройством нет или если отправка команды не удалась.</p>
<h3 id='6744ad4c7a-5'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>device_id</code></td>
<td><code>int</code></td>
<td>ID устройства</td>
</tr>
<tr>
<td><code>portname</code></td>
<td><code>string</code></td>
<td>Имя состояния. Допустима одна из строк: <code>&quot;guard-state&quot;</code>, <code>&quot;siren&quot;</code>, <code>&quot;engine-block&quot;</code>, <code>&quot;webasto&quot;</code> или <code>&quot;auto-ignition&quot;</code></td>
</tr>
<tr>
<td><code>type</code></td>
<td><code>string</code></td>
<td>Тип значения. Нужные значения описаны в следующей таблице</td>
</tr>
<tr>
<td><code>value</code></td>
<td></td>
<td>Требуемое значение состояния</td>
</tr>
</tbody></table>
<p>Значение параметров <code>type</code> и <code>value</code>:</p>
<table><thead>
<tr>
<th>Имя состояния</th>
<th><code>type</code></th>
<th><code>value</code></th>
</tr>
</thead><tbody>
<tr>
<td><code>&quot;guard-state&quot;</code></td>
<td><code>&quot;string&quot;</code></td>
<td><code>&quot;enabled&quot;</code> для постановки на охрану, <code>&quot;disabled&quot;</code> для снятия с охраны</td>
</tr>
<tr>
<td><code>&quot;auto-ignition&quot;</code></td>
<td><code>&quot;auto-ignition&quot;</code></td>
<td>объект с полем <code>state</code>, равным: <code>&quot;enabled&quot;</code> для нормального включения автозапуска, <code>&quot;engine&quot;</code> для запуска только двигателя (без подогревателя), <code>&quot;webasto&quot;</code> для включения только подогревателя, <code>&quot;disabled&quot;</code> для выключения автозапуска, <code>&quot;delay&quot;</code> для продления автозапуска. При использовании <code>state: &quot;delay&quot;</code> также должно быть указано поле <code>time</code> с количеством секунд, до которых нужно продлить автозапуск.</td>
</tr>
<tr>
<td><em>прочие</em></td>
<td><code>&quot;bool&quot;</code></td>
<td><code>true</code> для включения или <code>false</code> для выключения соответствующего состояния</td>
</tr>
</tbody></table>
<h3 id='9fa227c53f-5'>Результат</h3>
<p>Возвращается объект с единственным полем <code>ok</code>.</p>
<p><a name="#send_custom_command"></a></p>
<h2 id='send_custom_command'>send_custom_command — Отправка пользовательской команды</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/send_custom_command'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"device_id": 18945, "command_id": 1}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/send_custom_command'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'device_id'</span><span class="p">:</span> <span class="mi">18945</span><span class="p">,</span>
<span class="s">'command_id'</span><span class="p">:</span> <span class="mi">1</span>
<span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/send_custom_command'</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'device_id'</span> <span class="o">=&gt;</span> <span class="mi">18945</span><span class="p">,</span>
<span class="s1">'command_id'</span> <span class="o">=&gt;</span> <span class="mi">1</span>
<span class="p">);</span>
<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">);</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$data</span><span class="p">),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nv">$result</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p><code>POST https://my.zont.online/api/send_custom_command</code></p>
<p>Посылает устройству одну из пользовательских команд, которые задаются для ZTC-7xx и Mega SX в настроечной утилите.</p>
<p>Отправка команды возможна только тогда, когда устройство на связи. Метод всегда возвращает успешное значение, даже в случае, когда связи с устройством нет или если отправка команды не удалась.</p>
<h3 id='6744ad4c7a-6'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>device_id</code></td>
<td><code>int</code></td>
<td>ID устройства</td>
</tr>
<tr>
<td><code>command_id</code></td>
<td><code>int</code></td>
<td>ID команды</td>
</tr>
</tbody></table>
<p>Идентификтор команды соответствует полю <code>commands[...].id</code> одного из элементов массива в настройке <code>custom_controls</code> (см. <a href="#ztc-7xx-mega-sx">Пользовательские команды и статусы</a>).</p>
<h3 id='9fa227c53f-6'>Результат</h3>
<p>Возвращается объект с одним лишь полем <code>ok</code>.</p>
<p><a name="data-loading"></a></p>
<h1 id='60aabf0ce3'>Загрузка данных</h1>
<p>Устройства ZONT накапливают и отправляют на сервер различные виды данных, которые могут быть получены с сервера
через API.</p>
<h2 id='load_data'>load_data — Загрузка различных видов данных</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/load_data'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"requests": [
{"device_id": 1580,
"data_types": ["temperature", "events"],
"mintime": 1495011600,
"maxtime": 1495022400},
{"device_id": 1209,
"data_types": ["gps", "events"],
"mintime": 1495011600,
"maxtime": 1495022400}
]}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/load_data'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'requests'</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s">'device_id'</span><span class="p">:</span> <span class="mi">1580</span><span class="p">,</span>
<span class="s">'data_types'</span><span class="p">:</span> <span class="p">[</span><span class="s">'temperature'</span><span class="p">,</span> <span class="s">'events'</span><span class="p">],</span>
<span class="s">'mintime'</span><span class="p">:</span> <span class="mi">1495011600</span><span class="p">,</span>
<span class="s">'maxtime'</span><span class="p">:</span> <span class="mi">1495022400</span>
<span class="p">},</span>
<span class="p">{</span>
<span class="s">'device_id'</span><span class="p">:</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s">'data_types'</span><span class="p">:</span> <span class="p">[</span><span class="s">'gps'</span><span class="p">,</span> <span class="s">'events'</span><span class="p">],</span>
<span class="s">'mintime'</span><span class="p">:</span> <span class="mi">1495011600</span><span class="p">,</span>
<span class="s">'maxtime'</span><span class="p">:</span> <span class="mi">1495022400</span>
<span class="p">}</span>
<span class="p">]</span>
<span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/load_data'</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'requests'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span>
<span class="k">array</span><span class="p">(</span>
<span class="s1">'device_id'</span> <span class="o">=&gt;</span> <span class="mi">1580</span><span class="p">,</span>
<span class="s1">'data_types'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'temperature'</span><span class="p">,</span> <span class="s1">'events'</span><span class="p">),</span>
<span class="s1">'mintime'</span> <span class="o">=&gt;</span> <span class="mi">1495011600</span><span class="p">,</span>
<span class="s1">'maxtime'</span> <span class="o">=&gt;</span> <span class="mi">1495022400</span>
<span class="p">),</span>
<span class="k">array</span><span class="p">(</span>
<span class="s1">'device_id'</span> <span class="o">=&gt;</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s1">'data_types'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'gps'</span><span class="p">,</span> <span class="s1">'events'</span><span class="p">),</span>
<span class="s1">'mintime'</span> <span class="o">=&gt;</span> <span class="mi">1495011600</span><span class="p">,</span>
<span class="s1">'maxtime'</span> <span class="o">=&gt;</span> <span class="mi">1495022400</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="p">);</span>
<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">);</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$data</span><span class="p">),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nv">$result</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"responses"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1580</span><span class="p">,</span><span class="w">
</span><span class="s2">"temperature"</span><span class="p">:</span><span class="w"> </span><span class="c1">...</span><span class="p">,</span><span class="w">
</span><span class="s2">"events"</span><span class="p">:</span><span class="w"> </span><span class="c1">...</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1209</span><span class="p">,</span><span class="w">
</span><span class="s2">"gps"</span><span class="p">:</span><span class="w"> </span><span class="c1">...</span><span class="p">,</span><span class="w">
</span><span class="s2">"events"</span><span class="p">:</span><span class="w"> </span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p><code>POST https://my.zont.online/api/load_data</code></p>
<p>Получить историю показаний датчиков, историю перемещений, событий или любых других данных, которые устройство
передало на сервер.</p>
<h3 id='6744ad4c7a'>Параметры</h3>
<aside class="notice">
Так как этот запрос принимает вложенные параметры, то он может быть вызван только с заголовком
<code>Content-Type: application/json</code> и JSON-объектом в теле запроса.
</aside>
<p>Один HTTP-запрос к методу <code>load_data</code> может одновременно загрузить данные разных типов и сразу по нескольким устройствам.
Для этого метод принимает параметр <code>requests</code>, который должен быть массивом из объектов-запросов, имеющих следующие поля:</p>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Обязательный</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>device_id</code></td>
<td><code>int</code></td>
<td>да</td>
<td>ID устройства</td>
</tr>
<tr>
<td><code>data_types</code></td>
<td><code>array</code></td>
<td>да</td>
<td>Список названий типов данных, которые нужно загрузить. Каждый элемент — строка, обозначающая тип данных, например <code>&quot;gps&quot;</code> или <code>&quot;temperature&quot;</code>. Список доступных типов данных приведён в разделе <a href="#data-types">Типы сохраняемых данных</a>.</td>
</tr>
<tr>
<td><code>mintime</code></td>
<td><code>int</code></td>
<td>нет</td>
<td>Начало временного диапазона (включительно)</td>
</tr>
<tr>
<td><code>maxtime</code></td>
<td><code>int</code></td>
<td>нет</td>
<td>Конец временного диапазона (включительно)</td>
</tr>
</tbody></table>
<p>Временные метки указываются в формате unix time, то есть в виде целого числа секунд, прошедших с 1970-01-01 00:00:00 (UTC).</p>
<h3 id='9fa227c53f'>Результат</h3>
<p>Ответ будет содержать поле <code>responses</code> с массивом ответов, соответствующих запросам, переданным в параметре <code>requests</code>
в том же порядке.</p>
<p>Каждый ответ содержит поля:</p>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>ok</code></td>
<td><code>bool</code></td>
<td>Успешно ли обработан запрос</td>
</tr>
<tr>
<td><code>device_id</code></td>
<td><code>int</code></td>
<td>ID устройства</td>
</tr>
</tbody></table>
<p>Кроме того ответ будет содержать поля, совпадающие по названиям с типами данных, указанными в поле <code>data_types</code>
запроса. Каждое такое поле в значении будет содержать сами запрошенные данные. Формат этих данных описан
в разделе <a href="#data-types">Типы сохраняемых данных</a>.</p>
<h2 id='raw_events'>raw_events — История событий</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/raw_events'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"device_id": 1209, "only": ["GuardOn", "GuardOff"],
"mintime": 1486252800, "maxtime": 1486339200}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/raw_events'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'device_id'</span><span class="p">:</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s">'mintime'</span><span class="p">:</span> <span class="mi">1486252800</span><span class="p">,</span>
<span class="s">'maxtime'</span><span class="p">:</span> <span class="mi">1486339200</span><span class="p">,</span>
<span class="s">'only'</span><span class="p">:</span> <span class="p">[</span><span class="s">'GuardOn'</span><span class="p">,</span> <span class="s">'GuardOff'</span><span class="p">]</span>
<span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/raw_events'</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'device_id'</span> <span class="o">=&gt;</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s1">'mintime'</span> <span class="o">=&gt;</span> <span class="mi">1486252800</span><span class="p">,</span>
<span class="s1">'maxtime'</span> <span class="o">=&gt;</span> <span class="mi">1486339200</span><span class="p">,</span>
<span class="s1">'only'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'GuardOn'</span><span class="p">,</span> <span class="s1">'GuardOff'</span><span class="p">)</span>
<span class="p">);</span>
<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">);</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$data</span><span class="p">),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nv">$result</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"events"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">[</span><span class="w">
</span><span class="s2">"GuardOn-1486253766"</span><span class="p">,</span><span class="w"> </span><span class="c1">// id</span><span class="w">
</span><span class="mi">1486253766</span><span class="p">,</span><span class="w"> </span><span class="c1">// время</span><span class="w">
</span><span class="s2">"GuardOn"</span><span class="p">,</span><span class="w"> </span><span class="c1">// тип</span><span class="w">
</span><span class="mf">43.871066</span><span class="p">,</span><span class="w"> </span><span class="c1">// долгота</span><span class="w">
</span><span class="mf">56.166916</span><span class="p">,</span><span class="w"> </span><span class="c1">// широта</span><span class="w">
</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="c1">// продолжительность</span><span class="w">
</span><span class="p">{</span><span class="w"> </span><span class="c1">// данные</span><span class="w">
</span><span class="s2">"reason"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fob"</span><span class="p">,</span><span class="w"> </span><span class="c1">// причина постановки на охрану</span><span class="w">
</span><span class="s2">"fob_number"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">// номер брелока</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="kc">false</span><span class="w"> </span><span class="c1">// тревожное?</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p><code>POST https://my.zont.online/api/raw_events</code></p>
<p>Получить список событий, зарегистрированных устройством в заданном промежутке времени.</p>
<h3 id='6744ad4c7a-2'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Обязательный</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>device_id</code></td>
<td><code>int</code></td>
<td>да</td>
<td>ID устройства</td>
</tr>
<tr>
<td><code>mintime</code></td>
<td><code>int</code></td>
<td>да</td>
<td>Начало временного диапазона (включительно)</td>
</tr>
<tr>
<td><code>maxtime</code></td>
<td><code>int</code></td>
<td>да</td>
<td>Конец временного диапазона (включительно)</td>
</tr>
<tr>
<td><code>only</code></td>
<td><code>array</code></td>
<td>нет</td>
<td>Интересующие типы событий</td>
</tr>
<tr>
<td><code>except</code></td>
<td><code>array</code></td>
<td>нет</td>
<td>Не интересующие типы событий</td>
</tr>
</tbody></table>
<p>Время указывается в целых секундах, прошедших с 1970-01-01 00:00:00 (UTC). Не забудьте сделать поправку на нужный часовой пояс!</p>
<p>С помощью параметров <code>only</code> и <code>except</code> можно отфильтровать возвращаемый список событий. Каждый из этих
необязательных параметров может содержать массив типов событий (строк). Если указан параметр <code>only</code>, то возвращаются
только события типов, указанных в нём. Если указан <code>except</code>, то события типов, указанных в нём, не возвращаются. Если
оба парамтера не указаны, возвращаются все события.</p>
<h3 id='9fa227c53f-2'>Результат</h3>
<p>Ответ будет содержать поле <code>events</code>, содержащее массив событий, отсортированных по времени. Каждое событие — это массив, содержащий
следующие элементы:</p>
<table><thead>
<tr>
<th>Индекс</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td>0</td>
<td><code>string</code></td>
<td>Идентификатор события. Мы решили отказаться от уникальных идентификаторов событий, поэтому это поле существует только для совместимости со старыми версиями клиентов и не является в действительности уникальным. Не рекомендуем использовать это поле, оно будет удалено в будущих версиях API.</td>
</tr>
<tr>
<td>1</td>
<td><code>int</code></td>
<td>Время события (в секундах с 1970-01-01 00:00:00 UTC)</td>
</tr>
<tr>
<td>2</td>
<td><code>string</code></td>
<td><a href="#event-types">Тип события</a></td>
</tr>
<tr>
<td>3</td>
<td><code>float</code></td>
<td>Долгота местоположения события в градусах (<code>null</code> если неизвестно)</td>
</tr>
<tr>
<td>4</td>
<td><code>float</code></td>
<td>Широта местоположения события в градусах (<code>null</code> если неизвестно)</td>
</tr>
<tr>
<td>5</td>
<td><code>int</code></td>
<td>Длительность события в секундах (<code>null</code> если неизвестно). Указывается только для некоторых типов событий, например <code>&quot;Stop&quot;</code> (остановка).</td>
</tr>
<tr>
<td>6</td>
<td><code>object</code></td>
<td>Дополнительная информация о событии (<code>null</code> если отсутствует). Формат этого поля определяется типом события.</td>
</tr>
<tr>
<td>7</td>
<td><code>bool</code></td>
<td>Является ли событие тревожным («важным»)</td>
</tr>
</tbody></table>
<p><a name="event-types"></a></p>
<h3 id='cfcdc14b91'>Типы событий</h3>
<table><thead>
<tr>
<th>Тип</th>
<th>Тревожное</th>
<th>Описание</th>
<th>Доп. данные</th>
</tr>
</thead><tbody>
<tr>
<td><code>&quot;Stop&quot;</code></td>
<td>нет</td>
<td>Остановка устройства с GPS. Продолжительность остановки в секундах передаётся не в поле дополнительных данных, а в поле длительности.</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;PowerOn&quot;</code></td>
<td>нет</td>
<td>Включение устройства. В поле длительности — время в секундах, в течение которого устройство было выключено.</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;PowerOff&quot;</code></td>
<td>нет</td>
<td>Выключение устройства</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;MainPowerLost&quot;</code></td>
<td>да</td>
<td>Пропадание основного питания</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;MainPowerFound&quot;</code></td>
<td>да</td>
<td>Появление основного питания</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;GPSLost&quot;</code></td>
<td>нет</td>
<td>Потеря сигнала GPS</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;GPSFound&quot;</code></td>
<td>нет</td>
<td>Нахождение сигнала GPS</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;GSMLost&quot;</code></td>
<td>нет</td>
<td>Потеря сигнала GSM</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;GSMFound&quot;</code></td>
<td>нет</td>
<td>Регистрация в сети GSM</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;connected&quot;</code></td>
<td>нет</td>
<td>Соединение с сервером</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;disconnected&quot;</code></td>
<td>нет</td>
<td>Отключение от сервера</td>
<td><code>&quot;reason&quot;</code> — причина отключения (строка)</td>
</tr>
<tr>
<td><code>&quot;reconnected&quot;</code></td>
<td>нет</td>
<td>Переподключение к серверу</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;GuardOn&quot;</code></td>
<td>нет</td>
<td>Постановка на охрану</td>
<td><code>&quot;reason&quot;</code> — причина постановки: <ul><li><code>&quot;fob&quot;</code> — брелок</li><li><code>&quot;call&quot;</code> — голосовое меню</li><li><code>&quot;sms&quot;</code> — СМС</li><li><code>&quot;app&quot;</code> — веб-интерфейс или приложение</li><li><code>&quot;autoguard&quot;</code> — автопостановка</li><li><code>&quot;centrallock&quot;</code> — центральный замок</li><li><code>&quot;handsfree&quot;</code> — радиометка</li><li><code>&quot;pin&quot;</code> — ПИН-код</li></ul> <br/> <code>&quot;fob_number&quot;</code> — номер брелока <br/> <code>&quot;phonenumber&quot;</code> — номер телефона.</td>
</tr>
<tr>
<td><code>&quot;GuardOff&quot;</code></td>
<td>нет</td>
<td>Снятие с охраны</td>
<td>(см. <code>&quot;GuardOn&quot;</code>)</td>
</tr>
<tr>
<td><code>&quot;AlarmButton&quot;</code></td>
<td>да</td>
<td>Нажатие тревожной кнопки</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;Shock1&quot;</code></td>
<td>нет</td>
<td>Слабый удар</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;Shock2&quot;</code></td>
<td>да</td>
<td>Сильный удар</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;Door&quot;</code></td>
<td>да</td>
<td>Тревога по открытию двери</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;Door1&quot;</code>, <code>&quot;Door2&quot;</code>, <code>&quot;Door3&quot;</code>, <code>&quot;Door4&quot;</code>, <code>&quot;Door5&quot;</code>, <code>&quot;Door6&quot;</code></td>
<td>да</td>
<td>Тревога по открытию соответствующей двери</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;HoodTrunk&quot;</code></td>
<td>да</td>
<td>Тревога по открытию капота/багажника</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;Hood&quot;</code></td>
<td>да</td>
<td>Тревога по открытию капота</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;Trunk&quot;</code></td>
<td>да</td>
<td>Тревога по открытию багажника</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;AutoIgnition&quot;</code></td>
<td>нет</td>
<td>Автозапуск двигателя</td>
<td><code>&quot;reason&quot;</code> — причина (<code>&quot;manual&quot;</code> — по команде, <code>&quot;temperature&quot;</code> — по температуре, <code>&quot;timer&quot;</code> — по таймеру, <code>&quot;schedule&quot;</code> — по расписанию) <br/> <code>&quot;result&quot;</code> — результат (<code>&quot;success&quot;</code> — успешно, <code>&quot;fail&quot;</code> — неуспешно, <code>&quot;breakdown&quot;</code> — двигатель заглох)</td>
</tr>
<tr>
<td><code>&quot;EngineBreakdown&quot;</code></td>
<td>да</td>
<td>Аварийная остановка двигателя</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;SoftwareUpgrade&quot;</code></td>
<td>нет</td>
<td>Обновление ПО</td>
<td><code>&quot;firmware_version&quot;</code> — версия прошивки, <code>&quot;profile_version&quot;</code> — версия профиля</td>
</tr>
<tr>
<td><code>&quot;Alarm&quot;</code></td>
<td>да</td>
<td>Тревога</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;AlarmIgnition&quot;</code></td>
<td>да</td>
<td>Тревога по зажиганию</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;AlarmTilt&quot;</code></td>
<td>да</td>
<td>Тревога по датчику наклона</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;AlarmBrake&quot;</code></td>
<td>да</td>
<td>Тревога по педали тормоза</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;EngineBlock&quot;</code></td>
<td>да</td>
<td>Сработала блокировка двигателя</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;Moving&quot;</code></td>
<td>да</td>
<td>Тревога по движению</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;Blackout&quot;</code></td>
<td>да</td>
<td>Глушение сигнала GSM</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;GSMLostAlarm&quot;</code></td>
<td>да</td>
<td>Тревога по пропаданию сигнала GSM</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;EngineStarted&quot;</code></td>
<td>нет</td>
<td>Двигатель заведён</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;EngineStopped&quot;</code></td>
<td>нет</td>
<td>Двигатель остановлен</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;DriverCallButton&quot;</code></td>
<td>да</td>
<td>Кнопка вызова водителя</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;OutCallTone&quot;</code></td>
<td>нет</td>
<td>Дозвон: гудок</td>
<td><code>&quot;number&quot;</code> — номер телефона</td>
</tr>
<tr>
<td><code>&quot;OutCallConnection&quot;</code></td>
<td>нет</td>
<td>Дозвон: соединение</td>
<td><code>&quot;number&quot;</code> — номер телефона</td>
</tr>
<tr>
<td><code>&quot;OutCallEnd&quot;</code></td>
<td>нет</td>
<td>Дозвон: завершение</td>
<td><code>&quot;number&quot;</code> — номер телефона</td>
</tr>
<tr>
<td><code>&quot;OutSMS&quot;</code></td>
<td>нет</td>
<td>Исходящее SMS</td>
<td><code>&quot;number&quot;</code> — номер телефона, <code>&quot;text&quot;</code> — текст</td>
</tr>
<tr>
<td><code>&quot;InCall&quot;</code></td>
<td>нет</td>
<td>Входящий вызов</td>
<td><code>&quot;number&quot;</code> — номер телефона</td>
</tr>
<tr>
<td><code>&quot;InCallConnection&quot;</code></td>
<td>нет</td>
<td>Входящий вызов: соединение</td>
<td><code>&quot;number&quot;</code> — номер телефона</td>
</tr>
<tr>
<td><code>&quot;InCallEnd&quot;</code></td>
<td>нет</td>
<td>Входящий вызов: завершение</td>
<td><code>&quot;number&quot;</code> — номер телефона</td>
</tr>
<tr>
<td><code>&quot;InSMS&quot;</code></td>
<td>нет</td>
<td>Входящее SMS</td>
<td><code>&quot;number&quot;</code> — номер телефона, <code>&quot;text&quot;</code> — текст</td>
</tr>
<tr>
<td><code>&quot;ThermometerUpdate&quot;</code></td>
<td>нет</td>
<td>Найден термодатчик</td>
<td><code>&quot;slot&quot;</code> — номер слота (с нуля), <code>&quot;type&quot;</code> — тип (<code>&quot;wired&quot;</code> — проводной, <code>&quot;radio&quot;</code> — радио), <code>&quot;serial&quot;</code> — серийный номер</td>
</tr>
<tr>
<td><code>&quot;TemperatureHigh&quot;</code></td>
<td>да</td>
<td>Температура выше порога</td>
<td><code>&quot;message&quot;</code> — текстовое сообщение (название датчика)</td>
</tr>
<tr>
<td><code>&quot;TemperatureLow&quot;</code></td>
<td>да</td>
<td>Температура ниже порога</td>
<td><code>&quot;message&quot;</code> — текстовое сообщение (название датчика)</td>
</tr>
<tr>
<td><code>&quot;ThermometerMalfunction&quot;</code></td>
<td>да</td>
<td>Термодатчик недоступен</td>
<td><code>&quot;message&quot;</code> — текстовое сообщение (название датчика)</td>
</tr>
<tr>
<td><code>&quot;BatteryLow&quot;</code></td>
<td>да</td>
<td>Разряд аккумулятора</td>
<td><code>&quot;voltage&quot;</code> — напряжение в вольтах</td>
</tr>
<tr>
<td><code>&quot;RadioFOBAdded&quot;</code></td>
<td>нет</td>
<td>Добавлен брелок или радиореле</td>
<td><code>&quot;slot&quot;</code> — номер слота</td>
</tr>
<tr>
<td><code>&quot;BoilerFail&quot;</code></td>
<td>да</td>
<td>Авария котла</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;BoilerFailCancel&quot;</code></td>
<td>да</td>
<td>Авария котла устранена</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;Landmark&quot;</code></td>
<td>нет</td>
<td>Метка (ZONT Трекер)</td>
<td><code>&quot;label&quot;</code> — имя метки</td>
</tr>
<tr>
<td><code>&quot;ZoneAlarm&quot;</code></td>
<td>да</td>
<td>Срабатывание охранной зоны</td>
<td><code>&quot;message&quot;</code> — сообщение, <code>&quot;zone&quot;</code> — номер зоны</td>
</tr>
<tr>
<td><code>&quot;ZoneAlarmCancel&quot;</code></td>
<td>нет</td>
<td>Восстановление охранной зоны</td>
<td><code>&quot;message&quot;</code> — сообщение, <code>&quot;zone&quot;</code> — номер зоны</td>
</tr>
<tr>
<td><code>&quot;OTFail&quot;</code></td>
<td>да</td>
<td>Авария котла или её устранение (OpenTherm). Аварии нет если поле <code>&quot;c&quot;</code> равно нулю, а массив <code>&quot;f&quot;</code> пуст</td>
<td><code>&quot;c&quot;</code> — код ошибки OEM <br/> <code>&quot;f&quot;</code> — массив флагов сбоя: <ul><li><code>&quot;sr&quot;</code> — необходимо обслуживание</li><li><code>&quot;lr&quot;</code> — требуется ручной сброс</li><li><code>&quot;wp&quot;</code> — низкое давление воды</li><li><code>&quot;gf&quot;</code> — сбой газа/горелки</li><li><code>&quot;ap&quot;</code> — сбой давления воздуха</li><li><code>&quot;wot&quot;</code> — перегрев воды</ul></td>
</tr>
<tr>
<td><code>&quot;OTLost&quot;</code></td>
<td>да</td>
<td>Потеря связи по OpenTherm</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;OTFound&quot;</code></td>
<td>да</td>
<td>Восстановление связи по OpenTherm</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>&quot;UploadSuccess&quot;</code></td>
<td>нет</td>
<td>Файлы успешно загружены</td>
<td></td>
</tr>
<tr>
<td><code>&quot;UploadFailed&quot;</code></td>
<td>да</td>
<td>Не удалось загрузить файлы</td>
<td></td>
</tr>
<tr>
<td><code>&quot;UserEvent&quot;</code></td>
<td>нет</td>
<td>Пользовательское событие</td>
<td><code>&quot;message&quot;</code> — сообщение</td>
</tr>
<tr>
<td><code>&quot;UserAlarm&quot;</code></td>
<td>да</td>
<td>Пользовательское тревожное событие</td>
<td><code>&quot;message&quot;</code> — сообщение</td>
</tr>
<tr>
<td><code>&quot;ExtSensorWarning&quot;</code></td>
<td>да</td>
<td>Предупредительная зона доп. датчика</td>
<td></td>
</tr>
<tr>
<td><code>&quot;ExtSensorAlarm&quot;</code></td>
<td>да</td>
<td>Тревожная зона доп. датчика</td>
<td></td>
</tr>
<tr>
<td><code>&quot;CurrentECUErrors&quot;</code></td>
<td>да</td>
<td>Текущие ошибки ЭБУ (диагностика двигателя автомобиля)</td>
<td><code>&quot;errors&quot;</code> — коды ошибок OBD-II (массив чисел)</td>
</tr>
<tr>
<td><code>&quot;SavedECUErrors&quot;</code></td>
<td>да</td>
<td>Сохранённые ошибки ЭБУ (диагностика двигателя автомобиля)</td>
<td><code>&quot;errors&quot;</code> — коды ошибок OBD-II (массив чисел)</td>
</tr>
</tbody></table>
<p><a name="data-types"></a></p>
<h1 id='d6a1387469'>Типы сохраняемых данных</h1>
<p>В этом разделе перечислены различные типы данных, которые устройства передают на сервер ZONT, и которые вы можете
загрузить с сервера с помощью метода <code>load_data</code>.</p>
<p>Для каждого вида данных указано его строковое название, которое нужно передавать в параметре <code>&quot;data_types&quot;</code> запроса,
и которое используется в качестве ключа в возвращаемом ответе. Также описан формат, в котором эти данные возвращаются.</p>
<p><a name="delta-time-array"></a></p>
<h2 id='delta-time-array'>Формат Delta-time Array</h2>
<blockquote>
<p>Пример кодирования температурных показаний:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">[</span><span class="w">
</span><span class="p">[</span><span class="mi">1495098587</span><span class="p">,</span><span class="w"> </span><span class="mf">21.4</span><span class="p">],</span><span class="w"> </span><span class="c1">// 18.05.2017 12:09:47 — 21.4 °C</span><span class="w">
</span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">21.5</span><span class="p">],</span><span class="w"> </span><span class="c1">// 18.05.2017 12:10:47 — 21.5 °C</span><span class="w">
</span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">21.7</span><span class="p">],</span><span class="w"> </span><span class="c1">// 18.05.2017 12:11:47 — 21.7 °C</span><span class="w">
</span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">21.4</span><span class="p">]</span><span class="w"> </span><span class="c1">// 18.05.2017 12:12:47 — 21.4 °C</span><span class="w">
</span><span class="p">]</span><span class="w">
</span></code></pre>
<p>При передаче сохранённых данных как правило нужно закодировать набор значений, каждое из которых привязано к моменту времени.
Например это могут быть GPS-координаты, значения температуры, события. Если при передаче таких данных в формате JSON каждую
метку времени передавать в виде полного значения времени, то эти временные метки будут занимать значительный объём данных,
иногда превышающий объём самих значений. Для экономии трафика мы используем простой способ дельта-кодирования временных меток,
который в дальнейшем называем Delta-time Array.</p>
<p>Delta-time Array — это массив массивов следующей структуры:</p>
<p><code>[ [time1, ...], [time2, ...], ... [timeN, ...] ]</code></p>
<p>Первым элементом каждого массива является метка времени. Остальные элементы зависят от характера кодируемых данных.</p>
<p>Метки времени являются целыми числами подчинаются следующему правилу:</p>
<ul>
<li>Если метка времени — положительное число, то она обозначает время в формате unix time, то есть в целых секундах
с 1970-01-01 00:00:00 (UTC). Например, <code>1495098587</code> обозначает 18.05.2017 12:09:47 (UTC+03) (московское время).</li>
<li>Если метка времени — отрицательное число, то её абсолютное значение означает разницу в секундах от предыдущей
метки. Например, <code>-60</code> означает предыдущую метку времени плюс одна минута. Отрицательные значения
меток могут идти друг за другом, и тогда каждая кодирует время, прошедшее от предыдущей.</li>
</ul>
<p>Первая метка времени в массиве — всегда положительная. Последующие могут быть как положительными, так и отрицательными.</p>
<h2 id='temperature'>temperature — показания температурных датчиков</h2>
<blockquote>
<p>Пример ответа на <code>load_data</code>:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"responses"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1580</span><span class="p">,</span><span class="w">
</span><span class="s2">"temperature"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"41da3643-47b6-4f97-afc9-d9faf9a569de"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Датчик"</span><span class="p">,</span><span class="w">
</span><span class="s2">"color"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#c4443b"</span><span class="p">,</span><span class="w">
</span><span class="s2">"sort"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="s2">"temperature"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="mf">20.2</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">20.1</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">20.2</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">20.2</span><span class="p">],</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p>Этот вид сохраняемых данных используется для устройств ZONT H, Mega SX и H-1000. В него попадают показания
проводных и беспроводных температурных датчиков, подключенных к устройству. Их показания сохраняются раз в минуту.</p>
<p>При запросе данных методом <code>load_data</code> температурные показания возвращаются в виде объекта. Полям этого объекта
соответствуют уникальные строковые идентификаторы термодатчиков, а значения — объекты со следующей структурой:</p>
<table><thead>
<tr>
<th>Поле</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>name</code></td>
<td><code>string</code></td>
<td>Название датчика</td>
</tr>
<tr>
<td><code>color</code></td>
<td><code>string</code></td>
<td>Цвет датчика, задаваемый пользователем в веб-интерфейсе, в виде hex-строки (#rrggbb)</td>
</tr>
<tr>
<td><code>sort</code></td>
<td><code>int</code></td>
<td>Задаёт порядок отображения датчиков. При показе пользователю списка датчиков, их следует отсортировать по возрастанию этого поля.</td>
</tr>
<tr>
<td><code>temperature</code></td>
<td><code>array</code></td>
<td>Массив показаний датчика за запрошенный период в <a href="#delta-time-array">формате Delta-time Array</a></td>
</tr>
</tbody></table>
<h2 id='thermostat_work'>thermostat_work — данные о работе термостата</h2><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"responses"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1580</span><span class="p">,</span><span class="w">
</span><span class="s2">"thermostat_work"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"thermostat_mode"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-3600</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"boiler_work_time"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="mi">60</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mi">60</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mi">23</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"target_temp"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="mi">23</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-3600</span><span class="p">,</span><span class="w"> </span><span class="mi">18</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"power"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="kc">true</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-86400</span><span class="p">,</span><span class="w"> </span><span class="kc">true</span><span class="p">]],</span><span class="w">
</span><span class="s2">"fail"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="kc">false</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-86400</span><span class="p">,</span><span class="w"> </span><span class="kc">false</span><span class="p">]],</span><span class="w">
</span><span class="s2">"zones"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"1"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"target_temp"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="mi">23</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-3600</span><span class="p">,</span><span class="w"> </span><span class="mi">18</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"worktime"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="mi">60</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mi">60</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mi">23</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"ot"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"s"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s2">"ch"</span><span class="p">,</span><span class="w"> </span><span class="s2">"fl"</span><span class="p">]],</span><span class="w"> </span><span class="p">[</span><span class="mi">-120</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s2">"ch"</span><span class="p">]],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"cs"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="mi">57</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mi">58</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"ff"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1495011630</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="s2">"c"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="s2">"f"</span><span class="p">:</span><span class="w"> </span><span class="p">[]}],</span><span class="w"> </span><span class="p">[</span><span class="mi">-86400</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="s2">"c"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="s2">"f"</span><span class="p">:</span><span class="w"> </span><span class="p">[]}]],</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p>Устройства ZONT H ежеминутно сохраняют информацию о работе термостата и значения различных параметров.</p>
<p>При запросе этого типа данных с помощью метода <a href="#load_data"><code>load_data</code></a> будет возвращён объект со следующими полями:</p>
<table>
<thead>
<tr>
<th>Поле</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>thermostat_mode</mode></td>
<td><a href="#delta-time-array">DTA</a>&lt;int&gt;</td>
<td>
<p>Режим термостата. Кодируется числом.</p>
<p>Для H-1/H-2 с прошивками ниже xx:82 и H-1000/Mega SX с прошивками ниже xx:172 число означает:</p>
<ul>
<li>0 — антизаморозка/выключен</li>
<li>1 — комфорт</li>
<li>2 — эконом</li>
<li>3 — расписание</li>
</ul>
<p>Для более новых прошивок число означает номер задаваемого пользователем режима. Если вам необходима
описание как получить настройки режимов — <a href="mailto:admin@zont.online">напишите нам</a>.</p>
</td>
</tr>
<tr>
<td><code>boiler_work_time</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;int&gt;</td>
<td>
<p>(для однозонного термостата) Количество секунд, в течение которых котёл работал за последнюю минуту.</p>
<p>Под работой котла здесь понимается состояние выхода термостата. То есть при отсутствии основного питания,
значение этого параметра не будет соответствовать действительности, так как реле не будет на самом
деле переключаться.</p>
</td>
</tr>
<tr>
<td><code>target_temp</code</td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Целевая температура (для однозонного термостата)</td>
</tr>
<tr>
<td><code>pza_t</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Расчётная температура ПЗА</td>
</tr>
<tr>
<td><code>dhw_t</code></td>
<td><a href="#delta-time-array">DTA</a>&ltfloat&gt;</td>
<td>Заданная температура ГВС</td>
</tr>
<tr>
<td><code>power</code></td>
<td><a href="#delta-time-array">DTA</a>&ltbool&gt;</td>
<td>
<p>Наличие основного питания: <code>true</code> — питание есть, <code>false</code> — питания нет.</p>
<p>Термостаты ZONT H при отсутствии питания не управляют термостатом, реле переходит в нормальное состояние (см. документацию).</p>
</td>
</tr>
<tr>
<td><code>fail</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;bool&gt;</td>
<td>
Признак аварии котла: <code>true</code> — авария есть, <code>false</code> — аварии нет.
При наличии OpenTherm больше информации об аварии можно получить в поле <code>ot</code>.
</td>
</tr>
<tr>
<td><code>gate</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;bool&gt;</td>
<td>Активность режима Комнатного термостата: <code>true</code> — режим включен, термостат
управляется внешним комнатным термостатом; <code>false</code> — режим выключен, термостат
управляет по обычному алгоритму.</td>
</tr>
<tr>
<td><code>ot</code></td>
<td><code>object</code></td>
<td>Состояние OpenTherm. Поля объекта соответствуют аналогичным полям состояния
<a href="#last-boiler-state"><code>last-boiler-state.ot</code></a>, а значениями
полея являются массивы <a href="#delta-time-array">Delta-time array</a> из соответствующих
величин.</td>
</tr>
<tr>
<td><code>zones</code></td>
<td><code>object</code></td>
<td>
<p>(для многозонного термостата) Информация о работе отдельных зон. Полями объекта являются
номера зон, а значениями — объекты со следующими полями:</p>
<ul>
<li><code>target_temp</code> (<a href="#delta-time-array">DTA</a>&lt;float&gt;) — целевая температура зоны</li>
<li><code>worktime</code> (<a href="#delta-time-array">DTA</a>&lt;int&gt;) — время активности зоны в секундах за последнюю минуту</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h2 id='custom_controls'>custom_controls — история состояний пользовательских статусов</h2>
<blockquote>
<p>Пример ответа на <code>custom_controls</code></p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"responses"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">18945</span><span class="p">,</span><span class="w">
</span><span class="s2">"custom_controls"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">[</span><span class="mi">1498710530</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-8</span><span class="p">,</span><span class="mi">2</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-6277</span><span class="p">,</span><span class="mi">3</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-15</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-4961</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p>Сохраняемые данные типа <code>custom_controls</code> используются для устройств Mega SX, H-1000 и ZTC. Запросив этот
тип данных можно получить историю переключений <a href="#ztc-7xx-mega-sx">пользовательских статусов</a>.</p>
<p>При запросе данных с помощью метода <a href="#load_data"><code>load_data</code></a> данные возвращаются в виде массива в
<a href="#delta-time-array">формате Delta-time Array</a>. В качестве значений в этом массиве передаются целые числа.
Каждый бит в двоичном представлении числа обозначает состояние статуса с соответствующим идентификатором.</p>
<p>Например, от сервера получен такой ответ:</p>
<p><code>[[1498710120, 0], [-86, 6], [-5, 2]]</code></p>
<p>Этот ответ обозначает:</p>
<ul>
<li>2017-06-29 04:22:00 UTC — все статусы неактивны (<code>0</code> не содержит битов, равных 1)</li>
<li>через 86 секунд включились статусы с идентификаторами 1 и 2 (<code>6</code> это <code>110₂</code>, биты считаются с нуля от младшего с старшему)</li>
<li>ещё через 5 секунд статус с идентификатором 2 выключился (<code>4</code> это <code>100₂</code>, бит номер 2 обнулился)</li>
</ul>
<h2 id='z3k_temperature'>z3k_temperature — история состояний пользовательских статусов</h2>
<blockquote>
<p>Пример ответа на <code>z3k_temperature</code></p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"responses"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">18945</span><span class="p">,</span><span class="w">
</span><span class="s2">"z3k_temperature"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="mi">4104</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">[</span><span class="mi">1498710530</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-8</span><span class="p">,</span><span class="mi">2</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-6277</span><span class="p">,</span><span class="mi">3</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-15</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span><span class="w">
</span><span class="p">[</span><span class="mi">-4961</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="w">
</span><span class="p">}}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p>Сохраняемые данные типа <code>z3k_temperature</code> используются для устройств H-2000+, H-2000 PRO H-2000 PRO.V2, Climatic, H1V.02, SMART NEW и им подобных. Запросив этот
тип данных можно получить историю значений с датчиков температуры.</p>
<p>При запросе данных с помощью метода <a href="#load_data"><code>load_data</code></a> данные возвращаются в виде массива в
<a href="#delta-time-array">формате Delta-time Array</a>. В качестве значений в этом массиве передаются целые числа.
Ключом является ID объекта из z3k_config.</p>
<h2 id='z3k_radio_sensor'>z3k_radio_sensor — история значений с радиодатчиков</h2>
<p>По аналогии с <a href="#z3k_temperature"><code>z3k_temperature</code></a> </p>
<h2 id='z3k_heating_circuit'>z3k_heating_circuit — история состояний контуров отопления</h2>
<p>По аналогии с <a href="#z3k_temperature"><code>z3k_temperature</code></a></p>
<h2 id='z3k_web_element'>z3k_web_element — история состояний пользовательских кнопок</h2>
<p>По аналогии с <a href="#z3k_temperature"><code>z3k_temperature</code></a></p>
<h2 id='z3k_boiler_adapter-opentherm-ems-bsb'>z3k_boiler_adapter — данные о работе котла по OpenTherm / EMS / BSB</h2>
<blockquote>
<p>Пример ответа на <code>z3k_boiler_adapter</code></p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"responses"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">457157</span><span class="p">,</span><span class="w">
</span><span class="s2">"z3k_boiler_adapter"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"4097"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"s"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s2">"ch"</span><span class="p">,</span><span class="w"> </span><span class="s2">"fl"</span><span class="p">]],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s2">"ch"</span><span class="p">]],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"cs"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mf">57.0</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">58.0</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"rml"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mf">35.0</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">28.0</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"bt"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mf">56.5</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">57.0</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"wp"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mf">1.4</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">1.4</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"ff"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="s2">"c"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="s2">"f"</span><span class="p">:</span><span class="w"> </span><span class="p">[]}],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"4098"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">...</span><span class="w"> </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p>Сохраняемые данные типа <code>z3k_boiler_adapter</code> используются для устройств H-2000+, H-2000+ PRO, H-2000+ PRO.V2, Climatic, H1V.02, SMART NEW и им подобных, у которых к z3k подключены адаптеры котлов (OpenTherm, EMS+, BSB, BridgeNet и т.п.). Запросив этот тип данных, можно получить историю значений всех регистров котлового адаптера с шагом до одной минуты — это те же ряды, что отображаются на графиках в личном кабинете (модуляция горелки, расчётная температура теплоносителя, давление и т.д.).</p>
<p>Ключом первого уровня является ID адаптера из <code>z3k_config</code> (например <code>4097</code>, <code>4098</code>). Значением — объект, в котором имена полей совпадают с одноимёнными полями состояния <a href="#last-boiler-state"><code>last-boiler-state.ot</code></a>, а сами значения представляют собой <a href="#delta-time-array">Delta-time Array</a> из соответствующих величин. Полный список полей:</p>
<table><thead>
<tr>
<th>Поле</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>s</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;array&lt;string&gt;&gt;</td>
<td>Массив флагов состояния (<code>&quot;ch&quot;</code>, <code>&quot;dhw&quot;</code>, <code>&quot;fl&quot;</code>, <code>&quot;cl&quot;</code>, <code>&quot;ch2&quot;</code>, <code>&quot;di&quot;</code>, <code>&quot;f&quot;</code>). См. <a href="#last-boiler-state"><code>last-boiler-state.ot.s</code></a>.</td>
</tr>
<tr>
<td><code>cs</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Расчётная температура теплоносителя отопления, °C.</td>
</tr>
<tr>
<td><code>cs2</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Расчётная температура теплоносителя второго контура отопления, °C.</td>
</tr>
<tr>
<td><code>bt</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Фактическая температура теплоносителя, °C.</td>
</tr>
<tr>
<td><code>rwt</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Температура обратного потока, °C.</td>
</tr>
<tr>
<td><code>dt</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Фактическая температура ГВС, °C.</td>
</tr>
<tr>
<td><code>ot</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Уличная температура, °C.</td>
</tr>
<tr>
<td><code>rml</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Относительный уровень модуляции горелки, %.</td>
</tr>
<tr>
<td><code>mrml</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Максимальный уровень модуляции, %.</td>
</tr>
<tr>
<td><code>wp</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Давление теплоносителя, бар.</td>
</tr>
<tr>
<td><code>fr</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Скорость потока ГВС, л/мин.</td>
</tr>
<tr>
<td><code>rp</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Заданная мощность котла, %.</td>
</tr>
<tr>
<td><code>rt</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Заданная комнатная температура, °C.</td>
</tr>
<tr>
<td><code>rors</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Уставка ПЗА, °C.</td>
</tr>
<tr>
<td><code>rbp</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Заданное давление в котле, бар.</td>
</tr>
<tr>
<td><code>ds</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Заданная температура ГВС, °C.</td>
</tr>
<tr>
<td><code>db</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;array&lt;int&gt;&gt;</td>
<td>Допустимые границы заданной температуры ГВС, <code>[min, max]</code>.</td>
</tr>
<tr>
<td><code>b</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;array&lt;int&gt;&gt;</td>
<td>Допустимые границы заданной температуры котла, <code>[min, max]</code>.</td>
</tr>
<tr>
<td><code>ff</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;object&gt;</td>
<td>Состояние аварии. Структура объекта — как в <a href="#last-boiler-state"><code>last-boiler-state.ot.ff</code></a>: <code>{ &quot;c&quot;: &lt;OEM-код&gt;, &quot;f&quot;: [&lt;флаги&gt;] }</code>.</td>
</tr>
<tr>
<td><code>sc</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;object&gt;</td>
<td>Конфигурация slave-устройства.</td>
</tr>
<tr>
<td><code>mv</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;array&lt;int&gt;&gt;</td>
<td>Версия мастера, <code>[major, minor]</code>.</td>
</tr>
<tr>
<td><code>sv</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;array&lt;int&gt;&gt;</td>
<td>Версия slave, <code>[major, minor]</code>.</td>
</tr>
</tbody></table>
<p>Набор полей зависит от протокола адаптера и модели котла: если адаптер не передаёт регистр, соответствующее поле в ответе будет отсутствовать.</p>
<h2 id='ztc_state-gsm-wi-fi'>ztc_state — состояние контроллера (питание, GSM, Wi-Fi)</h2>
<blockquote>
<p>Пример ответа на <code>ztc_state</code></p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"responses"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"device_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">457157</span><span class="p">,</span><span class="w">
</span><span class="s2">"ztc_state"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"gsm_level"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mi">24</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mi">23</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"gsm_state"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"gsm_balance"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mi">150</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"voltage"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mf">12.1</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">12.1</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"wifi_rssi"</span><span class="p">:</span><span class="w"> </span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mi">62</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"status_flags"</span><span class="p">:[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mi">81</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mi">81</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="s2">"temperature"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">[[</span><span class="mi">1735603200</span><span class="p">,</span><span class="w"> </span><span class="mf">22.4</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="mi">-60</span><span class="p">,</span><span class="w"> </span><span class="mf">22.5</span><span class="p">],</span><span class="w"> </span><span class="c1">...</span><span class="p">],</span><span class="w">
</span><span class="p">[],</span><span class="w">
</span><span class="p">[],</span><span class="w">
</span><span class="p">[],</span><span class="w">
</span><span class="p">[]</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p>Сохраняемые данные типа <code>ztc_state</code> — это история служебного состояния контроллера, которое присылается раз в минуту. Доступно для устройств H-2000+, H-2000+ PRO, Climatic, SMART NEW и других z3k-устройств, а также для ZTC-7xx / Mega SX. Запросив этот тип данных, можно получить историю уровня сигнала GSM, состояния регистрации в сети, баланса SIM-карты, напряжения питания, уровня сигнала Wi-Fi и встроенных температурных входов.</p>
<p>При запросе данных методом <code>load_data</code> возвращается объект со следующими полями:</p>
<table><thead>
<tr>
<th>Поле</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>gsm_level</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;int&gt;</td>
<td>Уровень сигнала GSM, целое число в диапазоне <code>0..31</code> (<code>null</code> — данные не передавались).</td>
</tr>
<tr>
<td><code>gsm_state</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;int&gt;</td>
<td>Состояние регистрации в GSM-сети: <code>0</code> — не зарегистрирован, <code>1</code> — домашняя сеть, <code>2</code> — поиск сети, <code>3</code> — отказ в регистрации, <code>5</code> — роуминг, <code>255</code> — неизвестно.</td>
</tr>
<tr>
<td><code>gsm_balance</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;int&gt;</td>
<td>Баланс SIM-карты, в копейках/центах (<code>null</code> — данные не передавались).</td>
</tr>
<tr>
<td><code>voltage</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Напряжение основного питания, В.</td>
</tr>
<tr>
<td><code>wifi_rssi</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;int&gt;</td>
<td>Уровень сигнала Wi-Fi (RSSI). Применимо только для устройств с Wi-Fi.</td>
</tr>
<tr>
<td><code>status_flags</code></td>
<td><a href="#delta-time-array">DTA</a>&lt;int&gt;</td>
<td>Битовая маска состояния. Биты: <code>0</code> — наличие основного питания, <code>1</code> — наличие питания по USB, <code>2</code> — связь по GSM, <code>3</code> — связь по Wi-Fi, <code>4</code> — связь по Ethernet, <code>5</code> — питание от аккумулятора, <code>6</code> — установлено соединение с сервером. Например, значение <code>81</code> (<code>0b1010001</code>) означает «есть основное питание, связь по Ethernet, соединение с сервером установлено».</td>
</tr>
<tr>
<td><code>temperature</code></td>
<td>array of <a href="#delta-time-array">DTA</a>&lt;float&gt;</td>
<td>Показания пяти встроенных температурных входов контроллера. Массив всегда содержит 5 элементов (по индексу = номеру входа); для входов, на которых датчик не подключён, элемент будет пустым массивом.</td>
</tr>
</tbody></table>
<p>Поля <code>gsm_*</code> и <code>wifi_rssi</code> присутствуют в ответе только если контроллер передавал соответствующие данные за запрошенный период.</p>
<p><a name="device-types"></a> </p>
<h1 id='140df53891'>Типы устройств</h1>
<p>В рамках системы ZONT выпускается множество устройств с различным назначением. Каждой модели соответствует свой идентификатор.</p>
<table><thead>
<tr>
<th>Идентификатор</th>
<th>Модель</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>T100</code></td>
<td>ZONT H-1/H-1V</td>
<td>Домашний GSM-термостат</td>
</tr>
<tr>
<td><code>T102</code></td>
<td>ZONT H-2</td>
<td>Домашний Wi-Fi-термостат</td>
</tr>
<tr>
<td><code>L1000</code></td>
<td>ZONT L-1000</td>
<td>Многофункциональный программируемый GSM/Wi-Fi-термостат</td>
</tr>
<tr>
<td><code>ZTC-100</code></td>
<td>ZTC-100</td>
<td>Спутниковый поисковый модуль</td>
</tr>
<tr>
<td><code>ZTC-110</code></td>
<td>ZTC-110</td>
<td>Спутниковый охранно-поисковый модуль</td>
</tr>
<tr>
<td><code>ZTC-500</code></td>
<td>ZTC-500</td>
<td>Автомобильная сигнализация</td>
</tr>
<tr>
<td><code>ZTC-700</code></td>
<td>ZTC-700</td>
<td>Автомобильная сигнализация</td>
</tr>
<tr>
<td><code>ZTC-700M</code></td>
<td>ZTC-700M</td>
<td>Автомобильная сигнализация</td>
</tr>
<tr>
<td><code>ZTC-701M</code></td>
<td>ZTC-701M</td>
<td>Автомобильная сигнализация</td>
</tr>
<tr>
<td><code>ZTC-710</code></td>
<td>ZTC-710</td>
<td>Автомобильная сигнализация</td>
</tr>
<tr>
<td><code>ZTC-720</code></td>
<td>ZTC-720</td>
<td>Автомобильная сигнализация</td>
</tr>
<tr>
<td><code>tracker</code></td>
<td>ZONT Трекер</td>
<td>Приложение для Android</td>
</tr>
<tr>
<td><code>ZTA-110</code></td>
<td>ZTA-110</td>
<td>Объектовая сигнализация</td>
</tr>
<tr>
<td><code>SX250</code></td>
<td>Mega SX-LRW</td>
<td>Объектовая сигнализация</td>
</tr>
<tr>
<td><code>SX170</code></td>
<td>Mega SX-170</td>
<td>Объектовая сигнализация</td>
</tr>
<tr>
<td><code>SX300</code></td>
<td>Mega SX-300</td>
<td>Объектовая сигнализация</td>
</tr>
<tr>
<td><code>SX350</code></td>
<td>Mega SX-350</td>
<td>Объектовая сигнализация</td>
</tr>
</tbody></table>
<p><a name="device-settings"></a></p>
<h1 id='d6d82d68e1'>Параметры устройств</h1>
<p>У каждого устройства есть <em>Настройки</em> и <em>Состояния</em>.</p>
<p><em>Настройками</em> называют те параметры, значения которых обычно редко изменяются и которыми есть смысл управлять при отсутствии связи с устройством (например: список доверенных номеров, целевые температуры). <em>Состояния</em> — это параметры, описывающие устройство только в данный момент, значения которых могут меняться в зависимости от внешних воздействий (например: состояние охраны, уровень сигнала).</p>
<p>Получить текущие Настройки устройств можно с помощью метода <a href="#devices"><code>devices</code></a>. Если при запросе указать <code>&quot;load_io&quot;: true</code>, то в каждом объекте, описывающем устройство, в поле <code>&quot;io&quot;</code> также будут возвращены Состояния устройств.</p>
<p>Изменить Настройки можно с помощью метода <a href="#update_device"><code>update_device</code></a>. Управлять Состояниями — с помощью метода <a href="#set_io_port"><code>set_io_port</code></a>.</p>
<p>Ниже приведены описания всех параметров устройств, сгруппированные по области применения. Обратите внимание, что одно и то же устройство может относиться к нескольким разделам.</p>
<h2 id='2abb8ebaca'>Общие для всех типов устройств</h2><h3 id='7f17c7c62a'>Настройки</h3><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1209</span><span class="p">,</span><span class="w">
</span><span class="s2">"serial"</span><span class="p">:</span><span class="w"> </span><span class="s2">"973BF3309550"</span><span class="p">,</span><span class="w">
</span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Сигнализация"</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<table><thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>id</code></td>
<td><code>int</code></td>
<td>Идентификатор устройства</td>
</tr>
<tr>
<td><code>serial</code></td>
<td><code>string</code></td>
<td>Серийный номер</td>
</tr>
<tr>
<td><code>name</code></td>
<td><code>string</code></td>
<td>Название</td>
</tr>
</tbody></table>
<h2 id='34520a8155'>Состояние беспроводной сети</h2><h3 id='7f17c7c62a-2'>Настройки</h3><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"balance"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"ussd"</span><span class="p">:</span><span class="w"> </span><span class="s2">"*102#"</span><span class="p">,</span><span class="w">
</span><span class="s2">"warning"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"limit"</span><span class="p">:</span><span class="w"> </span><span class="mi">30</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"trusted_phones"</span><span class="p">:</span><span class="w"> </span><span class="s2">"+79082394312,+79102417612"</span><span class="p">,</span><span class="w">
</span><span class="s2">"gsm_roaming"</span><span class="p">:</span><span class="w"> </span><span class="s2">"same"</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<table>
<thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>balance</code></td>
<td><code>object</code></td>
<td>
<p>Настройки отслеживания баланса SIM-карты</p>
<table>
<thead>
<tr>
<th>Поле</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ussd</code></td>
<td><code>string</code></td>
<td>USSD-команда для запроса</td>
</tr>
<tr>
<td><code>warning</code></td>
<td><code>bool</code></td>
<td>Предупреждать ли при снижении ниже порога</td>
</tr>
<tr>
<td><code>limit</code></td>
<td><code>int|null</code></td>
<td>Порог, ниже которого происходит оповещение</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td><code>trusted_phones</code></td>
<td><code>string</code></td>
<td>Доверенные номера телефонов, разделённые запятой</td>
</tr>
<tr>
<td><code>gsm_roaming</code></td>
<td><code>string</code></td>
<td>
<p>Разрешение использования интернета в роуминге</p>
<ul>
<li><code>"no"</code> — запрет роуминга</li>
<li><code>"same"</code> — разрешено во внутресетевом роуминге</li>
<li><code>"any"</code> — разрешено в любом роуминге</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h3 id='c248a6163b'>Состояния</h3><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"io"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"balance-value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"56"</span><span class="p">,</span><span class="w">
</span><span class="s2">"gsm-state"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"level"</span><span class="p">:</span><span class="w"> </span><span class="mi">29</span><span class="p">,</span><span class="w">
</span><span class="s2">"operator"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MTS"</span><span class="p">,</span><span class="w">
</span><span class="s2">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"home-network"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<table>
<thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>balance-value</code></td>
<td><code>string|null</code></td>
<td>Текущее значение баланса SIM-карты</td>
</tr>
<tr>
<td><code>gsm-state</code></td>
<td><code>object</code></td>
<td>
<p>Состояние GSM/Wi-Fi</p>
<table>
<thead>
<tr>
<th>Поле</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>level</code></td>
<td><code>int</code></td>
<td>Уровень сигнала [0..31]</td>
</tr>
<tr>
<td><code>operator</code></td>
<td><code>string</code></td>
<td>Название сети (имя оператора)</td>
</tr>
<tr>
<td><code>state</code></td>
<td><code>string</code></td>
<td>
<ul>
<li><code>not-registered</code> — не зарегистрирован</li>
<li><code>home-network</code> — в домашней сети</li>
<li><code>searching</code> — поиск сети</li>
<li><code>rejected</code> — сеть отказала в регистрации</li>
<li><code>roaming</code> — в роуминге</li>
</ul>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h2 id='ztc-mega-sx-zont-h'>Охрана (ZTC, Mega SX, ZONT H)</h2><h3 id='c248a6163b-2'>Состояния</h3><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"io"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"guard-state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"enabled"</span><span class="p">,</span><span class="w">
</span><span class="s2">"siren"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<table><thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>guard-state</code></td>
<td><code>string</code></td>
<td><code>&quot;enabled&quot;</code> если охрана активна, <code>&quot;disabled&quot;</code> если не активна или <code>&quot;enabling&quot;</code> если выполняется постановка на охрану</td>
</tr>
<tr>
<td><code>siren</code></td>
<td><code>bool</code></td>
<td>сирена активна в данный момент</td>
</tr>
</tbody></table>
<h2 id='ztc'>Взаимодействие с автомобилем (ZTC)</h2><h3 id='7f17c7c62a-3'>Настройки</h3><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"temperature_conf"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"assignments"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="s2">"cabin"</span><span class="p">,</span><span class="w">
</span><span class="s2">"engine"</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<table>
<thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>temperature_conf</code></td>
<td><code>object</code></td>
<td>
Настройка термодатчиков. Объект со следующими полями:
<table>
<thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<td><code>assignments</code></td>
<td><code>array</code></td>
<td>
<p>Массив строк, описывающих назначение термодатчиков. Каждый элемент определяет назначение соответствующего по номеру датчика из
<a href="#ztc-temperature">состояния <code>"temperature"</code></a>.</p>
<p>Возможные назначения:</p>
<ul>
<li><code>"engine"</code> — температура двигателя</li>
<li><code>"cabin"</code> — температура салона</li>
<li><code>"outside"</code> — температура снаружи</li>
<li><code>"none"</code> — назначение не задано</li>
</ul>
</td>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h3 id='c248a6163b-3'>Состояния</h3><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"io"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"engine-block"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="s2">"webasto"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="s2">"auto-ignition"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"available"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"enabled"</span><span class="p">,</span><span class="w">
</span><span class="s2">"configuration"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"engine"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"webasto"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"current_mode"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"engine"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"webasto"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"until"</span><span class="p">:</span><span class="w"> </span><span class="mi">1478811896</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"ignition-state"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"engine-state"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"doors"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="s2">"door-1"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="s2">"door-2"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="s2">"door-3"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="s2">"door-4"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="s2">"hood-trunk"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="s2">"hood"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="s2">"trunk"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="s2">"ecu-diagnostics-enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"temperature"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="s2">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ok"</span><span class="p">,</span><span class="w"> </span><span class="s2">"value"</span><span class="p">:</span><span class="w"> </span><span class="mi">21</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="s2">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ok"</span><span class="p">,</span><span class="w"> </span><span class="s2">"value"</span><span class="p">:</span><span class="w"> </span><span class="mi">73</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="s2">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"disconnected"</span><span class="p">,</span><span class="w"> </span><span class="s2">"value"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<table>
<thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>engine-block</code></td>
<td><code>bool</code></td>
<td>активна ли блокировка двигателя</td>
</tr>
<tr>
<td><code>webasto</code></td>
<td><code>bool</code></td>
<td>включен ли предпусковой подогреватель (ZTC-1xx)</td>
</tr>
<tr>
<td><code>auto-ignition</code></td>
<td><code>object</code></td>
<td>
<p>состояние автозапуска (ZTC-7xx, ZTC-5xx)</p>
<table>
<thead>
<tr>
<th>Поле</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>available</code></td>
<td><code>bool</code></td>
<td>Доступность автозапуска</td>
</tr>
<tr>
<td><code>state</code></td>
<td><code>string</code></td>
<td>
<p>Состояние автозапуска</p>
<ul>
<li><code>"disabled"</code> — автозапуск выключен</li>
<li><code>"enabling"</code> — запуск двигателя</li>
<li><code>"enabled"</code> — двигатель заведён</li>
<li><code>"webasto"</code> — включен предпусковой подогреватель</li>
<li><code>"webasto-confirmed"</code> — включен предпусковой подогреватель и это подтверждено сигналом от подогревателя</li>
</ul>
</td>
</tr>
<tr>
<td><code>configuration</code></td>
<td><code>object</code></td>
<td>Два булевых поля `"engine"` и `"webasto"` означают, настроен ли запуск соответственно двигателя и подогревателя</td>
</tr>
<tr>
<td><code>current_mode</code></td>
<td><code>object</code></td>
<td>Два булевых поля `"engine"` и `"webasto"` означают, используется ли запуск соответственно двигателя и подогревателя в текущей сессии автозапуска</td>
</tr>
<tr>
<td><code>until</code></td>
<td><code>int|null</code></td>
<td>Планируемое время отключения автозапуска</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td><code>ignition-state</code></td>
<td><code>bool</code></td>
<td>Включено ли зажигание</td>
</tr>
<tr>
<td><code>engine-state</code></td>
<td><code>bool</code></td>
<td>Запущен ли двигатель</td>
</tr>
<tr>
<td><code>doors</code></td>
<td><code>bool</code></td>
<td>Открыта ли хотя бы одна дверь (при подключении дверей общим сигналом)</td>
</tr>
<tr>
<td><code>door-1</code>, <code>door-2</code>, <code>door-3</code>, <code>door-4</code></td>
<td><code>bool</code></td>
<td>Открыта ли каждая из четырёх дверей</td>
</tr>
<tr>
<td><code>hood-trunk</code></td>
<td><code>bool</code></td>
<td>Открыт ли капот или багажник (при подключении их общим сигналом)</td>
</tr>
<tr>
<td><code>hood</code>, <code>trunk</code></td>
<td><code>bool</code></td>
<td>Открыты ли соответственно капот и багажник</td>
</tr>
<tr>
<td><code>ecu-diagnostics-active</code></td>
<td><code>bool</code></td>
<td>Активна ли диагностика двигателя</td>
</tr>
<tr>
<td><a name="ztc-temperature"/><code>temperature</code></td>
<td><code>array</code></td>
<td>
Показния термодатчиков. Массив, состоящий из объектов с полями:
<table>
<thead>
<tr>
<th>Поле</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>state</code></td>
<td><code>string</code></td>
<td>Состояние датчика: <code>"ok"</code> — датчик исправен, <code>"malfunction"</code> — неисправен, <code>"disconnected"</code> — не подключен</td>
</tr>
<tr>
<td><code>value</code></td>
<td><code>int</code></td>
<td>Температура в градусах Цельсия (если <code>state</code> равен <code>"ok"</code>)</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h2 id='zont-h'>Управление отоплением (ZONT H)</h2><h3 id='1bc650e3ff'>Старый и новый формат режимов отопления</h3>
<p>Ранние весии прошивок ZONT H-1, H-1V, H-2 поддерживали ровно 4 режима отопления: «Эконом», «Комфорт»,
«Расписание» и «Антизаморозка/Выключен». В новых версиях появились более гибкие настраиваемые режимы, а также
появилась отдельная концепция «целевых температур», которые имеют приоритет над текущим режимом отопления,
в случае если целевая температура отредактирована пользователем вручную.</p>
<p>Это изменение отразилось и на API. В описании настроек ниже те поля, которые относятся только к старому
или только к новому формату режимов, будут отмечены комментарием.</p>
<p>В устройстве всегда работает либо старая, либо новая схема режимов, они не совмещаются. Тем не менее для
новой схемы API всё равно выдаёт для устройства и старые поля тоже для ограниченной обратной совместимости.
Поля, соответствующие новому формату, имеют приоритет.</p>
<p>Версии прошивок, поддерживающих новый формат:</p>
<table><thead>
<tr>
<th>Модель</th>
<th>Версия прошивки</th>
</tr>
</thead><tbody>
<tr>
<td>ZONT H-1, H-1V, H-1B, H-2</td>
<td>≥ xx:82</td>
</tr>
<tr>
<td>ZONT H-1000, H-2000</td>
<td>любая</td>
</tr>
</tbody></table>
<h3 id='7f17c7c62a-4'>Настройки</h3><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="c1">// старый формат режимов</span><span class="w">
</span><span class="s2">"thermostat_mode"</span><span class="p">:</span><span class="w"> </span><span class="s2">"comfort"</span><span class="p">,</span><span class="w">
</span><span class="s2">"thermostat_mode_temps"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"econom"</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span><span class="p">,</span><span class="w">
</span><span class="s2">"comfort"</span><span class="p">:</span><span class="w"> </span><span class="mf">21.5</span><span class="p">,</span><span class="w">
</span><span class="s2">"idle"</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w">
</span><span class="s2">"full_off"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="c1">// новый формат режимов</span><span class="w">
</span><span class="s2">"thermostat_ext_mode"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="s2">"thermostat_ext_modes_config"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"0"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Эконом"</span><span class="p">,</span><span class="w">
</span><span class="s2">"zone_sensors"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="s2">"0"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="s2">"1"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">},</span><span class="w">
</span><span class="s2">"zone_temp"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="s2">"0"</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span><span class="p">,</span><span class="w"> </span><span class="s2">"1"</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"1"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Расписание"</span><span class="p">,</span><span class="w">
</span><span class="s2">"schedule_number"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="s2">"zone_sensors"</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span><span class="w">
</span><span class="s2">"zone_temp"</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"2"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Выключен"</span><span class="p">,</span><span class="w">
</span><span class="s2">"zone_temp"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="s2">"0"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"> </span><span class="s2">"1"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">},</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"3"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="s2">"active"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"> </span><span class="c1">...</span><span class="p">},</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"tempschedule"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"day"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">23</span><span class="p">,</span><span class="w"> </span><span class="mi">23</span><span class="p">,</span><span class="w"> </span><span class="mi">23</span><span class="p">,</span><span class="w"> </span><span class="c1">...</span><span class="p">,</span><span class="w"> </span><span class="mi">23</span><span class="p">],</span><span class="w">
</span><span class="s2">"week"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"0"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">16</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span><span class="w"> </span><span class="c1">...</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">],</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="s2">"6"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mf">21.5</span><span class="p">,</span><span class="w"> </span><span class="mf">21.5</span><span class="p">,</span><span class="w"> </span><span class="c1">...</span><span class="p">,</span><span class="w"> </span><span class="mf">21.5</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"thermometers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"uuid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"57d5c19005b605000bc4502b"</span><span class="p">,</span><span class="w">
</span><span class="s2">"is_assigned_to_slot"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Кухня"</span><span class="p">,</span><span class="w">
</span><span class="s2">"color"</span><span class="p">:</span><span class="w"> </span><span class="s2">"#a05be5"</span><span class="p">,</span><span class="w">
</span><span class="s2">"functions"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="s2">"f"</span><span class="p">:</span><span class="w"> </span><span class="s2">"control"</span><span class="p">,</span><span class="w"> </span><span class="s2">"zone"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">}],</span><span class="w">
</span><span class="s2">"limits"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"high"</span><span class="p">:</span><span class="w"> </span><span class="mi">30</span><span class="p">,</span><span class="w">
</span><span class="s2">"low"</span><span class="p">:</span><span class="w"> </span><span class="mi">16</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"wired"</span><span class="p">,</span><span class="w">
</span><span class="s2">"last_value_time"</span><span class="p">:</span><span class="w"> </span><span class="mi">1478383975</span><span class="p">,</span><span class="w">
</span><span class="s2">"last_state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ok"</span><span class="p">,</span><span class="w">
</span><span class="s2">"last_value"</span><span class="p">:</span><span class="w"> </span><span class="mf">21.2</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="s2">"ot_enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"ot_mode"</span><span class="p">:</span><span class="w"> </span><span class="s2">"analog"</span><span class="p">,</span><span class="w">
</span><span class="s2">"ot_max_setpoint"</span><span class="p">:</span><span class="w"> </span><span class="mi">80</span><span class="p">,</span><span class="w">
</span><span class="s2">"ot_min_setpoint"</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w">
</span><span class="s2">"ot_max_ml"</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span><span class="w">
</span><span class="s2">"ot_dhw_setpoint"</span><span class="p">:</span><span class="w"> </span><span class="mi">46</span><span class="p">,</span><span class="w">
</span><span class="s2">"ot_min_wp"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="s2">"ot_config"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"ch"</span><span class="p">,</span><span class="w"> </span><span class="s2">"dhw"</span><span class="p">],</span><span class="w">
</span><span class="s2">"ot_save_params"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"bt"</span><span class="p">,</span><span class="w"> </span><span class="s2">"dt"</span><span class="p">,</span><span class="w"> </span><span class="s2">"ot"</span><span class="p">]</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<table>
<thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>thermostat_mode</code></td>
<td><code>string</code></td>
<td>
<i>(Только для старого формата режимов)</i><br/>
Режим термостата. Возможные значения:
<ul>
<li><code>"econom"</code> — Эконом</li>
<li><code>"comfort"</code> — Комфорт</li>
<li><code>"schedule"</code> — Расписание</li>
<li><code>"idle"</code> — Антизаморозка/выключен</li>
</ul>
</td>
</tr>
<tr>
<td><code>thermostat_mode_temps</code></td>
<td><code>object</code></td>
<td>
<i>(Только для старого формата режимов)</i><br/>
Целевая температура фиксированных режимов термостата. Объект имеет следующие поля:
<ul>
<li><code>econom</code> (number) — целевая температура режима Эконом</li>
<li><code>comfort</code> (number) — целевая температура режима Комфорт</li>
<li><code>idle</code> (number) — целевая температура режима Антизаморозка</li>
<li><code>full_off</code> (bool) — отключать регулирование в режиме Антизаморозка. Если равно <code>true</code>, то вместо режима Антизаморозка используется режим Выключен</li>
</ul>
</td>
</tr>
<tr>
<td><code>thermostat_ext_mode</code></td>
<td><code>int</code></td>
<td>
<i>(Только для нового формата режимов)</i><br/>
Номер текущего режима отопления. Соответствует индексу в объекте <code>thermostat_ext_modes_config</code>.
</td>
</tr>
<tr>
<td><code>thermostat_ext_modes_config</code></td>
<td><code>object</code></td>
<td>
<i>(Только для нового формата режимов)</i><br/>
Конфигурация режимо отопления. Объект (не массив!), ключами которого являются номера режимов (начиная с нуля),
а значениями — объекты конфигурации режима. Эти объекты имеют следующие поля:
<ul>
<li><code>active</code> (bool) — Настроен ли этот режим (существует ли он)</li>
<li><code>hidden</code> (bool) — Скрыт ли режим (отображается ли его кнопка на странице управления устройством)</li>
<li><code>name</code> (string) — Название режима</li>
<li><code>schedule_number</code> (int|null) — Заданное для режима расписание.<br/>
<code>null</code> — расписание не используется.<br/>
<code>1</code> — используется недельное расписание.<br/>
<code>2</code>...<code>8</code> — на каждый день используется расписание понедельника...воскресенья.
</li>
<li><code>zone_temp</code> (object) — Фиксированные целевые температуры отопительных зон, заданные для этого режима.
Объект, ключами которого являются номера отопительных зон (нулевая зона — ГВС), а значения могут быть:
<ul>
<li><code>null</code> — целевая температура для этой зоны не задана (например, если режим использует расписание)</li>
<li><code>false</code> — зона отключена в этом режиме.</li>
<li>число — целевая температура этой зоны, °C</li>
</ul>
</li>
<li><code>zone_sensors</code> (object) — Переназначение целевых датчиков для отопительных зон.
Объект, ключами которого являются номера отопительных зон (нулевая зона — ГВС), а значениями --
номера слотов целевых датчиков (соответствующие полю <code>thermometers[...].slot</code>),
либо <code>null</code> если используется датчик по умолчанию.</li>
</ul>
</td>
</tr>
<tr>
<td><code>tempstep</code></td>
<td><code>float</code></td>
<td>Шаг изменения температуры кнопками – и + в веб-интерфейсе и мобильном приложении.</td>
</tr>
<tr>
<td><code>tempschedule</code></td>
<td><code>object</code></td>
<td>
Расписание температур. Применяется устройством когда выставлен режим «Расписание».
<ul>
<li><code>week</code> (object) — недельное расписание. Имеет поля <code>"0"</code>, <code>"1"</code>, ..., <code>"6"</code>, соответствующие дням недели (0 — понедельник, 6 — воскресенье). Значениями являются массивы из 24 элементов с температурами для каждого.</li>
<li><code>day</code> (array) — дневное расписание. <i>В данный момент не используется устройствами</i>.</li>
</ul>
</td>
</tr>
<tr>
<td><code>thermometers</code></td>
<td><code>array</code></td>
<td>
Данные о термодатчиках. Массив объектов, каждый из которых имеет следующие поля:
<ul>
<li><code>uuid</code> (string) — уникальный строковый идентификатор датчика.</li>
<li><code>is_assigned_to_slot</code> (bool) — если <code>true</code>, то этот термодатчик в данный момент зарегистрирован в термостате. Термодатчики с этим полем, равным <code>false</code> следует игнорировать при анализе. Они могут быть в массиве в том случае, если датчик был отключен от термостата, а затем был произведёт сброс датчиков.</li>
<li><code>slot</code> (int|null) — номер датчика если он в данный момент зарегистрирован в термостате, либо <code>null</code> если не зарегистрирован</li>
<li><code>serial</code> (string) — серийный номер</li>
<li><code>name</code> (string) — название</li>
<li><code>color</code> (string) — цвет в веб-интерфейсе в html-нотации</li>
<li><code>functions</code> (array) — назначения датчика. Массив объектов со следующими полями:
<ul>
<li><code>"f"</code> (string) — функция. Возможные значения:
<ul>
<li><code>"control"</code> — регулирование</li>
<li><code>"control-reserve"</code> — резервное регулирование</li>
<li><code>"heat"</code> — температура теплоносителя</li>
<li><code>"outside"</code> — температура снаружи</li>
</ul>
</li>
<li><code>"zone"</code> (int) — номер отопительной зоны. Указывается для функций регулирования и t° теплоносителя. Основная отопительная зона имеет номер <code>1</code>, дополнительные — <code>2</code> и выше.
</ul>
</li>
<li><code>limits</code> (object) — пороги допустимых значений. Величины порогов указаны в дочерних полях <code>low</code> и <code>high</code>. Если порог не задан, то соответствующее поле равно <code>null</code>.</li>
<li><code>last_value_time</code> (int) — время получения последней информации о показании датчика (полей `last_state` и `last_value`). Время в секундах с 1970-01-01 00:00:00 (UTC)</li>
<li><code>last_state</code> (string) — состояние датчика. Возможные значения:
<ul>
<li><code>"ok"</code> — датчик исправен</li>
<li><code>"malfunction"</code> — датчик неисправен</li>
</ul>
</li>
<li><code>last_value</code> (number) — показание датчика, °C</li>
</ul>
</td>
</tr>
<tr>
<td><code>ot_enabled</code></td>
<td><code>bool</code></td>
<td>OpenTherm включен</td>
</tr>
<tr>
<td><code>ot_mode</code></td>
<td><code>string</code></td>
<td>Режим работы OpenTherm: <code>"analog"</code> — обычный, <code>"relay"</code> — псевдорелейный</td>
</tr>
<tr>
<td><code>ot_max_setpoint</code></td>
<td><code>float</code></td>
<td>Максимальная заданная температура теплоносителя (OpenTherm)</td>
</tr>
<tr>
<td><code>ot_min_setpoint</code></td>
<td><code>float</code></td>
<td>Минимальная заданная температура теплоносителя (OpenTherm)</td>
</tr>
<tr>
<td><code>ot_max_ml</code></td>
<td><code>float</code></td>
<td>Максимальный уровень модуляции горелки в процентах (OpenTherm)</td>
</tr>
<tr>
<td><code>ot_dhw_setpoint</code></td>
<td><code>float</code></td>
<td>Заданная температура ГВС (OpenTherm)</td>
</tr>
<tr>
<td><code>ot_min_wp</code></td>
<td><code>float</code></td>
<td>Минимальное давление теплоносителя (OpenTherm)</td>
</tr>
<tr>
<td><code>ot_config</code></td>
<td><code>array</code></td>
<td>
<p>Настройки функционала OpenTherm. Массив, содержащий строковые флаги:</p>
<ul>
<li><code>"ch"</code> — включение отопления</li>
<li><code>"dhw"</code> — включение ГВС</li>
<li><code>"cl"</code> — включение охлаждения</li>
<li><code>"ch2"</code> — включение второго контура отопления</li>
</ul>
</td>
</tr>
<tr>
<td><code>ot_save_params</code></td>
<td><code>array</code></td>
<td>
<p>Параметры OpenTherm для ежеминутного сохранения. По выбранным параметрам можно будет увидеть графики в веб-интерфейсе и приложениях ZONT. Массив, содержащий строковые флаги:</p>
<ul>
<li><code>"bt"</code> — фактическая температура теплоносителя</li>
<li><code>"dt"</code> — фактическая температура ГВС</li>
<li><code>"rwt"</code> — температура обратного потока</li>
<li><code>"ot"</code> — уличная температура</li>
<li><code>"rml"</code> — уровень модуляции горелки</li>
<li><code>"wp"</code> — давление теплоносителя</li>
<li><code>"fr"</code> — скорость потока ГВС</li>
</ul>
<p>Параметры <code>"s"</code> (статус), <code>"cs"</code> (расчётная температура теплоносителя отопления) и <code>"ff"</code> (коды ошибок) сохраняются всегда, независимо от этого параметра.</p>
</td>
</tr>
</tbody>
</table>
<h3 id='c248a6163b-4'>Состояния</h3><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"io"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"last-boiler-state"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"time"</span><span class="p">:</span><span class="w"> </span><span class="mi">1479881662</span><span class="p">,</span><span class="w">
</span><span class="s2">"boiler_work_time"</span><span class="p">:</span><span class="w"> </span><span class="mi">60</span><span class="p">,</span><span class="w">
</span><span class="s2">"thermostat_mode"</span><span class="p">:</span><span class="w"> </span><span class="s2">"comfort"</span><span class="p">,</span><span class="w">
</span><span class="s2">"target_temp"</span><span class="p">:</span><span class="w"> </span><span class="mf">22.0</span><span class="p">,</span><span class="w">
</span><span class="s2">"gate"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="s2">"power"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"fail"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="s2">"pza_t"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="s2">"ot"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"s"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"ch"</span><span class="p">,</span><span class="w"> </span><span class="s2">"fl"</span><span class="p">],</span><span class="w">
</span><span class="s2">"cs"</span><span class="p">:</span><span class="w"> </span><span class="mi">37</span><span class="p">,</span><span class="w">
</span><span class="s2">"ff"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="s2">"f"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span><span class="w"> </span><span class="s2">"c"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">},</span><span class="w">
</span><span class="s2">"bt"</span><span class="p">:</span><span class="w"> </span><span class="mi">35</span><span class="p">,</span><span class="w">
</span><span class="s2">"dt"</span><span class="p">:</span><span class="w"> </span><span class="mi">32</span><span class="p">,</span><span class="w">
</span><span class="s2">"ot"</span><span class="p">:</span><span class="w"> </span><span class="mf">-12.0</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<table>
<thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><a name="last-boiler-state"></a><code>last-boiler-state</code></td>
<td><code>object</code></td>
<td>
<p>Текущий статус термостата. Термостат присылает обновлённый статус раз в минуту. Имеет следующие поля:</p>
<ul>
<li><code>time</code> (int) — время получения статуса (в секундах с 1970-01-01 00:00:00 UTC)</li>
<li><code>boiler_work_time</code> (int) — время работы котла в секундах за последнюю минуту. Неравенство нулю этого поля можно использовать как признак работы котла.</li>
<li><code>thermostat_mode</code> (string) — режим термостата (<code>"econom"</code>, <code>"comfort"</code>, <code>"schedule"</code>, <code>"idle"</code>)</li>
<li><code>gate</code> (bool) — включён ли режим шлюза для внешнего комнатного термостата</li>
<li><code>target_temp</code> (float) — целевая температура</li>
<li><code>power</code> (bool) — наличие внешнего питания</li>
<li><code>fail</code> (bool) — присутствует ли авария котла</li>
<li><code>pza_t</code> (float) — расчётная температура ПЗА</li>
<li><code>ot</code> (object) — состояние OpenTherm
<ul>
<li><code>s</code> (array) — массив флагов состояния
<ul>
<li><code>"f"</code> — авария</li>
<li><code>"ch"</code> — отопление включено</li>
<li><code>"dhw"</code> — ГВС включено</li>
<li><code>"fl"</code> — горелка работает</li>
<li><code>"cl"</code> — охлаждение работает</li>
<li><code>"ch2"</code> — второй контур отопления включен</li>
<li><code>"di"</code> — диагностическая индикация</li>
</ul>
</li>
<li><code>cs</code> (float) — расчётная температура теплоносителя отопления</li>
<li><code>ff</code> (object) — состояние аварии
<ul>
<li><code>c</code> (int) — OEM-код аварии</li>
<li><code>f</code> (array) — флаги аварии
<ul>
<li><code>"sr"</code> — требуется обслуживание</li>
<li><code>"lr"</code> — требуется ручной сброс</li>
<li><code>"wp"</code> — низкое давление теплоносителя</li>
<li><code>"gf"</code> — сбой газа/горелки</li>
<li><code>"ap"</code> — сбой давления воздуха</li>
<li><code>"wot"</code> — превышение температуры</li>
</ul>
</li>
</ul>
</li>
<li><code>bt</code> (float) — фактическая температура теплоносителя</li>
<li><code>dt</code> (float) — фактическая температура ГВС</li>
<li><code>ot</code> (float) — уличная температура</li>
<li><code>rwt</code> (float) — температура обратного потока</li>
<li><code>rml</code> (float) — относительный уровень модуляции в процентах</li>
<li><code>wp</code> (float) — давление теплоносителя (бар)</li>
<li><code>fr</code> (float) — скорость потока ГВС (литр/мин)</li>
</ul>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h2 id='ztc-7xx-mega-sx'>Пользовательские команды и статусы (ZTC-7xx, Mega SX)</h2><pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"custom_controls"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w"> </span><span class="c1">// таких блоков может быть несколько</span><span class="w">
</span><span class="s2">"statuses"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"status"</span><span class="p">,</span><span class="w">
</span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Насос"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="s2">"commands"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"command"</span><span class="p">,</span><span class="w">
</span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Включить насос"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="s2">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"command"</span><span class="p">,</span><span class="w">
</span><span class="s2">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Выключить насос"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="s2">"io"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"custom_controls_state"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="s2">"0"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="s2">"1"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre><h3 id='7f17c7c62a-5'>Настройки</h3>
<table>
<thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>custom_controls</code></td>
<td><code>array</code></td>
<td>
<p>Данные о пользовательских командах и статусах, задаваемых в настроечной утилите. Массив элементов, каждый из которых представляет собой ноль или более кнопок и не более одного статуса, сгруппированные в один графический элемент интерфейса (кнопку или индикатор).</p>
<p>Каждый объект имеет следующие поля:</p>
<ul>
<li><code>commands</code> — массив команд</li>
<li><code>statuses</code> — массив статусов</li>
</ul>
<p><b>Статус</b> — это некоторое состояние устройства, которое может принимать значения 0 или 1 (например, 0 — <i>свет не горит</i>, 1 — <i>свет горит</i>). <b>Команда</b> — запрос устройству на выполнение какого-то действия (например, <i>включить свет</i>)</p>
<p>Каждая команда или статус имеют следующие поля:</p>
<ul>
<li><code>id</code> (int) — идентификатор</li>
<li><code>name</code> (string) — название</li>
</ul>
<p>Отправить устройству команду из списка можно с помощью метода <a href="#send_custom_command">send_custom_command</a>.</p>
</td>
</tr>
</tbody>
</table>
<h3 id='c248a6163b-5'>Состояния</h3>
<table><thead>
<tr>
<th>Название</th>
<th>Тип</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>custom_controls_state</code></td>
<td><code>object</code></td>
<td>Текущие значения пользовательских статусов (см. настройку custom_controls). Имеет форму <code>{&quot;0&quot;: 1, &quot;1&quot;: 1, ...}</code>. Каждому идентификатору статуса ставится в соответствие <code>0</code> или <code>1</code> в зависимости от текущего значения этого статуса в устройстве.</td>
</tr>
</tbody></table>
<h1 id='61b7f2ae17'>Получение архивов данных</h1>
<p>С помощью API вы можете запросить выгрузку архива со всеми данными по устройству за нужный период времени.</p>
<p>Чтобы получить архив, нужно сначала запросить его создание методом <a href="#generate_archive"><code>generate_archive</code></a>,
а затем скачать полученный файл с помощью метода <a href="#download_generated_archive"><code>download_generated_archive</code></a>.</p>
<h2 id='generate_archive'>generate_archive — создать архив</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/generate_archive'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> <span class="se">\</span>
-H <span class="s1">'X-ZONT-Client: your@email.com'</span> <span class="se">\</span>
-H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
-d <span class="s1">'{"device_id": 1209, "split_by": "days",
"mintime": 1486252800, "maxtime": 1486339200}'</span>
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/generate_archive'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">'device_id'</span><span class="p">:</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s">'mintime'</span><span class="p">:</span> <span class="mi">1486252800</span><span class="p">,</span>
<span class="s">'maxtime'</span><span class="p">:</span> <span class="mi">1486339200</span><span class="p">,</span>
<span class="s">'split_by'</span><span class="p">:</span> <span class="s">'days'</span>
<span class="p">}</span>
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s">'X-ZONT-Client'</span><span class="p">:</span> <span class="s">'your@email.com'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/generate_archive'</span><span class="p">;</span>
<span class="nv">$data</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'device_id'</span> <span class="o">=&gt;</span> <span class="mi">1209</span><span class="p">,</span>
<span class="s1">'mintime'</span> <span class="o">=&gt;</span> <span class="mi">1486252800</span><span class="p">,</span>
<span class="s1">'maxtime'</span> <span class="o">=&gt;</span> <span class="mi">1486339200</span><span class="p">,</span>
<span class="s1">'split_by'</span> <span class="o">=&gt;</span> <span class="s1">'days'</span>
<span class="p">);</span>
<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'X-ZONT-Client'</span> <span class="o">=&gt;</span> <span class="s1">'your@email.com'</span><span class="p">,</span> <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/json'</span><span class="p">);</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$request</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">post</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$data</span><span class="p">),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$request</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат:</p>
</blockquote>
<pre class="highlight json-doc tab-json-doc"><code><span class="p">{</span><span class="w">
</span><span class="s2">"ok"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="s2">"archive_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"58f4b58205b605000733f5c6"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<p><code>POST https://my.zont.online/api/generate_archive</code></p>
<p>Запросить создание файла с архивом данных.</p>
<h3 id='6744ad4c7a'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Тип</th>
<th>Обязательный</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td><code>device_id</code></td>
<td><code>int</code></td>
<td>да</td>
<td>ID устройства</td>
</tr>
<tr>
<td><code>mintime</code></td>
<td><code>int</code></td>
<td>да</td>
<td>Начало временного диапазона (включительно)</td>
</tr>
<tr>
<td><code>maxtime</code></td>
<td><code>int</code></td>
<td>да</td>
<td>Конец временного диапазона (включительно)</td>
</tr>
<tr>
<td><code>split_by</code></td>
<td><code>string</code></td>
<td>да</td>
<td>Интервал разбиения данных по файлам в архиве. <code>&quot;days&quot;</code> — отдельные файлы на каждый день, <code>&quot;months&quot;</code> — отдельные файлы на каждый месяц.</td>
</tr>
</tbody></table>
<p>Время указывается в целых секундах, прошедших с 1970-01-01 00:00:00 (UTC). Не забудьте сделать поправку на нужный часовой пояс!</p>
<h3 id='9fa227c53f'>Результат</h3>
<p>Ответ будет содержать поле <code>archive_id</code>, содержащее уникальный строковый идентификатор созданного архива.
Этот идентификатор нужно указать в методе <a href="#download_generated_archive"><code>download_generated_archive</code></a> чтобы скачать
файл архива.</p>
<h2 id='download_generated_archive'>download_generated_archive — скачать файл архива</h2><pre class="highlight shell tab-shell"><code>curl <span class="s1">'https://my.zont.online/api/download_generated_archive?archive_id=58f4b58205b605000733f5c6'</span> <span class="se">\</span>
-u <span class="s1">'demo:demo'</span> &gt;archive.zip
</code></pre><pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="n">url</span> <span class="o">=</span> <span class="s">'https://my.zont.online/api/download_generated_archive'</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s">'archive_id'</span><span class="p">:</span> <span class="s">'58f4b58205b605000733f5c6'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'demo'</span><span class="p">,</span> <span class="s">'demo'</span><span class="p">))</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'archive.zip'</span><span class="p">,</span> <span class="s">'wb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
</code></pre><pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">'Requests.php'</span><span class="p">;</span>
<span class="nx">Requests</span><span class="o">::</span><span class="na">register_autoloader</span><span class="p">();</span>
<span class="nv">$archive_id</span> <span class="o">=</span> <span class="s1">'58f4b58205b605000733f5c6'</span><span class="p">;</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">'https://my.zont.online/api/download_generated_archive?archive_id='</span> <span class="o">.</span> <span class="nv">$archive_id</span><span class="p">;</span>
<span class="nv">$options</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">'auth'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'demo'</span><span class="p">,</span> <span class="s1">'demo'</span><span class="p">));</span>
<span class="nv">$response</span> <span class="o">=</span> <span class="nx">Requests</span><span class="o">::</span><span class="na">get</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="k">array</span><span class="p">(),</span> <span class="nv">$options</span><span class="p">);</span>
<span class="nb">file_put_contents</span><span class="p">(</span><span class="s1">'archive.zip'</span><span class="p">,</span> <span class="nv">$response</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">);</span>
</code></pre>
<blockquote>
<p>Результат будет записан в файл <code>archive.zip</code></p>
</blockquote>
<p><code>GET https://my.zont.online/api/download_generated_archive</code></p>
<p>Скачать файл, созданный методом <a href="#generate_archive"><code>generate_archive</code></a>. Обратите внимание, этот метод
работает по запросу GET.</p>
<h3 id='6744ad4c7a-2'>Параметры</h3>
<table><thead>
<tr>
<th>Имя</th>
<th>Обязательный</th>
<th>Описание</th>
</tr>
</thead><tbody>
<tr>
<td>archive_id</td>
<td>да</td>
<td>идентификатор архива</td>
</tr>
</tbody></table>
<h3 id='9fa227c53f-2'>Результат</h3>
<p>В ответ сервер отправит zip-архив с данными.</p>
</div>
<div class="dark-box">
<div class="lang-selector">
<a href="#" data-language-name="shell">curl</a>
<a href="#" data-language-name="python">python</a>
<a href="#" data-language-name="php">php</a>
</div>
</div>
</div>
</body>
</html>