Mengkonfigurasi tindakan AWS IoT SiteWise aturan - AWS IoT SiteWise

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengkonfigurasi tindakan AWS IoT SiteWise aturan

Tindakan AWS IoT SiteWise aturan mengirimkan data dari pesan MQTT yang memulai aturan ke properti aset di. AWS IoT SiteWise Anda dapat mengunggah beberapa entri data ke properti aset yang berbeda secara bersamaan, untuk mengirim pembaruan untuk semua sensor perangkat dalam satu pesan. Anda juga dapat mengunggah beberapa titik data sekaligus untuk setiap entri data.

catatan

Saat Anda mengirim data AWS IoT SiteWise dengan tindakan aturan, data Anda harus memenuhi semua persyaratan BatchPutAssetPropertyValue operasi. Misalnya, data Anda tidak dapat memiliki stempel waktu lebih awal dari 7 hari dari waktu epoch Unix saat ini. Untuk informasi selengkapnya, lihat Menyerap data dengan AWS IoT SiteWise API.

Untuk setiap entri data dalam tindakan aturan, Anda mengidentifikasi properti aset dan menentukan stempel waktu, kualitas, dan nilai setiap titik data untuk properti aset tersebut. Tindakan aturan mengharapkan string untuk semua parameter.

Untuk mengidentifikasi properti aset dalam entri, tentukan salah satu dari berikut ini:

  • ID Aset (assetId) dan ID Properti (propertyId) dari properti aset yang Anda kirimi data. Anda dapat menemukan ID Aset dan ID Properti menggunakan file Konsol AWS IoT SiteWise. Jika Anda mengetahui ID Aset, Anda dapat menggunakan AWS CLI to call DescribeAssetuntuk menemukan ID Properti.

  • Alias properti (propertyAlias), yang merupakan alias aliran data (misalnya,/company/windfarm/3/turbine/7/temperature). Untuk menggunakan opsi ini, Anda harus terlebih dahulu menetapkan alias properti aset Anda. Untuk mempelajari cara menyetel alias properti, lihatMemetakan aliran data industri ke properti aset.

Untuk stempel waktu di setiap entri, gunakan stempel waktu yang dilaporkan oleh peralatan Anda atau stempel waktu yang disediakan oleh. AWS IoT Core Stempel waktu memiliki dua parameter:

  • Waktu dalam detik (timeInSeconds) — Waktu epoch Unix, dalam detik, di mana sensor atau peralatan melaporkan data.

  • Offset dalam nanos (offsetInNanos) — (Opsional) Nanodetik offset dari waktu dalam detik.

penting

Jika stempel waktu Anda adalah string, memiliki bagian desimal, atau tidak dalam hitungan detik, AWS IoT SiteWise tolak permintaan tersebut. Anda harus mengubah stempel waktu menjadi detik dan offset nanodetik. Gunakan fitur mesin AWS IoT aturan untuk mengonversi stempel waktu. Untuk informasi selengkapnya, lihat hal berikut:

Anda dapat menggunakan templat substitusi untuk beberapa parameter dalam tindakan untuk melakukan perhitungan, memanggil fungsi, dan menarik nilai dari muatan pesan. Untuk informasi selengkapnya, lihat Templat substitusi di Panduan AWS IoT Pengembang.

catatan

Karena ekspresi dalam templat substitusi dievaluasi secara terpisah dari SELECT pernyataan, Anda tidak dapat menggunakan templat substitusi untuk mereferensikan alias yang dibuat menggunakan klausa. AS Anda hanya dapat mereferensikan informasi yang ada di muatan asli, selain fungsi dan operator yang didukung.

Mendapatkan stempel waktu untuk perangkat yang tidak melaporkan waktu yang akurat

Jika sensor atau peralatan Anda tidak melaporkan data waktu yang akurat, dapatkan waktu epoch Unix saat ini dari mesin AWS IoT aturan dengan stempel waktu (). Fungsi ini menghasilkan waktu dalam milidetik, jadi Anda harus mengonversi nilainya menjadi waktu dalam hitungan detik dan mengimbangi dalam nanodetik. Untuk melakukannya, gunakan konversi berikut:

  • Untuk Time in seconds (timeInSeconds), gunakan ${floor(timestamp() / 1E3)} untuk mengubah waktu dari milidetik ke detik.

  • Untuk Offset dalam nanos (offsetInNanos), gunakan ${(timestamp() % 1E3) * 1E6} untuk menghitung offset nanodetik dari stempel waktu.

Mengonversi stempel waktu yang dalam format string

Jika sensor atau peralatan Anda melaporkan data waktu dalam format string (misalnya,2020-03-03T14:57:14.699Z), gunakan time_to_epoch (String, String). Fungsi ini memasukkan stempel waktu dan pola format sebagai parameter dan waktu keluaran dalam milidetik. Kemudian, Anda harus mengubah waktu ke waktu dalam hitungan detik dan mengimbangi dalam nanodetik. Untuk melakukannya, gunakan konversi berikut:

  • Untuk Time in seconds (timeInSeconds), gunakan ${floor(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") / 1E3)} untuk mengonversi string timestamp menjadi milidetik, lalu ke detik.

  • Untuk Offset dalam nanos (offsetInNanos), gunakan ${(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") % 1E3) * 1E6} untuk menghitung offset nanodetik dari string stempel waktu.

catatan

time_to_epochFungsi ini mendukung string stempel waktu presisi hingga milidetik. Untuk mengonversi string dengan presisi mikrodetik atau nanodetik, konfigurasikan AWS Lambda fungsi yang dipanggil aturan Anda untuk mengonversi stempel waktu menjadi nilai numerik. Untuk informasi selengkapnya, lihat Mengonversi string stempel waktu presisi nanodetik.

Mengonversi string stempel waktu presisi nanodetik

Jika perangkat Anda mengirimkan informasi stempel waktu dalam format string dengan presisi nanodetik (misalnya,2020-03-03T14:57:14.699728491Z), gunakan prosedur berikut untuk mengonfigurasi tindakan aturan Anda. Anda dapat membuat AWS Lambda fungsi yang mengubah stempel waktu dari string menjadi Time in seconds (timeInSeconds) dan Offset in nanos (). offsetInNanos Kemudian, gunakan aws_lambda (FunctionARN, InputJson) dalam parameter tindakan aturan Anda untuk menjalankan fungsi Lambda itu dan menggunakan output dalam aturan Anda.

catatan

Bagian ini berisi petunjuk lanjutan yang mengasumsikan bahwa Anda terbiasa dengan cara membuat sumber daya berikut:

Untuk membuat tindakan AWS IoT SiteWise aturan yang mem-parsing string stempel waktu
  1. Buat fungsi Lambda dengan properti berikut:

    • Nama fungsi — Gunakan nama fungsi deskriptif (misalnya,ConvertNanosecondTimestampFromString).

    • Runtime — Gunakan runtime Python 3, seperti Python 3.11 (). python3.11

    • Izin — Buat peran dengan izin Lambda dasar (). AWS LambdaBasicExecutionRole

    • Layers — Tambahkan layer AWS SDKPandas-Python311 untuk fungsi Lambda yang akan digunakan. numpy

    • Kode fungsi — Gunakan kode fungsi berikut, yang mengkonsumsi argumen string bernama timestamp dan output timeInSeconds dan offsetInNanos nilai untuk stempel waktu itu.

      import json import math import numpy # Converts a timestamp string into timeInSeconds and offsetInNanos in Unix epoch time. # The input timestamp string can have up to nanosecond precision. def lambda_handler(event, context): timestamp_str = event['timestamp'] # Parse the timestamp string as nanoseconds since Unix epoch. nanoseconds = numpy.datetime64(timestamp_str, 'ns').item() time_in_seconds = math.floor(nanoseconds / 1E9) # Slice to avoid precision issues. offset_in_nanos = int(str(nanoseconds)[-9:]) return { 'timeInSeconds': time_in_seconds, 'offsetInNanos': offset_in_nanos }

      Fungsi Lambda ini memasukkan string stempel waktu dalam format ISO 8601 menggunakan datetime64 from. NumPy

      catatan

      Jika string stempel waktu Anda tidak dalam format ISO 8601, Anda dapat menerapkan solusi yang mendefinisikan format stempel waktu. pandas Untuk informasi selengkapnya, lihat pandas.to_datetime.

  2. Saat Anda mengonfigurasi AWS IoT SiteWise tindakan untuk aturan Anda, gunakan templat substitusi berikut untuk Time in seconds (timeInSeconds) dan Offset in nanos (). offsetInNanos Template substitusi ini mengasumsikan bahwa payload pesan Anda berisi string stempel waktu. timestamp aws_lambdaFungsi ini menggunakan struktur JSON untuk parameter kedua, sehingga Anda dapat memodifikasi template substitusi di bawah ini jika diperlukan.

    • Untuk Time in seconds (timeInSeconds), gunakan template substitusi berikut.

      ${aws_lambda('arn:aws:lambda:region:account-id:function:ConvertNanosecondTimestampFromString', {'timestamp': timestamp}).timeInSeconds}
    • Untuk Offset di nanos (offsetInNanos), gunakan template substitusi berikut.

      ${aws_lambda('arn:aws:lambda:region:account-id:function:ConvertNanosecondTimestampFromString', {'timestamp': timestamp}).offsetInNanos}

    Untuk setiap parameter, ganti region dan account-id dengan Region dan ID AWS akun Anda. Jika Anda menggunakan nama yang berbeda untuk fungsi Lambda Anda, ubah juga.

  3. Berikan AWS IoT izin untuk menjalankan fungsi Anda dengan izin. lambda:InvokeFunction Untuk informasi selengkapnya, lihat aws_lambda (FunctionARN, InputJson).

  4. Uji aturan Anda (misalnya, gunakan klien pengujian AWS IoT MQTT) dan verifikasi bahwa AWS IoT SiteWise menerima data yang Anda kirim.

    Jika aturan Anda tidak berfungsi seperti yang diharapkan, lihatMemecahkan masalah tindakan aturan AWS IoT SiteWise.

catatan

Solusi ini memanggil fungsi Lambda dua kali untuk setiap string stempel waktu. Anda dapat membuat aturan lain untuk mengurangi jumlah pemanggilan fungsi Lambda jika aturan Anda menangani beberapa titik data yang memiliki stempel waktu yang sama di setiap muatan.

Untuk melakukannya, buat aturan dengan tindakan penerbitan ulang yang memanggil Lambda dan menerbitkan payload asli dengan string stempel waktu yang dikonversi ke dan. timeInSeconds offsetInNanos Kemudian, buat aturan dengan tindakan AWS IoT SiteWise aturan untuk mengkonsumsi payload yang dikonversi. Dengan pendekatan ini, Anda mengurangi berapa kali aturan memanggil Lambda tetapi meningkatkan jumlah tindakan aturan AWS IoT yang dijalankan. Pertimbangkan harga setiap layanan jika Anda menerapkan solusi ini untuk kasus penggunaan Anda.

Contoh konfigurasi aturan

Bagian ini berisi contoh konfigurasi aturan untuk membuat aturan dengan AWS IoT SiteWise tindakan.

contoh Contoh tindakan aturan yang menggunakan alias properti sebagai topik pesan

Contoh berikut membuat aturan dengan AWS IoT SiteWise tindakan yang menggunakan topik (melalui topik ()) sebagai alias properti untuk mengidentifikasi properti aset. Gunakan contoh ini untuk menentukan satu aturan untuk menelan data tipe ganda ke semua turbin angin di semua ladang angin. Contoh ini mengharuskan Anda mendefinisikan alias properti pada semua properti aset turbin. Anda perlu mendefinisikan aturan kedua yang mirip dengan menelan data tipe bilangan bulat.

aws iot create-topic-rule \ --rule-name SiteWiseWindFarmRule \ --topic-rule-payload file://sitewise-rule-payload.json

Contoh payload di sitewise-rule-payload.json berisi konten berikut.

{ "sql": "SELECT * FROM '/company/windfarm/+/turbine/+/+' WHERE type = 'double'", "description": "Sends data to the wind turbine asset property with the same alias as the topic", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "iotSiteWise": { "putAssetPropertyValueEntries": [ { "propertyAlias": "${topic()}", "propertyValues": [ { "timestamp": { "timeInSeconds": "${timeInSeconds}" }, "value": { "doubleValue": "${value}" } } ] } ], "roleArn": "arn:aws:iam::account-id:role/MySiteWiseActionRole" } } ] }

Dengan tindakan aturan ini, kirim pesan berikut ke alias properti turbin angin (misalnya,/company/windfarm/3/turbine/7/temperature) sebagai topik untuk menelan data.

{ "type": "double", "value": "38.3", "timeInSeconds": "1581368533" }
contoh Contoh aturan tindakan yang menggunakan timestamp () untuk menentukan waktu

Contoh berikut membuat aturan dengan AWS IoT SiteWise tindakan yang mengidentifikasi properti aset berdasarkan ID dan menggunakan timestamp () untuk menentukan waktu saat ini.

aws iot create-topic-rule \ --rule-name SiteWiseAssetPropertyRule \ --topic-rule-payload file://sitewise-rule-payload.json

Contoh payload di sitewise-rule-payload.json berisi konten berikut.

{ "sql": "SELECT * FROM 'my/asset/property/topic'", "description": "Sends device data to an asset property", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "iotSiteWise": { "putAssetPropertyValueEntries": [ { "assetId": "a1b2c3d4-5678-90ab-cdef-22222EXAMPLE", "propertyId": "a1b2c3d4-5678-90ab-cdef-33333EXAMPLE", "propertyValues": [ { "timestamp": { "timeInSeconds": "${floor(timestamp() / 1E3)}", "offsetInNanos": "${(timestamp() % 1E3) * 1E6}" }, "value": { "doubleValue": "${value}" } } ] } ], "roleArn": "arn:aws:iam::account-id:role/MySiteWiseActionRole" } } ] }

Dengan tindakan aturan ini, kirim pesan berikut my/asset/property/topic ke data untuk menelan.

{ "type": "double", "value": "38.3" }

Memecahkan masalah tindakan aturan

Untuk memecahkan masalah tindakan AWS IoT SiteWise aturan Anda AWS IoT Core, konfigurasikan CloudWatch Log atau konfigurasikan tindakan kesalahan penerbitan ulang untuk aturan Anda. Untuk informasi selengkapnya, lihat Memecahkan masalah tindakan aturan AWS IoT SiteWise.