Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Home Smart Home

Componentes e suprimentos

Raspberry Pi 2 Modelo B
Orange PI também serve
× 1
Xbee
× 1
Arduino UNO
× 1

Aplicativos e serviços online

Microsoft Azure

Sobre este projeto





Introdução


Vamos ver o que precisamos para configurar um sistema de casa inteligente usando MediaTek Linkit. Como há muitos especialistas aqui para orientá-lo na conexão do hardware para ler os dados do sensor, vou me concentrar na criação de apis e na configuração de um servidor local de custo ultrabaixo de US $ 15 para capturar todos os dados do sensor. Opcionalmente, eu registro os dados no azure.





Configuração


Os sensores transmitem dados via sinais de rádio usando xbee ou qualquer transceptor de baixo custo para o MediaTek LinkIt. O linkIt MediaTek recebe todos os dados brutos do sensor, empacota-os no objeto json usando a biblioteca adruinojson e faz uma solicitação POST para o servidor local. O servidor local hospeda então o aplicativo da web nodejs e recebe todos os dados do sensor como objetos json.

O servidor local está sendo usado como pré-processador e adiciona a hora e a assinatura utc. Qualquer validação, conversão e filtragem de dados pode ser processada aqui. O servidor local registra todos os dados no serviço de nuvem em nosso caso, serviços de armazenamento azure. Como alternativa, o MediaTek linkIt pode postar diretamente os objetos json nos serviços de armazenamento azure. Eu configurei um servidor local apenas para provar que um pc de $ 15 pode ser tão poderoso o suficiente para lidar com nossos dados. podemos registrar nossos dados em qualquer banco de dados no-sql, mesmo em nosso servidor local, eliminando completamente a necessidade de armazenamento externo em nuvem. Deixo tudo isso para vocês.





Demonstração

   





Pré-requisito


Presumo que você saiba ler os dados do sensor usando sensores e microcontroladores como o Arduino ou o MediaTek. Para limitar o escopo deste projeto, vou assumir que os dados do sensor estão disponíveis para MediaTek Link It. Você pode usar o transceptor de rádio de baixa transmissão ou Xbee para transmitir e receber os sinais de rádio de sensores conectados a um microcontolador como o MediaTek. Os iniciantes podem usar o kit inicial MediaTek linkIt groove para ler os dados do ambiente externo, como temperatura, umidade, luz, etc.





Json Json Json


Json se tornou o padrão de fato para iot e foi amplamente adotado. Tendo dito sobre o pré-requisito, vamos começar modelando nossos dados de sensor. O objetivo principal é capturar o máximo de dados possível e passá-los para o servidor. O servidor pode fazer todos os trabalhos de levantamento de peso, como análise, conversão de dados, aprendizado de máquina, etc.

O 'desejado' objeto json será o estado desejado dos dados do sensor. Por exemplo, quando registramos a temperatura, o valor desejado de 24 significa que precisamos sincronizar o valor para a nuvem com o valor de 24. Nossos clientes, como aplicativo da web ou aplicativo móvel, serão atualizados para este valor.

Quando queremos acender uma luz, dizemos, o estado desejado como aceso. Isso significa que a luz está acesa ou será acesa. Todos os nossos aplicativos cliente usarão esse estado para refletir as alterações para o usuário. Quer dizer, o ícone em nosso aplicativo da web será ativado ou desativado.

Este não é um padrão internacional, eu apenas inventei isso. Portanto, sinta-se à vontade para usar seu próprio formato conveniente.

Temperatura
  {"deviceid":"iot / myhome / livingroom / thermostat" "desejado":{"temperature":"24", "umidade":"80"}, "timeutc":"2015-11 -23T00:41:48.824Z "," singedBy ":" localserver "}  

Microfone
  {"deviceid":"iot / myhome / livingroom / mic" "desejado":{"intensidade":"66"}, "timeutc":"2015-11-23T00:41:48.824Z" , "singedBy":"localserver"}  

Distância
  {"deviceid":"iot / myhome / livingroom / obstacle" "desejado":{"proximidade":"150"}, "timeutc":"2015-01-01", "singedBy":"localserver"}  

PIR
  {"deviceid":"iot / myhome / livingroom / pir" "desejado":{"motion start":"2500", "motion end":"5345"}, "timeutc":"2015 -11-23T00:41:48.824Z "," singedBy ":" localserver "}  

GPS
  {"deviceid":"iot / mydevice / location" "desejado":{"lat":"25.5", "long":"32.2"}, "timeutc":"2015-11-23T00 :41:48.824Z "," singedBy ":" localserver "}  

Umidade
  {"deviceid":"/ iot / myhome / jardim / umidade" "desejado":{"umidade":"20"}, "timeutc":"2015-11-23T00:41:48.824Z "," singedBy ":" localserver "}  

Gás
  {"deviceid":"/ iot / myhome / kitchen / gas" "desejado":{"vazamento":"Não"}, "timeutc":"2015-11-23T00:41:48.824Z "," singedBy ":" localserver "}  

Leve
  {"deviceid":"/ iot / myhome / livingroom / light" "desejado":{"intensidade":"60"}, "timeutc":"2015-11-23T00:41:48.824Z "," singedBy ":" localserver "}  

Ou use isso,

Sala de estar
  {"deviceid":"/ iot / myhome / livingroom" "desejado":{"temperatura":"25", "umidade":"80", "janela":"aberto", "porta ":" fechado "," luz ":" 80 "," ruído ":" baixo "}}  

Quarto
  {"deviceid":"/ iot / myhome / bedroom" "desejado":{"temperatura":"24", "umidade":"70", "janela":"fechada", "porta ":" fechado "," luz ":" 80 "," ac ":" on "" ruído ":" baixo "}}  









MediaTek - Receptor


Consulte o arquivo ino anexado à seção do software para registrar os dados no servidor local. Os dados do sensor são simulados, você pode passar a leitura real para o respectivo objeto json





Servidor local


O servidor local adiciona uma sobrecarga, mas será útil de várias maneiras. Podemos usar o servidor local como pré-processador para nossos dados. Os dados podem ser filtrados, com data e hora e assinados

Um pequeno PC e nodejs é uma excelente escolha para servidor local. Podemos escolher qualquer pc minúsculo como raspberry pi, odriod, banana pi, beagle bone, etc. Escolhi laranja pi ($ 15) para este projeto.

Configurar

Raspberry pi 2 ou Orange Pi com qualquer sabor de sistema operacional do Linux que ofereça suporte a nodejs 5. Eu escolhi orange pi com arch linux para arm7. Nodejs e npm instalados. Baixe meu iotapp do github e navegue até / your / local / path / iotapp e execute npm install. O aplicativo expressjs básico começa a escutar na sua porta 3000.

Navegue até your-local-ip:3000 para verificar se a visualização padrão do expressjs foi renderizada. Eu criei essas apis para postar os dados do sensor

/ iot / myhome / livingroom / thermostat - API de temperatura

/ iot / myhome / livingroom / mic - API de som

/ iot / myhome / livingroom / pir - API do sensor de presença

/ iot / myhome / livingroom / distance - Sensor de distância api

/ iot / myhome / mydevice / location - API rastreador gps

/ iot / myhome / jardim / umidade - api do sensor de umidade do solo

/ iot / myhome / kitchen / gas - sensor de vazamento de gás api

/ iot / myhome / livingroom / light - sensor de luz api

/ iot / myhome / livingroom - outra api para sala de estar

/ iot / myhome / bedroom - outra api para quarto de dormir




Para configurar o servidor local. Clone o código-fonte iotapp do meu github. Modifique o index.js para colocar o endereço IP da nuvem ou nome de domínio onde o aplicativo aspnet5 está hospedado no azure





Servidor Remoto


Publicar dados na nuvem se tornou popular hoje em dia. Podemos adquirir assinaturas de iot data, como amazon, azure, spark fun, pubnub, initial state e muitos outros. Eu escolhi o azul para esta demonstração. Análise de dados, mineração de dados e algoritmo de aprendizado de máquina podem ser desenvolvidos para processar nossos dados.

Baixe o iotwebapp do meu github. Eu o criei usando o Visual Studio 2015 visando asp.net5. Essas apis foram configuradas para postar os dados iot. A API registra o iot nas tabelas de armazenamento azure

O parâmetro deviceid pode ser definido para identificar se a localização do sensor.

Estas APIs foram configuradas,

api / iot / myhome / thermostat - asp.net5 web api para registrar todos os dados do termostato

api / iot / myhome / microphone- asp.net5 web api para registrar todos os dados do microfone

api / iot / myhome / pir - asp.net5 web api para registrar todos os dados pir

api / iot / myhome / distance - asp.net5 web api para registrar todos os dados do sensor de distância

api / iot / myhome / device / location - asp.net5 web api para registrar os dados GPS

api / iot / myhome / umidade - asp.net5 web api para registrar os dados do sensor de umidade

api / iot / myhome / gas - asp.net5 web api para registrar os dados do sensor de gás

api / iot / myhome / light - asp.net5 web api para registrar todos os dados do sensor de luz

api / iot / myhome / livingroom - asp.net5 web api para registrar todos os atributos de sala de estar / dados do sensor. podemos usar esta API para enviar todos os valores do sensor.

api / iot / myhome / bedroom - igual ao anterior, criei um para registrar os detalhes do meu quarto

Para configurar o servidor remoto. Clone o código-fonte iotwebapp do meu github. Crie uma mesa de armazenamento azul. Modifique o IoTController.cs e coloque o nome e a chave da conta da tabela de armazenamento azure. Use este nome de domínio ou ip no servidor local





Conclusão


Existem muitas áreas a serem refeitas no código. Sinta-se à vontade para modificar e me avisar se você ficar surpreso.

Código

  • MediaTekRx
  • nodejs - servidor local
  • ThermoStatController.cs
  • PIRController.cs
  • MoistureController.cs
  • LivingRoomController.cs
  • LightController.cs
  • GPSController.cs
  • GasController.cs
  • DistanceController.cs
  • BedRoomController.cs
MediaTekRx C / C ++
Media Tek como receptor. Esboço para dados locais para servidor local
 / * Cliente da Web Este esboço se conecta a um site usando a funcionalidade Wi-Fi na plataforma MediaTek LinkIt. Altere a macro WIFI_AP, WIFI_PASSWORD, WIFI_AUTH e SITE_URL de acordo. criado em 13 de julho de 2010 por dlf (Metodo2 srl) modificado em 31 de maio de 2012 por Tom Igoe modificado em 20 de agosto de 2014 por MediaTek Inc. * / # include  #include  #include  #include  #define WIFI_AP "seu ap" #define WIFI_PASSWORD "sua senha" #define WIFI_AUTH LWIFI_WPA // escolha entre LWIFI_OPEN, LWIFI_WPA, ou LWIFI_WEP. # Defina SITE_URL seu endereço IP ou azure ip "// azure ips" // ip nome de domínioLWiFiClient c; configuração vazia () {LWiFi.begin (); Serial.begin (115200); // continue tentando até conectar ao AP Serial.println ("Conectando ao AP"); enquanto (0 ==LWiFi.connect (WIFI_AP, LWiFiLoginInfo (WIFI_AUTH, WIFI_PASSWORD))) {atraso (1000); } // continue tentando até conectar ao site Serial.println ("Connecting to WebSite"); while (0 ==c.connect (SITE_URL, 3000)) {Serial.println ("Reconectando ao WebSite"); atraso (1000); }} boolean disconnectedMsg =false; void loop () {// Certifique-se de que estamos conectados e despeje o conteúdo da resposta em Serial while (! c) {Serial.println ("Servidor desconectado .."); // continue tentando até conectar ao site Serial.println ("Connecting to WebSite"); while (0 ==c.connect (SITE_URL, 3000)) {Serial.println ("Reconectando ao WebSite"); atraso (1000); }} Serial.println ("Leitura de temperatura .."); updateTemperature (); atraso (3000); Serial.println ("Detectando som .."); updateSound (); atraso (3000); Serial.println ("Detectando movimento de uma pessoa .."); updatePIR (); atraso (3000); Serial.println ("Detectando obstáculo .."); updateDistance (); atraso (3000); Serial.println ("Atualizando localização do dispositivo .."); updateGPSTracker (); atraso (3000); Serial.println ("Calculando a umidade do solo .."); updateMoisture (); atraso (3000); Serial.println ("Detecção de vazamento de gás .."); updateGasLeak (); atraso (3000); Serial.println ("Gravação da intensidade da luz .."); updateLightIntensity (); atraso (3000); updateLivingroomAttributes (); atraso (3000); updateBedroomAttributes (); delay (3000);} void writeToConsole () {// Certifique-se de que estamos conectados e despeje o conteúdo da resposta em Serial while (c) {int v =c.read (); if (v! =-1) {Serial.print ((char) v); }} Serial.println (); Serial.println ("Servidor desconectado .."); // continue tentando até conectar ao site Serial.println ("Connecting to WebSite"); while (0 ==c.connect (SITE_URL, 3000)) {Serial.println ("Reconectando ao WebSite"); atraso (1000); }} void updatePIR () {long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &desejado =root.createNestedObject ("desejado"); root ["deviceid"] ="/ iot / myhome / livingroom / pir"; // assume a unidade padrão ms desejada ["motionstart"] =String (random (0,1000)); desejado ["motionend"] =String (aleatório (1000,10000)); String len =String (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / pir HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); // lógica para detectar a resposta lenta do servidor e postar a solicitação novamente sem esperar pela resposta morta s =millis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole (); } void updateDistance () {long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &desejado =root.createNestedObject ("desejado"); root ["deviceid"] ="/ iot / myhome / livingroom / distancesensor"; // assume a unidade padrão cm desejada ["obstáculo"] =String (random (50,450)); String len =String (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / distance HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); s =milis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole (); } void updateGPSTracker () {long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &desejado =root.createNestedObject ("desejado"); root ["deviceid"] ="/ iot / mydevice"; desejado ["lat"] =String (aleatório (20,25)); desejado ["long"] =String (aleatório (22,27)); String len =String (root.measureLength ()); c.println ("POST / iot / mydevice / location HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); s =milis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole ();} void updateMoisture () {long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &desejado =root.createNestedObject ("desejado"); root ["deviceid"] ="/ iot / myhome / jardim / umidade"; // assume a unidade padrão desejada ["umidade"] =String (random (40,60)); String len =String (root.measureLength ()); c.println ("POST / iot / myhome / jardim / umidade HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); s =milis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole (); } void updateGasLeak () {DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &desejado =root.createNestedObject ("desejado"); desejado ["vazamento"] ="não"; root ["deviceid"] ="/ iot / myhome / kitchen / gas"; long unsigned int s; String len =String (root.measureLength ()); c.println ("POST / iot / myhome / kitchen / gas HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); s =milis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole (); } void updateLightIntensity () {DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &desejado =root.createNestedObject ("desejado"); desejada ["intensidade"] ="80"; root ["deviceid"] ="/ iot / myhome / livingroom / light"; long unsigned int s; String len =String (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / light HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); s =milis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole (); } void updateLivingroomAttributes () {DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); root ["deviceid"] ="/ iot / myhome / livingroom"; JsonObject &desejado =root.createNestedObject ("desejado"); // API alternativa para atributos de sala de estar loggin todos de uma vez desejado ["window"] ="open"; desejada ["porta"] ="fechada"; desejado ["ac"] ="desligado"; desejada ["temperatura"] =String (aleatório (24,28)); desejada ["umidade"] =String (aleatório (60,65)); long unsigned int s; String len =String (root.measureLength ()); c.println ("POST / iot / myhome / livingroom HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); s =milis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole (); } void updateBedroomAttributes () {DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); root ["deviceid"] ="/ iot / myhome / bedroom"; JsonObject &desejado =root.createNestedObject ("desejado"); // API alternativa para atributos de sala de estar loggin todos de uma vez desejado ["window"] ="open"; desejada ["porta"] ="fechada"; desejado ["ac"] ="desligado"; desejada ["temperatura"] =String (aleatório (22,23)); desejada ["umidade"] =String (aleatório (75,80)); long unsigned int s; String len =String (root.measureLength ()); c.println ("POST / iot / myhome / bedroom HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); s =milis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole (); } void updateSound () {long unsigned int s; long unsigned int e; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &desejado =root.createNestedObject ("desejado"); desejada ["intensidade"] =String (aleatório (40,80)); root ["deviceid"] ="/ iot / myhome / livingroom / mic"; root ["timeutc"] =""; root ["assinadoby"] =""; String len =String (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / mic HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); s =milis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole ();} void updateTemperature () {long unsigned int s; long unsigned int e; DynamicJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject (); JsonObject &desejado =root.createNestedObject ("desejado"); desejada ["temperatura"] =String (aleatório (20,40)); desejada ["umidade"] =String (aleatório (60,80)); root ["deviceid"] ="/ iot / myhome / livingroom / thermostat"; root ["timeutc"] =""; root ["assinadoby"] =""; String len =String (root.measureLength ()); c.println ("POST / iot / myhome / livingroom / thermostat HTTP / 1.1"); c.println ("Host:" SITE_URL); c.println ("Tipo de conteúdo:aplicativo / json"); c.println ("Cache-Control:no-cache"); c.print ("Comprimento do conteúdo:"); c.println (len); c.println ("Conexão:fechar"); c.println (); root.printTo (c); root.printTo (Serial); s =milis (); // aguardando a resposta do servidor Serial.println ("esperando resposta HTTP:"); while (! c.available ()) {delay (100); if ((millis () - s> 3000)) {Serial.println (); Serial.println ("O servidor não está respondendo .."); pausa; }} Serial.println ("Chamando gravação no console .."); writeToConsole (); } 
nodejs - servidor local JavaScript
O index.js que tem as rotas para receber os dados do Media Tek
 var express =require ('express'); var router =express.Router (); var buf =require ('buffer'); var request =require ("request"); // substitua seu-ip-ou-domain-name pelo seu endereço IP real ou nome de domínio // exemplo iot.azurewebsites.com//example yourdomainname.com//example 47.12.67.16// aceitar Solicitação POST no homepagerouter.post ('/ iot / myhome / livingroom / thermostat', function (req, res) {var state =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console.log (estado); var options ={method:'POST', url:'http:// your-ip-or-domain-name / api / iot / myhome / livingroom / thermostat', cabeçalhos:{'cache -controle ':' no-cache ',' content-type ':' application / json '}, body:state, json:true}; request (options, function (error, response, body) {if (error) throw novo Erro (erro); console.log (corpo);}); res.send ('Temperatura da sala registrada');}); // aceitar solicitação POST microuter.post ('/ iot / myhome / livingroom / mic' , Diversão cção (req, res) {estado var =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console.log (estado); var options ={method:'POST', url:'http:// your-ip-or-domain-name / api / iot / myhome / livingroom / microphone', headers:{'cache-control':'no- cache ',' content-type ':' application / json '}, body:state, json:true}; pedido (opções, função (erro, resposta, corpo) {if (erro) lançar novo Erro (erro); console.log (corpo);}); res.send ('Intensidade de som da sala gravada');}); // aceitar o pedido POST pirrouter.post ('/ iot / myhome / livingroom / pir', 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 / pir ', headers:{' cache-control ':' no-cache ',' content-type ':' application / json '}, body:state, json:true}; solicitação (opções, função (erro, resposta, corpo) {if (erro) lançar novo Erro (erro); console.log (corpo);}); res.send ('Movimento pir sala de estar registrado');}); / / aceitar solicitação POST distancerouter.post ('/ iot / myhome / livingroom / distance', function (req, res) {var state =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console.log (estado); 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}; pedido (opções, função (erro, resposta, corpo) {if (erro) lançar novo Erro (erro); console.log (corpo);}); res.send ('Living room obstacle gravado');}); // aceitar a solicitação POST gpsrouter.post ('/ iot / mydevice / location', 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 / mydevice / location / gps ', headers:{' cache-control ':' no-cache ',' content-type ':' application / json '}, body:state, json:true}; request (options, função (erro, resposta, corpo) {if (erro) lançar novo Erro (erro); console.log (corpo);}); res.send ('localização do dispositivo registrada');}); // aceitar o roteador de umidade da solicitação POST .post ('/ iot / myhome / jardim / umidade', função (req, res) {var state =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console.log (state ); var options ={method:'POST', url:'http:// seu-ip-ou-nome-de-domínio / api / iot / myhome / jardim / umidade', cabeçalhos:{'cache-control':' no-cache ',' content-type ':' application / json '}, body:state, json:true}; solicitação (opções, função (erro, resposta, corpo) {se (erro) lançar novo Erro (erro); console.log (corpo); }); res.send ('Nível de umidade do jardim registrado');}); // aceitar a solicitação POST 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 ( opções, função (erro, resposta, corpo) {se (erro) lançar novo Erro (erro); console.log (corpo);}); res.send ('Informações de vazamento de gás registradas');}); // aceitar Solicitação POST lightrouter.post ('/ iot / myhome / livingroom / light', function (req, res) {var state =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console. log (estado); 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, função (erro, resposta, corpo) {if (erro) lançar novo Erro (erro); console.log (corpo); }); res.send ('Intensidade de luz registrada');}); // aceitar a solicitação POST 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 (erro, resposta, corpo) {if (erro) lançar novo Erro (erro); console.log (corpo);}); res.send ('Atributos da sala de estar registrados');}); // aceitar o pedido de POST para roubo de quarto. 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 ação (erro, resposta, corpo) {se (erro) lançar novo Erro (erro); console.log (corpo); }); res.send ('Atributos do quarto registrados');}); // aceitar a solicitação PUT em /userrouter.put('/user ', function (req, res) {res.send (' Recebi uma solicitação PUT em / usuário ' );}); // aceitar a solicitação DELETE em /user//router.delete('/user ', function (req, res) {// res.send (' Recebi uma solicitação DELETE em / usuário '); // }); / * Página inicial GET. * / router.get ('/', function (req, res, next) {res.render ('index', {title:'Express'});}); module.exports =router; 
ThermoStatController.cs C #
api para registrar dados de temperatura na nuvem
 usando System; usando System.Collections.Generic; usando System.Linq; usando System.Threading.Tasks; usando Microsoft.AspNet.Mvc; usando Newtonsoft.Json; usando Microsoft.WindowsAzure. Armazenamento; usando Microsoft.WindowsAzure.Storage.Auth; usando Microsoft.WindowsAzure.Storage.Table; // Para obter mais informações sobre como habilitar MVC para projetos vazios, visite 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) {// Criar a tabela cliente. CloudTableClient tableClient =storageAccount.CreateCloudTableClient (); // Crie o objeto CloudTable que representa a tabela "pessoas". Tabela CloudTable =tableClient.GetTableReference ("iot"); iotTemperature.PartitionKey ="termostato"; iotTemperature.RowKey =Guid.NewGuid (). ToString (); // Crie o objeto TableOperation que insere a entidade do cliente. TableOperation insertOperation =TableOperation.Insert (iotTemperature); // Execute a operação de inserção. table.Execute (insertOperation); retornar Ok ("Dados de temperatura registrados na nuvem azul .."); }} public class IotTemperature:TableEntity {public string deviceid {get; definir; } string pública timeutc {get; definir; } string pública assinada por {get; definir; } estado da string pública {get {return JsonConvert.SerializeObject (this.desired); } definir {; }} público Desejado desejado {obter; definir; } public class Desired {public string temperature {get; definir; } public string umidade {get; definir; }}}} 
PIRController.cs C #
api para registrar dados do sensor de presença no azure
 usando System; usando System.Collections.Generic; usando System.Linq; usando System.Threading.Tasks; usando Microsoft.AspNet.Mvc; usando Microsoft.WindowsAzure.Storage.Table; usando Newtonsoft.Json; // Para obter mais informações sobre como habilitar a API Web para projetos vazios, visite http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers {[Route ("api / iot / myhome / livingroom / [Controlador] ")] public class PIRController:IoTController {[HttpPost] public IActionResult Post ([FromBody] IotPIR iotPIR) {// Crie o cliente da tabela. 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; set; } public string timeutc { get; set; } public string signedby { get; set; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; set; } public class Desired { public string motionstart { get; set; } public string motionend { get; set; }}}} 
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; set; } public string timeutc { get; set; } public string signedby { get; set; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; set; } public class Desired { public string moisture { get; set; } } }}
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; set; } public string timeutc { get; set; } public string signedby { get; set; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; set; } public class Desired { public string window { get; set; } public string door { get; set; } public string ac { get; set; } public string temperature { get; set; } public string humidity { get; set; }}}} 
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; set; } public string timeutc { get; set; } public string signedby { get; set; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; set; } public class Desired { public string intensity { get; set; } } }}
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; set; } public string timeutc { get; set; } public string signedby { get; set; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; set; } public class Desired { public string lat { get; set; } [JsonProperty("long")] public string longitude { get; set; }}}} 
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; set; } public string timeutc { get; set; } public string signedby { get; set; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; set; } public class Desired { public string leak { get; set; } } }}
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; set; } public string timeutc { get; set; } public string signedby { get; set; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; set; } public class Desired { public string obstacle { get; set; }}}} 
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; set; } public string timeutc { get; set; } public string signedby { get; set; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; set; } public class Desired { public string window { get; set; } public string door { get; set; } public string ac { get; set; } public string temperature { get; set; } public string humidity { get; set; }}}} 
Media Tek Smart home - Source code for data logging
source code for nodejsapp, aspnet5 and mediatek receiver inohttps://github.com/syediddi/iot-mediatek-linkIt

Esquemas

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

Processo de manufatura

  1. Dados inteligentes:a próxima fronteira na IoT
  2. Controlador Smart Home de 433 MHz com Sensorflare e RaspberryPi
  3. RASPBERRY PI HOME AUTOMATION
  4. Bartender inteligente
  5. Os hospitais inteligentes de amanhã precisam de um software mais inteligente
  6. A lacuna de habilidades da casa inteligente
  7. Os benefícios da interconectividade no local de trabalho
  8. Fique esperto:O futuro da sua casa
  9. A quimera inteligente da fábrica
  10. Conectividade de casa inteligente:3 etapas para superar os principais obstáculos