Перейти до основного вмісту
Version: 2

ConnectHome Butler API

Загальне

Для локального доступу до точки входу для HTTP API використовується http://{controller-ip}/api/v2/, де controller-ip - IP адреса контролера в локальній мережі, а v2 - версія API.

Кожний виклик API має бути автентифікованим, за винятком тих, де це зазначено обернено.

Аутентифікація

Існують два методи аутентифікації, які можуть бути використані в контролері.

Базова аутентифікація

Це стандартна базова HTTP аутентифікація.

Кожний виклик API повинен містити заголовок Authorization, значення якого повинно бути закодоване в Base64 комбінацією username, крапка-кома(:) і password, перед цим додаючи Basic .

Наприклад, для користувача з ім'ям користувача admin та паролем 12345678 вірний заголовок буде: Authorization: Basic YWRtaW46MTIzNDU2Nzg= де YWRtaW46MTIzNDU2Nzg= - закодовано в Base64 admin:12345678.

Аутентифікація на основі токенів

Для цього методу, користувач повинен отримати токен з виклику POST /api/v2/auth/login, використовуючи Базову аутентифікацію

У випадку успішної відповіді буде містити токен (див. посилання для формату відповіді)

Кожний наступний запит повинен містити наступний заголовок:

Authorization: Bearer abcdefg1234567

де abcdefg1234567 - це раніше отриманий токен.

Кожен токен має свій термін дії, який оновлюється при кожному запиті.

Визначення контролера

Щоб знайти всі контролери в локалній мережі, клієнтська програма повинна слухати на довільному UDP порту та відправляти розповсюджені пакети на порт 17318 наступного формату:

CONNECTHOME_BUTLER_DETECT{listening_port}

тобто, якщо клієнтська програма слухає на порті 20000, то вірний пакет буде CONNECTHOME_BUTLER_DETECT20000.

У відповідь на броадкастовий пакет, всі контролери відповідатимуть UDP JSON пакетом на цей порт. Формат:

{
"name": "Ім'я контролера",
"ip": "192.168.1.123",
"mac": "01:23:45:67:89:AB"
}

Повідомлення про помилки

Усі помилки, що виникли під час обробки запиту, повідомляються наступним чином

{
"errorMessage":"Повідомлення про помилку",
"errorCode":1,
"errorParameters":{}
}

де errorParameters є необов'язковим та містить поля, що є специфічними для кожного коду помилки (див. таблицю нижче)

Коди помилок (Робота в процесі)

Код помилкиОписПараметри
0Помилки немає

Сутності

Розділ

Елемент, який інкапсулює кімнати в зручні, задані користувачем групи. Має наступні властивості:

  • id - ціле число
  • name - рядок

API Reference

Кімната

Кімната - це кімната.

Має наступні властивості:

  • id - ціле число
  • name - рядок
  • section_id - ціле число, id батьківського розділу
  • order - ціле число, порядок сортування в розділі
  • background_image - рядок, назва зображення тла
  • icon - рядок, назва іконки з попереднього набору іконок
  • main_devices - колекція пов'язаних датчиків (пристроїв)
    • temperature_sensor - ціле число, id пристрою
    • humidity_sensor - ціле число
    • luminosity_sensor - ціле число

API Reference

Пристрій

Пристрій - основна сутність в контролері, він представляє будь-який інтерактивний об'єкт.

Тип та можливості пристрою можуть бути визначені двома властивостями:

  • type - основний тип пристрою, дозволяє визначити, які інтерфейси пристрій обов'язково повинен підтримувати (див. таблицю нижче)
  • interfaces - список інтерфейсів. Тут під інтерфейсом мається на увазі колекція підтриманих параметрів та дій (див. таблицю нижче)

Загалом пристрій визначається наступними властивостями:

  • id - ціле число
  • name - рядок
  • room_id - ціле число, id батьківської кімнати
  • type - рядок, описаний вище
  • role - рядок, роль пристрою
  • icon - рядок, назва іконки з попереднього набору іконок
  • order - ціле число, порядок сортування в кімнаті
  • hidden - булеве значення, видимість пристрою в Інтерфейсі користувача
  • interfaces - масив рядків, описаний вище
  • params - об'єкт, колекція параметрів пристрою
  • note_text - Текст нотатки пристрою
  • note_image - Зображення для нотатки пристрою ПОВИННО бути завантажено через storage API

Типи пристроїв (У розробці)

Тип пристроюОписОбов'язкові інтерфейси
DevGatewayШлюз (контролер Z-Wave)Gateway
DevSwitchБінарний перемикачSwitchBinary
DevDimmerДимер світлаSwitchMultilevel, SwitchBinary
DevShutterРолетиSwitchMultilevel, SwitchBinary, Shutter
DevSwitchMultilevelНевідомий багатопозиційний перемикачSwitchMultilevel, SwitchBinary
DevBinarySensorБінарний датчикSensorBinary
DevTemperatureДатчик температуриSensorMultilevel
DevHygrometryДатчик вологостіSensorMultilevel
DevLuminosityДатчик освітленостіSensorMultilevel
DevGenericSensorІнші типи багатозональних датчиківSensorMultilevel
DevThermostatТермостат HVACПринаймні один із: ThermostatMode, ThermostatSetpoint, ThermostatOperatingState, ThermostatFanMode
DecDimmerColorRGB(W) димерSwitchMultilevel, SwitchColor, SwitchBinary
DevUnknownНевизначений пристрій-
примітка

Усі пристрої Z-Wave також матимуть інтерфейс ZWaveDevice


Параметри інтерфейсів (В процесі)

ІнтерфейсНазва параметраОписТип параметра
ZWave DevicenodeIdІдентифікатор вузла пристрою в мережі ZWaveціле число
Multichannel EndpointendpointIdІдентифікатор кінцевої точкиціле число
-parentDeviceIdІдентифікатор батьківського пристроюціле число
Switch BinaryStatusСтатус бінарного перемикача (true = увімкнено, false = вимкнуто, для багаторівневих перемикачів false означає вимкнено, true - ненульовий рівень)булеве значення
-pulseableЧи може перемикач бути пульсованимбулеве значення
Switch MultilevelРівеньРівень багаторівневого перемикача (0-99, де 0 - вимкнено, а 99 - повна потужність)ціле число
VersionfirmwareVersionВерсія(и) прошивки пристроюмасив цілих чисел
AssociationgroupsCountКількість груп асоціаційціле число
-multichannelSupportedЧи підтримуються багаторівневі асоціаціїбулеве значення
-associationsАсоційовані пристрої пристроємjson
Sensor BinaryarmableВказує, чи може датчик бути включений у захищений станбулеве значення
-ackableПоказує, чи є у датчика можливість підтвердження користувачембулеве значення
-ArmedЧи включений станбулеве значення
-TrippedСтан датчика (true - спрацьовано, false - спокійний)булеве значення
-lasttripОстанній раз, коли пристрій був спрацьований (у форматі UNIX часу)ціле число
Sensor MultilevelЗначенняЗначення датчикадробове число
-sensorTypeТип датчика (наразі, це може бути один з: Температура, Вологість, Світлота, Потужність)рядок
-valueScaleМасштаб датчика (залежить від типу датчика)рядок
-valueUnitОдиниці вимірювання датчика (залежить від типу датчика)рядок
ShutterstopableЧи можна зупинити ролети (ігноруйте це, сумісність ISS)булеве значення
Thermostat ModecurrentModeПоточний режим термостата (один з availableModes)рядок
-availableModesДоступні режими термостатаjson
Thermostat SetpointcurrentSetpointsПоточні установки(WIP)json
Thermostat OperatingStatecurrentStateПоточний стан термостата (WIP)рядок
SwitchColorsupportedComponentsПідтримувані кольорові компоненти, звільнені пристроєммасив json рядків, підтримувані варіанти елементів: ТеплийБілий, Холодний Білий, Червоний,Зелений, Синій, Бурштиновий, Ціан, Ліловий, Індексований
-currentComponentValuesЗначення поточно підтримуваних компонентівjson об'єкт, що містить ключ-значення для кольорових компонентів (наприклад {"Червоний":100, "Зелений":50, "Синій":"200"})

API Reference


<div
style={{"marginBottom":"2rem"}}
>
<Heading
id={"authentication"}
as={"h2"}
className={"openapi-tabs__heading"}
children={"Authentication"}
>
</Heading><SchemaTabs
className={"openapi-tabs__security-schemes"}
>
<TabItem
label={"HTTP: Basic Auth"}
value={"Basic"}
>


Це стандартна [базова HTTP аутентифікація](https://en.wikipedia.org/wiki/Basic_access_authentication).

Кожний виклик API повинен містити заголовок `Authorization`, значення якого повинно бути Base64-кодованою комбінацією `username`, двокрапки (:) і `password`, з передставленням `Basic `.

Наприклад, для користувача з ім'ям користувача `admin` та пароля `12345678`, правильний заголовок буде:

Authorization: Basic YWRtaW46MTIzNDU2Nzg=

де `YWRtaW46MTIzNDU2Nzg=` - це Base64-кодоване значення `admin:12345678`.

<div>
<table>
<tbody>
<tr>
<th>
Security Scheme Type:
</th><td>
http
</td>
</tr><tr>
<th>
HTTP Authorization Scheme:
</th><td>
basic
</td>
</tr>
</tbody>
</table>
</div>
</TabItem><TabItem
label={"HTTP: Bearer Auth"}
value={"Token"}
>


Для використання цього методу користувач має отримати токен за допомогою виклику `POST /api/v2/auth/login` з використанням [Базової Аутентифікації](#section/Authentication/Basic-Authentication)

У разі успішного відгуку відповідь буде містити токен (див. [посилання](#tag/Authorization) на формат відповіді)

Кожний наступний запит повинен містити наступний заголовок:

Authorization: Bearer abcdefg1234567


де `abcdefg1234567` - це отриманий раніше токен.
:::note

Доступовий токен має час спливу, коли він закінчується, **Оновлювальний Токен** повинен бути використаний для отримання нового.
:::

<div>
<table>
<tbody>
<tr>
<th>
Security Scheme Type:
</th><td>
http
</td>
</tr><tr>
<th>
HTTP Authorization Scheme:
</th><td>
bearer
</td>
</tr>
</tbody>
</table>
</div>
</TabItem>
</SchemaTabs>
</div><div
style={{"display":"flex","flexDirection":"column","marginBottom":"var(--ifm-paragraph-margin-bottom)"}}
>
<h3
style={{"marginBottom":"0.25rem"}}
>
Contact
</h3><span>
me:
</span>
</div>