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
Contoh jenis komponen pabrik cookie
Dalam tipe komponen, kita mendefinisikan properti umum yang dibagi di seluruh komponen. Untuk contoh pabrik cookie, komponen fisik dari jenis yang sama berbagi pengukuran yang sama, sehingga kita dapat menentukan skema pengukuran dalam tipe 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 komponen entitas. Dalam konteks ini, setiap komponen membutuhkan 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 jenis 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 dalam 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 } } }
TelemetryType
Ini 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 sampelTelemetryType
didefinisikan dan Anda mengekstrak properti umum seperti TelemetryId
dan TelemetryType
ke tipe komponen induk untuk tipe anak lain 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 komponen-properti, dan Anda harus menentukan nilai instantiated 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 yang diberikan, dalam urutan waktu menaik. Pernyataan query 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} ...