Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino Home Controller geactiveerd door Alexa

Componenten en benodigdheden

Arduino Yun
× 1
ControlEverything.com 4-KANAALS RELAISCONTROLLER VOOR I2C
× 1
DHT11 temperatuur- en vochtigheidssensor (4 pinnen)
× 1
Weerstand 10k ohm
× 2
SparkFun RedBot-zoemer
× 1
Transistor-NPN voor algemeen gebruik
× 1
LM2596 DC naar DC Buck-converter
× 1
Amazon Alexa Echo Dot
× 1
Arduino Proto Shield
× 1
USB-webcam
× 1
Witte aansluitdoos 200mmx155mmx80mm
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)

Apps en online services

Arduino IDE
Amazon Alexa Alexa Skills Kit
Amazon Web Services AWS Lambda
PubNub Publish/Subscribe API

Over dit project

Overzicht

Wanneer Amazon Alexa op de markt brengt en apparaten zoals Amazon Echo Dot openen een oneindig aantal opties om een ​​geweldig Smart Home te maken dat wordt bestuurd door spraakopdrachten in een natuurlijke taal.

Dit project maakt een Arduino Home Controller die veel sensoren en apparaten met internet kan verbinden en je kunt ze besturen met een Amazon Alexa-vaardigheid.

U kunt mijn vaardigheid "Arduino Home Controller . installeren en inschakelen " de gemakkelijke stap, of u kunt uw vaardigheden laten leiden door deze tutorial.

Voor nu zullen we controleren:

  • Vier lampen in kamer, garage, keuken en woonkamer.
  • Temperatuur- en vochtigheidssensor.
  • Zoemeralarm.
  • WebCam om beveiligingsfoto te maken en per e-mail te verzenden.

U kunt Arduino Home Controller in actie zien in deze korte videodemo. Voor demo en video-voorstel gebruik ik vier leds in prothoboard die gloeilampen in elke huiskamer simuleert.

Als u externe modules wilt gebruiken om uw lichten te activeren, kunt u mijn Arduino Home Controller Remote Modules bekijken project op deze URL.

Blokdiagram

In de blokdiagramafbeelding we kunnen de vier hoofdcomponenten van dit project zien:

1.- Amazon Echo Dot om spraakopdrachten te ontvangen en naar AWS (Amazon Web Service) te sturen.

2.- AWS met een Amazon-vaardigheid en een Lambda-functie om alle commando's te interpreteren.

De vaardigheidsnaam is "Arduino Home Controller " je kunt het later activeren.

3.- Een MQTT-makelaar met behulp van PubNub(c) cloud.

Deze broker ontvangt de controleberichten in twee kanalen, een voor ingestelde waarden en een andere om waarden van sensoren te lezen.

U hoeft geen account aan te maken in PubNub, u kunt mijn account gebruiken voor demo-voorstellen.

4.- Huiscontroller met behulp van Arduino Yun.

We zullen Arduino Yun gebruiken omdat het een ethernet-schild heeft en een kleine linux-machine heeft waar we python zullen uitvoeren om sommige acties uit te voeren.

Het bestuurt relais voor verlichting, leest temperatuur- en vochtigheidssensor af, zet zoemer aan voor alarm en manipuleert een webcam om beveiligingsfoto's te maken.

Voor externe modules, zie mijn aanvullende, Arduino Home Controller Remote Modules project op deze URL.

Installeer alle benodigde software

Op dit punt kun je twee opties nemen, één voor demo, gebruik mijn Alexa-vaardigheid, installeer het en gebruik het of optie twee, je kunt je persoonlijke vaardigheid maken.

Blader door de Alexa-app met deze url , in die sectie Vaardigheden in het menu, zoek Arduino en in de lijst zie je de vaardigheid met de naam "Arduino Home Controller ", klik in de vaardigheidskaart en klik op de knop "Inschakelen" om te installeren.

Of je moet naar Amazon Skill Store gaan via deze link en druk op de knop "Inschakelen"

U moet uw Amazon-account koppelen omdat we uw e-mailadres als ID gebruiken voor alle opdrachten die naar Arduino worden verzonden. Let op:we zullen dit adres niet gebruiken om e-mails te verzenden, alleen als ID.

Skill is geïnstalleerd en gekoppeld aan Amazon-account en verbonden met mijn lambda-functie bij AWS cloud.

1.- Maken een vaardigheid

U moet zich registreren en een gratis ontwikkelaarsaccount maken op de site https://developer.amazon.com/home.html

1.1.- Zodra aanmelding naar Alexa gaat menu-optie en selecteer in Alexa Skills Kit de knop "Aan de slag"

1.2.- Klik vervolgens op de knop "Een nieuwe vaardigheid toevoegen" om een ​​nieuwe vaardigheid aan te maken.

1.3.- Bij Maak een nieuwe Alexa-vaardigheid sectie moet je:

  • Selecteer:Aangepast interactiemodel
  • Taal Engels VS
  • Naam TestSkill is de vaardigheidsnaam die wordt gebruikt om in de winkel te zoeken.
  • Naam aanroep Testvaardigheid is de naam om spraakopdrachten te starten zoals Alexa Ask, Test Skill om alarm in te schakelen
  • Alle globale velden zetten alles op Geen optie
  • Klik op "Opslaan"

De nieuwe vaardigheid is gemaakt en u ziet een nieuw veld Applicatie-ID

amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb 

Het wordt gebruikt voor de koppeling tussen de vaardigheid en de lambda-functie, we gebruiken het later in de tutorial sectie 2.5.

1.4.- Interactiemodel hier definieert hoe u omgaat met de vaardigheid op basis van de definitie van intenties, slots en uitingen.

Bij Interactiemodel menu-optie kopieer en plak dit Json-schema in Intent Schema.

{ "intents":[ { "slots":[ { "name":"light", "type":"States" }, { "name":"welke", "type":" HabRooms" } ], "intent":"LightIntent" }, { "slots":[ { "name":"alarm", "type":"States" } ], "intent":"AlarmIntent" }, { " intent":"TakePhotoIntent" }, { "intent":"GetTemperatureIntent" }, { "intent":"GetHumidityIntent" }, { "intent":"AboutIntent" }, { "intent":"AMAZON.HelpIntent" }, { "intent":"AMAZON.CancelIntent" }, { "intent":"AMAZON.StopIntent" } ]} 

Definieer enkele noodzakelijke slots zoals Staten en HabRooms in Custom Slot Types.

Definieer alle uitingen zoals een gespreksmodel in Voorbeelduitingen , kopieer en plak deze lijst.

LightIntent Draai {welke} licht {light}LightIntent Stel {welke} licht {light}AlarmIntent Draai alarm {alarm}TakePhotoIntent Neem een ​​fotoTakePhotoIntent Neem een ​​beveiligingsfotoGetTemperatureIntent Read TemperatureGetHumidityIntent Read HumidityAboutIntent Vertel me overAboutIntent About 

Voordat we verder gaan met de volgende sectie, Configuratie, we moeten onze Lambda-functie hebben gemaakt omdat we zowel de vaardigheid als de lambda-functie moeten koppelen.

2.- Creëert een Lambda-functie

U moet zich registreren en een account aanmaken bij AWS Console, gebruik url https://aws.amazon.com/console/

2.1.- Selecteer Diensten in boven menu en Lambda in het linker balkmenu.

2.2.- Selecteer in de linkerbalk Functie en klik op de knop "Functie maken".

2.3.- Stel deze gegevens in:

  • Klik Auteur van nul
  • Naam: TestSkillLambda
  • Runtime: Node.js.6.10
  • Rol: Aangepaste rol maken

Dit opent een nieuw venster waarin u de volgende waarden moet selecteren:

  • IAM-rol: Lambda_Basic_Execution
  • Beleidsnaam: "Maak een nieuw rolbeleid" bewerk vervolgens het beleid en plak het volgende in:
{ "Versie":"2012-10-17", "Statement":[ { "Effect":"Toestaan", "Actie":[ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource":"arn:aws:logs:*:*:*" }, { "Effect":"Allow", "Action":[ "iot:UpdateThingShadow" ], "Resource" :"*" } ]} 

Om op te slaan drukt u op de knop "Toevoegen" en keert u terug naar Functie maken pagina en selecteer lambda_basic_execution in Bestaande rol veld.

2.4.- De TestSkillLambda functie is gemaakt en u ziet de ontwerperpagina.

2.5.- Kies uit de linker menubalk Alexa Skills Kit en voeg het toe aan triggers toevoegen afgebakend gebied.

Klik op Alexa Skills Kit en scrol omlaag naar triggers configureren optie, selecteer Inschakelen en in Vaardigheids-ID veld kopieer en plak Applicatie-ID waarde later opslaan, zie tutorial sectie nummer 1.3.

Op dit moment koppelen we de lambda-functie aan de vaardigheid met behulp van de applicatie- of vaardigheids-ID.

Druk op de knop "Opslaan" en Alexa Skills Kit worden opgeslagen en functioneren lambda bekende vaardigheid en zijn gekoppeld.

2.6.- Scroll naar beneden naar Functiecode sectie en stel velden in:

  • Type code-invoer:Upload een .zip-bestand
  • Runtime: Node.js 6.10
  • Druk op de knop "Uploaden " om functiecode te uploaden met het bestand data.zip .

De code-editor wordt geopend en u ziet de mappen en bestanden die zijn geüpload.

Selecteer het bestand index.js het bevat alle functie lambda-implementatie.

U moet regel 23 wijzigen, dezelfde Applicatie-ID kopiëren en plakken later gebruikt in tutorial sectie nummer 1.3.

Druk op de knop "Opslaan" en de lambda-functie werd geactiveerd om vaardigheidscomma's te ontvangen.

var APP_ID =amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb 

Bovenaan de pagina boven de knop "Opslaan" ziet u de ARN (Amazon Resource Name) het is de ID van de lambda-functie dan zullen we deze gebruiken bij Configuratie sectie op de Vaardigheidspagina.

3.- Terug naar vaardigheidsdefinitie

3.1.- Selecteer Configuratie sectie, bij EndPoint selecteer AWS Lambda ARN, kopieer en plak de bovenstaande ARN-tekenreeks in Standaard veld. Dit is de laatste actie om vaardigheid en lambda-functie te koppelen, vaardigheid bekenden functie lambda en zijn gekoppeld.

3.2.- Scroll naar beneden naar Account koppelen sectie en kopieer de eerste twee Omleidings-URL's, je hebt ze nodig om het beveiligingsprofiel te configureren.

Voordat we verder gaan met de vaardigheidsconfiguratie, moeten we een beveiligingsprofiel definiëren dat wordt gebruikt om de vaardigheid en het Amazon-account in de Alexa-app te koppelen.

4.- Beveiligingsprofiel maken

Selecteer op dezelfde ontwikkelaarsconsole die is gebruikt om een ​​vaardigheid te maken, Apps &Services en Log in met Amazon en druk op de knop "Maken een Nieuw Beveiliging Profiel"

4.1.- Beveiligingsprofielbeheer pagina laat je een profiel maken met alle OAuth 2.0-beveiliging om de vaardigheid te koppelen aan je Amazon-account.

4.2.- Vul alle velden met deze gegevens:

  • Naam beveiligingsprofiel :TestSkillProfile
  • Beschrijving van beveiligingsprofiel :Profiel gebruikt door TestSkill
  • URL voor toestemming privacyverklaring :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 dit is een voorbeeld dat u moet gebruiken.
  • Klik op de knop "Opslaan".

4.3.- Wanneer u alle gegevens opslaat of het beveiligingsprofiel bewerkt, tonen twee nieuwe velden belangrijke gegevens, Client-ID en Cliëntgeheim . Je hebt ze nodig voor het configureren van eindvaardigheden.

4.4.- Definieer de URL's van de witte lijst, selecteer het tabblad Webinstellingen.

  • Toegestane oorsprong :https://layla.amazon.com en https://pitangui.amazon.com
  • Toegestane retour-URL's :voeg de eerste twee url's uit sectie 3.2 toe

5.- Vaardigheden maken afmaken

5.1.- Keer terug naar de vaardigheidsdefinitie, selecteer Configuratie sectie en scrol omlaag naar Account koppelen .

  • Staat u toe dat gebruikers een account maken :Selecteer Ja
  • Autorisatie-URL :https://www.amazon.com/ap/oa/?redirect_url=UUUUUU Waar "UUUUUU" staat, moet u dit vervangen door een van de Redirect URL's van verder naar beneden op de pagina. De link ziet er ongeveer zo uit https://www.amazon.com/ap/oa/?redirect_url=https://layla.amazon.com/api/skill/link/UUUUUU
  • Klant-ID :kopieer en plak Client-ID uit sectie 4.3.
  • Reikwijdte :profiel , zie uitleg op deze url.

5.2.- Ga verder met het koppelen van accounts:

  • Type machtigingssubsidie :Auth Code Grant
  • Token-URI openen :https://api.amazon.com/auth/o2/token
  • Cliëntgeheim :kopieer en plak Client Secret uit sectie 4.3.
  • URL privacybeleid :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 dit is een voorbeeld dat u moet gebruiken.
  • Klik op de knoppen "Opslaan" en "Volgende"

5.3.- Globale velden is de sectie die wordt gebruikt om de vaardigheid te documenteren.

  • Selecteer een categorie waar je vaardigheden in de winkel kunt vinden wanneer je gecertificeerd bent , "Smart Home"
  • Testinstructies
  • Vaardigheden zijn in alle landen beschikbaar .
  • Korte beschrijving
  • Volledige vaardigheidsbeschrijving
  • Voorbeeldzinnen
  • Enkele trefwoorden die de vaardigheid definiëren
  • Png o Jpg-pictogram 108x108 pixels
  • Png o Jpg-pictogram 512x512 pixels

5.4.- Laatste sectie Privacy &Compliance

6.- Installeer TestSkill in de Alexa-app

6.1- Wanneer je de vaardigheid opslaat, kun je naar de Alexa-app gaan op https://alexa.amazon.com/ selecteer in het linkerbalkmenu de optie Vaardigheden , klik op de knop rechtsboven "Jouw vaardigheden" en het filter Dev Skills je kunt TestSkill . zien kaart. Let op het vereiste bericht voor het koppelen van het account.

6.2.- Als u op de kaart klikt, wordt de TestSkill beschrijvingspagina toont alle informatie over de vaardigheid, klik op de knop "Inschakelen".

6.3.- Vanwege de vereiste definitie van accountkoppeling, moet u doorverwijzen naar de pagina met inloggegevens van Amazon om vaardigheden aan uw Amazon-account te koppelen.

Als de aanmeldingsgegevens zijn gevalideerd, ziet u deze pagina die aangeeft dat die vaardigheid is gekoppeld aan uw Amazon-account.

6.4.- De vaardigheid is voltooid, geïnstalleerd en gekoppeld aan uw Amazon-account en verbonden met de Lambda-functie.

Je kunt testen, zeg Alexa, vraag Testvaardigheid en je ziet het welkom bij Arduino Home Controller omdat alle dialogen hetzelfde zijn.

Config Arduino Yun

Als het de eerste keer is dat u Arduino Yun gebruikt, moet u dit voorbereiden voordat u de schets uploadt.

Ik raad aan om de Greg Baugues-gids of tutorial te raadplegen Aan de slag met de Arduino Yun - de Arduino met WiFi. Met dank aan Hackster-gebruiker @BenEagen voor het vinden van deze handleiding.

Om een ​​foto te maken en er een e-mail mee te verzenden, moeten we extra software installeren. We gaan ook de USB-camera testen om te zien of de stuurprogramma's correct werken. Sluit de USB-webcam aan op de USB-poort van Arduino Yun.

Om dat te doen maak je verbinding met Arduino Yun met een terminal:

ssh [email protected] 

Het standaardwachtwoord is arduino.

Als de verbinding in orde is, ziet u de OpenWRT Linux-prompt:

Installeren afbeelding genereren software

Begin met een update van de pakketbeheerder:

opkg-update 

Installeer de UVC-stuurprogramma's:

opkg installeer kmod-video-uvc 

Installeer python-openssl pakket:

opkg installeer python-openssl 

We hebben ook het hulpprogramma fswebcam nodig dat we zullen gebruiken om foto's te maken vanaf de terminal:

opkg fswebcam installeren 

Zorg ervoor dat de SD-kaart in Arduino Yun is gemount, je kunt het testen voer dit commando uit:

mount 

Als je in de apparatenlijst er een ziet, zoals /dev/sda1 op /mnt/sda1, typ dan vfat SD-kaart is in orde.

Het is heel eenvoudig om de camera te testen en een foto te maken. Typ gewoon:

cd /mnt/sda1fswebcam test.png 

Je zou wat informatie moeten zien worden weergegeven, samen met enkele fouten, maar maak je daar geen zorgen over. Het belangrijkste is om deze regels te zien:

--- Openen /dev/video0...Probeer bronmodule v4l2.../dev/video0 geopend. 

Om te controleren of de foto correct is genomen, verwijdert u de SD-kaart uit de Arduino Yun en leest u deze uit met uw computer. Je zou de afbeelding moeten zien verschijnen in de root van de SD-kaart "test.png ".

Open het gewoon om er zeker van te zijn dat het correct is genomen en dat het niet beschadigd is.

Installeren e-mailsoftware verzenden

Met de SD in uw computer kopieert u het python-bestand AHC_SendEmail.py en wijzigt u uw e-mailadres en wachtwoord van een Gmail-account op regels 11, 12 en 13, als u een andere e-mailprovider heeft, wijzigt u de serverinformatie op regel 36.

Pak SD uit van de computer en plaats het in het SD-slot in Arduino Yun. Voer bij terminal aangesloten op Arduino Yun de commando's uit:

cd /mnt/sda1python /mnt/sda1/AHC_SendEmail.py /mnt/sda1/ test.png 

Als alles in orde is, moet u een e-mail ontvangen met uw foto.

Verbind alle apparaten met Arduino Yun

Sluit op basis van een elektronisch schema alle apparaten aan, vooral de DHT11-sensor, omdat we deze nodig hebben om temperatuur en vochtigheid en zoemer te lezen om het alarmgeluid te testen.

Installeren de schets bestand ArduinoHomeMQTT.ino

Ik maak een libraries.zip bestand met alle bibliotheken die dit bestand nodig heeft, kunt u het downloaden van mijn GitHub-site en uitpakken in de Arduino IDE-bibliothekenmap.

Bibliotheken die zijn opgenomen in de libraries.zip binnen ArduinoHomeMQTT map.

ArduinoJson --> gebruikt om Json te manipuleren contentDHT_sensor_library --> gebruikt om DHT te verwerken sensorpubsubclient-master --> gebruikt om verbinding te maken, te publiceren en te abonneren op PubNub(c) 

Open Arduino IDE 1.6.x, selecteer in tools "Board:Arduino Yun".

Laad het bestand ArduinoHomeMQTT.ino en in de IDE-wijzigingsregel 16 met uw Amazon-e-mailadres dat wordt gebruikt wanneer het gekoppelde account in de Amazon App-vaardigheid is ingeschakeld.

Deze optie identificeert uw controller wanneer AWS een MQTT-bericht naar de broker stuurt.

Verander regel 50 met uw uuid om uw controller te identificeren in PubNub(c), u kunt naar deze site gaan en kopieer een online gegenereerde uuid.

Sla nu de schets op en upload deze en wanneer u het Arduino IDE-monitorvenster opent, ziet u Arduino Yun verbonden met PubNub(c) broker en de sensor geïnitialiseerd.

Test alle uitingen van Alexa Echo Dot

De Alexa-vaardigheid "Arduino Home Controller " vaardigheid deze lijst met uitingen afhandelen , je kunt ze zien bij Alexa App-vaardigheid in het beschrijvingsgedeelte. Je kunt alles testen en met Arduino ID alle ontvangen berichten zien en naar PubNub(c) broker sturen.

Lichtregeling:

==> "Alexa, vraag arduino home om kamerverlichting aan te doen"==> "Alexa, vraag arduino home om kamerverlichting uit te doen"==> "Alexa, vraag arduino home om keukenverlichting aan te doen "==> "Alexa, vraag arduino home om de keukenverlichting uit te doen"==> "Alexa, vraag arduino home om de garageverlichting aan te doen"==> "Alexa, vraag arduino home om de garageverlichting uit te schakelen"==> " Alexa, vraag arduino home om het licht in de woonkamer aan te doen"==> "Alexa, vraag arduino home om het licht in de woonkamer uit te doen" 

Alarmcontrole:

==> "Alexa, vraag Arduino Home om het alarm in te schakelen"==> "Alexa, vraag Arduino Home om het alarm uit te schakelen" 

Scantemperatuur en vochtigheid:

==> "Alexa, vraag arduino home om de temperatuur te lezen"==> "Alexa, vraag arduino home om de vochtigheid te lezen" 

Maak een beveiligingsfoto:

==> "Alexa, vraag arduino home om een ​​foto te maken" 

Over en hulp

==> "Alexa, vraag arduino home over"==> "Alexa, vraag arduino home help" 

Softwaredetails

Je kunt alle bestanden voor dit project downloaden van mijn Github-site.

Mappen bevatten uitleg

ArduinoHomeMQTT --> ino-bestand en bibliotheken voor Arduino Yun Home Controller

lambda --> Lambda-functie in Node.js die moet worden ingezet in AWS Lambda, bevat alle benodigde node_modules, zie optie 2 in het gedeelte Alle software installeren.

python --> python-bestand voor het verzenden van e-mail met bijgevoegde foto.

schema --> Fritzing(c) elektronisch schemabestand.

Arduino Home Controller-workflow toon jij hoe bestanden samenwerken .

( 1 ) Amazon Echo Dot stuurt een opdrachtstem en deze wordt ontvangen door Arduino Home Controller-vaardigheid.

( 2 ) De vaardigheidsaanroep Lambda-functiebestand index.js .

( 3 ) Het Lambda-functiebestand is ontwikkelaar in Node.Js, gebruikt enkele knooppuntmodules en werd gehost bij Amazon Web Service (AWS).

( 4 ) De lambda-functie interpreteert alle intenties en converteert ze naar het MQTT Json-bericht en stuurt het naar PubNub(c) broker. Dit bericht heeft het formaat :

{ "topic" :Topic_xxxx, "command" :aan of uit, "id" :e-mailadres} 

Het onderwerp Topic_xxxx kan zijn:

Topic_room --> licht in de kamer aan/uitTopic_livingroom --> licht in de woonkamer aan/uitTopic_kitchen --> licht in de keuken aan/uitTopic_garage --> licht in de garage aan/uitTopic_alarm -->aan/uitschakelen uit alarmTopic_temperature --> lees temperatuurTopic_humidity --> lees vochtigheidTopic_photo --> foto maken en verzenden per e-mail 

De opdracht is mogelijk aan of uit .

( 5 ) Het bericht wordt verzonden via kanaal AHC_IOC_01. Kanaal AHC_IOC_02 wordt gebruikt om temperatuur- of vochtigheidswaarden te ontvangen.

( 6 ) The Arduino Yun sketch ArduinoHomeMQTT.ino connect to broker and subscribe or publish to channels and receive or send messages.

( 7 ) Using a bridge the arduino sketch communicate with linux OpenWRT for wan or lan connect and to execute some commands.

( 8 ) If arduino need send an email uses the python file AHC_SendEmail.py , if needs take a photo call fswebcam programs located inside linux OpenWRT.

Hardware details

The heart of hardware is the Arduino Yun.

It uses several digital pins to control each device :

Pin 2 :connected to DHT11 sensorPin 8 :activate the buzzer alarm with help of NPN transistor Pin 9 :control room lightPin 10:control kitchen lightPin 11:control garage lightPin 12:control living room light 

The webcam is connected to usb port.

To power all devices the controller use 12 volts Dc power and convert to 5 volts using an Dc to Dc power converter.

I make an arduino shield using the Arduino Proto Shield with all connectors and interface electronic to sensor, buzzer alarm and power supply. It have space for new sensors to extending the controller.

Put the Arduino Yun, Proto shield, Relays and power regulator inside a plastic box with alarm, webcam and sensor outside, and make all connections like mention in electronic schematic.

For demo and video propose I use four leds in prothoboard simulating light bulbs in each house rooms.

Thanks for read this guide, I appreciate your time, If you have any suggestions please contact me.

I make this project in memory of my Dad, he dieds last year, R.I.P Dad.

Code

  • ArduinoHomeMQTT.ino
  • AHC_SendEmail.py
  • index.js
ArduinoHomeMQTT.inoArduino
Arduino Yun software for Home Controller
//// ArduinoHomeMQTT// v2.1//// Copyright (C)2018 Jose Cruz. All right reserved// web:https://sites.google.com/view/raeiot/home//#include #include #include #include #include // Your Amazon email linked skill#define MyID "YOUR AMAZON EMAIL LINKED IN ALEXA APP"// DHT11 sensor data pin#define DHTPIN 2// DHT 11 sensor type#define DHTTYPE DHT11// Initialize DHT sensorDHT dht(DHTPIN, DHTTYPE);// Alarm control pin#define alarm 8// Light control pins#define room_light 9#define kitchen_light 10#define garage_light 11#define livingroom_light 12// PubNub MQTT Server address and portint mqtt_server_port =1883;const char* mqtt_server ="mqtt.pndsn.com";// Suscribe topicconst char* topic ="AHC_IOT_01";// Publish topicconst char* topic2 ="AHC_IOT_02";// PubNub publisher ID// pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/// PubNub suscriber ID// sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/// UUID generated onlyne https://www.uuidgenerator.net/// // PubNub Client ID// clientId =pubID + subID + uuid;c onst char* clientId ="pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/YOUR UUID GENERATED";// Define de Yun ethernet clientYunClient ethClient;// Define PubNub pub and sub clientPubSubClient client(ethClient);// Picture processProcess picture;// FilenameString filename;// Path for image fileString path ="/mnt/sda1/";// Create an image file and sent by emailvoid TakePhoto() { // Generate filename with timestamp filename =""; picture.runShellCommand("date +%s"); while (picture.running()); while (picture.available()> 0) { char c =picture.read(); filename +=c; } filename.trim(); filename +=".jpg"; // Take picture picture.runShellCommand("/usr/bin/fswebcam -i 0 --jpeg 95 --no-banner --fps 1 -S 1 -r 352x288 --save " + path + filename); while (picture.running()); //Send it by email picture.runShellCommand("python /mnt/sda1/AHC_SendEmail.py " + path + " " + filename); while (picture.running());}//***********************// Send temperature//***********************void SendTemperature(){ char cstr[16]; // Read temperature as Celsius (the default) float t =dht.readTemperature(); // Serial.print("Temperature:"); // Serial.print(t); // Serial.println(" *C"); client.publish(topic2, itoa(t, cstr, 10)); //Serial.print("Temperature sent..."); //Serial.println(cstr);}//***********************// Send humidity//***********************void SendHumidity(){ char cstr[16]; float h =dht.readHumidity(); //Serial.print("Humidity:"); //Serial.print((int)h); //Serial.print(" %\t"); client.publish(topic2, itoa(h, cstr, 10)); //Serial.print("Humidity sent..."); //Serial.println(cstr);}//Callback function for msg receive handlevoid callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i =0; i  jsonBuffer; JsonObject&root =jsonBuffer.parseObject((char[])payload); String alexa_topic =root["topic"]; String alexa_command =root["command"]; String alexa_id =root["id"]; //Serial.println(alexa_topic); //Serial.println(alexa_command); if (alexa_id.equals(MyID)) { //Handle all received msgs topic from MQTT if (alexa_topic.endsWith("Topic_room")) { digitalWrite(room_light, (alexa_command.endsWith("on") ? LOW :HIGH)); } else if (alexa_topic.endsWith("Topic_kitchen")) { digitalWrite(kitchen_light, (alexa_command.endsWith("on") ? LOW :HIGH)); } else if (alexa_topic.endsWith("Topic_garage")) { digitalWrite(garage_light, (alexa_command.endsWith("on") ? LOW :HIGH )); } else if (alexa_topic.endsWith("Topic_living room")) { digitalWrite(livingroom_light, (alexa_command.endsWith("on") ? LOW :HIGH)); } else if (alexa_topic.endsWith("Topic_temperature")) { SendTemperature(); } else if (alexa_topic.endsWith("Topic_humidity")) { SendHumidity(); } else if (alexa_topic.endsWith("Topic_alarm")) { digitalWrite(alarm, (alexa_command.endsWith("on") ? HIGH :LOW)); } else if (alexa_topic.endsWith("Topic_photo")) { TakePhoto(); } }}//Reconnect to MQTT broker if lost connectionvoid reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect(clientId)) { Serial.println("MQTT broker connected"); client.subscribe(topic); } else { Serial.print("Failed, rc ="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } }}void setup(){ Bridge.begin(); vertraging (2000); Serieel.begin(115200); Serial.println("Init Arduino Home Controller v2.1..."); pinMode(alarm, OUTPUT); pinMode(room_light, OUTPUT); pinMode(kitchen_light, OUTPUT); pinMode(garage_light, OUTPUT); pinMode(livingroom_light, OUTPUT); digitalWrite(room_light, HIGH); digitalWrite(kitchen_light, HIGH); digitalWrite(garage_light, HIGH ); digitalWrite(livingroom_light, HIGH); // Define PubNub MQTT broker client.setServer(mqtt_server, mqtt_server_port); client.setCallback(callback); client.connect(clientId); Serial.println("Connected to PubNub MQTT broker OK ..."); client.subscribe(topic); Serial.println("Suscribe to topic at MQTT broker Ok ..."); dht.begin(); //Wait for sensor initialize delay(4000); Serial.println("DHT sensor Ok ...");}void loop(){ if (!client.connected()) { reconnect(); } client.loop();}
AHC_SendEmail.pyPython
File to be installed in Arduino Yun OpenWRT linux to help send email with attached photo
import smtplibimport sysimport timefrom email.MIMEMultipart import MIMEMultipartfrom email.MIMEText import MIMETextfrom email.MIMEBase import MIMEBasefrom email import encoders fromaddr ="[email protected]"toaddr ="[email protected]"emailpassword ="YOUR PASSWORD"subject ="Arduino Home Controller by Alexa Skill"body ="Photo taken in " + time.strftime('%a, %d %b %Y %H:%M:%S %Z(%z)')filedir =sys.argv[1]filename =sys.argv[2]msg =MIMEMultipart() msg['From'] =fromaddrmsg['To'] =toaddrmsg['Subject'] =subject msg.attach(MIMEText(body, 'plain')) attachment =open(filedir + filename, "rb") part =MIMEBase('application', 'octet-stream')part.set_payload((attachment).read())encoders.encode_base64(part)part.add_header('Content-Disposition', "attachment; filename=%s" % filename) msg.attach(part) server =smtplib.SMTP('smtp.gmail.com', 587)server.starttls()server.login(fromaddr, emailpassword)text =msg.as_string()server.sendmail(fromaddr, toaddr, text)server.quit()
index.jsJavaScript
AWS Lambda Function if you select option 2, build your own skill
// Alexa SDK for Arduino Home Controller// Copyright (c) 2014-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. Use is subject to license terms.// Jose Cruz https://sites.google.com/view/jriot // Define connection to PubNub var PubNub =require("pubnub");var pubnub =new PubNub({ ssl:true, publish_key:"pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7", subscribe_key:"sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb", uuid:"YOUR UUID"});// Define the PubNub channelvar channel ='AHC_IOT_01';// Used to receive some values (temperature, humidity)var channel2 ='AHC_IOT_02';// Define slot states for light and alarm turn on/offvar slotStates =['on', 'off'];// App ID for the skillvar APP_ID ='YOUR APP ID FOR THE SKILL';// The AlexaSkill prototype and helper functionsvar AlexaSkill =require('./AlexaSkill');var ArduinoHomeSkill =function() { AlexaSkill.call(this, APP_ID);};//Listener for suscribe and receive temperature and humidityvar mqttListener;var access_token;var url;var https =require("https");function SendMessage(topicname, commandvalue, speechOutput, iresponse) { https.get(url, res => { res.setEnc oding("utf8"); let body =""; res.on("data", data => { body +=data; }); res.on("end", () => { pubnub.publish({ //Publishes the turn message to my PubHub Device. channel:channel, message:{ "topic":topicname, "command":commandvalue, "id":JSON.parse(body).email } }).then((response) => { console.log("message Published w/ timetoken", response.timetoken); if (speechOutput) iresponse.tell(speechOutput); }).catch((error) => { console.log("publishing failed w/ status:", error); iresponse.ask("Sorry, I didn't catch what you said"); }); }); });}/// Extend AlexaSkillArduinoHomeSkill.prototype =Object.create(AlexaSkill.prototype);ArduinoHomeSkill.prototype.constructor =ArduinoHomeSkill;ArduinoHomeSkill.prototype.eventHandlers.onSessionStarted =function(sessionStartedRequest, session) { // SetUserID(); console.log("ArduinoHomeSkill onSessionStarted requestId:" + sessionStartedRequest.requestId + ", sessionId:" + session.sessionId); // console.log("Init..."); //Delete all listeners and suscribes defined pubnub.removeListener(mqttListener); pubnub.unsubscribeAll(); // console.log("Init...Ok");};//-------->This is invoked by invocation word "Arduino Home"ArduinoHomeSkill.prototype.eventHandlers.onLaunch =function(launchRequest, session, response) { console.log("ArduinoHomeSkill onLaunch requestId:" + launchRequest.requestId + ", sessionId:" + session.sessionId); //if no amazon token, return a LinkAccount card if (session.user.accessToken ==undefined) { response.tellWithCardLink('To start using this skill, please use the companion app to authenticate on Amazon.'); opbrengst; } var speechOutput ="Welcome to Arduino Home Controller. What would you like to do?"; var repromptText ="I am ready"; response.ask(speechOutput, repromptText);};ArduinoHomeSkill.prototype.eventHandlers.onSessionEnded =function(sessionEndedRequest, session) { console.log("ArduinoHomeSkill onSessionEnded requestId:" + sessionEndedRequest.requestId + ", sessionId:" + session.sessionId); console.log("End...");};//*** Define all intent handlersArduinoHomeSkill.prototype.intentHandlers ={ //*** AboutIntent handler "AboutIntent":function(intent, session, response) { var myText; console.log("in about"); myText ="Arduino Home Controller skil let you control internet connected devices. It controls Lights at room, kitchen, garage or living room), read a temperature sensor to scan home temperature, read Humidity sensor to scan home humidity, uses webcam to take a home security photo and sent it by email and activate an alarm to alert some events. It uses PubNub site to manipulate all messages send by Alexa with Lambda function. Please check information at skill page for more details. What would you like to do?"; response.ask(myText); opbrengst; }, //*** LightIntent handler "LightIntent":function(intent, session, response) { var slotHabRooms =['room', 'kitchen', 'garage', 'living room']; var lightSlot =intent.slots.light; var lightSlotValue =lightSlot ? lightSlot.value :""; var whichSlot =intent.slots.which; var whichSlotValue =whichSlot ? whichSlot.value :""; if (lightSlotValue &&whichSlotValue &&slotStates.indexOf(lightSlotValue.toLowerCase())> -1 &&slotHabRooms.indexOf(whichSlotValue.toLowerCase())> -1) { SendMessage('Topic_' + whichSlotValue, lightSlotValue, "The light is now " + lightSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** AlarmIntent handler "AlarmIntent":function(intent, session, response) { var alarmSlot =intent.slots.alarm; var alarmSlotValue =alarmSlot ? alarmSlot.value :""; if (alarmSlotValue &&slotStates.indexOf(alarmSlotValue.toLowerCase())> -1) { SendMessage('Topic_alarm', alarmSlotValue, "The alarm is now " + alarmSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** TakePhotoIntent handler "TakePhotoIntent":function(intent, session, response) { SendMessage('Topic_photo', 'take', "Taken home photo ", response); }, //*** GetTemperatureIntent handler "GetTemperatureIntent":function(intent, session, response) { mqttListener ={ status:function(statusEvent) {}, message:function(message) { // handle message console.log("Receive=", message); var myText ="Inside Temperature is " + message.message + " degrees C"; response.tell(myText); }, presence:function(presenceEvent) { // handle presence } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels:[channel2] }); SendMessage('Topic_temperature', 'Ok', null, response) }, //*** GetTemperatureIntent handler "GetHumidityIntent":function(intent, session, response) { mqttListener ={ status:function(statusEvent) {}, message:function(message) { // handle message console.log("Receive=", message); var myText ="Inside Humidity is " + message.message + " %"; response.tell(myText); }, presence:function(presenceEvent) { // handle presence } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels:[channel2] }); SendMessage('Topic_humidity', 'Ok', null, response) }, //*** HelpIntent handler "AMAZON.HelpIntent":function(intent, session, response) { response.ask("With Arduino Home Controller skill and Alexa you can control internet connected devices using an Arduino Yun or Arduino with Ethernet Shield. Please check information at skill page for more details. What would you like to do?"); }, //*** StopIntent handler "AMAZON.StopIntent":function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, //*** StopIntent handler "AMAZON.CancelIntent":function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, default:function(intent, session, response) { response.ask("Try again"); },};// Create the handler that responds to the Alexa Request.exports.handler =function(event, context) { try { access_token =event['context']['System']['user']['accessToken']; url ='https://api.amazon.com/user/profile?access_token=' + access_token; //console.log("Access Token:", access_token); } catch (error) { console.log(error); } // Create an instance of Arduino Home Skill var ArduinoHomeControl =new ArduinoHomeSkill(); ArduinoHomeControl.execute(event, context); //console.log('AWSrequestID =', context.awsRequestId);};
Github
https://github.com/jcruzp/ArduinoHomeController

Schema's

Main board with reles, temperature and humidity sensor, buzzer alarm and webcam.

Productieproces

  1. Web-gestuurde DMX-controller
  2. Arduino digitale dobbelstenen
  3. Arduino-gamecontroller
  4. Pixel Chaser-game
  5. Bewateringssysteem voor planten voor thuis
  6. Arduino afstotende elektromagnetische levitatie
  7. Vacuüm TL-beeldschermcontroller
  8. Autonome Home Assistant-robot
  9. NeoMatrix Arduino Pong
  10. Arduino DMX-512-testcontroller
  11. LED-roulettespel