Phần 11. Lưu trữ dữ liệu vị trí

0
964

Các bài viết trước đã giới thiệu cách sử dụng cảm biến GPS để thu thập dữ liệu vị trí. Để trực quan hóa vị trí và hành trình của một đối tượng, cần gửi dữ liệu này đến dịch vụ IoT trên đám mây và lưu trữ lại.

Bài viết này sẽ trình bày các cách để lưu trữ dữ liệu IoT và dữ liệu từ dịch vụ IoT sử dụng serverless code.

Các nội dung chính trong bài viết này như sau:

1. Khái niệm dữ liệu có cấu trúc và phi cấu trúc

2. Cách gửi dữ liệu GPS đến IoT Hub

3. Khái niệm đường dẫn nóng, ấm và lạnh

4. Cách điều khiển các GPS event sử dụng serverless code

5. Tài khoản lưu trữ Azure

6. Cách kết nối serverless code với bộ nhớ

1. Khái niệm dữ liệu có cấu trúc và phi cấu trúc

Hệ thống máy tính xử lý dữ liệu với nhiều cấu trúc khác nhau. Dữ liệu có thể thay đổi từ số đơn lẻ đến lượng lớn văn bản, video, hình ảnh và dữ liệu IoT. Dữ liệu thường được chia thành hai loại: dữ liệu có cấu trúc và phi cấu trúc.

Dữ liệu có cấu trúc là dữ liệu có cấu trúc được xác định rõ ràng, chặt chẽ, không thay đổi và thường ánh xạ tới các bảng dữ liệu có sự tương quan. Ví dụ: thông tin chi tiết về một người bao gồm tên, ngày sinh và địa chỉ.

Dữ liệu phi cấu trúc là dữ liệu không có cấu trúc rõ ràng, chặt chẽ, bao gồm dữ liệu có thể thay đổi cấu trúc thường xuyên. Ví dụ: các tài liệu như văn bản hoặc bảng tính.

Ngoài ra có loại dữ liệu bán cấu trúc, là dữ liệu có cấu trúc nhưng không phù hợp với các bảng dữ liệu cố định.

Dữ liệu IoT thường được coi là dữ liệu phi cấu trúc.

Giả sử khi triển khai hệ thống IoT cho đội xe của một trang trại thương mại lớn và đối với từng phương tiện khác nhau sẽ sử dụng những thiết bị IoT khác nhau. Ví dụ:

– Đối với các phương tiện nông nghiệp như máy kéo, người dùng cần dữ liệu GPS để đảm bảo chúng đang hoạt động trên đúng các cánh đồng.

– Đối với xe tải giao hàng vận chuyển thực phẩm đến nhà kho, dữ liệu GPS và dữ liệu tốc độ và gia tốc giúp đảm bảo tài xế lái xe an toàn, đồng thời dữ liệu nhận dạng lái xe và start/stop nhằm chắc chắn lái xe tuân thủ đúng giờ làm việc theo quy định.

– Đối với xe tải đông lạnh, người dùng cần dữ liệu nhiệt độ để đảm bảo thực phẩm không quá nóng hoặc lạnh làm hư hỏng trong quá trình vận chuyển.

Dữ liệu này có thể thay đổi liên tục. Ví dụ: nếu thiết bị IoT ở trong cabin xe tải thì dữ liệu mà nó gửi có thể thay đổi khi rơ moóc thay đổi như chỉ gửi dữ liệu nhiệt độ khi sử dụng rơ moóc được làm lạnh.

Dù các phương tiện cho dữ liệu khác nhau nhưng tất cả đều được gửi đến cùng một dịch vụ IoT để xử lý. Dịch vụ IoT cần có khả năng xử lý dữ liệu phi cấu trúc này và lưu trữ dữ liệu sao cho sẵn sàng tìm kiếm, phân tích các dữ liệu có cấu trúc khác nhau này.

Lưu trữ SQL và NoSQL

Cơ sở dữ liệu là các dịch vụ cho phép lưu trữ và truy vấn dữ liệu, bao gồm: SQL và NoSQL

Cơ sở dữ liệu SQL

Cơ sở dữ liệu đầu tiên là các cơ sở dữ liệu quan hệ, còn gọi là cơ sở dữ liệu SQL. Ngôn ngữ truy vấn có cấu trúc (SQL) dùng để tương tác (thêm, xóa, cập nhật hoặc truy vấn) với dạng cơ sở dữ liệu SQL. Cơ sở dữ liệu này bao gồm một lược đồ – tập hợp các bảng dữ liệu được xác định rõ ràng, tương tự như một bảng tính. Mỗi bảng có nhiều cột được đặt tên. Khi chèn dữ liệu, người dùng thêm một hàng vào bảng, đặt các giá trị vào từng cột nhằm giữ cho dữ liệu có cấu trúc cố định, mặc dù có thể để trống các cột. Nếu muốn thêm một cột mới, phải điền các giá trị cho các hàng hiện có trên cơ sở dữ liệu. Các cơ sở dữ liệu này có mối tương quan với nhau và bảng này có thể tương quan với bảng khác.

Ví dụ: Khi cần lưu trữ thông tin chi tiết của người dùng, thông tin của mỗi người dùng sẽ được lưu trong một hàng của bảng có chứa tên và địa chỉ của người dùng đó sử dụng một số loại ID duy nhất nội bộ. Sau đó, nếu muốn lưu trữ các thông tin khác về người dùng đó như giao dịch mua trong một bảng khác thì sẽ dùng một cột trong bảng mới cho ID người dùng đó. Khi cần tìm kiếm một người dùng, có thể sử dụng ID của họ để lấy thông tin cá nhân từ một bảng và thông tin mua hàng từ một bảng khác.

Cơ sở dữ liệu SQL lý tưởng để lưu trữ dữ liệu có cấu trúc và khi cần đảm bảo dữ liệu khớp với lược đồ.

Một số cơ sở dữ liệu SQL phổ biến như: Microsoft SQL Server, MySQL và PostgreSQL.

Cơ sở dữ liệu NoSQL

Cơ sở dữ liệu NoSQL được gọi là NoSQL vì không có cấu trúc cố định giống như cơ sở dữ liệu SQL, do đó còn được gọi là document database vì chúng có thể lưu trữ dữ liệu phi cấu trúc như document.

Mặc dù vậy, một số cơ sở dữ liệu NoSQL cũng cho phép sử dụng SQL để truy vấn dữ liệu.

Cơ sở dữ liệu NoSQL không có lược đồ xác định trước để giới hạn cách lưu trữ dữ liệu mà có thể chèn bất kỳ dữ liệu phi cấu trúc nào, thường sử dụng tài liệu JSON. Các tài liệu này có thể được sắp xếp thành các thư mục, tương tự như các File trong máy tính. Mỗi tài liệu có các trường khác nhau. Ví dụ: nếu đang lưu trữ dữ liệu IoT từ các phương tiện của nông trại, sẽ có các trường cho dữ liệu gia tốc và tốc độ hay các trường cho nhiệt độ. Nếu muốn thêm một loại xe tải mới, như loại có cân tích hợp để theo dõi trọng lượng của sản phẩm được vận chuyển, thì thiết bị IoT có thể thêm trường mới này và khi đó có thể lưu trữ dữ liệu mà không có bất kỳ thay đổi nào đối với cơ sở dữ liệu.

Một số cơ sở dữ liệu NoSQL phổ biến như: Azure CosmosDB, MongoDB và CouchDB.

Bài viết này sử dụng bộ lưu trữ NoSQL để lưu trữ dữ liệu IoT.

2. Cách gửi dữ liệu GPS đến Trung tâm IoT

Bài viết trước đã trình bày cách thu thập dữ liệu GPS từ cảm biến GPS kết nối với thiết bị IoT. Để lưu trữ dữ liệu IoT này trên đám mây, cần gửi dữ liệu đó đến dịch vụ IoT. Ở đây cũng sử dụng Azure IoT Hub và dịch vụ đám mây IoT trong project trước đó.

* Cách dữ liệu GPS đến IoT Hub

Tạo IoT Hub mới bằng cách sử dụng cấp miễn phí.

1. Tạo, đặt tên một Resource Group mới là gps-sensor và IoT Hub mới là một tên riêng dựa trên cảm biến gps như gps-sensor- <your name>.

Có thể sử dụng IoT Hub từ project trước.

2. Thêm thiết bị mới vào IoT Hub và đặt tên là gps-sensor. Lấy chuỗi kết nối cho thiết bị.

3. Cập nhật mã thiết bị để gửi dữ liệu GPS đến IoT Hub mới bằng cách sử dụng chuỗi kết nối thiết bị từ bước trước.

4. Gửi dữ liệu GPS dưới dạng JSON theo định dạng sau:

{
    "gps" :
    {
        "lat" : <latitude>,
        "lon" : <longitude>
    }
}

5. Gửi dữ liệu GPS mỗi phút một.

Nếu đang sử dụng Wio Terminal, hãy thêm tất cả các thư viện cần thiết và đặt thời gian bằng NTP server. Đảm bảo code đã đọc tất cả dữ liệu từ cổng nối tiếp trước khi gửi vị trí GPS, sử dụng code hiện có từ bài viết trước. Dùng code sau để tạo tài liệu JSON:

DynamicJsonDocument doc(1024);
doc["gps"]["lat"] = gps.location.lat();
doc["gps"]["lon"] = gps.location.lng();

Nếu đang sử dụng thiết bị IoT ảo, hãy cài đặt tất cả các thư viện cần thiết sử dụng môi trường ảo.

Đối với cả thiết bị Raspberry Pi và Virtual IoT, sử dụng mã hiện có từ bài viết trước để nhận các giá trị kinh độ và vĩ độ, sau đó gửi chúng ở định dạng JSON chính xác với mã sau:

message_json = { "gps" : { "lat":lat, "lon":lon } }
print("Sending telemetry", message_json)
message = Message(json.dumps(message_json))

Code này nằm trong thư mục code/wio-terminalcode/pi hoặc code/virtual-device 

Chạy device code và đảm bảo các thông báo được chuyển vào IoT Hub bằng cách sử dụng lệnh az iot hub monitor-events CLI.

3. Khái niệm đường dẫn nóng, ấm và lạnh

Dữ liệu truyền từ thiết bị IoT đến đám mây không phải luôn được xử lý theo thời gian thực. Một số dữ liệu cần xử lý thời gian thực, dữ liệu khác có thể xử lý trong thời gian ngắn sau đó và một số dữ liệu được xử lý muộn hơn nhiều. Luồng dữ liệu đến các dịch vụ khác nhau xử lý dữ liệu tại các thời điểm khác nhau được gọi là các đường dẫn nóng, ấm và lạnh.

Đường dẫn nóng

Đường dẫn nóng đề cập đến dữ liệu cần được xử lý trong thời gian thực hoặc gần thời gian thực. Dữ liệu đường dẫn nóng được sử dụng cho các cảnh báo, như cảnh báo có xe đang đến kho hoặc nhiệt độ trong xe tải lạnh quá cao.

Để sử dụng dữ liệu đường dẫn nóng, code sẽ phản hồi các sự kiện ngay sau khi các dịch vụ đám mây nhận được dữ liệu.

Đường dẫn ấm

Đường dẫn ấm đề cập đến dữ liệu được xử lý trong thời gian ngắn sau khi nhận được, ví dụ như để báo cáo hoặc phân tích ngắn hạn. Dữ liệu đường dẫn ấm được sử dụng cho các báo cáo hàng ngày về quãng đường đi của xe, dữ liệu thu thập được vào ngày hôm trước.

Sau khi nhận được từ dịch vụ đám mây, dữ liệu đường dẫn ấm được lưu trữ sao cho có thể truy cập nhanh chóng.

Đường dẫn lạnh

Đường dẫn lạnh đề cập đến dữ liệu lịch sử, lưu trữ dữ liệu lâu dài để xử lý bất cứ khi nào cần. Ví dụ: để nhận báo cáo quãng đường di chuyển hàng năm cho các phương tiện hoặc chạy phân tích các tuyến đường để tìm ra tuyến đường tối ưu nhằm giảm chi phí nhiên liệu.

Dữ liệu đường dẫn lạnh được lưu trữ trong kho dữ liệu – cơ sở dữ liệu được thiết kế để lưu trữ lượng lớn dữ liệu không bao giờ thay đổi và được truy vấn nhanh chóng và dễ dàng. Thông thường, có một công việc thường xuyên trong ứng dụng đám mây mà nó chạy vào một thời điểm đều đặn hàng ngày, hàng tuần hoặc hàng tháng để chuyển dữ liệu từ lưu trữ đường dẫn ấm vào kho dữ liệu.

4. Cách xử lý các sự kiện GPS sử dụng serverless code

Sau khi chuyển dữ liệu vào IoT Hub, người dùng có thể viết một số serverless code để nghe các sự kiện được publish tới điểm cuối tương thích của Event-Hub. Đây là đường dẫn ấm, dữ liệu này sẽ được lưu trữ và sử dụng trong bài viết tiếp theo để báo cáo về hành trình.

* Cách xử lý các sự kiện GPS bằng serverless code

1. Tạo ứng dụng Azure Functions sử dụng Azure Functions CLI. Tạo thời gian chạy Python trong thư mục gps-trigger và sử dụng cùng tên với Functions App project. Tất cả những việc này được thực hiện trong môi trường ảo.

2. Thêm trình kích hoạt sự kiện IoT Hub sử dụng điểm cuối tương thích với Event-Hub của IoT Hub.

3. Đặt chuỗi kết nối điểm cuối tương thích với Event-Hub trong File local.settings.json và sử dụng khóa cho mục nhập đó trong file function.json.

4. Sử dụng ứng dụng Azurite làm trình mô phỏng bộ nhớ cục bộ

5. Chạy Fuctions App để đảm bảo nó đang nhận các sự kiện từ thiết bị GPS. Lưu ý: thiết bị IoT cũng đang chạy và gửi dữ liệu GPS.

Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}}

5. Tài khoản lưu trữ Azure

Tài khoản lưu trữ Azure là một dịch vụ lưu trữ mục đích chung có thể lưu trữ dữ liệu theo nhiều cách khác nhau dưới nhiều dạng như blobs, trong hàng đợi, trong bảng hoặc dưới dạng file cùng một lúc.

Lưu trữ blob

Từ “Blob” là thuật ngữ chỉ bất kỳ dữ liệu phi cấu trúc nào. Bộ nhớ blob có thể lưu trữ bất kỳ dữ liệu nào, từ các tài liệu JSON chứa dữ liệu IoT đến các file hình ảnh và phim. Trong lưu trữ blob có khái niệm về các containers, các nhóm được đặt tên là nơi để lưu trữ dữ liệu tương tự như các bảng trong cơ sở dữ liệu quan hệ. Các vùng chứa này có một hoặc nhiều thư mục để lưu trữ các blob trong đó mỗi thư mục chứa các thư mục con, tương tự cách lưu trữ file trên đĩa cứng máy tính.

Trong bài viết này sử dụng lưu trữ blob để lưu trữ dữ liệu IoT.

Lưu trữ bảng

Lưu trữ bảng cho phép lưu trữ dữ liệu bán cấu trúc. Đây thực sự là một cơ sở dữ liệu NoSQL vì vậy không yêu cầu tập hợp các bảng xác định trước, nhưng nó được thiết kế để lưu trữ dữ liệu trong một hoặc nhiều bảng, với khóa duy nhất để xác định từng hàng.

Lưu trữ hàng đợi

Lưu trữ hàng đợi cho phép lưu trữ các tin nhắn có kích thước lên đến 64KB trong một hàng đợi. Có thể thêm tin nhắn vào phía sau hàng đợi và đọc chúng ở phía trước. Hàng đợi lưu trữ tin nhắn vô thời hạn miễn là vẫn còn dung lượng lưu trữ, vì vậy cho phép lưu trữ tin nhắn lâu dài. sau đó biểu thị khi cần thiết. Ví dụ: nếu muốn thực hiện một công việc hàng tháng để xử lý dữ liệu GPS, có thể thêm nó vào hàng đợi mỗi ngày trong một tháng, sau đó vào cuối tháng xử lý tất cả các thông báo khỏi hàng đợi.

Lưu trữ File

Lưu trữ file là lưu trữ các file trong đám mây và bất kỳ ứng dụng hoặc thiết bị nào đều có thể kết nối bằng các giao thức tiêu chuẩn của ngành. Có thể ghi file vào bộ lưu trữ file, sau đó gắn nó dưới dạng ổ đĩa trên PC hoặc Mac.

6. Cách kết nối serverless code với bộ nhớ

Có 2 cách để lưu các thông báo từ IoT Hub bằng cách kết nối ứng dụng chức năng với bộ lưu trữ blob là:

– Kết nối với bộ lưu trữ blob sử dụng SDK Python của bộ lưu trữ blob và ghi dữ liệu dưới dạng các blob bên trong mã chức năng.

– Sử dụng liên kết hàm đầu ra để liên kết giá trị trả về của hàm với lưu trữ blob và tự động lưu blob.

Bài viết này sử dụng Python SDK để xem cách tương tác với lưu trữ blob.

Dữ liệu sẽ được lưu dưới dạng JSON blob với định dạng sau:

{
    "device_id": <device_id>,
    "timestamp" : <time>,
    "gps" :
    {
        "lat" : <latitude>,
        "lon" : <longitude>
    }
}

* Cách kết nối serverless code với bộ nhớ

1. Tạo và đặt tên tài khoản Azure Storage như gps<your name>

Có thể sử dụng tài khoản lưu trữ từ project trước (nếu có) và sử dụng cùng một tài khoản lưu trữ để triển khai ứng dụng Azure Functions ở phần sau của bài viết này.

2. Chạy lệnh sau để lấy chuỗi kết nối cho tài khoản lưu trữ:

az storage account show-connection-string --output table \
                                          --name <storage_name>

Thay thế <storage_name> bằng tên tài khoản lưu trữ đã tạo.

3. Thêm mục nhập mới vào file local.settings.json cho chuỗi kết nối tài khoản lưu trữ sử dụng giá trị từ bước trước và đặt tên là STORAGE_CONNECTION_STRING.

4. Thêm phần sau vào file requirements.txt để cài đặt gói Pip lưu trữ Azure:

azure-storage-blob

Cài đặt các gói từ File này trong môi trường ảo.

Nếu gặp lỗi, hãy nâng cấp phiên bản Pip trong môi trường ảo lên phiên bản mới nhất bằng lệnh sau, sau đó thử lại:

pip install --upgrade pip

5. Trong file __init__.py của iot-hub-trigger, thêm các câu lệnh sau:

import json
import os
import uuid
from azure.storage.blob import BlobServiceClient, PublicAccess

 Mô-đun hệ thống json sử dụng để đọc và ghi JSON, mô-đun hệ thống os để đọc chuỗi kết nối, mô-đun hệ thống uuid để tạo ID duy nhất cho việc đọc GPS.

Gói azure.storage.blob chứa Python SDK để hoạt động với bộ lưu trữ blob.

6. Thêm các hàm sau trước phương thức main:

def get_or_create_container(name):
    connection_str = os.environ['STORAGE_CONNECTION_STRING']
    blob_service_client = BlobServiceClient.from_connection_string(connection_str)

    for container in blob_service_client.list_containers():
        if container.name == name:
            return blob_service_client.get_container_client(container.name)
    
    return blob_service_client.create_container(name, public_access=PublicAccess.Container)

Python blob SDK không có phương thức trợ giúp để tạo vùng chứa nếu nó không tồn tại. Mã này sẽ tải chuỗi kết nối từ file local.settings.json (hoặc Application Settings sau khi được triển khai lên đám mây), sau đó tạo một lớp BlobServiceClient từ file này để tương tác với tài khoản lưu trữ blob ở tất cả các vùng chứa cho tài khoản lưu trữ blob, tìm kiếm một tài khoản có tên được cung cấp. Nếu tìm thấy một tài khoản, nó sẽ trả về một lớp ContainerClient có thể tương tác với vùng chứa để tạo các blob. Nếu không tìm thấy, nó sẽ trả lại vùng chứa được tạo và ứng dụng client cho vùng chứa mới.

Khi vùng chứa mới được tạo sẽ cấp quyền truy cập công khai để truy vấn các blob trong vùng chứa.

7. Không giống như với độ ẩm của đất, để lưu trữ mọi sự kiện do đó cần thêm code sau vào bên trong for event in events: lặp trong hàm main, bên dưới câu lệnh logging:

device_id = event.iothub_metadata['connection-device-id']
blob_name = f'{device_id}/{str(uuid.uuid1())}.json'

Mã này lấy ID thiết bị từ siêu dữ liệu sự kiện để tạo tên blob. Các khối có thể được lưu trữ trong các thư mục và ID thiết bị được sử dụng cho tên thư mục, vì vậy trong một thư mục của mỗi thiết bị sẽ có tất cả các sự kiện GPS. Tên blob là thư mục này, theo sau là tên tài liệu được phân tách bằng dấu gạch chéo, tương tự như đường dẫn Linux và macOS (như Windows, nhưng Windows sử dụng dấu gạch chéo ngược). Tên tài liệu là ID duy nhất được tạo bằng mô-đun uuid Python, với loại file là json.

Ví dụ: Với ID thiết bị gps-sensor, tên blob có thể là gps-sensor / a9487ac2-b9cf-11eb-b5cd-1e00621e3648.json.

8. Thêm code sau:

container_client = get_or_create_container('gps-data')
blob = container_client.get_blob_client(blob_name)

Mã này nhận được ứng dụng client vùng chứa bằng cách sử dụng lớp trợ giúp get_or_create_container, sau đó nhận blob client object bằng tên blob. Các blob client này có thể tham chiếu đến các blob hiện có, hoặc trong trường hợp này là các blob mới.

9. Thêm code:

event_body = json.loads(event.get_body().decode('utf-8'))
blob_body = {
    'device_id' : device_id,
    'timestamp' : event.iothub_metadata['enqueuedtime'],
    'gps': event_body['gps']
}

Đoạn code này xây dựng và ghi phần chính của blob vào bộ lưu trữ blob, là tài liệu JSON chứa ID thiết bị, thời gian phép đo từ xa gửi đến IoT Hub và tọa độ GPS từ máy đo từ xa.

Điều quan trọng là sử dụng thời gian xếp hàng của tin nhắn trái ngược với thời gian hiện tại để tính thời gian tin nhắn được gửi đi. Nó có thể nằm ở Hub một lúc trước khi được chọn nếu Functions App không chạy.

10. Thêm phần sau:

logging.info(f'Writing blob to {blob_name} - {blob_body}')
blob.upload_blob(json.dumps(blob_body).encode('utf-8'))

Đoạn mã này ghi lại các chi tiết của một blog, sau đó tải lên phần nội dung của blog đó dưới dạng nội dung của blog mới.

11. Chạy Functions App, tất cả các sự kiện GPS trong đầu ra sẽ viết các blob:

[2021-05-21T01:31:14.325Z] Python EventHub trigger processed an event: {"gps": {"lat": 47.73092, "lon": -122.26206}}
...
[2021-05-21T01:31:14.351Z] Writing blob to gps-sensor/4b6089fe-ba8d-11eb-bc7b-1e00621e3648.json - {'device_id': 'gps-sensor', 'timestamp': '2021-05-21T00:57:53.878Z', 'gps': {'lat': 47.73092, 'lon': -122.26206}}

Đảm bảo rằng không chạy trình theo dõi sự kiện của IoT Hub cùng một lúc.

Code này nằm trong thư mục code/functions.

* Cách xác minh các blob đã tải lên

1. Để xem các blob đã tạo, có thể sử dụng Azure Storage Explorer là một công cụ miễn phí cho phép xem và quản lý các tài khoản lưu trữ hoặc từ CLI.

– Để sử dụng CLI, trước tiên cần một khóa tài khoản bằng cách chạy lệnh sau:

az storage account keys list --output table \
                             --account-name <storage_name>

Thay thế <storage_name> bằng tên của tài khoản lưu trữ.

Sao chép giá trị của key1.

– Chạy lệnh sau để liệt kê các blob trong vùng chứa:

az storage blob list --container-name gps-data \
                     --output table \
                     --account-name <storage_name> \
                     --account-key <key1>

Thay thế <storage_name> bằng tên của tài khoản lưu trữ và <key1> bằng giá trị của key1 đã sao chép ở bước trước.

Khi đó sẽ liệt kê tất cả các blob trong vùng chứa:

Name                                                  Blob Type    Blob Tier    Length    Content Type              Last Modified              Snapshot
----------------------------------------------------  -----------  -----------  --------  ------------------------  -------------------------  ----------
gps-sensor/1810d55e-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:27+00:00
gps-sensor/18293e46-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
gps-sensor/1844549c-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
gps-sensor/1894d714-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00

Tải xuống một trong các blob bằng lệnh sau:

az storage blob download --container-name gps-data \
                         --account-name <storage_name> \
                         --account-key <key1> \
                         --name <blob_name> \
                         --file <file_name>

Thay thế <storage_name> bằng tên của tài khoản lưu trữ và <key1> bằng giá trị của key1 đã sao chép ở bước trước.

Thay thế <blob_name> bằng tên đầy đủ từ cột Name của đầu ra của bước cuối cùng, gồm cả tên thư mục. Thay thế <file_name> bằng tên của file cục bộ để lưu blob vào.

Sau khi tải xuống, mở tệp JSON trong VS Code sẽ thấy khối chứa chi tiết vị trí GPS:

{"device_id": "gps-sensor", "timestamp": "2021-05-21T00:57:53.878Z", "gps": {"lat": 47.73092, "lon": -122.26206}}

* Cách triển khai Function App lên đám mây

Tạo ứng dụng Azure Functions mới, sử dụng tài khoản lưu trữ đã tạo trước. Đặt tên như gps-sensor- và thêm một số nhận dạng duy nhất.

Tải các giá trị IOT_HUB_CONNECTION_STRING và STORAGE_CONNECTION_STRING lên App setting.

Triển khai Function App cục bộ lên đám mây.

Biên dịch: Bắc Đặng

Để cập nhật tin tức công nghệ mới nhất và các sản phẩm của công ty AIoT JSC, vui lòng truy cập link: http://aiots.vn hoặc linhkienaiot.com

0 0 Phiếu bầu
Article Rating
Subscribe
Notify of
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả các bình luận