Formát exportu
Datový slovník
SIGNAL_COLLECTOR_TXT_V4.
Co přesně stojí v exportovaném souboru: hlavička session, sloupce TSV a všechny klíče payloadu, které jednotlivé zdroje zapisují. Odpovídá implementaci verze 0.10.0.
Stránka je psaná podle kódu, ne podle záměru. Kde se popis a chování aplikace rozejdou, platí kód — app/src/main/java/app/signalcollector/.
Struktura souboru
Export je textový soubor v UTF‑8. Podle odhadované velikosti se ukládá jako .txt, nebo zabalený do GZIPu. Má tři části: první řádek s označením formátu, blok hlavičky klíč=hodnota, prázdný řádek a pak tabulku vzorků oddělenou tabulátory.
SIGNAL_COLLECTOR_TXT_V4
session_id=42
session_status=COMPLETED
…
sources=accelerometer,collector_heartbeat,gnss_raw,location,wifi
timestamp_iso_utc epoch_ms elapsed_realtime_ns session_id sequence_number source payload
2026-08-10T09:14:02.118Z 1786439642118 918273645000 42 1 location record_type=fix;provider=gps;latitude=50.087;…
Vzorky jsou seřazené podle timestampEpochMs a při shodě podle pořadí vložení. Řádek nikdy neobsahuje syrový tabulátor ani konec řádku — viz escapování.
Hlavička session
Popisuje celý běh měření: kdy začal, jak skončil a kolik vzorků prošlo kterou fází. Hlavičku píše MeasurementRepository.exportLatest z uzavřené session.
| Klíč | Typ | Popis |
|---|---|---|
SIGNAL_COLLECTOR_TXT_V4 | text | První řádek souboru, ne dvojice klíč=hodnota. Verze formátu; při změně struktury se zvýší. |
session_id | long | ID session v lokální databázi. Stejná hodnota je i ve sloupci session_id každého řádku. |
session_status | enum | COMPLETED běžný Stop · FAILED selhal zápis nebo start · INTERRUPTED proces zanikl a session dopsal až další start aplikace. |
end_reason | enum | USER_STOP · WRITER_ERROR · START_ERROR · PROCESS_RECOVERY. Prázdné jen u záznamů z verzí, které pole ještě neměly. |
started_at | ISO‑8601 | Vznik session v UTC, tedy okamžik prvního stisku Start. Navázání ho nepřepisuje. |
ended_at | ISO‑8601 | Konec session, tedy poslední Stop. Nikdy není dřív než poslední potvrzený zápis, i když callback dorazil až během vypínání kolektorů. |
running_ms | long | Čistý čas sběru: součet běžících úseků bez pauz mezi Stopem a dalším Startem. U session s pauzou je menší než ended_at − started_at; délky jednotlivých pauz jdou dopočítat z událostí zdroje session. |
last_record_at | ISO‑8601 | Čas posledního vzorku v souboru (MAX(timestampEpochMs)). |
last_persisted_at | ISO‑8601 | Čas posledního vzorku, který writer opravdu potvrdil do databáze. |
tail_gap_ms | long | ended_at − last_persisted_at, minimálně 0. Kolik času na konci session zůstalo bez dat — u zdravého běhu jednotky až stovky ms. |
device | text | Vnořené manufacturer;model;device;android;sdk, escapované stejně jako payload. |
record_count | long | Počet řádků vzorků v tomto souboru. |
accepted_samples | long | Kolik vzorků přijala zápisová fronta. Kolektor vzorek předá a pokračuje dál, nikdy nečeká na disk. |
written_samples | long | Kolik vzorků writer potvrdil do databáze. Rozdíl proti accepted_samples je fronta, která nestihla dojet. |
dropped_samples | long | Kolik vzorků fronta odmítla, protože byla plná (kapacita 20 000). Vzorek se ztratí, ale je započítaný — ticho v datech nelze zaměnit za ztrátu. |
distance_m | double | Ušlá vzdálenost z GPS fixů, jedno desetinné místo. Neměří se součtem sousedních fixů, ale posuny kotvy — telefon ležící na stole tak neujde ani metr. |
distance_max_accuracy_m | float | Práh přesnosti fixu pro trasu (20.0 m). Horší fix se do vzdálenosti nezapočítá vůbec. |
writer_error | text | Typ a zpráva výjimky, která shodila zápis. Prázdné = bez chyby. |
sources | list | Abecední seznam zdrojů, které v této session opravdu něco zapsaly — ne seznam zaškrtnutých přepínačů. Obsahuje i collector_heartbeat, haptic a session. |
Sloupce TSV
Sedm sloupců oddělených tabulátorem. Prvních šest je pro všechny zdroje stejných, sedmý je payload konkrétního zdroje.
| Sloupec | Typ | Popis |
|---|---|---|
timestamp_iso_utc | ISO‑8601 | Čitelný přepis epoch_ms v UTC. Odvozený sloupec, žádná informace navíc. |
epoch_ms | long | Systémový čas při přijetí vzorku do fronty. Umožňuje srovnání s jinými zařízeními, ale může skočit, když se telefonu přenastaví hodiny. |
elapsed_realtime_ns | long | Monotónní čas od startu telefonu, běží i ve spánku. Tohle je časová osa pro měření odstupů. Většina zdrojů ho bere přímo z Android API (fix, sken, buňka, BLE, GNSS hodiny), takže odpovídá okamžiku měření, ne okamžiku doručení callbacku. |
sequence_number | long | Pořadí řádku v souboru od 1. Přiděluje se až při exportu, není to ID v databázi. |
source | enum | Zdroj vzorku — jedna z hodnot popsaných níže, nebo collector_heartbeat. |
payload | text | Dvojice klíč=hodnota oddělené středníkem. Klíč record_type říká, který tvar payloadu následuje. Chybějící hodnota se zapíše jako prázdná — klíč v řádku zůstane. |
Escapování
Payloady jako raw_scan_result, NMEA věty nebo text výjimky běžně obsahují znaky, které by strukturu souboru rozbily. Escapuje se proto vždy, i když v konkrétní hodnotě problémový znak není.
| Znak | Zápis | Kde |
|---|---|---|
\ | \\ | payload, hlavička i sloupce TSV |
; | \; | uvnitř payloadu a hlavičky — jinak by vypadal jako oddělovač dvojic |
= | \= | uvnitř payloadu a hlavičky — jinak by vypadal jako oddělovač klíče a hodnoty |
| tabulátor | \t | sloupce source a payload, hodnoty v hlavičce |
| CR / LF | \r / \n | všude |
Parser tedy nejdřív rozdělí řádek na tabulátory, pak payload na neescapované středníky, pak dvojici na první neescapované rovnítko — a nakonec zruší escapování hodnoty.
Společné přípony payloadu
Některé klíče nepocházejí od zdroje samotného, ale připojí se ke vzorku až cestou. Díky tomu má i vzorek z akcelerometru poslední známou polohu, aniž by o poloze cokoli věděl.
Poloha u každého vzorku
Přidá se ke každému vzorku, u kterého je známá poslední poloha. Pokud zdroj polohu už sám nese, nepřipojuje se znovu. U internet_quality se připojí vždy — i prázdná, aby v datech bylo poznat, že poloha nebyla k dispozici.
| Klíč | Typ | Popis |
|---|---|---|
last_location | bool | Byla poloha k dispozici. |
last_latitude | double | Zeměpisná šířka posledního fixu. |
last_longitude | double | Zeměpisná délka posledního fixu. |
last_altitude | double | Nadmořská výška, jen když ji fix měl. |
last_location_accuracy | float | Hlášená horizontální přesnost fixu v metrech. |
location_age_ms | long | Stáří fixu vůči tomuto vzorku. Bez něj by nešlo poznat, jestli je poloha sekundu, nebo pět minut stará. |
Síťový kontext u mapování internetu
Připojuje se jen ke vzorkům internet_quality a váže naměřený přenos ke konkrétní síti. Sada klíčů se liší podle transportu.
| Klíč | Transport | Popis |
|---|---|---|
ssid, bssid, rssi_dbm, rssi, frequency_mhz, frequency, channel, wifi_standard, rx_link_speed_mbps, tx_link_speed_mbps | WIFI | Snímek připojené Wi‑Fi v okamžiku vzorku. Neznámé údaje zůstávají prázdné; zástupné hodnoty Androidu (RSSI −127, frekvence −1) se do exportu nedostanou. |
operator, mcc, mnc, plmn, technology, cell_id, nci, pci, tac, bands, band, earfcn, nrarfcn, rsrp, rsrq, sinr, ss_rsrp, ss_rsrq, ss_sinr | CELLULAR | Snímek obsluhující buňky. U 5G se cell_id doplní z nci a rsrp/rsrq/sinr z ss_*, aby šly řady porovnávat napříč technologiemi. |
network_context_age_ms | oba | Stáří snímku sítě vůči vzorku. |
network_handle, network_request_transport, network_request_internet, network_has_internet, network_validated, interface_name, subscription_id | oba | Důkaz, přes kterou Android Network přenos opravdu šel. Bez toho by u souběžného Wi‑Fi a mobilního měření nešlo vzorky rozlišit. |
Senzory
source: accelerometer · gyroscope · magnetometer · barometer · light · proximity · rotation_vector
Všech sedm senzorů má stejný tvar payloadu. Hodnoty se přebírají tak, jak je vrátí SensorEvent, bez filtrování a bez převodů. elapsed_realtime_ns je čas události ze senzoru, ne čas doručení.
| Klíč | Typ | Popis |
|---|---|---|
v0, v1, v2, … | float | Osy podle typu senzoru: akcelerometr m/s² (x, y, z) · gyroskop rad/s · magnetometr µT · barometr hPa (jen v0) · světlo lx · přiblížení cm · rotation vector kvaternion (v0–v3, případně v4 jako přesnost v radiánech). |
accuracy | int | Hlášená přesnost senzoru 0–3 (0 = nespolehlivá, 3 = vysoká). |
sensor | text | Jméno konkrétního hardwarového senzoru, jak ho hlásí zařízení. |
noise
source: noise · record_type: bez něj, payload má vždy stejný tvar
Z mikrofonu se počítá jen hlasitost bloku vzorků. Zvuk se nikam neukládá ani neodesílá; z uložených hodnot nelze zvuk rekonstruovat.
| Klíč | Typ | Popis |
|---|---|---|
rms | double | Efektivní hodnota bloku v jednotkách 16bitového PCM. |
dbfs | double | Hlasitost v dBFS vůči plnému rozsahu, zdola omezená na −120. Je to relativní úroveň, ne kalibrované dB SPL. |
sample_rate_hz | int | Skutečná vzorkovací frekvence, se kterou se podařilo mikrofon otevřít. |
samples | int | Počet PCM vzorků v tomto bloku. |
location
source: location · record_type: fix · registration
record_type=fix
| Klíč | Typ | Popis |
|---|---|---|
provider | enum | gps nebo network. Oba providery běží současně, pokud jsou zapnuté. |
latitude / longitude | double | Poloha ve stupních (WGS‑84). |
altitude | double | Výška nad elipsoidem v metrech, jen když ji fix má. |
speed_mps | float | Rychlost v m/s. |
bearing_deg | float | Azimut pohybu ve stupních. |
horizontal_accuracy_m | float | Poloměr 68% jistoty v metrech. Nad 20 m se fix nezapočítá do distance_m. |
vertical_accuracy_m | float | Nejistota výšky. |
speed_accuracy_mps | float | Nejistota rychlosti. |
bearing_accuracy_deg | float | Nejistota azimutu. |
location_time_epoch_ms | long | Čas fixu podle poskytovatele polohy — nemusí souhlasit s epoch_ms řádku. |
location_elapsed_realtime_ns | long | Monotónní čas fixu; z něj vychází i elapsed_realtime_ns řádku. |
is_mock | bool | Podvržená poloha. Do trasy se nezapočítá. |
raw_location | raw | toString() objektu Location pro případ, že by v budoucnu chyběl nějaký nový atribut. |
record_type=registration
| Klíč | Typ | Popis |
|---|---|---|
callback | text | Vždy LOCATION_UPDATES. |
provider | enum | Kterého providera se registrace týká. |
provider_enabled | bool | Byl provider v systému zapnutý. |
status | enum | SUCCESS · PROVIDER_DISABLED · FAILED. Rozlišuje vypnutou GPS od odmítnuté registrace. |
registered | bool | Zda odběr fixů opravdu vznikl. |
error / message | text | Třída a zpráva výjimky, pokud registrace selhala. |
gnss_satellite
source: gnss_satellite · record_type: satellite · summary · event · registration · callback_error
Při každé změně stavu družic se zapíše jeden řádek na družici a k tomu jeden souhrn. Souhrn je předpočítaný schválně — jinak by ho musel počítat každý, kdo data zpracovává.
record_type=satellite
| Klíč | Typ | Popis |
|---|---|---|
constellation | enum | GPS · GALILEO · GLONASS · BEIDOU · QZSS · NAVIC · SBAS · UNKNOWN. |
svid | int | Identifikátor družice v rámci konstelace. |
cn0_db_hz | float | Poměr nosné k šumu v dB‑Hz. Hlavní ukazatel síly signálu družice. |
baseband_cn0_db_hz | float | C/N0 měřené v basebandu, pokud ho čip hlásí. |
elevation_deg / azimuth_deg | float | Poloha družice na obloze. |
carrier_frequency_hz | float | Nosná frekvence signálu — odliší L1 od L5. |
used_in_fix | bool | Byla družice použita ve výpočtu polohy. |
has_ephemeris / has_almanac | bool | Má přijímač k družici efemeridy / almanach. |
record_type=summary
| Klíč | Typ | Popis |
|---|---|---|
satellites_visible / satellites_used | int | Kolik družic přijímač vidí a kolik jich použil pro fix. |
fix_use_ratio | double | Podíl použitých k viditelným. |
cn0_avg_db_hz / cn0_max_db_hz | double | Průměrné a nejlepší C/N0 přes všechny viditelné družice. |
used_cn0_avg_db_hz | double | Průměrné C/N0 jen z družic použitých ve fixu. |
ephemeris_count / almanac_count | int | Kolik družic má efemeridy / almanach. |
gps_count, galileo_count, glonass_count, beidou_count, qzss_count, navic_count, sbas_count, unknown_count | int | Počty viditelných družic po konstelacích. |
record_type=event / registration / callback_error
| Klíč | Typ | Popis |
|---|---|---|
event | enum | GNSS_STARTED · GNSS_STOPPED · GNSS_FIRST_FIX. |
ttff_ms | int | Time to first fix — jen u GNSS_FIRST_FIX. |
callback | text | GNSS_STATUS u registrace. |
status, registered, error, message | mix | Výsledek registrace, stejný tvar jako u location. |
gnss_raw
source: gnss_raw · record_type: clock · measurement · agc · capabilities · registration · status · callback_error
Surová GNSS měření pro post‑processing. Jeden clock záznam a k němu tolik measurement řádků, kolik družic čip v dané epoše sledoval.
record_type=clock
| Klíč | Typ | Popis |
|---|---|---|
measurement_count | int | Kolik measurement řádků k této epoše patří. |
full_tracking | bool | Zda čip běží v režimu plného sledování (Android 14+). |
time_nanos | long | Hardwarový čas přijímače v nanosekundách. |
time_uncertainty_nanos | double | Nejistota hardwarového času. |
full_bias_nanos / bias_nanos | long / double | Hrubý a jemný posun hodin přijímače vůči GPS času. |
bias_uncertainty_nanos | double | Nejistota posunu hodin. |
drift_nanos_per_second | double | Drift hodin přijímače. |
drift_uncertainty_nanos_per_second | double | Nejistota driftu. |
leap_second | int | Aktuální počet přestupných sekund. |
hardware_clock_discontinuity_count | int | Počet skoků hodin. Změna hodnoty znamená, že se fáze nesmí spojitě navazovat. |
clock_elapsed_realtime_ns | long | Navázání hodin přijímače na systémový monotónní čas. |
clock_elapsed_realtime_uncertainty_ns | double | Nejistota tohoto navázání. |
reference_constellation, reference_carrier_frequency_hz, reference_code_type | mix | Referenční signál pro mezisystémové biasy. |
raw_clock | raw | toString() objektu GnssClock. |
record_type=measurement
| Klíč | Typ | Popis |
|---|---|---|
constellation / svid | enum / int | Konstelace a číslo družice. |
code_type | text | Typ kódu signálu, například C, L, Q. |
state | int | Bitová maska stavu sledování. Určuje, jestli je received_sv_time_ns jednoznačné. |
received_sv_time_ns | long | Přijatý čas družice — základ pro pseudovzdálenost. |
received_sv_time_uncertainty_ns | long | Nejistota přijatého času. |
time_offset_ns | double | Posun měření vůči času v clock. |
cn0_db_hz / baseband_cn0_db_hz / snr_db | double | Síla a poměr signálu k šumu. |
carrier_frequency_hz | float | Nosná frekvence, odliší L1/L5. |
carrier_cycles, carrier_phase, carrier_phase_uncertainty | long / double | Fázová měření nosné. |
pseudorange_rate_mps | double | Změna pseudovzdálenosti v m/s (dopplerovské měření). |
pseudorange_rate_uncertainty_mps | double | Nejistota téhož. |
accumulated_delta_range_m | double | Akumulovaná změna vzdálenosti z fáze nosné. |
accumulated_delta_range_uncertainty_m | double | Nejistota akumulované změny. |
accumulated_delta_range_state | int | Stav akumulace; hlásí ztrátu fáze (cycle slip). |
multipath_indicator | int | Indikátor odrazu signálu, pokud ho čip poskytuje. |
agc_level_db | double | Úroveň automatického řízení zisku — citlivá na rušení v pásmu. |
full_inter_signal_bias_ns, full_inter_signal_bias_uncertainty_ns, satellite_inter_signal_bias_ns, satellite_inter_signal_bias_uncertainty_ns | double | Biasy mezi signály a mezi družicemi. |
raw_measurement | raw | toString() objektu GnssMeasurement. |
record_type=agc / capabilities / status
| Klíč | Typ | Popis |
|---|---|---|
constellation, carrier_frequency_hz, level_db, raw_agc | mix | AGC po jednotlivých pásmech (Android 13+). |
hardware_model, hardware_year, capabilities | text / int | Model a rok GNSS čipu a jeho hlášené schopnosti. Vysvětlí, proč některá pole na daném telefonu vždy chybí. |
status / status_name | int / enum | READY · LOCATION_DISABLED · NOT_SUPPORTED · UNKNOWN. |
gnss_nmea
source: gnss_nmea · record_type: nmea · registration
| Klíč | Typ | Popis |
|---|---|---|
nmea_timestamp_epoch_ms | long | Čas věty podle systému. |
sentence | text | Celá NMEA věta bez koncových bílých znaků. Hvězdička a kontrolní součet zůstávají; případné oddělovače jsou escapované. |
gnss_antenna
source: gnss_antenna · record_type: antenna_info · registration
| Klíč | Typ | Popis |
|---|---|---|
index | int | Pořadí antény v seznamu, který telefon hlásí. |
carrier_frequency_mhz | double | Pásmo, ke kterému se údaje vztahují. |
phase_center_offset | raw | Posun fázového středu antény včetně nejistot. |
phase_center_variation_corrections | raw | Mapa korekcí fázového středu podle směru. |
signal_gain_corrections | raw | Mapa korekcí zisku podle směru. |
raw_antenna_info | raw | toString() objektu GnssAntennaInfo. |
wifi
source: wifi · record_type: scan · access_point · connection · mlo_link · status
Každý čerstvý sken zapíše jeden řádek na viditelný přístupový bod a k tomu jeden řádek o vlastním připojení. Android skeny škrtí a scanResults pak vrací pořád tentýž poslední výsledek, proto má každý pokus o sken vlastní řádek record_type=scan a každý AP navíc svůj scan_timestamp_us.
record_type=scan
Vzniká při každém pokusu o sken, i když z něj žádná nová data nejsou. Bez toho by opakovaně vrácený starý sken vypadal jako pravidelné vzorkování po nastaveném intervalu a z mapy pokrytí by nešlo poznat, kde se doopravdy měřilo. Řádky access_point se zapisují jen u stavu FRESH.
| Klíč | Typ | Popis |
|---|---|---|
status | enum | FRESH nový sken · THROTTLED systém startScan() odmítl · UNCHANGED tentýž sken už zpracoval systémový callback. Rozlišení je podstatné: UNCHANGED roste i na telefonu, kde se vůbec neškrtí, a jako škrcení by vypadalo mylně. |
trigger | enum | PERIODIC_POLL vlastní tik sběru · SCAN_RESULTS_CALLBACK sken vyvolaný systémem nebo jinou aplikací, který sběr převzal, místo aby čekal na svůj další tik. |
start_scan_requested | bool | Návratová hodnota startScan(). Prázdné u trigger=SCAN_RESULTS_CALLBACK, kde sběr o sken nežádal. |
scan_timestamp_us | long | Čas nejnovějšího výsledku ve skenu, v mikrosekundách od bootu. Právě podle něj se pozná, že jde o tentýž sken jako minule. |
scan_age_ms | long | Stáří výsledku vůči tomuto řádku. U FRESH jednotky až stovky ms, u opakovaného skenu roste. |
ap_count | int | Kolik přístupových bodů sken vrátil. |
fresh_scans / throttled_scans / unchanged_scans | long | Kumulativní čítače za běžící úsek. Po navázání do session začínají znovu od nuly, takže se poměr počítá vždy v rámci jednoho úseku. |
record_type=access_point
| Klíč | Typ | Popis |
|---|---|---|
ssid / bssid | text | Jméno sítě a MAC adresa přístupového bodu. |
rssi_dbm | int | Síla signálu v dBm. |
frequency_mhz / channel | int | Frekvence a z ní odvozený kanál. |
channel_width | int | Šířka kanálu jako konstanta ScanResult (0 = 20 MHz, 1 = 40, 2 = 80, …). |
center_freq_0_mhz / center_freq_1_mhz | int | Střední frekvence segmentů u širokých kanálů. |
capabilities | text | Řetězec schopností a zabezpečení, jak ho hlásí sken. |
security_types | list | Číselné typy zabezpečení (Android 13+). |
wifi_standard | enum | LEGACY · 802.11n · 802.11ac · 802.11ax · 802.11ad · 802.11be. Neznámý standard zůstává prázdný, ne UNKNOWN. |
scan_timestamp_us | long | Kdy byl AP naposledy viděn, v mikrosekundách od bootu. Odhalí opakovaně vrácený starý sken. |
passpoint, operator_friendly_name, venue_name | bool / text | Passpoint metadata, pokud je síť hlásí. |
raw_scan_result | raw | toString() objektu ScanResult. |
record_type=connection
| Klíč | Typ | Popis |
|---|---|---|
ssid / bssid | text | Identifikace připojené sítě. Prázdné, když je systém kvůli oprávněním skryje. |
ssid_available / bssid_available | bool | Rozlišuje „síť je bez jména“ od „jméno nám systém nedal“. |
rssi_dbm, frequency_mhz, channel | int | Signál a kanál aktuálního spojení. |
link_speed_mbps, rx_link_speed_mbps, tx_link_speed_mbps | int | Vyjednaná rychlost linky. Není to naměřená propustnost — tu měří internet_quality. |
max_rx_link_speed_mbps / max_tx_link_speed_mbps | int | Maximum, které spojení podporuje. |
wifi_standard | enum | Standard aktuálního spojení. |
security_type | int | Typ zabezpečení připojené sítě. |
passpoint_fqdn / passpoint_provider | text | Passpoint poskytovatel, pokud se přes něj telefon připojil. |
ap_mld_mac / ap_mlo_link_id | text / int | Wi‑Fi 7 multi‑link: adresa MLD a ID aktivního linku. |
raw_wifi_info | raw | toString() objektu WifiInfo. |
record_type=mlo_link
| Klíč | Typ | Popis |
|---|---|---|
mlo_kind | enum | scan_affiliated · connection_affiliated · connection_associated — odkud link pochází. |
link_id | int | ID linku v rámci MLD. |
ap_mac / sta_mac | text | Adresy obou konců linku. |
band, channel, frequency_mhz | int | Pásmo a kanál linku. |
rssi_dbm, rx_link_speed_mbps, tx_link_speed_mbps | int | Signál a rychlost linku (Android 14+). |
state | enum | ACTIVE · IDLE · UNASSOCIATED · INVALID. |
raw_mlo_link | raw | toString() objektu MloLink. |
record_type=status
Jediný stav, status=SCAN_CALLBACK_REGISTRATION_FAILED s klíči error a message. Znamená, že se nepodařilo zaregistrovat odběr systémových skenů — v datech pak budou jen skeny vyžádané sběrem, tedy trigger=PERIODIC_POLL.
wifi_rtt
source: wifi_rtt · record_type: capabilities · ranging_result · status
Měření vzdálenosti k přístupovým bodům, které podporují FTM (802.11mc / 802.11az). Takových AP je málo; když žádný není v dosahu, zapíše se status=NO_RESPONDERS, aby bylo poznat, že měření proběhlo a jen nemělo co měřit.
| Klíč | Typ | Popis |
|---|---|---|
available / characteristics | bool / text | Dostupnost RTT a hlášené vlastnosti čipu (record_type=capabilities). |
status | int / enum | U výsledku číselný kód (0 = úspěch), u stavu UNAVAILABLE · NO_RESPONDERS · FAILURE · ERROR. |
mac_address | text | Adresa měřeného přístupového bodu. |
distance_mm / distance_std_dev_mm | int | Vzdálenost a její rozptyl v milimetrech. Vyplněné jen u úspěšného měření. |
rssi_dbm | int | Signál v okamžiku měření. |
attempted_measurements / successful_measurements | int | Kolik dílčích měření se zkusilo a kolik vyšlo. |
ranging_timestamp_ms | long | Čas měření podle čipu; z něj vychází elapsed_realtime_ns řádku. |
measurement_frequency_mhz / measurement_bandwidth | int | Kanál a šířka pásma měření (Android 14+). |
is_80211mc / is_80211az_ntb | bool | Kterou variantou FTM měření proběhlo. |
lci_hex / lcr_hex | hex | Hlášená poloha a civilní adresa přístupového bodu (Android 15+). |
min_ntb_interval_us / max_ntb_interval_us | long | Rozsah intervalů u 802.11az non‑trigger‑based měření. |
ranging_authenticated / ranging_frame_protected | bool | Zabezpečení měření (Android 16+). |
code, error, message | int / text | Důvod neúspěchu u status záznamů. |
raw_ranging_result | raw | toString() objektu RangingResult. |
wifi_throughput
source: wifi_throughput · record_type: wifi_throughput · status
Signál všech okolních sítí dá jeden sken naráz, propustnost ne — telefon je asociovaný vždy jen k jedné AP. Zdroj proto obchází předem zadané sítě jednu po druhé přes WifiNetworkSpecifier a u každé změří download, upload i HTTPS RTT. Přepnutí se týká jen této aplikace, ostatní provoz telefonu zůstává na původní síti.
Měřit se má vestoje: za chůze by každá síť v cyklu vyšla z jiného místa a čísla by se nedala srovnat. Při prvním připojení ke každé síti si Android vyžádá souhlas modálním systémovým dialogem, který nejde potlačit — obchůzka proto začíná odklikáním dialogů na prvním bodě.
record_type=wifi_throughput
Jeden řádek na jednu síť v jednom cyklu, a to i tehdy, když se k síti vůbec nedošlo — jinak by z dat nešlo poznat rozdíl mezi sítí, která tu nebyla, a sítí, na kterou se zapomnělo.
| Klíč | Typ | Popis |
|---|---|---|
status | enum | SUCCESS oba přenosy prošly · PARTIAL aspoň jeden skončil chybou · NOT_VISIBLE síť nebyla v posledním skenu, pokus se vůbec nezkusil · CONNECT_FAILED připojení se nepovedlo do connect_timeout_s. |
cycle / target_index | int | Kolikátá obchůzka a pořadí sítě v zadaném seznamu. Dvojice určuje řádek jednoznačně. |
requested_ssid / secured | text / bool | Zadaná síť tak, jak stojí v nastavení, a jestli má heslo. Heslo samotné se do dat nikdy nezapisuje. |
connect_ms | double | Doba od zahájení pokusu po dostupnou síť, tedy asociace a DHCP. Bez ní by nešlo odlišit pomalou síť od pomalého přepínání. U NOT_VISIBLE nula. |
total_ms | double | Celá obsluha sítě včetně obou přenosů a RTT sond. |
has_internet | bool | Hlásí síť schopnost NET_CAPABILITY_INTERNET. Síť bez internetu se měří dál a skončí s chybou přenosu — jako výsledek, ne jako nedostupnost. |
ssid, bssid, rssi_dbm, frequency_mhz, channel, wifi_standard, rx_link_speed_mbps, tx_link_speed_mbps | text / int | Snímek spojení v okamžiku měření: ke které AP se telefon opravdu připojil a s jakou vyjednanou rychlostí. Vyplněné jen u úspěšného připojení. |
latency_ms_median / latency_ok / latency_errors | double / int / list | Medián HTTPS RTT, počet vrácených sond a typy výjimek u těch neúspěšných. Není to ICMP ping. |
download_mbps / upload_mbps | double | Propustnost přenosu. U chyby zůstává prázdná, i když se část bajtů přenesla — poloviční přenos není naměřená rychlost. |
download_bytes / upload_bytes | long | Kolik bajtů se opravdu přeneslo; u chyby do okamžiku selhání. |
download_ms / upload_ms | double | Doba přenosu včetně navázání spojení. |
download_error / upload_error | text | Název třídy výjimky, například SocketTimeoutException. Odmítnutý stavový kód HTTP se sem dostane jako IllegalStateException. Prázdné u úspěchu. |
server_mode / server | text | Režim a host testovacího endpointu, stejné jako u internet_quality. |
record_type=status
Jediný stav, status=NO_TARGETS s vysvětlující message. Zdroj je zapnutý, ale seznam sítí je prázdný, takže se nespustí — v exportu je to vidět místo mlčení.
mobile_network
source: mobile_network · record_type: cell · signal_strength · event
U record_type=cell je sada klíčů vždy stejná a úplná — pole, která daná technologie nemá, zůstanou prázdná. Sloupce v tabulce tedy nikdy neposkakují podle toho, jestli telefon zrovna visí na LTE nebo na 5G.
Společné klíče záznamu cell
| Klíč | Typ | Popis |
|---|---|---|
scan_mode | enum | PASSIVE_CELL_SCAN běžný odběr · ACTIVE_NETWORK_SCAN experimentální aktivní sken. |
trigger | enum | TELEPHONY_CALLBACK · GET_ALL_CELL_INFO · REQUEST_CELL_INFO_UPDATE · ACTIVE_NETWORK_SCAN. Odliší vyžádaný snímek od spontánní změny. |
technology | enum | NR · LTE · WCDMA · TDSCDMA · GSM · CDMA. |
registered | bool | Je telefon k této buňce registrovaný. |
connection_status | enum | PRIMARY_SERVING · SECONDARY_SERVING · NONE · UNKNOWN. |
subscription_id / sim_slot | int | Ke které SIM buňka patří. U dvou SIM běží dvě nezávislé sady záznamů. |
cell_timestamp_ms | long | Čas snímku podle modemu; z něj vychází elapsed_realtime_ns řádku. |
dbm, asu, level | int | Síla signálu v dBm, v ASU a jako úroveň 0–4 pro UI. |
mcc, mnc, plmn | text | Kód země, kód sítě a jejich spojení. |
operator | text | Jméno operátora, nebo PLMN, když jméno není. UNKNOWN u buňky bez identity. |
operator_alpha_long / operator_alpha_short | text | Dlouhé a krátké jméno sítě podle modemu. |
additional_plmns | list | Další PLMN, které buňka vysílá (network sharing). |
raw_cell_info, raw_cell_identity, raw_signal_strength | raw | toString() tří objektů modemu, jako záloha pro pole, která zde ještě nemají vlastní klíč. |
Klíče podle technologie
| Klíč | Technologie | Popis |
|---|---|---|
cell_id | LTE, WCDMA, GSM, TDSCDMA, CDMA | Identifikátor buňky (u LTE ci, u ostatních cid, u CDMA base station ID). |
nci | NR | 48bitové 5G NR Cell Identity. |
pci | LTE, NR | Physical Cell ID. |
tac | LTE, NR | Tracking Area Code. |
lac | WCDMA, GSM, TDSCDMA | Location Area Code. |
psc | WCDMA, GSM, TDSCDMA | Primary Scrambling Code, u TDSCDMA se plní z cpid. |
bsic | GSM | Base Station Identity Code. |
earfcn / nrarfcn / uarfcn / arfcn | LTE / NR / WCDMA, TDSCDMA / GSM | Číslo kanálu podle technologie. |
bands | LTE, NR | Pásma, ve kterých buňka pracuje. |
bandwidth | LTE | Šířka pásma v kHz. |
rssi | LTE, GSM | Celková přijímaná síla. |
rsrp / rsrq | LTE | Referenční výkon a kvalita. |
rssnr | LTE | Poměr signálu k šumu. |
sinr | LTE, NR | Sjednocený klíč pro porovnání napříč technologiemi: u LTE kopíruje rssnr, u NR ss_sinr. |
ss_rsrp, ss_rsrq, ss_sinr | NR | Měření na synchronizačním signálu. |
csi_rsrp, csi_rsrq, csi_sinr | NR | Měření na CSI‑RS. |
cqi / cqi_table_index | LTE, NR | Indikátor kvality kanálu; u NR jde o seznam hodnot. |
timing_advance / timing_advance_us | LTE, GSM / NR | Časový předstih — hrubá informace o vzdálenosti od vysílače. |
ec_no | WCDMA | Poměr energie čipu k šumu. |
rscp | TDSCDMA | Received Signal Code Power. |
bit_error_rate | GSM | Chybovost. |
network_id, system_id, basestation_latitude, basestation_longitude, cdma_dbm, cdma_ecio, evdo_dbm, evdo_ecio, evdo_snr | CDMA | Pole starých CDMA sítí; v Evropě se nevyplní. |
record_type=signal_strength
| Klíč | Typ | Popis |
|---|---|---|
technology | text | Třída měření podle Androidu, například CellSignalStrengthLte. |
dbm, asu, level | int | Síla signálu ve třech obvyklých jednotkách. |
subscription_id / sim_slot | int | Které SIM se měření týká. |
raw_signal_strength | raw | toString() měření. |
record_type=event
| Klíč | Typ | Popis |
|---|---|---|
event | enum | CELL_LIST_CHANGED · SIGNAL_STRENGTH_CHANGED · SERVICE_STATE_CHANGED · DISPLAY_INFO_CHANGED · DATA_CONNECTION_CHANGED · SERVING_CELL_CHANGED · CELL_INFO_UPDATE_ERROR · RADIO_API_ERROR · ACTIVE_NETWORK_SCAN_*. |
before / after | raw | Stav před změnou a po ní, aby šlo přechod zrekonstruovat. |
before_technology, before_cell_id, before_pci, after_technology, after_cell_id, after_pci | mix | Rozpad přechodu obsluhující buňky — tohle je handover. |
operation | text | Které volání modemu selhalo u RADIO_API_ERROR. |
has_carrier_privileges / modify_phone_state_granted | bool | Proč aktivní sken systém povolil nebo odmítl. |
result_count | int | Počet buněk vrácených aktivním skenem. |
error_code, error, exception, message | int / text | Přesný důvod odmítnutí nebo chyby. |
manufacturer, model, android, sdk | text / int | Zařízení a systém u záznamů aktivního skenu — jeho dostupnost je silně závislá na telefonu. |
sim_info
source: sim_info · record_type: summary · subscription
Které karty byly v telefonu, když se měřilo. mobile_network nese identitu vysílače, ale ne toho, kdo se na něj díval — a při dvou kartách nebo v roamingu je to zásadní rozdíl. Zapisuje se jednou při startu měření a pak už jen tehdy, když systém ohlásí změnu předplatných; karty se za chůze nemění.
ICCID ani EID se nezapisují. Jsou to trvalé identifikátory předplatného, které přežijí i výměnu telefonu, kdežto zbytek téhle sekce popisuje síť, ve které se měřilo. Aplikaci je systém od Androidu 10 stejně nevydá.
record_type=summary
| Klíč | Typ | Popis |
|---|---|---|
slot_count | int | Kolik předplatných umí telefon držet naráz. |
active_count | int | Kolik jich je aktivních. Nula znamená telefon bez karty, ne chybu čtení. |
esim_count | int | Kolik z aktivních je profil eSIM. |
euicc_supported | bool | Má telefon eSIM čip, bez ohledu na to, jestli je na něm profil. |
record_type=subscription
| Klíč | Typ | Popis |
|---|---|---|
subscription_id | int | Lokální číslo předplatného. Po přeregistrování karty se změní, takže telefon neidentifikuje; slouží ke spojení řádků v rámci jednoho měření. |
slot_index | int | Slot, ve kterém karta sedí. Číslováno od nuly. |
carrier_name / display_name | text | Operátor podle karty a jméno, které si předplatnému nastavil uživatel. |
mcc / mnc | text | Kód země a sítě. Spojuje kartu se záznamy buněk v mobile_network. |
country_iso | text | Země předplatného podle ISO. |
embedded | bool | true u profilu eSIM, false u fyzické karty. |
roaming | bool | Jestli předplatné právě jede v roamingu. |
default_data, default_voice, default_sms | bool | Která karta veze data, hovory a zprávy. Pro rozbor měření je podstatné hlavně default_data — jeho síť se objeví v internet_quality. |
network_context
source: network_context · record_type: capabilities · link_properties · event
Pohled operačního systému na sítě: co telefon o síti tvrdí, ještě než se přes ni něco přenese. Zapisuje se na startu, periodicky a při každé změně.
record_type=capabilities
| Klíč | Typ | Popis |
|---|---|---|
trigger | enum | INITIAL · PERIODIC · CALLBACK. |
network_handle | long | Identifikátor sítě. Spojuje záznam s konkrétním vzorkem internet_quality. |
transports | list | CELLULAR, WIFI, VPN, ETHERNET, BLUETOOTH, THREAD, SATELLITE… |
capabilities | list | Číselné konstanty schopností sítě. |
internet / validated | bool | Slibuje síť internet a ověřil si systém, že opravdu funguje. |
captive_portal | bool | Síť vyžaduje přihlášení přes portál. |
metered, roaming, congested, suspended | bool | Stav sítě. Uloženo v kladném významu, tedy metered=true znamená měřená síť. |
downstream_kbps / upstream_kbps | int | Odhad linkové kapacity od systému — odhad, ne měření. |
signal_strength | int | Síla signálu sítě, když ji systém uvádí. |
owner_uid, network_specifier, transport_info | mix | Doplňující identifikace sítě, u Wi‑Fi obsahuje WifiInfo. |
raw_capabilities | raw | toString() objektu NetworkCapabilities. |
record_type=link_properties
| Klíč | Typ | Popis |
|---|---|---|
interface_name | text | Jméno rozhraní, například wlan0 nebo rmnet_data0. |
link_addresses | list | IP adresy rozhraní. |
dns_servers / domains | list / text | DNS servery a vyhledávací domény. |
routes | list | Směrovací záznamy, oddělené svislítkem. |
mtu | int | Maximální velikost rámce. |
private_dns_active / private_dns_server | bool / text | Stav privátního DNS. |
dhcp_server, nat64_prefix, http_proxy, wake_on_lan | mix | Ostatní vlastnosti linky. |
raw_link_properties | raw | toString() objektu LinkProperties. |
record_type=event
| Klíč | Typ | Popis |
|---|---|---|
event | enum | AVAILABLE · LOSING · LOST · BLOCKED_CHANGED. |
max_ms_to_live | int | Kolik času systém síti dává u LOSING. |
blocked | bool | Je provoz aplikace na této síti blokovaný. |
internet_quality
source: internet_quality · record_type: network_quality_sample · network_capacity_probe · network_capacity_probe_started · speed_test_result · speed_test_event
Skutečné HTTPS přenosy navázané na konkrétní Android Network, ne odhad kapacity linky. Sekundový vzorek je malý schválně: cílem je souvislá mapa kvality při chůzi, ne špička rychlosti. Proto každý záznam nese i measurement_semantics=SMALL_TRANSFER_QUALITY_NOT_MAX_SPEED.
Ke každému vzorku se navíc připojují společné přípony — poloha i snímek sítě.
record_type=network_quality_sample / network_capacity_probe
| Klíč | Typ | Popis |
|---|---|---|
timestamp / timestamp_epoch_ms | long | Začátek vzorku. Dva klíče se stejnou hodnotou kvůli zpětné kompatibilitě starších skriptů. |
scheduled_at_epoch_ms / started_at_epoch_ms | long | Kdy měl vzorek začít a kdy začal. |
schedule_delay_ms | long | Zpoždění proti plánu. Roste, když je linka pomalá nebo systém aplikaci přidusí. |
missed_intervals | long | Kolik celých intervalů se přeskočilo. Vteřinová osa vzorků řádek zapíše i tehdy, když se měřit nedalo, takže tohle roste jen po skutečném uspání procesu. |
status | enum | Změřeno: SUCCESS · PARTIAL · TIMEOUT (selhalo vše a jen vypršením lhůty) · ERROR. Neměřeno: BUSY (transport držel burst nebo ruční test) · NETWORK_LOST (nebylo na čem měřit). Poslední dva nesou prázdné naměřené sloupce a nepočítají se do chybovosti. |
busy_reason | enum | Kdo transport držel: QUALITY_SAMPLE · CAPACITY_PROBE · SPEED_TEST. Jen u status=BUSY. |
measurement_semantics | enum | Vždy SMALL_TRANSFER_QUALITY_NOT_MAX_SPEED. Pojistka proti čtení hodnot jako speedtestu. |
server_mode / server | text | Režim a host testovacího endpointu. |
network_binding | enum | Vždy ANDROID_NETWORK — přenos šel prokazatelně přes vybranou síť, ne přes výchozí. |
transport_target | enum | Co uživatel zvolil: AUTO · WIFI · CELLULAR · BOTH. |
transport | enum | Přes co vzorek opravdu šel: WIFI · CELLULAR · ETHERNET · BLUETOOTH · VPN · OTHER · NONE. |
download_requested_bytes / upload_requested_bytes | long | Kolik bajtů se mělo přenést. |
download_bytes / upload_bytes | long | Kolik se jich opravdu přeneslo. U chyby jsou to bajty stažené do okamžiku selhání. |
download_duration_ms / upload_duration_ms | double | Doba přenosu včetně navázání spojení. |
short_download_mbps / short_upload_mbps | double | Propustnost sekundového vzorku. Malý přenos, takže je to spodní odhad — ne maximum linky. |
burst_download_mbps / burst_upload_mbps | double | Totéž pro kapacitní burst, který běží jednou za nastavený interval a je výrazně větší. |
latency_probe_count | int | Kolik RTT sond se mělo poslat. |
successful_probes / failed_probes | int | Kolik jich prošlo a kolik selhalo. |
rtt_min_ms, rtt_avg_ms, rtt_max_ms | double | Odezva HTTPS sond. |
jitter_ms | double | Průměrná absolutní změna RTT mezi sousedními sondami. |
failed_requests / timeout_count | int | Kolik požadavků selhalo celkem a kolik z toho vypršelo. |
probe_duration_ms | double | Jak dlouho trval celý vzorek. Na pomalé lince je delší než interval — další vteřiny pak nesou status=BUSY. |
errors / error | text | Seznam chyb ve tvaru fáze:typ, případně jednoslovný důvod (NO_ACTIVE_NETWORK, TARGET_NETWORK_UNAVAILABLE). |
record_type=network_capacity_probe_started
Zapíše se v okamžiku, kdy burst začne. Burst drží zámek transportu po celou dobu přenosu, takže po tu dobu chodí místo naměřených vzorků řádky se status=BUSY — tahle značka říká, od kdy a proč. Klíče jsou podmnožinou předchozí tabulky plus transfer_deadline_ms (nejzazší doba přenosu).
record_type=speed_test_result
Ruční test spuštěný tlačítkem, ne součást průběžného mapování. Přenáší se megabajty, ne kilobajty.
| Klíč | Typ | Popis |
|---|---|---|
trigger | text | MANUAL u testu z UI. |
status | enum | SUCCESS · PARTIAL · ERROR. |
transport | enum | WIFI · MOBILE. Volba BOTH zapíše dva samostatné výsledky. |
download_mbps / upload_mbps | double | Propustnost velkého přenosu. |
rtt_median_ms / rtt_p95_ms | double | Medián a 95. percentil odezvy — u ručního testu je sond víc než u vzorku. |
packet_loss_pct | double | Podíl sond, které se nevrátily. |
download_error, upload_error, latency_errors | text | Chyby jednotlivých fází testu. |
record_type=speed_test_event
| Klíč | Typ | Popis |
|---|---|---|
event | enum | INTERNET_SPEED_TEST_STARTED · _COMPLETE · _ERROR. |
target | enum | Zvolený cíl testu včetně BOTH. |
status, trigger, error, message | text | Stav a případná chyba běhu testu. |
bluetooth_classic
source: bluetooth_classic · record_type: discovery_result · paired_device · event · registration · status
| Klíč | Typ | Popis |
|---|---|---|
discovery_mode | enum | CLASSIC_DISCOVERY nalezeno skenem · BONDED_CACHE vypsáno ze spárovaných zařízení. |
scan_cycle_id | long | Pořadí skenovacího cyklu. Spojí nález s konkrétním oknem skenu. |
result_index | int | Kolikátý nález v tomto cyklu. |
name / alias | text | Jméno zařízení a uživatelský alias, pokud jsou dostupné. |
address | text | MAC adresa zařízení. |
bond_state | int | 10 nespárováno · 11 páruje se · 12 spárováno. |
device_type | int | 1 Classic · 2 LE · 3 Dual. |
bluetooth_class | text | Třída zařízení (typ a služby). |
uuids | list | Nabízené služby. |
rssi_dbm | int | Signál v okamžiku nálezu. |
paired | bool | Jen u paired_device, vždy true. |
event / status | enum | CLASSIC_DISCOVERY se stavem REQUESTED · STARTED · FINISHED · REJECTED · ERROR. |
found_devices | int | Kolik zařízení cyklus našel — v FINISHED je to jeho výsledek. |
receiver_flag | enum | RECEIVER_EXPORTED nebo IMPLICIT. Discovery broadcasty chodí ze systému, takže s neexportovaným receiverem sken v datech vypadá mrtvý — proto se použitý příznak zapisuje. |
callback, registered, error, message | mix | Výsledek registrace receiveru. |
status=ADAPTER_DISABLED znamená vypnutý Bluetooth. Bez tohoto hlášení by zdroj vypadal jako zapnutý, jen bez jediného nálezu.
bluetooth_ble
source: bluetooth_ble · record_type: advertisement · status
Kompletní advertising payload včetně syrových bajtů. Sken běží v režimu nízké latence a nefiltruje, takže v hustém prostředí je to nejvydatnější zdroj řádků.
| Klíč | Typ | Popis |
|---|---|---|
callback_type | int | Typ callbacku skeneru (všechny shody, první shoda, ztráta shody). |
name, alias, address | text | Identifikace zařízení. |
address_type | int | Veřejná nebo náhodná adresa (Android 15+). Vysvětlí, proč se adresa mění v čase. |
bond_state / device_type | int | Stejný význam jako u bluetooth_classic. |
rssi_dbm | int | Signál přijatého paketu. |
tx_power / record_tx_power | int | Vysílací výkon podle skeneru a podle obsahu advertisingu. S RSSI dává hrubý odhad vzdálenosti. |
connectable / legacy | bool | Lze se připojit; jde o starý formát advertisingu. |
data_status | int | Zda je payload úplný, nebo pokračuje dalším paketem. |
primary_phy / secondary_phy | int | Fyzická vrstva (1M, 2M, kódovaná). |
advertising_sid | int | ID advertising setu u rozšířeného advertisingu. |
periodic_advertising_interval | int | Interval periodického advertisingu, když ho zařízení používá. |
advertise_flags / advertised_name | int / text | Příznaky a jméno přímo z advertising paketu. |
service_uuids / service_solicitation_uuids | list | Nabízené a vyžadované služby. |
manufacturer_data | hex | Data výrobce jako 0xIDID:hex, oddělené čárkou. Podle ID výrobce jde zařízení typovat. |
service_data | hex | Data služeb jako uuid:hex. |
advertising_data | hex | Celá mapa AD typů jako 0xTT:hex (Android 13+). |
raw_bytes_hex | hex | Syrový advertising paket. Umožní dopočítat cokoli, co ostatní klíče nepokrývají. |
raw_scan_record / raw_scan_result | raw | toString() obou objektů. |
status / error_code | enum / int | SCAN_FAILED s kódem chyby, nebo ADAPTER_DISABLED. |
collector_heartbeat
source: collector_heartbeat · record_type: collector_heartbeat · každých 5 s
Heartbeat není zdroj dat o okolí, ale o měření samotném. Prochází stejnou frontou i stejným writerem jako ostatní vzorky, takže z hotového souboru jde zpětně určit, kdy který modul opravdu běžel a jestli se zápis nezadrhl. Ticho v datech tak nelze zaměnit za chybu.
| Klíč | Typ | Popis |
|---|---|---|
active_collectors | list | Třídy běžících kolektorů, abecedně. |
active_sources | list | Zdroje, které se při startu podařilo opravdu zaregistrovat — ne ty zaškrtnuté. |
writer_status | enum | OK · RETRYING · DRAINING · DRAINED · FAILED · CANCELLED · STOPPED. |
queue_size | long | Kolik vzorků právě čeká ve frontě. Trvale rostoucí hodnota znamená, že zápis nestíhá. |
accepted_samples, written_samples, dropped_samples | long | Průběžné čítače, stejný význam jako v hlavičce. |
writer_error | text | První chyba zápisu, pokud nějaká nastala. |
haptic
source: haptic · record_type: haptic
Vibrace je mechanický impulz a telefon zároveň nahrává akcelerometr i gyroskop, takže si každé zabzučení zapíše do vlastních dat jako otřes, který nepochází z chůze. Tenhle záznam říká, kdy k němu došlo, aby šlo okolo něj v senzorickém proudu vyříznout okno. Do dat se zapisuje ztráta a návrat výchozí sítě a značka místa; alarm selhaného zápisu záznam nemá, protože v tu chvíli už writer nežije — nese ho end_reason=WRITER_ERROR a za tím okamžikem žádná senzorická data nevznikají.
| Klíč | Typ | Popis |
|---|---|---|
signal | enum | TRANSPORT_LOST výchozí síť zmizela a do dvou sekund ji nic nenahradilo · TRANSPORT_RESTORED síť je zpátky · SELECT obsluha označila bod, ke stejnému času patří survey_point. |
pattern | text | Rytmus signálu: thud, tick-tick nebo tick. |
nominal_duration_ms | long | Jmenovitá délka obálky, ne změřená. U skládaného efektu určuje doznívání systém, takže okno na vyříznutí se má brát s rezervou. |
composed | bool | true = telefon umí primitiva VibrationEffect.Composition a šlo o ťuknutí; false = náhradní waveform se stejným rytmem. |
delivered | bool | false znamená, že systém vibraci odmítl — otřes tedy v datech není. |
session
source: session · record_type: session_started · session_paused · session_resumed · survey_point
Start pokračuje do posledního neresetovaného měření, takže jedna session může mít víc oddělených úseků. Tyhle záznamy říkají, kde úsek začal a kde skončil — bez nich by se pauza v datech nedala odlišit od díry v pokrytí nebo od zamrzlého sběru. Pauza je schválně dvě samostatné události, ne jeden záznam s délkou: záznam s délkou by musel počkat na konec pauzy, a kdyby aplikaci mezitím zabil systém, nevznikl by vůbec.
| Klíč | Typ | Popis |
|---|---|---|
session_id | long | Session, ke které úsek patří. U navázání se nemění — proto je z ní poznat, že jde o pokračování, ne o nové měření. |
segment_started_at_epoch_ms | long | Začátek úseku. U session_paused začátek toho právě ukončeného. |
session_started_at_epoch_ms | long | První Start celé session; u session_started a session_resumed. |
paused_at_epoch_ms | long | Okamžik Stopu; jen u session_paused. |
paused_since_epoch_ms | long | Kdy začala pauza, na kterou se navazuje; jen u session_resumed. Rozdíl proti segment_started_at_epoch_ms je délka pauzy. |
segment_running_ms / running_ms_total | long | Délka ukončeného úseku a součet všech dosavadních; jen u session_paused. Součet odpovídá running_ms v hlavičce. |
running_ms_before | long | Naběhaný čas před tímhle úsekem. U session_started nula. |
distance_m / distance_m_before | double | Trasa na konci úseku, respektive na začátku navázaného. Vzdálenost překonaná během pauzy se do trasy nezapočítá — kotva se navázáním zahazuje. |
accepted_samples_before | long | Kolik vzorků session měla, než se navázalo; jen u session_resumed. |
end_reason / status | enum | Proč a v jakém stavu úsek skončil; jen u session_paused. Stejné hodnoty jako end_reason a session_status v hlavičce. |
previous_status / previous_writer_error | text | Stav a chyba předchozího úseku; jen u session_resumed. Navázání vrací řádek session do běhu a přepisuje na něm stav i chybu, takže tohle je jediné místo, kde selhaný zápis zůstane dohledatelný i po úspěšném dokončení. |
record_type=survey_point
Značka místa, na kterém měření stojí. Uvnitř budovy GNSS polohu nedá, takže tohle je jediné, co v datech spojí naměřené hodnoty s bodem na půdorysu: obsluha se zastaví, klepne na Označit bod, chvíli počká a jde dál. Značka stojí samostatně na časové ose a point_index se do ostatních záznamů nepřidává — hodnoty se k bodu přiřazují časovým oknem za značkou, ne klíčem v každém řádku.
| Klíč | Typ | Popis |
|---|---|---|
session_id | long | Session, do které bod patří. |
point_index | int | Pořadí bodu od 1 za běžící úsek. Po navázání začíná znovu od jedničky — body ze dvou úseků rozliší running_ms_total nebo předchozí událost session_resumed. |
label | text | Volitelný popisek z pole nad tlačítkem. Prázdný bod zůstane jen pořadovým číslem, což pro průchod podle očíslovaného půdorysu stačí. |
marked_at_epoch_ms | long | Systémový čas klepnutí. Řádek nese i běžný elapsed_realtime_ns, podle kterého se okno vyřezává. |
running_ms_total | long | Naběhaný čas sběru v okamžiku značky, včetně předchozích úseků a bez pauz. |
distance_m | double | Ušlá trasa v okamžiku značky. Rozdíl proti předchozímu bodu říká, kolik metrů mezi nimi obsluha opravdu ušla. |
Klepnutí zároveň zabzučí, takže ke každému bodu existuje i řádek haptic se stejným časem — otřes v senzorech tedy není nevysvětlený.
Parametry měření
Každý zdroj lze před startem samostatně zapnout a u části z nich i nastavit tempo. Hodnoty mimo rozsah se přitáhnou do mezí — jinak by například interval_s=0 udělal z periodické smyčky tight loop.
| Zdroj | Parametr | Výchozí · rozsah |
|---|---|---|
| senzory (7×) | interval_ms | 50 ms · 10–1 000 |
noise | sample_rate_hz | 8 000 Hz · 8 000–48 000 |
location | interval_ms | 1 000 ms · 100–60 000 |
gnss_raw | interval_ms | 1 000 ms · 100–60 000 |
wifi, wifi_rtt, mobile_network, network_context | interval_s | 30 s · 5–300 |
bluetooth_classic, bluetooth_ble | scan_s / pause_s | 15 s · 5–60 / 45 s · 5–300 |
internet_quality | transport_target | Wi‑Fi + mobilní data · AUTO, WIFI, CELLULAR, BOTH |
sample_interval_ms | 1 000 ms · 500–5 000 | |
download_kib / upload_kib | 64 KiB · 1–1 024 / 8 KiB · 1–256 | |
latency_probe_count | 3 × · 2–3 | |
capacity_interval_s | 30 s · 10–300 | |
capacity_download_kib | 1 024 KiB · 64–10 240 | |
capacity_upload_kib | 128 KiB · 8–2 048 | |
download_mb (ruční test) | 10 MB · 1–100 | |
upload_mb (ruční test) | 5 MB · 1–50 | |
| Interní limity: 3 s timeout požadavku, 5 s strop krátkého přenosu, 15 s strop burstu, 60 s strop ručního testu. | ||
wifi_throughput | cycle_interval_s | 60 s · 10–600 |
connect_timeout_s | 30 s · 5–120 | |
download_kib | 1 024 KiB · 64–10 240 | |
upload_kib | 128 KiB · 8–2 048 | |
latency_probe_count | 3 × · 1–5 | |
| Interní limit: 20 s timeout jednoho HTTPS požadavku. Seznam měřených sítí není parametr — zadává se zvlášť v kartě zdroje a hesla se ukládají do předvoleb aplikace v čitelné podobě. | ||
Uložení v telefonu
Data leží v lokální databázi Room / SQLite, schema verze 4. Nikam se neodesílají; export do souboru dělá až uživatel.
Tabulka sensor_samples
| Sloupec | Typ | Popis |
|---|---|---|
id | long | Primární klíč. Určuje pořadí u vzorků se stejným časem. |
sessionId | long | Odkaz na session; při smazání session zmizí i vzorky. |
source | text | Zdroj vzorku. |
timestampEpochMs | long | Exportuje se jako epoch_ms. |
elapsedRealtimeNanos | long | Exportuje se jako elapsed_realtime_ns. |
payload | text | Payload zdroje včetně připojených přípon. |
Tabulka measurement_sessions
Jeden řádek na běh měření. Sloupce odpovídají polím v hlavičce exportu; navíc se během běhu průběžně aktualizují acceptedSamples, writtenSamples, droppedSamples a lastPersistedAtEpochMs, a to ve stejné transakci jako vložení dávky vzorků. Když proces zanikne, zůstane session ve stavu RUNNING a další start aplikace ji uzavře jako INTERRUPTED s end_reason=PROCESS_RECOVERY — částečný záznam zůstává exportovatelný.