You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/sr/3-transport/lessons/4-geofences
co-op-translator[bot] 1bda9532dc
🌐 Update translations via Co-op Translator (#555)
4 weeks ago
..
README.md 🌐 Update translations via Co-op Translator (#555) 4 weeks ago
assignment.md 🌐 Update translations via Co-op Translator (#555) 4 weeks ago

README.md

Геозоне

Преглед лекције у виду скице

Скица од Нитије Нарасимхан. Кликните на слику за већу верзију.

Овај видео пружа преглед геозона и како их користити у Azure Maps-у, теме које ће бити обрађене у овој лекцији:

Геозоне са Azure Maps-а из емисије Microsoft Developer IoT

🎥 Кликните на слику изнад да бисте погледали видео

Квиз пре предавања

Квиз пре предавања

Увод

У последње три лекције користили сте IoT за праћење камиона који превозе ваше производе са фарме до центра за обраду. Сакупљали сте GPS податке, слали их у облак ради чувања и визуализовали их на мапи. Следећи корак у повећању ефикасности вашег ланца снабдевања је добијање обавештења када је камион близу доласка у центар за обраду, како би екипа за истовар била спремна са виљушкарима и другом опремом чим возило стигне. На овај начин могу брзо истоварити, а ви не плаћате за чекање камиона и возача.

У овој лекцији ћете научити о геозонама - дефинисаним геопросторним регионима, као што је подручје унутар 2 км вожње од центра за обраду, и како тестирати да ли су GPS координате унутар или ван геозоне, како бисте могли да видите да ли је ваш GPS сензор стигао или напустио одређено подручје.

У овој лекцији ћемо обрадити:

🗑 Ово је последња лекција у овом пројекту, па након што завршите ову лекцију и задатак, не заборавите да очистите своје облачне услуге. Биће вам потребне услуге за завршетак задатка, па се уверите да сте прво завршили задатак.

Погледајте водич за чишћење пројекта ако су вам потребна упутства како то да урадите.

Шта су геозоне

Геозона је виртуелни периметар за стварни географски регион. Геозоне могу бити кругови дефинисани као тачка и радијус (на пример круг ширине 100м око зграде), или полигони који покривају подручје као што је школска зона, границе града или универзитетски или пословни кампус.

Примери геозона који приказују кружну геозону око продавнице Microsoft-а и полигоналну геозону око западног кампуса Microsoft-а

💁 Можда сте већ користили геозоне, а да тога нисте били свесни. Ако сте поставили подсетник у апликацији iOS Reminders или Google Keep на основу локације, користили сте геозону. Ове апликације постављају геозону на основу дате локације и обавештавају вас када ваш телефон уђе у геозону.

Постоји много разлога зашто бисте желели да знате да ли је возило унутар или ван геозоне:

  • Припрема за истовар - добијање обавештења да је возило стигло на локацију омогућава екипи да се припреми за истовар возила, чиме се смањује време чекања возила. Ово омогућава возачу да обави више испорука у току дана са мање времена чекања.
  • Пореска усклађеност - неке земље, као што је Нови Зеланд, наплаћују путарину за дизел возила на основу тежине возила само када се возе јавним путевима. Коришћење геозона омогућава вам да пратите пређену километражу на јавним путевима у односу на приватне путеве на локацијама као што су фарме или шумска подручја.
  • Надзор крађе - ако возило треба да остане само у одређеном подручју, као што је фарма, а напусти геозону, можда је украдено.
  • Усклађеност са локацијом - неки делови радилишта, фарме или фабрике могу бити забрањени за одређена возила, као што је држање возила која превозе вештачка ђубрива и пестициде даље од поља са органским производима. Ако се уђе у геозону, возило је ван усклађености и возач може бити обавештен.

Можете ли смислити друге начине коришћења геозона?

Azure Maps, услуга коју сте користили у претходној лекцији за визуализацију GPS података, омогућава вам да дефинишете геозоне, а затим тестирате да ли је тачка унутар или ван геозоне.

Дефинисање геозоне

Геозоне се дефинишу помоћу GeoJSON-а, исто као и тачке које су додате на мапу у претходној лекцији. У овом случају, уместо да буду FeatureCollection са Point вредностима, то је FeatureCollection који садржи Polygon.

{
   "type": "FeatureCollection",
   "features": [
     {
       "type": "Feature",
       "geometry": {
         "type": "Polygon",
         "coordinates": [
           [
             [
               -122.13393688201903,
               47.63829579223815
             ],
             [
               -122.13389128446579,
               47.63782047131512
             ],
             [
               -122.13240802288054,
               47.63783312249837
             ],
             [
               -122.13238388299942,
               47.63829037035086
             ],
             [
               -122.13393688201903,
               47.63829579223815
             ]
           ]
         ]
       },
       "properties": {
         "geometryId": "1"
       }
     }
   ]
}

Свака тачка на полигону је дефинисана као пар дужине и ширине у низу, а те тачке су у низу који је постављен као coordinates. У Point из претходне лекције, coordinates је био низ који садржи 2 вредности, ширину и дужину, док је за Polygon то низ низова који садрже 2 вредности, дужину и ширину.

💁 Запамтите, GeoJSON користи дужина, ширина за тачке, а не ширина, дужина

Низ координата полигона увек има 1 унос више од броја тачака на полигону, при чему је последњи унос исти као и први, затварајући полигон. На пример, за правоугаоник би било 5 тачака.

Правоугаоник са координатама

На слици изнад налази се правоугаоник. Координате полигона почињу у горњем левом углу на 47,-122, затим се крећу десно до 47,-121, затим доле до 46,-121, затим лево до 46,-122, а затим назад горе до почетне тачке на 47,-122. Ово даје полигону 5 тачака - горњи леви, горњи десни, доњи десни, доњи леви, а затим горњи леви да га затвори.

Покушајте да направите GeoJSON полигон око свог дома или школе. Користите алат као што је GeoJSON.io.

Задатак - дефинисање геозоне

Да бисте користили геозону у Azure Maps-у, прво је морате отпремити на свој Azure Maps налог. Када се отпреми, добићете јединствени ID који можете користити за тестирање тачке у односу на геозону. Да бисте отпремили геозоне на Azure Maps, потребно је да користите веб API за мапе. Можете позвати Azure Maps веб API помоћу алата као што је curl.

🎓 Curl је алат командне линије за прављење захтева према веб крајњим тачкама

  1. Ако користите Linux, macOS или новију верзију Windows 10, вероватно већ имате инсталиран curl. Покрените следеће из свог терминала или командне линије да бисте проверили:

    curl --version
    

    Ако не видите информације о верзији за curl, мораћете да га инсталирате са curl странице за преузимање.

    💁 Ако сте искусни са Postman-ом, можете га користити уместо тога ако вам је лакше.

  2. Направите GeoJSON датотеку која садржи полигон. Тестираћете ово помоћу свог GPS сензора, па направите полигон око своје тренутне локације. Можете га направити ручно уређивањем GeoJSON примера датог изнад или користити алат као што је GeoJSON.io.

    GeoJSON мора да садржи FeatureCollection, који садржи Feature са geometry типа Polygon.

    Такође МОРА да додате елемент properties на истом нивоу као и елемент geometry, а он мора да садржи geometryId:

    "properties": {
        "geometryId": "1"
    }
    

    Ако користите GeoJSON.io, мораћете ручно да додате овај елемент у празан properties, било након преузимања JSON датотеке или у JSON уређивачу у апликацији.

    Овај geometryId мора бити јединствен у овој датотеци. Можете отпремити више геозона као више Features у FeatureCollection у истој GeoJSON датотеци, све док свака има другачији geometryId. Полигони могу имати исти geometryId ако су отпремљени из различитих датотека у различито време.

  3. Сачувајте ову датотеку као geofence.json и идите до места где је сачувана у вашем терминалу или конзоли.

  4. Покрените следећу curl команду да бисте креирали геозону:

    curl --request POST 'https://atlas.microsoft.com/mapData/upload?api-version=1.0&dataFormat=geojson&subscription-key=<subscription_key>' \
         --header 'Content-Type: application/json' \
         --include \
         --data @geofence.json
    

    Замените <subscription_key> у URL-у са API кључем за ваш Azure Maps налог.

    URL се користи за отпремање података о мапама преко API-ја https://atlas.microsoft.com/mapData/upload. Позив укључује параметар api-version да би се одредило који Azure Maps API да се користи, што омогућава API-ју да се мења током времена уз одржавање уназад компатибилности. Формат података који се отпрема је постављен на geojson.

    Ово ће покренути POST захтев за API за отпремање и вратити листу заглавља одговора која укључују заглавље под називом location.

    content-type: application/json
    location: https://us.atlas.microsoft.com/mapData/operations/1560ced6-3a80-46f2-84b2-5b1531820eab?api-version=1.0
    x-ms-azuremaps-region: West US 2
    x-content-type-options: nosniff
    strict-transport-security: max-age=31536000; includeSubDomains
    x-cache: CONFIG_NOCACHE
    date: Sat, 22 May 2021 21:34:57 GMT
    content-length: 0
    

    🎓 Када позивате веб крајњу тачку, можете проследити параметре позиву додавањем ? након чега следе парови кључ-вредност као key=value, раздвајајући парове кључ-вредност са &.

  5. Azure Maps не обрађује ово одмах, па ћете морати да проверите да ли је захтев за отпремање завршен коришћењем URL-а датог у заглављу location. Направите GET захтев на ову локацију да бисте видели статус. Мораћете да додате свој кључ претплате на крај location URL-а додавањем &subscription-key=<subscription_key> на крај, замењујући <subscription_key> са API кључем за ваш Azure Maps налог. Покрените следећу команду:

    curl --request GET '<location>&subscription-key=<subscription_key>'
    

    Замените <location> са вредношћу заглавља location, и <subscription_key> са API кључем за ваш Azure Maps налог.

  6. Проверите вредност status у одговору. Ако није Succeeded, сачекајте минут и покушајте поново.

  7. Када статус буде Succeeded, погледајте resourceLocation из одговора. Ово садржи детаље о јединственом ID-у (познатом као UDID) за GeoJSON објекат. UDID је вредност након metadata/, а не укључујући api-version. На пример, ако је resourceLocation био:

    {
      "resourceLocation": "https://us.atlas.microsoft.com/mapData/metadata/7c3776eb-da87-4c52-ae83-caadf980323a?api-version=1.0"
    }
    

    Тада би UDID био 7c3776eb-da87-4c52-ae83-caadf980323a.

    Сачувајте копију овог UDID-а јер ће вам бити потребан за тестирање геозоне.

Тестирање тачака у односу на геозону

Када је полигон отпремљен на Azure Maps, можете тестирати тачку да бисте видели да ли је унутар или ван геозоне. Ово радите прављењем веб API захтева, прослеђујући UDID геозоне и географску ширину и дужину тачке коју тестирате.

Када правите овај захтев, можете такође проследити вредност која се зове searchBuffer. Ово говори Maps API-ју колико тачно да буде приликом враћања резултата. Разлог за ово је што GPS није савршено прецизан, и понекад локације могу бити померене за неколико метара или више. Подразумевана вредност за searchBuffer је 50м, али можете подесити вредности од 0м до 500м.

Када се резултати врате из API позива, један од делова резултата је distance измерена до најближе тачке на ивици геозоне, са позитивном вредношћу ако је тачка ван геозоне, и негативном ако је унутар геозоне. Ако је ова удаљеност мања од searchBuffer, стварна удаљеност се враћа у метрима, иначе је вредност 999 или -999. 999 значи да је тачка ван геозоне за више од searchBuffer, -999 значи да је унутар геозоне за више од searchBuffer.

Геозона са 50м searchBuffer око ње

На слици изнад, геозона има searchBuffer од 50м.

  • Тачка у центру геозоне, далеко унутар searchBuffer, има удаљеност од -999
  • Тачка далеко ван searchBuffer има удаљеност од 999
  • Тачка унутар геозоне и унутар searchBuffer, удаљена 6м од геозоне, има удаљеност од
  • Тачка ван геозоне и унутар searchBuffer, удаљена 39м од геозоне, има удаљеност од 39м

Важно је знати удаљеност до ивице геозоне и комбиновати ово са другим информацијама као што су други GPS подаци, брзина и подаци о путевима приликом доношења одлука на основу локације возила.

На пример, замислите GPS податке који показују да се возило кретало путем који пролази поред геозоне. Ако је једна GPS вредност нетачна и постави возило унутар геозоне, иако нема приступа возилом, та вредност се може игнорисати.

GPS траг који показује возило како пролази поред Microsoft кампуса на 520, са GPS очитавањима дуж пута осим једног на кампусу, унутар геозоне На слици изнад, приказан је геофенс преко дела кампуса Microsoft-а. Црвена линија показује кретање камиона дуж пута 520, са круговима који представљају GPS очитавања. Већина ових очитавања је тачна и налази се дуж пута 520, али једно нетачно очитавање је унутар геофенса. Нема начина да то очитавање буде исправно - не постоје путеви који би омогућили камиону да изненада скрене са пута 520 на кампус, а затим се врати на пут 520. Код који проверава овај геофенс мора узети у обзир претходна очитавања пре него што реагује на резултате теста геофенса.

Који додатни подаци би вам били потребни да проверите да ли се GPS очитавање може сматрати исправним?

Задатак - тестирање тачака у односу на геофенс

  1. Почните са креирањем URL-а за упит веб API-ја. Формат је:

    https://atlas.microsoft.com/spatial/geofence/json?api-version=1.0&deviceId=gps-sensor&subscription-key=<subscription-key>&udid=<UDID>&lat=<lat>&lon=<lon>
    

    Замените <subscription_key> са API кључем за ваш Azure Maps налог.

    Замените <UDID> са UDID-ом геофенса из претходног задатка.

    Замените <lat> и <lon> са географском ширином и дужином коју желите да тестирате.

    Овај URL користи https://atlas.microsoft.com/spatial/geofence/json API за упит геофенса дефинисаног помоћу GeoJSON-а. Циља 1.0 верзију API-ја. Параметар deviceId је обавезан и треба да буде име уређаја са којег долазе географска ширина и дужина.

    Подразумевани претраживачки радијус је 50м, а можете га променити додавањем додатног параметра searchBuffer=<distance>, где <distance> представља радијус претраге у метрима, од 0 до 500.

  2. Користите curl за прављење GET захтева на овај URL:

    curl --request GET '<URL>'
    

    💁 Ако добијете одговорни код BadRequest, са грешком:

    Invalid GeoJSON: All feature properties should contain a geometryId, which is used for identifying the geofence.
    

    онда вашем GeoJSON-у недостаје секција properties са geometryId. Мораћете да исправите ваш GeoJSON, а затим поновите горе наведене кораке да бисте поново отпремили и добили нови UDID.

  3. Одговор ће садржати листу geometries, једну за сваки полигон дефинисан у GeoJSON-у који је коришћен за креирање геофенса. Свака геометрија има 3 поља од интереса: distance, nearestLat и nearestLon.

    {
        "geometries": [
            {
                "deviceId": "gps-sensor",
                "udId": "7c3776eb-da87-4c52-ae83-caadf980323a",
                "geometryId": "1",
                "distance": 999.0,
                "nearestLat": 47.645875,
                "nearestLon": -122.142713
            }
        ],
        "expiredGeofenceGeometryId": [],
        "invalidPeriodGeofenceGeometryId": []
    }
    
    • nearestLat и nearestLon су географска ширина и дужина тачке на ивици геофенса која је најближа локацији која се тестира.

    • distance је удаљеност од локације која се тестира до најближе тачке на ивици геофенса. Негативни бројеви значе да је унутар геофенса, позитивни ван. Ова вредност ће бити мања од 50 (подразумевани радијус претраге), или 999.

  4. Поновите ово више пута са локацијама унутар и ван геофенса.

Коришћење геофенса из серверлес кода

Сада можете додати нови тригер у вашу Functions апликацију за тестирање IoT Hub GPS података о догађајима у односу на геофенс.

Потрошачке групе

Као што се сећате из претходних лекција, IoT Hub вам омогућава да поново репродукујете догађаје који су примљени од хаба, али нису обрађени. Али шта би се десило ако се повежу више тригера? Како ће знати који је обрадио које догађаје?

Одговор је да не може! Уместо тога, можете дефинисати више одвојених конекција за читање догађаја, и свака може управљати репродукцијом непрочитаних порука. Ове се називају потрошачке групе. Када се повежете на крајњу тачку, можете специфицирати коју потрошачку групу желите да користите. Свака компонента ваше апликације ће се повезати на различиту потрошачку групу.

Један IoT Hub са 3 потрошачке групе које дистрибуирају исте поруке на 3 различите Functions апликације

Теоретски, до 5 апликација може се повезати на сваку потрошачку групу, и све ће примати поруке када стигну. Најбоља пракса је да само једна апликација приступа свакој потрошачкој групи како би се избегла дуплирана обрада порука и осигурало да се приликом поновног покретања све поруке у реду правилно обраде. На пример, ако покренете вашу Functions апликацију локално, као и у облаку, обе би обрађивале поруке, што би довело до дуплираних блобова ускладиштених у складишном налогу.

Ако прегледате function.json датотеку за IoT Hub тригер који сте креирали у ранијој лекцији, видећете потрошачку групу у секцији за повезивање тригера догађаја:

"consumerGroup": "$Default"

Када креирате IoT Hub, добијате подразумевану потрошачку групу $Default. Ако желите да додате додатни тригер, можете га додати користећи нову потрошачку групу.

💁 У овој лекцији, користићете другачију функцију за тестирање геофенса од оне која се користи за чување GPS података. Ово је да се покаже како се користе потрошачке групе и раздваја код ради лакшег читања и разумевања. У производној апликацији постоји много начина на које можете архитектонски решити ово - стављањем оба у једну функцију, коришћењем тригера на складишном налогу за покретање функције за проверу геофенса, или коришћењем више функција. Не постоји "прави начин", све зависи од остатка ваше апликације и ваших потреба.

Задатак - креирање нове потрошачке групе

  1. Покрените следећу команду за креирање нове потрошачке групе назване geofence за ваш IoT Hub:

    az iot hub consumer-group create --name geofence \
                                     --hub-name <hub_name>
    

    Замените <hub_name> са именом које сте користили за ваш IoT Hub.

  2. Ако желите да видите све потрошачке групе за IoT Hub, покрените следећу команду:

    az iot hub consumer-group list --output table \
                                   --hub-name <hub_name>
    

    Замените <hub_name> са именом које сте користили за ваш IoT Hub. Ово ће приказати све потрошачке групе.

    Name      ResourceGroup
    --------  ---------------
    $Default  gps-sensor
    geofence  gps-sensor
    

💁 Када сте покренули монитор догађаја IoT Hub у ранијој лекцији, он се повезао на подразумевану потрошачку групу $Default. Због тога не можете покренути монитор догађаја и тригер догађаја истовремено. Ако желите да покренете оба, онда можете користити друге потрошачке групе за све ваше Functions апликације, и задржати $Default за монитор догађаја.

Задатак - креирање новог IoT Hub тригера

  1. Додајте нови IoT Hub тригер догађаја у вашу gps-trigger Functions апликацију коју сте креирали у ранијој лекцији. Назовите ову функцију geofence-trigger.

    ⚠️ Можете се позвати на упутства за креирање IoT Hub тригера догађаја из пројекта 2, лекција 5 ако је потребно.

  2. Конфигуришите IoT Hub конекцијски стринг у function.json датотеци. local.settings.json је заједнички за све тригере у Functions апликацији.

  3. Ажурирајте вредност consumerGroup у function.json датотеци да референцира нову потрошачку групу geofence:

    "consumerGroup": "geofence"
    
  4. Биће вам потребан кључ претплате за ваш Azure Maps налог у овом тригеру, па додајте нови унос у local.settings.json датотеку назван MAPS_KEY.

  5. Покрените Functions апликацију да бисте се уверили да се повезује и обрађује поруке. iot-hub-trigger из раније лекције ће такође радити и отпремати блобове у складиште.

    Да бисте избегли дуплирана GPS очитавања у блоб складишту, можете зауставити Functions апликацију коју имате покренуту у облаку. Да бисте то урадили, користите следећу команду:

    az functionapp stop --resource-group gps-sensor \
                        --name <functions_app_name>
    

    Замените <functions_app_name> са именом које сте користили за вашу Functions апликацију.

    Можете је поново покренути касније помоћу следеће команде:

    az functionapp start --resource-group gps-sensor \
                        --name <functions_app_name>
    

    Замените <functions_app_name> са именом које сте користили за вашу Functions апликацију.

Задатак - тестирање геофенса из тригера

Раније у овој лекцији користили сте curl за упит геофенса да бисте видели да ли се тачка налази унутар или ван. Можете направити сличан веб захтев из вашег тригера.

  1. Да бисте упитали геофенс, потребан вам је његов UDID. Додајте нови унос у local.settings.json датотеку назван GEOFENCE_UDID са овом вредношћу.

  2. Отворите __init__.py датотеку из новог тригера geofence-trigger.

  3. Додајте следећи импорт на врх датотеке:

    import json
    import os
    import requests
    

    Пакет requests омогућава вам да правите веб API позиве. Azure Maps нема Python SDK, потребно је да правите веб API позиве да бисте га користили из Python кода.

  4. Додајте следеће 2 линије на почетак main методе да бисте добили кључ претплате за Maps:

    maps_key = os.environ['MAPS_KEY']
    geofence_udid = os.environ['GEOFENCE_UDID']    
    
  5. Унутар for event in events петље, додајте следеће да бисте добили географску ширину и дужину из сваког догађаја:

    event_body = json.loads(event.get_body().decode('utf-8'))
    lat = event_body['gps']['lat']
    lon = event_body['gps']['lon']
    

    Овај код конвертује JSON из тела догађаја у речник, а затим извлачи lat и lon из gps поља.

  6. Када користите requests, уместо да градите дугачак URL као што сте радили са curl-ом, можете користити само део URL-а и проследити параметре као речник. Додајте следећи код да дефинишете URL за позив и конфигуришете параметре:

    url = 'https://atlas.microsoft.com/spatial/geofence/json'
    
    params = {
        'api-version': 1.0,
        'deviceId': 'gps-sensor',
        'subscription-key': maps_key,
        'udid' : geofence_udid,
        'lat' : lat,
        'lon' : lon
    }
    

    Елементи у речнику params ће одговарати паровима кључ-вредност које сте користили приликом позива веб API-ја преко curl-а.

  7. Додајте следеће линије кода за позив веб API-ја:

    response = requests.get(url, params=params)
    response_body = json.loads(response.text)
    

    Ово позива URL са параметрима и добија назад објекат одговора.

  8. Додајте следећи код испод овога:

    distance = response_body['geometries'][0]['distance']
    
    if distance == 999:
        logging.info('Point is outside geofence')
    elif distance > 0:
        logging.info(f'Point is just outside geofence by a distance of {distance}m')
    elif distance == -999:
        logging.info(f'Point is inside geofence')
    else:
        logging.info(f'Point is just inside geofence by a distance of {distance}m')
    

    Овај код претпоставља једну геометрију и извлачи удаљеност из те једне геометрије. Затим бележи различите поруке на основу удаљености.

  9. Покрените овај код. У излазним логовима ћете видети да ли су GPS координате унутар или ван геофенса, са удаљеношћу ако је тачка унутар 50м. Пробајте овај код са различитим геофенсима на основу локације вашег GPS сензора, пробајте да померите сензор (на пример повезан на WiFi са мобилног телефона, или са различитим координатама на виртуелном IoT уређају) да бисте видели ову промену.

  10. Када будете спремни, отпремите овај код у вашу Functions апликацију у облаку. Не заборавите да отпремите нова подешавања апликације.

    ⚠️ Можете се позвати на упутства за отпремање подешавања апликације из пројекта 2, лекција 5 ако је потребно.

    ⚠️ Можете се позвати на упутства за отпремање ваше Functions апликације из пројекта 2, лекција 5 ако је потребно.

💁 Овај код можете пронаћи у code/functions фолдеру.


🚀 Изазов

У овој лекцији додали сте један геофенс користећи GeoJSON датотеку са једним полигоном. Можете отпремити више полигона истовремено, све док имају различите geometryId вредности у секцији properties.

Пробајте да отпремите GeoJSON датотеку са више полигона и прилагодите ваш код да пронађе који полигон је најближи GPS координатама или унутар њих.

Квиз након предавања

Квиз након предавања

Преглед и самостално учење

Задатак

Пошаљите обавештења користећи Twilio


Одрицање од одговорности:
Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције Co-op Translator. Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.