Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Домашний умный дом

Компоненты и расходные материалы

Raspberry Pi 2, модель B
Orange PI тоже подойдет
× 1
Xbee
× 1
Arduino UNO
× 1

Приложения и онлайн-сервисы

Microsoft Azure

Об этом проекте

Введение

Давайте посмотрим, что нам нужно для настройки системы умного дома с помощью MediaTek Linkit. Поскольку здесь есть много экспертов, которые помогут вам в подключении оборудования для чтения данных датчиков, я сконцентрируюсь на создании API-интерфейсов и настройке локального сервера сверхнизкой стоимости за 15 долларов для сбора всех данных ваших датчиков. При желании я записываю данные в Azure.

Настройка

Датчики передают данные через радиосигналы с помощью xbee или любого недорогого трансивера в MediaTek LinkIt. Ссылка MediaTek:он получает все необработанные данные датчика, упаковывает их в объект json с помощью библиотеки adruinojson и отправляет POST-запрос на локальный сервер. Затем на локальном сервере размещается веб-приложение nodejs, которое получает все данные датчиков в виде объектов json.

Локальный сервер используется в качестве препроцессора и добавляет время и подпись utc. Здесь можно обрабатывать любые данные по проверке, преобразованию и фильтрации. Локальный сервер регистрирует все данные в облачной службе, в нашем случае в службах хранения Azure. В качестве альтернативы, MediaTek linkIt может напрямую публиковать объекты json в службах хранения Azure. Я установил локальный сервер, чтобы доказать, что компьютер за 15 долларов может быть достаточно мощным для обработки наших данных. мы можем регистрировать наши данные в любой базе данных no-sql даже на нашем локальном сервере, полностью устраняя необходимость во внешнем облачном хранилище. Я оставляю все это на ваше усмотрение, ребята.

Демо

   

Предпосылка

Я предполагаю, что вы знаете, как считывать данные датчиков с помощью датчиков и микроконтроллеров, таких как arduino или mediaTek. Чтобы ограничить объем этого проекта, я предполагаю, что данные датчиков доступны для MediaTek Link It. Вы можете использовать низкочастотный радиоприемопередатчик или Xbee для передачи и приема радиосигналов от датчиков, подключенных к микроконтроллеру, таких как MediaTek. Новички могут использовать стартовый комплект MediaTek linkIt Groove для чтения данных о внешней среде, таких как температура, влажность, свет и т. Д.

Json Json Json

Json стал стандартом де-факто для iot и получил широкое распространение. Сказав о предварительных условиях, давайте начнем с моделирования данных наших датчиков. Основная цель - собрать как можно больше данных и передать их на сервер. Сервер может выполнять все тяжелые работы, такие как аналитика, преобразование данных, машинное обучение и т. Д.

"желаемое" json будет желаемым состоянием данных датчика. Например, когда мы записываем температуру, желаемое значение 24 означает, что нам нужно синхронизировать значение с облаком со значением 24. Наши клиенты, такие как веб-приложение или мобильное приложение, будут обновлены до этого значения.

Когда мы хотим включить свет, мы говорим, что желаемое состояние включено. Это означает, что свет включен или будет включен. Все наши клиентские приложения будут использовать это состояние, чтобы отображать изменения для пользователя. Я имею в виду, что значок в нашем веб-приложении будет включен или выключен.

Это не международный стандарт, это я только что придумал. Поэтому вы можете использовать свой собственный удобный формат.

Температура

  {"deviceid":"iot / myhome / гостиная / термостат" "желаемый":{"температура":"24", "влажность":"80"}, "timeutc":"2015-11 -23T00:41:48.824Z "," singedBy ":" localserver "}  

Микрофон

  {"deviceid":"iot / myhome / livingroom / mic" "желаемый":{"интенсивность":"66"}, "timeutc":"2015-11-23T00:41:48.824Z" , "singedBy":"localserver"}  

Расстояние

  {"deviceid":"iot / myhome / гостиная / препятствие" "желаемый":{"близость":"150"}, "timeutc":"2015-01-01", "singedBy":"localserver"}  

PIR

  {"deviceid":"iot / myhome / livingroom / pir" "желаемый":{"начало движения":"2500", "конец движения":"5345"}, "timeutc":"2015 г. -11-23T00:41:48.824Z "," singedBy ":" localserver "}  

GPS

  {"deviceid":"iot / mydevice / location" "желаемый":{"lat":"25,5", "long":"32,2"}, "timeutc":"2015-11-23T00 :41:48.824Z "," singedBy ":" localserver "}  

Влага

  {"deviceid":"/ iot / myhome / garden / влага" "желаемый":{"влажность":"20"}, "timeutc":"2015-11-23T00:41:48.824Z "," singedBy ":" localserver "}  

Газ

  {"deviceid":"/ iot / myhome / kitchen / gas" "желаемый":{"утечка":"Нет"}, "timeutc":"2015-11-23T00:41:48.824Z "," singedBy ":" localserver "}  

Свет

  {"deviceid":"/ iot / myhome / livingroom / light" "желаемый":{"интенсивность":"60"}, "timeutc":"2015-11-23T00:41:48.824Z "," singedBy ":" localserver "}  

Или используйте это,

Гостиная

  {"deviceid":"/ iot / myhome / livingroom" "желаемый":{"температура":"25", "влажность":"80", "window":"open", "door ":" closed "," light ":" 80 "," noise ":" low "}}  

Спальня

  {"deviceid":"/ iot / myhome / bedroom" "желаемый":{"температура":"24", "влажность":"70", "окно":"закрыто", "дверь" ":" closed "," light ":" 80 "," ac ":" on "" noise ":" low "}}  

MediaTek - приемник

Пожалуйста, обратитесь к ino-файлу, приложенному к разделу программного обеспечения, чтобы записать данные на локальный сервер. Данные датчика смоделированы, вы можете передать фактическое чтение соответствующему объекту json

Локальный сервер

Локальный сервер добавляет накладные расходы, но будет полезен во многих отношениях. Мы можем использовать локальный сервер в качестве препроцессора для исходящих iot-данных. Данные могут быть отфильтрованы, отмечены временем и подписаны

Крошечный ПК и nodejs - отличный выбор для локального сервера. Мы можем выбрать любой крошечный компьютер, например Raspberry Pi, Odriod, Banana Pi, Beagle Bone и т. Д. Я выбрал оранжевый Pi (15 долларов США) для этого проекта.

Настройка

Raspberry pi 2 или Orange Pi с любой версией ОС Linux, поддерживающей nodejs 5. Я выбрал оранжевый Pi с Arch Linux для arm7. Установлены nodejs и npm. Загрузите мой iotapp с github, перейдите в / your / local / path / iotapp и запустите npm install. Базовое приложение expressjs начинает прослушивать ваш порт 3000.

Перейдите к your-local-ip:3000, чтобы проверить, отображается ли представление expressjs по умолчанию. Я создал эти API для публикации данных датчика

/ iot / myhome / livingroom / thermostat - API температуры

/ iot / myhome / livingroom / mic - API звука

/ iot / myhome / livingroom / pir - API датчика присутствия

/ iot / myhome / livingroom / distance - API датчика расстояния

/ iot / myhome / mydevice / location - API GPS-трекера

/ iot / myhome / garden / влага - api датчика влажности почвы

/ iot / myhome / kitchen / gas - api датчика утечки газа

/ iot / myhome / livingroom / light - api датчика освещенности

/ iot / myhome / livingroom - другой API для гостиной

/ iot / myhome / bedroom - другой API для спальни


Настроить локальный сервер. Клонируйте исходный код iotapp с моего гитхаба. Измените index.js, чтобы поместить свой облачный IP-адрес или доменное имя там, где приложение aspnet5 размещается в лазурном режиме

Удаленный сервер

Публикация данных в облаке сейчас стала популярной. Мы можем приобрести подписку у поставщиков данных iot, таких как amazon, azure, spark fun, pubnub, initial state и многих других. Я выбрал лазурь для этой демонстрации. Для обработки наших данных могут быть разработаны алгоритмы анализа данных, интеллектуального анализа данных и машинного обучения.

Загрузите iotwebapp с моего гитхаба. Я создал его с помощью Visual Studio 2015 с таргетингом на asp.net5. Эти API были настроены для публикации данных iot. API регистрирует iot в таблицах хранилища Azure

Параметр deviceid может быть установлен для определения местоположения датчика.

Эти api настроены,

api / iot / myhome / thermostat - веб-API asp.net5 для регистрации всех данных термостата

api / iot / myhome / микрофон- asp.net5 веб-API для регистрации всех данных микрофона

api / iot / myhome / pir - веб-API asp.net5 для регистрации всех данных pir

api / iot / myhome / distance - веб-API asp.net5 для регистрации всех данных датчика расстояния

api / iot / myhome / device / location - веб-API asp.net5 для регистрации данных GPS

api / iot / myhome / влага - веб-API asp.net5 для регистрации данных датчика влажности

api / iot / myhome / gas - веб-API asp.net5 для регистрации данных датчика газа

api / iot / myhome / light - веб-API asp.net5 для регистрации всех данных датчика освещенности

api / iot / myhome / livingroom - веб-API asp.net5 для регистрации всех атрибутов гостиной / данных датчиков. мы можем использовать этот API, чтобы протолкнуть все значения датчиков.

api / iot / myhome / bedroom - так же, как и выше, я создал один для регистрации деталей моей спальни

Для настройки удаленного сервера. Клонируйте исходный код iotwebapp с моего github. Создайте лазурную таблицу хранения. Измените IoTController.cs и введите имя и ключ учетной записи таблицы хранения Azure. Используйте это доменное имя или IP-адрес на локальном сервере

Заключение

В коде есть много областей, требующих рефакторинга. Не стесняйтесь вносить изменения и дайте мне знать, если вас что-то поразит.

Код

  • MediaTekRx
  • nodejs - локальный сервер
  • ThermoStatController.cs
  • PIRController.cs
  • MoistureController.cs
  • LivingRoomController.cs
  • LightController.cs
  • GPSController.cs
  • GasController.cs
  • DistanceController.cs
  • BedRoomController.cs
MediaTekRx C / C ++
Media Tek в качестве ресивера. Эскиз к локальным данным на локальном сервере
 / * Веб-клиент Этот эскиз подключается к веб-сайту с использованием функций Wi-Fi на платформе MediaTek LinkIt. Измените макрос WIFI_AP, WIFI_PASSWORD, WIFI_AUTH и SITE_URL соответственно. создано 13 июля 2010 г. компанией dlf (Metodo2 srl), изменено 31 мая 2012 г. Томом Иго, изменено 20 августа 2014 г. компанией MediaTek Inc. * / # include  #include  #include  #include  #define WIFI_AP "your ap" #define WIFI_PASSWORD "your password" #define WIFI_AUTH LWIFI_WPA // выберите LWIFI_OPEN, LWIFI_WPA или LWIFI_WEP. # Define SITE_URL "your ip" // your nodejs or azure ip address or azure доменное имяLWiFiClient c; void setup () {LWiFi.begin (); Serial.begin (115200); // продолжаем попытки до тех пор, пока не подключимся к AP Serial.println ("Connecting to AP"); в то время как (0 ==LWiFi.connect (WIFI_AP, LWiFiLoginInfo (WIFI_AUTH, WIFI_PASSWORD))) {задержка (1000); } // продолжаем попытки до тех пор, пока не подключимся к веб-сайту Serial.println ("Подключение к веб-сайту"); while (0 ==c.connect (SITE_URL, 3000)) {Serial.println («Повторное подключение к веб-сайту»); задержка (1000); }} boolean disconnectedMsg =false; void loop () {// Убедитесь, что мы подключены, и выгружаем содержимое ответа в Serial while (! c) {Serial.println ("Сервер отключен .."); // продолжаем попытки до тех пор, пока не подключимся к веб-сайту Serial.println ("Подключение к веб-сайту"); while (0 ==c.connect (SITE_URL, 3000)) {Serial.println («Повторное подключение к веб-сайту»); задержка (1000); }} Serial.println ("Температура чтения .."); updateTempera (); задержка (3000); Serial.println («Обнаружение звука ..»); updateSound (); задержка (3000); Serial.println («Обнаружение движения человека ..»); updatePIR (); задержка (3000); Serial.println («Обнаружение препятствия ..»); updateDistance (); задержка (3000); Serial.println ("Обновление местоположения устройства .."); updateGPSTracker (); задержка (3000); Serial.println («Расчет влажности почвы ..»); updateMoisture (); задержка (3000); Serial.println («Обнаружение утечки газа ..»); updateGasLeak (); задержка (3000); Serial.println («Запись силы света ..»); updateLightIntensity (); задержка (3000); updateLivingroomAttributes (); задержка (3000); updateBedroomAttributes (); delay (3000);} void writeToConsole () {// Убедитесь, что мы подключены, и выгружаем содержимое ответа в Serial while (c) {int v =c.read (); если (v! =-1) {Serial.print ((char) v); }} Serial.println (); Serial.println («Сервер отключен ..»); // продолжаем попытки до тех пор, пока не подключимся к веб-сайту Serial.println ("Подключение к веб-сайту"); while (0 ==c.connect (SITE_URL, 3000)) {Serial.println («Повторное подключение к веб-сайту»); задержка (1000); }} void updatePIR () {long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &желаемый =root.createNestedObject ("желаемый"); корень ["deviceid"] ="/ iot / myhome / livingroom / pir"; // предполагаем, что единица измерения по умолчанию мс желаемая ["motionstart"] =String (random (0,1000)); желаемый ["motionend"] =Строка (случайная (1000,10000)); Строка len =Строка (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / pir HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); // логика для обнаружения медленного ответа сервера и повторной отправки запроса, не дожидаясь мертвого ответа s =millis (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole (); } void updateDistance () {long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &желаемый =root.createNestedObject ("желаемый"); root ["deviceid"] ="/ iot / myhome / livingroom / distancesensor"; // предполагаем, что единица измерения по умолчанию - желаемая ["препятствие"] =String (random (50,450)); Строка len =Строка (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / distance HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); s =миллис (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole (); } void updateGPSTracker () {long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &желаемый =root.createNestedObject ("желаемый"); root ["deviceid"] ="/ iot / mydevice"; желаемый ["широта"] =Строка (случайная (20,25)); желаемый ["длинный"] =Строка (случайная (22,27)); Строка len =Строка (root.measureLength ()); c.println ("POST / iot / mydevice / location HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); s =миллис (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole ();} void updateMoisture () {long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &желаемый =root.createNestedObject ("желаемый"); корень ["deviceid"] ="/ iot / myhome / сад / влажность"; // предполагаем, что желаемая единица измерения по умолчанию ["влажность"] =String (random (40,60)); Строка len =Строка (root.measureLength ()); c.println ("POST / iot / myhome / garden / влага HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); s =миллис (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole (); } void updateGasLeak () {DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &желаемый =root.createNestedObject ("желаемый"); желаемый ["утечка"] ="нет"; root ["deviceid"] ="/ iot / myhome / kitchen / gas"; long unsigned int s; Строка len =Строка (root.measureLength ()); c.println ("POST / iot / myhome / kitchen / gas HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); s =миллис (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole (); } void updateLightIntensity () {DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &желаемый =root.createNestedObject ("желаемый"); желаемый ["интенсивность"] ="80"; корень ["deviceid"] ="/ iot / myhome / livingroom / light"; long unsigned int s; Строка len =Строка (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / light HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); s =миллис (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole (); } void updateLivingroomAttributes () {DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); корень ["deviceid"] ="/ iot / myhome / livingroom"; JsonObject &желаемый =root.createNestedObject ("желаемый"); // Альтернативный API для атрибутов входа в гостиную сразу желаемым ["window"] ="open"; желаемый ["дверь"] ="закрыто"; желаемый ["ac"] ="off"; желаемая ["температура"] =Строка (случайная (24,28)); желаемая ["влажность"] =Строка (случайная (60,65)); long unsigned int s; Строка len =Строка (root.measureLength ()); c.println ("POST / iot / myhome / livingroom HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); s =миллис (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole (); } void updateBedroomAttributes () {DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); корень ["deviceid"] ="/ iot / myhome / спальня"; JsonObject &желаемый =root.createNestedObject ("желаемый"); // Альтернативный API для атрибутов входа в гостиную сразу желаемым ["window"] ="open"; желаемый ["дверь"] ="закрыто"; желаемый ["ac"] ="off"; желаемая ["температура"] =Строка (случайная (22,23)); желаемая ["влажность"] =Строка (случайная (75,80)); long unsigned int s; Строка len =Строка (root.measureLength ()); c.println ("POST / iot / myhome / bedroom HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); s =миллис (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole (); } void updateSound () {long unsigned int s; длинный беззнаковый int e; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &желаемый =root.createNestedObject ("желаемый"); желаемый ["интенсивность"] =Строка (случайная (40,80)); корень ["deviceid"] ="/ iot / myhome / гостиная / микрофон"; корень ["timeutc"] =""; корень ["подписан"] =""; Строка len =Строка (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / mic HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); s =миллис (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole ();} void updateTemperature () {long unsigned int s; длинный беззнаковый int e; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &желаемый =root.createNestedObject ("желаемый"); желаемая ["температура"] =Строка (случайная (20,40)); желаемая ["влажность"] =Строка (случайная (60,80)); root ["deviceid"] ="/ iot / myhome / гостиная / термостат"; корень ["timeutc"] =""; корень ["подписан"] =""; Строка len =Строка (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / термостат HTTP / 1.1"); c.println ("Хост:" SITE_URL); c.println ("Content-Type:application / json"); c.println ("Контроль кеширования:без кеширования"); c.print ("Длина содержимого:"); c.println (len); c.println ("Соединение:закрыть"); c.println (); root.printTo (c); root.printTo (серийный); s =миллис (); // ожидаем ответа сервера Serial.println ("ожидание ответа HTTP:"); в то время как (! c.available ()) {задержка (100); если ((millis () - s> 3000)) {Serial.println (); Serial.println («Сервер не отвечает ..»); ломать; }} Serial.println ("Вызов записи на консоль .."); writeToConsole (); } 
nodejs - локальный сервер JavaScript
Index.js, в котором есть маршруты для получения данных от Media Tek
 var express =require ('express'); var router =express.Router (); var buf =require ('buffer'); var request =require ("request"); // замените your-ip-or-domain-name на ваш реальный IP-адрес или имя домена // например iot.azurewebsites.com//example yourdomainname.com//example 47.12.67.16// accept POST-запрос на homepagerouter.post ('/ iot / myhome / livingroom / thermostat', function (req, res) {var state =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console.log (состояние); var options ={method:'POST', url:'http:// your-ip-or-domain-name / api / iot / myhome / livingroom / thermostat', заголовки:{'cache -control ':' no-cache ',' content-type ':' application / json '}, body:state, json:true}; request (параметры, функция (ошибка, ответ, тело) {if (error) throw new Error (error); console.log (body);}); res.send ('Температура в гостиной записана');}); // принимаем запрос POST microuter.post ('/ iot / myhome / livingroom / mic' , веселье ction (req, res) {состояние var =req.body; state.timeutc =новая дата (); state.signedby ="orangepi"; console.log (состояние); var options ={method:'POST', url:'http:// your-ip-or-domain-name / api / iot / myhome / гостиная / микрофон', заголовки:{'cache-control':'no- cache ',' content-type ':' application / json '}, body:state, json:true}; запрос (параметры, функция (ошибка, ответ, тело) {если (ошибка) выбросить новую ошибку (ошибка); console.log (тело);}); res.send ('Интенсивность звука в гостиной записана');}); // принимаем POST-запрос pirrouter.post ('/ iot / myhome / livingroom / pir', function (req, res) {var state =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console.log (состояние); var options ={method:'POST', url:'http:// your-ip-or-domain-name / api / iot / myhome / livingroom / pir ', заголовки:{' cache-control ':' no-cache ',' content-type ':' application / json '}, body:state, json:true}; запрос (параметры, функция (ошибка, ответ, тело) {if (error) throw new Error (error); console.log (body);}); res.send ('Движение в гостиной записано');}); / / accept POST-запрос distancerouter.post ('/ iot / myhome / livingroom / distance', function (req, res) {var state =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console.log (состояние); var options ={method:'POST', url:'http:// your-ip-or-domain-name / api / iot / myhome / livingroom / distance', headers:{'cache -control ':' no-cache ',' content-type ':' application / json '}, body:state, js on:true}; запрос (параметры, функция (ошибка, ответ, тело) {если (ошибка) выбросить новую ошибку (ошибка); console.log (тело);}); res.send ('Записано препятствие в гостиной');}); // принимаем POST-запрос gpsrouter.post ('/ iot / mydevice / location', function (req, res) {var state =req.body; state.timeutc =новая дата (); state.signedby ="orangepi"; console.log (состояние); var options ={method:'POST', url:'http:// your-ip-or-domain-name / api / iot / mydevice / location / gps ', заголовки:{' cache-control ':' no-cache ',' content-type ':' application / json '}, body:state, json:true}; request (options, function (error, response, body) {if (error) throw new Error (error); console.log (body);}); res.send ('местоположение устройства записано');}); // принимаем POST-запрос влаги Router .post ('/ iot / myhome / garden / влага', function (req, res) {var state =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console.log (state ); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/garden/moisture', headers:{ 'cache-control':' no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Garden moisture level recorded');});// accept POST request gasrouter.post('/iot/myhome/kitchen/gas', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/kitchen/gas', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Gas leak information recorded');});// accept POST request lightrouter.post('/iot/myhome/livingroom/light', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/livingroom/light', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(optio ns, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Light intensity recorded');});// accept POST request livingroomrouter.post('/iot/myhome/livingroom', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/room/livingroom', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Livingroom attributes recorded');});// accept POST request bedroomrouter.post('/iot/myhome/bedroom', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/room/bedroom', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, fu nction (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Bedroom attributes recorded');});// accept PUT request at /userrouter.put('/user', function (req, res) { res.send('Got a PUT request at /user');});// accept DELETE request at /user//router.delete('/user', function (req, res) {// res.send('Got a DELETE request at /user');//});/* GET home page. */router.get('/', function(req, res, next) { res.render('index', { title:'Express' });});module.exports =router;
ThermoStatController.csC#
api to log temperature data to the cloud
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Newtonsoft.Json;using Microsoft.WindowsAzure.Storage;using Microsoft.WindowsAzure.Storage.Auth;using Microsoft.WindowsAzure.Storage.Table;// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/livingroom/[Controller]")] public class ThermoStatController :IoTController { // GET:// public IActionResult Index() { return View(); } [HttpPost] public IActionResult Post([FromBody]IotTemperature iotTemperature) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotTemperature.PartitionKey ="thermostat"; iotTemperature.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotTemperature); // Execute the insert operation. table.Execute(insertOperation); return Ok("Temperature data logged to azure cloud.."); } } public class IotTemperature :TableEntity { public string deviceid { get; набор; } public string timeutc { get; набор; } public string signedby { get; набор; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; набор; } public class Desired { public string temperature { get; набор; } public string humidity { get; набор; }}}} 
PIRController.csC#
api to log presence sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/livingroom/[Controller]")] public class PIRController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotPIR iotPIR) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotPIR.PartitionKey ="pir"; iotPIR.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotPIR); // Execute the insert operation. table.Execute(insertOperation); return Ok("PIR data logged to azure cloud.."); } } public class IotPIR :TableEntity { public string deviceid { get; набор; } public string timeutc { get; набор; } public string signedby { get; набор; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; набор; } public class Desired { public string motionstart { get; набор; } public string motionend { get; набор; }}}} 
MoistureController.csC#
api to log soil moisture data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/garden/[Controller]")] public class MoistureController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotMoisture iotMoisture) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotMoisture.PartitionKey ="moisture"; iotMoisture.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotMoisture); // Execute the insert operation. table.Execute(insertOperation); return Ok("Moisture data logged to azure cloud.."); } } public class IotMoisture :TableEntity { public string deviceid { get; набор; } public string timeutc { get; набор; } public string signedby { get; набор; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; набор; } public class Desired { public string moisture { get; набор; } } }}
LivingRoomController.csC#
api to log all living room sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/room/[controller]")] public class LivingRoomController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotLivingRoom iotLivingRoom) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotLivingRoom.PartitionKey ="livingroom"; iotLivingRoom.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotLivingRoom); // Execute the insert operation. table.Execute(insertOperation); return Ok("Living room attributes logged to azure cloud.."); } } public class IotLivingRoom :TableEntity { public string deviceid { get; набор; } public string timeutc { get; набор; } public string signedby { get; набор; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; набор; } public class Desired { public string window { get; набор; } public string door { get; набор; } public string ac { get; набор; } public string temperature { get; набор; } public string humidity { get; набор; }}}} 
LightController.csC#
api to log light sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/livingroom/[Controller]")] public class LightController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotLight iotLight) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotLight.PartitionKey ="light"; iotLight.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotLight); // Execute the insert operation. table.Execute(insertOperation); return Ok("Light intensity logged to azure cloud.."); } } public class IotLight :TableEntity { public string deviceid { get; набор; } public string timeutc { get; набор; } public string signedby { get; набор; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; набор; } public class Desired { public string intensity { get; набор; } } }}
GPSController.csC#
api to log gps data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/mydevice/location/[Controller]")] public class GPSController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotGPS iotGPS) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotGPS.PartitionKey ="gps"; iotGPS.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotGPS); // Execute the insert operation. table.Execute(insertOperation); return Ok("GPS data logged to azure cloud.."); } } public class IotGPS :TableEntity { public string deviceid { get; набор; } public string timeutc { get; набор; } public string signedby { get; набор; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; набор; } public class Desired { public string lat { get; набор; } [JsonProperty("long")] public string longitude { get; набор; }}}} 
GasController.csC#
api to log gas leakage data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/kitchen/[Controller]")] public class GasController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotGas iotGas) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotGas.PartitionKey ="gas"; iotGas.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotGas); // Execute the insert operation. table.Execute(insertOperation); return Ok("Gas leak information logged to azure cloud.."); } } public class IotGas :TableEntity { public string deviceid { get; набор; } public string timeutc { get; набор; } public string signedby { get; набор; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; набор; } public class Desired { public string leak { get; набор; } } }}
DistanceController.csC#
api to log ultrasonic distance sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/livingroom/[Controller]")] public class DistanceController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotDistance iotDistance) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotDistance.PartitionKey ="distance"; iotDistance.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotDistance); // Execute the insert operation. table.Execute(insertOperation); return Ok("Obstacle data logged to azure cloud.."); } } public class IotDistance :TableEntity { public string deviceid { get; набор; } public string timeutc { get; набор; } public string signedby { get; набор; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; набор; } public class Desired { public string obstacle { get; набор; }}}} 
BedRoomController.csC#
api to log all bedroom sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/room/[controller]")] public class BedRoomController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotBedRoom iotBedRoom) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotBedRoom.PartitionKey ="bedroom"; iotBedRoom.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotBedRoom); // Execute the insert operation. table.Execute(insertOperation); return Ok("Bed room attributes logged to azure cloud.."); } } public class IotBedRoom :TableEntity { public string deviceid { get; набор; } public string timeutc { get; набор; } public string signedby { get; набор; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; набор; } public class Desired { public string window { get; набор; } public string door { get; набор; } public string ac { get; набор; } public string temperature { get; набор; } public string humidity { get; набор; }}}} 
Media Tek Smart home - Source code for data logging
source code for nodejsapp, aspnet5 and mediatek receiver inohttps://github.com/syediddi/iot-mediatek-linkIt

Схема

Transmit radio signal from arduino Transmit radio signal via Xbee from arduino without shield Transmit radio signals from arduino

Производственный процесс

  1. Интеллектуальные данные:следующий рубеж в Интернете вещей
  2. Контроллер умного дома 433 МГц с Sensorflare и RaspberryPi
  3. МАЛИНОВАЯ АВТОМАТИЗАЦИЯ ДОМА
  4. Умный бармен
  5. Умные больницы завтрашнего дня нуждаются в более умном программном обеспечении
  6. Пробел в навыках умного дома
  7. Преимущества взаимодействия на рабочем месте
  8. Станьте умнее:будущее вашего дома
  9. Несбыточная мечта умной фабрики
  10. Подключение к умному дому:3 шага для преодоления основных препятствий