Newer
Older
smart-home-server / docs / server-api-v1 / devices.md

Управление устройствами умного дома


GET /api/v1/devices/list

Получить список устройств о которых знает сервер

Пример ответа

    {
        "status": "ok",
        "devices": [
            {
                "id": 12,
                "device": {
                    "device_name": "Relay 1",
                  "device_type": "relay",
                  "firmware_version": "1.0.3",
                  "device_id": "ecf0a1b5c9d74f9a8e294c1f67b0a8b9",
                  "device_ip": "192.168.1.13"
                },
                "alias": "alias_name_like_variable",
              "name": "Реле помпы септика",
                "description": "Управляет помпой, должно периодически включаться и выключаться",
                "connection_state": "active", // active | lost
                "last_contact": "2025-07-28 18:35",
            },
            // ...
        ]
    }

GET /api/v1/devices/scanning/setup AND GET /api/v1/devices/scanning/all

Поиск новых устройств в сети (setup) или всех устройств в сети

Пример ответа

    {
        "status": true,
        "devices": [
            {
                "device_name": "Relay 1",
              "device_type": "relay",
              "firmware_version": "1.0.3",
              "device_id": "ecf0a1b5c9d74f9a8e294c1f67b0a8b9",
              "device_ip": "192.168.1.42"
            },
            // ...
        ]
    }

POST /api/v1/devices/setup/new-device

Добавление нового устройства

Пример запроса

    {
        "device_ip": "192.168.1.43",
        "alias": "alias_name_like_variable", // Must be uniq
        "name": "Реле помпы септика",
        "description": "Управляет помпой, должно периодически включаться и выключаться"
    }

Пример ответа

    {
        "status": true,
        "data": {
            "device": {
                "id": 12,
                "alias": "...",
                "device": {
                    "device_name": "Relay 1",
                  "device_type": "relay",
                  "firmware_version": "1.0.3",
                  "device_id": "ecf0a1b5c9d74f9a8e294c1f67b0a8b9",
                  "device_ip": "192.168.1.13"
                  // ...
                },
              "name": "Реле помпы септика",
                "description": "Управляет помпой, должно периодически включаться и выключаться",
            }
        }
    }

Пример НЕ успешного ответа

    {
        "status": false,
        "error_alias": "",
        "failed_fields": ["alias"], // alias | name | device_id
        "msg": "Alias already exists" // "Name can`t be empty" | "Device not found by IP"
    }

GET /api/v1/devices/id/{{id}}/info

Получить информацию по отдельному девайсу

Пример ответа

    {
        "status": true,
        "data": {
            "device": {
                "id": 12,
                "alias": "...",
                "state": "active", // active | freeze
                "device": {
                    "device_name": "Relay 1",
                  "device_type": "relay",
                  "firmware_version": "1.0.3",
                  "device_id": "ecf0a1b5c9d74f9a8e294c1f67b0a8b9",
                  "device_ip": "192.168.1.13"
                },
              "name": "Реле помпы септика",
                "description": "Управляет помпой, должно периодически включаться и выключаться",
                "connection_state": "active", // active | lost
                "last_contact": "2025-07-28 18:35",
                "create_at": "2025-07-28 15:35"
            }
        }
    }

Пример НЕ успешного ответа

    {
        "status": false,
        "error_alias": "...",
        "msg": "..."
    }

GET /api/v1/devices/id/{{id}}

Получить информацию по отдельному девайсу

Пример ответа

    {
        "status": true,
        "data": {
            "device": {
                "id": 12,
                "alias": "...",
                "device_type": "relay",
                "device_hard_id": "...",
                "device_mac": "...",
                "device_ip": "...",
                "firmware_version": "...",
              "name": "Реле помпы септика",
              "state": "active", // active | freeze
                "description": "Управляет помпой, должно периодически включаться и выключаться",
                "connection_state": "active", // active | lost
                "last_contact": "2025-07-28 18:35",
                "create_at": "2025-07-28 15:35"
            }
        }
    }

Пример НЕ успешного ответа

    {
        "status": false,
        "error_alias": "...",
        "msg": "..."
    }

GET /api/v1/devices/id/{{id}}/status

Получить отдельный девайс

Пример ответа

    {
        "status": true,
        "data": {
            "device": {
                "id": 12,
                "alias": "...",
                "device_response": {
                    // ...
                }
            }
        }
    }

POST /api/v1/devices/action

Выполнить действие для отдельного девайса

Пример запроса

    {
        "device_id": 47,
        "action": "action_name",
        "params": {
            // ...
        }
    }

Пример успешного ответа

В ответе вернётся непосредственно ответ от устройства

    {
        "status": true,
        "device": {
            "id": 12,
            "alias": "alias_name_like_variable",
            "device_response": {
                // ...
            }
        }
    }

Пример НЕ успешного ответа

    {
        "status": false,
        "error_alias": "...",
        "msg": "Device does not support this action or params",
        "device_status": "error",
        "device_error": "...",
        "device_msg": "..."
    }

GET /api/v1/devices/id/{{id}}/remove

Забыть выбраный девайс. Сам девайс при этом будет ресетнуть. Доступно лишь супер админу.

Пример успешного ответа

    {
        "status": true
    }

Пример НЕ успешного ответа

    {
        "status": false,
        "error_alias": "...",
        "device_msg": "...",
        "msg": "..."
    }

GET /api/v1/devices/id/{{id}}/reboot

Принудительно перезагрузить устройство. Доступно лишь админу

Пример успешного ответа

    {
        "status": true
    }