Azure Functions에서 Azure IoT Hub의 C2D 메시지 보내기
11362 단어 AzureFunctionsAzureIoTHub
Azure Functions란 무엇입니까?
Azure Functions에 대해서는, 이 문서 Azure 포털에서 처음 함수 만들기를 읽어 주세요.
이번에 만들고 싶은 것
이번은 Azure IoT Hub로 관리되는 디바이스에 클라우드 측에서 메시지를 보내는 것을 목적으로 하고 있습니다. Logic Apps에 Azure IoT Hub의 커넥터가 있으면 좋지만 현재 존재하지 않으므로 Azure Functions에서 Azure IoT Hub의 API를 호출하는 WebAPI를 만들려고합니다.
여기의 문서 디바이스에 IoT Hub를 사용하여 클라우드에서 메시지 보내기(.NET) 를 참고로 합니다.
Azure Functions 함수 만들기
함수 만들기
사키의 문서에 있는 「HTTP 에 의해 트리거되는 함수의 작성」과 같이, HTTP 트리거의 함수를 작성합니다.
Azure IoT device SDK 추가
Azure IoT device SDK 을 이용하기 위해서, 우선 Azure Functions로 앞서 추가한 함수의 「파일의 표시」로부터 「project.json」이라고 하는 파일을 추가합니다.
「project.json」에는, 이하와 같이 기재합니다.
project.json{
"frameworks":{
"net46":{
"dependencies":{
"Microsoft.Azure.Devices": "1.5.1"
}
}
}
함수의 본문
함수 본체는 run.csx입니다.
사키에 추가한 Azure IoT device SDK를 사용하기 위해 「using Microsoft.Azure.Devices;」를 추가하고 있습니다. 이 때 '#r'에 의한 선언은 불필요합니다.
run.csxusing System.Net;
using System.Text;
using Microsoft.Azure.Devices;
static ServiceClient serviceClient;
static string connectionString = "ここにAzure IoT hubの接続文字列を記載する";
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
string devicename = data.devicename;
string trainSpeed = data.speed;
string trainDirection = data.direction;
if(trainSpeed.Length < 3){
for(int i = 3 - trainSpeed.Length; i > 0; i--){
trainSpeed = "0" + trainSpeed;
}
}
if(trainSpeed.Length > 3){
trainSpeed = "200";
}
string sendmsg = trainSpeed + trainDirection + "000000000";
await sendMessageToDevice(devicename, sendmsg, log);
return sendmsg == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "SendMessage[" + sendmsg + "]");
}
private async static Task sendMessageToDevice(string devname, string msg, TraceWriter log)
{
try
{
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
SendCloudToDeviceMessageAsync(devname, msg).Wait();
}
catch (Exception e)
{
log.Info("HTTP Connect Error!![" + e.StackTrace + "]\n");
}
return;
}
private async static Task SendCloudToDeviceMessageAsync(string hostname, string msg)
{
var commandMessage = new Message(Encoding.ASCII.GetBytes(msg));
await serviceClient.SendAsync(hostname, commandMessage);
}
함수 URL 얻기
Logic Apps에서 이번에 작성한 함수를 호출하려면 함수 run.csx 편집 화면의 오른쪽 상단에 있는 "함수 URL 가져오기"를 클릭하면 다음 화면이 열리고 가져올 수 있습니다.
동작 확인
함수 작성 화면에서 모의적인 입력값(JSON 데이터)을 지정하여 동작 확인할 수 있습니다.
참고 자료
이번은 Azure IoT Hub로 관리되는 디바이스에 클라우드 측에서 메시지를 보내는 것을 목적으로 하고 있습니다. Logic Apps에 Azure IoT Hub의 커넥터가 있으면 좋지만 현재 존재하지 않으므로 Azure Functions에서 Azure IoT Hub의 API를 호출하는 WebAPI를 만들려고합니다.
여기의 문서 디바이스에 IoT Hub를 사용하여 클라우드에서 메시지 보내기(.NET) 를 참고로 합니다.
Azure Functions 함수 만들기
함수 만들기
사키의 문서에 있는 「HTTP 에 의해 트리거되는 함수의 작성」과 같이, HTTP 트리거의 함수를 작성합니다.
Azure IoT device SDK 추가
Azure IoT device SDK 을 이용하기 위해서, 우선 Azure Functions로 앞서 추가한 함수의 「파일의 표시」로부터 「project.json」이라고 하는 파일을 추가합니다.
「project.json」에는, 이하와 같이 기재합니다.
project.json{
"frameworks":{
"net46":{
"dependencies":{
"Microsoft.Azure.Devices": "1.5.1"
}
}
}
함수의 본문
함수 본체는 run.csx입니다.
사키에 추가한 Azure IoT device SDK를 사용하기 위해 「using Microsoft.Azure.Devices;」를 추가하고 있습니다. 이 때 '#r'에 의한 선언은 불필요합니다.
run.csxusing System.Net;
using System.Text;
using Microsoft.Azure.Devices;
static ServiceClient serviceClient;
static string connectionString = "ここにAzure IoT hubの接続文字列を記載する";
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
string devicename = data.devicename;
string trainSpeed = data.speed;
string trainDirection = data.direction;
if(trainSpeed.Length < 3){
for(int i = 3 - trainSpeed.Length; i > 0; i--){
trainSpeed = "0" + trainSpeed;
}
}
if(trainSpeed.Length > 3){
trainSpeed = "200";
}
string sendmsg = trainSpeed + trainDirection + "000000000";
await sendMessageToDevice(devicename, sendmsg, log);
return sendmsg == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "SendMessage[" + sendmsg + "]");
}
private async static Task sendMessageToDevice(string devname, string msg, TraceWriter log)
{
try
{
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
SendCloudToDeviceMessageAsync(devname, msg).Wait();
}
catch (Exception e)
{
log.Info("HTTP Connect Error!![" + e.StackTrace + "]\n");
}
return;
}
private async static Task SendCloudToDeviceMessageAsync(string hostname, string msg)
{
var commandMessage = new Message(Encoding.ASCII.GetBytes(msg));
await serviceClient.SendAsync(hostname, commandMessage);
}
함수 URL 얻기
Logic Apps에서 이번에 작성한 함수를 호출하려면 함수 run.csx 편집 화면의 오른쪽 상단에 있는 "함수 URL 가져오기"를 클릭하면 다음 화면이 열리고 가져올 수 있습니다.
동작 확인
함수 작성 화면에서 모의적인 입력값(JSON 데이터)을 지정하여 동작 확인할 수 있습니다.
참고 자료
{
"frameworks":{
"net46":{
"dependencies":{
"Microsoft.Azure.Devices": "1.5.1"
}
}
}
using System.Net;
using System.Text;
using Microsoft.Azure.Devices;
static ServiceClient serviceClient;
static string connectionString = "ここにAzure IoT hubの接続文字列を記載する";
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
string devicename = data.devicename;
string trainSpeed = data.speed;
string trainDirection = data.direction;
if(trainSpeed.Length < 3){
for(int i = 3 - trainSpeed.Length; i > 0; i--){
trainSpeed = "0" + trainSpeed;
}
}
if(trainSpeed.Length > 3){
trainSpeed = "200";
}
string sendmsg = trainSpeed + trainDirection + "000000000";
await sendMessageToDevice(devicename, sendmsg, log);
return sendmsg == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "SendMessage[" + sendmsg + "]");
}
private async static Task sendMessageToDevice(string devname, string msg, TraceWriter log)
{
try
{
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
SendCloudToDeviceMessageAsync(devname, msg).Wait();
}
catch (Exception e)
{
log.Info("HTTP Connect Error!![" + e.StackTrace + "]\n");
}
return;
}
private async static Task SendCloudToDeviceMessageAsync(string hostname, string msg)
{
var commandMessage = new Message(Encoding.ASCII.GetBytes(msg));
await serviceClient.SendAsync(hostname, commandMessage);
}
Logic Apps에서 이번에 작성한 함수를 호출하려면 함수 run.csx 편집 화면의 오른쪽 상단에 있는 "함수 URL 가져오기"를 클릭하면 다음 화면이 열리고 가져올 수 있습니다.
동작 확인
함수 작성 화면에서 모의적인 입력값(JSON 데이터)을 지정하여 동작 확인할 수 있습니다.
참고 자료
Reference
이 문제에 관하여(Azure Functions에서 Azure IoT Hub의 C2D 메시지 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ayasehiro/items/d6a267c10492c6986845텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)