uus ajastu haagiste jagamises

märksõnad

IoT integratsioon, back-end arendus, API arendus, React, Bun, TypeScript, MariaDB

tiim

Andres Kalle arendaja
Raiko Raidma arendaja
Vladislav Stafinjak analüütik
Siim Sups projektijuht

Tutvu teenusega siin

back-end development for Respo

projekti taustast

Respo, tuntud nimi haagiste müügi ja rendi valdkonnas, tuli välja uue ideega – mis oleks, kui inimesed saaksid haagiseid rentida või müüa distantsilt, ilma kohapealse üleandmise vaevata? Nende eesmärk oli avada täiesti uus ärimudel ja muuta seda, kuidas inimesed suhtlevad ühe kõige praktilisema meie teedel liikuva vahendiga – haagistega.

Idee elluviimiseks soovisid nad kasutada Teltonika seadmeid. Teltonika on juhtiv Leedu tehnoloogiaettevõte, mis on spetsialiseerunud IoT- (Internet of Things) ja elektroonikalahendustele – nende laiaulatuslik tootevalik hõlmab GPS ja IoT seadmeid ja sõidukite seiresüsteeme. 

Respo eesmärk oli minna kaugemale traditsioonilisest rendist ja müügist ning pakkuda võimalust nii eraisikutele kui ettevõtetele haagiseid distantsilt rentida või müüa – ilma tavapäraste füüsiliste üleandmisega seotud protseduurideta. Kujuta ette, et sul on kaks haagist, mis suurema osa ajast seisavad kasutult. Rendile andmine tundub küll hea mõte, kuniks taipad, et pead iga kord kohal olema, kui keegi soovib selle kätte saada. Just selles peituski probleem.

Uue lahendusega see probleem kaob. Kasutajad saavad Respolt rentida nutika seadme, kinnitada selle oma haagisele ja muuta selle koheselt renditavaks või müüdavaks – ilma, et peaks kunagi isiklikult rentija või ostjaga kohtuma. Nagu Airbnb, aga haagiste jaoks.

back-end arendus respole
Respo haagisepunktid on varustatud eritellimusel arendatud Teltonika seadmetega, mis on praeguseks kliendi käes aktiivseks testimiseks. Need iseteeninduspunktid võimaldavad inimestel haagiseid rentida või müüa ilma füüsilise kohaloluta. Iga punkt on varustatud nutiseadmega, mis suhtleb otse Respo süsteemiga, võimaldades kasutajatel platvormi kaudu haagiseid lukust lahti teha, rentida ja tagastada.

protsess

Projekti alguses astus klient meie kontorisse, käes Teltonika trükkplaat, juhtmed väljas ja tulukesed vilkumas. Nad soovisid, et me tutvuksime riistvaraga kohe esimesest päevast alates – et mõistaksime, kuidas see töötab ja mille ümber hakkame kogu süsteemi ehitama.

Sealt edasi andsid nad meile täieliku loomingulise ja tehnilise vabaduse lahenduse väljatöötamiseks. Ei mingeid rangeid spetsifikatsioone ega piiravaid reegleid – ainult selge eesmärk luua töökindel ja skaleeritav süsteem, mis võimaldaks haagiste kaugmüüki ja -rentimist. Mitte ainult ajutiselt toimiv lahendus, vaid midagi, mis kestaks pikalt.

Et asi veel huvitavamaks teha, siis esimene versioon koodist kirjutati täielikult Teltonika dokumentatsiooni põhjal – enne, kui olime üldse reaalse seadme serveriga ühendanud. Kui lõpuks esimene seade meie vastvalminud serveriga ühendati, ilmusid välja mõned ootamatud üllatused. Need väiksed vingerpussid tähendasid, et pidime koodi üle vaatama ja olulisi muudatusi tegema, et kõik töötaks tõrgeteta. See oli kahtlemata õppimiskõver, aga samas üks kogu projekti põnevamaid ja rahuldustpakkuvamaid osi.

Arhitektuuriliselt otsustasime lahendusele läheneda kaheosalisena:

  • Seadmeserver – suhtleb otse Teltonika seadmetega. Kuna nende protokoll ei kasuta standardseid veebipäringuid (nagu HTTP), pidime sukelduma sügavamale – töötlema toortaseme TCP-andmeid ja looma oma loogika baiditasandil suhtluseks.
  • Avalik API server – see on osa, millega suhtlevad välised partnerid ja rakendused. Hästi dokumenteeritud ja selge liides, mis pakub andmeid, edastab käske ning muudab kogu süsteemi kasutaja jaoks arusaadavaks ja kasutajasõbralikuks.

Selle kõige elluviimiseks valisime tööriistad, mis pakuvad õige tasakaalu kiiruse, töökindluse ja paindlikkuse vahel:

  • Bun: Kiire ja kaasaegne TypeScripti käituskeskkond, mille valisime tänu selle võimele hallata tuhandeid samaaegseid seadmeühendusi – täiuslik skaleeritavuse tagamiseks.
  • React: Admin-liidese loomiseks, fookuses reageerimisvõime ja komponentide taaskasutus.
  • MariaDB: Töökindel SQL-andmebaasi lahendus, mis vastas meie vajadustele ja sobitus valitud hostimiskeskkonnaga.
  • OpenAPI + Swagger UI: Avaliku API dokumenteerimiseks viisil, mis on arusaadav, interaktiivne ja lihtsasti kasutatav kolmandate osapoolte arendajatele.

Nagu taoliste ambitsioonikate arendustega ikka, algas tõeline lõbu alles siis, kui jõudsime testimise ja kasutuselevõtuni. Alates ainulaadsest riistvarakäitumisest kuni ootamatute piiranguteni hostimiskeskkonnas ootas meid ees veel nii mõnigi üllatus.

Lähivaade Teltonika trükkplaadist, mis paneb aluse Respo nutikale haagisesüsteemile. Otsene töö riistvaraga esimesest päevast alates andis meile vajaliku sisendi, et luua täiesti nullist töökindel süsteem.

väljakutsed

räägime teltonika keelt

Esimene suur väljakutse oli mõista, kuidas Teltonika seadmed tegelikult suhtlevad. Enamikus meie projektides töötame süsteemidega, mis kasutavad standardseid HTTP-päringuid – see on veebiserverite igapäevane protokoll, mis on ehitatud TCP peale ja millele on tavaliselt olemas kohene tugi.

Kuid Teltonika seadmed ei järgi seda tavasüsteemi. Selle asemel kasutavad nad kohandatud TCP-põhist protokolli, mis nõudis meilt ühe kihi võrra sügavamale minemist. Puudusid mugavad valmislahendused ja raamatukogud. Sukeldusime süvitsi IoT-seadmete back-end arendusse, kus pidime töötlema toorandmeid bait-baidi haaval ja ehitama nullist üles eritellimusel sidekihi.

See tõstis meid tavapärasest mugavustsoonist välja, kuid kujunes tõeliselt põnevaks väljakutseks. See andis meie meeskonnale võimaluse eksperimenteerida ja lahendada probleeme viisil, mida tavapärasemates projektides tihti ette ei tule.

lukkude loogika

Seadmed andsid meile vaid kahte tüüpi infot:

  • Kas lukk on kinni?
  • Kas haagis on ühendatud?

Tundub lihtne, eks? Kui hakkasime mõtlema päriselu olukordadele – näiteks mis saab siis, kui lukk ei avane või kui keegi toob haagise tagasi, aga unustab selle lukustada – läks asi kiiresti keeruliseks. Ootamatuid olukordi tekkis igal sammul ja süsteem pidi olema piisavalt tark, et nendega ilma tõrgeteta hakkama saada.

Lõpuks lõime põhjaliku süsteemi (olekumudeli), kuhu panime kirja kõik võimalikud variandid ja sammud, mis juhtuda võivad. Lisasime ka automaatsed teavitused juhuks, kui midagi läheb valesti.

privaatsuse hoidmine

Soovisime, et kaks serverirakendust (seadmetega suhtlev server ja avalik API-server) räägiksid omavahel privaatselt, ilma et see suhtlus oleks kõigile nähtav. Selleks valisime lahenduse nimega Unix domain sockets. See oli meie jaoks uus valdkond, kuid see toimis hästi ja hoidis süsteemi turvaliselt lukus.

See skeem näitab, kuidas Respo nutikas süsteem haagistel silma peal hoiab – kas haagis on lukus või lahti, kohal või puudu ning kuidas süsteem igas olukorras käitub. See katab kõik võimalikud variandid, alustades sellest, kui kasutaja haagise lukust avab, kuni ootamatute olukordadeni, kus keegi unustab haagise pärast tagastamist lukustada. Kogu seda lahendust juhivad Teltonika seadmed ja meie loodud loogika, mis aitab süsteemil püsida nutika ja turvalisena.

tulemused

  • Täielikult toimiv süsteem, mis on juba kliendi käes ja läbib aktiivset testimist.

  • Laiendatav ülesehitus, mis on valmis teenindama tuhandeid seadmeid.

  • Kasutajasõbralik lahendus, mis aitab haagiseomanikel teenida tulu tehnikalt, mis muidu lihtsalt seisaks.

  • Kaugrendi mudel, mis kaotab vajaduse haagiseid käest kätte üle anda.

  • Tulevikukindel digiplatvorm, mis toob innovatsiooni valdkonda, kus asju on seni aetud n-ö vanaviisi.

  • Meie jaoks aga üks ainulaadne kogemus ja ports uusi oskusi, mida järgmistesse projektidesse kaasa võtta.