Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Accueil Maison Intelligente

Composants et fournitures

Raspberry Pi 2 Modèle B
Orange PI ferait également l'affaire
× 1
Xbee
× 1
Arduino UNO
× 1

Applications et services en ligne

Microsoft Azure

À propos de ce projet

Présentation

Voyons ce dont nous avons besoin pour configurer un système de maison intelligente à l'aide de MediaTek Linkit. Puisqu'il y a beaucoup d'experts ici pour vous guider sur le raccordement matériel pour lire les données du capteur, je me concentrerai sur la création d'API et la configuration d'un serveur local à 15 $ pour capturer toutes vos données de capteur. En option, j'enregistre les données dans Azure.

Configuration

Les capteurs y transmettent des données via des signaux radio à l'aide de xbee ou de tout émetteur-récepteur à faible coût au MediaTek LinkIt. Le lien MediaTekIl reçoit toutes les données brutes du capteur, les emballe dans un objet json à l'aide de la bibliothèque adruinojson et envoie une requête POST au serveur local. Le serveur local héberge ensuite l'application Web nodejs et reçoit toutes les données du capteur sous forme d'objets json.

Le serveur local est utilisé comme préprocesseur et ajoute l'heure et la signature utc. Toute validation, conversion et filtration de données peuvent être traitées ici. Le serveur local enregistre toutes les données sur le service cloud dans notre cas, les services de stockage Azure. Alternativement, MediaTek linkIt peut publier directement les objets json sur les services de stockage Azure. J'ai installé un serveur local juste pour prouver qu'un ordinateur à 15 $ peut être assez puissant pour gérer nos données. nous pouvons enregistrer nos données dans n'importe quelle base de données sans SQL, même sur notre serveur local, éliminant complètement le besoin de stockage cloud externe. Je vous laisse tout ça les gars.

Démo

 

Prérequis

Je suppose que vous savez lire les données des capteurs à l'aide de capteurs et de microcontrôleurs comme arduino ou mediaTek. Pour limiter la portée de ce projet, je vais supposer que les données du capteur sont disponibles pour MediaTek Link It. Vous pouvez utiliser un émetteur-récepteur radio à faible diffusion ou Xbee pour transmettre et recevoir les signaux radio des capteurs connectés au microcontrôleur comme MediaTek. Les débutants peuvent utiliser le kit de démarrage MediaTek linkIt groove pour lire les données de l'environnement externe telles que la température, l'humidité, la lumière, etc.

Json Json Json

Json est devenu la norme de facto pour iot et a été largement adopté. Ceci étant dit à propos du prérequis, commençons par modéliser nos données de capteurs. L'objectif principal est de capturer autant de données que possible et de les transmettre au serveur. Le serveur peut effectuer toutes les tâches lourdes telles que l'analyse, la conversion de données, l'apprentissage automatique, etc. 

Le 'souhaité' json sera l'état souhaité des données du capteur. Par exemple, lorsque nous enregistrons la température, la valeur souhaitée de 24 signifie que nous devons synchroniser la valeur avec le cloud avec la valeur de 24. Nos clients comme l'application Web ou l'application mobile seront mis à jour avec cette valeur.

Lorsque nous voulons allumer une lumière, nous disons que l'état souhaité est allumé. Cela signifie que la lumière est allumée ou sera allumée. Toutes nos applications clientes utiliseront cet état pour refléter les modifications apportées à l'utilisateur. Je veux dire, l'icône de notre application Web sera activée ou désactivée.

Ce n'est pas une norme internationale, je viens de trouver ça. Alors, n'hésitez pas à utiliser votre propre format pratique.

Température

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

Micro

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

Distance

{ "deviceid" :"iot/myhome/livingroom/obstacle""desired" :{"proximity" :"150"}, "timeutc":"2015-01-01", "singedBy" :"serveur local"} 

PIR

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

GPS

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

Humidité

{"deviceid" :"/iot/myhome/garden/moisture""desired" :{"moisture":"20"},"timeutc":"2015-11-23T00:41:48.824Z ","singedBy" :"localserver"} 

Gaz

{"deviceid" :" /iot/myhome/kitchen/gas""desired" :{"leak":"No"},"timeutc":"2015-11-23T00:41:48.824Z ","singedBy" :"localserver"} 

Lumière

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

Ou utilisez ceci,

Salon

{"deviceid" :"/iot/myhome/livingroom""desired" :{ "temperature" :"25",                      "humidité" :"80",                            ":"closed",                      "light":"80",                       "noise":"low"}} 

Chambre à coucher

{"deviceid" :"/iot/myhome/ Bedroom""desired" :{ "temperature" :"24",                     " humidity " :"70 ",                           " window  :"     "    ":"closed",                     "light":"80",                     " ac":" on"                    " noise":" low "}} 

MediaTek - Récepteur 

Veuillez vous référer au fichier ino joint à la section du logiciel pour enregistrer les données sur le serveur local. Les données du capteur sont simulées, vous pouvez transmettre la lecture réelle à l'objet json respectif

Serveur local

Le serveur local ajoute une surcharge mais s'avérera utile à bien des égards. Nous pouvons utiliser le serveur local comme pré-processeur pour les données iot. Les données peuvent être filtrées, horodatées et signées

Un petit PC et nodejs sont un excellent choix pour un serveur local. Nous pouvons choisir n'importe quel petit ordinateur comme raspberry pi, odriod, banana pi, beagle bone etc. J'ai choisi orange pi (15 $) pour ce projet.

Configuration

Raspberry pi 2 ou Orange Pi avec n'importe quelle saveur de système d'exploitation Linux prenant en charge nodejs 5. J'ai choisi orange pi avec arch linux pour arm7. Nodejs et npm installés. Téléchargez mon iotapp depuis github et accédez à /your/local/path/iotapp et exécutez npm install. L'application de base expressjs commence à écouter sur votre port 3000.

Accédez à your-local-ip:3000 pour vérifier si la vue expressjs par défaut est rendue. J'ai créé ces API pour publier les données du capteur

/iot/myhome/livingroom/thermostat - API de température

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

/iot/myhome/livingroom/pir - API du capteur de présence

/iot/myhome/livingroom/distance - API du capteur de distance

/iot/myhome/mydevice/location - API de suivi GPS

/iot/myhome/garden/moisture - capteur d'humidité du sol api

/iot/myhome/kitchen/gas - capteur de fuite de gaz api

/iot/myhome/livingroom/light - capteur de lumière API

/iot/myhome/livingroom - autre api pour le salon

/iot/myhome/ Bedroom - autre API pour la chambre


Pour configurer le serveur local. Clonez le code source iotapp depuis mon github. Modifiez le fichier index.js pour mettre votre adresse IP cloud ou votre nom de domaine où l'application aspnet5 est hébergée en azur

Serveur distant

La publication de données dans le cloud est devenue populaire de nos jours. Nous pouvons acheter un abonnement auprès de iot data fourni comme amazon, azure, spark fun, pubnub, initial state et bien d'autres. J'ai choisi azur pour cette démo. L'analyse de données, l'exploration de données et l'algorithme d'apprentissage automatique peuvent être développés pour traiter nos données.

Téléchargez l'iotwebapp depuis mon github. Je l'ai créé à l'aide de visual studio 2015 ciblant asp.net5. Ces API ont été configurées pour publier les données iot. L'API enregistre l'iot dans les tables de stockage Azure

Le paramètre deviceid peut être défini pour identifier si l'emplacement du capteur.

Ces API ont été configurées, 

api/iot/myhome/thermostat - API Web asp.net5 pour enregistrer toutes les données du thermostat 

api/iot/myhome/microphone-asp.net5 web api pour enregistrer toutes les données du microphone

api/iot/myhome/pir - API Web asp.net5 pour enregistrer toutes les données pir

api/iot/myhome/distance - API Web asp.net5 pour enregistrer toutes les données du capteur de distance

api/iot/myhome/device/location - API Web asp.net5 pour enregistrer les données GPS

api/iot/myhome/moisture - API Web asp.net5 pour enregistrer les données du capteur d'humidité

api/iot/myhome/gas - asp.net5 API Web pour enregistrer les données du capteur de gaz

api/iot/myhome/light - API Web asp.net5 pour enregistrer toutes les données du capteur de lumière

api/iot/myhome/livingroom - asp.net5 API Web pour enregistrer tous les attributs du salon/données des capteurs. nous pouvons utiliser cette API pour pousser toutes les valeurs du capteur.

api/iot/myhome/room - comme ci-dessus, j'en ai créé un pour enregistrer les détails de ma chambre 

Pour configurer le serveur distant. Clonez le code source iotwebapp depuis mon github. Créez une table de rangement azur. Modifiez IoTController.cs et placez le nom et la clé de votre compte de table de stockage Azure. Utilisez ce nom de domaine ou IP dans le serveur local

Conclusion

Il y a beaucoup de zones à refactoriser dans le code. N'hésitez pas à modifier et à me faire savoir si vous êtes frappé.

Code

  • MediaTekRx
  • nodejs - serveur local
  • ThermoStatController.cs
  • PIRController.cs
  • MoistureController.cs
  • LivingRoomController.cs
  • LightController.cs
  • GPSController.cs
  • GasController.cs
  • DistanceController.cs
  • BedRoomController.cs
MediaTekRxC/C++
Media Tek comme récepteur. Croquis vers les données locales vers le serveur local/* Client Web Ce croquis se connecte à un site Web à l'aide de la fonctionnalité Wi-Fi sur la plate-forme MediaTek LinkIt. Modifiez les macros WIFI_AP, WIFI_PASSWORD, WIFI_AUTH et SITE_URL en conséquence. créé le 13 juillet 2010 par dlf (Metodo2 srl) modifié le 31 mai 2012 par Tom Igoe modifié le 20 août 2014 par MediaTek Inc. */#include #include #include #include #define WIFI_AP "votre ap"#define WIFI_PASSWORD "votre mot de passe"#define WIFI_AUTH LWIFI_WPA // choisissez parmi LWIFI_OPEN, LWIFI_WPA ou LWIFI_WEP.#define SITE_URL "votre ip" //votre adresse nodejs ou azure ip nom de domaineLWiFiClient c;void setup(){ LWiFi.begin(); Serial.begin(115200); // continuez de réessayer jusqu'à ce que vous soyez connecté à AP Serial.println("Connexion à AP"); while (0 ==LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD))) { delay(1000); } // continuez de réessayer jusqu'à ce que vous soyez connecté au site Web Serial.println("Connexion au site Web"); while (0 ==c.connect(SITE_URL, 3000)) { Serial.println("Re-connexion au site Web"); retard(1000); }}boolean disconnectedMsg =false;void loop(){ // Assurez-vous que nous sommes connectés et videz le contenu de la réponse dans Serial while (!c) { Serial.println(" Server Disconnected.."); // continuez de réessayer jusqu'à ce que vous soyez connecté au site Web Serial.println("Connexion au site Web"); while (0 ==c.connect(SITE_URL, 3000)) { Serial.println("Re-connexion au site Web"); retard(1000); } } Serial.println(" Lecture de la température.."); updateTemperature(); retard (3000); Serial.println("Détection du son.."); updateSound(); retard (3000); Serial.println("Détection du mouvement d'une personne.."); updatePIR(); retard (3000); Serial.println("Détection d'obstacle.."); mise à jourDistance(); retard (3000); Serial.println("Mise à jour de l'emplacement de l'appareil .."); mise à jourGPSTracker(); retard (3000); Serial.println("Calcul de l'humidité du sol.."); updateMoisture(); retard (3000); Serial.println("Détection de fuite de gaz.."); updateGasLeak(); retard (3000); Serial.println("Enregistrement de l'intensité lumineuse.."); updateLightIntensity(); retard (3000); updateLivingroomAttributes(); retard (3000); updateBedroomAttributes(); delay(3000);}void writeToConsole(){ // Assurez-vous que nous sommes connectés et videz le contenu de la réponse dans Serial while (c) { int v =c.read(); if (v !=-1) { Serial.print((char)v); } } Serial.println(); Serial.println(" Serveur déconnecté.."); // continuez de réessayer jusqu'à ce que vous soyez connecté au site Web Serial.println("Connexion au site Web"); while (0 ==c.connect(SITE_URL, 3000)) { Serial.println("Re-connexion au site Web"); retard(1000); } }void updatePIR(){ long non signé int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&souhaité =root.createNestedObject("desired"); root["deviceid"] ="/iot/myhome/livingroom/pir"; //assume l'unité par défaut ms souhaitée["motionstart"] =String(random(0,1000)); désiré["motionend"]=String(random(1000,10000)); Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/myhome/livingroom/pir HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); //logique pour détecter la réponse lente du serveur et publier à nouveau la demande sans attendre la réponse morte s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); écrireVersConsole(); }void updateDistance(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&souhaité =root.createNestedObject("desired"); root["deviceid"] ="/iot/myhome/livingroom/distancesensor" ; //supposez l'unité par défaut cm souhaitée["obstacle"]=String(random(50,450)); Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/myhome/livingroom/distance HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); écrireVersConsole(); }void updateGPSTracker(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&souhaité =root.createNestedObject("desired"); root["deviceid"] ="/iot/mydevice"; désiré["lat"] =String(random(20,25)); désiré["long"]=String(random(22,27)); Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/mydevice/location HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); writeToConsole();}void updateMoisture(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&souhaité =root.createNestedObject("desired"); root["deviceid"] ="/iot/myhome/garden/moisture"; //assume l'unité par défaut désirée["moisture"] =String(random(40,60)); Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/myhome/garden/moisture HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); écrireVersConsole(); }void updateGasLeak(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&souhaité =root.createNestedObject("desired"); désiré["fuite"] ="non" ; root["deviceid"] ="/iot/myhome/cuisine/gaz" ; int long non signé; Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/myhome/kitchen/gas HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); écrireVersConsole(); }void updateLightIntensity(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&souhaité =root.createNestedObject("desired"); désiré["intensité"] ="80" ; root["deviceid"] ="/iot/myhome/livingroom/light"; int long non signé; Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/myhome/livingroom/light HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); écrireVersConsole(); }void updateLivingroomAttributes(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); root["deviceid"] ="/iot/myhome/livingroom"; JsonObject&souhaité =root.createNestedObject("desired"); //Api alternative pour les attributs du salon de connexion à la fois souhaités["window"] ="open"; désirée["porte"] ="fermée"; désiré["ac"] ="off" ; désirée["température"] =String(random(24,28)); désiré["humidité"] =String(random(60,65)); int long non signé; Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/myhome/livingroom HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); écrireVersConsole(); } void updateBedroomAttributes(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); root["deviceid"] ="/iot/myhome/chambre à coucher"; JsonObject&souhaité =root.createNestedObject("desired"); //Api alternative pour les attributs du salon de connexion à la fois souhaités["window"] ="open"; désirée["porte"] ="fermée"; désiré["ac"] ="off" ; désirée["température"] =String(random(22,23)); désiré["humidité"] =String(random(75,80)); int long non signé; Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/monhome/chambre HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); écrireVersConsole(); } void updateSound(){ long unsigned int s; long non signé int e; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&souhaité =root.createNestedObject("desired"); désiré["intensité"] =String(random (40,80)); root["deviceid"] ="/iot/myhome/livingroom/mic"; root["timeutc"] =""; root["signedby"]="" ; Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/myhome/livingroom/mic HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); writeToConsole();}void updateTemperature(){ long unsigned int s; long non signé int e; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&souhaité =root.createNestedObject("desired"); désirée["température"] =String(random(20,40)); souhaité["humidité"]=String(random(60,80)); root["deviceid"] ="/iot/myhome/livingroom/thermostat" ; root["timeutc"] =""; root["signedby"]="" ; Chaîne len =Chaîne(root.measureLength()); c.println("POST /iot/myhome/livingroom/thermostat HTTP/1.1"); c.println("Hôte :" SITE_URL); c.println("Type de contenu :application/json"); c.println("Cache-Control:no-cache"); c.print("Contenu-Longueur :"); c.println(len); c.println("Connexion :fermer"); c.println(); root.printTo(c); root.printTo(Série); s =millis(); // en attente de la réponse du serveur Serial.println("en attente de la réponse HTTP :"); while (!c.available()) { delay(100); if((millis() - s> 3000)) { Serial.println(); Serial.println("Le serveur ne répond pas.."); Pause; } } Serial.println("Appel d'écriture sur la console .."); écrireVersConsole(); }
nodejs - serveur localJavaScript
L'index.js qui a les routes pour recevoir les données de Media Tek
var express =require('express');var router =express.Router();var buf =require('buffer');var request =require("request");//remplacez votre-ip-or-domain-name par votre adresse IP ou votre nom de domaine//exemple iot.azurewebsites.com//exemple votrenomdedomaine.com//exemple 47.12.67.16// accept Demande POST sur la page d'accueilrouter.post('/iot/myhome/livingroom/thermostat', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log (état); var options ={ méthode :'POST', url :'http://your-ip-or-domain-name/api/iot/myhome/livingroom/thermostat', en-têtes :{ '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('La température du salon enregistrée');}); // accepter la demande POST microu ter.post('/iot/myhome/livingroom/mic', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(état); var options ={ méthode :'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 } ; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Intensité sonore du salon enregistrée');});// accepter la requête 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', en-têtes :{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true } ; request (options, fonction (erreur, réponse, corps) { si (erreur) lancer une nouvelle erreur (erreur); console.log(corps); }); res.send('Mouvement pir du salon enregistré');});/ / accepter la requête POST distancerouter.post('/iot/myhome/livingroom/distance', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log (état); var options ={ méthode :'POST', url :'http://your-ip-or-domain-name/api/iot/myhome/livingroom/distance', en-têtes :{ 'cache -contrôler':' 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('Obstacle du salon enregistré');});// accepte la requête 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', en-têtes :{ 'cache-control' :'no-cache', 'content-type' :'application/json' }, body:state, json :true } ; request(options, function (erreur, réponse, corps) { if (erreur) lancer une nouvelle erreur (erreur); console.log(corps); }); res.send('l'emplacement de l'appareil enregistré');});// accepter la requête POST Moisturerouter .post('/iot/myhome/garden/moisture', 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-ty pe':'application/json' }, corps:état, json:true } ; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Niveau d'humidité du jardin enregistré');});// accepter la demande 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', en-têtes :{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true } ; request( options, fonction (erreur, réponse, corps) { si (erreur) lancer une nouvelle erreur (erreur); console.log(corps); }); res.send('Informations sur les fuites de gaz enregistrées');});// accepter POST request lightrouter.post('/iot/myhome/livingroom/light', function (req, res) { var state =req.body; state.timeutc =new Date (); state.signedby ="orangepi"; console. log (état); var options ={ méthode :'POST', url :'http://your-ip-or-domain-name/api/iot/myhome/livingroom/light', en-têtes :{ 'cache-control ':'pas de cache', 'contenu -type':'application/json' }, body:state, json:true } ; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Intensité lumineuse enregistrée');});// accepter la demande 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', en-têtes :{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true } ; request(options, function (erreur, réponse, corps) { si (erreur) lancer une nouvelle erreur (erreur); console.log(corps); }); res.send('Attributs du salon enregistrés');});// accepter la requête POST du routeur de chambre. post('/iot/myhome/ Bedroom', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ méthode :'POST', url :'http://your-ip-or-domain-name/api/iot/myhome/room/ Bedroom', headers :{ 'cache-control':'no-cache ', 'type de contenu' :'application/json' }, corps:état, json:true } ; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Attributs de chambre enregistrés');});// accepte la demande PUT à /userrouter.put('/user', fonction (req, res) { res.send('J'ai une demande PUT à /user' );});// accepter la demande DELETE sur /user//router.delete('/user', function (req, res) {// res.send('Got a DELETE request at /user');// });/* GET page d'accueil. */router.get('/', function(req, res, next) { res.render('index', { title:'Express' });});module.exports =router;
ThermoStatController.csC#
api pour enregistrer les données de température dans le cloud
à l'aide de System;à l'aide de System.Collections.Generic;à l'aide de System.Linq;à l'aide de System.Threading.Tasks;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Newtonsoft.Json;à l'aide de Microsoft.WindowsAzure. Stockage ; à l'aide de Microsoft.WindowsAzure.Storage.Auth ; à l'aide de Microsoft.WindowsAzure.Storage.Table ; // Pour plus d'informations sur l'activation de MVC pour les projets vides, visitez 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) { // Créez la table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Créez l'objet CloudTable qui représente la table "people". Table CloudTable =tableClient.GetTableReference("iot"); iotTemperature.PartitionKey ="thermostat"; iotTemperature.RowKey =Guid.NewGuid().ToString(); // Créez l'objet TableOperation qui insère l'entité client. TableOperation insertOperation =TableOperation.Insert(iotTemperature); // Exécute l'opération d'insertion. table.Execute(insertOperation); return Ok("Données de température enregistrées dans le nuage azur .."); } } classe publique IotTemperature :TableEntity { chaîne publique deviceid { get; ensemble; } chaîne publique timeutc { get; ensemble; } chaîne publique signée par { get; ensemble; } public string state { get { return JsonConvert.SerializeObject(this.desired); } ensemble {; } } public Désiré souhaité { get; ensemble; } public class Desired { public string temperature { get; ensemble; } chaîne publique humidité { get; ensemble; } } }}
PIRController.csC#
api pour enregistrer les données du capteur de présence dans azure
à l'aide de System;à l'aide de System.Collections.Generic;à l'aide de System.Linq;à l'aide de System.Threading.Tasks;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table;à l'aide Newtonsoft.Json;// Pour plus d'informations sur l'activation de l'API Web pour les projets vides, visitez 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) { // Créez la table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Créez l'objet CloudTable qui représente la table "people". Table CloudTable =tableClient.GetTableReference("iot"); iotPIR.PartitionKey ="pir"; iotPIR.RowKey =Guid.NewGuid().ToString(); // Créez l'objet TableOperation qui insère l'entité client. TableOperation insertOperation =TableOperation.Insert(iotPIR); // Exécute l'opération d'insertion. table.Execute(insertOperation); return Ok("Données PIR enregistrées dans le cloud azur .."); } } classe publique IotPIR :TableEntity { chaîne publique deviceid { get; ensemble; } chaîne publique timeutc { get; ensemble; } chaîne publique signée par { get; ensemble; } public string state { get { return JsonConvert.SerializeObject(this.desired); } ensemble {; } } public Désiré souhaité { get; ensemble; } public class Desired { public string motionstart { get; ensemble; } chaîne publique motionend { get; ensemble; } } }}
MoistureController.csC#
api pour enregistrer les données d'humidité du sol dans azur
à l'aide de System;à l'aide de System.Collections.Generic;à l'aide de System.Linq;à l'aide de System.Threading.Tasks;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table;à l'aide Newtonsoft.Json;// Pour plus d'informations sur l'activation de l'API Web pour les projets vides, visitez 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) { // Créez la table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Créez l'objet CloudTable qui représente la table "people". Table CloudTable =tableClient.GetTableReference("iot"); iotMoisture.PartitionKey ="humidité"; iotMoisture.RowKey =Guid.NewGuid().ToString(); // Créez l'objet TableOperation qui insère l'entité client. TableOperation insertOperation =TableOperation.Insert(iotMoisture); // Exécute l'opération d'insertion. table.Execute(insertOperation); return Ok("Données d'humidité enregistrées dans le nuage azur .."); } } classe publique IotMoisture :TableEntity { chaîne publique deviceid { get; ensemble; } chaîne publique timeutc { get; ensemble; } chaîne publique signée par { get; ensemble; } public string state { get { return JsonConvert.SerializeObject(this.desired); } ensemble {; } } public Désiré souhaité { get; ensemble; } public class Desired { public string humidité { get; ensemble; } } }}
LivingRoomController.csC#
api pour enregistrer toutes les données du capteur du salon sur azure
à l'aide de System;à l'aide de System.Collections.Generic;à l'aide de System.Linq;à l'aide de System.Threading.Tasks;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// Pour plus d'informations sur l'activation de l'API Web pour les projets vides, visitez 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) { // Créez la table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Créez l'objet CloudTable qui représente la table "people". Table CloudTable =tableClient.GetTableReference("iot"); iotLivingRoom.PartitionKey ="salon"; iotLivingRoom.RowKey =Guid.NewGuid().ToString(); // Créez l'objet TableOperation qui insère l'entité client. TableOperation insertOperation =TableOperation.Insert(iotLivingRoom); // Exécute l'opération d'insertion. table.Execute(insertOperation); return Ok("Attributs du salon enregistrés sur le nuage azur .."); } } classe publique IotLivingRoom :TableEntity { chaîne publique deviceid { get; ensemble; } chaîne publique timeutc { get; ensemble; } chaîne publique signée par { get; ensemble; } public string state { get { return JsonConvert.SerializeObject(this.desired); } ensemble {; } } public Désiré souhaité { get; ensemble; } public class Desired { public string window { get; ensemble; } chaîne publique porte { get; ensemble; } chaîne publique ac { obtenir; ensemble; } chaîne publique température { get; ensemble; } chaîne publique humidité { get; ensemble; } } }}
LightController.csC#
api pour enregistrer les données du capteur de lumière dans azure
à l'aide de System;à l'aide de System.Collections.Generic;à l'aide de System.Linq;à l'aide de System.Threading.Tasks;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table;à l'aide de Newtonsoft.Json;// Pour plus d'informations sur l'activation de l'API Web pour les projets vides, visitez 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) { // Créez le client de la table. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Créez l'objet CloudTable qui représente la table "people". Table CloudTable =tableClient.GetTableReference("iot"); iotLight.PartitionKey ="lumière"; iotLight.RowKey =Guid.NewGuid().ToString(); // Créez l'objet TableOperation qui insère l'entité client. TableOperation insertOperation =TableOperation.Insert(iotLight); // Exécute l'opération d'insertion. table.Execute(insertOperation); return Ok("Intensité lumineuse enregistrée dans le nuage azur .."); } } classe publique IotLight :TableEntity { chaîne publique deviceid { get; ensemble; } chaîne publique timeutc { get; ensemble; } chaîne publique signée par { get; ensemble; } public string state { get { return JsonConvert.SerializeObject(this.desired); } ensemble {; } } public Désiré souhaité { get; ensemble; } public class Desired { public string intensité { get; ensemble; } } }}
GPSController.csC#
api pour enregistrer les données GPS dans Azure
à l'aide de System;à l'aide de System.Collections.Generic;à l'aide de System.Linq;à l'aide de System.Threading.Tasks;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table;à l'aide de Newtonsoft .Json;// Pour plus d'informations sur l'activation de l'API Web pour les projets vides, visitez 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) { // Créez la table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Créez l'objet CloudTable qui représente la table "people". Table CloudTable =tableClient.GetTableReference("iot"); iotGPS.PartitionKey ="gps"; iotGPS.RowKey =Guid.NewGuid().ToString(); // Créez l'objet TableOperation qui insère l'entité client. TableOperation insertOperation =TableOperation.Insert(iotGPS); // Exécute l'opération d'insertion. table.Execute(insertOperation); return Ok("Données GPS enregistrées dans le cloud azur .."); } } classe publique IotGPS :TableEntity { chaîne publique deviceid { get; ensemble; } chaîne publique timeutc { get; ensemble; } chaîne publique signée par { get; ensemble; } public string state { get { return JsonConvert.SerializeObject(this.desired); } ensemble {; } } public Désiré souhaité { get; ensemble; } public class Desired { public string lat { get; ensemble; } [JsonProperty("long")] chaîne publique longitude { get; ensemble; } } }}
GasController.csC#
api pour enregistrer les données de fuite de gaz dans azure
à l'aide de System;à l'aide de System.Collections.Generic;à l'aide de System.Linq;à l'aide de System.Threading.Tasks;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table;à l'aide de Newtonsoft.Json;// Pour plus d'informations sur l'activation de l'API Web pour les projets vides, visitez 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) { // Créez la table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Créez l'objet CloudTable qui représente la table "people". Table CloudTable =tableClient.GetTableReference("iot"); iotGas.PartitionKey ="gaz" ; iotGas.RowKey =Guid.NewGuid().ToString(); // Créez l'objet TableOperation qui insère l'entité client. TableOperation insertOperation =TableOperation.Insert(iotGas); // Exécute l'opération d'insertion. table.Execute(insertOperation); return Ok("Informations sur les fuites de gaz enregistrées dans le nuage azur .."); } } classe publique IotGas :TableEntity { chaîne publique deviceid { get; ensemble; } chaîne publique timeutc { get; ensemble; } chaîne publique signée par { get; ensemble; } public string state { get { return JsonConvert.SerializeObject(this.desired); } ensemble {; } } public Désiré souhaité { get; ensemble; } public class Desired { public string leak { get; ensemble; } } }}
DistanceController.csC#
api pour enregistrer les données du capteur de distance à ultrasons dans azure
à l'aide de System;à l'aide de System.Collections.Generic;à l'aide de System.Linq;à l'aide de System.Threading.Tasks;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table; using Newtonsoft.Json;// Pour plus d'informations sur l'activation de l'API Web pour les projets vides, visitez 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) { // Créez la table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Créez l'objet CloudTable qui représente la table "people". Table CloudTable =tableClient.GetTableReference("iot"); iotDistance.PartitionKey ="distance" ; iotDistance.RowKey =Guid.NewGuid().ToString(); // Créez l'objet TableOperation qui insère l'entité client. TableOperation insertOperation =TableOperation.Insert(iotDistance); // Exécute l'opération d'insertion. table.Execute(insertOperation); return Ok("Données d'obstacle enregistrées dans le nuage azur .."); } } classe publique IotDistance :TableEntity { chaîne publique deviceid { get; ensemble; } chaîne publique timeutc { get; ensemble; } chaîne publique signée par { get; ensemble; } public string state { get { return JsonConvert.SerializeObject(this.desired); } ensemble {; } } public Désiré souhaité { get; ensemble; } public class Desired { public string obstacle { get; ensemble; } } }}
BedRoomController.csC#
api pour enregistrer toutes les données du capteur de chambre à coucher sur azur
à l'aide de System;à l'aide de System.Collections.Generic;à l'aide de System.Linq;à l'aide de System.Threading.Tasks;à l'aide de Microsoft.AspNet.Mvc;à l'aide de Microsoft.WindowsAzure.Storage.Table; using Newtonsoft.Json;// Pour plus d'informations sur l'activation de l'API Web pour les projets vides, visitez 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) { // Créez la table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Créez l'objet CloudTable qui représente la table "people". Table CloudTable =tableClient.GetTableReference("iot"); iotBedRoom.PartitionKey ="chambre à coucher"; iotBedRoom.RowKey =Guid.NewGuid().ToString(); // Créez l'objet TableOperation qui insère l'entité client. TableOperation insertOperation =TableOperation.Insert(iotBedRoom); // Exécute l'opération d'insertion. table.Execute(insertOperation); return Ok("Attributs de chambre enregistrés sur le nuage azur .."); } } classe publique IotBedRoom :TableEntity { chaîne publique deviceid { get; ensemble; } chaîne publique timeutc { get; ensemble; } chaîne publique signée par { get; ensemble; } public string state { get { return JsonConvert.SerializeObject(this.desired); } ensemble {; } } public Désiré souhaité { get; ensemble; } public class Desired { public string window { get; ensemble; } chaîne publique porte { get; ensemble; } chaîne publique ac { obtenir; ensemble; } chaîne publique température { get; ensemble; } chaîne publique humidité { get; ensemble; } } }}
Maison intelligente Media Tek - Code source pour l'enregistrement des données
code source pour nodejsapp, aspnet5 et mediatek receiver inohttps://github.com/syediddi/iot-mediatek-linkIt

Schémas

Transmettre le signal radio de l'arduino Transmettre le signal radio via Xbee depuis arduino sans shield Transmettre des signaux radio depuis arduino

Processus de fabrication

  1. Smart data :La prochaine frontière de l'IoT
  2. Contrôleur Smart Home 433MHz avec Sensorflare et RaspberryPi
  3. DOMOMATISATION RASPBERRY PI
  4. Barman intelligent
  5. Les hôpitaux intelligents de demain ont besoin de logiciels plus intelligents
  6. L'écart de compétences dans la maison intelligente
  7. Les avantages de l'interconnectivité sur le lieu de travail
  8. Soyez intelligent :l'avenir de votre maison
  9. Le rêve chimérique de l'usine intelligente