Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Smart Home zu Hause

Komponenten und Verbrauchsmaterialien

Raspberry Pi 2 Model B
Orange PI würde auch reichen
× 1
Xbee
× 1
Arduino UNO
× 1

Apps und Onlinedienste

Microsoft Azure

Über dieses Projekt

Einführung

Mal sehen, was wir brauchen, um ein Smart-Home-System mit MediaTek Linkit einzurichten. Da es hier viele Experten gibt, die Sie beim Hardwareanschluss zum Lesen der Sensordaten anleiten, werde ich mich auf die Erstellung von APIs und die Einrichtung eines extrem kostengünstigen lokalen Servers im Wert von 15 USD konzentrieren, um alle Ihre Sensordaten zu erfassen. Optional protokolliere ich die Daten in Azure.

Einrichtung

Die Sensoren übertragen dort Daten über Funksignale mit xbee oder einem beliebigen kostengünstigen Transceiver an das MediaTek LinkIt. Das MediaTek linkIt empfängt alle Sensorrohdaten, verpackt sie mit der adruinojson-Bibliothek in ein json-Objekt und stellt eine POST-Anfrage an den lokalen Server. Der lokale Server hostet dann die Webanwendung von nodej und empfängt alle Sensordaten als Json-Objekte.

Der lokale Server wird als Präprozessor verwendet und fügt die utc-Zeit und -Signatur hinzu. Hier können beliebige Datenvalidierungen, Konvertierungen und Filterungen bearbeitet werden. Der lokale Server protokolliert alle Daten im Cloud-Dienst in unserem Fall Azure Storage Services. Alternativ kann MediaTek linkIt die JSON-Objekte direkt an Azure-Speicherdienste senden. Ich habe einen lokalen Server eingerichtet, nur um zu beweisen, dass ein 15-Dollar-PC so leistungsfähig sein kann, um unsere Daten zu verarbeiten. Wir können unsere Daten in jede beliebige Nicht-SQL-DB einloggen, sogar auf unserem lokalen Server, wodurch die Notwendigkeit eines externen Cloud-Speichers vollständig entfällt. Ich überlasse das alles euch.

Demo

 

Voraussetzung

Ich gehe davon aus, dass Sie wissen, wie man Sensordaten mit Sensoren und Mikrocontrollern wie Arduino oder MediaTek liest. Um den Umfang dieses Projekts einzuschränken, gehe ich davon aus, dass die Sensordaten MediaTek Link It zur Verfügung stehen. Sie können einen Low-Cast-Funk-Transceiver oder Xbee verwenden, um die Funksignale von Sensoren zu senden und zu empfangen, die an Mikrocontroller wie MediaTek angeschlossen sind. Anfänger können das MediaTek linkIt Groove Starter Kit verwenden, um die externen Umgebungsdaten wie Temperatur, Luftfeuchtigkeit, Licht usw. auszulesen.

Json Json Json

Json ist zum De-facto-Standard für iot geworden und weit verbreitet. Nachdem wir die Voraussetzung gesagt haben, beginnen wir mit der Modellierung unserer Sensordaten. Der Hauptzweck besteht darin, so viele Daten wie möglich zu erfassen und an den Server weiterzugeben. Der Server kann alle wichtigen Aufgaben wie Analysen, Datenkonvertierung, maschinelles Lernen usw. ausführen. 

Das 'gewünschte' json-Objekt wird der gewünschte Zustand der Sensordaten sein. Wenn wir beispielsweise die Temperatur aufzeichnen, bedeutet der gewünschte Wert von 24, dass wir den Wert mit dem Wert von 24 mit der Cloud synchronisieren müssen. Unsere Clients wie Web-Apps oder mobile Apps werden auf diesen Wert aktualisiert.

Wenn wir ein Licht einschalten wollen, sagen wir den gewünschten Zustand als an. Es bedeutet, dass das Licht eingeschaltet ist oder eingeschaltet wird. Alle unsere Clientanwendungen verwenden diesen Status, um die Änderungen für den Benutzer widerzuspiegeln. Ich meine, das Symbol in unserer Web-App wird ein- oder ausgeschaltet.

Das ist kein internationaler Standard, das habe ich mir gerade ausgedacht. Zögern Sie also nicht, Ihr eigenes bequemes Format zu verwenden.

Temperatur

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

Mikrofon

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

Entfernung

{ "deviceid" :"iot/myhome/livingroom/obstacle""deired" :{"proximity" :"150"}, "timeutc":"2015-01-01", "singedBy" :"lokaler Server"} 

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""deired" :{"lat" :"25.5", "long" :"32.2"},"timeutc":"2015-11-23T00 :41:48.824Z","singedBy" :"localserver"} 

Feuchtigkeit

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

Gas

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

Licht

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

Oder verwenden Sie dies,

Wohnzimmer

{"deviceid" :"/iot/myhome/livingroom""desired" :{ "temperature" :"25",                   "humidity" :"80",                                                                                                                                                                         ":"geschlossen",                      "light":"80",                       "noise":"low"}} 

Schlafzimmer

{"deviceid" :"/iot/myhome/bedroom""desired" :{ "temperature" :"24",                     "humidity" :"70",                                                                                                                                                                                                                                  ":"geschlossen",                     "hell":"80",                     "ac":"on"                    "noise":"low"}} 

MediaTek – Empfänger 

Bitte beachten Sie die ino-Datei, die dem Softwareabschnitt beigefügt ist, um die Daten auf dem lokalen Server zu protokollieren. Die Sensordaten werden simuliert, Sie können den aktuellen Messwert an das jeweilige JSON-Objekt übergeben

Lokaler Server

Der lokale Server fügt einen Overhead hinzu, ist jedoch in vielerlei Hinsicht hilfreich. Wir können einen lokalen Server als Vorprozessor für unsere IOT-Daten verwenden. Daten können gefiltert, mit einem Zeitstempel versehen und signiert werden

Ein kleiner PC und Nodejs sind eine ausgezeichnete Wahl für lokale Server. Wir können jeden winzigen PC wie Himbeer-Pi, Odriod, Bananen-Pi, Beagle-Knochen usw. auswählen. Ich habe für dieses Projekt orangefarbenen Pi ($15) gewählt.

Einrichtung

Raspberry Pi 2 oder Orange Pi mit jedem Linux-Betriebssystem, das nodejs 5 unterstützt. Ich habe Orange Pi mit Arch-Linux für arm7 gewählt. Nodejs und npm installiert. Laden Sie meine iotapp von github herunter und navigieren Sie zu /your/local/path/iotapp und führen Sie npm install aus. Die grundlegende expressjs-App beginnt, auf Ihrem Port 3000 zu lauschen.

Navigieren Sie zu your-local-ip:3000, um zu überprüfen, ob die Expressjs-Standardansicht gerendert wird. Ich habe diese APIs erstellt, um die Sensordaten zu posten

/iot/myhome/livingroom/thermostat - Temperatur-API

/iot/myhome/livingroom/mic - Sound-API

/iot/myhome/livingroom/pir - Anwesenheitssensor-API

/iot/myhome/livingroom/distance - Entfernungssensor-API

/iot/myhome/mydevice/location - GPS-Tracker-API

/iot/myhome/garden/moisture - Bodenfeuchtesensor-API

/iot/myhome/kitchen/gas - Gaslecksensor-API

/iot/myhome/livingroom/light - Lichtsensor-API

/iot/myhome/livingroom - andere API für das Wohnzimmer

/iot/myhome/bedroom - andere API für das Schlafzimmer


Lokalen Server einrichten. Klonen Sie den Quellcode iotapp von meinem Github. Ändern Sie die Datei index.js, um Ihre Cloud-IP-Adresse oder Ihren Domänennamen dort zu platzieren, wo die aspnet5-Anwendung in Azure gehostet wird

Remote-Server

Die Veröffentlichung von Daten in der Cloud ist heutzutage populär geworden. Wir können Abonnements von iot-Daten wie Amazon, Azure, Spark Fun, Pubnub, Initial State und vielen anderen erwerben. Ich habe Azurblau für diese Demo gewählt. Zur Verarbeitung unserer Daten können Datenanalyse-, Data-Mining- und Machine-Learning-Algorithmen entwickelt werden.

Laden Sie die iotwebapp von meinem Github herunter. Ich habe es mit Visual Studio 2015 erstellt, das auf asp.net5 ausgerichtet ist. Diese APIs wurden eingerichtet, um die iot-Daten zu veröffentlichen. Die API protokolliert das IOT in den Azure-Speichertabellen

Der Parameter deviceid kann eingestellt werden, um den Sensorstandort zu identifizieren.

Diese APIs wurden eingerichtet, 

api/iot/myhome/thermostat - asp.net5-Web-API zum Protokollieren aller Thermostatdaten 

api/iot/myhome/microphone-asp.net5 Web-API zum Protokollieren aller Mikrofondaten

api/iot/myhome/pir - asp.net5 Web-API zum Protokollieren aller Pir-Daten

api/iot/myhome/distance - asp.net5 Web-API zum Protokollieren aller Entfernungssensordaten

api/iot/myhome/device/location - asp.net5 Web-API zum Protokollieren der GPS-Daten

api/iot/myhome/moisture - asp.net5 Web-API zum Protokollieren der Feuchtigkeitssensordaten

api/iot/myhome/gas - asp.net5 Web-API zum Protokollieren der Gassensordaten

api/iot/myhome/light - asp.net5 Web-API zum Protokollieren aller Lichtsensordaten

api/iot/myhome/livingroom - asp.net5 Web-API zum Protokollieren aller Wohnzimmerattribute/Sensordaten. Wir können diese eine API verwenden, um alle Sensorwerte zu pushen.

api/iot/myhome/bedroom - wie oben, ich habe eine erstellt, um die Details für mein Schlafzimmer zu protokollieren 

Um einen Remote-Server einzurichten. Klonen Sie den Quellcode iotwebapp von meinem Github. Erstellen Sie eine Azure-Speichertabelle. Ändern Sie die Datei IoTController.cs, und geben Sie Ihren Azure-Speichertabellenkontonamen und -schlüssel ein. Verwenden Sie diesen Domainnamen oder diese IP auf dem lokalen Server

Fazit

Es gibt viele Bereiche im Code, die umgestaltet werden müssen. Bitte zögern Sie nicht, Änderungen vorzunehmen und mich zu informieren, wenn Sie betroffen sind.

Code

  • MediaTekRx
  • nodejs - lokaler Server
  • ThermoStatController.cs
  • PIRController.cs
  • MoistureController.cs
  • LivingRoomController.cs
  • LightController.cs
  • GPSController.cs
  • GasController.cs
  • DistanceController.cs
  • BedRoomController.cs
MediaTekRxC/C++
Media Tek als Empfänger. Sketch zu lokalen Daten zu lokalem Server
/* Webclient Dieser Sketch stellt eine Verbindung zu einer Website über die Wi-Fi-Funktionalität auf der MediaTek LinkIt-Plattform her. Ändern Sie die Makros WIFI_AP, WIFI_PASSWORD, WIFI_AUTH und SITE_URL entsprechend. erstellt am 13. Juli 2010 von dlf (Metodo2 srl) geändert am 31. Mai 2012 von Tom Igoe geändert am 20. August 2014 von MediaTek Inc. */#include #include #include #include #define WIFI_AP "Ihre App"#define WIFI_PASSWORD "Ihr Passwort"#define WIFI_AUTH LWIFI_WPA // Wählen Sie aus LWIFI_OPEN, LWIFI_WPA oder LWIFI_WEP.#define SITE_URL "Ihre IP" //Ihre Nodejs oder Azure DomänennameLWiFiClient c;void setup(){ LWiFi.begin(); Serial.begin(115200); // Wiederholen Sie den Versuch, bis eine Verbindung zum AP hergestellt wird Serial.println ( "Verbindung zum AP"); while (0 ==LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD))) { delay(1000); } // Wiederholen Sie den Versuch, bis Sie mit der Website Serial.println verbunden sind ("Connecting to WebSite"); while (0 ==c.connect(SITE_URL, 3000)) {Serial.println("Re-Connecting to WebSite"); Verzögerung (1000); }} Boolean DisconnectedMsg =false;void loop () { // Stellen Sie sicher, dass wir verbunden sind, und geben Sie den Antwortinhalt auf Serial ab, während (! c) { Serial.println ( "Server getrennt.."); // Wiederholen Sie den Versuch, bis Sie mit der Website Serial.println verbunden sind ("Connecting to WebSite"); while (0 ==c.connect(SITE_URL, 3000)) {Serial.println("Re-Connecting to WebSite"); Verzögerung (1000); } } Serial.println ( "Temperatur lesen.."); updateTemperatur(); Verzögerung (3000); Serial.println("Sound erkennen.."); updateSound(); Verzögerung (3000); Serial.println ( "Personenbewegung erkennen.."); updatePIR(); Verzögerung (3000); Serial.println ("Hindernis erkennen.."); updateDistance(); Verzögerung (3000); Serial.println ( "Gerätestandort wird aktualisiert.."); updateGPSTracker(); Verzögerung (3000); Serial.println ( "Berechnung der Bodenfeuchtigkeit.."); updateFeuchtigkeit(); Verzögerung (3000); Serial.println ( "Gasleckage erkennen.."); updateGasLeak(); Verzögerung (3000); Serial.println ( "Aufzeichnung der Lichtintensität.."); updateLightIntensity(); Verzögerung (3000); updateLivingroomAttributes(); Verzögerung (3000); updateBedroomAttributes(); delay (3000);}void writeToConsole () { // Stellen Sie sicher, dass wir verbunden sind, und geben Sie den Antwortinhalt auf Serial ab while (c) { int v =c.read (); wenn (v! =-1) {Serial.print ((char) v); } } Serial.println(); Serial.println("Server getrennt.."); // Wiederholen Sie den Versuch, bis Sie mit der Website Serial.println verbunden sind ("Connecting to WebSite"); while (0 ==c.connect(SITE_URL, 3000)) {Serial.println("Re-Connecting to WebSite"); Verzögerung (1000); } }void updatePIR () { long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&erwünscht =root.createNestedObject("gewünscht"); root["deviceid"] ="/iot/myhome/livingroom/pir"; // Standardeinheit annehmen ms erwünscht ["motionstart"] =String (random (0,1000)); erwünscht["motionend"]=String(random(1000,10000); String len =String(root.measureLength()); c.println("POST /iot/myhome/livingroom/pir HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); // Logik, um eine langsame Serverantwort zu erkennen und die Anfrage erneut zu senden, ohne auf eine tote Antwort zu warten s =millis (); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole(); }void updateDistance(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&erwünscht =root.createNestedObject("gewünscht"); root["deviceid"] ="/iot/myhome/livingroom/distancesensor"; // Standardeinheit annehmen cm erwünscht["obstacle"]=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("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); s =Millis(); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole(); }void updateGPSTracker(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&erwünscht =root.createNestedObject("gewünscht"); root["deviceid"] ="/iot/mydevice"; erwünscht["lat"] =String(zufällig(20,25)); erwünscht["lang"]=String(zufällig(22,27)); String len =String(root.measureLength()); c.println("POST /iot/mydevice/location HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); s =Millis(); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole();}void updateMoisture(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&erwünscht =root.createNestedObject("gewünscht"); root["deviceid"] ="/iot/myhome/garden/moisture"; //Angenommene Standardeinheit erwünscht["Feuchtigkeit"] =String(random(40,60)); String len =String(root.measureLength()); c.println("POST /iot/myhome/garden/moisture HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); s =Millis(); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole(); }void updateGasLeak(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&erwünscht =root.createNestedObject("gewünscht"); erwünscht["leck"] ="nein"; root["deviceid"] ="/iot/myhome/kitchen/gas"; langes 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("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); s =Millis(); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole(); }void updateLightIntensity(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&erwünscht =root.createNestedObject("gewünscht"); erwünscht["Intensität"] ="80"; root["deviceid"] ="/iot/myhome/livingroom/light"; langes 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("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); s =Millis(); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole(); }void updateLivingroomAttributes(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); root["deviceid"] ="/iot/myhome/livingroom"; JsonObject&erwünscht =root.createNestedObject("gewünscht"); //Alternative API zum gleichzeitigen Anmelden von Wohnzimmerattributen erwünscht["window"] ="open"; gewünschte["Tür"] ="geschlossen"; erwünscht["ac"] ="aus"; gewünschte["temperatur"] =String(random(24,28)); gewünschte["Luftfeuchtigkeit"] =String(random(60,65)); langes unsigned int s; String len =String(root.measureLength()); c.println("POST /iot/myhome/livingroom HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); s =Millis(); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole(); } void updateBedroomAttributes(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); root["deviceid"] ="/iot/myhome/bedroom"; JsonObject&erwünscht =root.createNestedObject("gewünscht"); //Alternative API zum gleichzeitigen Anmelden von Wohnzimmerattributen erwünscht["window"] ="open"; gewünschte["Tür"] ="geschlossen"; erwünscht["ac"] ="aus"; gewünschte["temperatur"] =String(random(22,23)); gewünschte["Luftfeuchtigkeit"] =String(random(75,80)); langes unsigned int s; String len =String(root.measureLength()); c.println("POST /iot/myhome/bedroom HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); s =Millis(); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole(); aufrechtzuerhalten. Void updateSound () { long unsigned int s; langes unsigned int e; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&erwünscht =root.createNestedObject("gewünscht"); gewünschte["Intensität"] =String(random(40,80)); root["deviceid"] ="/iot/myhome/livingroom/mic"; root["timeutc"] =""; root["signedby"]=""; String len =String(root.measureLength()); c.println("POST /iot/myhome/livingroom/mic HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); s =Millis(); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole();}void updateTemperature(){ long unsigned int s; langes unsigned int e; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&erwünscht =root.createNestedObject("gewünscht"); gewünschte["temperatur"] =String(random(20,40)); gewünschte["Luftfeuchtigkeit"]=String(random(60,80)); root["deviceid"] ="/iot/myhome/livingroom/thermostat"; root["timeutc"] =""; root["signedby"]=""; String len =String(root.measureLength()); c.println("POST /iot/myhome/livingroom/thermostat HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Inhaltstyp:Anwendung/json"); c.println("Cache-Steuerung:kein Cache"); c.print("Inhalt-Länge:"); c.println(len); c.println("Verbindung:schließen"); c.println(); root.printTo(c); root.printTo(Seriell); s =Millis(); // Warten auf Serverantwort Serial.println ( "wartet HTTP-Antwort:"); while (!c.verfügbar()) { Verzögerung (100); if ((millis() - s> 3000)) {Serial.println(); Serial.println("Server antwortet nicht.."); brechen; } } Serial.println ("Aufrufen in die Konsole schreiben.."); writeToConsole(); }
nodejs - lokaler ServerJavaScript
Die index.js mit den Routen zum Empfangen der Daten von Media Tek
var express =require('express');var router =express.Router();var buf =require('buffer');var request =require("request"); // Ersetzen Sie Ihre IP-Adresse oder Ihren Domänennamen durch Ihre tatsächliche IP-Adresse oder Ihren Domänennamen // Beispiel iot.azurewebsites.com//Beispiel Ihr Domänenname.com//Beispiel 47.12.67.16// Akzeptieren POST-Anfrage auf der Homepagerouter.post('/iot/myhome/livingroom/thermostat', 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/thermostat', 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('Wohnzimmertemperatur aufgezeichnet');}); // POST-Anfrage akzeptieren microuter.post('/iot/myhome/livingroom/mic' , Spaß ction (req, res) { var state =req.body; state.timeutc =neues Datum(); state.signedby ="orangepi"; Konsole.log(Zustand); 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 }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Wohnzimmer-Schallintensität aufgezeichnet');}); // POST-Anfrage akzeptieren 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 }; request (Optionen, Funktion (Fehler, Antwort, Körper) { if (Fehler) throw new Error(error); console.log(body); }); res.send('Wohnzimmer-pir-Bewegung aufgezeichnet');});/ / POST-Anfrage akzeptieren distancerouter.post('/iot/myhome/livingroom/distance', 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/distance', headers:{ 'cache -control':'no-cache', 'content-type':'application/json' }, body:state, js on:wahr }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Wohnzimmerhindernis aufgezeichnet');}); // POST-Anfrage akzeptieren 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, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Gerätestandort aufgezeichnet');}); // POST-Anfrage akzeptieren 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-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); Konsole.log(Körper); }); res.send('Gartenfeuchtigkeit aufgezeichnet');}); // POST-Anfrage akzeptieren 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('Gasleckinformationen aufgezeichnet');}); // akzeptieren POST-Anfrage 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); Konsole.log(Körper); }); res.send('Lichtintensität aufgezeichnet');}); // POST-Anfrage akzeptieren 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('Wohnzimmerattribute aufgezeichnet');}); // POST-Anfrage akzeptieren Schlafzimmerrouter. post('/iot/myhome/bedroom', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ Methode:'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); Konsole.log(Körper); }); res.send('Schlafzimmerattribute aufgezeichnet');}); // PUT-Anfrage bei /userrouter.put('/user', function (req, res) { res.send('PUT-Anfrage bei /user) annehmen' );}); // DELETE-Anfrage unter /user//router.delete('/user', function (req, res) akzeptieren {// res.send('Erhielt eine DELETE-Anfrage unter /user');// });/* GET-Startseite. */router.get('/', function(req, res, next) { res.render('index', { title:'Express' });});module.exports =router;
ThermoStatController.csC#
api zum Protokollieren von Temperaturdaten in der Cloud
mit System;mit System.Collections.Generic;mit System.Linq;mit System.Threading.Tasks;mit Microsoft.AspNet.Mvc;mit Newtonsoft.Json;mit Microsoft.WindowsAzure. Speicher;mit Microsoft.WindowsAzure.Storage.Auth;mit Microsoft.WindowsAzure.Storage.Table;// Weitere Informationen zum Aktivieren von MVC für leere Projekte finden Sie unter 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) { // Tabellenclient erstellen. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Erstellen Sie das CloudTable-Objekt, das die Tabelle "Personen" darstellt. CloudTable-Tabelle =tableClient.GetTableReference("iot"); iotTemperature.PartitionKey ="Thermostat"; iotTemperature.RowKey =Guid.NewGuid().ToString(); // Erstellen Sie das TableOperation-Objekt, das die Kundenentität einfügt. TableOperation insertOperation =TableOperation.Insert(iotTemperature); // Führen Sie die Einfügeoperation aus. table.Execute(insertOperation); return Ok("In der Azure Cloud protokollierte Temperaturdaten.."); } } öffentliche Klasse IotTemperature:TableEntity { public string deviceid { get; einstellen; } öffentliche Zeichenfolge timeutc { get; einstellen; } öffentlicher String signiert von { get; einstellen; } public string state { get { return JsonConvert.SerializeObject(this.desired); } einstellen {; } } public erwünscht erwünscht { get; einstellen; } public class Desired { public string temperature { get; einstellen; } öffentliche Zeichenfolge Feuchtigkeit { get; einstellen; } } }}
PIRController.csC#
api zum Protokollieren von Anwesenheitssensordaten in Azure
mit System;mit System.Collections.Generic;mit System.Linq;mit System.Threading.Tasks;mit Microsoft.AspNet.Mvc;mit Microsoft.WindowsAzure.Storage.Table;mit Newtonsoft.Json;// Weitere Informationen zum Aktivieren der Web-API für leere Projekte finden Sie unter 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; 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

Schaltpläne

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

Herstellungsprozess

  1. Smart Data:Die nächste Grenze im IoT
  2. 433 MHz Smart Home Controller mit Sensorflare und einem RaspberryPi
  3. RASPBERRY PI HOME AUTOMATION
  4. Smart Barkeeper
  5. Intelligente Krankenhäuser von morgen brauchen intelligentere Software
  6. Die Kompetenzlücke im Smart Home
  7. Die Vorteile der Vernetzung am Arbeitsplatz
  8. Machen Sie sich schlau:Die Zukunft Ihres Zuhauses
  9. Der Wunschtraum einer intelligenten Fabrik
  10. Smart Home Connectivity:3 Schritte, um große Hindernisse zu überwinden