From 57a6b4943a70e40e6653a00f90c924cc6f7f309f Mon Sep 17 00:00:00 2001 From: BitCode Date: Thu, 23 Apr 2026 13:47:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D0=BE=D1=80=D0=B8=D0=B8=20Wiki?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API.md | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Home.md | 1 + 2 files changed, 129 insertions(+) create mode 100644 API.md create mode 100644 Home.md diff --git a/API.md b/API.md new file mode 100644 index 0000000..43879ba --- /dev/null +++ b/API.md @@ -0,0 +1,128 @@ +# πŸ“š ДокумСнтация API ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: Excavators AI + +> **Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ URL:** `https://ex.neimarker.ru/api/` (ΠΈΠ»ΠΈ ваш Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Π΄ΠΎΠΌΠ΅Π½) +> **Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Ρ‚:** ISO 8601 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `2026-04-20T15:30:00Z`) +> **АутСнтификация (Для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΉ):** Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ `Authorization: Api-Key <Ρ‚ΠΎΠΊΠ΅Π½>` +> **АутСнтификация (Web):** Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ `Authorization: Bearer ` + +## πŸ“‘ ОглавлСниС +1. [АутСнтификация ΠΈ интСграция](#auth) +2. [Экскаваторы (Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ CRUD)](#devices_crud) +3. [Настройки Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ экскаватора](#device_settings) +4. [Аналитика ΠΈ Π¦ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΈΠΊ](#analytics) +5. [Π’ΠΈΠ΄Π΅ΠΎΠ°Ρ€Ρ…ΠΈΠ², ΠšΠ°Ρ€Ρ‚Ρ‹ ΠΈ ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…](#video_archive) +--- + + +## 1. АутСнтификация ΠΈ интСграция +Π’ систСмС прСдусмотрСно Π΄Π²Π° Ρ‚ΠΈΠΏΠ° доступа: для ΠΆΠΈΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (Ρ‡Π΅Ρ€Π΅Π· Π²Π΅Π±-интСрфСйс с Π»ΠΎΠ³ΠΈΠ½ΠΎΠΌ/ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ) ΠΈ для сторонних систСм (интСграция ΠΏΠΎ статичному API-ΠΊΠ»ΡŽΡ‡Ρƒ). + +### πŸ”‘ Доступ для сторонних систСм (Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ) +Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Π½Π΅ΡˆΠ½ΠΈΡ… скриптов, 1Π‘, Telegram-Π±ΠΎΡ‚ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… систСм (M2M) ΠΊΠ°ΠΏΡ‡Π° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. + +> ⚠️ **Π’Π°ΠΆΠ½ΠΎ:** Для получСния ΠΊΠ»ΡŽΡ‡Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ (`Api-Key`) вашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² слуТбу тСхничСской ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΠ»ΠΈ ΠΊ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ. + +### πŸ’» ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Python: Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ Api-Key +```python +import requests + +BASE_URL = "https://ex.neimarker.ru/api/" +# Π’ΠΎΠΊΠ΅Π½, Π²Ρ‹Π΄Π°Π½Π½Ρ‹ΠΉ для вашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ +API_KEY = "ВАШ_Π£ΠΠ˜ΠšΠΠ›Π¬ΠΠ«Π™_Π’ΠžΠšΠ•Π_Π˜ΠΠ’Π•Π“Π ΠΠ¦Π˜Π˜" + +headers = { + "Authorization": f"Api-Key {API_KEY}" +} + +# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ список всСх доступных экскаваторов вашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ +devices_res = requests.get(f"{BASE_URL}/devices/", headers=headers) +print("Доступная Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°:", devices_res.json()) + +# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΡƒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ экскаватору +analytics_res = requests.get( + f"{BASE_URL}/analytics/?device_id=1&start_date=2026-04-20T00:00:00Z&end_date=2026-04-20T23:59:59Z", + headers=headers +) +print("Аналитика:", analytics_res.json()) +``` +--- + +## 2. Экскаваторы (Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ CRUD) +АвтоматичСски ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹Π΄Π°Ρ‡Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ устройствами, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Π΅ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ запрос. + +| ΠœΠ΅Ρ‚ΠΎΠ΄ | Π­Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚ | ОписаниС | +|---|---|---| +| `GET` | `/devices/` | Бписок всСх устройств ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. | +| `POST` | `/devices/` | Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ устройства. ΠžΠΆΠΈΠ΄Π°Π΅Ρ‚: `name`, `bucket_volume`. MAC ΠΈ API-Ρ‚ΠΎΠΊΠ΅Π½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ автоматичСски. | +| `GET` | `/devices//` | Π”Π°Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ устройства. | +| `PATCH`| `/devices//` | ИзмСнСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (объСм ковша, смСны, часовой пояс `timezone_offset` ΠΈ Ρ‚.Π΄.). | +| `DELETE`| `/devices//`| Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅. (МоТно ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ устройства с MAC "OFFLINE-..."). | + +--- + + +## 3. Настройки Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ экскаватора +Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ справочники для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ `device_id`. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ созданиС, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ списка ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ `pk` (ID записи). + +| ΠœΠ΅Ρ‚ΠΎΠ΄ | Π­Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚ | ОписаниС | +|---|---|---| +| `GET`, `POST` | `/devices//materials/` | Π’ΠΈΠΏΡ‹ Π³Ρ€ΡƒΠ½Ρ‚Π° (ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ, коэффициСнты) Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄. | +| `DELETE` | `/devices//materials//`| Π£Π΄Π°Π»ΠΈΡ‚ΡŒ настройку ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°. | +| `GET`, `POST` | `/devices//schedule-exceptions/` | Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°: ВО, Ρ€Π΅ΠΌΠΎΠ½Ρ‚Ρ‹, Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅, спСц-смСны. | +| `DELETE` | `/devices//schedule-exceptions//` | Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. | +| `GET`, `POST` | `/devices//breaks/` | Π•ΠΆΠ΅Π΄Π½Π΅Π²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ОбСд 12:00 - 13:00). | +| `DELETE` | `/devices//breaks//` | Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π². | +| `GET`, `POST` | `/devices//shifts/` | Настройка смСн (ΠΏΡ€ΠΈ `has_multiple_shifts=True` Ρƒ устройства). | +| `DELETE` | `/devices//shifts//` | Π£Π΄Π°Π»ΠΈΡ‚ΡŒ смСну. | + +### πŸ’» ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Python: Настройка расписания +```python +device_id = 1 +headers = {"Authorization": f"Api-Key {API_KEY}"} + +# 1. ДобавляСм ΠΎΠ±Π΅Π΄ +requests.post(f"{BASE_URL}/devices/{device_id}/breaks/", headers=headers, json={ + "start_time": "12:00:00", + "end_time": "13:00:00", + "description": "ΠžΠ±Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²" +}) + +# 2. ДобавляСм ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ / ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊ) +requests.post(f"{BASE_URL}/devices/{device_id}/schedule-exceptions/", headers=headers, json={ + "date": "2026-05-01", + "end_date": "2026-05-01", + "is_working": False, + "is_maintenance": False, + "description": "Π”Π΅Π½ΡŒ Π’Ρ€ΡƒΠ΄Π°" +}) +``` + +--- + + +## 4. Аналитика ΠΈ Π¦ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΈΠΊ +ВяТСлыС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ эндпоинты для получСния ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ. + +| ΠœΠ΅Ρ‚ΠΎΠ΄ | Π­Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚ | ОписаниС | +|---|---|---| +| `GET` | `/analytics/` | Бводная Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°. Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ `?device_id=...&start_date=...&end_date=...`. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΌΡ‹, массу, Ρ‚Π°ΠΉΠΌΠ»Π°ΠΉΠ½, Ρ†ΠΈΠΊΠ»Ρ‹, Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ (JSON). | +| `POST` | `/analytics/recalculate/` | ΠŸΠΎΠ»Π½Ρ‹ΠΉ пСрСсчСт Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ (сборка Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ простоСв). ΠžΠΆΠΈΠ΄Π°Π΅Ρ‚ JSON: `device_id`, `start_date`. ЗапускаСтся Π² Ρ„ΠΎΠ½Π΅. | + +--- + + +## 5. Π’ΠΈΠ΄Π΅ΠΎΠ°Ρ€Ρ…ΠΈΠ², ΠšΠ°Ρ€Ρ‚Ρ‹ ΠΈ ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… +ВсС, Ρ‡Ρ‚ΠΎ связано с Π²ΠΈΠ΄Π΅ΠΎ, Ρ‚Ρ€Π΅ΠΊΠ°ΠΌΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ сырыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ устройства. + +| ΠœΠ΅Ρ‚ΠΎΠ΄ | Π­Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚ | ОписаниС | +|---|---|---| +| `GET` | `/devices//available-dates/` | Массив Π΄Π°Ρ‚ (YYYY-MM-DD), Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. | +| `GET` | `/devices//folders/` | Бписок ΠΏΠ°ΠΏΠΎΠΊ Π°Ρ€Ρ…ΠΈΠ²Π° (кусков Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ 1 часу). | +| `GET` | `/devices//folders//detections/` | ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ€Π°ΠΌΠΎΠΊ (Bounding Boxes) для рисования ΠΏΠΎΠ²Π΅Ρ€Ρ… Π²ΠΈΠ΄Π΅ΠΎΠΏΠ»Π΅Π΅Ρ€Π°. | +| `GET` | `/devices//video-frame/?timestamp=...` | Поиск Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»Π° ΠΈ сСкунды для ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΈ ΠΏΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. | +| `GET` | `/devices//trajectory/?start_date=...&end_date=...`| ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ GPS для отрисовки Π»ΠΈΠ½ΠΈΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅. | +| `POST`| `/devices//upload-archive/` | Ручная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΡ„Ρ„Π»Π°ΠΉΠ½ `.zip` Π°Ρ€Ρ…ΠΈΠ²Π°. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Streaming HTTP с Π»ΠΎΠ³Π°ΠΌΠΈ распаковки. | +| `GET` | `/devices//alerts/` | Бписок послСдних экстрСнных событий (АлСртов) ΠΎΡ‚ устройства. | +| `POST`| `/devices//clear-data/` | **Опасная опСрация.** ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… устройства. JSON: `{"mode": "all"}` ΠΈΠ»ΠΈ `{"mode": "date", "date": "..."}`. | + +--- \ No newline at end of file diff --git a/Home.md b/Home.md new file mode 100644 index 0000000..0408d9f --- /dev/null +++ b/Home.md @@ -0,0 +1 @@ +1 странийца \ No newline at end of file