GeoSnake - Webové Rozhraní API Dokumentace
Přehled
Webové rozhraní je dostupné přes WiFi Access Point nebo při připojení k externí WiFi síti.
Výchozí přístup:
- SSID:
GeoSnake-Config - Heslo:
geosnake123 - URL:
http://192.168.4.1
Rozhraní poskytuje REST API pro ovládání zařízení a webovou aplikaci s modernním grafickým rozhraním.
HTTP API Endpointy
📄 Statické Soubory
GET /
Vrátí hlavní HTML stránku webového rozhraní.
GET /logo.svg
Vrátí SVG logo Statotest.
Response:
- Content-Type:
image/svg+xml
📊 Status a Statistiky
GET /api/status
Vrátí aktuální stav měření a konfiguraci.
Response JSON:
{
"measuring": true,
"odr": 6,
"range": 1,
"frequency": 50.0,
"rtc_time": "14:30:45",
"firmware": "v1.2.0"
}
Pole:
measuring(boolean): Zda probíhá měřeníodr(int): Hodnota ODR (0-10)range(int): Měřící rozsah (1-3)frequency(float): Cílová výstupní frekvence v Hzrtc_time(string): Aktuální čas z RTCfirmware(string): Verze firmware
GET /api/stats
Vrátí statistiky měření.
Response JSON:
{
"total_samples": 125000,
"files_created": 3,
"elapsed_seconds": 8130,
"elapsed_formatted": "2h 15m 30s",
"write_errors": 0
}
GET /api/sd_info
Vrátí informace o SD kartě.
Response JSON:
{
"total": 34359738368,
"free": 30601641984
}
Pole:
total(number): Celková kapacita v bajtechfree(number): Volné místo v bajtech
⚙️ Ovládání Měření
GET /start
Spustí měření akcelerometru.
Response:
OK
GET /stop
Zastaví měření akcelerometru.
Response:
OK
GET /set_odr?value=<0-10>
Nastaví výstupní datovou frekvenci (ODR).
Query Parametry:
value(int): Hodnota ODR (0-10)- 0 = 4000 Hz
- 1 = 2000 Hz
- 2 = 1000 Hz
- 3 = 500 Hz
- 4 = 250 Hz
- 5 = 125 Hz
- 6 = 62.5 Hz
- 7 = 31.25 Hz
- 8 = 15.625 Hz
- 9 = 7.813 Hz
- 10 = 3.906 Hz
Příklad:
GET /set_odr?value=6
Response:
OK
GET /set_range?value=<1-3>
Nastaví měřící rozsah akcelerometru.
Query Parametry:
value(int): Rozsah- 1 = ±2g
- 2 = ±4g
- 3 = ±8g
Příklad:
GET /set_range?value=2
Response:
OK
POST /set_frequency
Nastaví cílovou výstupní frekvenci softwaru.
Request Body (JSON):
{
"frequency": 50.0
}
Response:
OK
📁 Správa Souborů
GET /api/files?path=<path>
Vrátí seznam souborů a složek v zadané cestě.
Query Parametry:
path(string, volitelný): Cesta k adresáři (výchozí: root)
Příklad:
GET /api/files?path=/2024/12/07
Response JSON:
{
"files": [
{
"name": "data_20241207_143000.csv",
"size": 1048576,
"type": "file"
},
{
"name": "data_20241207_150000.csv",
"size": 524288,
"type": "file"
}
],
"folders": [
{
"name": "2024",
"type": "folder"
}
],
"path": "/2024/12/07"
}
GET /api/download?file=<filename>
Stáhne zadaný soubor ze SD karty.
Query Parametry:
file(string): Název souboru včetně cesty
Příklad:
GET /api/download?file=/2024/12/07/data_20241207_143000.csv
Response:
- Content-Type:
application/octet-stream - Content-Disposition:
attachment; filename="<filename>" - Binární obsah souboru
POST /api/delete
Smaže zadaný soubor.
Request Body (JSON):
{
"file": "/2024/12/07/data_20241207_143000.csv"
}
Response:
OK
POST /api/delete_all
Smaže všechny soubory na SD kartě.
Request Body:
Prázdné nebo {}
Response:
OK
Upozornění: Tato operace je nevratná!
POST /api/delete_folder
Smaže celou složku včetně všech souborů.
Request Body (JSON):
{
"folder": "/2024/12/07"
}
Response:
OK
📡 WiFi Management
GET /wifi_status
Vrátí stav WiFi připojení.
Response JSON:
{
"sta_connected": true,
"sta_ssid": "MyNetwork",
"sta_ip": "192.168.1.100",
"internet": true
}
Pole:
sta_connected(boolean): Zda je připojeno k WiFista_ssid(string): Název sítěsta_ip(string): Přidělená IP adresainternet(boolean): Zda je dostupný internet
POST /connect_wifi
Připojí se k WiFi síti.
Request Body (JSON):
{
"ssid": "MyNetwork",
"password": "MyPassword123"
}
Response:
OK
Note: Připojení probíhá na pozadí. Použijte /wifi_status pro kontrolu stavu.
GET /disconnect_wifi
Odpojí se od WiFi sítě (STA režim).
Response:
OK
GET /api/wifi_scan
Provede sken dostupných WiFi sítí.
Response JSON:
{
"networks": [
{
"ssid": "MyNetwork",
"rssi": -45,
"auth": "WPA2"
},
{
"ssid": "NeighborNetwork",
"rssi": -78,
"auth": "WPA2"
}
]
}
Pole:
ssid(string): Název sítěrssi(int): Síla signálu v dBmauth(string): Typ zabezpečení
⏰ Plánování Měření
GET /api/schedules
Vrátí seznam všech naplánovaných měření.
Response JSON:
{
"schedules": [
{
"id": 0,
"enabled": true,
"is_active": false,
"name": "Morning measurement",
"start_time": 1701936600,
"end_time": 1701940200,
"start_formatted": "2024-12-07 06:00:00",
"end_formatted": "2024-12-07 07:00:00"
}
]
}
POST /api/schedule
Přidá nové naplánované měření.
Request Body (JSON):
{
"name": "Test measurement",
"start_time": "2024-12-07 14:30:00",
"end_time": "2024-12-07 16:30:00"
}
Pole:
name(string): Název plánustart_time(string): Čas začátku (YYYY-MM-DD HH:MM:SS)end_time(string, volitelný): Čas konce
Response:
OK
DELETE /api/schedule?id=<id>
Smaže naplánované měření.
Query Parametry:
id(int): ID plánu (0-9)
Příklad:
DELETE /api/schedule?id=0
Response:
OK
🏷️ Konfigurace Zařízení
GET /api/device_config
Vrátí konfiguraci zařízení.
Response JSON:
{
"ap_ssid": "GeoSnake-Config",
"ap_password": "geosnake123",
"ble_name": "STATOTEST-GEOSNAKE"
}
POST /api/device_config
Uloží novou konfiguraci zařízení.
Request Body (JSON):
{
"ap_ssid": "MyGeoSnake",
"ap_password": "SecurePass123",
"ble_name": "GEOSNAKE-LAB-01"
}
Response:
{
"status": "ok",
"message": "Device config saved. Restart to apply changes."
}
Note: Změny se projeví až po restartu zařízení.
🕐 Správa Času
GET /api/time
Vrátí aktuální čas z RTC.
Response JSON:
{
"time": "2024-12-07 14:30:45",
"unix": 1701956445
}
POST /api/sync_ntp
Synchronizuje čas z NTP serveru.
Request Body:
Prázdné nebo {}
Response:
OK
Note: Vyžaduje aktivní internetové připojení.
POST /api/set_time
Nastaví čas manuálně.
Request Body (JSON):
{
"datetime": "2024-12-07 15:00:00"
}
Response:
OK
🔋 Správa Napájení
POST /api/power
Nastaví výkonový režim.
Request Body (JSON):
{
"mode": "normal"
}
Parametry:
mode(string):"normal"nebo"low"normal: 160 MHz CPU, žádný sleeplow: 80 MHz CPU, light sleep
Response:
OK
Note: Zařízení se automaticky restartuje po 2 sekundách.
POST /api/modem
Ovládá WiFi modem sleep režim.
Request Body (JSON):
{
"enable": true
}
Parametry:
enable(boolean): true = zapnout modem sleep, false = vypnout
Response:
OK
POST /api/deepsleep
Přejde do deep sleep režimu.
Request Body (JSON):
{
"duration": 3600
}
Parametry:
duration(int): Doba spánku v sekundách (1-86400)
Response:
Entering deep sleep...
Note: Zařízení se vypne a probudí po zadané době.
🔄 OTA Aktualizace
GET /api/check_update
Zkontroluje dostupnost nové verze firmware.
Response JSON:
{
"update_available": true,
"current_version": "v1.2.0",
"latest_version": "v1.3.0",
"download_url": "http://otaupdateserver.azurewebsites.net/geosnake/adxl/firmware.bin"
}
POST /api/ota_update
Stáhne a nainstaluje novou verzi firmware.
Request Body (JSON):
{
"url": "http://otaupdateserver.azurewebsites.net/geosnake/adxl/firmware.bin"
}
Response:
Downloading and installing update...
Note: Zařízení se automaticky restartuje po dokončení aktualizace.
POST /api/spiffs_update
Aktualizuje webové rozhraní (SPIFFS).
Request Body: Multipart/form-data s uploadovaným souborem
Response:
SPIFFS updated successfully
Struktura Webového Rozhraní
Záložky (Tabs)
- 📊 Dashboard - Přehled stavu a rychlé ovládání
- ⚙️ Sensor Config - Konfigurace ADXL355
- ⏰ Schedule - Plánování měření
- 📁 Files - Správa souborů na SD kartě
- 🔋 Power - Správa napájení
- 🏷️ Device - Konfigurace zařízení
- 📡 WiFi - WiFi nastavení a připojení
JavaScript API (Frontend)
Webové rozhraní poskytuje tyto hlavní funkce:
Ovládání Měření
async function startMeasurement()
async function stopMeasurement()
async function updateODR()
async function updateRange()
async function updateFrequency()
Správa Souborů
async function refreshFiles()
async function downloadFile(filename)
async function deleteFile(filename)
async function deleteAllFiles()
async function downloadSelected()
async function downloadCurrentFolder()
Stahování souborů:
- Pokud je dostupná knihovna JSZip (z CDN), soubory se stáhnou jako ZIP archiv
- Pokud není dostupná (offline režim), soubory se stáhnou postupně jednotlivě
WiFi Management
async function connectWiFi()
async function disconnectWiFi()
async function scanWiFi()
async function updateWiFiStatus()
Plánování
async function loadSchedules()
async function addSchedule()
async function deleteSchedule(id)
Power Management
async function setPowerMode(mode)
async function setModemSleep(enable)
async function enterDeepSleep()
Použití Webového Rozhraní
Základní Workflow
-
Připojení k zařízení:
- Připojte se k WiFi síti
GeoSnake-Config(heslo:geosnake123) - Otevřete prohlížeč a přejděte na
http://192.168.4.1
- Připojte se k WiFi síti
-
Kontrola stavu:
- V záložce Dashboard zkontrolujte aktuální stav zařízení
- Ověřte volné místo na SD kartě
-
Konfigurace senzoru:
- Přejděte na Sensor Config
- Nastavte požadovaný ODR a rozsah
- Upravte cílovou frekvenci výstupu
-
Spuštění měření:
- Klikněte na Start Measurement v Dashboardu
- Sledujte statistiky v reálném čase
-
Stažení dat:
- Přejděte na Files
- Vyberte soubory nebo celé složky
- Klikněte na Download Selected pro stažení jako ZIP
-
Plánování:
- V záložce Schedule nastavte automatické měření
- Zadejte datum, čas začátku a konce
- Uložte plán
Tipy pro Vývoj
AJAX Volání
Všechny API endpointy podporují CORS pro lokální vývoj.
Příklad:
fetch('http://192.168.4.1/api/status')
.then(response => response.json())
.then(data => console.log(data));
Polling pro Aktualizace
Rozhraní automaticky refreshuje status každé 2 sekundy:
setInterval(() => {
updateStatus();
updateWiFiStatus();
}, 2000);
Error Handling
Vždy kontrolujte response status:
fetch('/api/start')
.then(response => {
if (!response.ok) throw new Error('Start failed');
return response.text();
})
.catch(error => alert('Error: ' + error.message));
Řešení Problémů
API neodpovídá:
- Zkontrolujte připojení k WiFi
- Ověřte, že je URL správná (
http://192.168.4.1) - Zkuste vypnout a zapnout WiFi na zařízení
Soubory se nestahují:
- Pokud je problém s popup blockerem, zkuste povolit popupy
- V offline režimu se soubory stahují postupně (může trvat déle)
WiFi připojení selže:
- Zkontrolujte správnost hesla
- Ujistěte se, že síť je na 2.4 GHz (ESP32 nepodporuje 5 GHz)
- Zkuste provést WiFi scan pro ověření dostupnosti sítě
OTA aktualizace selhává:
- Ověřte připojení k internetu
- Zkontrolujte dostupnost aktualizačního serveru
- Ujistěte se, že je dostatek volné paměti (minimálně 1 MB)