View a markdown version of this page

AWS IoT TwinMaker contoh pabrik cookie konektor deret waktu - AWS IoT TwinMaker

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

AWS IoT TwinMaker contoh pabrik cookie konektor deret waktu

Kode lengkap fungsi Lambda pabrik cookie tersedia di GitHub. Meskipun Anda masih dapat memperbarui implementasi setelah Anda menautkan konektor ke jenis komponen, kami sangat menyarankan Anda memverifikasi konektor Lambda sebelum mengintegrasikan dengan AWS IoT TwinMaker. Anda dapat menguji fungsi Lambda Anda di konsol Lambda atau secara lokal di. AWS CDK Untuk informasi selengkapnya tentang pengujian fungsi Lambda Anda, lihat Meng uji fungsi Lambda, dan Aplikasi pengujian AWS CDK lokal.

Contoh jenis komponen pabrik cookie

Dalam tipe komponen, kita mendefinisikan properti umum yang dibagikan di seluruh komponen. Untuk contoh pabrik cookie, komponen fisik dari jenis yang sama berbagi pengukuran yang sama, sehingga kita dapat menentukan skema pengukuran dalam jenis komponen. Sebagai contoh, jenis mixer didefinisikan dalam contoh berikut.

{ "componentTypeId": "com.example.cookiefactory.mixer" "propertyDefinitions": { "RPM": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "Temperature": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true } } }

Misalnya, komponen fisik mungkin memiliki pengukuran dalam database Timestream, catatan pemeliharaan dalam database SQL, atau data alarm dalam sistem alarm. Membuat beberapa komponen dan mengaitkannya dengan entitas menghubungkan sumber data yang berbeda ke entitas dan mengisi grafik entitas komponen. Dalam konteks ini, setiap komponen memerlukan telemetryId properti untuk mengidentifikasi kunci unik komponen dalam sumber data yang sesuai. Menentukan telemetryId properti memiliki dua manfaat: properti dapat digunakan dalam konektor data sebagai kondisi filter untuk hanya menanyakan nilai komponen yang diberikan dan, jika Anda menyertakan nilai telemetryId properti dalam respons API bidang data, maka sisi klien mengambil ID dan dapat melakukan pencarian terbalik jika perlu.

Jika Anda menambahkan TelemetryId ke tipe komponen sebagai id eksternal, itu mengidentifikasi komponen dalam TimeStream tabel.

{ "componentTypeId": "com.example.cookiefactory.mixer" "propertyDefinitions": { "telemetryId": { "dataType": { "type": "STRING" }, "isTimeSeries": false, "isRequiredInEntity": true, "isExternalId": true, "isStoredExternally": false }, "RPM": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "Temperature": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true } } }

Demikian pula kita memiliki tipe komponen untukWaterTank, seperti yang ditunjukkan pada contoh JSON berikut.

{ "componentTypeId": "com.example.cookiefactory.watertank", "propertyDefinitions": { "flowRate1": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "flowrate2": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "tankVolume1": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "tankVolume2": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "telemetryId": { "dataType": { "type": "STRING" }, "isTimeSeries": false, "isRequiredInEntity": true, "isExternalId": true, "isStoredExternally": false } } }

Ini TelemetryType adalah properti opsional dalam tipe komponen jika ditujukan untuk menanyakan nilai properti dalam lingkup entitas. Sebagai contoh, lihat tipe komponen yang ditentukan dalam GitHub repositori AWS IoT TwinMaker sampel. Ada jenis alarm yang juga disematkan ke dalam tabel yang sama, jadi TelemetryType didefinisikan dan Anda mengekstrak properti umum seperti TelemetryId dan TelemetryType ke tipe komponen induk untuk tipe anak lainnya untuk dibagikan.

Contoh Lambda

Konektor Lambda perlu mengakses sumber data dan menghasilkan pernyataan kueri berdasarkan input dan meneruskannya ke sumber data. Contoh permintaan yang dikirim ke Lambda ditampilkan dalam contoh JSON berikut.

{ 'workspaceId': 'CookieFactory', 'selectedProperties': ['Temperature'], 'startDateTime': 1648796400, 'startTime': '2022-04-01T07:00:00.000Z', 'endDateTime': 1650610799, 'endTime': '2022-04-22T06:59:59.000Z', 'properties': { 'telemetryId': { 'definition': { 'dataType': { 'type': 'STRING' }, 'isTimeSeries': False, 'isRequiredInEntity': True, 'isExternalId': True, 'isStoredExternally': False, 'isImported': False, 'isFinal': False, 'isInherited': True, }, 'value': { 'stringValue': 'Mixer_22_680b5b8e-1afe-4a77-87ab-834fbe5ba01e' } } 'Temperature': { 'definition': { 'dataType': { 'type': 'DOUBLE' }, 'isTimeSeries': True, 'isRequiredInEntity': False, 'isExternalId': False, 'isStoredExternally': True, 'isImported': False, 'isFinal': False, 'isInherited': False } } 'RPM': { 'definition': { 'dataType': { 'type': 'DOUBLE' }, 'isTimeSeries': True, 'isRequiredInEntity': False, 'isExternalId': False, 'isStoredExternally': True, 'isImported': False, 'isFinal':False, 'isInherited': False } }, 'entityId': 'Mixer_22_d133c9d0-472c-48bb-8f14-54f3890bc0fe', 'componentName': 'MixerComponent', 'maxResults': 100, 'orderByTime': 'ASCENDING' }

Tujuan dari fungsi Lambda adalah untuk menanyakan data pengukuran historis untuk entitas tertentu. AWS IoT TwinMaker menyediakan peta properti-komponen, dan Anda harus menentukan nilai instansiasi untuk ID komponen. Misalnya, untuk menangani kueri tingkat tipe komponen (yang umum untuk kasus penggunaan alarm) dan mengembalikan status alarm semua komponen di ruang kerja, maka peta properti memiliki definisi properti tipe komponen.

Untuk kasus yang paling mudah, seperti pada permintaan sebelumnya, kami menginginkan serangkaian sampel suhu selama jendela waktu yang diberikan untuk komponen tertentu, dalam urutan waktu menaik. Pernyataan kueri dapat diringkas sebagai berikut:

... SELECT measure_name, time, measure_value::double FROM {database_name}.{table_name} WHERE time < from_iso8601_timestamp('{request.start_time}') AND time >= from_iso8601_timestamp('{request.end_time}') AND TelemetryId = '{telemetry_id}' AND measure_name = '{selected_property}' ORDER BY time {request.orderByTime} ...