Dokument opisuje schemat bazy używany przez SrvPostgreSQL i SrvMySQL.
Źródłami definicji tabel są SrvPostgreSQL/database.sql oraz
SrvMySQL/database.sql.
Oba warianty mają te same tabele i kolumny. Różnice typów dotyczą tylko:
wrongdata.query: BYTEA w PostgreSQL, BLOB w MySQL/MariaDB,locdata: BYTEA w PostgreSQL, BINARY(n) w MySQL/MariaDB,devices.tachofw: VARCHAR(15) w PostgreSQL, CHAR(15) w MySQL/MariaDB.Pola device_id są logicznymi odwołaniami do devices.id. Schemat nie tworzy
dla nich ograniczeń FOREIGN KEY.
Rekord urządzenia powstaje przy pierwszym połączeniu. Dane identyfikacyjne i
wersje są aktualizowane przy kolejnych połączeniach TCP.
| Kolumna | Typ | Opis |
|---|---|---|
id |
SERIAL |
Klucz główny urządzenia |
imei |
CHAR(15) |
Numer IMEI |
dscr |
VARCHAR(15) |
Opis urządzenia |
ccid |
VARCHAR(20) |
Numer ICCID karty SIM |
version |
INTEGER |
Wersja firmware urządzenia |
udpmode |
INTEGER |
Flaga pracy w trybie UDP |
vin |
VARCHAR(17) |
Numer VIN |
vrn |
VARCHAR(13) |
Numer rejestracyjny |
tachofw |
VARCHAR(15) / CHAR(15) |
Wersja firmware tachografu |
status |
INTEGER |
Status firmware dodatkowego modułu |
crcc |
BIGINT |
CRCC firmware dodatkowego modułu |
Tabela przechowuje rekordy lokalizacyjne i pomiarowe. Rekord może zawierać
tylko część parametrów, zależnie od wersji i konfiguracji urządzenia. Zapis
0..N oznacza osobne kolumny, np. ain0..ain5 oznacza ain0, ain1, ...,
ain5.
| Kolumny | Typ | Opis |
|---|---|---|
id |
SERIAL |
Klucz główny rekordu |
device_id |
INTEGER |
Identyfikator z devices.id |
locdatetime |
TIMESTAMP |
Czas UTC przyjęcia ramki przez serwer |
seqno, event |
INTEGER |
Numer rekordu urządzenia i kod zdarzenia |
fixstat, satuse |
INTEGER |
Status pozycji GPS i liczba użytych satelitów |
latitude, longitude |
FLOAT |
Szerokość i długość geograficzna |
altitude, altref, cogt, kph |
FLOAT |
Wysokość, wysokość referencyjna, kierunek i prędkość |
distance |
INTEGER |
Dystans w metrach |
gpsdatetime |
TIMESTAMP |
Czas UTC zebrania danych GPS |
antstat |
INTEGER |
Antena GPS: 1 OK, 2 zwarcie, 3 przerwa |
fixstat2 |
INTEGER |
Status dodatkowych pozycji GPS |
latitude1..latitude3, longitude1..longitude3 |
FLOAT |
Dodatkowe pozycje GPS |
trailer1, trailer2, utctime |
BIGINT |
Identyfikatory naczep i czas UTC w postaci liczbowej |
| Kolumny | Typ | Opis |
|---|---|---|
rawdin, hidin, lodin |
INTEGER |
Bieżące i zapamiętane stany wejść cyfrowych |
ain0..ain5 |
FLOAT |
Wejścia analogowe |
sig, network, lac, ci |
INTEGER |
Sygnał i identyfikatory sieci komórkowej |
noiseperms, agccnt, jamind |
INTEGER |
Diagnostyka odbiornika GNSS |
rawvirt, chgvirt |
INTEGER |
Stany wirtualne i maska zmian |
imp0..imp3 |
INTEGER |
Liczniki impulsów |
freq0..freq6, freqstatus |
INTEGER |
Częstotliwości i ich status |
tagid, tagid2, driverid0, driverid1 |
CHAR(16) |
Identyfikatory Dallas i kart kierowców |
level0..level7, acctemp |
INTEGER |
Poziomy sond paliwa i temperatura MEMS |
accx, accy, accz |
FLOAT |
Przyspieszenia w osiach X, Y i Z |
bbmem, msgmem, kphstatus |
INTEGER |
Zajętość pamięci i status źródeł prędkości |
kph1..kph3 |
FLOAT |
Prędkości z dodatkowych źródeł |
virt1ontimer..virt4ontimer, virt1offtimer..virt4offtimer |
BIGINT |
Liczniki czasu stanów wirtualnych |
| Kolumny | Typ | Opis |
|---|---|---|
canid |
INTEGER |
Identyfikator konfiguracji CAN |
spn190, spn84, spn96, spn250, spn247, spn175, spn91, spn521 |
FLOAT |
Parametry silnika, prędkości, paliwa i pedałów |
spn917 |
BIGINT |
Całkowity dystans pojazdu |
spn110, spn172, spn523, spn520, spn595, spn596, spn1611..spn1613 |
INTEGER |
Temperatury, bieg, retarder, tempomat i stany kierowców |
spn597 |
INTEGER |
Stan przełącznika hamulca |
spn180, spn181, spn582_0..spn582_3 |
FLOAT |
Masy naczepy, ładunku i osi |
spn899, spn513, spn3484 |
INTEGER |
Moment silnika i stan zapłonu |
spn235, spn1761 |
FLOAT |
Czas biegu jałowego i poziom zbiornika katalizatora |
spn169_0..spn169_29 |
FLOAT |
Temperatury ładunku |
spn354_0..spn354_29 |
FLOAT |
Ciśnienia |
spn168_0..spn168_29 |
FLOAT |
Napięcia |
RSSI_0..RSSI_9 |
INTEGER |
Poziomy sygnałów czujników |
ldwr, ldwl, ttc, fcw |
INTEGER |
Dane ADAS |
brake, accel, corner |
INTEGER |
Liczniki gwałtownych zdarzeń |
drivingstate, ecorating, drivingscore |
INTEGER |
Stan i ocena jazdy |
quantizer1..quantizer8, quantichg1, quantichg2 |
INTEGER |
Kwantyzatory i maski zmian |
| Kolumny | Typ | Opis |
|---|---|---|
spreading, plow |
INTEGER |
Stany posypywarki i pługa |
brine_dosage_ml, brine_dosage_g |
FLOAT |
Dozowanie solanki |
spreading_dosage_1, spreading_dosage_2 |
FLOAT |
Dozowanie materiałów |
spreading_width, spreading_width_left |
FLOAT |
Szerokość posypywania |
material_total_1, material_total_2, brine_total_liters |
FLOAT |
Sumaryczne zużycie materiałów i solanki |
spreading_total_dist, spreader_oper_time, simulation_speed |
FLOAT |
Dystans, czas pracy i prędkość symulowana |
interface_status |
BYTEA / BINARY(3) |
Status interfejsów |
connection_flags |
BYTEA / BINARY(3) |
Flagi połączeń |
security_flags |
BYTEA / BINARY(12) |
Flagi bezpieczeństwa |
state_flags |
BYTEA / BINARY(8) |
Flagi stanów |
indicator_flags |
BYTEA / BINARY(10) |
Flagi wskaźników |
BatteryRangeKm, BatteryVoltageV, EReadyFlag |
INTEGER |
Zasięg, napięcie i gotowość pojazdu elektrycznego |
ChargeCurrentA, PowerUsageA |
FLOAT |
Prąd ładowania i pobór prądu |
| Kolumny | Typ | Opis |
|---|---|---|
Cia422BcReady, Cia422BcActive |
INTEGER |
Stan BC |
Cia422Lu1Ready..Cia422Lu4Ready, Cia422Lu1Active..Cia422Lu4Active |
INTEGER |
Gotowość i aktywność LU1-LU4 |
Cia422Lu1Move..Cia422Lu4Move, Cia422Lu1Wu..Cia422Lu4Wu, Cia422Lu1Cu..Cia422Lu4Cu |
INTEGER |
Stany ruchu, WU i CU jednostek LU |
Cia422Lu1Window..Cia422Lu4Window, Cia422Lu1Bin..Cia422Lu4Bin |
INTEGER |
Stany okna i zasobnika LU |
Cia422Lu1Position..Cia422Lu4Position |
FLOAT |
Pozycje LU1-LU4 |
Cia422CuReady, Cia422CuActive, Cia422CuPosition |
INTEGER |
Stan CU |
Cia422CuReqSpeed, Cia422CuReqHydraulic, Cia422CuReqDrive |
INTEGER |
Żądania CU |
Cia422CuBcSpeed, Cia422CuBcHydraulic, Cia422CuBcDrive, Cia422CuBcReserved1..Cia422CuBcReserved3 |
INTEGER |
Dane CU przekazywane do BC |
Cia422Bcu1Ready..Cia422Bcu4Ready, Cia422Bcu1Active..Cia422Bcu4Active |
INTEGER |
Gotowość i aktywność BCU1-BCU4 |
Cia422Bcu1LuPause..Cia422Bcu4LuPause, Cia422Bcu1Wu..Cia422Bcu4Wu, Cia422Bcu1LuStop..Cia422Bcu4LuStop |
INTEGER |
Stany sterowania BCU |
Cia422Bcu1Volume..Cia422Bcu4Volume |
INTEGER |
Objętości BCU |
Cia422HeartbeatState, Cia422HeartbeatReady, Cia422EmcyCode, Cia422EmcyRegister, Cia422PdoRx |
INTEGER |
Diagnostyka CIA 422 |
| Kolumny | Typ | Opis |
|---|---|---|
userchar1..userchar4, usershort1..usershort4, userint1..userint4 |
INTEGER |
Dane użytkownika 8-, 16- i 32-bitowe ze znakiem |
userlong1..userlong4 |
BIGINT |
Dane użytkownika 64-bitowe ze znakiem |
userfloat1..userfloat4, userdouble1..userdouble4 |
FLOAT |
Dane zmiennoprzecinkowe; także źródła 64-bitowe mają w bazie typ FLOAT |
CanCntr1..CanCntr8 |
BIGINT |
Konfigurowalne, podtrzymywane liczniki zdarzeń CAN; źródłowo uint32_t, zakres 0..4294967295 |
acc1, acc2 |
BIGINT |
Parametry akumulacyjne |
shadowacc1, shadowacc2 |
FLOAT |
Przeliczone parametry akumulacyjne |
stickybits1, stickymask1, stickychg1 |
INTEGER |
Pierwszy parametr bitowy, maska i zmiany |
stickybits2, stickymask2, stickychg2 |
INTEGER |
Drugi parametr bitowy, maska i zmiany |
Zawiera odwołanie do ostatniego rekordu locdata każdego urządzenia. Przyspiesza
pobieranie bieżącego stanu i pomaga odrzucać duplikaty w trybie UDP.
device_id jest kluczem głównym, więc występuje najwyżej jeden rekord na
urządzenie.
| Kolumna | Typ | Opis |
|---|---|---|
id |
SERIAL |
Identyfikator rekordu |
device_id |
INTEGER |
Identyfikator urządzenia i klucz główny tabeli |
locdata_id |
INTEGER |
Ostatni identyfikator locdata |
seqno |
INTEGER |
Ostatni numer rekordu urządzenia |
Przechowuje dane diagnostyczne po błędzie zapytania dotyczącego locdata lub
inbox.
| Kolumna | Typ | Opis |
|---|---|---|
id |
SERIAL |
Identyfikator rekordu |
add_date |
TIMESTAMP |
Czas UTC błędu |
device_id |
INTEGER |
Identyfikator urządzenia |
name |
VARCHAR(16) |
Nazwa operacji lub tabeli |
query |
BYTEA / BLOB |
Zapytanie SQL, którego nie udało się wykonać |
Przechowuje wiadomości z aplikacji urządzenia. Serwer dodaje je ze statusem
1; aplikacja czytająca może ustawić 2 lub własną wartość. outbox_id jest
kluczem wiadomości protokołu: zależnie od aplikacji może wskazywać rekord
outbox, rekord konfiguracji albo zero.
| Kolumna | Typ | Opis |
|---|---|---|
id |
SERIAL |
Klucz główny |
add_date |
TIMESTAMP |
Czas UTC odbioru |
device_id, outbox_id, status, app_id |
INTEGER |
Urządzenie, klucz wiadomości, status i aplikacja |
data0 |
VARCHAR(16) |
Krótkie dane aplikacji |
data1 |
VARCHAR(480) |
Główne dane aplikacji |
data2 |
VARCHAR(240) |
Dodatkowe dane aplikacji |
Aktualne wartości app_id:
| ID | Aplikacja | Zawartość |
|---|---|---|
0 |
Błąd CRCC | data1: odebrany blok hex, po 2 znaki na bajt |
1 |
Tekst | adresat, wiadomość, czas i pozycja |
2 |
Digidown | status, rozmiar i nazwa pliku |
3 |
Tachoreader | status, CRCC i link |
4, 5 |
Vector, Matrix | numer, długość, wartości uint16_t po 4 znaki hex i GPS |
6 |
Continental | 120 wartości uint8_t, każda po 4 znaki hex, i GPS |
7 |
Activity | liczba, rekordy aktywności i dane dodatkowe |
8 |
eTOLL | liczba i rekordy pozycji eTOLL |
9 |
Device ID | liczba, adresy MAC i pary DeviceID/RSSI |
10 |
BLE | rekordy MAC, ConfigID, RSSI, Value, Latitude, Longitude |
11 |
EN 15430 | długość i dane zapisane szesnastkowo |
12 |
DTC | liczba, kody DTC oraz Type, Status i Cntr |
13 |
Events | typ, długość i dane zdarzenia; dla Pid=1 zmiana stanu geofence |
Pełny format pól opisuje Wiki/Serwer - APLIKACJE.md.
Kolejka wiadomości do aplikacji urządzeń. Serwer pobiera rekordy ze statusem
1, po jednym oczekującym rekordzie na urządzenie.
| Kolumna | Typ | Opis |
|---|---|---|
id |
SERIAL |
Klucz główny i klucz wiadomości protokołu |
add_date, sent_date |
TIMESTAMP |
Czas UTC dodania i potwierdzenia |
device_id, status, app_id |
INTEGER |
Urządzenie, status kolejki i aplikacja |
data0, data1, data2 |
VARCHAR(16/480/240) |
Dane zależne od aplikacji |
Statusy: 1 nowa, 2 potwierdzono co najmniej jeden rekord, 3
potwierdzenie z licznikiem zero, 4 nieobsługiwany app_id.
app_id |
Aplikacja | Używane pola |
|---|---|---|
1 |
Tekst | data0: adresat, data1: wiadomość |
2 |
Digidown | data0: kod zlecenia |
3 |
Tachoreader | data0: kod zlecenia |
18 (0x012) |
eTOLL | data0: Counter,TimeON,TimeOFF,Mode |
Metadane plików pobieranych do katalogu scanner. Podczas transmisji plik ma
nazwę file_<id>.tmp, a po ostatnim fragmencie <id>_<name>.
| Kolumna | Typ | Opis |
|---|---|---|
id |
SERIAL |
Klucz główny i identyfikator transmisji |
add_date |
TIMESTAMP |
Czas UTC rozpoczęcia |
device_id |
INTEGER |
Identyfikator urządzenia |
name, dscr |
VARCHAR(12/16) |
Nazwa i opis pliku |
size |
INTEGER |
Rozmiar w bajtach |
crcc1, crcc2 |
BIGINT |
Sumy kontrolne |
completed |
INTEGER |
Postęp w procentach; 100 oznacza plik kompletny |
Kompletne ramki tekstowe EN 15430 składane z wiadomości app_id = 11.
| Kolumna | Typ | Opis |
|---|---|---|
id |
SERIAL |
Klucz główny |
add_date |
TIMESTAMP |
Czas UTC zapisania |
device_id |
INTEGER |
Identyfikator urządzenia |
utctime |
BIGINT |
Znacznik czasu dostarczony z danymi |
rawdata |
VARCHAR(1040) |
Kompletna ramka EN 15430 |
Compose przechowuje bazę w woluminie postgres-data albo mysql-data.
Restart lub odtworzenie kontenera nie usuwa danych. database.sql jest
wykonywany tylko przy inicjalizacji pustego woluminu. down -v usuwa wolumin i
całą testową bazę. Istniejący schemat należy aktualizować odpowiednim plikiem
upgrade.sql.