Azure Machine Learning ile bir IoT cihazdan gelen verilerimizi nasıl analiz edebiliriz?

Kadir Alan
6 min readSep 30, 2017

Bugün IoT cihazımından gelen verilerimizi gerçek zamanlı olarak nasıl analiz edebileceğimizi öğreneceğiz. Veri elde edebilmek için Raspberry Pi Azure IoT Online Simulator kullandım. Başlamadan önce hangi servisleri kullanacağımızı, neye ihtiyacımız olduğunu bir görsel ile anlatmak istiyorum.

Device’dan gelen data ilk olarak Azure IoT Hub’a gelecek. Burası verilerimizin kalıcı olarak saklandığı bir yer değildir. IoT Hub diğer servislerle haberleşerek gelen veriyi servislerle paylaşır. Peki neden IoT Hub kullanıyoruz? Servislere direkt olarak paylaşamaz mıydık?

Neden IoT Hub?

Veri tek bir cihazdan değil birden fazla cihazdan gelebilir. Bunun için gelen verileri ortak bir yerde tutmak gerekir. Bu sayede birden fazla cihazdan buluta , buluttan birden fazla cihaza veri aktarabilirsiniz. Diğer Azure hizmetleriyle haberleşebilir. IoT Hub Metadata da tutar, bu sayede hangi cihaza ne zaman nasıl erişildiğine dair bilgiler sunar. Aynı zamanda güvenli bir şekilde verilerimizi saklar. Device kimlik yönetimi olayları için kapsamlı izleme sağlar. En popüler diller ve platformlar için “device library “ sunar.

Veri IoT Hub’a geldikten sonra verinin bir sonraki adresi Azure’nin Stream Analytics servisidir. Peki nedir Stream Analytics Job?

Stream Analytics Nedir?

Stream Analytics gerçek zamanlı olarak akan veriler üzerinde analitik hesaplamalar yapmamıza izin veren, yöneten bir olay işleme motorudur. Bu veriler her yerden akabilir. IoT cihazlar, web hizmetleri, sosyal medya akışları, alt yapı sistemleri gibi daha bir çok yerden gelebilir. Bu veri akışından bilgi çıkarmak ve modelleri, eğilimleri ve ilişkileri aramak için Stream Analytics servisi kullanılır. Daha sonra bu veriler ile istediğimiz ortamı besleyebiliriz.

Azure Machine Learning

Burada söyleyecek çok şey var aslında fakat yazının asıl amacı bir demo yapmak olduğundan dolayı kısaca değineceğim. Azure Machine Learning uçtan uca bir veri bilimi ve gelişmiş analitik çözümdür. Verilerin hazırlanmasına, deneyler geliştirilmesine ve modelleri bulutta dağıtmasına olanak tanır. Ayrıca Azure Machine Learning, açık kaynak teknolojilerini tam olarak desteklemektedir. Biz de demomuzu yaparken Stream Analytics’den gelen verilerimizi Azure Machine Learning’de gerekli algoritmalarla sınayarak bir sonuç üretmeye çalışacağız.

Azure Storage

Azure Storage depolama hizmeti sağlayan bir bulut hizmetidir. Güvenilirliği , dayanıklığı , ölçeklenebilirliği sayesinde yüksek kullanılabilirlik sağlar. Ve işin güzel tarafı bunların hiç biriyle siz ilgilenmiyorsunuz (özel durumlar hariç) Microsoft bunu sizin için kendisi hallediyor. Bunun yanında Microsoft bakım işlemlerini yaparak kritik hataları da gideriyor. Biz de Machine Learning’den gelen analiz edilmiş sonuçları Azure Storage ile tutacağız ve bunları Microsoft Azure Storage Explorer desktop uygulaması ile görüntüleyeceğiz.

Başlayalım!

Burada hazır olarak oluşturulmuş bir modeli kullanacağız. Ve IoT cihazdan gelen bilgilere göre bir hava tahmini yapılmasını sağlayacağız.

Modelimizi Azure Machine Learning ile Açıyoruz

1- Hava tahmini modeli sayfasına gidiyoruz.
2- “Open in Studio” diyerek modelimizi Azure Machine Learning Studio’da açıyoruz.

Azure Account’unuz ile login olduktan sonra karşınıza gelen pencerede modelimizi doğrulamak için “Run” lıyoruz.

Daha sonrasında “Run” butonunun hemen yanında yer alan “ SET UP WEB SERVICE” butonunu tıklayarak açılan sekmede “Predictive Web Service” butonuna tıklıyoruz.

Şemada yer alan “Web service input” modülünü “Score Model” modülüne yakın bir yere taşıyın. Taşıma işlemini tutup sürükleyerek yapabilirsiniz.

Daha sonrasında “Web service input” modülü ile “Score Model” modülünü birbirine bağlayın.

Bu adımları doğrulamak için “Run” layalım.

Oluşturduğumuz bu modeli bir servis olarak dağıtmamız gerektiği için “ DEPLOY WEB SERVICE” butonunu tıklayarak gerekli olan Service Url’i ve Access Key’i alıyoruz.

Açılan Dashboard’da Request/Response için Excel 2010 veya önceki çalışma kitabını indirin.

İndirdiğimiz Excel dosyasını açalım ve “Web service url” ve “Access Key” i not edelim.

IoT Hub Oluşturarak Device Kaydı Gerçekleştirme

Azure portalına girmiş olduğunuzu varsayıyorum.

Azure portalında sol üst tarafında yer alan “New” butonuna tıklayarak Internet of Things sekmesi altında yer alan “IoT Hub” ı tıklıyoruz. Bulamayanlar arama kısmına direkt IoT Hub yazarak bulabilir.

Açılan pencerede IoT Hub’ımız ile ilgili gerekli bilgileri girmemiz gerekiyor.

1-Unique bir isim veriyoruz IoT Hub’ımıza.

2-Pricing için Free seçebiliyorsanız Free seçin ben bu hakkımı daha önce kullandığım için seçemiyorum.

3-Resource group için Create new diyerek yeni bir isim vererek yaratalım. Burada dikkat etmemiz gereken asıl konu diğer servisleri de yaratırken bu resource grubunu kullanacağız.

4-Location fotoğrafta East US görünüyor ama siz muhtemelen Türkiye’de olduğunuz için West Europe seçebilirsiniz.

Daha sonrasında “Pin to dashboard” ı seçerek Create edelim.

IoT Hub oluşturulduktan sonra Dashboardımıza gelmiş olması gerekiyor. Tıklayarak girelim içine.

Karşımıza gelen pencerenin sol kısmında yer alan “Endpoints” butonuna tıklayarak IoT Hub’a bir endpoint veriyoruz. Açılan pencerede orta bölmedeki “Events” butonuna tıklayarak hemen sağda açılan pencerede bir isim girerek “Save” ediyoruz.

Stream Analytics Job Oluşturup Çalıştırıyoruz

New > Internet of Things > Stream Analytics job yolunu takip ederek Stream Analytics Job servisimizi yaratıyoruz.

Burada asıl dikkat etmemiz gereken Resource Group seçerken IoT Hub ile aynı Resource Group’u seçmemiz gerekiyor. Location yine aynı şekilde West Europe. “Pin to dashboard” diyerek create ediyoruz.

Dashboard’umuza gelerek oluşturmuş olduğumuz Stream Analytics Job’u tıklayarak açıyoruz.

Job Topology” başlığı altındaki “Inputs” butonuna tıklayarak bir input ekliyoruz. Source olarak IoT Hub seçtikten sonra oluşturduğumuz IoT Hub’umuzu seçiyoruz. Consumer Group’da ise oluşturduğumuz Resource Group’u seçerek Create ediyoruz.

Aynı şekilde “Job Topology” başlığı altındaki “Outputs” butonunu tıklayarak output ekliyoruz. Name için unique bir değer girdikten sonra sink için “Blob Storage” seçiyoruz. Storage Account oluşturabilirsiniz veya var olanı kullanabilirsiniz. Aynısı container içinde geçerli. “Event serialization format” için CSV seçiyoruz.

Şimdi Deploy ettiğimiz web servisini çağırmak için Stream Analytics Job’umuza bir Azure Function ekliyoruz. “Job Topology” altındaki “Functions’” u tıklayıp “Add” diyoruz.

Function Alias alanına machinelearning yazıyoruz. Function Type’ı “Azure ML” seçiyoruz. Subscription’u “Import from a different subscription” olacak şekilde seçiyoruz. Url ve Key alanına ise Excelden kaydettiğimiz Web Service Url ve Access Key’i giriyoruz.

Sona doğru yaklaşıyoruz. Şimdi artık sorgumuzu yazabiliriz. “Job Topology” alanında yer alan “Query” butonunu tıklayarak sorgumuzu yazıyoruz. Sorgu kodumuzu bu kod ile değiştiriyoruz ;

WITH machinelearning AS ( SELECT EventEnqueuedUtcTime, temperature, humidity, machinelearning(temperature, humidity) as result from [YourInputAlias] ) Select System.Timestamp time, CAST (result.[temperature] AS FLOAT) AS temperature, CAST (result.[humidity] AS FLOAT) AS humidity, CAST (result.[Scored Probabilities] AS FLOAT ) AS ‘probabalities of rain’ Into [YourOutputAlias] From machinelearning

YourInputAlias” yazan yeri Input’umuza verdiğimiz name ile, “YourOutputAlias” yazan yeri ise Output’umuza verdiğimiz name ile değiştiriyoruz. Ve “Save” ediyoruz.

Stream Analytics servisimizi artık “Start” butonuna basarak başlatabiliriz.

Oluşturmuş olduğumuz IoT Hub’a gelerek ConnectionString’i almamız gerekiyor. IoT Hub’u açtıktan sonra solda yer alan “Shared Access Policies” i tıkladıktan sonra orta kısımda yer alan iothubbowner’i tıklayıp hemen sağda açılan pencereden Connection String-Primary Key’i seçiyoruz.

Buradan Rasberry Pi Azure IoT Online Simülatöre gidiyoruz.

Sol tarafta sizin için Default olarak hazırlanmış bir devre göreceksiniz. Sağda ise yine aynı şekilde kodları var. Connection String içerisine yukarda almış olduğumuz Connection String’i yazdıktan sonra “Run” lıyoruz ve verilerimizi göndermiş oluyoruz

IoT hub’unuzun aldığı her mesaj için Stream Analytics Job, yağmur ihtimali yaratmak için hava durumu web servisini çağırır. Sonuç daha sonra Azure Blob Storage’a kaydedilir. Azure Storage Explorer ile de sonuçlarımızı görüntüleyeceğiz.

Buradan Microsoft Azure Storage Explorer’i indirip kuruyoruz. Kurduktan sonra Azure hesabımız ile login oluyoruz. Aboneliğimizi seçiyoruz. Ve Subscription > Storage Accounts > storage account > Blob Containers > container yolunu izleyerek CSV uzantılı dosyayı açıyoruz. Karşımızda analiz edilmiş datalar mevcut. Burada en son da yer alan yağmur ihtimalidir.

Takıldığınız yer olursa bana mesaj atabilirsiniz. Teşekkürler :)

www.kodadam.net

--

--