Share via


Azure Digital Twins'i Azure Time Series Insights ile tümleştirme

Bu makalede Azure Digital Twins'i Azure Time Series Insights (TSI) ile tümleştirmeyi öğreneceksiniz.

Bu makalede açıklanan çözüm, IoT çözümünüzle ilgili geçmiş verileri toplamak ve analiz etmek için Time Series Insights'ı kullanır. Azure Digital Twins, birden çok veri akışını ilişkilendirmenize ve bilgilerinizi Time Series Insights'a göndermeden önce standartlaştırmanıza olanak sağladığı için verileri Time Series Insights'a beslemek için uygundur.

İpucu

Zaman içinde geçmiş ikiz verilerini analiz etmenin en basit yolu, azure digital twins örneğini azure Veri Gezgini kümesine bağlamak için veri geçmişi özelliğini kullanmaktır; böylece graf güncelleştirmeleri Azure Veri Gezgini'a otomatik olarak geçmişlenir. Daha sonra Azure Veri Gezgini için Azure Digital Twins sorgu eklentisini kullanarak bu verileri Azure Veri Gezgini'da sorgulayabilirsiniz. Time Series Insights'ı özellikle kullanmanız gerekmiyorsa, daha basit bir tümleştirme deneyimi için bu alternatifi göz önünde bulundurabilirsiniz.

Önkoşullar

Time Series Insights ile ilişki kurabilmeniz için önce aşağıdaki kaynakları ayarlamanız gerekir:

İpucu

Bu makalede, Time Series Insights'ta görüntülenen değişen dijital ikiz değerleri kolaylık sağlamak için el ile güncelleştirilir. Ancak bu makaleyi canlı simülasyon verileriyle tamamlamak istiyorsanız, sanal bir cihazdan ioT telemetri olaylarını temel alarak dijital ikizleri güncelleştiren bir Azure işlevi ayarlayabilirsiniz. Yönergeler için cihaz simülatörünü çalıştırmaya ve veri akışının çalıştığını doğrulamaya yönelik son adımlar da dahil olmak üzere verileri alma IoT Hub izleyin.

Daha sonra, el ile dijital ikiz güncelleştirme komutları göndermek yerine cihaz simülatörünü çalıştırmaya nereden başlayacağınızı ve Azure işlevlerinizin ikizleri otomatik olarak güncelleştirmesini sağlamak için başka bir İpucu arayın.

Çözüm mimarisi

Aşağıdaki yolda Azure Digital Twins'e Time Series Insights ekleyeceksiniz.

Time Series Insights'ı vurgulayan uçtan uca bir senaryoda Azure hizmetlerinin diyagramı.

Event Hubs ad alanı oluşturma

Olay hub'larını oluşturmadan önce Azure Digital Twins örneğinizden olayları alacak bir Event Hubs ad alanı oluşturacaksınız. Aşağıdaki Azure CLI yönergelerini kullanabilir veya Azure portal kullanarak olay hub'ı oluşturma'yı izleyerek Azure portal kullanabilirsiniz. Event Hubs'ı hangi bölgelerin desteklediğini görmek için bölgeye göre kullanılabilir Azure ürünlerini ziyaret edin.

az eventhubs namespace create --name <name-for-your-Event-Hubs-namespace> --resource-group <your-resource-group> --location <region>

İpucu

hatasını BadRequest: The specified service namespace is invalid.alırsanız, ad alanınız için seçtiğiniz adın şu başvuru belgesinde açıklanan adlandırma gereksinimlerini karşıladığından emin olun: Ad Alanı Oluşturma.

Bu makale için gereken iki olay hub'ını barındırmak için bu Event Hubs ad alanını kullanacaksınız:

  1. Twins hub - İkiz değişikliği olaylarını alacak olay hub'ı
  2. Zaman serisi hub'ı - Olayları Time Series Insights'a akışla aktarmaya yönelik olay hub'ı

Sonraki bölümlerde, olay hub'ı ad alanınızda bu hub'ları oluşturma ve yapılandırma adımları gösterilir.

İkiz hub'ı oluşturma

Bu makalede oluşturacağınız ilk olay hub'ı twins hub'ıdır. Bu olay hub'ı Azure Digital Twins'den ikiz değişikliği olaylarını alır. twins hub'ını ayarlamak için bu bölümde aşağıdaki adımları tamamlayacaksınız:

  1. İkiz hub'ı oluşturma
  2. Hub'a yönelik izinleri denetlemek için yetkilendirme kuralı oluşturma
  3. Azure Digital Twins'de hub'a erişmek için yetkilendirme kuralını kullanan bir uç nokta oluşturma
  4. Azure Digital Twins'de uç noktaya ve bağlı twins hub'ına ikiz güncelleştirmeleri olayı gönderen bir yol oluşturma
  5. twins hub bağlantı dizesini alma

Aşağıdaki CLI komutuyla twins hub'ını oluşturun. İkiz hub'ınız için bir ad belirtin.

az eventhubs eventhub create --name <name-for-your-twins-hub> --resource-group <your-resource-group> --namespace-name <your-Event-Hubs-namespace-from-earlier>

twins hub yetkilendirme kuralı oluşturma

Gönderme ve alma izinlerine sahip bir yetkilendirme kuralı oluşturun. Kural için bir ad belirtin.

az eventhubs eventhub authorization-rule create --rights Listen Send --name <name-for-your-twins-hub-auth-rule> --resource-group <your-resource-group> --namespace-name <your-Event-Hubs-namespace-from-earlier> --eventhub-name <your-twins-hub-from-earlier>

twins hub uç noktası oluşturma

Olay hub'ınızı Azure Digital Twins örneğine bağlayan bir Azure Digital Twins uç noktası oluşturun. twins hub uç noktanız için bir ad belirtin.

az dt endpoint create eventhub --dt-name <your-Azure-Digital-Twins-instance-name> --eventhub-resource-group <your-resource-group> --eventhub-namespace <your-Event-Hubs-namespace-from-earlier> --eventhub <your-twins-hub-name-from-earlier> --eventhub-policy <your-twins-hub-auth-rule-from-earlier> --endpoint-name <name-for-your-twins-hub-endpoint>

twins hub olay yolu oluşturma

Azure Digital Twins örnekleri, bir ikizin durumu her güncelleştirildiğinde ikiz güncelleştirme olaylarını yayar. Bu bölümde, bu güncelleştirme olaylarını daha fazla işlem için twins hub'ına yönlendirecek bir Azure Digital Twins olay yolu oluşturacaksınız.

Yukarıdan uç noktanıza ikiz güncelleştirme olayları göndermek için Azure Digital Twins'de bir yol oluşturun. Bu yoldaki filtre yalnızca ikiz güncelleştirme iletilerinin uç noktanıza geçirilmesine izin verir. twins hub olay yolu için bir ad belirtin. Bu komuttaki Azure Digital Twins örnek adı yer tutucusu için kolay adı veya ana bilgisayar adını kullanarak performansı artırabilirsiniz.

az dt route create --dt-name <your-Azure-Digital-Twins-instance-hostname-or-name> --endpoint-name <your-twins-hub-endpoint-from-earlier> --route-name <name-for-your-twins-hub-event-route> --filter "type = 'Microsoft.DigitalTwins.Twin.Update'"

twins hub bağlantı dizesini alma

Twins hub'ı için yukarıda oluşturduğunuz yetkilendirme kurallarını kullanarak twins olay hub'ı bağlantı dizesini alın.

az eventhubs eventhub authorization-rule keys list --resource-group <your-resource-group> --namespace-name <your-Event-Hubs-namespace-from-earlier> --eventhub-name <your-twins-hub-from-earlier> --name <your-twins-hub-auth-rule-from-earlier>

Bu makalenin devamında twins hub uygulama ayarını yapılandırmak için sonuçtaki primaryConnectionString değerini not alın.

Zaman serisi hub'ı oluşturma

Bu makalede oluşturacağınız ikinci olay hub'ı zaman serisi hub'ıdır. Bu olay hub'ı, Azure Digital Twins olaylarını Time Series Insights'a akışla aktaracak olan hub'dır. Zaman serisi hub'ını ayarlamak için şu adımları tamamlayacaksınız:

  1. Zaman serisi hub'ını oluşturma
  2. Hub'a yönelik izinleri denetlemek için yetkilendirme kuralı oluşturma
  3. Zaman serisi hub'ı bağlantı dizesini alma

Daha sonra Time Series Insights örneğini oluşturduğunuzda, Time Series Insights örneğinin olay kaynağı olarak bu zaman serisi hub'ına bağlanacaksınız.

Aşağıdaki komutu kullanarak zaman serisi hub'ını oluşturun. Zaman serisi hub'ı için bir ad belirtin.

 az eventhubs eventhub create --name <name-for-your-time-series-hub> --resource-group <your-resource-group> --namespace-name <your-Event-Hub-namespace-from-earlier>

Zaman serisi hub yetkilendirme kuralı oluşturma

Gönderme ve alma izinlerine sahip bir yetkilendirme kuralı oluşturun. Zaman serisi hub'ı kimlik doğrulaması kuralı için bir ad belirtin.

az eventhubs eventhub authorization-rule create --rights Listen Send --name <name-for-your-time-series-hub-auth-rule> --resource-group <your-resource-group> --namespace-name <your-Event-Hub-namespace-from-earlier> --eventhub-name <your-time-series-hub-name-from-earlier>

Zaman serisi hub bağlantı dizesini alma

Zaman serisi hub'ı için yukarıda oluşturduğunuz yetkilendirme kurallarını kullanarak zaman serisi hub'ı bağlantı dizesini alın:

az eventhubs eventhub authorization-rule keys list --resource-group <your-resource-group> --namespace-name <your-Event-Hub-namespace-from-earlier> --eventhub-name <your-time-series-hub-name-from-earlier> --name <your-time-series-hub-auth-rule-from-earlier>

Bu makalenin devamında zaman serisi hub'ı uygulama ayarını yapılandırmak için sonuçtaki primaryConnectionString değerini not alın.

Ayrıca aşağıdaki değerleri not alarak daha sonra bunları kullanarak bir Time Series Insights örneği oluşturun.

  • Olay hub’ı ad alanı
  • Zaman serisi hub'ı adı
  • Zaman serisi hub'ı kimlik doğrulama kuralı

İşlev oluşturma

Bu bölümde, ikiz güncelleştirme olaylarını özgün biçimlerinden JSON Düzeltme Eki belgeleri olarak yalnızca ikizlerinizden güncelleştirilmiş ve eklenen değerleri içeren JSON nesnelerine dönüştürecek bir Azure işlevi oluşturacaksınız.

  1. İlk olarak yeni bir işlev uygulaması projesi oluşturun.

    Bunu Visual Studio kullanarak yapabilirsiniz (yönergeler için bkz. Visual Studio kullanarak Azure İşlevleri geliştirme), Visual Studio Code (yönergeler için bkz. Visual Studio Code kullanarak Azure'da C# işlevi oluşturma) veya Azure CLI (yönergeler için bkz. Komuttan Azure'da C# işlevi oluşturma satır).

  2. Cihaz telemetri olaylarını Time Series Insights'a güncelleştirmek için ProcessDTUpdatetoTSI.cs adlı yeni bir Azure işlevi oluşturun. İşlev türü Olay Hub'ı tetikleyicisi olacaktır.

    Olay hub'ı tetikleyicisi türünde yeni bir Azure işlevi oluşturmak için Visual Studio'nun ekran görüntüsü.

  3. Projenize aşağıdaki paketleri ekleyin (Visual Studio NuGet paket yöneticisini veya dotnet add package komutunu bir komut satırı aracında kullanabilirsiniz).

  4. ProcessDTUpdatetoTSI.cs dosyasındaki kodu aşağıdaki kodla değiştirin:

    using System.Collections.Generic;
    using System.Threading.Tasks;
    using System.Text;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Extensions.Logging;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using Azure.Messaging.EventHubs;
    
    namespace UpdateTSI
    {
        public static class ProcessDTUpdatetoTSI
        { 
            [FunctionName("ProcessDTUpdatetoTSI")]
            public static async Task Run(
                [EventHubTrigger("twins-event-hub", Connection = "EventHubAppSetting-Twins")]EventData myEventHubMessage,
                [EventHub("tsi-event-hub", Connection = "EventHubAppSetting-TSI")]IAsyncCollector<string> outputEvents,
                ILogger log)
            {
                JObject message = (JObject)JsonConvert.DeserializeObject(Encoding.UTF8.GetString(myEventHubMessage.Body));
                log.LogInformation($"Reading event: {message}");
    
                // Read values that are replaced or added
                var tsiUpdate = new Dictionary<string, object>();
                foreach (var operation in message["patch"])
                {
                    if (operation["op"].ToString() == "replace" || operation["op"].ToString() == "add")
                    {
                        //Convert from JSON patch path to a flattened property for TSI
                        //Example input: /Front/Temperature
                        //        output: Front.Temperature
                        string path = operation["path"].ToString().Substring(1);
                        path = path.Replace("/", ".");
                        tsiUpdate.Add(path, operation["value"]);
                    }
                }
                // Send an update if updates exist
                if (tsiUpdate.Count > 0)
                {
                    tsiUpdate.Add("$dtId", myEventHubMessage.Properties["cloudEvents:subject"]);
                    await outputEvents.AddAsync(JsonConvert.SerializeObject(tsiUpdate));
                }
            }
        }
    }
    

    İşlev kodunuzu kaydedin.

  5. ProcessDTUpdatetoTSI.cs işleviyle projeyi Azure'daki bir işlev uygulamasında yayımlayın.

    İşlevi Visual Studio kullanarak yayımlama yönergeleri için bkz. Visual Studio kullanarak Azure İşlevleri geliştirme. İşlevi Visual Studio Code kullanarak yayımlama yönergeleri için bkz. Visual Studio Code kullanarak Azure'da C# işlevi oluşturma. İşlevi Azure CLI kullanarak yayımlama yönergeleri için bkz. Komut satırından Azure'da C# işlevi oluşturma.

daha sonra iki olay hub'ına yönelik uygulama ayarlarını yapılandırmak için işlev uygulaması adını kaydedin.

İşlev uygulamasını yapılandırma

Ardından işlev için bir erişim rolü atayın ve uygulama ayarlarını kaynaklarınıza erişebilmesi için yapılandırın.

Azure Cloud Shell veya yerel bir Azure CLI'da aşağıdaki komutları çalıştırın.

Not

Bu bölümün, izin verme ve temsilci atama dahil olmak üzere Azure kaynaklarına kullanıcı erişimini yönetme izinleri olan bir Azure kullanıcısı tarafından tamamlanması gerekir. Bu gereksinimi karşılayan yaygın roller Sahip, Hesap yöneticisi veya Kullanıcı Erişimi Yöneticisi ve Katkıda Bulunan birleşimidir. Azure Digital Twins rollerinin izin gereksinimleri hakkında daha fazla bilgi için bkz. Örnek ve kimlik doğrulaması ayarlama.

Erişim rolü atama

Azure işlevine bir taşıyıcı belirtecin geçirilmesi gerekir. Taşıyıcı belirtecinin geçirildiğinden emin olmak için işlev uygulamasına Azure Digital Twins örneğiniz için Azure Digital Twins Veri Sahibi rolünü verin. Bu rol işlev uygulamasına örnekte veri düzlemi etkinlikleri gerçekleştirme izni verir.

  1. İşleviniz için sistem tarafından yönetilen bir kimlik oluşturmak için aşağıdaki komutu kullanın (işlevin zaten bir kimliği varsa, bu komut ayrıntılarını yazdırır). Çıktıdaki principalId alanı not edin. Bir sonraki adımda işleve izin verebilmek için işleve başvurmak için bu kimliği kullanacaksınız.

    az functionapp identity assign --resource-group <your-resource-group> --name <your-function-app-name>	
    
  2. İşleve principalIdAzure Digital Twins örneğinizin Azure Digital Twins Veri Sahibi rolünü vermek için aşağıdaki komuttaki değeri kullanın.

    az dt role-assignment create --dt-name <your-Azure-Digital-Twins-instance> --assignee "<principal-ID>" --role "Azure Digital Twins Data Owner"
    

Uygulama ayarlarını yapılandırma

Ardından, azure digital twins örneğinizin URL'sini işleviniz için bir ortam değişkeni ayarlayarak erişilebilir hale getirin.

İpucu

Azure Digital Twins örneğinin URL'si, örneğinizin ana bilgisayar adının başına https:// eklenerek yapılır. Ana bilgisayar adını ve örneğinizin tüm özelliklerini görmek için komutunu çalıştırın az dt show --dt-name <your-Azure-Digital-Twins-instance>.

Aşağıdaki komut, örneğinize erişmesi gereken her durumda işlevinizin kullanacağı örneğinizin URL'si için bir ortam değişkeni ayarlar.

az functionapp config appsettings set --resource-group <your-resource-group> --name <your-function-app-name> --settings "ADT_SERVICE_URL=https://<your-Azure-Digital-Twins-instance-host-name>"

Ardından işlev uygulamasının ayarlarına, twins hub'ına ve zaman serisi hub'ına erişmesini sağlayan ortam değişkenleri ekleyin.

İşlev uygulamanızda twins hub bağlantı dizesini içeren bir uygulama ayarı oluşturmak için daha önce kaydettiğiniz twins hub primaryConnectionString değerini kullanın:

az functionapp config appsettings set --settings "EventHubAppSetting-Twins=<your-twins-hub-primaryConnectionString>" --resource-group <your-resource-group> --name <your-function-app-name>

İşlev uygulamanızda time series hub bağlantı dizesini içeren bir uygulama ayarı oluşturmak için daha önce kaydettiğiniz time series hub primaryConnectionString değerini kullanın:

az functionapp config appsettings set --settings "EventHubAppSetting-TSI=<your-time-series-hub-primaryConnectionString>" --resource-group <your-resource-group> --name <your-function-app-name>

Time Series Insights örneği oluşturma ve bağlantı kurma

Bu bölümde Time Series Insights örneğini zaman serisi hub'ınızdan veri alacak şekilde ayarlayacaksınız. Bu işlem hakkında daha fazla bilgi için bkz. Azure Time Series Insights 2. Nesil PAYG ortamı ayarlama. Time Series Insights ortamı oluşturmak için aşağıdaki adımları izleyin.

  1. Azure portalTime Series Insights ortamlarını arayın ve Oluştur düğmesini seçin. Zaman serisi ortamını oluşturmak için aşağıdaki seçenekleri belirleyin.

    • Abonelik - Aboneliğinizi seçin.
      • Kaynak grubu - Kaynak grubunuzu seçin.
    • Ortam adı - Zaman serisi ortamınız için bir ad belirtin.
    • Konum - Bir konum seçin.
    • Katman - 2. Nesil (L1) fiyatlandırma katmanını seçin.
    • Özellik adı - $dtId girin ( Zaman Serisi Kimliği seçmeye yönelik en iyi yöntemler bölümünde kimlik değeri seçme hakkında daha fazla bilgi edinin).
    • Depolama hesabı adı - Depolama hesabı adı belirtin.
    • Sıcak mağazayı etkinleştir - Bu alanı Evet olarak bırakın.

    Bu sayfadaki diğer özellikler için varsayılan değerleri bırakabilirsiniz. Sonraki: Olay Kaynağı > düğmesini seçin.

    Time Series Insights ortamının (bölüm 1/3) nasıl oluşturulacağını gösteren Azure portal ekran görüntüsü.

    Time Series Insights ortamının (bölüm 2/3) nasıl oluşturulacağını gösteren Azure portal ekran görüntüsü.

  2. Olay Kaynağı sekmesinde aşağıdaki alanları seçin:

    • Olay kaynağı oluşturulsun mu? - Evet'i seçin.
    • Kaynak türü - Olay Hub'ı seçin.
    • Ad - Olay kaynağınız için bir ad belirtin.
    • Abonelik - Azure aboneliğinizi seçin.
    • Event Hub ad alanı - Bu makalenin önceki bölümlerinde oluşturduğunuz ad alanını seçin.
    • Olay Hub'ı adı - Bu makalenin önceki bölümlerinde oluşturduğunuz zaman serisi hub'ı adını seçin.
    • Olay Hub'ı erişim ilkesi adı - Bu makalenin önceki bölümlerinde oluşturduğunuz zaman serisi hub'ı kimlik doğrulama kuralını seçin.
    • Event Hub tüketici grubu - Yeni'yi seçin ve olay hub'ı tüketici grubunuz için bir ad belirtin. Ardından Ekle'yi seçin.
    • Özellik adı - Bu alanı boş bırakın.

    Tüm ayrıntıları gözden geçirmek için Gözden Geçir + Oluştur düğmesini seçin. Ardından, zaman serisi ortamını oluşturmak için Gözden Geçir + Oluştur düğmesini yeniden seçin.

    Time Series Insights ortamının (bölüm 3/3) nasıl oluşturulacağını gösteren Azure portal ekran görüntüsü.

Azure Digital Twins'e IoT verileri gönderme

Time Series Insights'a veri göndermeye başlamak için Azure Digital Twins'deki dijital ikiz özelliklerini değişen veri değerleriyle güncelleştirmeye başlamanız gerekir.

Önkoşullar bölümünde eklediğiniz ikizdeki bir özelliği güncelleştirmek için az dt twin update CLI komutunu kullanın. IoT Hub'den telemetri alma işleminden ikiz oluşturma yönergelerini kullandıysanız, termostat67 ikizindeki sıcaklık özelliğini güncelleştirmek için yerel CLI veya Cloud Shell bash terminalinde aşağıdaki komutu kullanabilirsiniz. Azure Digital Twins örneğinin ana bilgisayar adı için bir yer tutucu vardır (örneğin kolay adını performansta küçük bir düşüşle de kullanabilirsiniz).

az dt twin update --dt-name <your-Azure-Digital-Twins-instance-hostname-or-name> --twin-id thermostat67 --json-patch '{"op":"replace", "path":"/Temperature", "value": 20.5}'

Time Series Insights ortamında daha sonra gözlemlenecek birkaç veri noktası oluşturmak için komutu farklı özellik değerleriyle en az 4 kez daha tekrarlayın.

İpucu

Dijital ikiz değerlerini el ile güncelleştirmek yerine bu makaleyi canlı simülasyon verileriyle tamamlamak istiyorsanız, önce Önkoşullar bölümünden İpucu'nun tamamlandığından emin olun ve simülasyon cihazından ikizleri güncelleştiren bir Azure işlevi ayarlayın. Bundan sonra, simülasyon verilerini göndermeye başlamak ve bu veri akışı aracılığıyla dijital ikizinizi güncelleştirmek için cihazı şimdi çalıştırabilirsiniz.

Time Series Insights verilerini görselleştirme

Artık veriler analiz edilmeye hazır şekilde Time Series Insights örneğine akıyor olmalıdır. Gelen verileri keşfetmek için aşağıdaki adımları izleyin.

  1. Azure portal, daha önce oluşturduğunuz zaman serisi ortamınızın adını arayın. Soldaki menü seçeneklerinde Genel Bakış'ı seçerek Time Series Insights Gezgini URL'sini görüntüleyin. Time Series Insights ortamına yansıtılan sıcaklık değişikliklerini görüntülemek için URL'yi seçin.

    Time Series Insights ortamının genel bakış sekmesindeki Time Series Insights gezgini URL'sini gösteren Azure portal ekran görüntüsü.

  2. Gezginde, sol tarafta gösterilen Azure Digital Twins örneğinde ikizleri görürsünüz. Özelliklerini düzenlediğiniz ikizi seçin, değiştirdiğiniz özelliği seçin ve Ekle'yi seçin.

    Termostat67'yi seçme, özellik sıcaklığını seçme ve Ekle'yi seçme adımlarının vurgulandığı Time Series Insights gezgininin ekran görüntüsü.

  3. Şimdi yaptığınız özellik değişikliklerini aşağıda gösterildiği gibi grafiğe yansıtılmış olarak görmeniz gerekir.

    68 ile 85 arasındaki rastgele değerleri gösteren ilk sıcaklık verilerini içeren Time Series Insights gezgininin ekran görüntüsü.

Bir simülasyonu daha uzun süre çalıştırmaya izin verirseniz görselleştirmeniz aşağıdakine benzer olacaktır:

Her ikizi için sıcaklık verilerinin farklı renklerde üç paralel çizgi halinde çizildiği Time Series Insights gezgininin ekran görüntüsü.

Sonraki adımlar

Azure Digital Twins'den Time Series Insights'a zaman serisi verileri göndermek için bir veri işlem hattı oluşturduktan sonra, Azure Digital Twins için tasarlanmış varlık modellerini Time Series Insights için varlık modellerine çevirmeyi düşünebilirsiniz. Tümleştirme işleminin bu sonraki adımıyla ilgili bir öğretici için bkz. Azure Digital Twins ile Time Series Insights 2. Nesil arasında model eşitleme.