Merendusintegratsioonid: usaldusskoor sillal
Kshana mereliine usaldusskoor (MARITIME-TRUST.md) on kättesaadav tarkvaras, mida paadisõitjad juba kasutavad: Signal K serveri plugin ja OpenCPN värava-režiimis NMEA kaudu TCP-ga. Etalonehitus paneb selle vastuvõtja kõrvale väikesele arvutile.
Nõuandev tarkvara. Kshana ei ole tüübikinnitust omav navigatsiooniseade (IEC 61108, IEC 61162) ning seda ei ole hinnatud ühegi toimivusstandardi vastu. Kõik sellel lehel on abivahend navigaatori otsustusvõimele. Laeva ohutu navigeerimise eest ning iga otsuse eest lahendile tugineda või sellele enam mitte tugineda vastutab jätkuvalt operaator. Siin ei edastata midagi ja siin ei muuda miski lahendit täpsemaks.
| Osa | Kus | Seis versioonis 0,35 |
|---|---|---|
| Signal K pistikprogramm | integrations/signalk/ |
tarnitud, ühiktestitud salvestatud sünteetilisel väljundil; npm-is avaldamata |
| OpenCPN värava-režiimis NMEA kaudu TCP-ga | integrations/opencpn/ |
tarnitud ja testitud (tarbijapoolne kordusesitus); OpenCPN-i kasutajaliidest ennast ei juhi ükski test |
| OpenCPN natiivne skooripaneeli plugin | integrations/opencpn/plugin/ |
ehitatud, loogika ühiktestitud ja käivitatud OpenCPN-is 5.8.4 virtuaalse ekraani all (tõendid kataloogis integrations/opencpn/evidence/); pakendamata pluginahalduri jaoks; tarnitakse alles pärast ülevaatust |
| Etalonehitus | deploy/reference-build/ |
osad, OS-i sammud, systemd üksused (kuivkäivituse kontrollitud), konteineri valik; laeval testimata |
Kõik see loeb üht asja: käsu kshana receiver-trust live väljundit (JSON-read, lause $PKSHT, värav). Andmevormingud on failis MARITIME-TRUST.md. Signal K plugin hoiab oma teadmisi neist ühes failis, integrations/signalk/lib/adapter.js; vormingumuudatus on ühe faili muudatus.
Signal K pistikprogramm#
npm-sõltuvusi ei ole. Plugin ise töötab Node 18 või uuemaga; praegused signalk-server väljalasked vajavad Node 22 või uuemat, seega praktikas kasutage 22. Kopeerige või linkige integrations/signalk/ serveri kataloogi node_modules (näiteks ~/.signalk/node_modules/signalk-kshana-trust), taaskäivitage server ja lubage Kshana GNSS trust menüüs Server, Plugin Config.
Kust epohhid tulevad (source)#
source |
Mida plugin teeb |
|---|---|
spawn-signalk-nmea (vaikimisi) |
Käivitab kshana receiver-trust live <sessionFile> ja kirjutab iga NMEA 0183 lause, mille server saab (serveri nmea0183 sündmus), selle standardsisendisse. Taaskäivitab selle tagasilangusega, kui see väljub | Kasutage seda ainult serveris, millel on üks NMEA allikas: see söödab kõik laused igalt pakkujalt läbisegi, nii et teine GNSS-i vastuvõtja või AIS näeb välja nagu üks vastuvõtja, mille asukoht hüppab, ja seda võidakse hinnata spuufimisena. Mitme allika korral kasutage spawn-args selle vastuvõtja enda --tcp vooga või tcp-pksht väravast. |
spawn-args |
Käivitab kshana receiver-trust live <sessionFile> <inputArgs...>, näiteks ["--tcp","192.0.2.10:10110"] või ["--udp","10110"] |
tcp-json |
Ühendub JSON-ridade vooga, mida kshana kirjutab (näiteks releest kataloogis integrations/opencpn/) |
tcp-pksht |
Ühendub NMEA vooga (nt teenuse või konteineri värava väljund etalonehituses, port 10110) ja loeb ainult selle $PKSHT lauseid |
Voog, mida spuufitakse juba siis, kui seire esimest korda ühendub, ei oma puhast lähtetaset (esimesi calibration_s sekundit ei hinnata kunagi). Käivitage see enne reisi.
Avaldatud teed#
Iga epohh uuendab (allikas kshana-trust):
| Tee | Väärtus |
|---|---|
navigation.gnss.kshana.band |
calibrating, nominal, degraded või untrusted |
navigation.gnss.kshana.score |
0 kuni 100 või null kalibreerimise ajal |
navigation.gnss.kshana.reasons |
[{monitor, points}], suurim esimesena: millised kontrollid skoori vähendasid |
navigation.gnss.kshana.alarms |
seirajad, mis on praegu üle oma läve |
navigation.gnss.kshana.gate |
off, passed või withheld (kui värav töötab mujal; null väärtusest $PKSHT, kui seda ei ole) |
navigation.gnss.kshana.reportedPosition |
{latitude, longitude, altitude}: asukoht, mida testitav vastuvõtja sellel epohhil teatas (JSON-skeem 1,1 või uuem; ei avaldata, kui voog seda ei kanna, näiteks käsust $PKSHT või vanemast kshana). Ainult usaldusekontekst: plugin ei kirjuta kunagi teed navigation.position, nii et laeva enda asukohatee jääb puutumata |
notifications.navigation.gnss.kshana.trust |
tõstetakse, kui olek muutub: {state, method, message} |
Plugin saadab nende teede jaoks ka Signal K metaandmed korra käivitumisel. score on Kshana usaldusskoor vahemikus 0 kuni 100, skoor, mitte suhe ega tõenäosus, seega ei kanna see SI ühikut; selle metaandmed annavad vahemiku, kirjelduse ja tsoonid, mis järgivad allpool toodud lävesid. reasons[].points on skoorilt maha võetud skoorpunktid sellest 0 kuni 100 skoorist.
Teavitus on normal, alert, warn või alarm. See tühistatakse oleku normal avaldamisega, mitte null: tarbija, kes käsitab tühistatuna ainult null, peaks käsitama tühistatuna ka normal. Vaikimisi annab degraded riba warn ja untrusted riba annab alarm koos method: ["visual","sound"]. See langetatakse pärast clearAfterEpochs epohhi paremas olekus. Kui epohhi ei saabu staleAfterS sekundi jooksul, hoiatab see, et skoori ei uuendata. Kalibreerimine ei tekita kunagi teavitust. Allikas $PKSHT ei kanna loetelu alarms (lause sisaldab ainult riba, skoori ja kahte peamist põhjust).
Seadistus (iga lävi)#
| Võti | Vaikeväärtus | Tähendus |
|---|---|---|
source |
spawn-signalk-nmea |
vt ülalpool |
command |
kshana |
käivitatav fail (spawn-režiimid). See käivitab mis tahes käivitatava faili serveri kasutajana: pluginaseadistust peaks saama muuta ainult Signal K serveri administraator |
sessionFile |
/etc/kshana/session.toml |
laeva piirid, lävendid ja skoori kaalud (spawn-režiimid) |
inputArgs |
[] |
argumendid, mis lisatakse käsule kshana receiver-trust live <sessionFile> mõlemas spawn-režiimis: sisend spawn-args jaoks, lisalipud nagu --replay (salvestatud logi, mida söödetakse reaalajast kiiremini) režiimile spawn-signalk-nmea. Plugin lükkab tagasi --gate, --listen, --json ja --pksht (see loeb käsu kshana JSON-i standardväljundist) ning režiimis spawn-signalk-nmea ka sisendlipud (--stdin, --file, --tcp, --udp, --follow, --from-end) |
host, port |
127.0.0.1, 10111 |
TCP-režiimid (värav teenindab pordil 10110: seadke port režiimile tcp-pksht) |
thresholdMode |
band |
band: riba, mida Kshana teatab, servadega seansifailis. score: allpool toodud kaks skoori |
warnBelowScore |
90 |
režiim score: sellest allpool on olek degradedState (Kshana vaikepiir nominal jaoks) |
alarmBelowScore |
55 |
režiim score: sellest allpool on olek alarm (Kshana vaikepiir degraded jaoks) |
degradedState |
warn |
degraded riba olek: normal, alert või warn |
raiseAfterEpochs |
1 |
järjestikused epohhid halvemas olekus enne teavituse tõstmist |
clearAfterEpochs |
10 |
järjestikused epohhid paremas olekus enne selle langetamist |
staleAfterS |
10 |
hoiata, kui epohhi ei saabu nii kaua; 0 lülitab selle välja |
method |
["visual","sound"] |
teavitusmeetodid |
Plugin ei tööta väravana: see ei muuda kunagi lahendit. Lahendi märkimine kehtetuks kaardisüsteemi jaoks on värav, allpool.
Testid#
cd integrations/signalk && npm test
node:test, sõltuvusteta, võrku peale 127.0.0.1 ei kasutata. Testid parsivad ja kordavad 66-epohhilist väljavõtet JSON-ridadest ja $PKSHT lausetest, mille kshana receiver-trust live kirjutas sünteetilise Balti demo jaoks (väljamõeldud andmed, ainult tekst), kontrollivad kahe vormingu kokkulangevust, hoidmise ja tühistamise käitumist, skoorirežiimi, aegumist ja kolme sisendteed kohaliku voo ja asenduslapseprotsessi vastu. Need testid ei käivita päris Signal K serverit; seda teeb eraldi skriptitud käivitus, vt allpool.
Käivitamine päris Signal K serveris#
integrations/signalk/evidence/ sisaldab skripti, mis laadib plugina fikseeritud paketti signalk-server 2.33.0 (privaatses ainult loopback-võrgu nimeruumis) ja salvestab, mida serveri enda REST ja WebSocket API-d näitavad. Usalduse teed ilmuvad, teavitus läheb warn, alarm, normal (pärast hoidmist) ja uuesti warn, kui andmed lakkavad, ning päris kshana puhul, mida söödab serveri enda NMEA sisend, avaldas see ka reportedPosition, mitte kunagi navigation.position. Üks serveri versioon, üks käivitus, päris laeva ei ole; piirangud ja taasesitus tõendite README-s.
OpenCPN#
OpenCPN loeb NMEA-d võrgust ja kshana receiver-trust live --gate võib ise väravdatud voogu TCP pordil teenindada.
Soovitatav: otseühendus.
some-nmea-source | kshana receiver-trust live session.toml --gate --listen tcp:10110
(some-nmea-source on vastuvõtja jadaport, mida loetakse käskudega stty ja cat, multiplekser või käsu kshana enda sisendid --tcp/--udp; etalonehituse kshana-gate.service teeb seda systemd all.) --listen tcp:<port> seob loopback-aadressi; ühenduda võib suvaline arv ainult lugemiseks mõeldud kliente ning klient, kes sammu ei pea, visatakse välja teisi viivitamata.
Alternatiiv: relee. integrations/opencpn/nmea-tcp-relay.mjs on sõltuvusteta Node'i hajutaja, mis teeb sama käsu kshana jaoks ilma --listen, või teenindab mis tahes muud reavoogu (konteineri valik kasutab seda JSON-epohhide jaoks):
some-nmea-source | kshana receiver-trust live session.toml --gate --json trust.jsonl \
| node integrations/opencpn/nmea-tcp-relay.mjs --listen 10110
See edastab baite muutmata, ainult tervete ridadena, ja viskab välja kliendi, kes ei loe. Eelistage otseühendust: üks protsess vähem ahelas.
OpenCPN-is: Options, Connections, Add Connection, Network, protokoll TCP, aadress 127.0.0.1, port 10110, suund Input. Kuni usaldus ei ole kokku kukkunud, on voog vastuvõtja enda pluss üks $PKSHT lause tsükli kohta. Kui see on kokku kukkunud, on edastatud GGA kvaliteet 0, RMC olek V ja režiiminäidikud ütlevad, et lahendit ei ole, kontrollsummad ümber arvutatud: seade näeb, et vastuvõtja ise kuulutab lahendi kehtetuks, ja tõstab oma alarmi. Laused $PKSHT on nähtavad OpenCPN-i NMEA silumisaknas (Options, Connections, „NMEA debug window“). Asukohaväljad jäetakse sellisteks, nagu need saadi.
Lugege enne sellele tuginemist jaotist „Gate mode“ failis MARITIME-TRUST.md: see on nõusolekupõhine, lisab latentsust (tsüklit hoitakse, kuni selle epohh on hinnatud), on ahelas üksik punkt ning võib hea lahendi kinni hoida, aga võltsitud lahendi läbi lasta.
Testid#
cd integrations/opencpn && npm test
test/relay.test.mjs kordab sünteetilise väravdatud voo salvestatud väljavõtet (186 lauset usalduse kokkukukkumise hetke ümber, kirjutanud kshana receiver-trust live --gate) releest päris TCP sokli kaudu ja kontrollib, mida tarbija saab: voog bait-baidilt suvalise tükeldamise korral; kehtivad kontrollsummad igal lausel, ümber kirjutatutel kaasa arvatud; GGA ja RMC kokkulangevus, kehtiv ja seejärel kehtetu ilma väreluseta; üks $PKSHT tsükli kohta oma värava väljaga W täpselt seal, kus lahend on kehtetu; kaks tarbijat identsed; osalist rida ei edastata kunagi. See kontrollib voogu, mis OpenCPN-ile antakse, mitte OpenCPN-i enda ekraani.
Otsast lõpuni kontroll päris binaarfailiga, mis ei kuulu vaiketestide hulka (see vajab ehitatud käsku kshana):
KSHANA_BIN=target/release/kshana npm run e2e # kshana --gate --listen | TCP consumer; the consumer's bytes must equal the gate's stdout
KSHANA_BIN=target/release/kshana npm run e2e -- relay # kshana --gate | relay | TCP consumer
Mõlemad käivitavad ühetunnise sünteetilise demo ja kontrollivad, et lahend muutub kehtivaks, seejärel kehtetuks, ühe $PKSHT-ga epohhi kohta.
Natiivne plugin#
integrations/opencpn/plugin/ on OpenCPN-i skooripaneel (skoor, riba, värav, peamised põhjused, hoiatus, kui usaldus muutub untrusted-iks), mis loeb $PKSHT OpenCPN-i enda NMEA voost, seega ei vaja see ühtki ühendust peale ülaltoodu. See ehitatakse CMake'iga OpenCPN-i plugina API päisefaili (kaasatud koos oma lähtekoodi commit-iga) ja wxWidgetsi vastu; ctest käivitab wx-vabad loogikatestid ja kontrollib, et teek ekspordib sisenemispunktid, mida OpenCPN otsib. Seda on käivitatud OpenCPN-is 5.8.4 virtuaalse ekraani all sünteetilisel väravdatud voogul (OpenCPN andis $PKSHT pluginale, paneel muutus punaseks ja OpenCPN-i enda asukoht külmus, kui värav rakendus; ekraanipildid, logi ja skript kataloogis integrations/opencpn/evidence/), aga mitte päris töölaual, teistes versioonides ega platvormidel ning see ei ole pakendatud OpenCPN-i pluginahalduri jaoks. Vt plugina README.md. See on litsentseeritud GPL-3.0-or-later alusel, erinevalt ülejäänud hoidlast (LICENSING.md).
Selle käivituse ekraanipildid kataloogis integrations/opencpn/evidence/ (üks käivitus, OpenCPN 5.8.4 virtuaalse ekraani all, sünteetilised andmed; README.md annab piirangud):
Need näitavad torustikku ja väravdatud lahendi jõudmist OpenCPN-i, mitte seda, et ükski alarm oleks õigeaegne või õige päris laeva jaoks. Nõuandev tarkvara, mitte tüübikinnitust omav seade.
Etalonehitus#
deploy/reference-build/: üldine osade loetelu, OS-i seadistus, kaks systemd üksust (nõuandev seire ja nõusolekupõhine värav), konteineri valik ja Signal K ühendamine. deploy/reference-build/check-units.sh käivitab systemd-analyze verify üksustel midagi käivitamata.
Piirangud#
- Skoor on nii hea kui selle taga olevad kontrollid, mis vaatavad laeva füüsikat ja selle teisi sensoreid; ise-kooskõlas võltsing sobiva kellaga jääb ainult NMEA-põhistele seirajatele märkamatuks (
MARITIME-TRUST.md). Alarmi puudumine ei ole tõend hea lahendi kohta. - Ükski sellel lehel olev arv ei ole mõõdetud tuvastus- või valehäire määr. Ülaltoodud testid kontrollivad torustikku sünteetilisel tekstil; need ei ütle midagi selle kohta, kuidas ükski seire tegelike häirete korral hakkama saab.
- Mitte tüübikinnitust omav; vastutab jätkuvalt operaator.