Autonavi · 2026

Autonavi.ee

CarPlay, Android Auto ja navigatsioonikaartide uuendused, mis vastavad täpselt sinu sõidukile.

Eesmärk

Klient pidi juba enne ostu teadma, kas CarPlay, Android Auto või kaardiuuendus tema autole sobib. Pood pidi suutma müüa sadu autopõhiseid tooteid ilma käsitsi tööta.

Tulemus numbrites

Mis muutus

1 390

autopõhist toodet poes

772 + 183

tarkvaraversiooni, mille vastu sobivust kontrollitakse

8

lisavõimalust, mis ei paisuta tootevalikut

Olukord

See, kas CarPlay, Android Auto või kaardiuuendus autole sobib, sõltub auto ekraaniseadme tarkvaraversioonist ja riistvarast. Kaks väliselt sama autot võivad olla täiesti erinevad: ühel piisab aktiveerimisest, teisel on vaja uuemat tarkvara ja kolmandal ei saa seda teha üldse. Vale valik tähendab tagastust ja pettunud klienti.

Autonavi.ee pidi müüma sadu autopõhiseid tooteid nii, et klient teab juba enne ostu, kas toode tema autole sobib. Sama oluline oli see, mis juhtub pärast ostu. Iga tellimuse jaoks tuleb valmistada just selle auto jaoks tehtud tarkvarapakett, mis sisaldab ainult ostetud funktsioone ja mida ei saa kogemata teise auto peal käivitada.

Suur osa tööst oli poe osas, mida klient ei näe: et hind oleks alati õige, et vigane tellimus ei jõuaks kassani ja et auto tarkvara puudutav pakett oleks ohutu ka siis, kui midagi läheb valesti.

Piirangud

  • Umbes 1 390 autopõhist toodet (näiteks Audi 622, VW 528, Seat ja Škoda kumbki 336) tuli luua automaatselt margipõhistest andmefailidest, mitte käsitsi.
  • 8 lisavõimalust (näiteks täisekraanirežiim, juhtmeta CarPlay ja kaardiuuendus) ei tohtinud muuta iga toodet sadadeks eraldi variantideks.
  • Tellimuse andmeid tuli kontrollida serveris, mitte ainult brauseris. Brauseri kontrolli saab alati mööda minna.
  • Tarkvarapakett läheb päris autosse. Ükski viga ei tohi auto ekraaniseadet kahjustada.
  • Leht avatakse avalikult hiljem, aga tellimused ja kliendikontod pidid olema valmis ja turvalised juba enne seda.

Lahendus

Kuidas lahendasin

Sobivus

Klient ei tea ette, kas tema auto ekraaniseade toetab CarPlay või Android Auto aktiveerimist või kaardiuuendust.

Tootelehel on sobivuse kontroll. Klient sisestab oma seadme tarkvaraversiooni ja süsteem võrdleb seda 772 teadaoleva versiooniga ning 183 versiooniga, mida saab otse aktiveerida.

Kontroll saab hakkama ka poolikult sisestatud versiooniga, sest inimesed kirjutavad pika koodi harva täpselt maha. See teab, millistel seadmetel on toetus olemas ainult riistvaras ja on vaja ka tarkvara uuendust, ning soovitab uusima sobiva variandi. Eesmärk on vähem valesid tellimusi ja tagastusi.

Kõige olulisem reegel: sobivust lubatakse tarkvaraversiooni, mitte mudeliaasta järgi. Sama mudel samast aastast võib tulla kolme eri põlvkonna ekraaniseadmega (MIB2, MIB2+ või MIB3), olenevalt varustusest ja turust. Aasta järgi antud lubadus tähendaks tagastusi. Seepärast ütleb iga tootekirjeldus, kuidas versiooni ekraanilt lugeda: MENU-nupp umbes 10 sekundit all.

E-pood

Umbes 1 390 autopõhist toodet (Audi, VW, Seat, Škoda ja teised) tuli poodi saada ilma käsitsi sisestamata.

Tooted luuakse automaatselt puhastatud margipõhistest tabelitest ja imporditakse WooCommerce’i. Igal tootel on kaasas nimekiri tarkvaraversioonidest, millega see töötab, ja sama nimekirja kasutab hiljem sobivuse kontroll. Kui andmeid parandatakse, uuenevad nii tooted kui ka kontroll samast allikast.

Sama moodi lisandusid hiljem ka Porsche käigukasti kalibreerimise tooted. Nende sõidureeglid ja hinnad tulid samuti tabelist ning kui tabelis oli viga, parandati see seal, mitte sadades tootelehtedes.

Ülesehitus

Kui 8 lisavõimalust teha tavaliste tootevariantidena, oleks iga toode muutunud kuni 256 variandiks.

Iga lisavõimalus on eraldi valik oma hinnaga, mida saab iga toote juures sisse või välja lülitada, ja lõpphind arvutatakse ostukorvis. Nii jääb toode üheks, mitte sadadeks variantideks, mida sellise tootehulga juures poleks olnud võimalik hallata.

Tootelehel muutub valiku järgi ka pilt: kui klient valib näiteks täisekraanirežiimi, näeb ta kohe, milline see tema autos välja näeb.

Kaheksa lisavõimalust variantidena on 256 varianti iga toote kohta. Valikutena jääb toode üheks.

Hinnad

Poe ülevaatusel selgus, et lisavõimaluste hind võis ostukorvis mitu korda juurde tulla.

Mis ei töötanud: lisavõimaluse hind liideti toote hinnale iga kord, kui WooCommerce ostukorvi summa uuesti arvutas. Ja WooCommerce teeb seda tihti: aadressi, tarneviisi või sooduskoodi muutmisel. Iga muudatus võis sama lisavõimaluse hinna uuesti juurde liita. Lisaks võttis server vastu ka lisavõimalusi, mis selle toote juures polnud üldse lubatud, kui keegi need päringusse kirjutas.

Kuidas see nüüd käib: hind arvutatakse alati toote algsest hinnast, mitte eelmisest tulemusest, nii et mitu arvutust järjest annab alati sama vastuse. Lubatud lisavõimalused ja nende hinnad võtab server toote enda seadetest. Brauserist tulnud hinda ei usaldata kunagi.

Iga aadressi, tarneviisi või sooduskoodi muutus arvutab summa uuesti. Nüüd algab arvutus alati toote algsest hinnast.

Andmekvaliteet

Vigane VIN-kood ostukorvis tähendab valet tellimust, mida on hiljem kallis parandada.

Mis ei töötanud: tootelehe ja serveri reeglid olid erinevad. Leht lubas üht, server kontrollis teist, ja toote seade „selle toote puhul VIN-i ei kontrollita” töötas ainult brauseris. Server nõudis VIN-i ikka.

Kuidas see nüüd käib: reeglid on samad mõlemal pool ja server on see, kes otsustab. VIN-kood peab olema õige kujuga: 17 märki, ilma tähtedeta I, O ja Q, mida VIN-koodis ei kasutata. Varem sai sisestada ka numbrimärgi, aga see võimalus kadus, sest tarkvarapakett seotakse just VIN-koodiga. Numbrimärgi järgi ei saa pakett teada, mis autos ta on. Kontrolli saab iga toote puhul sisse või välja lülitada ja see seade kehtib nüüd ka serveris.

VIN-kood on alati 17 märki, ilma tähtedeta I, O ja Q. Esimesed kolm märki näitavad tootjat.

Kassa

Kassaleht joonistas lehe päise ja jaluse kaks korda. See võis segada maksemeetodite tööd.

Kassa kujundus kutsus lehe päise ja jaluse välja ka ise, kuigi leht oli seda juba teinud. Tulemuseks oli lehe sees teine leht. Silmaga seda peaaegu ei märganud, aga kassa uuendab end taustal (aadressi või tarneviisi muutmisel) ja makseviiside kood ootab kindlat lehe ülesehitust. Topelt ülesehitus võis selle katki teha.

Nüüd on kassal üks lehe raam ja kassa osa on selle sees tavaline plokk. Samal ajal jäid ära ka muud väikesed vead: tootelehe andmed laaditi iga lehe peal, ka seal, kus neid vaja polnud, ja osa skripte eeldas teeki, mida polnud laaditud.

Tarkvarapakett

Iga tellimuse jaoks tuleb valmistada just selle auto jaoks sobiv tarkvarapakett, aga selleks polnud mugavat tööriista.

Tellimuse juures on nupp „Laadi tarkvara alla”. Server valib auto tarkvaraversiooni järgi õige baaspaketi, jätab sisse ainult need funktsioonid, mille klient ostis (CarPlay ja Android Auto on eraldi), seob paketi selle auto VIN-koodiga ja annab valmis faili alla laadida. Käsitsi faile kokku panema ei pea.

Baaspaketid on suured ja väärtuslikud, seega hoitakse neid kohas, kuhu avalikust internetist ligi ei pääse. Nuppu näevad ainult õigustega töötajad.

Ohutus

Pakett peab käivituma ainult õige auto peal. Aga mis juhtub, kui kontroll ise eksib?

Mis ei töötanud: varasem lahendus kustutas paketi failid, kui VIN-kood ei klappinud. Ülevaatusel leidsin, et see ei suutnud eristada valet autot vigasest lugemisest. Kui auto andis VIN-koodi väikeste tähtedega, kui lugemine tagastas tühja vastuse või kui failis oli üks liigne märk, pidas kontroll õiget autot valeks ja kustutas õige paketi. Ühes skriptis oli ka trükiviga, mille tõttu kontroll ei läinud kunagi läbi: iga käivitus, õige VIN või mitte, lõppes kustutamisega. Ja kustutamisel puudus kaitse selle vastu, et see läheks mälukaardist väljapoole.

Kuidas see nüüd käib: pakett käib kahes etapis. Esimeses etapis pole ühtegi tarkvarafaili, ainult VIN-koodi kontroll. Alles õige VIN avab teise etapi, kus on päris tarkvara. Vale VIN ei näe seda kunagi. Viga lugemisel ei tähenda enam „vale auto”, vaid peatub ohutult ega kustuta midagi. Uue versiooni jaoks on ka proovirežiim, mis teeb kogu otsuse läbi ja ainult kirjutab üles, mida ta teeks, ning teine proovirežiim, mis kontrollib etappide vahetust ilma ühtegi tarkvara paigaldamata.

Ütlen ausalt ka selle, mis see pole. See kaitse hoiab ära vale auto peale paigaldamise, mitte ei ole krüptograafiline kopeerimiskaitse. Seepärast ei kustuta see enam ka midagi: kustutamine kahjustas ainult õigeid kliente.

Kontrolli teeb keeruliseks ka see, et sama arvutus on neljas kohas: paketi lukustamiseks brauseris ja serveris ning selle avamiseks kahes eri auto skriptis. Kõik neli peavad andma baidi haaval sama tulemuse. Üks vanem skript oli kirjutanud arvutuse ümber autos oleva käsurea aritmeetikaga. See võis 32-bitises keskkonnas vaikselt üle voolata ja anda vale tulemuse ilma ühegi veateateta. Teises skriptis ei mõistnud auto käsurida failinimede kodeerimist, nii et kustutamine ei teinud vaikselt mitte midagi. Kaitse oli olemas ainult paberil. Serveri versioon on nüüd baidi haaval sama mis brauseri oma ja kontrollitud päris autos kasutatud mälukaardi vastu.

Esimeses etapis pole ühtegi tarkvarafaili. Lugemisviga ei tähenda enam „vale auto”, vaid ohutut peatumist.

Kataloog

Enne laiendamist tuli üle vaadata, kas poes olevad CarPlay ja Android Auto tooted on üldse õiged ja kas kõik valmis tooted on müügil.

Käisin läbi kõik tootetabelid ja poe ekspordi. Kontrollisin iga toote juures, kas lubatud aktiveerimine on sellel autol tehniliselt võimalik, ja võrdlesin seda sobivuse kontrolli enda andmetega, sest just need otsustavad päris tellimuste üle.

Mis leidsin: üks margi tabel oli ekspordil teist korda jutumärkidesse pandud. Tabelilugeja nägi 14 toote ja 41 veeru asemel 336 rida ühe veeruga, nii et import oleks toonud prügi või mitte midagi. Poes oli üle 30 toote ilma tootekoodita. Neid ei saa importiga uuendada ega sobivuse kontrolliga siduda. Üks toode oli poes kaks korda eri hinnaga (200 € ja 100 €), teine neli korda eraldi tootena. 32 valmis kirjutatud toodet polnud kunagi poodi imporditud: Škoda ja VW aktiveerimisi polnud müügil üldse.

Tootenimedes oli ka autosid, mida pole olemas. Audi RS1 uue põlvkonna A1-st ja Audi RS Q7 pole kunagi tehtud. Aastavahemikud ei vastanud ekraaniseadmele. VW T-Roc oli kirjas 2017–2023, aga alates 2021. mudeliaastast on sellel MIB3 ja see vajab teist toodet. Audi TT 2015. aasta autodel on MIB1, millel CarPlay aktiveerimine pole võimalik. Vastupidi oli ka: osa Audi mudelite vahemik lõppes 2020, kuigi need jäid samale seadmele kuni 2024. Nii jäi osa müüki lihtsalt tegemata. Bentley oli märgitud valesti MH2P-ks. Tegelikult on see MIB2 High, aga täisekraani toode sobib ka sellele.

Suurim leid oli puuduv osa. Sobivuse kontroll tundis juba 69 MIB3 tarkvaraversiooni, aga poes polnud ühtegi MIB3 toodet. See jättis välja kõik umbes 2020. aastast uuemad VAG-autod: Golf 8, Octavia IV, Leon, Formentor, kogu ID-seeria. Uus põhifail lisas 50 MIB3 toodet 26 automudelile.

Kuidas see nüüd käib: CarPlay ja Android Auto kataloog tehakse ühest põhifailist skriptiga: 261 toodet ühtse hinnaredeli ja ühesuguste veergudega. Tootekoodid on samad mis poes, nii et import uuendab olemasolevad 89 toodet ja lisab ülejäänud, ilma koopiateta. Kui hinda on vaja muuta, muudetakse seda ühes kohas ja skript tehakse uuesti.

Sobivuse kontroll teadis juba, milliseid autosid saab aidata. Pood lihtsalt ei müünud neile midagi.

Tulemus

Autonavi.ee pood on valmis: umbes 1 390 autopõhist toodet, sobivuse kontroll 772 + 183 teadaoleva tarkvaraversiooni vastu ja 8 lisavõimalust, mis ei paisuta tootevalikut. Hinnad ja tellimuse andmed kontrollib server, ja iga tellimuse tarkvarapakett tehakse ühe klikiga, seotuna õige autoga.

Avalikult on leht praegu „Peagi” olekus, aga kliendikontod ja tellimused juba töötavad.

Edasi

Järgmine samm on avalik käivitamine ning sobivuse andmebaasi ja baaspakettide täiendamine uute automudelite ja tarkvaraversioonidega.

Järgmine samm

Sinu projekt võiks olla järgmine