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/2-store-location-data/README.md

46 KiB

Локација продавнице података

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

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

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

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

Увод

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

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

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

Структурирани и неструктурирани подаци

Рачунарски системи раде са подацима, а ти подаци долазе у различитим облицима и величинама. Могу варирати од једноставних бројева, до великих количина текста, видеа и слика, па до IoT података. Подаци се обично деле у две категорије - структурирани подаци и неструктурирани подаци.

  • Структурирани подаци су подаци са добро дефинисаном, крутом структуром која се не мења и обично се мапирају на табеле података са односима. Један пример су лични подаци особе, укључујући њено име, датум рођења и адресу.

  • Неструктурирани подаци су подаци без добро дефинисане, круте структуре, укључујући податке који могу често мењати структуру. Један пример су документи као што су писани документи или табеле.

Урадите мало истраживања: Можете ли смислити неке друге примере структурираних и неструктурираних података?

💁 Постоје и полуструктурирани подаци који су структурирани, али не одговарају фиксним табелама података.

IoT подаци се обично сматрају неструктурираним подацима.

Замислите да додајете IoT уређаје у флоту возила за велику комерцијалну фарму. Можда желите да користите различите уређаје за различите типове возила. На пример:

  • За фармска возила као што су трактори, желите GPS податке како бисте осигурали да раде на исправним њивама.
  • За камионе за доставу хране у складишта, желите GPS податке као и податке о брзини и убрзању како бисте осигурали да возач вози безбедно, као и податке о идентитету возача и почетку/завршетку рада како бисте осигурали усклађеност са локалним законима о радним часовима.
  • За камионе са хладњачама, такође желите податке о температури како бисте осигурали да храна не постане превише топла или хладна и поквари се током транспорта.

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

Које друге IoT податке би могли бити прикупљени? Размислите о врстама терета које камиони могу носити, као и о подацима о одржавању.

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

SQL vs NoSQL складиштење

Базе података су услуге које омогућавају складиштење и претрагу података. Базе података долазе у два типа - SQL и NoSQL.

SQL базе података

Прве базе података биле су Системи за управљање релационим базама података (RDBMS), или релационе базе података. Оне су такође познате као SQL базе података по Structured Query Language (SQL) који се користи за интеракцију са њима ради додавања, уклањања, ажурирања или претраге података. Ове базе података се састоје од шеме - добро дефинисаног скупа табела података, слично табели. Свака табела има више именованих колона. Када уносите податке, додајете ред у табелу, стављајући вредности у сваку од колона. Ово држи податке у веома крутој структури - иако можете оставити колоне празне, ако желите да додате нову колону, морате то урадити на бази података, попуњавајући вредности за постојеће редове. Ове базе података су релационе - у смислу да једна табела може имати однос са другом.

Релациона база података са ID корисника у табели User који се односи на колону user ID у табели куповина, и ID производа у табели Products који се односи на product ID у табели куповина

На пример, ако складиштите личне податке корисника у табели, имали бисте неку врсту интерног јединственог ID за сваког корисника који се користи у реду у табели која садржи име и адресу корисника. Ако затим желите да складиштите друге детаље о том кориснику, као што су његове куповине, у другој табели, имали бисте једну колону у новој табели за ID тог корисника. Када претражујете корисника, можете користити његов ID да добијете његове личне податке из једне табеле и његове куповине из друге.

SQL базе података су идеалне за складиштење структурираних података и када желите да осигурате да подаци одговарају вашој шеми.

Ако нисте користили SQL раније, одвојите тренутак да прочитате о њему на SQL страници на Википедији.

Неке познате SQL базе података су Microsoft SQL Server, MySQL и PostgreSQL.

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

NoSQL базе података

NoSQL базе података се називају NoSQL јер немају исту круту структуру као SQL базе података. Такође су познате као базе података докумената јер могу складиштити неструктуриране податке као што су документи.

💁 Упркос њиховом имену, неке NoSQL базе података омогућавају вам да користите SQL за претрагу података.

Документи у фасциклама у NoSQL бази података

NoSQL базе података немају унапред дефинисану шему која ограничава начин складиштења података, уместо тога можете уносити било које неструктуриране податке, обично користећи JSON документе. Ови документи могу бити организовани у фасцикле, слично фајловима на вашем рачунару. Сваки документ може имати различита поља од других докумената - на пример, ако складиштите IoT податке са ваших фармских возила, неки могу имати поља за податке о акцелерометру и брзини, други могу имати поља за температуру у приколици. Ако бисте додали нови тип камиона, као што је онај са уграђеним вагама за праћење тежине носивости, ваш IoT уређај би могао додати ово ново поље и оно би могло бити складиштено без икаквих промена на бази података.

Неке познате NoSQL базе података укључују Azure CosmosDB, MongoDB и CouchDB.

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

У овој лекцији, користићете NoSQL складиштење за складиштење IoT података.

Слање GPS података у IoT Hub

У претходној лекцији прикупили сте GPS податке са GPS сензора повезаног са вашим IoT уређајем. Да бисте складиштили ове IoT податке у облаку, потребно је да их пошаљете IoT услузи. Поново ћете користити Azure IoT Hub, исту IoT услугу у облаку коју сте користили у претходном пројекту.

Слање GPS телеметрије са IoT уређаја у IoT Hub

Задатак - слање GPS података у IoT Hub

  1. Направите нови IoT Hub користећи бесплатни ниво.

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

    Запамтите да направите нову групу ресурса. Назовите нову групу ресурса gps-sensor, а нови IoT Hub јединственим именом заснованим на gps-sensor, као што је gps-sensor-<ваше име>.

    💁 Ако још увек имате свој IoT Hub из претходног пројекта, можете га поново користити. Запамтите да користите име овог IoT Hub-а и групу ресурса у којој се налази приликом креирања других услуга.

  2. Додајте нови уређај у IoT Hub. Назовите овај уређај gps-sensor. Узмите конекциони стринг за уређај.

  3. Ажурирајте код вашег уређаја да шаље GPS податке новом IoT Hub-у користећи конекциони стринг уређаја из претходног корака.

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

  4. Када шаљете GPS податке, урадите то као JSON у следећем формату:

    {
        "gps" :
        {
            "lat" : <latitude>,
            "lon" : <longitude>
        }
    }
    
  5. Шаљите GPS податке сваког минута како не бисте потрошили дневну квоту порука.

Ако користите Wio Terminal, запамтите да додате све потребне библиотеке и подесите време користећи NTP сервер. Ваш код такође треба да осигура да је прочитао све податке са серијског порта пре слања GPS локације, користећи постојећи код из претходне лекције. Користите следећи код за конструисање JSON документа:

DynamicJsonDocument doc(1024);
doc["gps"]["lat"] = gps.location.lat();
doc["gps"]["lon"] = gps.location.lng();

Ако користите виртуелни IoT уређај, запамтите да инсталирате све потребне библиотеке користећи виртуелно окружење.

За оба Raspberry Pi и виртуелни IoT уређај, користите постојећи код из претходне лекције за добијање вредности географске ширине и дужине, затим их пошаљите у исправном JSON формату са следећим кодом:

message_json = { "gps" : { "lat":lat, "lon":lon } }
print("Sending telemetry", message_json)
message = Message(json.dumps(message_json))

💁 Овај код можете пронаћи у code/wio-terminal, code/pi или code/virtual-device фасцикли.

Покрените код вашег уређаја и осигурајте да поруке стижу у IoT Hub користећи CLI команду az iot hub monitor-events.

Врући, топли и хладни путеви

Подаци који стижу са IoT уређаја у облак не обрађују се увек у реалном времену. Неки подаци захтевају обраду у реалном времену, други могу бити обрађени мало касније, а трећи могу бити обрађени много касније. Проток података ка различитим услугама које обрађују податке у различитим временима назива се врући, топли и хладни путеви.

Врући пут

Врући пут се односи на податке који морају бити обрађени у реалном времену или скоро реалном времену. Користили бисте податке из врућег пута за упозорења, као што су добијање упозорења да се возило приближава депоу или да је температура у хладњачи превисока.

Да бисте користили податке из врућег пута, ваш код би реаговао на догађаје чим их приме ваше услуге у облаку.

Топли пут

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

Подаци из топлог пута се складиште чим их приме услуге у облаку у некој врсти складишта које може бити брзо приступљено.

Хладни пут

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

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

Размислите о подацима које сте прикупили до сада у овим лекцијама. Да ли су то подаци из врућег, топлог или хладног пута?

Обрада GPS догађаја помоћу серверлес кода

Када подаци почну да стижу у ваш IoT Hub, можете написати серверлес код који ће слушати догађаје објављене на Event-Hub компатибилном крајњ

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

  1. Додајте тригер за догађаје IoT Hub-а који користи компатибилну крајњу тачку Event Hub-а.

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

  2. Поставите стринг за повезивање компатибилне крајње тачке Event Hub-а у датотеку local.settings.json, и користите кључ за ту ставку у датотеци function.json.

  3. Користите апликацију Azurite као локални емулатор за складиштење.

  4. Покрените апликацију функција да бисте проверили да ли прима догађаје са вашег GPS уређаја. Уверите се да ваш IoT уређај такође ради и шаље GPS податке.

    Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}}
    

Azure Storage налози

Лого Azure Storage-а

Azure Storage налози су услуга за складиштење опште намене која може чувати податке на различите начине. Можете чувати податке као блобове, у редовима, у табелама или као датотеке, и све то истовремено.

Блоб складиштење

Реч Blob означава велике бинарне објекте, али је постала термин за било које неструктуриране податке. Можете чувати било које податке у блоб складишту, од JSON докумената који садрже IoT податке, до слика и видео датотека. Блоб складиштење има концепт контенера, именованих "канти" у којима можете чувати податке, слично табелама у релационим базама података. Ови контенери могу имати један или више фолдера за чување блобова, а сваки фолдер може садржати друге фолдере, слично начину на који се датотеке чувају на вашем хард диску.

У овој лекцији ћете користити блоб складиштење за чување IoT података.

Урадите мало истраживања: Прочитајте о Azure Blob Storage

Табеларно складиштење

Табеларно складиштење омогућава чување полу-структурираних података. Табеларно складиштење је заправо NoSQL база података, тако да не захтева унапред дефинисан скуп табела, али је дизајнирано за чување података у једној или више табела, са јединственим кључевима за дефинисање сваког реда.

Урадите мало истраживања: Прочитајте о Azure Table Storage

Редовно складиштење

Редовно складиштење омогућава чување порука величине до 64KB у реду. Можете додати поруке на крај реда и читати их са почетка. Редови чувају поруке на неодређено време док год има простора за складиштење, што омогућава дугорочно чување порука, а затим њихово читање када је потребно. На пример, ако желите да покренете месечни задатак за обраду GPS података, можете их додавати у ред сваки дан током месеца, а затим на крају месеца обрадити све поруке из реда.

Урадите мало истраживања: Прочитајте о Azure Queue Storage

Складиштење датотека

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

Урадите мало истраживања: Прочитајте о Azure File Storage

Повежите ваш серверлес код са складиштем

Ваша апликација функција сада треба да се повеже са блоб складиштем како би чувала поруке са IoT Hub-а. Постоје два начина да се то уради:

  • Унутар кода функције, повежите се са блоб складиштем користећи Python SDK за блоб складиште и пишите податке као блобове.
  • Користите везу за излаз функције да бисте повезали повратну вредност функције са блоб складиштем и аутоматски сачували блоб.

У овој лекцији ћете користити Python SDK да бисте видели како да интерагујете са блоб складиштем.

Слање GPS телеметрије са IoT уређаја на IoT Hub, затим на Azure Functions преко тригера за догађаје Event Hub-а, а затим чување у блоб складиште

Подаци ће бити сачувани као JSON блоб са следећим форматом:

{
    "device_id": <device_id>,
    "timestamp" : <time>,
    "gps" :
    {
        "lat" : <latitude>,
        "lon" : <longitude>
    }
}

Задатак - повежите ваш серверлес код са складиштем

  1. Креирајте Azure Storage налог. Назовите га нешто попут gps<ваше име>.

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

    Ако још увек имате налог за складиштење из претходног пројекта, можете га поново користити.

    💁 Моћи ћете да користите исти налог за складиштење за постављање ваше Azure Functions апликације касније у овој лекцији.

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

    az storage account show-connection-string --output table \
                                              --name <storage_name>
    

    Замените <storage_name> именом налога за складиштење који сте креирали у претходном кораку.

  3. Додајте нову ставку у датотеку local.settings.json за стринг за повезивање вашег налога за складиштење, користећи вредност из претходног корака. Назовите је STORAGE_CONNECTION_STRING.

  4. Додајте следеће у датотеку requirements.txt да бисте инсталирали Azure складишне Pip пакете:

    azure-storage-blob
    

    Инсталирајте пакете из ове датотеке у вашем виртуелном окружењу.

    Ако добијете грешку, надоградите вашу Pip верзију у виртуелном окружењу на најновију верзију помоћу следеће команде, а затим покушајте поново:

    pip install --upgrade pip
    
  5. У датотеци __init__.py за iot-hub-trigger, додајте следеће import изјаве:

    import json
    import os
    import uuid
    from azure.storage.blob import BlobServiceClient, PublicAccess
    

    Модул json из системске библиотеке ће се користити за читање и писање JSON-а, модул os за читање стринга за повезивање, а модул uuid за генерисање јединственог ID-а за GPS податке.

    Пакет azure.storage.blob садржи Python SDK за рад са блоб складиштем.

  6. Пре методе main, додајте следећу помоћну функцију:

    def get_or_create_container(name):
        connection_str = os.environ['STORAGE_CONNECTION_STRING']
        blob_service_client = BlobServiceClient.from_connection_string(connection_str)
    
        for container in blob_service_client.list_containers():
            if container.name == name:
                return blob_service_client.get_container_client(container.name)
    
        return blob_service_client.create_container(name, public_access=PublicAccess.Container)
    

    Python SDK за блоб складиштење нема помоћну методу за креирање контенера ако не постоји. Овај код ће учитати стринг за повезивање из датотеке local.settings.json (или из Application Settings када се постави у облак), затим креирати класу BlobServiceClient из овога за интеракцију са налогом за блоб складиштење. Затим пролази кроз све контенере налога за блоб складиштење, тражећи онај са датим именом - ако га пронађе, вратиће класу ContainerClient која може интераговати са контенером за креирање блобова. Ако га не пронађе, контенер се креира и враћа се клијент за нови контенер.

    Када се нови контенер креира, јавни приступ се одобрава за упите блобова у контенеру. Ово ће се користити у следећој лекцији за визуализацију GPS података на мапи.

  7. За разлику од података о влажности земљишта, са овим кодом желимо да чувамо сваки догађај, па додајте следећи код унутар петље for event in events: у функцији main, испод изјаве logging:

    device_id = event.iothub_metadata['connection-device-id']
    blob_name = f'{device_id}/{str(uuid.uuid1())}.json'
    

    Овај код добија ID уређаја из метаподатака догађаја, а затим га користи за креирање имена блоба. Блобови могу бити чувани у фолдерима, а ID уређаја ће се користити за име фолдера, тако да ће сваки уређај имати све своје GPS догађаје у једном фолдеру. Име блоба је овај фолдер, праћен именом документа, одвојеним косом цртом, слично Linux и macOS путевима (слично и Windows-у, али Windows користи обрнуте косе црте). Име документа је јединствени ID генерисан помоћу Python модула uuid, са типом датотеке json.

    На пример, за ID уређаја gps-sensor, име блоба може бити gps-sensor/a9487ac2-b9cf-11eb-b5cd-1e00621e3648.json.

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

    container_client = get_or_create_container('gps-data')
    blob = container_client.get_blob_client(blob_name)
    

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

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

    event_body = json.loads(event.get_body().decode('utf-8'))
    blob_body = {
        'device_id' : device_id,
        'timestamp' : event.iothub_metadata['enqueuedtime'],
        'gps': event_body['gps']
    }
    

    Ово гради тело блоба који ће бити написан у блоб складиште. То је JSON документ који садржи ID уређаја, време када је телеметрија послата IoT Hub-у, и GPS координате из телеметрије.

    💁 Важно је користити време када је порука стављена у ред (enqueued time) уместо тренутног времена да бисте добили време када је порука послата. Може бити на чекању у хабу неко време пре него што буде преузета ако апликација функција не ради.

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

    logging.info(f'Writing blob to {blob_name} - {blob_body}')
    blob.upload_blob(json.dumps(blob_body).encode('utf-8'))
    

    Овај код бележи да ће блоб бити написан са његовим детаљима, а затим отпрема тело блоба као садржај новог блоба.

  11. Покрените апликацију функција. Видећете да се блобови пишу за све GPS догађаје у излазу:

    [2021-05-21T01:31:14.325Z] Python EventHub trigger processed an event: {"gps": {"lat": 47.73092, "lon": -122.26206}}
    ...
    [2021-05-21T01:31:14.351Z] Writing blob to gps-sensor/4b6089fe-ba8d-11eb-bc7b-1e00621e3648.json - {'device_id': 'gps-sensor', 'timestamp': '2021-05-21T00:57:53.878Z', 'gps': {'lat': 47.73092, 'lon': -122.26206}}
    

    💁 Уверите се да не покрећете монитор за догађаје IoT Hub-а у исто време.

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

Задатак - проверите отпремљене блобове

  1. Да бисте видели креиране блобове, можете користити Azure Storage Explorer, бесплатан алат који вам омогућава да видите и управљате вашим налозима за складиштење, или CLI.

    1. Да бисте користили CLI, прво ће вам бити потребан кључ налога. Покрените следећу команду да бисте добили овај кључ:

      az storage account keys list --output table \
                                   --account-name <storage_name>
      

      Замените <storage_name> именом налога за складиштење.

      Копирајте вредност key1.

    2. Покрените следећу команду да бисте навели блобове у контенеру:

      az storage blob list --container-name gps-data \
                           --output table \
                           --account-name <storage_name> \
                           --account-key <key1>
      

      Замените <storage_name> именом налога за складиштење, и <key1> вредношћу key1 коју сте копирали у претходном кораку.

      Ово ће навести све блобове у контенеру:

      Name                                                  Blob Type    Blob Tier    Length    Content Type              Last Modified              Snapshot
      ----------------------------------------------------  -----------  -----------  --------  ------------------------  -------------------------  ----------
      gps-sensor/1810d55e-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:27+00:00
      gps-sensor/18293e46-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      gps-sensor/1844549c-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      gps-sensor/1894d714-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      
    3. Преузмите један од блобова користећи следећу команду:

      az storage blob download --container-name gps-data \
                               --account-name <storage_name> \
                               --account-key <key1> \
                               --name <blob_name> \
                               --file <file_name>
      

      Замените <storage_name> именом налога за складиштење, и <key1> вредношћу key1 коју сте копирали у претходном кораку.

      Замените <blob_name> пуним именом из колоне Name излазног резултата претходног корака, укључујући име фолдера. Замените <file_name> именом локалне датотеке за чување блоба.

    Када преузмете, можете отворити JSON датотеку у VS Code-у, и видећете блоб који садржи детаље GPS локације:

    {"device_id": "gps-sensor", "timestamp": "2021-05-21T00:57:53.878Z", "gps": {"lat": 47.73092, "lon": -122.26206}}
    

Задатак - поставите вашу апликацију функција у облак

Сада када ваша апликација функција ради, можете је поставити у облак.

  1. Креирајте нову Azure Functions апликацију, користећи налог за складиштење који сте креирали раније. Назовите је нешто попут gps-sensor- и додајте јединствени идентификатор на крај, као што су неке насумичне речи или ваше име.

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

  2. Отпремите вредности IOT_HUB_CONNECTION_STRING и STORAGE_CONNECTION_STRING у Application Settings.

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

  3. Поставите вашу локалну апликацију функција у облак.

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

🚀 Изазов

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

Размислите како би сателитска навигација могла да превазиђе овај проблем? Које податке ваш навигациони систем има који би му омогућили да боље предвиди вашу локацију?

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

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

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

Задатак

Истражите везивање функција


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