EchoEye · Dokumentacja
REST API Reference
Pełna dokumentacja HTTP API czujnika EchoEye .
Wszystkie endpointy zwracają JSON, żądania POST wymagają
Content-Type: application/json.
Bazowy adres (AP)
http://192.168.4.1
Format odpowiedzi
application/json
Protokół
HTTP (nie HTTPS)
01
Odczyt danych i statusu
GET
/api/data
Wszystkie dane z czujnika w czasie rzeczywistym
Odpowiedź
cURL
200 OK — JSON
| presenceDetected | bool | Czy wykryto obecność |
| motionStatus | string | "Moving" / "Static" / "None" |
| lightLevel | float | Poziom światła w lux (2 miejsca po przecinku) |
| dynamicDistance | float | Odległość ruchu w metrach |
| staticDistance | float | Odległość statyczna w metrach |
| networkName | string | Nazwa sieci WiFi |
| ipAddress | string | Adres IP czujnika |
| mqttAddress | string | Adres brokera MQTT lub "nie skonfigurowany" |
| firmwareVersion | string | Wersja firmware, np. "aktualna" |
| mqttConnected | bool | Czy połączono z brokerem MQTT |
| sensorName | string | Nazwa czujnika (max 32 znaki) |
| currentDynamic | int[9] | Wartości czułości dynamicznej — 9 bramek |
| currentStatic | int[9] | Wartości czułości statycznej — 9 bramek |
| sensorConnected | bool | Czy sensor odpowiada |
cURL
curl http://192.168.1.100/api/data
GET
/data
Kompatybilność wsteczna — przekierowuje do /api/data
ℹ️
Odpowiedź identyczna jak
/api/data. Endpoint istnieje wyłącznie dla kompatybilności ze starszymi integracjami.
GET
/values
Tylko wartości czułości bramek
Odpowiedź
cURL
200 OK — JSON
| currentDynamic | int[9] | Czułość dynamiczna — 9 wartości (bramki 0–8) |
| currentStatic | int[9] | Czułość statyczna — 9 wartości (bramki 0–8) |
cURL
curl http://192.168.1.100/values
GET
/sensor-status
Szczegółowy status sensora
Odpowiedź
cURL
200 OK — JSON
| sensorConnected | bool | Czy sensor odpowiada na komunikację |
| lastDataReceived | ulong | Timestamp ostatnich odebranych danych |
| timeSinceLastData | ulong | Czas od ostatnich danych (ms) |
| sensorInitialized | bool | Czy sensor jest zainicjalizowany |
| presenceDetected | bool | Wykryto obecność |
| motionDetected | bool | Wykryto ruch dynamiczny |
| staticDetected | bool | Wykryto obiekt statyczny |
| motionDistance | float | Odległość wykrytego ruchu (m) |
| staticDistance | float | Odległość obiektu statycznego (m) |
| motionEnergy | int | Energia wykrytego ruchu |
| staticEnergy | int | Energia obiektu statycznego |
| txPin / rxPin | int | Pin TX / Pin RX |
| baudRate | int | Prędkość transmisji: 256 000 |
| enhancedMode | bool | Czy Enhanced Mode jest aktywny |
| readInterval | int | Interwał odczytu (ms) — domyślnie 600 |
| uptime | ulong | Czas działania urządzenia (sekundy) |
cURL
curl http://192.168.1.100/sensor-status
GET
/logs
Historia wykryć obecności
Odpowiedź
cURL
200 OK — JSON
| logs[ ].timestamp | ulong | Timestamp wykrycia |
| logs[ ].uptime | string | Czas działania jako string |
| logs[ ].realTime | string | Czas rzeczywisty (jeśli NTP dostępny) |
| logs[ ].hasRealTime | bool | Czy czas NTP jest dostępny |
| logs[ ].duration | int | Czas trwania obecności (sekundy) |
| logs[ ].durationString | string | Czas trwania jako czytelny string |
| logs[ ].dynamicDistance | float | Odległość ruchu przy wykryciu |
| logs[ ].staticDistance | float | Odległość statyczna przy wykryciu |
| count | int | Liczba logów |
| maxLogs | int | Maksymalna liczba logów: 100 |
| ntpSynced | bool | Czy NTP jest zsynchronizowany |
cURL
curl http://192.168.1.100/logs
02
Konfiguracja — odczyt i zapis
️
GET
/api/config
Pełna konfiguracja czujnika
Odpowiedź
cURL
200 OK — JSON
| wifiSSID | string | SSID sieci WiFi |
| mqttServer | string | Adres brokera MQTT |
| mqttPort | int | Port brokera MQTT |
| mqttUsername | string | Użytkownik MQTT |
| mqttTopic | string | Topic MQTT |
| maxDistance | float | Maksymalna odległość (m) — zakres 0.75–6.0 |
| timeout | int | Timeout braku obecności (s) — zakres 1–300 |
| motionThresholds | int[9] | Progi ruchu dla 9 bramek (0–100) |
| staticThresholds | int[9] | Progi statyczne dla 9 bramek (0–100) |
| sensorName | string | Nazwa czujnika (max 32 znaki) |
| automationEnabled | bool | Czy automatyzacja HTTP jest włączona |
| onPresenceUrl | string | URL wywoływany przy wykryciu obecności |
| onAbsenceUrl | string | URL wywoływany przy braku obecności |
| useLightThreshold | bool | Czy używać progu światła w automatyzacji |
| automationLightThreshold | float | Próg lux dla automatyzacji HTTP |
| lightControlEnabled | bool | Czy kontrola GPIO na podstawie światła jest włączona |
| lightControlThreshold | float | Próg lux dla sterowania GPIO |
cURL
curl http://192.168.1.100/api/config
POST
/parameters
Aktualizacja WiFi, MQTT, timeout i odległości
Body
Odpowiedź
cURL
Body — application/json (wszystkie pola opcjonalne)
| wifiSSID | string | SSID sieci WiFi (jeśli w trybie AP — uruchomi połączenie) |
| wifiPassword | string | Hasło WiFi |
| mqttServer | string | Adres brokera MQTT |
| mqttPort | int | Port brokera MQTT |
| mqttUsername | string | Użytkownik MQTT |
| mqttPassword | string | Hasło MQTT |
| mqttTopic | string | Topic MQTT |
| maxDistance | float | Maks. odległość (0.75–6.0 m, kroki 0.75) |
| timeout | int | Timeout (1–300 sekund) |
200 OK — JSON
| status | string | "success" |
cURL
curl -X POST http://192.168.1.100/parameters \ -H "Content-Type: application/json" \ -d '{ "wifiSSID": "MojaSiec", "wifiPassword": "haslo123", "mqttServer": "192.168.1.10", "mqttPort": 1883, "maxDistance": 4.5, "timeout": 30 }'
POST
/sensor-config
Aktualizacja czułości bramek sensora
Body
Odpowiedź
cURL
Body — application/json (wszystkie pola opcjonalne)
| maxDistance | float | Maks. odległość w metrach (0.75–6.0, kroki co 0.75) |
| timeout | int | Timeout obecności (1–300 sekund) |
| motionThresholds | int[9] | Progi ruchu dla 9 bramek, każdy 0–100 |
| staticThresholds | int[9] | Progi statyczne dla 9 bramek, każdy 0–100 |
200 OK — JSON
| status | string | "success" |
️
Zwraca 503 podczas aktywnej autokalibracji. Odczekaj na zakończenie procesu.
cURL
curl -X POST http://192.168.1.100/sensor-config \ -H "Content-Type: application/json" \ -d '{ "motionThresholds": [40,45,50,55,60,55,50,45,40], "staticThresholds": [30,35,40,40,45,40,35,30,25], "maxDistance": 4.5, "timeout": 30 }'
03
Nazwa czujnika
️
GET
/sensor-name
Zwraca aktualną nazwę czujnika
200 OK — JSON
| sensorName | string | Nazwa czujnika (max 32 znaki) |
| success | bool | Zawsze true |
POST
/sensor-name
Ustawia nową nazwę czujnika
Body
Błędy
cURL
Body — application/json
| sensorName | string | Nowa nazwa (1–32 znaki) |
400 Bad Request — możliwe błędy
| "Invalid JSON" | Nieprawidłowy format JSON w body | |
| "Missing sensorName" | Brak pola sensorName w body | |
| "Sensor name cannot be empty" | Podano pusty string | |
| "Sensor name too long" | Przekroczono limit 32 znaków | |
cURL
curl -X POST http://192.168.1.100/sensor-name \ -H "Content-Type: application/json" \ -d '{"sensorName": "MojaSypialnia"}'
04
Automatyzacja i kontrola światła
POST
/automation-rule
Ustawia regułę automatyzacji HTTP
Body
cURL
Body — application/json (wszystkie pola opcjonalne)
| enabled | bool | Czy reguła jest aktywna |
| onPresenceUrl | string | URL wywoływany przy wykryciu obecności (GET) |
| onAbsenceUrl | string | URL wywoływany przy braku obecności (GET) |
| useLightThreshold | bool | Czy uwzględniać poziom oświetlenia |
| lightThreshold | float | Próg oświetlenia w lux — automatyzacja aktywna poniżej progu |
cURL
curl -X POST http://192.168.1.100/automation-rule \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "onPresenceUrl": "http://192.168.1.1/api/trigger?on", "onAbsenceUrl": "http://192.168.1.1/api/trigger?off", "useLightThreshold": true, "lightThreshold": 50.0 }'
POST
/light-control
Konfiguracja sterowania GPIO na podstawie światła
Body
cURL
Body — application/json
| enabled | bool | Czy kontrola GPIO jest aktywna |
| threshold | float | Próg oświetlenia w lux (domyślnie 50.0) |
cURL
curl -X POST http://192.168.1.100/light-control \ -H "Content-Type: application/json" \ -d '{"enabled": true, "threshold": 30.0}'
05
WiFi i sieci
GET
/wifi-networks
Lista dostępnych sieci WiFi
200 OK — JSON
| networks[ ].ssid | string | Nazwa sieci WiFi |
| networks[ ].rssi | int | Siła sygnału w dBm |
| networks[ ].encryption | string | "Open" lub "Secured" |
ℹ️
Zwraca wyniki z ostatniego skanowania (maks. 10 sieci). Aby wymusić nowe skanowanie, użyj
POST /scan-wifi.
POST
/scan-wifi
Wykonuje nowe skanowanie sieci WiFi
️
Skanowanie może zająć kilka sekund. Odpowiedź identyczna jak
/wifi-networks.
POST
/reset-wifi
Reset WiFi i MQTT, uruchomienie trybu AP
200 OK — JSON
| status | string | "success" |
| message | string | Informacja o restarcie w tryb AP |
️
Uwaga: Urządzenie zrestartuje się automatycznie po wysłaniu odpowiedzi. Utracisz połączenie z bieżącą siecią.
06
MQTT — Test połączenia
POST
/test-mqtt
Testuje połączenie z brokerem MQTT
Odpowiedź
cURL
200 OK — JSON
| success | bool | Czy połączenie się powiodło |
| message | string | Komunikat statusu |
ℹ️
Wysyła testową wiadomość na topic:
{mqttTopic}/test
cURL
curl -X POST http://192.168.1.100/test-mqtt
07
Sensor — Autokalibracja
POST
/auto-config
Uruchamia automatyczną kalibrację progów
Odpowiedź
Błędy
cURL
200 OK — sukces
| success | bool | true |
| message | string | "Auto-calibration completed successfully" |
️
Proces trwa 10–20 sekund. Po zakończeniu bramki 0 i 1 są ustawiane na 100. Nie można uruchomić podczas innej operacji na sensorze.
400 / 503 — możliwe błędy
| "Auto-calibration already in progress" | Kalibracja już trwa — poczekaj na zakończenie | |
| "Sensor busy, try again" | Sensor zajęty inną operacją | |
| "Auto-calibration failed" | Kalibracja nie powiodła się | |
| "Auto-calibration timeout" | Przekroczono czas oczekiwania | |
cURL
curl -X POST http://192.168.1.100/auto-config
08
Restart urządzenia
GET
/restart
Restartuje i sensor
200 OK — JSON
| success | bool | true |
| message | string | "Restarting radar and ESP..." |
️
Urządzenie zrestartuje się po wysłaniu odpowiedzi. Połączenie zostanie zerwane.
09
Aktualizacja firmware OTA
⬆️
POST
/updateota
Aktualizacja przez URL do pliku .bin
Body
cURL
Body — multipart/form-data
| url | string | URL do pliku firmware .bin |
cURL
curl -X POST http://192.168.1.100/updateota \ -F "url=http://example.com/firmware_T2_250.bin"
POST
/update-local
Aktualizacja z lokalnego pliku .bin
Body
Odpowiedź
cURL
Body — multipart/form-data
| firmware | file | Plik .bin z nowym firmware |
200 OK — JSON
| status | string | "success" lub "error" |
| message | string | Opis rezultatu |
cURL
curl -X POST http://192.168.1.100/update-local \ -F "firmware=@/path/to/firmware.bin"
10
MQTT — Publikowane dane
Topic
{mqttTopic}/data
co 2 sekundy
| presenceDetected | bool | Czy wykryto obecność |
| motionStatus | string | "Moving" / "Static" / "None" |
| lightLevel | float | Poziom oświetlenia (lux) |
| dynamicDistance | float | Odległość ruchu (m) |
| staticDistance | float | Odległość statyczna (m) |
| motionEnergy | int | Energia ruchu |
| staticEnergy | int | Energia statyczna |
| motionDetected | bool | Wykryto ruch dynamiczny |
| staticDetected | bool | Wykryto obiekt statyczny |
| timestamp | ulong | Timestamp wiadomości |
| uptime | ulong | Czas działania urządzenia (s) |
| sensorName | string | Nazwa czujnika |
11
Kody statusu HTTP
200 OK
Żądanie zakończone sukcesem. Odpowiedź zawiera JSON z wynikiem.
400 Bad Request
Nieprawidłowe dane JSON w body lub brakujące wymagane parametry. Sprawdź Content-Type i strukturę żądania.
503 Unavailable
Sensor zajęty — najczęściej podczas autokalibracji. Poczekaj na zakończenie i ponów żądanie.
12
Limity i ograniczenia
100
Maks. liczba logów historii
10
Maks. sieci WiFi w skanowaniu
️
32 znaki
Maks. długość nazwy czujnika
0.75 – 6.0 m
Zasięg wykrywania (kroki 0.75 m)
️
1 – 300 s
Zakres timeoutu obecności
0 – 100
Zakres czułości każdej z 9 bramek
600 ms
Interwał odczytu danych z sensora
co 2 s
Częstotliwość publikacji MQTT
️
10 – 20 s
Czas trwania autokalibracji
256 000
Prędkość transmisji UART (baud)
