Sdílet prostřednictvím


Klientská knihovna úložiště Azure IoT Models pro Python – verze 1.0.0a20220330001

Knihovna úložiště Azure IoT Models pro Python poskytuje funkce pro práci s úložištěm modelů Azure IoT.

Začínáme

Nainstalovat balíček

Nainstalujte knihovnu úložiště Azure IoT Models pro Python pomocí pip:

pip install azure-iot-modelsrepository

Požadavky

  • Úložiště modelů podle konvencí Azure IoT
    • Úložiště modelů může být hostované v místním systému souborů nebo hostované na webovém serveru.
    • Azure IoT je hostitelem globálního úložiště modelů Azure IoT, které bude klient používat, pokud není k dispozici žádné vlastní umístění.

Modely publikování

Postupujte podle průvodce publikováním modelů do globálního úložiště modelů Azure IoT.

Pokud používáte vlastní místní nebo vzdálené úložiště, můžete jednoduše přidat soubory modelu do adresářové struktury v umístění úložiště, např. dtmi/com/example/thermostat-1.json

Authentication

V současné době nejsou podporovány žádné mechanismy ověřování. Globální koncový bod není vázaný na předplatné Azure a nepodporuje ověřování. Všechny publikované modely jsou určené k anonymnímu veřejnému používání.

Klíčové koncepty

Úložiště modelů Azure IoT umožňuje tvůrcům spravovat a sdílet modely digitálních dvojčat. Modely jsou dokumenty JSON-LD definované pomocí jazyka DTDL (Digital Twins Definition Language).

Úložiště definuje vzor pro ukládání rozhraní DTDL do adresářové struktury založené na identifikátoru modelu DTMI (Digital Twin Model Identifier). Rozhraní v úložišti můžete najít převodem DTMI na relativní cestu. Například DTMI dtmi:com:example:Thermostat;1 se přeloží na /dtmi/com/example/thermostat-1.json.

Příklady

Následující části obsahují několik fragmentů kódu, které pokrývají běžné úlohy úložiště modelů:

Inicializace modelsRepositoryClient

Umístění úložiště

Pokud během vytváření instance není zadané žádné umístění úložiště, použije se globální koncový bod úložiště Azure IoT Models (https://devicemodels.azure.com/).

client = ModelsRepositoryClient()

Alternativně můžete prostřednictvím volitelného repository_location klíčového slova zadat vlastní umístění, kde se vaše úložiště nachází. Klient přijímá následující formáty umístění:

  • Adresa URL webu – např. "https://contoso.com/models/"
  • Identifikátor URI místního systému souborů – např. "file:///path/to/repository/"
  • Cesta k souboru POSIX – např. "/path/to/repository/"
  • Cesta k souboru s písmenem jednotky – např. "C:/path/to/repository/"
client = ModelsRepositoryClient(repository_location="https://contoso.com/models/")

Režim řešení závislostí

Klienta je možné nakonfigurovat s volitelným dependency_resolution režimem při vytváření instance pomocí jedné z následujících hodnot:

  • 'disabled' – Klient nepřeloží závislosti modelu.
  • 'enabled' – Klient vyřeší všechny závislosti modelu.
  • 'tryFromExpanded' – Klient se pokusí přeložit modely pomocí rozšířené definice modelu (pokud není možné, vrátí se zpět do 'enabled' režimu).
client = ModelsRepositoryClient(dependency_resolution="enabled")

dependency_resolution Pokud režim není zadaný:

  • Klienti nakonfigurovaní pro globální koncový bod úložiště Azure IoT Models budou ve výchozím nastavení používat 'tryFromExpanded'
  • Klienti nakonfigurovaní pro vlastní umístění (vzdálené nebo místní) budou ve výchozím nastavení používat 'enabled'

Další možnosti

Pokud potřebujete přepsat výchozí chování kanálu z knihovny azure-core, můžete během vytváření instance zadat různé argumenty s klíčovými slovy .

Vyčištění klienta

Po dokončení práce s klientem nezapomeňte zavolat .close() , abyste uvolnili prostředky.

client = ModelsRepositoryClient()
# Do things
client.close()

Abyste se tomu vyhnuli, doporučujeme, abyste kdykoli je to možné, používali klienta z kontextového správce, který se pro vás automaticky uzavře.

with ModelsRepositoryClient() as client:
    # Do things

ModelsRepositoryClient – získání modelů

Mějte na paměti, že před jejich načtením musíte nejprve publikovat modely modelů do úložiště. Následující příklady předpokládají, že používáte globální úložiště modelů Azure IoT.

Volání .get_models() načte model na zadaném rozhraní DTMI a potenciálně i jeho závislosti (v závislosti na režimu rozlišení závislostí). Vrátí hodnotu , dict která mapuje rozhraní DTMI na definice modelu.

dtmi = "dtmi:com:example:TemperatureController;1"
with ModelsRepositoryClient() as client:
    models = get_models(dtmi)
print("{} resolved in {} interfaces".format(dtmi, len(models)))

Pokud metodě poskytnete více DTMI, můžete načíst více modelů (a potenciálně jejich závislosti) najednou.

dtmis = ["dtmi:com:example:TemperatureController;1", "dtmi:com:example:azuresphere:sampledevice;1"]
with ModelsRepositoryClient() as client:
    models = get_models(dtmis)
print("{} resolved in {} interfaces".format(dtmi, len(models)))

Ve výchozím nastavení klient při načítání modelů použije režim rozlišení závislostí závislostí, se kterým byl nakonfigurován při vytváření instance. Toto chování však lze přepsat předáním libovolné z platných možností v souboru jako volitelného argumentu klíčového slova do .get_models()

dtmi = "dtmi:com:example:TemperatureController;1"
with ModelsRepositoryClient(dependency_resolution="disabled") as client:
    models = get_models(dtmi, dependency_resolution="enabled")

Konvence DTMI

Balíček obsahuje modul s názvem dtmi_conventions, který při importu poskytuje řadu pomocných operací pro práci s DTMI.

# Returns True - this is a valid DTMI
dtmi_conventions.is_valid_dtmi("dtmi:com:example:Thermostat;1")

# Returns False - this is NOT a valid DTMI
dtmi_conventions.is_valid_dtmi("dtmi:com:example:Thermostat")
dtmi = "dtmi:com:example:Thermostat;1"

# Local repository example
repo_uri = "file:///path/to/repository"
print(dtmi_conventions.get_model_uri(dtmi, repo_uri))
# Prints: "file:///path/to/repository/dtmi/com/example/thermostat-1.json"
print(dtmi_conventions.get_model_uri(dtmi, repo_uri, expanded=True))
# Prints: "file:///path/to/repository/dtmi/com/example/thermostat-1.expanded.json"

# Remote repository example
repo_uri = "https://contoso.com/models/"
print(dtmi_conventions.get_model_uri(dtmi, repo_uri))
# Prints: "https://contoso/com/models/dtmi/com/example/thermostat-1.json"
print(dtmi_conventions.get_model_uri(dtmi, repo_uri, expanded=True))
# Prints: "https://contoso/com/models/dtmi/com/example/thermostat-1.expanded.json"

Poradce při potížích

protokolování

Tato knihovna používá k protokolování standardní knihovnu protokolování . Informace o relacích HTTP (adresy URL, hlavičky atd.) se protokolují na DEBUG úrovni.

Výjimky

Rozhraní API úložiště modelů můžou vyvolávat výjimky definované v Azure-Core.

Kromě toho mohou vyvolat výjimky definované v :azure-iot-modelsrepository

  • ModelError – Označuje, že při pokusu o analýzu nebo vyřešení definice modelu došlo k chybě. Obecně to znamená, že existuje poškozený model, který nevyhovuje specifikaci modelu DTDL.

Zadání zpětné vazby

Pokud narazíte na chyby nebo máte návrhy, otevřete problém.

Další kroky

Ukázky

Další ukázky jsou k dispozici v úložišti ukázek.

Přispívání

Tento projekt vítá příspěvky a návrhy. Většina příspěvků vyžaduje souhlas s licenční smlouvou s přispěvatelem (CLA), která stanoví, že máte právo udělit nám práva k používání vašeho příspěvku a skutečně tak činíte. Podrobnosti najdete tady: https://cla.microsoft.com

Při odesílání žádosti o přijetí změn robot CLA automaticky určí, jestli je potřeba poskytnout smlouvu CLA, a příslušným způsobem žádost o přijetí změn upraví (např. přidáním jmenovky nebo komentáře). Stačí postupovat podle pokynů robota. Pro všechna úložiště používající naši smlouvu CLA to stačí udělat jenom jednou.

Tento projekt přijal pravidla chování pro Microsoft Open Source. Další informace najdete v nejčastějších dotazech k pravidlům chování nebo kontaktujte s opencode@microsoft.com případnými dalšími dotazy nebo připomínkami.