{"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\/cs\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","title":{"rendered":"BLE pod mikroskopem (ATTy GATTy&#8230;)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"BLE pod mikroskopem (ATTy GATTy...)\" src=\"\/wp-content\/uploads\/2020\/06\/d8587bf897b27457b354549b99399bcc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>BLE pod mikroskopem (ATTy GATTy&#8230;)<\/h2>\n<p> <b>\u010c\u00e1st 1, p\u0159ehledov\u00e1<\/b><\/p>\n<p>U\u017e uplynulo pom\u011brn\u011b dlouh\u00e9 obdob\u00ed od vyd\u00e1n\u00ed prvn\u00ed specifikace Bluetooth 4.0. A i kdy\u017e je t\u00e9ma BLE velmi zaj\u00edmav\u00e9, st\u00e1le odrazuje mnoh\u00e9 v\u00fdvoj\u00e1\u0159e kv\u016fli sv\u00e9 slo\u017eitosti. Ve sv\u00fdch p\u0159edchoz\u00edch \u010dl\u00e1nc\u00edch jsem se zam\u011b\u0159oval hlavn\u011b na nejni\u017e\u0161\u00ed \u00farove\u0148 Link Layer a Physical Layer. To umo\u017enilo vyhnout se tak slo\u017eit\u00fdm a zamotan\u00fdm pojm\u016fm jako je protokol atribut\u016f (ATT) a obecn\u00fd profil atribut\u016f (GATT). Ale nen\u00ed \u00faniku, bez jejich porozum\u011bn\u00ed nen\u00ed mo\u017en\u00e9 vyv\u00edjet kompatibiln\u00ed za\u0159\u00edzen\u00ed. Dnes bych cht\u011bl sd\u00edlet s v\u00e1mi tyto znalosti. Ve sv\u00e9m \u010dl\u00e1nku budu vych\u00e1zet z <noindex><a rel=\"nofollow\" href=\"https:\/\/devzone.nordicsemi.com\/nordic\/short-range-guides\/b\/bluetooth-low-energy\/posts\/ble-characteristics-a-beginners-tutorial\">u\u010debnice<\/a><\/noindex> pro za\u010d\u00e1te\u010dn\u00edky z webu Nordic. Tak poj\u010fme za\u010d\u00edt.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Pro\u010d je to v\u0161echno tak slo\u017eit\u00e9?<\/h3>\n<p>\nZ m\u00e9ho pohledu bylo hned jasn\u00e9, \u017ee \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 za\u0159\u00edzen\u00edmi p\u0159es smartphony \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0438 \u0434\u043e\u043b\u0433\u0430\u044f \u0442\u0435\u043c\u0430. Proto se rozhodli ji ihned strukturovat co nejl\u00e9pe. Aby v\u00fdrobci r\u016fzn\u00fdch gadget\u016f nevym\u00fd\u0161leli sv\u00e9 protokoly, kter\u00e9 by pozd\u011bji nebyly kompatibiln\u00ed. Odtud ta slo\u017eitost. U\u017e na prvn\u00edm stupni se do protokolu BLE sna\u017eili vt\u011bsnat v\u0161echno, co bylo mo\u017en\u00e9. A je jedno, zda to bude pozd\u011bji u\u017eite\u010dn\u00e9 nebo ne. Krom\u011b toho byla zaji\u0161t\u011bna mo\u017enost roz\u0161\u00ed\u0159en\u00ed seznamu za\u0159\u00edzen\u00ed do budoucna.<\/p>\n<p>Pod\u00edvejme se na obr\u00e1zek, na kter\u00e9m je zn\u00e1zorn\u011bna sch\u00e9ma protokolu BLE. Skl\u00e1d\u00e1 se z n\u011bkolika vrstev. Nejni\u017e\u0161\u00ed, fyzick\u00e1 vrstva (PHY) odpov\u00edd\u00e1 za r\u00e1diov\u00fd kan\u00e1l za\u0159\u00edzen\u00ed. Link Layer (LL) obsahuje celou sekvenci bajt\u016f v p\u0159en\u00e1\u0161en\u00e9 zpr\u00e1v\u011b. V p\u0159edchoz\u00edch \u010dl\u00e1nc\u00edch jsme se zam\u011b\u0159ovali pr\u00e1v\u011b na n\u011bj. Host Controller Interface (HCI) \u2014 je protokol v\u00fdm\u011bny mezi vrstvami nebo \u010dipy BLE, pokud jsou Controller a Host implementov\u00e1ny na r\u016fzn\u00fdch \u010dipech. Za vytv\u00e1\u0159en\u00ed paket\u016f, d\u011blen\u00ed na r\u00e1mce, kontrolu chyb a sestavov\u00e1n\u00ed paket\u016f odpov\u00edd\u00e1 Logical Link Control and Adaptation Protocol (L2CAP). Za \u0161ifrov\u00e1n\u00ed paket\u016f odpov\u00edd\u00e1 Security Manager Protocol (SMP). Profil obecn\u00e9ho p\u0159\u00edstupu (GAP) odpov\u00edd\u00e1 za po\u010d\u00e1te\u010dn\u00ed v\u00fdm\u011bnu dat mezi za\u0159\u00edzen\u00edmi, pro ur\u010den\u00ed \u201eKdo je kdo\u201c. K tomu pat\u0159\u00ed tak\u00e9 skenov\u00e1n\u00ed a inzerov\u00e1n\u00ed. V tomto \u010dl\u00e1nku se zastav\u00edm u dvou zb\u00fdvaj\u00edc\u00edch \u010d\u00e1st\u00ed protokolu \u2014 GATT a ATT. GATT je nadstavba nad ATT, tak\u017ee jsou \u00fazce prov\u00e1z\u00e1ny.<\/p>\n<p><img decoding=\"async\" alt=\"BLE pod mikroskopem (ATTy GATTy...)\" src=\"\/wp-content\/uploads\/2020\/06\/8060076152cfe3ae648eca362889e571.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAby zsimplifikowa\u0107 opowie\u015b\u0107, chcia\u0142bym odwo\u0142a\u0107 si\u0119 do analogii. Gdzie\u015b to s\u0142ysza\u0142em i chcia\u0142bym j\u0105 podtrzyma\u0107. Wyobra\u017a sobie urz\u0105dzenie BLE jako rega\u0142 na ksi\u0105\u017cki z kilkoma p\u00f3\u0142kami. Ka\u017cda p\u00f3\u0142ka to osobna tematyka. Na przyk\u0142ad, mamy p\u00f3\u0142ki z fantastyk\u0105, matematyk\u0105, encyklopediami. Na ka\u017cdej p\u00f3\u0142ce stoj\u0105 ksi\u0105\u017cki o okre\u015blonej tematyce. W niekt\u00f3rych ksi\u0105\u017ckach s\u0105 nawet papierowe zak\u0142adki z notatkami. Ponadto mamy ma\u0142y papierowy katalog wszystkich ksi\u0105\u017cek. Je\u015bli pami\u0119tasz szkolne biblioteki \u2013 to w\u0105ska szuflada z papierowymi kartami. W tej analogii rega\u0142 to profil naszego urz\u0105dzenia. P\u00f3\u0142ki to us\u0142ugi, ksi\u0105\u017cki to w\u0142a\u015bciwo\u015bci, a katalog to tabela atrybut\u00f3w. Zak\u0142adki w ksi\u0105\u017ckach to deskryptory, o kt\u00f3rych r\u00f3wnie\u017c opowiem p\u00f3\u017aniej, bardziej szczeg\u00f3\u0142owo.<\/p>\n<p>Wszystkim, kt\u00f3rzy projektowali urz\u0105dzenia, wiadomo, \u017ce w wielu projektach s\u0105 podobne fragmenty kodu. Chodzi o to, \u017ce wiele urz\u0105dze\u0144 ma podobn\u0105 funkcjonalno\u015b\u0107. Na przyk\u0142ad, je\u015bli urz\u0105dzenia dzia\u0142aj\u0105 na akumulatorach, problem \u0142adowania i kontroli ich poziomu b\u0119dzie taki sam. Dotyczy to r\u00f3wnie\u017c czujnik\u00f3w. W zasadzie, podej\u015bcie obiektowe w programowaniu <i>\"umo\u017cliwia tworzenie obiekt\u00f3w, kt\u00f3re \u0142\u0105cz\u0105 w\u0142a\u015bciwo\u015bci i zachowania w samodzielny zwi\u0105zek, kt\u00f3ry nast\u0119pnie mo\u017cna wielokrotnie wykorzystywa\u0107\"<\/i>. Moim zdaniem, w BLE podj\u0119to pr\u00f3b\u0119 podobnego podej\u015bcia. Grupa Bluetooth Special Interest Group (SIG) opracowa\u0142a profile. Urz\u0105dzenia od r\u00f3\u017cnych producent\u00f3w, kt\u00f3re maj\u0105 te same profile, powinny \u0142atwo wsp\u00f3\u0142pracowa\u0107. Profile sk\u0142adaj\u0105 si\u0119 z us\u0142ug, a us\u0142ugi z w\u0142a\u015bciwo\u015bci, uzupe\u0142nianych deskryptorami. W og\u00f3lnym przypadku mo\u017ce to wygl\u0105da\u0107 tak:<\/p>\n<p><img decoding=\"async\" alt=\"BLE pod mikroskopem (ATTy GATTy...)\" src=\"\/wp-content\/uploads\/2020\/06\/34cbbeee142d40e56dff7626ef752d42.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa przyk\u0142ad, rozwa\u017c schemat profilu monitora rytmu serca (opaska fitness). Sk\u0142ada si\u0119 z dw\u00f3ch us\u0142ug i kilku w\u0142a\u015bciwo\u015bci. Od razu jest widoczna hierarchia profilu. W\u0142a\u015bciwo\u015b\u0107 punktu kontrolnego zeruje ca\u0142kowity bilans wydatk\u00f3w kalorycznych. <\/p>\n<p>1. Us\u0142uga rytmu serca zawiera trzy w\u0142a\u015bciwo\u015bci (0x180D):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;a) Obowi\u0105zkowa w\u0142a\u015bciwo\u015b\u0107 cz\u0119sto\u015bci akcji serca (0x2A37)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;b) Opcjonalna w\u0142a\u015bciwo\u015b\u0107 pozycji czujnika cia\u0142a (0x2A38)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;c) Warunkowa w\u0142a\u015bciwo\u015b\u0107 punktu kontrolnego rytmu serca (0x2A39)<br \/>\n2. Us\u0142uga zarz\u0105dzania bateri\u0105 (0x180F):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;a) Povinn\u00e1 charakteristika \u00farovn\u011b nabit\u00ed baterie (0x2A19)<\/p>\n<h3>UUID<\/h3>\n<p>\nAbychom mohli jednozna\u010dn\u011b odkazovat na prvky profilu (slu\u017eby, charakteristiky a popisy), je pot\u0159eba je n\u011bjak \u010d\u00edslovat. K tomu se zav\u00e1d\u00ed pojem Universally Unique ID (UUID) nebo Univerz\u00e1ln\u00ed unik\u00e1tn\u00ed identifik\u00e1tor. V z\u00e1vork\u00e1ch ka\u017ed\u00e9ho \u0159\u00e1dku je pr\u00e1v\u011b uveden UUID. A zde je jedna zvl\u00e1\u0161tnost. Pro UUID se rozhodlo pou\u017e\u00edt k\u00f3d o d\u00e9lce 16 a 128 bit\u016f. Pro\u010d, pt\u00e1te se? V protokolu BLE je v\u0161echno pod\u0159\u00edzen\u00ed \u00faspo\u0159e energie. Proto je velikost 16 bit\u016f zcela rozumn\u00e1. Nejsp\u00ed\u0161 se v bl\u00edzk\u00e9 budoucnosti nevytvo\u0159\u00ed v\u00edce ne\u017e 65 tis\u00edc unik\u00e1tn\u00edch slu\u017eeb a charakteristik. V tuto chv\u00edli u\u017e bylo v\u0161echno, co mohlo, spo\u010d\u00edt\u00e1no (pamatujete odkud to je \u2014 \u201eon v\u00e1s taky spo\u010d\u00edtal\u201c :-)) \u010c\u00edslovan\u00e9 prvky <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/\">profil\u016f<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/services\/\">slu\u017eeb<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/characteristics\/\">charakteristik<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/descriptors\/\">popis\u016f<\/a><\/noindex> m\u016f\u017eete se pod\u00edvat podle odkaz\u016f.<\/p>\n<p>Nicm\u00e9n\u011b si mysl\u00edm, \u017ee si v\u0161ichni pamatuj\u00ed p\u0159\u00edb\u011bh se 4 bajty IP adresy na internetu. Zpo\u010d\u00e1tku si mysleli, \u017ee to sta\u010d\u00ed, a te\u010f se po\u0159\u00e1d nem\u016f\u017eeme p\u0159ej\u00edt na 6-bajtovou adresu. Abychom se vyhnuli opakov\u00e1n\u00ed t\u00e9to chyby a dali prostor \u0161ikovn\u00fdm ruk\u00e1m kutil\u016f, SIG se rozhodla ihned zav\u00e9st tak\u00e9 128-bitov\u00e9 UUID. To mi p\u0159ipom\u00edn\u00e1 nelicencovan\u00fd p\u00e1smo 433 MHz, kter\u00e9 bylo d\u00e1no voln\u011b r\u016fzn\u00fdm kutil\u016fm z radiokan\u00e1lu. V na\u0161em p\u0159\u00edpad\u011b byl d\u00e1n voln\u011b 128-bitov\u00fd identifik\u00e1tor slu\u017eeb a charakteristik. To znamen\u00e1, \u017ee pro na\u0161e slu\u017eby a za\u0159\u00edzen\u00ed m\u016f\u017eeme pou\u017e\u00edvat prakticky jakoukoli 128-bitovou hodnotu. Pravd\u011bpodobnost vymyslet stejn\u00fd UUID se p\u0159itom bl\u00ed\u017e\u00ed nule.<\/p>\n<p>Ve skute\u010dnosti maj\u00ed kr\u00e1tk\u00e9 16-bitov\u00e9 UUID sv\u00e9 roz\u0161\u00ed\u0159en\u00ed na 128-bitovou hodnotu. V specifikaci se toto roz\u0161\u00ed\u0159en\u00ed naz\u00fdv\u00e1 Bluetooth Base UUID a m\u00e1 hodnotu 00000000-0000-1000-8000-00805F9B34FB. Pokud nap\u0159\u00edklad 16-bitov\u00fd UUID atributu m\u00e1 hodnotu 0x1234, pak ekvivalentn\u00ed 128-bitov\u00fd UUID bude m\u00edt hodnotu 00001234-0000-1000-8000-00805F9B34FB. A dokonce je uvedena odpov\u00eddaj\u00edc\u00ed rovnice:<\/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>Odkud se vzalo toto magick\u00e9 \u010d\u00edslo, nev\u00edm. Pokud n\u011bkdo z \u010dten\u00e1\u0159\u016f v\u00ed \u2014 a\u0165 nap\u00ed\u0161e do koment\u00e1\u0159\u016f (U\u017eivatel s p\u0159ezd\u00edvkou Sinopteek to ji\u017e ud\u011blal. Pod\u00edvejte se na koment\u00e1\u0159e). Co se t\u00fd\u010de vym\u00fd\u0161len\u00ed 128-bitov\u00fdch UUID, je mo\u017en\u00e9 vyu\u017e\u00edt speci\u00e1ln\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/www.famkruithof.net\/uuid\/uuidgen\">gener\u00e1tor<\/a><\/noindex>, kter\u00fd to ud\u011bl\u00e1 za v\u00e1s.<\/p>\n<h3>ATTy GATTy\u2026<\/h3>\n<p>\n Tady za\u010d\u00edn\u00e1 to nejzaj\u00edmav\u011bj\u0161\u00ed. P\u0159ipom\u00edn\u00e1m, \u017ee ATT je zalo\u017een na klient-server vztahu. Nyn\u00ed zva\u017eujeme za\u0159\u00edzen\u00ed serveru. Obsahuje informace, jako jsou hodnoty senzor\u016f, stav sv\u011bteln\u00e9ho sp\u00edna\u010de, \u00fadaje o poloze atd. Nyn\u00ed, kdy\u017e jsou v\u0161ichni \u201e\u00fa\u010dastn\u00edci na\u0161eho pr\u016fvodu\u201c o\u010d\u00edslov\u00e1ni, je t\u0159eba je n\u011bjak um\u00edstit do pam\u011bti za\u0159\u00edzen\u00ed. K tomu je um\u00edst\u00edme do tabulky, kter\u00e1 se naz\u00fdv\u00e1 tabulka atribut\u016f. Dob\u0159e si to zapamatujte. To je srdce BLE. To bude p\u0159edm\u011btem na\u0161eho dal\u0161\u00edho zkoum\u00e1n\u00ed. Nyn\u00ed budeme ka\u017ed\u00e9mu \u0159\u00e1dku \u0159\u00edkat atribut. Tato tabulka je hloubkou z\u00e1sobn\u00edku a zpravidla nem\u00e1me p\u0159\u00edm\u00fd p\u0159\u00edstup k n\u00ed. Inicializujeme ji a p\u0159istupujeme k n\u00ed, ale co se d\u011bje uvnit\u0159, je od n\u00e1s skryto za sedmi z\u00e1mky. <\/p>\n<p>Pod\u00edvejme se na obr\u00e1zek ze specifikace, ale p\u0159edt\u00edm chci okam\u017eit\u011b upozornit na \u010dast\u00e9 zmaten\u00ed term\u00edn\u016f, konkr\u00e9tn\u011b v deskriptorech. \u00daloha deskriptoru je doplnit popis charakteristiky. Kdy\u017e je t\u0159eba roz\u0161\u00ed\u0159it jej\u00ed mo\u017enosti, aplikuj\u00ed se deskriptory. Ty tak\u00e9 jsou atributy a spolu se slu\u017ebami a charakteristikami se nach\u00e1zej\u00ed v tabulce atribut\u016f. Podrobn\u011bji je probereme ve druh\u00e9 \u010d\u00e1sti \u010dl\u00e1nku. Nicm\u00e9n\u011b n\u011bkdy se \u010d\u00edslem \u0159\u00e1dku v tabulce atribut\u016f naz\u00fdvaj\u00ed deskriptory. To je d\u016fle\u017eit\u00e9 si uv\u011bdomit. My pro tyto \u00fa\u010dely, abychom se nezam\u011b\u0148ovali, budeme pou\u017e\u00edvat term\u00edn \u201eukazatel atributu\u201c.<br \/>\n<img decoding=\"async\" alt=\"BLE pod mikroskopem (ATTy GATTy...)\" src=\"\/wp-content\/uploads\/2020\/06\/6df836477b153c396bdba9068129bb6f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak\u017ee atribut je diskr\u00e9tn\u00ed hodnota, kter\u00e1 m\u00e1 n\u00e1sleduj\u00edc\u00ed vlastnosti souvisej\u00edc\u00ed s n\u00edm:<br \/>\n1. Ukazatel atributu (Attribute Handle) \u2014 to je index tabulky odpov\u00eddaj\u00edc\u00ed atributu. <br \/>\n2. Typ atributu (Attribute Type) \u2014 to je UUID, kter\u00e9 popisuje jeho typ. <br \/>\n3. Hodnota atributu (Attribute Value) \u2014 to jsou data, kter\u00e1 se indexuj\u00ed ukazatelem atributu. <br \/>\n4. Opr\u00e1vn\u011bn\u00ed atribut\u016f (Attribute Permissions) \u2014 to jsou \u010d\u00e1sti atributu, opr\u00e1vn\u011bn\u00ed, kter\u00e9 nelze &nbsp;&nbsp;&nbsp;&nbsp;\u010d\u00edst nebo zapisovat pomoc\u00ed protokolu atribut\u016f.<\/p>\n<p>Jak to v\u0161echno pochopit? Ukazatel atributu je, \u0159ekn\u011bme, jeho \u010d\u00edslo v na\u0161\u00ed tabulce.<br \/>\nUmo\u017e\u0148uje klientovi odkazovat na atributy v po\u017eadavc\u00edch na \u010dten\u00ed nebo z\u00e1pis. M\u016f\u017eeme \u010d\u00edslovat na\u0161e \u0159\u00e1dky (atributy) od 0x0001 do 0xFFFF. V na\u0161\u00ed asociaci s knihovnou je to \u010d\u00edslo karty v pap\u00edrov\u00e9m katalogu. Podobn\u011b, jako v knihovn\u011b, jsou karty uspo\u0159\u00e1d\u00e1ny podle vzr\u016fstaj\u00edc\u00edho \u010d\u00edsla. \u010c\u00edslo ka\u017ed\u00e9ho n\u00e1sleduj\u00edc\u00edho \u0159\u00e1dku mus\u00ed b\u00fdt v\u011bt\u0161\u00ed ne\u017e p\u0159edchoz\u00ed. Stejn\u011b jako v knihovn\u011b, i zde mohou b\u00fdt n\u011bkter\u00e9 karty ztraceny, a v na\u0161em \u010d\u00edslov\u00e1n\u00ed \u0159\u00e1dk\u016f mohou b\u00fdt mezery. To je p\u0159ijateln\u00e9. Hlavn\u00ed je, aby \u0161ly podle vzr\u016fstaj\u00edc\u00edho po\u0159\u00e1dku.<\/p>\n<p>Typ atributu ur\u010duje, co tento atribut p\u0159edstavuje. Podobn\u011b jako v jazyce C,<br \/>\nkde existuj\u00ed logick\u00e9, \u010d\u00edseln\u00e9 prom\u011bnn\u00e9 a \u0159et\u011bzce, je to i zde. Podle typu atributu zjist\u00edme, <br \/>\ns \u010d\u00edm se zab\u00fdv\u00e1me a jak s t\u00edmto atributem d\u00e1le pracovat. N\u00ed\u017ee si uk\u00e1\u017eeme n\u011bkter\u00e9 specifick\u00e9 typy atribut\u016f. Nap\u0159\u00edklad \u201eservisn\u00ed deklarace\u201c (0x2800), \u201edeklarace charakteristiky\u201c (0x2803), \u201edeklarace deskriptoru\u201c (0x2902).<\/p>\n<p>Hodnota atributu je jeho skute\u010dn\u00e1 hodnota, omlouv\u00e1m se za tautologii. Pokud je typ atributu \u0159et\u011bzec, m\u016f\u017ee b\u00fdt hodnotou atributu nap\u0159\u00edklad slogan \u201eHello World !!!\u201c. Pokud je typ atributu \u201eservisn\u00ed deklarace\u201c, jeho hodnotou je samotn\u00e1 slu\u017eba. N\u011bkdy to m\u016f\u017ee b\u00fdt informace o tom, kde naj\u00edt dal\u0161\u00ed atributy a jejich vlastnosti.<\/p>\n<p>Opr\u00e1vn\u011bn\u00ed atribut\u016f umo\u017e\u0148uj\u00ed serveru pochopit, zda je povolen p\u0159\u00edstup k \u010dten\u00ed nebo z\u00e1pisu. <br \/>\nV\u0161imn\u011bte si, \u017ee tato opr\u00e1vn\u011bn\u00ed se vztahuj\u00ed pouze na hodnotu atributu, nikoli na ukazatel, typ a samotn\u00e9 pole opr\u00e1vn\u011bn\u00ed. Tedy pokud je povoleno zapisovat atribut, m\u016f\u017eeme nap\u0159\u00edklad zm\u011bnit \u0159et\u011bzec \u201eHello World !!!\u201c na \u0159et\u011bzec \u201eDobr\u00e9 r\u00e1no\u201c. Ale nem\u016f\u017eeme zak\u00e1zat z\u00e1pis nov\u00e9ho \u0159\u00e1dku nebo zm\u011bnit typ atributu a ozna\u010dit \u0159et\u011bzec jako \u201eservisn\u00ed deklarace\u201c. P\u0159i \u017e\u00e1dosti klienta k serveru klient \u017e\u00e1d\u00e1 o jeho atributy. To umo\u017e\u0148uje klientovi zjistit, co server m\u016f\u017ee poskytnout. Nen\u00ed v\u0161ak nezbytn\u00e9 \u010d\u00edst a zapisovat hodnoty.<\/p>\n<h3>Jak to vypad\u00e1<\/h3>\n<p>\nKoncept GATT spo\u010d\u00edv\u00e1 ve skupinov\u00e1n\u00ed atribut\u016f v tabulce atribut\u016f do velmi specifick\u00e9ho a logick\u00e9ho po\u0159ad\u00ed. Poj\u010fme se pod\u00edvat na profil srde\u010dn\u00ed frekvence uveden\u00fd n\u00ed\u017ee. Nejlev\u011bj\u0161\u00ed sloupec t\u00e9to tabulky nen\u00ed povinn\u00fd. Pouze n\u00e1m popisuje, \u010d\u00edm je tento \u0159\u00e1dek (atribut). V\u0161echny ostatn\u00ed sloupce u\u017e zn\u00e1me.<\/p>\n<p><img decoding=\"async\" alt=\"BLE pod mikroskopem (ATTy GATTy...)\" src=\"\/wp-content\/uploads\/2020\/06\/110813482dacb0f19cb49e735f4a9e34.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV horn\u00ed \u010d\u00e1sti ka\u017ed\u00e9 skupiny m\u00e1me v\u017edy atribut ozn\u00e1men\u00ed slu\u017eby. Jeho typ je v\u017edy 0x2800 a ukazatel z\u00e1vis\u00ed na tom, kolik atribut\u016f ji\u017e v tabulce je. Jeho opr\u00e1vn\u011bn\u00ed jsou v\u017edy dostupn\u00e1 pouze pro \u010dten\u00ed, bez jak\u00e9koli verifikace nebo autorizace. O t\u011bchto pojmech budeme mluvit pozd\u011bji. Hodnota je dal\u0161\u00ed UUID, kter\u00fd ur\u010duje, co je to za slu\u017ebu. V tabulce m\u00e1 hodnotu 0x180D, co\u017e je definov\u00e1no Bluetooth SIG jako slu\u017eba srde\u010dn\u00ed frekvence. <\/p>\n<p>N\u00e1sleduje ozn\u00e1men\u00ed o charakteristice. Po form\u011b je podobn\u00e9 ozn\u00e1men\u00ed slu\u017eby. Jeho UUID je v\u017edy 0x2803 a opr\u00e1vn\u011bn\u00ed jsou rovn\u011b\u017e v\u017edy dostupn\u00e1 pouze pro \u010dten\u00ed bez jak\u00e9koli verifikace nebo autorizace. Pod\u00edvejme se na pole Hodnota atributu, kter\u00e9 obsahuje n\u011bkter\u00e1 data. V\u017edy obsahuje ukazatel, UUID a soubor vlastnost\u00ed. Tyto t\u0159i prvky popisuj\u00ed n\u00e1sledn\u00e9 ozn\u00e1men\u00ed hodnoty charakteristiky. Ukazatel p\u0159irozen\u011b ozna\u010duje m\u00edsto ozn\u00e1men\u00ed hodnoty charakteristiky v tabulce atribut\u016f. UUID popisuje, jak\u00fd typ informace nebo hodnoty m\u016f\u017eeme o\u010dek\u00e1vat. Nap\u0159\u00edklad hodnotu teploty, stav p\u0159ep\u00edna\u010de sv\u011btla nebo jakoukoli jinou libovolnou hodnotu. A nakonec vlastnosti, kter\u00e9 popisuj\u00ed, jak lze interagovat s charakteristickou hodnotou. <\/p>\n<p>Zde n\u00e1s \u010dek\u00e1 dal\u0161\u00ed \u00faskal\u00ed. To souvis\u00ed s opr\u00e1vn\u011bn\u00edmi atribut\u016f a vlastnostmi charakteristik. Poj\u010fme se pod\u00edvat na obr\u00e1zek vlastnost\u00ed bitov\u00e9ho pole ze specifikace.<\/p>\n<p><img decoding=\"async\" alt=\"BLE pod mikroskopem (ATTy GATTy...)\" src=\"\/wp-content\/uploads\/2020\/06\/7397f7f69e573ae3084cbacdcd318829.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak vid\u00edte, zde jsou tak\u00e9 pole, kter\u00e1 umo\u017e\u0148uj\u00ed \u010dten\u00ed a z\u00e1pis. M\u016f\u017eete se pt\u00e1t, pro\u010d m\u00e1me opr\u00e1vn\u011bn\u00ed pro \u010dten\u00ed\/z\u00e1pis pro atribut a vlastnost. <br \/>\n\u010cten\u00ed\/z\u00e1pis pro hodnotu charakteristiky? Nem\u011bly by b\u00fdt v\u017edy stejn\u00e9? Skute\u010dnost je takov\u00e1, \u017ee vlastnosti pro hodnotu charakteristiky jsou ve skute\u010dnosti pouze doporu\u010den\u00ed pro klienta, pou\u017e\u00edvan\u00e1 v GATT a aplika\u010dn\u00edch vrstv\u00e1ch. Jsou to jen n\u00e1znaky toho, co klient m\u016f\u017ee o\u010dek\u00e1vat od atributu prohl\u00e1\u0161en\u00ed o charakteristice. Poj\u010fme se na to pod\u00edvat podrobn\u011bji. Jak\u00e9 typy opr\u00e1vn\u011bn\u00ed existuj\u00ed pro atribut? <\/p>\n<p>1. Opr\u00e1vn\u011bn\u00ed k p\u0159\u00edstupu:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 \u010dten\u00ed<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 z\u00e1pis<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 \u010dten\u00ed a z\u00e1pis<br \/>\n2. Opr\u00e1vn\u011bn\u00ed pro autentizaci:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autentizace vy\u017eadov\u00e1na<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autentizace nen\u00ed vy\u017eadov\u00e1na<br \/>\n3. Opr\u00e1vn\u011bn\u00ed pro autorizaci:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autorizace vy\u017eadov\u00e1na<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autorizace nen\u00ed vy\u017eadov\u00e1na<\/p>\n<p>Hlavn\u00ed rozd\u00edl mezi opr\u00e1vn\u011bn\u00edmi atribut\u016f a vlastnostmi charakteristik spo\u010d\u00edv\u00e1 v tom, \u017ee prvn\u00ed se vztahuj\u00ed na servery, zat\u00edmco druh\u00e9 na klienty. Serveru m\u016f\u017ee b\u00fdt povoleno \u010d\u00edst hodnotu charakteristiky, ale m\u016f\u017ee existovat po\u017eadavek na autentizaci nebo autorizaci. Proto, kdy\u017e klient po\u017eaduje vlastnosti charakteristiky, zjist\u00edme, \u017ee \u010dten\u00ed je povoleno. Ale p\u0159i pokusu o \u010dten\u00ed dojde k chyb\u011b. Proto lze s jistotou \u0159\u00edci, \u017ee opr\u00e1vn\u011bn\u00ed maj\u00ed p\u0159ednost p\u0159ed vlastnostmi. Znalost opr\u00e1vn\u011bn\u00ed atributu, kterou m\u00e1me jako klient, nem\u016f\u017eeme z\u00edskat.<\/p>\n<h3>Deskriptor<\/h3>\n<p>\nVra\u0165me se k na\u0161\u00ed tabulce. Po vyhl\u00e1\u0161en\u00ed hodnoty charakteristiky mohou n\u00e1sledovat n\u00e1sleduj\u00edc\u00ed deklarace atribut\u016f: <br \/>\n1. Nov\u00e9 vyhl\u00e1\u0161en\u00ed charakteristiky (v slu\u017eb\u011b m\u016f\u017ee b\u00fdt mnoho charakteristik)<br \/>\n2. Nov\u00e1 deklarace slu\u017eby (v tabulce jich m\u016f\u017ee b\u00fdt mnoho)<br \/>\n3. Vyhl\u00e1\u0161en\u00ed deskriptoru <\/p>\n<p>Pokud jde o m\u011b\u0159en\u00ed charakteristiky srde\u010dn\u00ed frekvence, v na\u0161\u00ed tabulce je hodnota charakteristiky doprov\u00e1zena ozn\u00e1men\u00edm popisova\u010de. Popisova\u010d je atribut s dodate\u010dn\u00fdmi informacemi o charakteristice. Existuje n\u011bkolik typ\u016f popisova\u010d\u016f. O t\u011bchto se podrobn\u011bji pod\u00edv\u00e1me ve druh\u00e9 \u010d\u00e1sti tohoto \u010dl\u00e1nku. Nyn\u00ed se v\u0161ak zam\u011b\u0159\u00edme pouze na popisova\u010d konfigurace charakteristik z\u00e1kazn\u00edka (Client Characteristic Configuration Descriptor \u2014 CCCD). Ten m\u00e1 UUID 0x2902. Pomoc\u00ed tohoto popisova\u010de m\u00e1 z\u00e1kazn\u00edk mo\u017enost aktivovat na serveru indikaci nebo notifikaci. Rozd\u00edl mezi nimi je mal\u00fd, ale p\u0159esto existuje. Notifikace nevy\u017eaduje potvrzen\u00ed o doru\u010den\u00ed ze strany z\u00e1kazn\u00edka. Indikace naopak to vy\u017eaduje, i kdy\u017e se uskute\u010d\u0148uje na \u00farovni GATT, nedoch\u00e1z\u00ed k p\u0159enosu na \u00farove\u0148 aplikace. Pro\u010d je to tak, pt\u00e1te se? Bohu\u017eel, to mi nen\u00ed zn\u00e1mo. Mohu jen \u0159\u00edci, \u017ee odborn\u00edci z Nordic doporu\u010duj\u00ed pou\u017e\u00edvat notifikaci. T\u00edm sp\u00ed\u0161e, \u017ee kontrola integrity paketu (pomoc\u00ed CRC) se prov\u00e1d\u00ed v obou p\u0159\u00edpadech.<\/p>\n<h3>Z\u00e1v\u011br<\/h3>\n<p>\nNa z\u00e1v\u011br \u010dl\u00e1nku bych cht\u011bl \u0159\u00edci toto. Posledn\u00ed tabulka je pon\u011bkud matouc\u00ed. Nicm\u00e9n\u011b jsem se na n\u00ed zastavil, proto\u017ee se uv\u00e1d\u00ed 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 kterou se op\u00edr\u00e1m. Ve druh\u00e9 \u010d\u00e1sti sv\u00e9ho \u010dl\u00e1nku se chci v\u00edce pono\u0159it do specifikace Bluetooth 4.0. Tam n\u00e1s \u010dekaj\u00ed p\u0159esn\u011bj\u0161\u00ed diagramy a obr\u00e1zky. Ve t\u0159et\u00ed \u010d\u00e1sti bych cht\u011bl probrat log zachycen\u00fd pomoc\u00ed programu Wireshark z jednoho z gadget\u016f a vid\u011bt \u201ena\u017eivo\u201c celou teorii, kterou studujeme.<\/p>\n<p>Zam\u011bstnanec Skupiny firem <noindex><a rel=\"nofollow\" href=\"https:\/\/www.csat.ru\/\">\u201eC\u00e9sar Satellite\u201c<\/a><\/noindex><br \/>\nVladimir Pe\u010dersky<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.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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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 mikroskopem (ATTy GATTy\u2026) | ProHoster","description":"BLE pod mikroskopem (ATTy GATTy...) \u010c\u00e1st 1.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/84024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=84024"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/84024\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/84025"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=84024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=84024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=84024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}