Python için Azure Digital Twins Core istemci kitaplığı - sürüm 1.2.0
Bu paket, ikizleri, modelleri, ilişkileri vb. yönetmek için Azure Digital Twins hizmetine erişim sağlayan bir Azure Digital Twins API'sini içerir.
Bildirim
Python 2.7 için Azure SDK Python paketleri desteği 01 Ocak 2022'de sona erdi. Daha fazla bilgi ve soru için lütfen https://github.com/Azure/azure-sdk-for-python/issues/20691
Başlarken
Giriş
Azure Digital Twins, iş ortamınızın dijital gösterimlerini bulutta güvenli ve verimli bir şekilde oluşturmanıza, çalıştırmanıza ve yönetmenize olanak tanıyan yeni nesil IoT çözümlerine yönelik bir geliştirici platformudur. Azure Digital Twins ile canlı operasyonel durum gösterimleri oluşturmak hızlı ve uygun maliyetlidir ve dijital gösterimler IoT ve diğer veri kaynaklarından gelen gerçek zamanlı verilerle güncel kalır. Azure Digital Twins'i yeni kullanıyorsanız ve platform hakkında daha fazla bilgi edinmek istiyorsanız lütfen Azure Digital Twins resmi belgeleri sayfasına göz atmayı unutmayın.
Azure Digital Twins hizmetine karşı programlama hakkında giriş için kolay bir adım adım kılavuz için kodlama öğreticisi sayfasını ziyaret edin. Komut satırı istemci uygulaması kullanarak Azure Digital Twin örneğiyle nasıl etkileşim kuracağınızı öğrenmek için bu öğreticiyi ziyaret edin. Son olarak, ortamınızdan alınan canlı veriler tarafından yönetilen uçtan uca bir Azure Digital Twins çözümü oluşturma hakkında hızlı bir kılavuz için bu yararlı kılavuzu gözden geçirin.
Yukarıda bahsedilen kılavuzlar, Azure Digital Twins örnekleri, modelleri, ikiz grafikleri vb. oluşturma gibi Azure Digital Twins'in temel öğelerini kullanmaya başlamanıza yardımcı olabilir. Azure Digital Twins'e karşı programlamanıza yardımcı olan çeşitli API'leri öğrenmek için aşağıdaki örnek kılavuzunu kullanın.
Yükleme
Pip ile [azure-digitaltwins-core][pypi_package_keys] ve azure-identity yükleyin:
pip install azure-digitaltwins-core azure-identity
azure-identity , aşağıda gösterildiği gibi Azure Active Directory kimlik doğrulaması için kullanılır.
Nasıl kullanılır?
Kimlik doğrulaması, izin
Yeni bir digital twins istemcisi oluşturmak için uç noktanın bir Azure Digital Twin örneğine ve kimlik bilgilerine sahip olması gerekir.
Aşağıdaki AZURE_URL
örnekler için , AZURE_TENANT_ID
, AZURE_CLIENT_ID
ve AZURE_CLIENT_SECRET
ortam değişkenleri ayarlanmalıdır.
İstemci bir TokenCredential veya ServiceClientCredentials örneği gerektirir.
Bu örneklerde, türetilmiş bir sınıfın nasıl kullanılacağını göstereceğiz: DefaultAzureCredentials.
Not: Digital Twins hizmetinin veri düzlemine erişmek için varlığa izinlerin verilmesi gerekir. Bunu yapmak için Azure CLI komutunu kullanın:
az dt rbac assign-role --assignee '<user-email | application-id>' --role owner -n '<your-digital-twins-instance>'
DefaultAzureCredential farklı kimlik doğrulama mekanizmalarını destekler ve yürütülmekte olan ortama göre uygun kimlik bilgisi türünü belirler. Çalışan bir kimlik bilgisi bulana kadar bir sırada birden çok kimlik bilgisi türü kullanmaya çalışır.
Örnek kod
# DefaultAzureCredential supports different authentication mechanisms and determines the appropriate credential type based of the environment it is executing in.
# It attempts to use multiple credential types in an order until it finds a working credential.
# - AZURE_URL: The URL to the ADT in Azure
url = os.getenv("AZURE_URL")
# DefaultAzureCredential expects the following three environment variables:
# - AZURE_TENANT_ID: The tenant ID in Azure Active Directory
# - AZURE_CLIENT_ID: The application (client) ID registered in the AAD tenant
# - AZURE_CLIENT_SECRET: The client secret for the registered application
credential = DefaultAzureCredential()
service_client = DigitalTwinsClient(url, credential)
Önemli kavramlar
Azure Digital Twins, fiziksel ortamların kapsamlı modellerini oluşturan bir Azure IoT hizmetidir. İnsanlar, alanlar ve cihazlar arasındaki ilişkileri ve etkileşimleri modellemek için uzamsal zeka grafikleri oluşturabilir. Azure Digital Twins Belgeleri'ne giderek Azure Digital Twins hakkında daha fazla bilgi edinebilirsiniz.
Örnekler
Örnek projesini kullanarak dijital ikiz API'lerini (istemci kitaplığını kullanarak) keşfedebilirsiniz.
Örnek projesi aşağıdakileri gösterir:
- İstemciyi başlatma
- Model oluşturma, alma ve kullanımdan kaldırma
- Dijital ikiz oluşturma, sorgulama ve silme
- Dijital ikiz için bileşenleri alma ve güncelleştirme
- Dijital ikizler arasında ilişki oluşturma, alma ve silme
- Dijital ikiz için olay yolları oluşturma, alma ve silme
- Telemetri iletilerini dijital ikiz ve dijital ikiz bileşeninde yayımlama
Modelleri oluşturma, listeleme, kullanımdan kaldırma ve silme
Model oluşturma
Şimdi aşağıdaki kodu kullanarak modeller oluşturalım. Modellerin listesini içeren bir dizi geçirmeniz gerekir.
temporary_component = {
"@id": component_id,
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "Component1",
"contents": [
{
"@type": "Property",
"name": "ComponentProp1",
"schema": "string"
},
{
"@type": "Telemetry",
"name": "ComponentTelemetry1",
"schema": "integer"
}
]
}
temporary_model = {
"@id": model_id,
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "TempModel",
"contents": [
{
"@type": "Property",
"name": "Prop1",
"schema": "string"
},
{
"@type": "Component",
"name": "Component1",
"schema": component_id
},
{
"@type": "Telemetry",
"name": "Telemetry1",
"schema": "integer"
}
]
}
new_models = [temporary_component, temporary_model]
models = service_client.create_models(new_models)
print('Created Models:')
print(models)
Modelleri listeleme
Oluşturulan tüm modelleri almak için kullanma list_models
listed_models = service_client.list_models()
for model in listed_models:
print(model)
Modeli alma
Belirli bir modeli almak için modelin benzersiz tanımlayıcısıyla kullanın get_model
.
# Get a model
get_model = service_client.get_model(model_id)
print('Get Model:')
print(get_model)
Kullanımdan çıkarma modeli
Bir modelin komutlarını çözmek için, decommision uygulamak istediğiniz modelin model kimliğini geçirin.
# Decommission a model
service_client.decommission_model(model_id)
Modeli silme
Modeli silmek için silmek istediğiniz modelin model kimliğini geçirin.
# Delete a model
service_client.delete_model(model_id)
Dijital ikizleri oluşturma ve silme
Dijital ikizleri oluşturma
İkiz Oluşturma için, daha önce oluşturulan modele göre ve gibi bir dijital ikizin my_twin
kimliğini ve application/json dijital ikizini sağlamanız gerekir. Örnek uygulamaya/json dosyasına buradan bakabilirsiniz.
digital_twin_id = 'digitalTwin-' + str(uuid.uuid4())
temporary_twin = {
"$metadata": {
"$model": model_id
},
"$dtId": digital_twin_id,
"Prop1": 42
}
created_twin = service_client.upsert_digital_twin(digital_twin_id, temporary_twin)
print('Created Digital Twin:')
print(created_twin)
Dijital ikiz edinme
Dijital ikiz almak son derece kolaydır.
get_twin = service_client.get_digital_twin(digital_twin_id)
print('Get Digital Twin:')
print(get_twin)
Dijital ikizleri sorgulama
Azure Digital Twins Sorgu Deposu lanaguage'ını kullanarak dijital ikizler için Azure Digital Twins örneğini sorgulayın. Sorgu çağrıları sayfalandırmayı destekler. Aşağıda dijital ikizleri sorgulama ve sonuçlar üzerinde yineleme gibi bir örnek verilmiştir.
Örneğinizdeki değişikliklerin sorgulara yansıtılması arasında bir gecikme olabileceğini unutmayın. Sorgu sınırlamaları hakkında daha fazla ayrıntı için bkz. (/azure/digital-twins/how-to-query-graph#query-limitations)
query_expression = 'SELECT * FROM digitaltwins'
query_result = service_client.query_twins(query_expression)
print('DigitalTwins:')
for twin in query_result:
print(twin)
Dijital ikizleri silme
Aşağıdaki gibi bir dijital ikizin kimliğini sağlayarak dijital ikizleri silin.
service_client.delete_digital_twin(digital_twin_id)
Dijital ikiz bileşenlerini alma ve güncelleştirme
Dijital ikiz bileşenlerini güncelleştirme
Bir bileşeni güncelleştirmek veya başka bir deyişle Digital Twin içindeki bir bileşen özelliğini veya alt özelliğini değiştirmek, kaldırmak ve/veya eklemek için, belirtilen dijital ikizin bileşeninde gerçekleştirilecek dijital ikiz kimliği, bileşen adı ve uygulama/json-patch+json işlemleri gerekir. Bunun nasıl yapılacağını gösteren örnek kod aşağıda verilmiştir.
component_name = "Component1"
patch = [
{
"op": "replace",
"path": "/ComponentProp1",
"value": "value2"
}
]
service_client.update_component(digital_twin_id, component_name, patch)
Dijital ikiz bileşenlerini alma
Bir bileşenin adını ve ait olduğu dijital ikizin kimliğini sağlayarak bir bileşen alın.
get_component = service_client.get_component(digital_twin_id, component_name)
print('Get Component:')
print(get_component)
Dijital ikiz ilişkilerini oluşturma ve listeleme
Dijital ikiz ilişkileri oluşturma
upsert_relationship
dijital ikiz kimliği, "contains" gibi ilişki adı, "FloorContainsRoom" gibi bir ilişkinin kimliği ve oluşturulacak bir uygulama/json ilişkisi ile sağlanan bir dijital ikiz üzerinde ilişki oluşturur. İlişkinin hedefini belirtmek için "$targetId" anahtarına sahip bir özellik içermelidir. İlişkiler için örnek yükleri burada bulabilirsiniz.
hospital_relationships = [
{
"$relationshipId": "BuildingHasFloor",
"$sourceId": building_twin_id,
"$relationshipName": "has",
"$targetId": floor_twin_id,
"isAccessRestricted": False
},
{
"$relationshipId": "BuildingIsEquippedWithHVAC",
"$sourceId": building_twin_id,
"$relationshipName": "isEquippedWith",
"$targetId": hvac_twin_id
},
{
"$relationshipId": "HVACCoolsFloor",
"$sourceId": hvac_twin_id,
"$relationshipName": "controlsTemperature",
"$targetId": floor_twin_id
},
{
"$relationshipId": "FloorContainsRoom",
"$sourceId": floor_twin_id,
"$relationshipName": "contains",
"$targetId": room_twin_id
}
]
for relationship in hospital_relationships:
service_client.upsert_relationship(
relationship["$sourceId"],
relationship["$relationshipId"],
relationship
)
Dijital ikiz ilişkilerini listeleme
list_relationships
ve list_incoming_relationships
bir dijital ikizin sırasıyla tüm ilişkilerini ve tüm gelen ilişkileri listeler.
relationships = service_client.list_relationships(digital_twint_id)
for relationship in relationships:
print(relationship)
incoming_relationships = service_client.list_incoming_relationships(digital_twin_id)
for incoming_relationship in incoming_relationships:
print(incoming_relationship)
Dijital ikizlerin olay yollarını oluşturma, listeleme ve silme
Olay yolları oluşturma
Olay yolu oluşturmak için, "myEventRouteId" gibi bir olay yolunun kimliğini ve uç noktayı içeren olay yolu verilerini ve aşağıda gösterilen örneğe benzer isteğe bağlı filtreyi sağlayın.
event_route_id = 'eventRoute-' + str(uuid.uuid4())
event_filter = "$eventType = 'DigitalTwinTelemetryMessages' or $eventType = 'DigitalTwinLifecycleNotification'"
route = DigitalTwinsEventRoute(
endpoint_name=event_hub_endpoint_name,
filter=event_filter
)
service_client.upsert_event_route(event_route_id, route)
Olay yolu filtre dili hakkında daha fazla bilgi için "yolları yönetme" filtre olayları belgelerine bakın.
Olay yollarını listeleme
Belirli bir olay rotası verilen olay yolu kimliğini veya ile tüm olay yolları ayar seçeneklerini listeleyin list_event_routes
.
event_routes = service_client.list_event_routes()
for event_route in event_routes:
print(event_route)
Olay yollarını silme
Verilen olay yolu kimliğini sil.
service_client.delete_event_route(event_route_id)
Dijital ikiz için telemetri iletilerini yayımlama
Bir dijital ikiz için telemetri iletisi yayımlamak için, dijital ikiz kimliğini ve güncelleştirmeye ihtiyaç duyan telemetri verilerinin yükünü sağlamanız gerekir.
digita_twin_id = "<DIGITAL TWIN ID>"
telemetry_payload = '{"Telemetry1": 5}'
service_client.publish_telemetry(
digita_twin_id,
telemetry_payload
)
Ayrıca, dijital ikizdeki belirli bir bileşen için telemetri iletisi yayımlayabilirsiniz. Dijital ikiz kimliğine ve yüküne ek olarak hedef bileşen kimliğini belirtmeniz gerekir.
digita_twin_id = "<DIGITAL TWIN ID>"
component_name = "<COMPONENT_NAME>"
telemetry_payload = '{"Telemetry1": 5}'
service_client.publish_component_telemetry(
digita_twin_id,
component_name,
telemetry_payload
)
Sorun giderme
Günlüğe Kaydetme
Bu kitaplık, günlüğe kaydetme için standart günlük kitaplığını kullanır. HTTP oturumları (URL'ler, üst bilgiler vb.) hakkındaki temel bilgiler BİlGİ düzeyinde günlüğe kaydedilir.
İstek/yanıt gövdeleri ve kaydedilmemiş üst bilgiler de dahil olmak üzere ayrıntılı HATA AYıKLAMA düzeyi günlüğü, bir istemcide logging_enable anahtar sözcük bağımsız değişkeniyle etkinleştirilebilir:
İstemci düzeyinde günlüğe kaydetme
import sys
import logging
# Create logger
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
# Create service client and enable logging for all operations
service_client = DigitalTwinsClient(url, credential, logging_enable=True)
İşlem düzeyinde günlüğe kaydetme
import sys
import logging
# Create logger
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
# Get model with logging enabled
model = service_client.get_model(model_id, logging_enable=True)
İsteğe Bağlı Yapılandırma
İsteğe bağlı anahtar sözcük bağımsız değişkenleri istemci ve işlem başına düzeyinde geçirilebilir. Azure-core başvuru belgelerinde yeniden denemeler, günlüğe kaydetme, aktarım protokolleri ve daha fazlası için kullanılabilir yapılandırmalar açıklanmaktadır.
Sonraki adımlar
Geri Bildirim Sağlama
Hatalarla karşılaşırsanız veya önerileriniz varsa lütfen bir sorun açın.
Katkıda bulunma
Bu proje, katkı ve önerilere açıktır. Çoğu durumda, sağladığınız katkıyı kullanmamız için bize hak tanıma hakkına sahip olduğunuzu ve bu hakkı bize tanıdığınızı bildiren bir Katkıda Bulunan Lisans Sözleşmesi’ni (CLA) kabul etmeniz gerekir. Ayrıntılar için bkz. https://cla.microsoft.com.
Bir çekme isteği gönderdiğinizde, CLA robotu bir CLA sağlamanız gerekip gerekmediğini otomatik olarak belirler ve çekme isteğini uygun şekilde donatır (örn. etiket, açıklama). Robot tarafından sağlanan yönergeleri izlemeniz yeterlidir. Bu işlemi, CLA’mızı kullanarak tüm depolarda yalnızca bir kere yapmanız gerekir.
Bu proje Microsoft Open Source Code of Conduct (Microsoft Açık Kaynak Kullanım Kuralları) belgesinde listelenen kurallara uygundur. Daha fazla bilgi için Kullanım Kuralları SSS bölümüne bakın veya ek sorularınız veya yorumlarınızla iletişime geçin opencode@microsoft.com .
Azure SDK for Python