Одна из самых дорогих услуг в стандартном IoT-решении от Azure — Stream Analytic. Чтобы обойти этот дорогостоящий сервис, который больше подходит для разработки корпоративных решений, вы можете использовать возможности Функций Azure.
Как создать центр Интернета вещей и подключить к нему Arduino? я уже писал раньше .
Теперь давайте удешевим решение.
Давайте заменим Stream Analytic функциями Azure. Под катом вы найдете инструкцию How-To. Сначала давайте перейдем к конечным точкам нашего Центра Интернета вещей и возьмем из конечной точки с именем Events имя, совместимое с концентратором событий.
Давайте скопируем и сохраним.
Он понадобится позже.
Теперь давайте создадим новую функцию
Экономичнее будет выбрать в качестве плана хостинга «План потребления», если количество обращений к вашей функции не особенно велико.
Стоимость 20 центов за миллион запусков функций.
Затем создайте пользовательскую функцию, например IoT Hub (Event Hub).
В качестве языка я выбрал C#, но вы можете выбрать другой язык, который вам ближе.
В строке имени Центра событий введите значение, которое мы скопировали из Центра Интернета вещей.
Нажав на «новый» устанавливаем значение для подключения.
Следующий код будет автоматически сгенерирован как код шаблона функции:
Запустим функцию и включим устройство из предыдущей статьи.using System; public static void Run(string myIoTHubMessage, TraceWriter log) { log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}"); }
Если все настроено правильно, то в окне лога мы получим следующий лог:
2017-12-17T16:20:40.486 Функция запущена (Id=63b0dbda-1624-4e2c-b381-47442e69b853) 2017-12-17T16:20:40.486 Триггерная функция C# IoT Hub обработала сообщение: {"deviceId":"ArduinoAzureTwin", "iotdata":581} 2017-12-17T16:20:40.486 Функция завершена (успех, идентификатор = 63b0dbda-1624-4e2c-b381-47442e69b853, продолжительность = 0 мс)
Функция работает, но нам нужно сохранить данные в базу данных.
В качестве базы данных я использую SQL Server. Вы можете использовать любой другой тип базы данных.
Зайдем в существующую базу данных или создадим новую.
В пункте меню «Строки подключения» выберите строку ADO.NET.
Теперь в нашей функции переходим в «Настройки приложения».
Мы не собираемся хранить нашу строку подключения в коде C#, не так ли? Сохраняем его в строках подключения приложения, не забывая менять логин и пароль.
Теперь осталось только изменить нашу функцию, чтобы она могла записывать данные из JSON в базу данных.
Достаточно стандартная версия кода выглядит так: #r "System.Configuration"
#r "System.Data"
#r "Newtonsoft.Json"
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Threading.Tasks;
using System.Net;
using Newtonsoft.Json;
public static async Task Run(string myIoTHubMessage, TraceWriter log)
{
log.Info($"Message: {myIoTHubMessage}");
var e = JsonConvert.DeserializeObject<EventData>(myIoTHubMessage);
var str = ConfigurationManager.ConnectionStrings["SQLServerDB_connection"].
ConnectionString; using (SqlConnection conn = new SqlConnection(str)) { conn.Open(); var text = "INSERT INTO [dbo].
[SensorData] (DeviceName, SensorValue) Values (@deviceId, @iotdata);";
using (SqlCommand cmd = new SqlCommand(text, conn))
{
cmd.Parameters.AddWithValue("@iotdata", e.iotdata);
cmd.Parameters.AddWithValue("@deviceId", e.deviceId);
var result = await cmd.ExecuteNonQueryAsync();
log.Info($"Inserted: {result.ToString()}");
}
}
}
public class EventData
{
public string deviceId { get; set; }
public int iotdata { get; set; }
}
В результате мы довольно быстро получили облачное IoT-решение, которое принимает данные с устройства и сохраняет их в облачную базу данных.
Кроме того, вы можете создать бесплатное веб-приложение Azure для визуализации данных.
Цена решения немного превышает стоимость базы данных.
То есть, если вы используете базу данных размером 2 Гб, вы будете получать чуть больше 5 долларов в месяц.
Ничто не мешает нам использовать какую-то другую облачную базу данных или даже какую-то локальную базу данных, расположенную на вашем сервере.
Теги: #azure #iot #functions #Serverless #Интернет вещей #Microsoft Azure #Разработка для Интернета вещей