기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS IoT SiteWise 규칙 작업을 구성합니다.
AWS IoT SiteWise 규칙 액션은 규칙을 시작한 MQTT 메시지의 데이터를 의 자산 속성으로 보냅니다. AWS IoT SiteWise여러 데이터 항목을 서로 다른 자산 속성에 동시에 업로드하여 기기의 모든 센서에 대한 업데이트를 메시지 하나로 전송할 수 있습니다. 각 데이터 입력에 대해 한 번에 여러 데이터 포인트를 업로드할 수도 있습니다.
참고
규칙 AWS IoT SiteWise 동작과 함께 데이터를 전송하는 경우 데이터는 BatchPutAssetPropertyValue
작업의 모든 요구 사항을 충족해야 합니다. 예를 들어, 데이터에 현재 Unix Epoch 시간에서 7일 이전인 타임스탬프가 있을 수 없습니다. 자세한 내용은 를 사용한 데이터 수집을 AWS IoT SiteWise
API 참조하십시오.
규칙 작업의 각 데이터 항목에 대해 자산 속성을 식별하고 해당 자산 속성에 대한 각 데이터 포인트의 타임스탬프, 품질 및 값을 지정합니다. 규칙 작업에는 모든 파라미터에 대한 문자열이 필요합니다.
항목에서 자산 속성을 식별하려면 다음 중 하나를 지정합니다.
-
데이터를 보낼 자산 속성의 자산 ID(
assetId
) 및 속성 ID(propertyId
)입니다. 를 사용하여 자산 ID 및 속성 ID를 찾을 수 있습니다. AWS IoT SiteWise Console자산 ID를 알고 있는 경우 AWS CLI DescribeAssetto 호출을 사용하여 속성 ID를 찾을 수 있습니다. -
데이터 스트림 별칭(예:
/company/windfarm/3/turbine/7/temperature
)인 속성 별칭(propertyAlias
). 이 옵션을 사용하려면 먼저 자산 속성의 별칭을 설정해야 합니다. 속성 별칭을 설정하는 방법에 대한 자세한 내용은 산업 데이터 스트림을 자산 속성에 매핑 단원을 참조하세요.
각 항목의 타임스탬프는 장비에서 보고한 타임스탬프 또는 에서 제공한 타임스탬프를 사용하십시오. AWS IoT Core타임스탬프에는 두 개의 매개변수가 있습니다.
-
초 단위 시간(
timeInSeconds
) – 센서 또는 장비가 데이터를 보고한 Unix Epoch 시간(초)입니다. -
나노초 단위 오프셋(
offsetInNanos
) – (선택 사항) 초 단위 시간의 나노초 오프셋입니다.
중요
타임스탬프가 문자열이거나, 소수 부분이 있거나, AWS IoT SiteWise 에서 초 단위가 아닌 경우 요청을 거부합니다. 타임스탬프를 초 및 나노초 오프셋으로 변환해야 합니다. AWS IoT 규칙 엔진의 기능을 사용하여 타임스탬프를 변환할 수 있습니다. 자세한 내용은 다음 자료를 참조하세요.
작업의 여러 파라미터에 대한 대체 템플릿을 사용하여 계산하고 함수를 호출하며 메시지 페이로드에서 값을 가져올 수 있습니다. 자세한 내용은 AWS IoT 개발자 가이드의 대체 템플릿을 참조하세요.
참고
대체 템플릿의 표현식은 SELECT
문과 별도로 평가되므로 대체 템플릿을 사용하면 AS
절을 사용하여 생성한 별칭은 참조할 수 없습니다. 지원되는 함수와 연산자 외에 원래 페이로드에 있는 정보만 참조할 수 있습니다.
정확한 시간을 보고하지 않는 디바이스의 타임스탬프 가져오기
센서 또는 장비가 정확한 시간 데이터를 보고하지 않는 경우 timestamp () 를 사용하여 AWS IoT 규칙 엔진에서 현재 유닉스 에포크 시간을 가져오세요. 이 함수는 시간을 밀리초 단위로 출력하므로 값을 초 단위 시간 및 나노초 단위 오프셋으로 변환해야 합니다. 이렇게 하려면 다음 변환을 사용합니다.
-
초 단위 시간(
timeInSeconds
)의 경우${floor(timestamp() / 1E3)}
를 사용하여 시간을 밀리초에서 초로 변환합니다. -
나노초 단위 오프셋(
offsetInNanos
)의 경우${(timestamp() % 1E3) * 1E6}
을 사용하여 타임스탬프의 나노초 오프셋을 계산합니다.
문자열 형식의 타임스탬프 변환
센서 또는 장비가 시간 데이터를 문자열 형식 (예:) 으로 보고하는 경우 time_to_epoch (문자열, 문자열2020-03-03T14:57:14.699Z
) 를 사용하십시오. 이 함수는 타임스탬프와 형식 패턴을 매개변수로 입력하고 시간을 밀리초 단위로 출력합니다. 그런 다음 시간을 초 단위의 시간으로, 나노초 단위의 오프셋으로 변환해야 합니다. 이렇게 하려면 다음 변환을 사용합니다.
-
초 단위 시간(
timeInSeconds
)의 경우${floor(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") / 1E3)}
타임스탬프 문자열을 밀리초로 변환한 다음 초로 변환하는 데 사용합니다. -
나노초 단위 오프셋(
offsetInNanos
)의 경우${(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") % 1E3) * 1E6}
을 사용하여 타임스탬프 문자열의 나노초 오프셋을 계산합니다.
참고
이 time_to_epoch
함수는 최대 밀리초 정밀도의 타임스탬프 문자열을 지원합니다. 마이크로초 또는 나노초 정밀도의 문자열을 변환하려면 규칙이 타임스탬프를 숫자 값으로 변환하기 위해 호출하는 AWS Lambda 함수를 구성하십시오. 자세한 내용은 나노초 정밀도의 타임스탬프 문자열 변환 단원을 참조하십시오.
나노초 정밀도의 타임스탬프 문자열 변환
디바이스가 나노초 정밀도의 문자열 형식(예: 2020-03-03T14:57:14.699728491Z
)으로 타임스탬프 정보를 전송하는 경우 다음 절차에 따라 규칙 작업을 구성합니다. 문자열의 타임스탬프를 초 단위의 시간 () 으로, 오프셋을 nanos (timeInSeconds
) 단위로 변환하는 AWS Lambda 함수를 만들 수 있습니다. offsetInNanos
그런 다음 규칙 작업 파라미터에서 aws_lambda (functionArn,inputJson) 를 사용하여 Lambda 함수를 호출하고 규칙의 출력을 사용합니다.
참고
이 단원에서는 다음 리소스를 만드는 방법을 잘 안다고 가정하고 고급 지침을 제공합니다.
-
Lambda 함수. 자세한 내용은 개발자 안내서의 첫 Lambda 함수 생성을 참조하십시오.AWS Lambda
-
AWS IoT 규칙 작업이 포함된 AWS IoT SiteWise 규칙. 자세한 내용은 규칙을 사용한 AWS IoT Core 데이터 수집 단원을 참조하십시오.
타임스탬프 문자열을 파싱하는 AWS IoT SiteWise 규칙 액션을 만들려면
-
다음 속성을 사용하여 Lambda 함수를 만듭니다.
-
함수 이름 - 설명이 포함된 함수 이름(예:
ConvertNanosecondTimestampFromString
)을 사용합니다. -
런타임 — Python 3.11 (
python3.11
) 과 같은 Python 3 런타임을 사용합니다. -
권한 — 기본 Lambda 권한 () 을 사용하여 역할을 생성합니다. AWS LambdaBasicExecutionRole
-
레이어 — Lambda 함수가 사용할 AWS SDKPandas-Python311 계층을 추가합니다.
numpy
-
함수 코드 -
timestamp
라는 문자열 인수를 사용하고 해당 타임스탬프에 대해timeInSeconds
및offsetInNanos
값을 출력하는 다음 함수 코드를 사용합니다.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 }
이 Lambda 함수는 datetime64를 사용하여 타임스탬프 문자열을 8601 ISO형식으로
입력합니다. NumPy 참고
타임스탬프 문자열이 ISO 8601 형식이 아닌 경우 타임스탬프 형식을 정의하는 솔루션을 구현할 수 있습니다. pandas 자세한 내용은 pandas.to_datetime
을 참조하세요.
-
-
규칙에 맞게 AWS IoT SiteWise 작업을 구성할 때는 다음과 같은 시간 (초
timeInSeconds
) 및 오프셋 (nanos) 단위의 오프셋 () 대체 템플릿을 사용하십시오.offsetInNanos
이러한 대체 템플릿은 메시지 페이로드에 타임스탬프 문자열(timestamp
)이 포함되어 있다고 가정합니다. 이aws_lambda
함수는 두 번째 매개 변수에 대한 JSON 구조를 사용하므로 필요한 경우 아래 대체 템플릿을 수정할 수 있습니다.-
초 단위 시간(
timeInSeconds
)에 다음 대체 템플릿을 사용합니다.${aws_lambda('arn:aws:lambda:
region
:account-id
:function:ConvertNanosecondTimestampFromString
', {'timestamp': timestamp}).timeInSeconds} -
나노초 단위 오프셋(
offsetInNanos
)에 다음 대체 템플릿을 사용합니다.${aws_lambda('arn:aws:lambda:
region
:account-id
:function:ConvertNanosecondTimestampFromString
', {'timestamp': timestamp}).offsetInNanos}
각 매개 변수에 대해 다음을 대체하십시오.
region
그리고account-id
지역 및 AWS 계정 ID를 입력하세요. Lambda 함수에 다른 이름을 사용한 경우 해당 이름도 변경합니다. -
-
AWS IoT 해당 권한으로 함수를 호출할 수 있는
lambda:InvokeFunction
권한을 부여하십시오. 자세한 내용은 aws_lambda (,) 를 참조하십시오. functionArn inputJson -
규칙을 테스트 (예: AWS IoT MQTT 테스트 클라이언트 사용) 하고 전송하는 AWS IoT SiteWise 데이터를 해당 규칙이 수신하는지 확인합니다.
규칙이 예상대로 작동하지 않을 경우 AWS IoT SiteWise 규칙 조치 문제 해결 단원을 참조하세요.
참고
이 솔루션은 각 타임스탬프 문자열에 대해 Lambda 함수를 두 번 호출합니다. 현재 규칙이 각 페이로드에서 동일한 타임스탬프를 갖는 여러 데이터 포인트를 처리하는 경우 Lambda 함수 호출 수를 줄이기 위해 다른 규칙을 만들 수 있습니다.
이렇게 하려면 재게시 작업을 사용하여 Lambda를 호출하고 timeInSeconds
및 offsetInNanos
로 변환된 타임스탬프 문자열을 갖는 원래 페이로드를 게시하는 규칙을 만듭니다. 그런 다음 변환된 페이로드를 소비하는 AWS IoT SiteWise 규칙 작업이 포함된 규칙을 생성하십시오. 이 접근 방식을 사용하면 규칙이 Lambda를 호출하는 횟수는 줄지만 규칙 작업 실행 횟수는 AWS IoT 늘릴 수 있습니다. 이 솔루션을 사용 사례에 적용하는 경우 각 서비스의 요금을 고려하십시오.
규칙 구성의 예
이 섹션에는 작업을 사용하여 규칙을 생성하기 위한 예제 규칙 구성이 포함되어 있습니다. AWS IoT SiteWise
예 속성 별칭을 메시지 주제로 사용하는 규칙 작업의 예제
다음 예제에서는 주제 (topic () 를 통해) 를 속성 별칭으로 사용하여 자산 속성을 식별하는 AWS IoT SiteWise 액션이 포함된 규칙을 만듭니다. 이 예제를 사용하여 모든 풍력 발전 단지의 모든 풍력 터빈에 이중 유형 데이터를 수집하기 위한 하나의 규칙을 정의하십시오. 이 예제에서는 모든 터빈 자산의 속성에 속성 별칭을 정의해야 합니다. 정수 유형 데이터를 수집하기 위한 유사한 두 번째 규칙을 정의해야 합니다.
aws iot create-topic-rule \ --rule-name SiteWiseWindFarmRule \ --topic-rule-payload file://sitewise-rule-payload.json
sitewise-rule-payload.json
의 예제 페이로드에는 다음 내용이 포함되어 있습니다.
{ "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
" } } ] }
이 규칙 작업을 수행하려면 풍력 터빈 속성 별칭 (예:/company/windfarm/3/turbine/7/temperature
) 에 다음 메시지를 주제로 전송하여 데이터를 수집하십시오.
{ "type": "double", "value": "38.3", "timeInSeconds": "1581368533" }
예 timestamp()를 사용하여 시간을 결정하는 규칙 동작 예제
다음 예제에서는 timestamp () 로 자산 속성을 식별하고 타임스탬프 () 를 사용하여 현재 IDs 시간을 결정하는 AWS IoT SiteWise 액션이 포함된 규칙을 만듭니다.
aws iot create-topic-rule \ --rule-name SiteWiseAssetPropertyRule \ --topic-rule-payload file://sitewise-rule-payload.json
sitewise-rule-payload.json
의 예제 페이로드에는 다음 내용이 포함되어 있습니다.
{ "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
" } } ] }
이 규칙 액션을 사용하여 데이터를 수집하려면 에 다음 메시지를 보내십시오. my/asset/property/topic
{ "type": "double", "value": "38.3" }
규칙 작업 문제 해결
에서 AWS IoT SiteWise 규칙 조치의 AWS IoT Core문제를 해결하려면 CloudWatch 로그를 구성하거나 규칙에 대한 오류 재게시 작업을 구성하십시오. 자세한 내용은 AWS IoT SiteWise 규칙 조치 문제 해결 단원을 참조하십시오.