Přeskočit na hlavní obsah

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ěřicí rozsah (1-3)
  • frequency (float): Cílová výstupní frekvence v Hz
  • rtc_time (string): Aktuální čas z RTC
  • firmware (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 bajtech
  • free (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ěřicí 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 WiFi
  • sta_ssid (string): Název sítě
  • sta_ip (string): Přidělená IP adresa
  • internet (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 dBm
  • auth (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ánu
  • start_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ý sleep
    • low: 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)​

  1. 📊 Dashboard - Přehled stavu a rychlé ovládání
  2. ⚙️ Sensor Config - Konfigurace ADXL355
  3. ⏰ Schedule - Plánování měření
  4. 📁 Files - Správa souborů na SD kartě
  5. 🔋 Power - Správa napájení
  6. 🏷️ Device - Konfigurace zařízení
  7. 📡 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​

  1. 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
  2. Kontrola stavu:

    • V záložce Dashboard zkontrolujte aktuální stav zařízení
    • Ověřte volné místo na SD kartě
  3. Konfigurace senzoru:

    • Přejděte na Sensor Config
    • Nastavte požadovaný ODR a rozsah
    • Upravte cílovou frekvenci výstupu
  4. Spuštění měření:

    • Klikněte na Start Measurement v Dashboardu
    • Sledujte statistiky v reálném čase
  5. Stažení dat:

    • Přejděte na Files
    • Vyberte soubory nebo celé složky
    • Klikněte na Download Selected pro stažení jako ZIP
  6. 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)