Chương 3 PHÁT TRIỂN ỨNG DỤNG
3.2 Phát triển các module chương trình
3.2.3 Gởi dữ liệu lên Azure IoT Hub và hiển thị trên Power BI
Để có thể tiến hành gởi dữ liệu từ các cảm biến lên Azure IoT Hub và hiển thị kết quả trực quan, chúng ta cần phải tiến hành các bước sau đây:
- Khởi tạo một IoT Hub.
- Khởi tạo định danh cho thiết bị.
- Tiến hành gởi dữ liệu từ thiết bị đồng bộ từ dưới lên đám mây điện toán.
- Khởi tạo một Event Hub để tiếp nhận và xử lý dữ liệu đầu vào.
- Khởi tạo một Stream Analytics từ Event Hub vừa tạo để xây dựng hệ thống dữ liệu đầu vào vào truy vấn đầu ra.
- Sử dụng Power BI lấy dữ liệu dạng thời gian thực và xuất báo cáo.
Sau đây là các bước tóm tắt quá trình thực thi ở trên a) Khởi tạo một IoT Hub:
Để khởi tạo một IoT Hub chúng ta cần một tài khoản của Microsoft để có thể đăng nhập được vào Azure Portal, mỗi tài khoản sẽ có một đặc quyền khác nhau tùy vào mức độ yêu cầu sử dụng và chi phí của người sử dụng đối với quy mô của hệ thống cần triển khai.
Sau khi đã đăng nhập được vào hệ thống Azure Portal, chúng ta sẽ tạo tên, lựa chọn mức độ triển khai hay nhóm tài nguyên đã có sẵn hay tạo mới... Sau khi tiến hành xong phần cấu hình của IoT Hub trong phân mục Internet of Things, chúng ta sẽ đợi từ vài phút để hệ thống của Mircosoft khởi tạo một IoT Hub. Chúng ta cũng có thể
kiểm tra tiến trình, kiểm tra trạng thái thông qua một bảng chú thích hoặc một bảng khởi đầu. Trong phần này chúng ta cần chú ý 02 thông tin quan trọng là hostname và chuỗi kết nối chính (Connection String - Primary Key) - phần này chúng ta có thể tìm thấy ở mục chính sách của IoThubowner.
Hình 3.22 Màn hình xác định chuỗi kết nối chính b) Khởi tạo định danh cho một thiết bị
Để khởi tạo định danh cho một thiết bị, chúng ta có nhiều cách khác nhau để khởi tạo nó. Có thể sử dụng C# trong môi trường Visual Studio hoặc cũng có thể khởi tạo trực tiếp tại Azure Portal. Để khởi tạo trong C#, chúng ta cần phải sử dụng NuGet Packages Manager để cài đặt gói microsoft.azure.devices và kết nối khởi tạo bằng dòng lệnh như sau:
using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Common.Exceptions;
static RegistryManager registryManager;
static string connectionString = "{IoT hub connection string}";
private static async Task AddDeviceAsync() {
string deviceId = "myFirstDevice";
Device device;
try {
device = await registryManager.AddDeviceAsync(new Device(deviceId));
}
catch (DeviceAlreadyExistsException)
{ device = await registryManager.GetDeviceAsync(deviceId);
}
Console.WriteLine("Generated device key: {0}", device.Authentication.SymmetricKey.PrimaryKey);
}
Hoặc chúng ta cũng có thể tạo trực tiếp từ Azure Portal trong mục Quản lý thiết bị trong phần IoT Hub vừa mới tạo:
Hình 3.23 Khởi tạo thiết bị đồng bộ trên Azure Portal
c. Tiến hành gởi dữ liệu từ thiết bị đồng bộ từ dưới lên đám mây điện toán.
Sau khi đã tiến hành thao tác "đồng bộ" giữa hệ thống đang sử dụng với một định danh thiết bị trên điện toán đám mây Azure. Chúng ta tiến hành gởi dữ liệu từ các cảm biến đã được sử dụng và kết nối để số hóa và gởi chúng lên thiết bị đã được đồng bộ trên Azure Portal. Việc gởi thông tin này sẽ dưới dạng JSON thông qua giao thức MQTT, nhưng trước tiên chúng ta cần phải tiến hành cài đặt gói Microsoft.Azure.Devices.Client từ NuGets Package. Sau đây là ví dụ đơn giản để có thể gởi dữ liệu lên trên điện toán đám mây bằng C# ở dưới dạng JSON.
using Microsoft.Azure.Devices.Client;
using Newtonsoft.Json;
static DeviceClient deviceClient;
static string IoTHubUri = "{IoT hub hostname}";
static string deviceKey = "{device key}";
private static async void SendDeviceToCloudMessagesAsync() {
double minTemperature = 20;
double minHumidity = 60;
int messageId = 1;
Random rand = new Random();
while (true) {
double currentTemperature = minTemperature + rand.NextDouble() * 15;
double currentHumidity = minHumidity + rand.NextDouble() * 20;
var telemetryDataPoint = new
{
messageId = messageId++, deviceId = "myFirstDevice",
temperature = currentTemperature, humidity = currentHumidity
};
var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
var message = new Message(Encoding.ASCII.GetBytes(messageString));
message.Properties.Add("temperatureAlert", (currentTemperature > 30)
? "true" : "false");
await deviceClient.SendEventAsync(message);
Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, messageString);
await Task.Delay(1000);
} }
d) Khởi tạo một Event Hub để tiếp nhận và xử lý dữ liệu đầu vào.
Cũng tương tự như việc khởi tạo IoT Hub, trước hết chúng ta cần phải khởi tạo một không gian tên riêng (namespace) để từ đó chúng ta khởi tạo được một Event Hubs riêng biệt có các khóa chính để có thể tương tác và truy vấn thông tin từ đó. Việc tạo namespace trong phân hệ Event Hub của menu Internet of Things. Quan trọng nhất trong phần khởi tạo trung tâm sự kiện này là chúng ta phải tạo được chuỗi kết nối RootManageSharedAccessKey
Hình 3.24 Khởi tạo chuỗi kết nối đồng bộ thiết bị
e) Khởi tạo một Stream Analytics từ Event Hub vừa tạo để xây dựng hệ thống dữ liệu đầu vào vào truy vấn đầu ra.
Việc khởi tạo và truy vấn dữ liệu được gởi lên từ hệ thống giám sát môi trường lên trên đám mây và được xử lý theo thời gian thực. Đối với việc phân tích luồng dữ liệu của Microsoft Azure có thể thực hiện đối với dữ liệu được định dạng JSON với khóa chính là thời gian chuẩn dạng UTC, chế độ mã hóa Unicode UTF-8. Để thực thi lấy và truy vấn dữ liệu tại đây chúng ta cần khởi tạo 3 công việc chính đó là xác định dữ liệu đầu vào, thực hiện lệnh truy vấn và cuối cùng là xử lý dữ liệu đầu ra. Sau khi đã tiến hành khởi tạo một luồng phân tích dữ liệu, chúng ta phải khởi động tiến trình thu thập và xử lý thông tin.
Hình 3.25 Xây dựng một luồng phân tích dữ liệu
Trong mục này, với dữ liệu đầu vào là Weather In chúng ta cần lưu ý một số thông tin cấu hình như sau: Event Hub, Event Hub policy name và Service bus namespace là tên của IoT Hub chúng ta đã khởi tạo ở mục a. Còn dữ liệu đầu ra Weather Out thì bao gồm tên cơ sở dữ liệu, tên bảng dữ liệu và phần kết nối đến tài khoản của Power BI để có thể kết xuất dữ liệu. Trong phần vấn tin thì chúng ta có thể xây dựng các câu lệnh SQL để đưa ra các thông tin cụ thể cần thiết.
Dữ liệu đầu vào Truy vấn thông tin Dữ liệu đầu ra
Hình 3.26 Quá trình khởi tạo một luồng phân tích dữ liệu f) Sử dụng Power BI lấy dữ liệu dạng thời gian thực và xuất báo cáo.
Để sử dụng Power BI, chúng ta cần khởi tạo một tài khoản đăng nhập vào hệ thống. Sau khi đăng nhập thì chúng ta sẽ xây dựng việc kết nối dữ liệu đã được gởi lên Azure và hiển thị ở Power BI bằng việc tạo một không gian làm việc mới. Tại đây, chúng ta sẽ tiếp tục hiển thị từng loại dữ liệu truy vấn được và đưa ra bảng điều khiển để thể hiện dữ liệu trực quan.
Hình 3.27 Dữ liệu được trích xuất ra Power BI của Microsoft