{"id":84024,"date":"2020-06-04T19:42:32","date_gmt":"2020-06-04T17:42:32","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty"},"modified":"2020-06-04T19:42:32","modified_gmt":"2020-06-04T17:42:32","slug":"ble-pod-mikroskopom-atty-gatty","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","title":{"rendered":"BLE mikroszk\u00f3p alatt (ATT-k \u00e9s GATT-ok&#8230;)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"BLE a mikroszk\u00f3p alatt (ATT-k GATT-k...)\" src=\"\/wp-content\/uploads\/2020\/06\/d8587bf897b27457b354549b99399bcc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>BLE mikroszk\u00f3p alatt (ATT-k \u00e9s GATT-ok&#8230;)<\/h2>\n<p> <b>1. r\u00e9sz, \u00e1ttekint\u00e9s<\/b><\/p>\n<p>M\u00e1r egy el\u00e9g hossz\u00fa id\u0151 telt el az\u00f3ta, hogy megjelent az els\u0151 Bluetooth 4.0 specifik\u00e1ci\u00f3. \u00c9s b\u00e1r a BLE t\u00e9ma nagyon \u00e9rdekes, sok fejleszt\u0151t m\u00e9g mindig elriaszt a bonyolults\u00e1ga. Kor\u00e1bbi cikkeimben f\u0151k\u00e9nt a Link Layer \u00e9s a Physical Layer legals\u00f3 szintj\u00e9t vizsg\u00e1ltam. Ez lehet\u0151v\u00e9 tette, hogy ne foglalkozzak olyan bonyolult \u00e9s \u00f6sszetett fogalmakkal, mint az attrib\u00fatum protokoll (ATT) \u00e9s a k\u00f6z\u00f6s attrib\u00fatum profil (GATT). Azonban nem lehet elker\u00fclni ezeket, hogy kompatibilis eszk\u00f6z\u00f6ket fejlessz\u00fcnk. Ma szeretn\u00e9m megosztani veletek ezeket a tud\u00e1sokat. Cikkem alapj\u00e1t az <noindex><a rel=\"nofollow\" href=\"https:\/\/devzone.nordicsemi.com\/nordic\/short-range-guides\/b\/bluetooth-low-energy\/posts\/ble-characteristics-a-beginners-tutorial\">\u00fatmutat\u00f3<\/a><\/noindex> alapok kezd\u0151knek a Nordic weboldal\u00e1r\u00f3l k\u00e9pezi. L\u00e1ssuk h\u00e1t.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Mi\u00e9rt olyan bonyolult minden?<\/h3>\n<p>\nSzerintem egy\u00e9rtelm\u0171 volt, hogy az eszk\u00f6z\u00f6k okostelefonokon kereszt\u00fcli ir\u00e1ny\u00edt\u00e1sa egy nagyon \u00edg\u00e9retes \u00e9s hossz\u00fa t\u00e1v\u00fa t\u00e9ma. Ez\u00e9rt \u00fagy d\u00f6nt\u00f6ttek, hogy azonnal struktur\u00e1lj\u00e1k, \u00e9s maxim\u00e1lisan kihaszn\u00e1lj\u00e1k. A gy\u00e1rt\u00f3k ne tal\u00e1ljanak ki saj\u00e1t protokollokat, amelyek k\u00e9s\u0151bb nem lesznek kompatibilisek. Innen sz\u00e1rmazik a bonyolults\u00e1g. M\u00e1r az els\u0151 szakaszban a BLE protokollba minden bele akartak pr\u00e9selni, ami csak lehets\u00e9ges. \u00c9s nem sz\u00e1m\u00edt, hogy k\u00e9s\u0151bb sz\u00fcks\u00e9g lesz-e r\u00e1 vagy sem. Ezen k\u00edv\u00fcl el\u0151rel\u00e1tt\u00e1k a j\u00f6v\u0151beni eszk\u00f6zlist\u00e1k b\u0151v\u00edt\u00e9s\u00e9nek lehet\u0151s\u00e9g\u00e9t.<\/p>\n<p>N\u00e9zz\u00fck meg a k\u00e9pet, amely a BLE protokoll s\u00e9m\u00e1j\u00e1t mutatja. T\u00f6bb r\u00e9tegb\u0151l \u00e1ll. A legalacsonyabb, fizikai r\u00e9teg (PHY) felel\u0151s az eszk\u00f6z r\u00e1di\u00f3csatorn\u00e1j\u00e1\u00e9rt. A Link Layer (LL) tartalmazza a tov\u00e1bb\u00edtott \u00fczenet \u00f6sszes byte-j\u00e1nak sorrendj\u00e9t. Kor\u00e1bbi cikkeinkben ezt tanulm\u00e1nyoztuk. A Host Controller Interface (HCI) \u2013 a r\u00e9tegek k\u00f6z\u00f6tti vagy BLE chip-ek k\u00f6z\u00f6tti kommunik\u00e1ci\u00f3s protokoll, ha a vez\u00e9rl\u0151 \u00e9s a gazda k\u00fcl\u00f6n chipen val\u00f3sul meg. A csomagok form\u00e1l\u00e1s\u00e1\u00e9rt, keretekre oszt\u00e1s\u00e1\u00e9rt, hibakontroll\u00e9rt \u00e9s csomaggy\u0171jt\u00e9s\u00e9rt a Logical Link Control and Adaptation Protocol (L2CAP) felel\u0151s. A csomagok titkos\u00edt\u00e1s\u00e1\u00e9rt a Security Manager Protocol (SMP) felel\u0151s. A k\u00f6zvetlen hozz\u00e1f\u00e9r\u00e9si profil (GAP) felel\u0151s az eszk\u00f6z\u00f6k k\u00f6z\u00f6tti kezdeti adatcser\u00e9\u00e9rt, hogy meghat\u00e1rozz\u00e1k, \u201eKi kicsoda\u201d. Ezenk\u00edv\u00fcl a beolvas\u00e1s \u00e9s rekl\u00e1moz\u00e1s is ehhez kapcsol\u00f3dik. Ebben a cikkben a protokoll k\u00e9t marad\u00e9k r\u00e9sz\u00e9re szeretn\u00e9k koncentr\u00e1lni \u2013 GATT \u00e9s ATT. A GATT az ATT f\u00f6l\u00f6tti r\u00e9teg, ez\u00e9rt szoros kapcsolatban \u00e1llnak egym\u00e1ssal.<\/p>\n<p><img decoding=\"async\" alt=\"BLE a mikroszk\u00f3p alatt (ATT-k GATT-k...)\" src=\"\/wp-content\/uploads\/2020\/06\/8060076152cfe3ae648eca362889e571.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA t\u00f6rt\u00e9net egyszer\u0171s\u00edt\u00e9se \u00e9rdek\u00e9ben egy anal\u00f3gi\u00e1t szeretn\u00e9k felhozni. Valahol hallottam, \u00e9s szeretn\u00e9m t\u00e1mogatni. K\u00e9pzeljen el egy BLE eszk\u00f6zt, mint egy k\u00f6nyvespolcot, t\u00f6bb polccal. Minden polc egy k\u00fcl\u00f6nf\u00e9le t\u00e9m\u00e1t k\u00e9pvisel. P\u00e9ld\u00e1ul van egy polcunk a fantasztikumnak, a matematik\u00e1nak, az enciklop\u00e9di\u00e1knak. Minden polcon a megadott t\u00e9ma szerinti k\u00f6nyvek tal\u00e1lhat\u00f3k. N\u00e9h\u00e1ny k\u00f6nyvben m\u00e9g pap\u00edralap\u00fa k\u00f6nyvjelz\u0151k is vannak feljegyz\u00e9sekkel. Emellett van egy kis pap\u00edralap\u00fa katal\u00f3gusunk az \u00f6sszes k\u00f6nyvr\u0151l. Ha eml\u00e9kszik az iskolai k\u00f6nyvt\u00e1rakra \u2014 ez egy keskeny fi\u00f3k pap\u00edralap\u00fa k\u00e1rty\u00e1kkal. Ebben az anal\u00f3gi\u00e1ban a szekr\u00e9ny az eszk\u00f6z\u00fcnk profilj\u00e1t jelenti. A polcok a szolg\u00e1ltat\u00e1sokat, a k\u00f6nyvek a jellemz\u0151ket, a katal\u00f3gus pedig az attrib\u00fatumok t\u00e1bl\u00e1zat\u00e1t. A k\u00f6nyvjelz\u0151k a k\u00f6nyvekben azok a le\u00edr\u00f3k, amelyeket k\u00e9s\u0151bb r\u00e9szletesebben is bemutatok.<\/p>\n<p>Mindenki, aki eszk\u00f6z\u00f6ket fejlesztett, tudja, hogy sok projektben vannak hasonl\u00f3 k\u00f3dok. Az igazs\u00e1g az, hogy sok eszk\u00f6z hasonl\u00f3 funkci\u00f3kkal b\u00edr. P\u00e9ld\u00e1ul ha az eszk\u00f6z\u00f6k akkumul\u00e1torr\u00f3l m\u0171k\u00f6dnek, akkor a t\u00f6lt\u00e9s \u00e9s a szintellen\u0151rz\u00e9s probl\u00e9m\u00e1ja azonos lesz. Ugyanez vonatkozik az \u00e9rz\u00e9kel\u0151kre is. Val\u00f3j\u00e1ban az objektumorient\u00e1lt programoz\u00e1si megk\u00f6zel\u00edt\u00e9s <i>\u201elehet\u0151v\u00e9 teszi olyan objektumok l\u00e9trehoz\u00e1s\u00e1t, amelyek \u00f6sszekapcsolj\u00e1k a tulajdons\u00e1gokat \u00e9s viselked\u00e9seket egy \u00f6n\u00e1ll\u00f3 sz\u00f6vets\u00e9gbe, amely ezut\u00e1n t\u00f6bbsz\u00f6r is felhaszn\u00e1lhat\u00f3\u201d<\/i>. V\u00e9lem\u00e9nyem szerint a BLE eset\u00e9ben pr\u00f3b\u00e1lkoz\u00e1s t\u00f6rt\u00e9nt hasonl\u00f3 megk\u00f6zel\u00edt\u00e9ssel. A Bluetooth Special Interest Group (SIG) \u00e1ltal profilokat dolgoztak ki. Azok az eszk\u00f6z\u00f6k, amelyek azonos profilokkal rendelkeznek k\u00fcl\u00f6nb\u00f6z\u0151 gy\u00e1rt\u00f3kt\u00f3l, z\u00f6kken\u0151mentesen kell, hogy m\u0171k\u00f6djenek egym\u00e1ssal. A profilok szolg\u00e1ltat\u00e1sokb\u00f3l \u00e1llnak, a szolg\u00e1ltat\u00e1sok pedig jellemz\u0151kb\u0151l, amelyeket le\u00edr\u00f3k eg\u00e9sz\u00edtenek ki. \u00c1ltal\u00e1noss\u00e1gban ez \u00edgy n\u00e9zhet ki:<\/p>\n<p><img decoding=\"async\" alt=\"BLE a mikroszk\u00f3p alatt (ATT-k GATT-k...)\" src=\"\/wp-content\/uploads\/2020\/06\/34cbbeee142d40e56dff7626ef752d42.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00e9ld\u00e1nak ok\u00e1\u00e9rt vegy\u00fck a sz\u00edvritmus-monitor profilj\u00e1nak s\u00e9m\u00e1j\u00e1t (fitness kark\u00f6t\u0151). K\u00e9t szolg\u00e1ltat\u00e1sb\u00f3l \u00e9s t\u00f6bb jellemz\u0151b\u0151l \u00e1ll. Azonnal vil\u00e1gos a profil hierarchi\u00e1ja. A kontrollpont jellemz\u0151 vissza\u00e1ll\u00edtja a kal\u00f3ri\u00e1k \u00f6sszes\u00edtett fogyaszt\u00e1s\u00e1nak sz\u00e1m\u00e1t null\u00e1ra. <\/p>\n<p>1. A sz\u00edvritmus szolg\u00e1ltat\u00e1s h\u00e1rom jellemz\u0151t tartalmaz (0x180D):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;a) K\u00f6telez\u0151 jellemz\u0151 a sz\u00edvver\u00e9s sz\u00e1m\u00e1r\u00f3l (0x2A37)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;b) Opci\u00f3s jellemz\u0151 a test\u00e9rz\u00e9kel\u0151 helyzet\u00e9r\u0151l (0x2A38)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;c) Felt\u00e9teles jellemz\u0151 a sz\u00edvritmus kontrollpontr\u00f3l (0x2A39)<br \/>\n2. Az akkumul\u00e1tor \u00fczemeltet\u00e9se szolg\u00e1ltat\u00e1s (0x180F):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;a) K\u00f6telez\u0151 akkumul\u00e1tor t\u00f6lt\u00f6tts\u00e9gi szint jellemz\u0151 (0x2A19)<\/p>\n<h3>UUID<\/h3>\n<p>\nAhhoz, hogy egy\u00e9rtelm\u0171en hivatkozhassunk a profil elemeire (szolg\u00e1ltat\u00e1sok, jellemz\u0151k \u00e9s le\u00edr\u00f3k), sz\u00e1moznunk kell azokat. Erre az Universally Unique ID (UUID) vagyis a Vil\u00e1gos egyedi azonos\u00edt\u00f3 fogalm\u00e1t vezett\u00e9k be. Minden sorban a z\u00e1r\u00f3jelben pontosan az UUID szerepel. Van egy k\u00fcl\u00f6nlegess\u00e9g ezzel kapcsolatban. Az UUID-hoz 16 \u00e9s 128 bites k\u00f3dot haszn\u00e1lnak. Mi\u00e9rt, k\u00e9rdezheted? A BLE protokollban minden az energiafogyaszt\u00e1s meg\u0151rz\u00e9s\u00e9r\u0151l sz\u00f3l. Ez\u00e9rt a 16 bites m\u00e9ret teljesen \u00e9sszer\u0171. Val\u00f3sz\u00edn\u0171, hogy a k\u00f6zelj\u00f6v\u0151ben nem lesz t\u00f6bb mint 65 ezer egyedi szolg\u00e1ltat\u00e1s \u00e9s jellemz\u0151. Jelenleg mindent, amit lehetett, m\u00e1r kisz\u00e1moltunk (eml\u00e9kszel, honnan van ez \u2013 \u201e\u0151 is sz\u00e1ml\u00e1lta \u00d6nt\u201d :-)) A sz\u00e1mozott elemek <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/\">profilok<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/services\/\">szolg\u00e1ltat\u00e1sok<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/characteristics\/\">jellemz\u0151k<\/a><\/noindex> \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/descriptors\/\">le\u00edr\u00f3k<\/a><\/noindex> megtekinthet\u0151k a hivatkoz\u00e1sokon.<\/p>\n<p>Viszont azt hiszem, mindenki eml\u00e9kszik a n\u00e9gy b\u00e1jtos IP-c\u00edmek t\u00f6rt\u00e9net\u00e9re az interneten. El\u0151sz\u00f6r azt gondolt\u00e1k, ez elegend\u0151 lesz, de m\u00e9g mindig nem tudunk \u00e1tt\u00e9rni a hat b\u00e1jtos c\u00edmre. Annak \u00e9rdek\u00e9ben, hogy elker\u00fclj\u00fck ezt a hib\u00e1t, \u00e9s hogy teret adjunk a bark\u00e1csol\u00f3 kezeknek, a SIG azonnal bevezette a 128 bites UUID-kat. Ez sz\u00e1momra a 433 MHz-es illeg\u00e1lis s\u00e1vra eml\u00e9keztet, amelyet a lehet\u0151s\u00e9gek szerint szabadon engedtek a r\u00e1di\u00f3csatorn\u00e1ra. Az eset\u00fcnkben a 128 bites azonos\u00edt\u00f3k szabadon hirdettek. Ez azt jelenti, hogy a szolg\u00e1ltat\u00e1sainkhoz \u00e9s eszk\u00f6zeinkhez gyakorlatilag b\u00e1rmilyen 128 bites \u00e9rt\u00e9ket haszn\u00e1lhatunk. Az es\u00e9ly, hogy azonos UUID-t tal\u00e1ljunk, gyakorlatilag nulla.<\/p>\n<p>Val\u00f3j\u00e1ban a r\u00f6vid 16 bites UUID-nak van egy kiterjeszt\u00e9se a 128 bites \u00e9rt\u00e9khez. A specifik\u00e1ci\u00f3ban ezt a kiterjeszt\u00e9st Bluetooth Base UUID-nak h\u00edvj\u00e1k, \u00e9s \u00e9rt\u00e9ke 00000000-0000-1000-8000-00805F9B34FB. P\u00e9ld\u00e1ul, ha a 16 bites atrib\u00fatum UUID \u00e9rt\u00e9ke 0x1234, akkor az ehhez tartoz\u00f3 128 bites UUID \u00e9rt\u00e9ke 00001234-0000-1000-8000-00805F9B34FB lesz. A megfelel\u0151 k\u00e9plet is meg van adva:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;128_bit_value = 16_bit_value * 2^96 + Bluetooth_Base_UUID<\/p>\n<p>Honnan sz\u00e1rmazik ez a m\u00e1gikus sz\u00e1m, azt nem tudom. Ha valaki a kedves olvas\u00f3k k\u00f6z\u00fcl tudja, ne habozzon komment\u00e1lni (A Sinopteek nev\u0171 felhaszn\u00e1l\u00f3 m\u00e1r meg is tette. N\u00e9zd meg a kommenteket). Ami a 128 bites UUID-k kital\u00e1l\u00e1s\u00e1t illeti, alapvet\u0151en haszn\u00e1lhatsz egy speci\u00e1lis <noindex><a rel=\"nofollow\" href=\"https:\/\/www.famkruithof.net\/uuid\/uuidgen\">gener\u00e1tort<\/a><\/noindex>, amely ezt elv\u00e9gzi helyetted.<\/p>\n<h3>ATT GATT...<\/h3>\n<p>\n Most j\u00f6n a leg\u00e9rdekesebb r\u00e9sz. Eml\u00e9keztetem, hogy az ATT egy kliens-szerver kapcsolat alapjaira \u00e9p\u00fcl. Jelenleg a szerver fel\u00e9p\u00edt\u00e9s\u00e9t vizsg\u00e1ljuk. Ez olyan inform\u00e1ci\u00f3kat tartalmaz, mint a szenzorok \u00e9rt\u00e9kei, a vil\u00e1g\u00edt\u00f3 kapcsol\u00f3k \u00e1llapota, a helymeghat\u00e1roz\u00e1si adatok stb. Most, hogy minden 'par\u00e1d\u00e9nk r\u00e9sztvev\u0151je' fel van numer\u00e1lva, el kell \u0151ket helyezn\u00fcnk az eszk\u00f6z mem\u00f3ri\u00e1j\u00e1ban. Ehhez egy t\u00e1bl\u00e1zatba helyezz\u00fck \u0151ket, amit attrib\u00fatumt\u00e1bl\u00e1zatnak nevez\u00fcnk. J\u00f3l jegyezd meg ezt. Ez a BLE sz\u00edve. Ezt fogjuk k\u00e9s\u0151bb vizsg\u00e1lni. Mostant\u00f3l minden sorunkat attrib\u00fatumnak nevez\u00fcnk. Ez a t\u00e1bl\u00e1zat a verem m\u00e9ly\u00e9n tal\u00e1lhat\u00f3, \u00e9s \u00e1ltal\u00e1ban nincs k\u00f6zvetlen hozz\u00e1f\u00e9r\u00e9s\u00fcnk. Inicializ\u00e1ljuk \u00e9s hozz\u00e1f\u00e9r\u00fcnk, de ami bel\u00fcl t\u00f6rt\u00e9nik, az h\u00e9t pecs\u00e9t m\u00f6g\u00f6tt rejt\u0151zik el\u0151tt\u00fcnk. <\/p>\n<p>N\u00e9zz\u00fck meg a specifik\u00e1ci\u00f3b\u00f3l k\u00e9sz\u00fclt k\u00e9pet, viszont el\u0151tte szeretn\u00e9m felh\u00edvni a figyelmet egy gyakori terminol\u00f3giai f\u00e9lre\u00e9rt\u00e9sre, nevezetesen a le\u00edr\u00f3kra. A le\u00edr\u00f3 szerepe az, hogy kieg\u00e9sz\u00edtse a jellemz\u0151k le\u00edr\u00e1s\u00e1t. Amikor b\u0151v\u00edteni kell a lehet\u0151s\u00e9geit, akkor haszn\u00e1lj\u00e1k a le\u00edr\u00f3kat. Ezek is attrib\u00fatumok, \u00e9s a szolg\u00e1ltat\u00e1sokkal \u00e9s jellemz\u0151kkel egyenrang\u00faan az attrib\u00fatumt\u00e1bl\u00e1zatban helyezkednek el. R\u00e9szletesen megvizsg\u00e1ljuk \u0151ket a cikk m\u00e1sodik r\u00e9sz\u00e9ben. Azonban n\u00e9ha a le\u00edr\u00f3kat az attrib\u00fatumt\u00e1bl\u00e1zat sor\u00e1nak sz\u00e1mak\u00e9nt emlegetik. Ezt \u00e9rdemes \u00e9szben tartani. Mi elker\u00fclj\u00fck a f\u00e9lre\u00e9rt\u00e9seket, ez\u00e9rt ezekre a c\u00e9lokra az 'attrib\u00fatum mutat\u00f3' kifejez\u00e9st haszn\u00e1ljuk.<br \/>\n<img decoding=\"async\" alt=\"BLE a mikroszk\u00f3p alatt (ATT-k GATT-k...)\" src=\"\/wp-content\/uploads\/2020\/06\/6df836477b153c396bdba9068129bb6f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeh\u00e1t az attrib\u00fatum egy diszkr\u00e9t \u00e9rt\u00e9k, amelynek a k\u00f6vetkez\u0151, hozz\u00e1 kapcsol\u00f3d\u00f3 tulajdons\u00e1gai vannak:<br \/>\n1. Attrib\u00fatum mutat\u00f3 (Attribute Handle) \u2014 a t\u00e1bl\u00e1zat indexe, amely megfelel az attrib\u00fatumnak <br \/>\n2. Attrib\u00fatum t\u00edpusa (Attribute Type) \u2014 az UUID, amely le\u00edrja a t\u00edpus\u00e1t <br \/>\n3. Attrib\u00fatum \u00e9rt\u00e9ke (Attribute Value) \u2014 az attrib\u00fatum mutat\u00f3j\u00e1val indexelt adatok <br \/>\n4. Az attrib\u00fatumok enged\u00e9lyei (Attribute Permissions) \u2014 az attrib\u00fatum egy r\u00e9sze, az enged\u00e9lyek, amelyeket nem&nbsp;&nbsp;&nbsp;&nbsp; lehet olvasni vagy \u00edrni az attrib\u00fatumok protokollj\u00e1val.<\/p>\n<p>Hogyan \u00e9rtelmezz\u00fck mindezt? Az attrib\u00fatum mutat\u00f3, mondjuk, a sz\u00e1m a t\u00e1bl\u00e1zatunkban.<br \/>\nEz lehet\u0151v\u00e9 teszi a kliens sz\u00e1m\u00e1ra, hogy hivatkozzon egy attrib\u00fatumra olvas\u00e1si vagy \u00edr\u00e1si k\u00e9r\u00e9sekben. Mi a sorainkat (attrib\u00fatumainkat) 0x0001-t\u0151l 0xFFFF-ig sz\u00e1mozhatjuk. A k\u00f6nyvespolcunkkal val\u00f3 anal\u00f3gi\u00e1ban ez a k\u00e1rtya sz\u00e1ma a pap\u00edralap\u00fa katal\u00f3gusban. Hasonl\u00f3an, mint a k\u00f6nyvt\u00e1ri katal\u00f3gusban, a k\u00e1rty\u00e1k a sz\u00e1m n\u00f6vekv\u0151 sorrendj\u00e9ben helyezkednek el. Minden k\u00f6vetkez\u0151 sor sz\u00e1ma nagyobbnak kell lennie az el\u0151z\u0151n\u00e9l. Mint a k\u00f6nyvt\u00e1rban, n\u00e9ha el lehet vesz\u00edteni n\u00e9h\u00e1ny k\u00e1rty\u00e1t, \u00edgy n\u00e1lunk is lehetnek hi\u00e1nyz\u00f3 sorok a sz\u00e1moz\u00e1sban. Ez megengedett. A legfontosabb, hogy a sz\u00e1moz\u00e1s n\u00f6vekv\u0151 legyen.<\/p>\n<p>Az attrib\u00fatum t\u00edpusa hat\u00e1rozza meg, hogy az adott attrib\u00fatum mit jel\u00f6l. A C nyelvvel val\u00f3 anal\u00f3gi\u00e1t k\u00f6vetve,<br \/>\nahol vannak logikai, numerikus v\u00e1ltoz\u00f3k \u00e9s karakterl\u00e1ncok, itt is \u00edgy van. Az attrib\u00fatum t\u00edpusa alapj\u00e1n megtudjuk, <br \/>\nmivel \u00e1llunk szemben, \u00e9s hogyan dolgozzunk tov\u00e1bb azzal az attrib\u00fatummal. Az al\u00e1bbiakban \u00e1ttekint\u00fcnk n\u00e9h\u00e1ny specifikus attrib\u00fatumt\u00edpust. P\u00e9ld\u00e1ul a \u201eszolg\u00e1ltat\u00e1s deklar\u00e1ci\u00f3\u201d (0x2800), a \u201ejellemz\u0151 deklar\u00e1ci\u00f3\u201d (0x2803), a \u201ele\u00edr\u00f3 deklar\u00e1ci\u00f3\u201d (0x2902).<\/p>\n<p>Az attrib\u00fatum \u00e9rt\u00e9ke \u00f6nmag\u00e1ban az \u00e9rt\u00e9k, eln\u00e9z\u00e9st a tautol\u00f3gia miatt. Ha az attrib\u00fatum t\u00edpusa karakterl\u00e1nc, akkor az attrib\u00fatum \u00e9rt\u00e9ke lehet p\u00e9ld\u00e1ul a \u201eHello World !!!\u201d szlogen. Ha az attrib\u00fatum t\u00edpusa \u201eszolg\u00e1ltat\u00e1s deklar\u00e1ci\u00f3\u201d, akkor az \u00e9rt\u00e9ke mag\u00e1t a szolg\u00e1ltat\u00e1st jelenti. N\u00e9ha pedig arra vonatkoz\u00f3 inform\u00e1ci\u00f3t tartalmaz, hogy hol tal\u00e1lhat\u00f3k m\u00e1s attrib\u00fatumok \u00e9s azok tulajdons\u00e1gai.<\/p>\n<p>Az attrib\u00fatumok enged\u00e9lyei lehet\u0151v\u00e9 teszik a szerver sz\u00e1m\u00e1ra, hogy meg\u00e9rtse, enged\u00e9lyezett-e az olvas\u00e1s vagy \u00edr\u00e1s. <br \/>\nNe feledje, hogy ezek az enged\u00e9lyek csak az attrib\u00fatum \u00e9rt\u00e9k\u00e9re vonatkoznak, nem pedig az mutat\u00f3ra, t\u00edpusra \u00e9s az enged\u00e9lymez\u0151re mag\u00e1ra. Azaz, ha az attrib\u00fatum \u00edr\u00e1sa enged\u00e9lyezett, akkor p\u00e9ld\u00e1ul megv\u00e1ltoztathatjuk a \u201eHello World !!!\u201d sz\u00f6veget \u201eJ\u00f3 reggelt\u201d sz\u00f6vegre. De nem tilthatjuk meg \u00faj sor \u00edr\u00e1s\u00e1t, vagy nem v\u00e1ltoztathatjuk meg az attrib\u00fatum t\u00edpus\u00e1t, \u00e9s jel\u00f6lhetj\u00fck a sort \u201eszolg\u00e1ltat\u00e1s deklar\u00e1ci\u00f3\u201d-k\u00e9nt. Amikor a kliens kapcsol\u00f3dik a szerverhez, a kliens lek\u00e9ri annak attrib\u00fatumait. Ez lehet\u0151v\u00e9 teszi a kliens sz\u00e1m\u00e1ra, hogy megtudja, mit tud a szerver biztos\u00edtani. B\u00e1r nem k\u00f6telez\u0151 az \u00e9rt\u00e9kek olvas\u00e1sa \u00e9s \u00edr\u00e1sa.<\/p>\n<h3>Hogyan n\u00e9z ki ez<\/h3>\n<p>\nA GATT koncepci\u00f3ja az attrib\u00fatumok csoportos\u00edt\u00e1s\u00e1ra \u00f6sszpontos\u00edt az attrib\u00fatumt\u00e1bl\u00e1zatban, nagyon specifikus \u00e9s logikai sorrendben. N\u00e9zz\u00fck meg k\u00f6zelebbr\u0151l a sz\u00edvver\u00e9sprofil p\u00e9ld\u00e1j\u00e1t az al\u00e1bbiakban. A t\u00e1bl\u00e1zat legbaloldali oszlopa nem k\u00f6telez\u0151. Csak azt \u00edrja le, hogy mi ez a sor (attrib\u00fatum). Minden egy\u00e9b oszlop sz\u00e1munkra m\u00e1r ismer\u0151s.<\/p>\n<p><img decoding=\"async\" alt=\"BLE a mikroszk\u00f3p alatt (ATT-k GATT-k...)\" src=\"\/wp-content\/uploads\/2020\/06\/110813482dacb0f19cb49e735f4a9e34.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMinden csoport tetej\u00e9n mindig az \u00e9rtes\u00edt\u00e9si attrib\u00fatum tal\u00e1lhat\u00f3. A t\u00edpusa mindig 0x2800, \u00e9s a mutat\u00f3 att\u00f3l f\u00fcgg, hogy h\u00e1ny attrib\u00fatum van m\u00e1r a t\u00e1bl\u00e1zatban. A jogosults\u00e1gai mindig csak olvashat\u00f3k, an\u00e9lk\u00fcl, hogy b\u00e1rmilyen hiteles\u00edt\u00e9si vagy enged\u00e9lyez\u00e9si ellen\u0151rz\u00e9s lenne. Ezekkel a fogalmakkal k\u00e9s\u0151bb fogunk foglalkozni. Az \u00e9rt\u00e9k egy m\u00e1sik UUID, amely meghat\u00e1rozza, hogy mi ez a szolg\u00e1ltat\u00e1s. A t\u00e1bl\u00e1zatban az \u00e9rt\u00e9k 0x180D, amelyet a Bluetooth SIG a sz\u00edvver\u00e9s szolg\u00e1ltat\u00e1sak\u00e9nt hat\u00e1roz meg. <\/p>\n<p>A szolg\u00e1ltat\u00e1s bejelent\u00e9se ut\u00e1n a jellemz\u0151 bejelent\u00e9se k\u00f6vetkezik. Alakja hasonl\u00f3 a szolg\u00e1ltat\u00e1s bejelent\u00e9s\u00e9hez. Az UUID mindig 0x2803, \u00e9s a jogosults\u00e1gok is mindig csak olvashat\u00f3k, an\u00e9lk\u00fcl, hogy b\u00e1rmilyen hiteles\u00edt\u00e9si vagy enged\u00e9lyez\u00e9si ellen\u0151rz\u00e9s lenne. N\u00e9zz\u00fck meg az Attribute Value mez\u0151t, amely n\u00e9h\u00e1ny adatot tartalmaz. Mindig tartalmaz egy mutat\u00f3t, egy UUID-t \u00e9s egy tulajdons\u00e1gk\u00e9szletet. Ezek a h\u00e1rom elem le\u00edrja a jellemz\u0151 \u00e9rt\u00e9k bejelent\u00e9s\u00e9t. A mutat\u00f3 term\u00e9szet\u00e9n\u00e9l fogva azt jel\u00f6li, hogy hol tal\u00e1lhat\u00f3 a jellemz\u0151 \u00e9rt\u00e9k bejelent\u00e9se az attrib\u00fatumt\u00e1bl\u00e1zatban. Az UUID le\u00edrja, hogy milyen t\u00edpus\u00fa inform\u00e1ci\u00f3t vagy \u00e9rt\u00e9ket v\u00e1rhatunk. P\u00e9ld\u00e1ul h\u0151m\u00e9rs\u00e9klet, vil\u00e1g\u00edt\u00f3 kapcsol\u00f3 \u00e1llapota, vagy b\u00e1rmilyen m\u00e1s tetsz\u0151leges \u00e9rt\u00e9k. V\u00e9g\u00fcl pedig a tulajdons\u00e1gok le\u00edrj\u00e1k, hogyan lehet interakci\u00f3ba l\u00e9pni a jellemz\u0151 \u00e9rt\u00e9k\u00e9vel. <\/p>\n<p>Itt m\u00e9g egy csapda v\u00e1r r\u00e1nk. Ez a jogosults\u00e1gokkal \u00e9s a jellemz\u0151k tulajdons\u00e1gaival kapcsolatos. N\u00e9zz\u00fck meg a tulajdons\u00e1gok bitmez\u0151j\u00e9nek \u00e1br\u00e1j\u00e1t a specifik\u00e1ci\u00f3b\u00f3l.<\/p>\n<p><img decoding=\"async\" alt=\"BLE a mikroszk\u00f3p alatt (ATT-k GATT-k...)\" src=\"\/wp-content\/uploads\/2020\/06\/7397f7f69e573ae3084cbacdcd318829.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAhogy l\u00e1that\u00f3, itt is vannak mez\u0151k, amelyek olvas\u00e1si \u00e9s \u00edr\u00e1si lehet\u0151s\u00e9geket biztos\u00edtanak. Felmer\u00fclhet a k\u00e9rd\u00e9s, mi\u00e9rt van olvas\u00e1si\/\u00edr\u00e1si jogosults\u00e1gunk az attrib\u00fatumra \u00e9s a tulajdons\u00e1gra. <br \/>\nJellemz\u0151 \u00e9rt\u00e9kek eset\u00e9n a felolvas\u00e1s\/\u00edr\u00e1s mi\u00e9rt nem lehet mindig azonos? A tulajdons\u00e1gok a jellemz\u0151 \u00e9rt\u00e9khez val\u00f3j\u00e1ban csak aj\u00e1nl\u00e1sok az \u00fcgyf\u00e9l sz\u00e1m\u00e1ra, amelyeket a GATT \u00e9s az alkalmaz\u00e1si r\u00e9tegek haszn\u00e1lnak. Ezek csup\u00e1n \u00fatmutat\u00e1sok arr\u00f3l, hogy mit v\u00e1rhat el az \u00fcgyf\u00e9l a jellemz\u0151 nyilatkozat\u00e1nak attrib\u00fatum\u00e1t\u00f3l. N\u00e9zz\u00fck meg ezt r\u00e9szletesebben. Milyen t\u00edpus\u00fa enged\u00e9lyez\u00e9sek vannak az attrib\u00fatumn\u00e1l? <\/p>\n<p>1. Hozz\u00e1f\u00e9r\u00e9si enged\u00e9lyek:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 olvas\u00e1s<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 \u00edr\u00e1s<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 olvas\u00e1s \u00e9s \u00edr\u00e1s<br \/>\n2. Hiteles\u00edt\u00e9si enged\u00e9ly:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 hiteles\u00edt\u00e9s sz\u00fcks\u00e9ges<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 hiteles\u00edt\u00e9s nem sz\u00fcks\u00e9ges<br \/>\n3. Jogosults\u00e1gi enged\u00e9ly:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 jogosults\u00e1g sz\u00fcks\u00e9ges<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 jogosults\u00e1g nem sz\u00fcks\u00e9ges<\/p>\n<p>A tulajdons\u00e1gi enged\u00e9lyek \u00e9s a jellemz\u0151k k\u00f6z\u00f6tti legfontosabb k\u00fcl\u00f6nbs\u00e9g az, hogy az el\u0151bbiek a kiszolg\u00e1l\u00f3kra vonatkoznak, m\u00edg az ut\u00f3bbiak az \u00fcgyfelekre. Lehet, hogy a kiszolg\u00e1l\u00f3n enged\u00e9lyezett a jellemz\u0151 \u00e9rt\u00e9k\u00e9nek olvas\u00e1sa, de van hiteles\u00edt\u00e9si vagy jogosults\u00e1gi k\u00f6vetelm\u00e9ny. Ez\u00e9rt amikor az \u00fcgyf\u00e9l a jellemz\u0151k tulajdons\u00e1gait k\u00e9rdezi, az olvas\u00e1s enged\u00e9lyezettnek t\u0171nik. De a t\u00e9nyleges olvas\u00e1si k\u00eds\u00e9rletn\u00e9l hiba l\u00e9p fel. Ez\u00e9rt b\u00e1tran kijelenthetj\u00fck, hogy az enged\u00e9lyek priorit\u00e1st \u00e9lveznek a tulajdons\u00e1gokkal szemben. Az, hogy milyen enged\u00e9lyek vannak az attrib\u00fatumn\u00e1l, az \u00fcgyf\u00e9l oldal\u00e1r\u00f3l nem \u00e9rhet\u0151 el.<\/p>\n<h3>Le\u00edr\u00f3<\/h3>\n<p>\nT\u00e9rj\u00fcnk vissza a t\u00e1bl\u00e1zatunkhoz. A jellemz\u0151 \u00e9rt\u00e9k bejelent\u00e9se ut\u00e1n a k\u00f6vetkez\u0151 attrib\u00fatumok bejelent\u00e9se lehets\u00e9ges: <br \/>\n1. \u00daj jellemz\u0151 bejelent\u00e9s (a szolg\u00e1ltat\u00e1sban sok jellemz\u0151 lehet)<br \/>\n2. \u00daj szolg\u00e1ltat\u00e1sbejelent\u00e9s (a t\u00e1bl\u00e1zatban sok lehet bel\u0151l\u00fck)<br \/>\n3. Le\u00edr\u00f3 bejelent\u00e9s <\/p>\n<p>A pulzusm\u00e9r\u00e9s jellemz\u0151i eset\u00e9ben a t\u00e1bl\u00e1zatunkban a jellemz\u0151 \u00e9rt\u00e9k\u00e9nek bejelent\u00e9s\u00e9t egy le\u00edr\u00f3 bejelent\u00e9se k\u00eds\u00e9ri. A le\u00edr\u00f3 egy olyan attrib\u00fatum, amely tov\u00e1bbi inform\u00e1ci\u00f3t ny\u00fajt a jellemz\u0151r\u0151l. Sz\u00e1mos le\u00edr\u00f3 l\u00e9tezik, amelyekr\u0151l r\u00e9szletesen besz\u00e9l\u00fcnk a cikk m\u00e1sodik r\u00e9sz\u00e9ben. Jelenleg csak a kliens jellemz\u0151k konfigur\u00e1ci\u00f3s le\u00edr\u00f3j\u00e1r\u00f3l (Client Characteristic Configuration Descriptor \u2013 CCCD) fogunk sz\u00f3lni. Ennek UUID-ja 0x2902. E le\u00edr\u00f3 seg\u00edts\u00e9g\u00e9vel a kliens lehet\u0151s\u00e9get kap arra, hogy aktiv\u00e1lja a szerveren az indik\u00e1ci\u00f3t vagy a notifik\u00e1ci\u00f3t. K\u00f6z\u00f6tt\u00fck a k\u00fcl\u00f6nbs\u00e9g kicsi, de m\u00e9gis l\u00e9tezik. A notifik\u00e1ci\u00f3 nem ig\u00e9nyel meger\u0151s\u00edt\u00e9st a kliens r\u00e9sz\u00e9r\u0151l, m\u00edg az indik\u00e1ci\u00f3 ezt megk\u00f6veteli, m\u00e9g ha ez a GATT szinten is t\u00f6rt\u00e9nik, elker\u00fclve az alkalmaz\u00e1s szintet. Mi\u00e9rt van ez \u00edgy, k\u00e9rdezhetn\u00e9? Sajnos, ezt nem tudom. Csak annyit mondhatok, hogy a Nordic szak\u00e9rt\u0151i a notifik\u00e1ci\u00f3 haszn\u00e1lat\u00e1t aj\u00e1nlj\u00e1k, k\u00fcl\u00f6n\u00f6sen az\u00e9rt, mert a csomag integrit\u00e1s\u00e1nak ellen\u0151rz\u00e9se (CRC seg\u00edts\u00e9g\u00e9vel) mindk\u00e9t esetben megt\u00f6rt\u00e9nik.<\/p>\n<h3>Z\u00e1r\u00e1s<\/h3>\n<p>\nA cikk v\u00e9g\u00e9n szeretn\u00e9m megeml\u00edteni, hogy az utols\u00f3 t\u00e1bl\u00e1zat kiss\u00e9 zavaros. Azonban erre az\u00e9rt figyeltem fel, mert a k\u00f6vetkez\u0151re t\u00e1maszkodom, <noindex><a rel=\"nofollow\" href=\"https:\/\/devzone.nordicsemi.com\/nordic\/short-range-guides\/b\/bluetooth-low-energy\/posts\/ble-characteristics-a-beginners-tutorial\">a Spotify d\u00f6nt\u00e9shozatali m\u00f3dszertan\u00e1r\u00f3l. Egyre t\u00f6bb felhaszn\u00e1l\u00f3 prefer\u00e1lja a zenehallgat\u00e1st mobilon a streaming szolg\u00e1ltat\u00e1sban, de a c\u00e9gn\u00e9l t\u00falnyom\u00f3r\u00e9szt webprogramoz\u00f3k dolgoznak. A Spotify elemezte ezt a helyzetet, \u00e9s \u00fagy d\u00f6nt\u00f6tt, hogy t\u00f6bb mobilfejleszt\u0151t vesz fel, valamint \u00e1tnevezi a webes szakembereket \u00faj ir\u00e1nyba:<\/a><\/noindex>amelyre t\u00e1maszkodom. A cikkem m\u00e1sodik r\u00e9sz\u00e9ben m\u00e9lyebbre szeretn\u00e9k mer\u00fclni a BlueTooth 4.0 specifik\u00e1ci\u00f3j\u00e1ban. Ott pontosabb s\u00e9m\u00e1k \u00e9s \u00e1br\u00e1k v\u00e1rnak r\u00e1nk. A harmadik r\u00e9szben pedig szeretn\u00e9m elemezni az egy Wireshark program seg\u00edts\u00e9g\u00e9vel kapott napl\u00f3t egy eszk\u00f6zt\u0151l, \u00e9s \u201e\u00e9l\u0151ben\u201d l\u00e1tni az \u00f6sszes olyan elm\u00e9letet, amelyet tanulm\u00e1nyozunk.<\/p>\n<p>A Csoport Szolg\u00e1ltat\u00e1s munkat\u00e1rsa <noindex><a rel=\"nofollow\" href=\"https:\/\/www.csat.ru\/\">\u201eC\u00e9z\u00e1r M\u0171hold\u201d<\/a><\/noindex><br \/>\nVladimir Pechersky<br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/505078\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b&#8230;) \u0427\u0430\u0441\u0442\u044c 1, \u043e\u0431\u0437\u043e\u0440\u043d\u0430\u044f \u0423\u0436\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0448\u043b\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 Bluetooth 4.0. \u0418, \u0445\u043e\u0442\u044f \u0442\u0435\u043c\u0430 BLE \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u043e\u043d\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c Link Layer \u0438 Physical Layer. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":84025,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-84024","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b...) \u0427\u0430\u0441\u0442\u044c 1.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b\u2026) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b...) \u0427\u0430\u0441\u0442\u044c 1.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-04T17:42:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-04T17:42:32+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47BLE a mikroszk\u00f3p alatt (ATT-k GATT-k\u2026) | ProHoster","description":"BLE a mikroszk\u00f3p alatt (ATT-k GATT-k...) 1. r\u00e9sz.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b\u2026) | ProHoster","og:description":"BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b...) \u0427\u0430\u0441\u0442\u044c 1.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-04T17:42:32+00:00","article:modified_time":"2020-06-04T17:42:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"84024","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:06:38","updated":"2022-09-28 11:11:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/84024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=84024"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/84024\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/84025"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=84024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=84024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=84024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}