{"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\/sk\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","title":{"rendered":"BLE pod mikroskopom (ATT a GATT...)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"BLE pod mikroskopom (ATT-y GATT-y...)\" src=\"\/wp-content\/uploads\/2020\/06\/d8587bf897b27457b354549b99399bcc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>BLE pod mikroskopom (ATT a GATT...)<\/h2>\n<p> <b>\u010cas\u0165 1, preh\u013ead<\/b><\/p>\n<p>U\u017e uplynulo dos\u0165 ve\u013ea \u010dasu od vydania prvej \u0161pecifik\u00e1cie Bluetooth 4.0. A aj ke\u010f je t\u00e9ma BLE ve\u013emi zauj\u00edmav\u00e1, st\u00e1le odradzuje mnoh\u00fdch v\u00fdvoj\u00e1rov svojou zlo\u017eitost\u00ed. V predch\u00e1dzaj\u00facich \u010dl\u00e1nkoch som sa venoval najm\u00e4 najni\u017e\u0161iemu levelu Link Layer a Physical Layer. To umo\u017enilo vyhn\u00fa\u0165 sa tak\u00fdm zlo\u017eit\u00fdm a zamotan\u00fdm pojmom ako protokol atrib\u00fatov (ATT) a v\u0161eobecn\u00fd profil atrib\u00fatov (GATT). Nem\u00e1me v\u0161ak na v\u00fdber, bez pochopenia t\u00fdchto pojmov nie je mo\u017en\u00e9 vyv\u00edja\u0165 kompatibiln\u00e9 zariadenia. Dnes by som sa s vami r\u00e1d podelil o tieto poznatky. V \u010dl\u00e1nku sa budem opiera\u0165 o <noindex><a rel=\"nofollow\" href=\"https:\/\/devzone.nordicsemi.com\/nordic\/short-range-guides\/b\/bluetooth-low-energy\/posts\/ble-characteristics-a-beginners-tutorial\">n\u00e1vody<\/a><\/noindex> pre za\u010diato\u010dn\u00edkov na str\u00e1nke Nordic. Tak po\u010fme na to.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Pre\u010do je v\u0161etko tak\u00e9 zlo\u017eit\u00e9?<\/h3>\n<p>\nPod\u013ea m\u00f4jho n\u00e1zoru bolo hne\u010f jasn\u00e9, \u017ee ovl\u00e1danie zariaden\u00ed prostredn\u00edctvom smartf\u00f3nov je ve\u013emi perspekt\u00edvna a dlhodob\u00e1 t\u00e9ma. Preto ju rozhodli \u0161trukt\u00farova\u0165 hne\u010f od za\u010diatku a maxim\u00e1lne. Aby v\u00fdrobcovia r\u00f4znych gadgetov nevym\u00fd\u0161\u013eali svoje protokoly, ktor\u00e9 by potom neboli kompatibiln\u00e9. Odtia\u013e prich\u00e1dza zlo\u017eitosti. U\u017e v prvej f\u00e1ze sa do protokolu BLE sna\u017eili vtesna\u0165 v\u0161etko, \u010do len bolo mo\u017en\u00e9. A nez\u00e1le\u017ealo na tom, \u010di to bude v bud\u00facnosti u\u017eito\u010dn\u00e9 alebo nie. Okrem toho bola predpokladan\u00e1 mo\u017enos\u0165 roz\u0161\u00edrenia zoznamu zariaden\u00ed do bud\u00facnosti.<\/p>\n<p>Pozrime sa na obr\u00e1zok, kde je nakreslen\u00e1 sch\u00e9ma protokolu BLE. Sklad\u00e1 sa z nieko\u013ek\u00fdch vrstiev. Najni\u017e\u0161ia, fyzick\u00e1 vrstva (PHY) zodpoved\u00e1 za r\u00e1diov\u00fd kan\u00e1l zariadenia. Link Layer (LL) obsahuje cel\u00fa sekvenciu bytov v pren\u00e1\u0161anom spr\u00e1ve. V predch\u00e1dzaj\u00facich \u010dl\u00e1nkoch sme sa venovali pr\u00e1ve jemu. Host Controller Interface (HCI) \u2014 je protokol v\u00fdmeny medzi vrstvami alebo \u010dipmi BLE, ak je Controller a Host implementovan\u00fd na r\u00f4znych \u010dipoch. Za formovanie paketov, delenie na r\u00e1mce, kontrolu ch\u00fdb a zber paketov zodpoved\u00e1 Logical Link Control and Adaptation Protocol (L2CAP). Za \u0161ifrovanie paketov zodpoved\u00e1 Security Manager Protocol (SMP). Profil v\u0161eobecn\u00e9ho pr\u00edstupu (GAP) zodpoved\u00e1 za po\u010diato\u010dn\u00fd v\u00fdmenn\u00fd d\u00e1t medzi zariadeniami, aby ur\u010dil \u201eKto je kto\u201c. K nemu patr\u00ed aj skenovanie a reklama. V tomto \u010dl\u00e1nku sa zastav\u00edm pri dvoch zvy\u0161n\u00fdch \u010dastiach protokolu \u2014 GATT a ATT. GATT je nadstavbou nad ATT, preto s\u00fa silno prepojen\u00e9.<\/p>\n<p><img decoding=\"async\" alt=\"BLE pod mikroskopom (ATT-y GATT-y...)\" src=\"\/wp-content\/uploads\/2020\/06\/8060076152cfe3ae648eca362889e571.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAby som zjednodu\u0161il rozpr\u00e1vanie, r\u00e1d by som uviedol anal\u00f3giu. R\u00e1d som ju niekde po\u010dul a chcel by som ju podpori\u0165. Predstavte si BLE zariadenie ako kni\u017enicu s nieko\u013ek\u00fdmi poli\u010dkami. Ka\u017ed\u00e1 poli\u010dka predstavuje samostatn\u00fa t\u00e9mu. Napr\u00edklad, m\u00e1me poli\u010dky s fantastikou, matematikou, encyklop\u00e9diami. Na ka\u017edej poli\u010dke s\u00fa knihy zaoberaj\u00face sa danou t\u00e9mou. A v niektor\u00fdch knih\u00e1ch s\u00fa dokonca papierov\u00e9 z\u00e1lo\u017eky so z\u00e1znamami. Okrem toho m\u00e1me mal\u00fd papierov\u00fd katal\u00f3g v\u0161etk\u00fdch kn\u00edh. Ak si pam\u00e4t\u00e1te \u0161kolsk\u00e9 kni\u017enice \u2014 to je \u00fazky z\u00e1suvn\u00fd box s papierov\u00fdmi karti\u010dkami. Pri takejto anal\u00f3gii je skri\u0148a profilom n\u00e1\u0161ho zariadenia. Poli\u010dky s\u00fa slu\u017eby, knihy s\u00fa charakteristiky a katal\u00f3g je tabu\u013eka atrib\u00fatov. Z\u00e1lo\u017eky v knih\u00e1ch s\u00fa deskriptory, o ktor\u00fdch sa e\u0161te podrobnej\u0161ie zmienim nesk\u00f4r.<\/p>\n<p>V\u0161etci, ktor\u00ed vyv\u00edjali zariadenia, vedia, \u017ee v mnoh\u00fdch projektoch sa objavuj\u00fa podobn\u00e9 kusy k\u00f3du. Faktom je, \u017ee mnoh\u00e9 zariadenia maj\u00fa podobn\u00fa funkcionalitu. Napr\u00edklad, ak zariadenia funguj\u00fa na bat\u00e9rie, probl\u00e9m nab\u00edjania a kontroly ich \u00farovne bude rovnak\u00fd. To ist\u00e9 plat\u00ed aj pre senzory. Vlastne, objektovo orientovan\u00fd pr\u00edstup v programovan\u00ed <i>\"umo\u017e\u0148uje vytv\u00e1ra\u0165 objekty, ktor\u00e9 sp\u00e1jaj\u00fa vlastnosti a spr\u00e1vanie do samostatnej jednoty, ktor\u00fa mo\u017eno potom opakovane pou\u017ei\u0165\"<\/i>. Pod\u013ea m\u00f4jho n\u00e1zoru sa v BLE pok\u00fasili o podobn\u00fd pr\u00edstup. Skupina Bluetooth Special Interest Group (SIG) vyvinula profily. Zariadenia od r\u00f4znych v\u00fdrobcov, ktor\u00e9 maj\u00fa rovnak\u00e9 profily, by mali bez probl\u00e9mov fungova\u0165 spolu. Profily sa zasa skladaj\u00fa zo slu\u017eieb a slu\u017eby z charakterist\u00edk, doplnen\u00fdch o deskriptory. V\u0161eobecne to m\u00f4\u017ee vyzera\u0165 takto:<\/p>\n<p><img decoding=\"async\" alt=\"BLE pod mikroskopom (ATT-y GATT-y...)\" src=\"\/wp-content\/uploads\/2020\/06\/34cbbeee142d40e56dff7626ef752d42.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa pr\u00edklade zv\u00e1\u017eme sch\u00e9mu profilu heart rate monitor (fitness n\u00e1ramok). Sklad\u00e1 sa z dvoch slu\u017eieb a nieko\u013ek\u00fdch charakterist\u00edk. Z nej je hne\u010f zrejm\u00e1 hierarchia profilu. Charakteristika kontroln\u00e9ho bodu resetuje celkov\u00fd po\u010det sp\u00e1len\u00fdch kal\u00f3ri\u00ed na nulu. <\/p>\n<p>1. Slu\u017eba srdcovej frekvencie obsahuje tri charakteristiky (0x180D):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;a) Povinn\u00e1 charakteristika srdcovej frekvencie (0x2A37)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;b) Volite\u013en\u00e1 charakteristika polohy sn\u00edma\u010da tela (0x2A38)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;c) Podmienen\u00e1 charakteristika kontroln\u00e9ho bodu srdcovej frekvencie (0x2A39)<br \/>\n2. Slu\u017eba spr\u00e1vy bat\u00e9rie (0x180F):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;a) Povinn\u00e1 vlastnos\u0165 \u00farovne nabitia bat\u00e9rie (0x2A19)<\/p>\n<h3>UUID<\/h3>\n<p>\nAby sme mohli jednozna\u010dne odkazova\u0165 na prvky profilu (slu\u017eby, vlastnosti a deskriptory), mus\u00edme ich nejak\u00fdm sp\u00f4sobom o\u010d\u00edslova\u0165. Na tento \u00fa\u010del sa zav\u00e1dza pojem Universally Unique ID (UUID) alebo Univerz\u00e1lny jedine\u010dn\u00fd identifik\u00e1tor. V z\u00e1tvorke ka\u017edej riadku je uveden\u00fd pr\u00e1ve UUID. A tu je jedna \u0161peci\u00e1lnos\u0165. Pre UUID sa rozhodlo pou\u017ei\u0165 k\u00f3d dlh\u00fd 16 a 128 bitov. Pre\u010do, p\u00fdtate sa? V protokole BLE je v\u0161etko podriaden\u00e9 \u00faspore energie. Preto je ve\u013ekos\u0165 16 bitov celkom rozumn\u00e1.  \u0165a\u017eko sa v bl\u00edzkej bud\u00facnosti vytvor\u00ed viac ako 65 tis\u00edc jedine\u010dn\u00fdch slu\u017eieb a vlastnost\u00ed. V s\u00fa\u010dasnosti je v\u0161etko, \u010do mohli, u\u017e spo\u010d\u00edtan\u00e9 (pam\u00e4tajte, odkia\u013e to je \u2014 \u201eon a v\u00e1s spo\u010d\u00edtal\u201c :-)) O\u010d\u00edslovan\u00e9 prvky <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/\">profilov<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/services\/\">slu\u017eieb<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/characteristics\/\">vlastnost\u00ed<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/descriptors\/\">deskriptorov<\/a><\/noindex> m\u00f4\u017eete si pozrie\u0165 cez odkazy.<\/p>\n<p>Av\u0161ak, mysl\u00edm, \u017ee si v\u0161etci pam\u00e4taj\u00fa pr\u00edbeh so 4 bajtmi IP adresy na internete. Najprv si mysleli, \u017ee to sta\u010d\u00ed, a teraz sa st\u00e1le nem\u00f4\u017eeme prepn\u00fa\u0165 na 6-bajtov\u00fa adresu. Aby sme neopakovali t\u00fato chybu a dali priestor \u0161ikovn\u00fdm ruk\u00e1m dom\u00e1cich majstrov, SIG sa ihne\u010f rozhodla zavies\u0165 aj 128-bitov\u00e9 UUID. Osobne mi to pripom\u00edna nelicencovan\u00e9 p\u00e1smo 433 MHz, ktor\u00e9 bolo ponechan\u00e9 vo\u013en\u00fdm ruk\u00e1m r\u00f4znych kutilov od r\u00e1diov\u00e9ho kan\u00e1la. V na\u0161om pr\u00edpade bol 128-bitov\u00fd identifik\u00e1tor slu\u017eieb a vlastnost\u00ed odovzdan\u00fd na vo\u013en\u00e9 pou\u017eitie. To znamen\u00e1, \u017ee pre svoje slu\u017eby a zariadenia m\u00f4\u017eeme pou\u017ei\u0165 prakticky ak\u00fako\u013evek 128-bitov\u00fa hodnotu. Aj tak pravdepodobnos\u0165 vymyslie\u0165 rovnak\u00e9 UUID sa bl\u00ed\u017ei nule.<\/p>\n<p>V skuto\u010dnosti maj\u00fa kr\u00e1tke 16-bitov\u00e9 UUID svoje roz\u0161\u00edrenie na 128-bitov\u00fa hodnotu. V \u0161pecifik\u00e1cii sa toto roz\u0161\u00edrenie naz\u00fdva Bluetooth Base UUID a m\u00e1 hodnotu 00000000-0000-1000-8000-00805F9B34FB. Ak m\u00e1 napr\u00edklad 16-bitov\u00e9 UUID atrib\u00fatu hodnotu 0x1234, ekvivalentn\u00e9 128-bitov\u00e9 UUID bude ma\u0165 hodnotu 00001234-0000-1000-8000-00805F9B34FB. A dokonca je uveden\u00fd zodpovedaj\u00faci vzorec:<\/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>Odkia\u013e sa vzalo toto magick\u00e9 \u010d\u00edslo, neviem. Ak niekto z \u010ditate\u013eov vie \u2014 nech nap\u00ed\u0161e v koment\u00e1roch (Pou\u017e\u00edvate\u013e s nickom Sinopteek u\u017e to urobil. Pozrite si koment\u00e1re). \u010co sa t\u00fdka vym\u00fd\u0161\u013eania 128-bitov\u00fdch UUID, v z\u00e1sade sa d\u00e1 vyu\u017ei\u0165 \u0161peci\u00e1lny <noindex><a rel=\"nofollow\" href=\"https:\/\/www.famkruithof.net\/uuid\/uuidgen\">gener\u00e1tor<\/a><\/noindex>, ktor\u00fd to urob\u00ed za v\u00e1s.<\/p>\n<h3>ATT\u044b GATT\u044b\u2026<\/h3>\n<p>\n Teraz sa za\u010d\u00edna to najzauj\u00edmavej\u0161ie. Pripom\u00ednam, \u017ee ATT je zalo\u017een\u00fd na klient-server vz\u0165ahu. Teraz sa pozer\u00e1me na zariadenie servera. Obsahuje inform\u00e1cie ako hodnoty senzorov, stav sveteln\u00e9ho vyp\u00edna\u010da, \u00fadaje o polohe a podobne. Teraz, ke\u010f s\u00fa v\u0161etci \u201e\u00fa\u010dastn\u00edci n\u00e1\u0161ho sprievodu\u201c o\u010d\u00edslovan\u00ed, je potrebn\u00e9 ich nejak\u00fdm sp\u00f4sobom umiestni\u0165 do pam\u00e4te zariadenia. Na tento \u00fa\u010del ich vlo\u017e\u00edme do tabu\u013eky, ktor\u00e1 sa naz\u00fdva tabu\u013eka atrib\u00fatov. D\u00f4kladne si to zapam\u00e4tajte. To je srdce BLE. Presne to budeme sk\u00fama\u0165 \u010falej. Ka\u017ed\u00fd riadok teraz budeme naz\u00fdva\u0165 atrib\u00fatom. T\u00e1to tabu\u013eka sa nach\u00e1dza hlboko v z\u00e1sobn\u00edku a zvy\u010dajne nem\u00e1me priamy pr\u00edstup k nej. Inicializujeme ju a oslovujeme ju, ale \u010do sa tam deje vo vn\u00fatri, je pred nami skryt\u00e9. <\/p>\n<p>Pozrime sa na obr\u00e1zok zo \u0161pecifik\u00e1cie, av\u0161ak predt\u00fdm chcem zd\u00f4razni\u0165 \u010dast\u00e9 zm\u00e4tky v terminol\u00f3gii, najm\u00e4 vo vz\u0165ahu k deskriptorom. \u00dalohou deskriptoru je doplni\u0165 popis charakteristiky. Ke\u010f je potrebn\u00e9 roz\u0161\u00edri\u0165 jej mo\u017enosti, pou\u017e\u00edvaj\u00fa sa deskriptory. Tieto s\u00fa tie\u017e atrib\u00fatmi a rovnako, spolu so slu\u017ebami a charakteristikami, sa nach\u00e1dzaj\u00fa v tabu\u013eke atrib\u00fatov. Podrobne ich preberieme v druhej \u010dasti \u010dl\u00e1nku. Av\u0161ak niekedy sa deskriptory naz\u00fdvaj\u00fa aj \u010d\u00edslo riadku v tabu\u013eke atrib\u00fatov. To je dobr\u00e9 ma\u0165 na pam\u00e4ti. Aby sme sa nezm\u00fdlili, pre tieto \u00fa\u010dely budeme pou\u017e\u00edva\u0165 term\u00edn \u201eukazovate\u013e atrib\u00fatu\u201c.<br \/>\n<img decoding=\"async\" alt=\"BLE pod mikroskopom (ATT-y GATT-y...)\" src=\"\/wp-content\/uploads\/2020\/06\/6df836477b153c396bdba9068129bb6f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak\u017ee atrib\u00fat je diskr\u00e9tna hodnota, ktor\u00e1 m\u00e1 nasleduj\u00face vlastnosti s\u00favisiace s \u0148ou:<br \/>\n1. Ukazovate\u013e atrib\u00fatu (Attribute Handle) \u2014 to je index tabu\u013eky, ktor\u00fd zodpoved\u00e1 atrib\u00fatu <br \/>\n2. Typ atrib\u00fatu (Attribute Type) \u2014 to je UUID, ktor\u00fd popisuje jeho typ <br \/>\n3. Hodnota atrib\u00fatu (Attribute Value) \u2014 to s\u00fa \u00fadaje, ktor\u00e9 s\u00fa indexovan\u00e9 ukazovate\u013eom atrib\u00fatu <br \/>\n4. Opr\u00e1vnenia atrib\u00fatov (Attribute Permissions) s\u00fa \u010das\u0165ou atrib\u00fatu, opr\u00e1vnenia, ktor\u00e9 nem\u00f4\u017eu by\u0165 pre\u010d\u00edtan\u00e9 ani zap\u00edsan\u00e9 pomocou protokolu atrib\u00fatov<\/p>\n<p>Ako to v\u0161etko ch\u00e1pa\u0165? Ukazovate\u013e atrib\u00fatu \u2014 to je, povedzme, jeho \u010d\u00edslo v na\u0161ej tabu\u013eke.<br \/>\nUmo\u017e\u0148uje klientovi odkazova\u0165 na atrib\u00fat v dotazoch na \u010d\u00edtanie alebo z\u00e1pis. M\u00f4\u017eeme \u010d\u00edslova\u0165 na\u0161e riadky (atrib\u00faty) od 0x0001 po 0xFFFF. V na\u0161ej asoci\u00e1cii s kni\u017enicou \u2014 je to \u010d\u00edslo karti\u010dky v papierovom katal\u00f3gu. Podobne ako v kni\u017eni\u010dnom katal\u00f3gu, karti\u010dky s\u00fa usporiadan\u00e9 pod\u013ea rast\u00faceho \u010d\u00edsla. \u010c\u00edslo ka\u017ed\u00e9ho nasleduj\u00faceho riadku mus\u00ed by\u0165 vy\u0161\u0161ie ako predch\u00e1dzaj\u00face. Ako v kni\u017enici, niekedy sa strat\u00ed nieko\u013eko karti\u010diek, tak aj u n\u00e1s \u2014 v \u010d\u00edslovan\u00ed riadkov m\u00f4\u017eu by\u0165 pr\u00e1zdne miesta. To je povolen\u00e9. Hlavn\u00e9 je, aby i\u0161li vzostupne.<\/p>\n<p>Typ atrib\u00fatu ur\u010duje, \u010do predstavuje dan\u00fd atrib\u00fat. Podobne ako v jazyku C,<br \/>\nkde s\u00fa boolovsk\u00e9, \u010d\u00edseln\u00e9 premenn\u00e9 a re\u0165azce, tak aj tu. Pod\u013ea typu atrib\u00fatu zist\u00edme, <br \/>\ns \u010d\u00edm m\u00e1me do\u010dinenia a ako s t\u00fdmto atrib\u00fatom \u010falej pracova\u0165. Ni\u017e\u0161ie presk\u00famame niektor\u00e9 \u0161pecifick\u00e9 typy atrib\u00fatov. Napr\u00edklad \u201eservisn\u00e9 vyhl\u00e1senie\u201c (0x2800), \u201evyhl\u00e1senie charakteristiky\u201c (0x2803), \u201evyhl\u00e1senie popisova\u010da\u201c (0x2902).<\/p>\n<p>Hodnota atrib\u00fatu \u2014 to je samotn\u00e1 jeho hodnota, prep\u00e1\u010dte za tautol\u00f3giu. Ak je typ atrib\u00fatu re\u0165azec, tak hodnotou atrib\u00fatu m\u00f4\u017ee by\u0165 napr\u00edklad slogan \u201eHello World !!!\u201c. Ak je typ atrib\u00fatu \u201eservisn\u00e9 vyhl\u00e1senie\u201c, tak jeho hodnotou je samotn\u00fd servis. A niekedy je to inform\u00e1cia o tom, kde n\u00e1js\u0165 \u010fal\u0161ie atrib\u00faty a ich vlastnosti.<\/p>\n<p>Povolenia atrib\u00fatov umo\u017e\u0148uj\u00fa serveru pochopi\u0165, \u010di je povolen\u00fd pr\u00edstup na \u010d\u00edtanie alebo z\u00e1pis. <br \/>\nV\u0161imnite si, \u017ee tieto povolenia sa uplat\u0148uj\u00fa iba na hodnotu atrib\u00fatu, nie na ukazovate\u013e, typ a samotn\u00e9 pole povolen\u00ed. T.j. ak je povolen\u00fd z\u00e1pis atrib\u00fatu, m\u00f4\u017eeme napr\u00edklad zmeni\u0165 vetu \u201eHello World !!!\u201c na \u201eGood morning\u201c. Nem\u00f4\u017eeme v\u0161ak zak\u00e1za\u0165 z\u00e1pis novej vety, ani zmeni\u0165 typ atrib\u00fatu a definova\u0165 vetu ako \u201eservisn\u00e9 vyhl\u00e1senie\u201c. Pri pr\u00edstupe klienta k serveru, klient \u017eiada jeho atrib\u00faty. To umo\u017e\u0148uje klientovi zisti\u0165, \u010do m\u00f4\u017ee server poskytn\u00fa\u0165. Hoci nie je nevyhnutn\u00e9 \u010d\u00edta\u0165 a zapisova\u0165 hodnoty.<\/p>\n<h3>Ako to vyzer\u00e1<\/h3>\n<p>\nKoncept GATT spo\u010d\u00edva v tom, aby skupinoval atrib\u00faty v tabu\u013eke atrib\u00fatov spolu v ve\u013emi \u0161pecifickom a logickom poriadku. Pozrime sa bli\u017e\u0161ie na profil srdcovej frekvencie uveden\u00fd ni\u017e\u0161ie. Naj\u013eav\u0161\u00ed st\u013apec tejto tabu\u013eky nie je povinn\u00fd. Iba n\u00e1m opisuje, \u010d\u00edm je tento riadok (atrib\u00fat). V\u0161etky ostatn\u00e9 st\u013apce s\u00fa n\u00e1m u\u017e zn\u00e1me.<\/p>\n<p><img decoding=\"async\" alt=\"BLE pod mikroskopom (ATT-y GATT-y...)\" src=\"\/wp-content\/uploads\/2020\/06\/110813482dacb0f19cb49e735f4a9e34.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV hornej \u010dasti ka\u017edej skupiny m\u00e1me v\u017edy atrib\u00fat ozn\u00e1menia slu\u017eby. Jeho typ je v\u017edy rovn\u00fd 0x2800 a ukazovate\u013e z\u00e1vis\u00ed od toho, ko\u013eko atrib\u00fatov u\u017e je pr\u00edtomn\u00fdch v tabu\u013eke. Jeho opr\u00e1vnenia s\u00fa v\u017edy dostupn\u00e9 len na \u010d\u00edtanie, bez akejko\u013evek autentifik\u00e1cie alebo autoriz\u00e1cie. O t\u00fdchto pojmoch sa porozpr\u00e1vame nesk\u00f4r. Hodnota je \u010fal\u0161\u00ed UUID, ktor\u00fd ur\u010duje, \u010do je t\u00e1to slu\u017eba. V tabu\u013eke je hodnota rovn\u00e1 0x180D, \u010do definoval Bluetooth SIG ako slu\u017ebu srdcovej frekvencie. <\/p>\n<p>Nasleduj\u00facim je ozn\u00e1menie charakteristiky. Po forme je podobn\u00e9 ozn\u00e1meniu slu\u017eby. Jeho UUID m\u00e1 v\u017edy hodnotu 0x2803 a opr\u00e1vnenia s\u00fa taktie\u017e v\u017edy dostupn\u00e9 len na \u010d\u00edtanie bez akejko\u013evek autentifik\u00e1cie alebo autoriz\u00e1cie. Pozrime sa na pole hodnota atrib\u00fatu, ktor\u00e9 obsahuje niektor\u00e9 d\u00e1ta. V\u017edy obsahuje ukazovate\u013e, UUID a sadu vlastnost\u00ed. Tieto tri prvky opisuj\u00fa nasledovn\u00e9 ozn\u00e1menie hodnoty charakteristiky. Ukazovate\u013e prirodzene ozna\u010duje miesto ozn\u00e1menia hodnoty charakteristiky v tabu\u013eke atrib\u00fatov. UUID popisuje, ak\u00fd typ inform\u00e1ci\u00ed alebo hodnoty m\u00f4\u017eeme o\u010dak\u00e1va\u0165. Napr\u00edklad hodnota teploty, stav vyp\u00edna\u010da svetla alebo nejak\u00e1 in\u00e1 n\u00e1hodn\u00e1 hodnota. A nakoniec vlastnosti, ktor\u00e9 opisuj\u00fa, ako m\u00f4\u017eeme interagova\u0165 s charakteristickou hodnotou. <\/p>\n<p>Tu n\u00e1s \u010dak\u00e1 \u010fal\u0161\u00ed skryt\u00fd probl\u00e9m. Ten s\u00favis\u00ed s opr\u00e1vneniami atrib\u00fatov a vlastnos\u0165ami charakterist\u00edk. Pozrime sa na obr\u00e1zok vlastnost\u00ed bitov\u00e9ho po\u013ea zo \u0161pecifik\u00e1cie.<\/p>\n<p><img decoding=\"async\" alt=\"BLE pod mikroskopom (ATT-y GATT-y...)\" src=\"\/wp-content\/uploads\/2020\/06\/7397f7f69e573ae3084cbacdcd318829.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAko vid\u00edte, s\u00fa tu aj polia, ktor\u00e9 umo\u017e\u0148uj\u00fa \u010d\u00edtanie a z\u00e1pis. M\u00f4\u017eete sa p\u00fdta\u0165, pre\u010do m\u00e1me opr\u00e1vnenia na \u010d\u00edtanie\/z\u00e1pis pre atrib\u00fat a vlastnos\u0165. <br \/>\n\u010c\u00edtanie\/z\u00e1pis hodnoty atrib\u00fatu? Nemali by by\u0165 v\u017edy rovnak\u00e9? V skuto\u010dnosti s\u00fa atrib\u00faty hodnoty len odpor\u00fa\u010daniami pre klienta, ktor\u00e9 sa pou\u017e\u00edvaj\u00fa v GATT a aplika\u010dn\u00fdch vrstv\u00e1ch. Ide len o n\u00e1znaky toho, \u010do m\u00f4\u017ee klient o\u010dak\u00e1va\u0165 od atrib\u00fatu deklar\u00e1cie charakteristiky. Po\u010fme sa na to pozrie\u0165 podrobnej\u0161ie. Ak\u00e9 typy opr\u00e1vnen\u00ed m\u00e1 atrib\u00fat? <\/p>\n<p>1. Opr\u00e1vnenia pr\u00edstupu:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 \u010d\u00edtanie<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 z\u00e1pis<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 \u010d\u00edtanie a z\u00e1pis<br \/>\n2. Opr\u00e1vnenie autentifik\u00e1cie:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autentifik\u00e1cia je potrebn\u00e1<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autentifik\u00e1cia nie je potrebn\u00e1<br \/>\n3. Opr\u00e1vnenie autoriz\u00e1cie:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autoriz\u00e1cia je potrebn\u00e1<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autoriz\u00e1cia nie je potrebn\u00e1<\/p>\n<p>Hlavn\u00fd rozdiel medzi opr\u00e1vneniami atrib\u00fatov a vlastnos\u0165ami charakterist\u00edk spo\u010d\u00edva v tom, \u017ee prv\u00e9 sa t\u00fdkaj\u00fa serverov, zatia\u013e \u010do druh\u00e9 klientov. Server m\u00f4\u017ee ma\u0165 opr\u00e1vnenie \u010d\u00edta\u0165 hodnotu charakteristiky, ale m\u00f4\u017ee by\u0165 po\u017eiadavka na autentifik\u00e1ciu alebo autoriz\u00e1ciu. Preto pri \u017eiadosti klienta o vlastnosti charakteristiky zist\u00edme, \u017ee \u010d\u00edtanie je povolen\u00e9. Ale pri pokuse o \u010d\u00edtanie dostaneme chybu. Preto m\u00f4\u017eeme smelo poveda\u0165, \u017ee opr\u00e1vnenia maj\u00fa prednos\u0165 pred vlastnos\u0165ami. Opr\u00e1vnenia atrib\u00fatu z poh\u013eadu klienta nez\u00edskame.<\/p>\n<h3>De\u0161kriptory<\/h3>\n<p>\nVr\u00e1time sa k na\u0161ej tabu\u013eke. Po deklar\u00e1cii hodnoty charakteristiky s\u00fa mo\u017en\u00e9 nasleduj\u00face deklar\u00e1cie atrib\u00fatov: <br \/>\n1. Nov\u00e1 deklar\u00e1cia charakteristiky (v slu\u017ebe m\u00f4\u017ee by\u0165 mnoho charakterist\u00edk)<br \/>\n2. Nov\u00e9 vyhl\u00e1senie slu\u017eby (v tabu\u013eke ich m\u00f4\u017ee by\u0165 viac)<br \/>\n3. Deklar\u00e1cia de\u0161kriptora <\/p>\n<p>V pr\u00edpade popisu charakteristiky merania frekvencie srdcov\u00fdch kontrakci\u00ed, v na\u0161ej tabu\u013eke, je vyhl\u00e1senie hodnoty charakteristiky sprev\u00e1dzan\u00e9 vyhl\u00e1sen\u00edm deskriptora. Deskriptor je atrib\u00fat s dodato\u010dn\u00fdmi inform\u00e1ciami o charakteristike. Existuje nieko\u013eko druhov deskriptorov. O nich podrobne hovor\u00edme v druhej \u010dasti tohto \u010dl\u00e1nku. Teraz sa v\u0161ak dotkneme len deskriptora konfigur\u00e1cie charakterist\u00edk z\u00e1kazn\u00edka (Client Characteristic Configuration Descriptor \u2013 CCCD). M\u00e1 UUID rovn\u00e9 0x2902. Pomocou tohto deskriptora m\u00e1 z\u00e1kazn\u00edk mo\u017enos\u0165 zapn\u00fa\u0165 na serveri indik\u00e1ciu alebo notifik\u00e1ciu. Rozdiel medzi nimi je mal\u00fd, ale predsa je tu. Notifik\u00e1cia nevy\u017eaduje potvrdenie prijatia zo strany z\u00e1kazn\u00edka. Indik\u00e1cia to v\u0161ak vy\u017eaduje, hoci sa deje na \u00farovni GATT, nedosahuj\u00fac \u00farove\u0148 aplik\u00e1cie. Pre\u010do je to tak, p\u00fdtate sa? Nu\u017e, to mi nie je zn\u00e1me. M\u00f4\u017eem iba poveda\u0165, \u017ee odborn\u00edci z Nordic odpor\u00fa\u010daj\u00fa pou\u017e\u00edva\u0165 notifik\u00e1ciu. O to viac, \u017ee kontrola integrity paketu (pomocou CRC) prebieha v oboch pr\u00edpadoch.<\/p>\n<h3>Z\u00e1ver<\/h3>\n<p>\nNa konci \u010dl\u00e1nku by som chcel poveda\u0165 nie\u010do o tom. Posledn\u00e1 tabu\u013eka je trochu m\u00e4t\u00faca. Av\u0161ak zastavil som sa pri nej, preto\u017ee sa uv\u00e1dza v <noindex><a rel=\"nofollow\" href=\"https:\/\/devzone.nordicsemi.com\/nordic\/short-range-guides\/b\/bluetooth-low-energy\/posts\/ble-characteristics-a-beginners-tutorial\">\u010dl\u00e1nku<\/a><\/noindex>, na ktor\u00fa sa opieram. V druhej \u010dasti svojho \u010dl\u00e1nku m\u00e1m v \u00famysle h\u013abkovo sa venova\u0165 \u0161pecifik\u00e1cii Bluetooth 4.0. Tam n\u00e1s \u010dakaj\u00fa presnej\u0161ie sch\u00e9my a obr\u00e1zky. V tretej \u010dasti by som chcel presk\u00fama\u0165 log z\u00edskan\u00fd pomocou programu Wireshark z jedn\u00e9ho z zariaden\u00ed a vidie\u0165 \u201ena\u017eivo\u201c cel\u00fa t\u00fa te\u00f3riu, ktor\u00fa spolu \u0161tudujeme.<\/p>\n<p>Zamestnanec Skupiny Spolo\u010dnost\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/www.csat.ru\/\">\u201eC\u00e9zar Satelit\u201c<\/a><\/noindex><br \/>\nPe\u010dersk\u00fdch Vladim\u00edr<br \/>\n<br \/>Zdroj: <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.4 - 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\/sk\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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 pod mikroskopom (ATT-y GATT-y\u2026) | ProHoster","description":"BLE pod mikroskopom (ATT-y GATT-y...) \u010cas\u0165 1.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/84024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=84024"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/84024\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/84025"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=84024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=84024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=84024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}