De Bluetooth Core Specification telt meer dan 3200 pagina’s en daar komen nog heel wat andere specificaties bij. Net als andere protocollen maakt BLE echter gebruik van een gelaagde architectuur, waardoor de meeste eindgebruikertoepassingen alleen met de hogere lagen in contact komen.
De lagen zijn onderverdeeld in twee blokken: controller en host. Onderaan bevinden zich de lagen die door de controller worden uitgevoerd: physical layer, link layer en direct test mode. In deze lagen doet de bluetoothradio zijn werk. De communicatie met de buitenwereld gebeurt via de antenne, in een frequentieband rond 2,4GHz, en de communicatie met de host gebeurt via een laag die tussen de twee blokken zit: de host controller interface.
Daarboven bevindt zich dus het host-blok, waarmee de host zijn taken uitvoert. Ruwweg kun je zeggen dat de controller een BLE-dongle is en je laptop of Raspberry Pi een BLE-host. Tegenwoordig hebben de meeste computers al een BLE-controller ingebouwd en dan gebeurt de communicatie tussen controller en host niet via USB, maar via SDIO of UART. In domotica-apparaten die op batterijen werken, zijn de controller en host vaak uitgevoerd in één chipset, en dan is de HCI geen fysieke, maar een logische interface.
Data broadcasten
De software die uiteindelijk van BLE gebruikmaakt, doet dat via de bovenste lagen in het host-blok. Om het gebruik van BLE in domotica te begrijpen, is het minder belangrijk om exact te weten wat in welke laag gebeurt, maar moet je wel enkele sleutelconcepten kennen. De peripheral en central zijn de belangrijkste.
Een peripheral is een apparaat dat zijn aanwezigheid aankondigt door advertising packets uit te sturen en eventueel een verbinding toe te laten vanaf een ander BLE-apparaat. In zo’n advertising packet kan ook data verstuurd worden: 31 bytes in een pakket op een primary advertisement channel en 254 bytes in de andere kanalen. Een central kan luisteren naar advertisements en dus eventueel aanwezige data uitlezen. Omdat elk BLE-apparaat in de buurt deze pakketten kan ontvangen, is dit een vorm van broadcastcommunicatie. Dat gebeurt onversleuteld.
Een van de types advertising packets is manufacturer-specific data. Hierin kan elke fabrikant zijn eigen, al dan niet openbaar gespecificeerde dataformaat gebruiken. Bluetoothbeacons zijn een voorbeeld hiervan. Deze sturen via manufacturer-specific advertising packets een uuid, major en minor, en het zendvermogen op 1m afstand uit, zodat je telefoon de afstand tot het beacon kan bepalen. Ook allerlei sensoren maken gebruik van manufacturer-specific data, zoals de RuuviTag en Xiaomi Mijia-sensoren. Sommige van die laatste versleutelen overigens wel de advertising packets. Je hebt dan een ‘bindkey’ nodig om de sensordata te lezen.