Een Bluetooth-app waarbij elke tik antwoord geeft
Een app voor iOS en Android die lichtcontrollers via Bluetooth Low Energy bedient, gebouwd voor een klant, voor eindgebruikers die niet technisch zijn.
Elke tik geeft antwoord.
- sent
- superseded
- failed
- busy
- current
- not-connected
Het probleem
De gebruikers zijn niet technisch: ze kennen alleen "de lichten" en bedienen die vaak 's avonds, vanaf hun telefoon. De klant wilde één eigen app voor drie soorten lichtproducten, die aanvoelt als onderdeel van een premium installatie en niet als een generieke LED-app.
Wat ik bouwde
Een app die de verschillende controllers zelf herkent, opnieuw verbindt zodra ze weer bereikbaar zijn, en bij elke tik eerlijk laat zien of het commando is aangekomen.
Vertaald in negen talen, waaronder Arabisch van rechts naar links.
Wat er technisch toe doet
Eén supervisor die zelf herverbindt
Elke productfamilie krijgt dezelfde supervisor, die met een vast terugvalschema opnieuw verbindt. Annuleren maakt alle lopende pogingen ongeldig, zodat een verbinding die te laat binnenkomt wordt genegeerd in plaats van een race te veroorzaken.
Laatste waarde wint
Bij het slepen van een kleur- of helderheidsslider gaat per instelling alleen de laatste waarde de lucht in. Zo loopt de verbinding niet vol en komt altijd de laatste keuze van de gebruiker aan.
Elke tik krijgt een uitkomst
Een tik wordt verstuurd, ingehaald door een nieuwere keuze, of afgewezen met een reden: bezig, al ingesteld of niet verbonden. Elke write heeft een time-out van twee seconden, dus niets blijft stil hangen.
Tot tien controllers tegelijk
Een aparte manager houdt meerdere verbindingen tegelijk bij en zet de writes achter elkaar. Er is één gewenste toestand, zodat een controller die achterloopt in één write bijloopt.
Architectuurregels vastgelegd in tests
Een test bewaakt dat het designsysteem nooit uit de Bluetooth-laag importeert, een andere dat alle talen precies dezelfde vertaalsleutels hebben.
Negen talen, ook van rechts naar links
Arabisch zit in de basiscomponenten zelf, zoals pijlen en terugvegen die met de leesrichting meedraaien.
Meetstaat
Geteld in de repository, niet geschat.
- testbestanden
- 130
- testcases
- 1.755
- regels testcode, tegen 27.114 regels app
- 33.977
- talen, waaronder Arabisch
- 9
- controllers tegelijk, hoogstens
- 10
Hoe gemeten
git ls-files 'src/__tests__/*.test.ts*' | wc -l
git ls-files 'src/__tests__/*.test.ts*' | xargs grep -cE '^\s*(it|test)\(' (opgeteld)
git ls-files 'src/__tests__/*' | xargs wc -l
git ls-files 'src/*.ts' 'src/*.tsx' 'app/*.ts' 'app/*.tsx' plugins | grep -v __tests__ | xargs wc -l
ls src/i18n/locales | wc -l
de limiet in de verbindingsmanagerGemeten op 27-10-2026 in de repository van de app.
Iets vergelijkbaars nodig, of een team dat zo'n systeem bouwt?
info@bitvire.com