Azure Iot Hub의 직접 메소드를 REST API에서 호출
개요
Azure Iot Hub에 등록된 모든 디바이스에 대해 직접 메서드를 실행합니다.
1대만이라면 Azure Portal에서 실행하는 것이 빠르지만, 대수가 많거나 실행 결과를 다른 곳에서 사용하고 싶은 경우 등은 Azure Portal 이외에서 호출하고 싶습니다.
이번에는 다이렉트 메소드를 실행해, 결과를 보존하는 곳까지를 시험해 보았습니다.
직접 메소드 REST API 호출
다이렉트 메소드를 호출하는 방법에 대해서는, 공식 문서로서 정중하게 기재되어 있습니다.
다이렉트 메소드를 호출하는 방법에 대해서는, 공식 문서로서 정중하게 기재되어 있습니다.
curl -X POST \
https://iothubname.azure-devices.net/twins/myfirstdevice/methods?api-version=2018-06-30 \
-H 'Authorization: SharedAccessSignature sr=iothubname.azure-devices.net&sig=x&se=x&skn=iothubowner' \
-H 'Content-Type: application/json' \
-d '{
"methodName": "reboot",
"responseTimeoutInSeconds": 200,
"payload": {
"input1": "someInput",
"input2": "anotherInput"
}
}'
SharedAccessSignature sr=iothubname.azure-devices.net&sig=x&se=x&skn=iothubowner
의 부분은 SAS token 생성을 할 때 자동으로 만들어진다.az iot hub generate-sas-token -n {iothub_name}
{iothub_name}
는 적절한 자원 이름으로 다시 씁니다.그리고 이것을 Cloud Shell에서 실행하면 ...
`az iot hub: 'generate-sas-token' is not in the 'az iot hub' command group. See 'az iot hub --help'
라고 화난다.
음.
Azure Cloud Shell에서 generate-sas-token을 사용할 수 있도록 설정
먼저 Cloud Shell은 Azure 포털에서 > _
아이콘으로 열립니다.
Bash에서도 PowerShell에서도 사용하기 쉬운 분을 선택하는 것이 좋다고 생각합니다.
로그 또는 뭔가를 저장할지 스토리지가 필요할 것 같습니다.
스토리지 이름은 "고급 설정 표시"에서 설정할 수 있습니다. (이번에는 기본값으로 작성해 보았습니다)
초기화 처리에 약간의 시간이 필요합니다.
마찬가지로 오류가 발생하여 곤란한 사람의 해결책을 원 팩합니다.
az extension add --name azure-cli-iot-ext
에러가 나오지 않으면 OK!
에서 다시 토큰을 발행해 보겠습니다.
az iot hub generate-sas-token -n a4f2d132-4cc0-4d6e-8737-9bff40ac4729
결국 이런 느낌으로 할 수 있었습니다.
--du or --duration 참고
토큰 수명은 기본적으로 3600초입니다.
--du --duration
Valid token duration in seconds.
default value: 3600
만약, 1시간 지나버리면,
unauthorized
라고 화가 되기 때문에, 주의해 주세요.준비 완료
그래서 처음으로 돌아가서 만든 토큰을 사용하면 액세스 할 수 있습니다. (아래)
curl -X POST \
https://iothubname.azure-devices.net/twins/myfirstdevice/methods?api-version=2018-06-30 \
-H 'Authorization: SharedAccessSignature sr=a4f2d132-4cc0-4d6e-8737-9bff40ac4729.azure-devices.net&sig=YM1USuqL5yHj%2B30GDT71xT9H%2FFuEKnjKNKf3TqUslX8%3D&se=1569424734&skn=iothubowner' \
-H 'Content-Type: application/json' \
-d '{
"methodName": "reboot",
"responseTimeoutInSeconds": 200,
"payload": {
"input1": "someInput",
"input2": "anotherInput"
}
}'
덧붙여서
myfirstdevice
의 부분은 디바이스명입니다.잡감
그런 다음 장치 이름 목록을 수동으로 가져와 Bash에서 루프를 돌리면서 결과를 얻습니다.
하지만, 괜찮지 않기 때문에, 디바이스명의 일람도 자동으로 취득해, sas token도 매번 취득해···라고 사촌까지 자동화할 수 있으면 최고라고 생각하고 있습니다.
이상.
봐 주셔서 감사합니다!
Reference
이 문제에 관하여(Azure Iot Hub의 직접 메소드를 REST API에서 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hydrangeas/items/a30c7e7881369122c921
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Azure Iot Hub의 직접 메소드를 REST API에서 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hydrangeas/items/a30c7e7881369122c921텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)