Yeni bir simülasyon cihazı oluşturma ve test etme
Uzaktan İzleme çözümü hızlandırıcısı, kendi simülasyon cihazlarınızı tanımlamanıza olanak tanır. Bu makalede yeni bir simülasyon ampul cihazını tanımlama ve ardından yerel olarak test etme adımları gösterilmektedir. Çözüm hızlandırıcısı soğutucular ve kamyonlar gibi simülasyon cihazlarını içerir. Ancak, gerçek cihazları dağıtmadan önce IoT çözümlerinizi test etmek için kendi simülasyon cihazlarınızı tanımlayabilirsiniz.
Not
Bu makalede, cihaz simülasyon hizmetinde barındırılan sanal cihazların nasıl kullanılacağı açıklanmaktadır. Gerçek bir cihaz oluşturmak istiyorsanız bkz . Cihazınızı Uzaktan İzleme çözümü hızlandırıcısına bağlama.
Bu nasıl yapılır kılavuzu, cihaz benzetimi mikro hizmetini nasıl özelleştirebileceğinizi gösterir. Bu mikro hizmet, Uzaktan İzleme çözümü hızlandırıcısının bir parçasıdır. Cihaz benzetimi özelliklerini göstermek için bu nasıl yapılır kılavuzunda Contoso IoT uygulamasında iki senaryo kullanılır:
İlk senaryoda, Contoso'nun mevcut Soğutucu cihaz türüne yeni bir telemetri türü eklersiniz.
İkinci senaryoda Contoso yeni bir akıllı ampul cihazını test etmek istiyor. Testleri çalıştırmak için aşağıdaki özelliklere sahip yeni bir simülasyon cihazı oluşturursunuz:
Özellikler
Name | Değerler |
---|---|
Renk | Beyaz, Kırmızı, Mavi |
Parlaklık | 0 ile 100 |
Tahmini kalan ömür | 10.000 saatten geri sayım |
Telemetri
Aşağıdaki tabloda ampul tarafından buluta veri akışı olarak rapor edilen veriler gösterilmektedir:
Name | Değerler |
---|---|
Durum | "on", "off" |
Sıcaklık | F Dereceleri |
çevrimiçi | true, false |
Not
Çevrimiçi telemetri değeri tüm simülasyon türleri için zorunludur.
Yöntemler
Aşağıdaki tabloda yeni cihazın desteklediği eylemler gösterilmektedir:
Name |
---|
Aç |
Kapatın |
Başlangıç durumu
Aşağıdaki tabloda cihazın ilk durumu gösterilmektedir:
Name | Değerler |
---|---|
İlk renk | Beyaz |
İlk parlaklık | 75 |
kalan ilk yaşam | 10,000 |
İlk telemetri durumu | "açık" |
İlk telemetri sıcaklığı | 200 |
Bu nasıl yapılır kılavuzundaki adımları tamamlamak için etkin bir Azure aboneliğine ihtiyacınız vardır.
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Azure Cloud Shell kullanma
Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell’i barındırır. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Bu makaledeki kodu, yerel ortamınıza herhangi bir şey yüklemeye gerek kalmadan çalıştırmak için Cloud Shell’in önceden yüklenmiş komutlarını kullanabilirsiniz.
Azure Cloud Shell’i başlatmak için:
Seçenek | Örnek/Bağlantı |
---|---|
Kod bloğunun sağ üst köşesindeki Deneyin’i seçin. Deneyin seçeneği belirlendiğinde, kod otomatik olarak Cloud Shell’e kopyalanmaz. | |
Cloud Shell’i tarayıcınızda açmak için https://shell.azure.com bölümüne gidin veya Cloud Shell’i Başlat düğmesini seçin. | |
Azure portalın sağ üst köşesindeki menü çubuğunda yer alan Cloud Shell düğmesini seçin. |
Azure Cloud Shell’de bu makaledeki kodu çalıştırmak için:
Cloud Shell’i başlatın.
Kodu kopyalamak için kod bloğunda Kopyala düğmesini seçin.
Windows ve Linux sisteminde Ctrl+Shift+V tuşlarını kullanarak veya macOS’de Cmd+Shift+V tuşlarını kullanarak kodu Cloud Shell oturumuna yapıştırın.
Kodu çalıştırmak için Enter tuşuna basın.
Önkoşullar
Bu nasıl yapılır kılavuzunu izlemek için şunları yapmanız gerekir:
- Visual Studio Code. Mac, Linux ve Windows için Visual Studio Code indirebilirsiniz.
- .NET Core. Mac, Linux ve Windows için .NET Core indirebilirsiniz.
- Visual Studio Code için C#
- Postacı. Mac, Windows veya Linux için Postman'i indirebilirsiniz.
- Azure aboneliğinize dağıtılan bir IoT hub'ı. Bu kılavuzdaki adımları tamamlamak için IoT hub'ına ait bağlantı dizesine ihtiyacınız vardır. Bağlantı dizesini Azure portal alabilirsiniz.
- SQL API'sini kullanan ve güçlü tutarlılık için yapılandırılmış bir Cosmos DB veritabanı. Bu kılavuzdaki adımları tamamlamak için Cosmos DB veritabanının bağlantı dizesine ihtiyacınız vardır. Bağlantı dizesini Azure portal alabilirsiniz.
Geliştirme ortamınızı hazırlama
Geliştirme ortamınızı hazırlamak için aşağıdaki görevleri tamamlayın:
- Cihaz benzetimi mikro hizmetinin kaynağını indirin.
- Depolama bağdaştırıcısı mikro hizmetinin kaynağını indirin.
- Depolama bağdaştırıcısı mikro hizmetini yerel olarak çalıştırın.
Bu makaledeki yönergelerde Windows kullandığınız varsayılır. Başka bir işletim sistemi kullanıyorsanız, bazı dosya yollarını ve komutlarını ortamınıza uyacak şekilde ayarlamanız gerekebilir.
Mikro hizmetleri indirme
GitHub'dan uzaktan izleme mikro hizmetlerini indirip yerel makinenizde uygun bir konuma açın. Makalede bu klasörün adının remote-monitoring-services-dotnet-master olduğu varsayılır.
Cihaz benzetimi mikro hizmetini GitHub'dan indirip yerel makinenizde uygun bir konuma açın. Makalede bu klasörün adının device-simulation-dotnet-master olduğu varsayılır.
Depolama bağdaştırıcısı mikro hizmetini çalıştırma
Visual Studio Code'da remote-monitoring-services-dotnet-master\storage-adapter klasörünü açın. Çözülmemiş bağımlılıkları düzeltmek için geri yükleme düğmelerine tıklayın.
Depolama bağdaştırıcısı/WebService/appsettings.ini dosyasını açın ve Cosmos DB bağlantı dizenizi documentDBConnectionString değişkenine atayın.
Mikro hizmeti yerel olarak çalıştırmak için Hata Ayıklamayı Başlat Hata Ayıklama'ya >tıklayın.
Visual Studio Code'daki Terminal penceresi, web hizmeti sistem durumu denetimi için bir URL de dahil olmak üzere çalışan mikro hizmetten gelen çıkışı gösterir: http://127.0.0.1:9022/v1/status. Bu adrese gittiğinizde, durum "Tamam: Canlı ve iyi" olmalıdır.
Sonraki adımları tamamlarken depolama bağdaştırıcısı mikro hizmetini bu Visual Studio Code örneğinde çalışır durumda bırakın.
Soğutucuyu değiştirme
Bu bölümde, mevcut Soğutucu cihaz türüne yeni bir İç Sıcaklık telemetri türü ekleyebilirsiniz:
Yerel makinenizde yeni bir C:\temp\devicemodels klasörü oluşturun.
Cihaz benzetimi mikro hizmetinin indirilen kopyasından aşağıdaki dosyaları yeni klasörünüze kopyalayın:
Kaynak Hedef Services\data\devicemodels\chiller-01.json C:\temp\devicemodels\chiller-01.json Services\data\devicemodels\scripts\chiller-01-state.js C:\temp\devicemodels\scripts\chiller-01-state.js Services\data\devicemodels\scripts\Reboot-method.js C:\temp\devicemodels\scripts\Reboot-method.js Services\data\devicemodels\scripts\FirmwareUpdate-method.js C:\temp\devicemodels\scripts\FirmwareUpdate-method.js Services\data\devicemodels\scripts\EmergencyValveRelease-method.js C:\temp\devicemodels\scripts\EmergencyValveRelease-method.js Services\data\devicemodels\scripts\IncreasePressure-method.js C:\temp\devicemodels\scripts\IncreasePressure-method.js C:\temp\devicemodels\chiller-01.json dosyasını açın.
InitialState bölümünde aşağıdaki iki tanımı ekleyin:
"internal_temperature": 65.0, "internal_temperature_unit": "F",
Telemetri dizisine aşağıdaki tanımı ekleyin:
{ "Interval": "00:00:05", "MessageTemplate": "{\"internal_temperature\":${internal_temperature},\"internal_temperature_unit\":\"${internal_temperature_unit}\"}", "MessageSchema": { "Name": "chiller-internal-temperature;v1", "Format": "JSON", "Fields": { "temperature": "double", "temperature_unit": "text" } } },
C:\temp\devicemodels\chiller-01.json dosyasını kaydedin.
C:\temp\devicemodels\scripts\chiller-01-state.js dosyasını açın.
Durum değişkenine aşağıdaki alanları ekleyin:
internal_temperature: 65.0, internal_temperature_unit: "F",
Main işlevini aşağıdaki gibi güncelleştirin:
function main(context, previousState, previousProperties) { // Restore the global state before generating the new telemetry, so that // the telemetry can apply changes using the previous function state. restoreSimulation(previousState, previousProperties); // 75F +/- 5%, Min 25F, Max 100F state.temperature = vary(75, 5, 25, 100); // 70% +/- 5%, Min 2%, Max 99% state.humidity = vary(70, 5, 2, 99); // 65F +/- 2%, Min 15F, Max 125F state.internal_temperature = vary(65, 2, 15, 125); log("Simulation state: " + state.simulation_state); if (state.simulation_state === "high_pressure") { // 250 psig +/- 25%, Min 50 psig, Max 300 psig state.pressure = vary(250, 25, 50, 300); } else { // 150 psig +/- 10%, Min 50 psig, Max 300 psig state.pressure = vary(150, 10, 50, 300); } updateState(state); return state; }
C:\temp\devicemodels\scripts\chiller-01-state.js dosyasını kaydedin.
Ampul oluşturma
Bu bölümde yeni bir Ampul cihaz türü tanımlayacaksınız:
C:\temp\devicemodels\lightbulb-01.json dosyasını oluşturun ve aşağıdaki içeriği ekleyin:
{ "SchemaVersion": "1.0.0", "Id": "lightbulb-01", "Version": "0.0.1", "Name": "Lightbulb", "Description": "Smart lightbulb device.", "Protocol": "MQTT", "Simulation": { "InitialState": { "online": true, "temperature": 200.0, "temperature_unit": "F", "status": "on" }, "Interval": "00:00:20", "Scripts": [ { "Type": "javascript", "Path": "lightbulb-01-state.js" } ] }, "Properties": { "Type": "Lightbulb", "Color": "White", "Brightness": 75, "EstimatedRemainingLife": 10000 }, "Tags": { "Location": "Building 2", "Floor": "2", "Campus": "Redmond" }, "Telemetry": [ { "Interval": "00:00:20", "MessageTemplate": "{\"temperature\":${temperature},\"temperature_unit\":\"${temperature_unit}\",\"status\":\"${status}\"}", "MessageSchema": { "Name": "lightbulb-status;v1", "Format": "JSON", "Fields": { "temperature": "double", "temperature_unit": "text", "status": "text" } } } ], "CloudToDeviceMethods": { "SwitchOn": { "Type": "javascript", "Path": "SwitchOn-method.js" }, "SwitchOff": { "Type": "javascript", "Path": "SwitchOff-method.js" } } }
C:\temp\devicemodels\lightbulb-01.json dosyasındaki değişiklikleri kaydedin.
C:\temp\devicemodels\scripts\lightbulb-01-state.js bir dosya oluşturun ve aşağıdaki içeriği ekleyin:
"use strict"; // Default state var state = { online: true, temperature: 200.0, temperature_unit: "F", status: "on" }; // Default device properties var properties = {}; /** * Restore the global state using data from the previous iteration. * * @param previousState device state from the previous iteration * @param previousProperties device properties from the previous iteration */ function restoreSimulation(previousState, previousProperties) { // If the previous state is null, force a default state if (previousState) { state = previousState; } else { log("Using default state"); } if (previousProperties) { properties = previousProperties; } else { log("Using default properties"); } } /** * Simple formula generating a random value around the average * in between min and max * * @returns random value with given parameters */ function vary(avg, percentage, min, max) { var value = avg * (1 + ((percentage / 100) * (2 * Math.random() - 1))); value = Math.max(value, min); value = Math.min(value, max); return value; } /** * Simple formula that sometimes flips the status of the lightbulb */ function flip(value) { if (Math.random() < 0.2) { return (value == "on") ? "off" : "on" } return value; } /** * Entry point function called by the simulation engine. * Returns updated simulation state. * Device property updates must call updateProperties() to persist. * * @param context The context contains current time, device model and id * @param previousState The device state since the last iteration * @param previousProperties The device properties since the last iteration */ function main(context, previousState, previousProperties) { // Restore the global device properties and the global state before // generating the new telemetry, so that the telemetry can apply changes // using the previous function state. restoreSimulation(previousState, previousProperties); state.temperature = vary(200, 5, 150, 250); // Make this flip every so often state.status = flip(state.status); updateState(state); return state; }
değişiklikleriC:\temp\devicemodels\scripts\lightbulb-01-state.jskaydedin.
C:\temp\devicemodels\scripts\SwitchOn-method.js bir dosya oluşturun ve aşağıdaki içeriği ekleyin:
"use strict"; // Default state var state = { status: "on" }; /** * Entry point function called by the method. * * @param context The context contains current time, device model and id * @param previousState The device state since the last iteration * @param previousProperties The device properties since the last iteration */ function main(context, previousState) { log("Executing lightbulb Switch On method."); state.status = "on"; updateState(state); }
değişiklikleriC:\temp\devicemodels\scripts\SwitchOn-method.jskaydedin.
C:\temp\devicemodels\scripts\SwitchOff-method.js bir dosya oluşturun ve aşağıdaki içeriği ekleyin:
"use strict"; // Default state var state = { status: "on" }; /** * Entry point function called by the method. * * @param context The context contains current time, device model and id * @param previousState The device state since the last iteration * @param previousProperties The device properties since the last iteration */ function main(context, previousState) { log("Executing lightbulb Switch Off method."); state.status = "off"; updateState(state); }
değişiklikleriC:\temp\devicemodels\scripts\SwitchOff-method.jskaydedin.
Chiller cihaz türünün özelleştirilmiş bir sürümünü oluşturdunuz ve yeni bir Ampul cihaz türü oluşturdunuz.
Cihazları test etme
Bu bölümde, önceki bölümlerde oluşturduğunuz cihaz türlerini yerel olarak test edin.
Cihaz benzetimi mikro hizmetini çalıştırma
GitHub'dan indirdiğiniz device-simulation-dotnet-master klasörünü yeni bir Visual Studio Code örneğinde açın. Çözülmemiş bağımlılıkları düzeltmek için geri yükleme düğmelerine tıklayın.
WebService/appsettings.ini dosyasını açın ve Cosmos DB bağlantı dizenizi documentdb_connstring değişkenine atayın ve ayarları aşağıdaki gibi değiştirin:
device_models_folder = C:\temp\devicemodels\
device_models_scripts_folder = C:\temp\devicemodels\scripts\
Mikro hizmeti yerel olarak çalıştırmak için Hata Ayıklamayı Başlat Hata Ayıklama'ya >tıklayın.
Visual Studio Code'deki Terminal penceresi, çalışan mikro hizmetin çıkışını gösterir.
Sonraki adımları tamamlarken cihaz benzetimi mikro hizmetini bu Visual Studio Code örneğinde çalışır durumda bırakın.
Cihaz olayları için monitör ayarlama
Bu bölümde, IoT hub'ınıza bağlı cihazlardan gönderilen telemetriyi görüntülemek üzere bir olay izleyicisi ayarlamak için Azure CLI'yi kullanacaksınız.
Aşağıdaki betikte IoT hub'ınızın adının device-simulation-test olduğu varsayılır.
# Install the IoT extension if it's not already installed
az extension add --name azure-iot
# Monitor telemetry sent to your hub
az iot hub monitor-events --hub-name device-simulation-test
Simülasyon cihazlarını test ederken olay izleyicisini çalışır durumda bırakın.
Güncelleştirilmiş soğutucu cihaz türüyle simülasyon oluşturma
Bu bölümde, güncelleştirilmiş soğutucu cihaz türünü kullanarak bir simülasyon çalıştırmak üzere cihaz benzetimi mikro hizmetini istemek için Postman aracını kullanacaksınız. Postman, bir web hizmetine REST istekleri göndermenizi sağlayan bir araçtır. İhtiyacınız olan Postman yapılandırma dosyaları device-simulation-dotnet deposunun yerel kopyasında bulunur.
Postman'i ayarlamak için:
Yerel makinenizde Postman'i açın.
Dosya > İçeri Aktar'a tıklayın. Ardından Dosya Seç'e tıklayın.
device-simulation-dotnet-master/docs/postman klasörüne gidin. Azure IoT Cihaz Benzetimi çözümü accelerator.postman_collection ve Azure IoT Cihaz Benzetimi çözümü accelerator.postman_environment'ı seçin ve Aç'a tıklayın.
Gönderebileceğiniz istekler için Azure IoT Cihaz Benzetimi çözüm hızlandırıcısını genişletin.
Ortam Yok'a tıklayın ve Azure IoT Cihaz Benzetimi çözüm hızlandırıcısı'ni seçin.
Artık Postman çalışma alanınızda cihaz benzetimi mikro hizmetiyle etkileşimde bulunabileceğiniz bir koleksiyon ve ortam yüklü.
Benzetimi yapılandırmak ve çalıştırmak için:
Postman koleksiyonunda Değiştirilmiş soğutucu benzetimi oluştur'u seçin ve Gönder'e tıklayın. Bu istek, sanal soğutucu cihaz türünün dört örneğini oluşturur.
Azure CLI penceresindeki olay izleyicisi çıkışı, yeni internal_temperature değerleri de dahil olmak üzere simülasyon cihazlarından alınan telemetriyi gösterir.
Simülasyonu durdurmak için Postman'da simülasyon isteğini durdur'u seçin ve Gönder'e tıklayın.
Ampul cihaz türüyle simülasyon oluşturma
Bu bölümde Postman aracını kullanarak ampul cihaz türünü kullanarak bir simülasyon çalıştırmak üzere cihaz benzetimi mikro hizmetini isteyebilirsiniz. Postman, bir web hizmetine REST istekleri göndermenizi sağlayan bir araçtır.
Benzetimi yapılandırmak ve çalıştırmak için:
Postman koleksiyonunda Ampul benzetimi oluştur'u seçin ve Gönder'e tıklayın. Bu istek, simülasyon ampulü cihaz türünün iki örneğini oluşturur.
Azure CLI penceresindeki olay izleyicisi çıkışı, simülasyon ampullerinden alınan telemetriyi gösterir.
Simülasyonu durdurmak için Postman'da simülasyon isteğini durdur'u seçin ve Gönder'e tıklayın.
Kaynakları temizleme
yerel olarak çalışan iki mikro hizmeti Visual Studio Code örneklerinde durdurabilirsiniz (Hata AyıklamaYı > Durdur Hata Ayıklama).
IoT Hub ve Cosmos DB örneklerine artık ihtiyacınız yoksa, gereksiz ücretlerden kaçınmak için bunları Azure aboneliğinizden silin.
Sonraki adımlar
Bu kılavuzda, özel bir sanal cihaz türü oluşturma ve cihaz benzetimi mikro hizmetini yerel olarak çalıştırarak bunları test etme adımları gösterildi.
Önerilen sonraki adım, özel sanal cihaz türlerinizi Uzaktan İzleme çözüm hızlandırıcısına dağıtmayı öğrenmektir.