Slimme huissysteem: Bouw een low-cost Raspberry Pi & MediaTek Linkit setup
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| Raspberry Pi 2 Model B (of Orange Pi) | 1 | Orange Pi zou ook werken |
| Xbee | 1 | |
| Arduino UNO | 1 |
Apps en online diensten
- Microsoft Azure (optioneel voor cloud logging)
Over dit project
Inleiding
Laten we eens kijken wat we nodig hebben om een slimme huissysteem op te zetten met MediaTek Linkit. Omdat er veel experts zijn die je kunnen begeleiden bij de hardware-aansluiting om sensordata uit te lezen, richt ik me op het creëren van API's en het opzetten van een ultra-goedkope $15 lokale server om al je sensordata vast te leggen. Optioneel log ik de data naar Azure.
Opzet
De sensoren zenden hun data via radiosignalen (met Xbee of een goedkope transceiver) naar de MediaTek LinkIt. De LinkIt ontvangt de rauwe sensordata, verpakt het in een JSON-object met de ArduinoJson-bibliotheek en doet een POST-request naar de lokale server. De lokale server draait een Node.js-webapplicatie die de JSON-objecten ontvangt.
De lokale server fungeert als pre-processor: het voegt UTC-tijd en handtekening toe. Data validatie, conversie en filtering kunnen hier plaatsvinden. De server logt alle data naar een cloudservice (in ons geval Azure Storage). Alternatief kan de LinkIt direct naar Azure posten. Ik heb een lokale server opgezet om te tonen dat een $15 PC krachtig genoeg is om onze data te verwerken. We kunnen data ook lokaal in een NoSQL-database opslaan, wat de noodzaak voor externe cloudopslag elimineert. Dat laat ik aan jullie over.
Demo
(Demo-code en schermen zijn in de originele handleiding te vinden.)
Vereisten
Ik ga ervan uit dat je weet hoe je sensordata uitleest met sensoren en een microcontroller zoals Arduino of MediaTek. Om de scope te beperken, ga ik ervan uit dat de sensordata beschikbaar is op de MediaTek LinkIt. Je kunt goedkope radiotransceivers of Xbee gebruiken om signalen te verzenden/ontvangen van sensoren aangesloten op microcontrollers. Beginners kunnen de MediaTek LinkIt Grove Starter Kit gebruiken om omgevingsdata (temperatuur, vochtigheid, licht) te lezen.
JSON-formaat voor sensordata
JSON is de facto standaard voor IoT. Het hoofddoel is zoveel mogelijk data vastleggen en doorsturen naar de server, waar zware taken (analytics, machine learning) uitgevoerd kunnen worden.
Het 'desired' JSON-object vertegenwoordigt de gewenste toestand van de sensordata. Bijvoorbeeld: bij temperatuurmeting betekent "desired": 24 dat we de waarde 24 naar de cloud willen synchroniseren. Client-apps (web/mobiel) gebruiken deze staat om de UI bij te werken.
Hieronder zijn voorbeelden van JSON-objecten voor verschillende sensoren (zie originele handleiding voor volledige lijst):
// Temperatuur
{ "deviceid": "iot/myhome/livingroom/thermostat",
"desired": { "temperature": "24", "humidity": "80" },
"timeutc": "2015-11-23T00:41:48.824Z",
"signedBy": "localserver" }
Er zijn voorbeelden voor microfoon, afstand, PIR, GPS, vochtigheid, gas, licht, en gecombineerde kamers (living room, bedroom).
MediaTek - Ontvanger
Raadpleeg het .ino bestand in de code-sectie om data naar de lokale server te loggen. De sensordata in de code is gesimuleerd; vervang dit door echte metingen.
Lokale Server (Node.js)
De lokale server voegt overhead toe maar is heel nuttig als pre-processor. Data kan worden gefilterd, getimestamped en ondertekend. Een kleine PC (Raspberry Pi, Orange Pi, Banana Pi, BeagleBone) met Node.js is een uitstekende keuze. Ik gebruikte een Orange Pi ($15) met Arch Linux ARMv7.
Setup: Installeer Node.js en npm. Clone mijn iotapp van GitHub, ga naar de map en voer npm install uit. De Express-app luistert op poort 3000. Surf naar jouw-ip:3000 om te controleren of de standaardweergave werkt.
De API-endpoints voor het ontvangen van sensordata zijn (onder andere):
/iot/myhome/livingroom/thermostat– Temperatuur/iot/myhome/livingroom/mic– Geluid/iot/myhome/livingroom/pir– Beweging/iot/myhome/livingroom/distance– Afstand/iot/mydevice/location– GPS/iot/myhome/garden/moisture– Grondvochtigheid/iot/myhome/kitchen/gas– Gaslek/iot/myhome/livingroom/light– Licht/iot/myhome/livingroom&/iot/myhome/bedroom– Gecombineerde kamers
Om de lokale server in te stellen: clone de broncode, wijzig index.js om je cloud IP/domein in te vullen (waar de ASP.NET 5 app in Azure draait).
Remote Server (Azure ASP.NET 5)
Data publiceren naar de cloud is populair. Er zijn veel providers (Amazon, Azure, SparkFun, PubNub, Initial State). Ik koos Azure. Data analytics, mining en machine learning kunnen op de data worden toegepast.
Download iotwebapp van mijn GitHub (gemaakt met Visual Studio 2015, ASP.NET 5). De API's loggen IoT-data in Azure Storage Tables. De deviceid parameter identificeert de sensorlocatie.
API-endpoints in de cloud:
api/iot/myhome/thermostatapi/iot/myhome/microphoneapi/iot/myhome/pirapi/iot/myhome/distanceapi/iot/mydevice/locationapi/iot/myhome/moistureapi/iot/myhome/gasapi/iot/myhome/lightapi/iot/myhome/livingroomapi/iot/myhome/bedroom
Setup: clone iotwebapp, maak een Azure Storage Table aan, wijzig IoTController.cs met je Azure account naam en sleutel. Gebruik deze domeinnaam/IP in de lokale server.
Conclusie
Er zijn nog veel verbeteringen mogelijk in de code. Voel je vrij om te modificeren en laat me weten als je ergens vastloopt.
Code
Alle broncode (MediaTek ontvanger, Node.js lokale server, ASP.NET 5 controllers) is te vinden op GitHub: https://github.com/syediddi/iot-mediatek-linkIt
De belangrijkste bestanden:
MediaTekRx.ino– MediaTek sketch om data naar lokale server te sturenindex.js– Node.js lokale server routes- Verschillende C# controllers voor Azure:
ThermoStatController.cs,PIRController.cs,MoistureController.cs,LivingRoomController.cs,LightController.cs,GPSController.cs,GasController.cs,DistanceController.cs,BedRoomController.cs
Schema's
Schema's voor radiotransmissie vanaf Arduino (met en zonder Xbee shield) zijn in de originele handleiding te vinden.
Productieproces
- Een 433 MHz Slimme Huiscounter Bouwen met Sensorflare en Raspberry Pi
- Een Raspberry Pi-thuisautomatiseringssysteem bouwen voor afstandsbediening
- Slimme Barman: Bouw Je Eigen Raspberry Pi-Cocktailstation
- Top Slimme Thuis-upgrades Om Uw Woonruimte Te Moderniseren
- Slimme Data: De volgende grens van IoT en Big Data navigeren
- Slimme Ziekenhuizen Van Morgen: De Cruciale Rol Van Intelligente Software
- De smart home skills gap overbruggen: Waarom Groot-Brittannië achterloopt op Europa
- Hoe interconnectiviteit efficiëntie, veiligheid en duurzaamheid drijft in moderne werkplekken
- Slimme Huis Evolutie: Wat de Toekomst Inhoudt voor Verbonden Leven
- Slimme fabrieken: Van visie tot realiteit — Waarom de meeste UK-bedrijven nog faalen
- Slimme huis connectiviteit: 3 bewezen stappen om kernobstakels te overwinnen