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

Contrôleur domestique Arduino activé par Alexa

Composants et fournitures

Arduino Yun
× 1
ControlEverything.com CONTRLEUR DE RELAIS 4 CANAUX POUR I2C
× 1
Capteur de température et d'humidité DHT11 (4 broches)
× 1
Résistance 10k ohm
× 2
SparkFun RedBot Buzzer
× 1
Transistor à usage général NPN
× 1
Convertisseur DC à DC Buck LM2596
× 1
Amazon Alexa Echo Dot
× 1
Arduino Proto Shield
× 1
WebCam USB
× 1
Boîte de jonction blanche 200mmx155mmx80mm
× 1

Outils et machines nécessaires

Fer à souder (générique)

Applications et services en ligne

Arduino IDE
Kit de compétences Amazon Alexa Alexa
Amazon Web Services AWS Lambda
API de publication/abonnement PubNub

À propos de ce projet

Présentation

Lorsqu'Amazon lance sur le marché Alexa et des appareils comme Amazon Echo Dot, un nombre infini d'options s'ouvrent pour créer une grande maison intelligente contrôlée par des commandes vocales à l'aide d'un langage naturel.

Ce projet crée un contrôleur domestique Arduino qui peut connecter de nombreux capteurs et appareils à Internet et vous pouvez les contrôler à l'aide d'une compétence Amazon Alexa.

Vous pouvez installer et activer ma skill "Arduino Home Controller " l'étape facile, ou vous pouvez faire vos compétences guidées par ce tutoriel.

Pour l'instant on va contrôler :

  • Quatre lumières dans la chambre, le garage, la cuisine et le salon.
  • Capteur de température et d'humidité.
  • Avertisseur sonore.
  • WebCam pour prendre une photo de sécurité et l'envoyer par e-mail.

Vous pouvez voir Arduino Home Controller en action dans cette courte vidéo de démonstration. Pour la démo et la vidéo, j'utilise quatre leds dans le prothoboard simulant des ampoules dans chaque pièce de la maison.

Si vous souhaitez utiliser des modules distants pour activer vos lumières, vous pouvez afficher mes modules distants Arduino Home Controller projet à cette URL.

Schéma fonctionnel

Dans l'image du schéma fonctionnel on peut voir les quatre composantes principales de ce projet :

1.- Amazon Echo Dot pour recevoir des commandes vocales et les envoyer à AWS (Amazon Web Service).

2.- AWS avec une compétence Amazon et une fonction Lambda pour interpréter toutes les commandes.

Le nom de la compétence est "Arduino Home Controller " vous pourrez l'activer plus tard.

3.- Un courtier MQTT en utilisant le cloud PubNub(c).

Ce courtier recevra les messages de contrôle dans deux canaux, un pour les valeurs définies et un autre pour lire les valeurs des capteurs.

Vous n'avez pas besoin de créer un compte dans PubNub, vous pouvez utiliser mon compte pour des propositions de démo.

4.- Contrôleur domestique en utilisant Arduino Yun.

Nous utiliserons Arduino Yun car il contient un bouclier Ethernet et une petite machine Linux sur laquelle nous exécuterons python pour gérer certaines actions.

Il contrôle les relais pour les lumières, lit le capteur de température et d'humidité, active le buzzer pour l'alarme et manipule une webcam pour prendre des photos de sécurité.

Pour les modules distants, consultez mes modules distants Arduino Home Controller complémentaires. projet à cette URL.

Installez tous les logiciels nécessaires

À ce stade, vous pouvez choisir deux options, l'une pour proposer une démonstration, utiliser ma compétence Alexa pour l'installer et l'utiliser ou l'option deux vous permet de créer votre compétence personnelle.

Parcourez l'application Alexa avec cette url , dans cette section, sélectionnez Compétences dans le menu, recherchez Arduino et dans la liste, vous voyez la compétence dont le nom est "Arduino Home Controller ", cliquez dans la carte de compétence et cliquez sur le bouton "Activer" pour installer.

Ou vous devez vous rendre sur Amazon Skill Store en utilisant ce lien et appuyez sur le bouton "Activer"

Vous devez lier votre compte Amazon car nous utiliserons votre adresse e-mail comme identifiant pour toutes les commandes envoyées à Arduino. Notez que nous n'utiliserons pas cette adresse pour envoyer des e-mails, nous l'utiliserons uniquement comme identifiant.

Skill est installé et lié au compte Amazon et connecté à ma fonction lambda sur le cloud AWS.

1.- Créer un compétence

Vous devez vous inscrire et créer un compte développeur gratuit sur le site https://developer.amazon.com/home.html

1.1.- Une fois que la connexion va à Alexa option de menu et sélectionnez dans Alexa Skills Kit le bouton "Commencer"

1.2.- Cliquez ensuite sur le bouton "Ajouter une nouvelle compétence" pour créer une nouvelle compétence.

1.3.- À Créer une nouvelle compétence Alexa section, vous devez :

  • Sélectionnez :Modèle d'interaction personnalisé
  • Langue Anglais américain
  • Nom TestSkill est le nom de la compétence utilisé pour rechercher dans le magasin.
  • Nom d'appel Compétence de test est le nom pour commencer les commandes vocales comme Alexa Ask, Test Skill pour activer l'alarme
  • Tous les champs globaux sont définis sur Aucune option
  • Cliquez sur "Enregistrer"

La nouvelle skill a été créée et vous voyez un nouveau champ Application Id

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

Il est utilisé pour le lien entre la compétence et la fonction lambda, nous l'utilisons plus tard dans la section 2.5 du didacticiel.

1.4.- Le modèle d'interaction définit ici comment vous interagissez avec la compétence en fonction de la définition des intentions, des emplacements et des énoncés.

Au Modèle d'interaction option de menu copiez et collez ce schéma Json dans Intent Schema.

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

Définissez certains emplacements nécessaires comme les États et les HabRooms dans les types d'emplacements personnalisés.

Définissez tous les énoncés comme un modèle de conversation dans Exemples d'énoncés , copiez et collez cette liste.

LightIntent Turn {which} light {light}LightIntent Set {which} light {light}AlarmIntent Turn alarm {alarm}TakePhotoIntent Prendre une photoTakePhotoIntent Prendre une photo de sécuritéGetTemperatureIntent Lire la températureGetHumidityIntent Lire l'humiditéAboutIntent Parlez-moi deAboutIntent À propos 

Avant continue avec la section suivante, Configuration, nous devons avoir créé notre fonction Lambda car nous devons lier à la fois la compétence et la fonction lambda.

2.- Crée une fonction Lambda

Vous devez vous inscrire et créer un compte sur la console AWS en utilisant l'url https://aws.amazon.com/console/

2.1.- Sélectionnez Services dans haut menu et Lambda dans le menu de la barre de gauche.

2.2.- Sélectionnez dans la barre de gauche Fonction et cliquez sur le bouton "Créer une fonction".

2.3.- Paramétrer ces données :

  • Cliquez Auteur à partir de zéro
  • Nom : TestSkillLambda
  • Durée d'exécution : Node.js.6.10
  • Rôle : Créer un rôle personnalisé

Cela ouvrira une nouvelle fenêtre dans laquelle vous devrez sélectionner les valeurs suivantes :

  • Rôle IAM : Lambda_Basic_Execution
  • Nom de la politique : "Créer une nouvelle politique de rôle", puis modifiez la politique et collez ce qui suit :
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Autoriser", "Action":[ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource":"arn:aws:logs:*:*:*" }, { "Effect":"Allow", "Action":[ "iot:UpdateThingShadow" ], "Resource" :"*" } ]} 

Pour enregistrer, appuyez sur le bouton "Ajouter" et revenez à Créer une fonction page et sélectionnez lambda_basic_execution dans Rôle existant champ.

2.4.- Le TestSkillLambda fonction a été créée et vous voyez sa page de concepteur.

2.5.- Sélectionnez dans la barre de menu de gauche Kit de compétences Alexa et ajoutez-le à ajouter des déclencheurs zone délimitée.

Cliquez sur Kit de compétences Alexa et faites défiler jusqu'à Configurer les déclencheurs option, sélectionnez Activer et dans Skill ID champ copier et coller ID d'application valeur enregistrer plus tard, voir la section tutoriel numéro 1.3.

À l'heure actuelle, nous relions la fonction lambda à la compétence à l'aide de l'ID d'application ou de compétence.

Appuyez sur le bouton "Enregistrer" et Kit de compétences Alexa sont enregistrés et fonctionnent avec la compétence connue lambda et sont liés.

2.6.- Faites défiler jusqu'à Code de fonction section et définir les champs :

  • Type d'entrée de code :Télécharger un fichier .zip
  • Durée d'exécution : Node.js 6.10
  • Appuyez sur le bouton "Télécharger " pour télécharger le code de la fonction à l'aide du fichier data.zip .

L'éditeur de code s'ouvrira et vous verrez les dossiers et fichiers téléchargés.

Sélectionnez le fichier index.js il contient toutes les implémentations lambda de fonction.

Vous devez modifier la ligne 23, copier et coller le même ID d'application utilisé plus tard dans la section du didacticiel 1.3.

Appuyez sur le bouton "Enregistrer" et la fonction lambda a été activée pour recevoir des commandes de compétences.

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

En haut de la page au-dessus du bouton "Enregistrer", vous verrez l'ARN (Amazon Resource Name) c'est l'ID de la fonction lambda que nous l'utiliserons dans la Configuration section sur la page des compétences.

3.- Retour à la définition de la compétence

3.1.- Sélectionnez Configuration section, à EndPoint sélectionnez AWS Lambda ARN, copiez et collez la chaîne ARN ci-dessus dans Default domaine. C'est la dernière action pour lier la compétence et la fonction lambda, la compétence connue fonctionne lambda et est liée.

3.2.- Faites défiler jusqu'à Liaison de compte section et copiez les deux premières URL de redirection vous en avez besoin pour configurer le profil de sécurité.

Avant de continuer avec la configuration des compétences, nous devons définir un profil de sécurité utilisé pour lier la compétence et le compte Amazon dans l'application Alexa.

4.- Créer un profil de sécurité

Dans la même console de développeur utilisée pour créer une compétence, sélectionnez Applications et services et Se connecter avec Amazon et appuyez sur le bouton "Créer un Nouveau Sécurité Profil"

4.1.- Gestion des profils de sécurité La page vous permet de créer un profil avec toute la sécurité OAuth 2.0 pour lier la compétence à votre compte Amazon.

4.2.- Remplissez tous les champs avec ces données :

  • Nom du profil de sécurité :TestSkillProfile
  • Description du profil de sécurité :Profil utilisé par TestSkill
  • URL de l'avis de confidentialité du consentement :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 c'est un exemple que vous devez utiliser le vôtre.
  • Cliquez sur le bouton "Enregistrer".

4.3.- Lorsque vous enregistrez toutes les données ou modifiez le profil de sécurité, deux nouveaux champs affichent des données importantes, Client ID et Secret client . Vous en avez besoin pour la configuration des compétences finales.

4.4.- Définissez les URL de la liste blanche, sélectionnez l'onglet Paramètres Web.

  • Origines autorisées :https://layla.amazon.com et https://pitangui.amazon.com
  • URL de retour autorisées :ajoutez les deux premières URL de la section 3.2

5.- Création de compétences de finition

5.1.- Retour à la définition des compétences, sélectionnez Configuration section et faites défiler jusqu'à Liaison de compte .

  • Autorisez-vous les utilisateurs à créer un compte :Sélectionnez Oui
  • URL d'autorisation :https://www.amazon.com/ap/oa/?redirect_url=UUUUUU Là où il y a "UUUUUU", vous devrez le remplacer par l'une des URL de redirection de plus bas dans la page. Le lien finira par ressembler à ceci https://www.amazon.com/ap/oa/?redirect_url=https://layla.amazon.com/api/skill/link/UUUUUU
  • Identifiant client :copier et coller Client Id de la section 4.3.
  • Portée :profil , voir expliquer à cette URL.

5.2.- Continuer avec l'association de compte :

  • Type de subvention d'autorisation  :Octroi de code d'autorisation
  • URI du jeton d'accès :https://api.amazon.com/auth/o2/token
  • Secret client :copier et coller Client Secret de la section 4.3.
  • URL de la politique de confidentialité :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 c'est un exemple que vous devez utiliser le vôtre.
  • Cliquez sur les boutons "Enregistrer" et "Suivant"

5.3.- Global Fields est la section utilisée pour documenter la compétence.

  • Sélectionnez la catégorie où trouver la compétence en magasin une fois certifié , "Maison Intelligente"
  • Instructions de test
  • Les compétences seront disponibles dans tous les pays .
  • Brève description
  • Description complète de la compétence
  • Exemples de phrases
  • Quelques mots-clés qui définissent la compétence
  • Icône PNG ou Jpg 108 x 108 pixels
  • Icône PNG ou Jpg 512 x 512 pixels

5.4.- Dernière section Confidentialité &Conformité

6.- Installez TestSkill sur l'application Alexa

6.1- Lorsque vous enregistrez la compétence, vous pouvez accéder à l'application Alexa sur https://alexa.amazon.com/ sélectionnez dans le menu de la barre de gauche l'option Compétences , cliquez sur le bouton en haut à droite "Vos compétences" et le filtre Compétences Dev vous pouvez voir TestSkill carte. Notez le message de liaison de compte requis.

6.2.- Si vous cliquez sur la carte le TestSkill la page de description affiche toutes les informations sur la compétence, cliquez sur le bouton "Activer".

6.3.- En raison de la définition requise pour la liaison de compte, vous devez être redirigé vers la page des identifiants de connexion Amazon pour lier la compétence à votre compte Amazon.

Si les informations de connexion sont validées, vous voyez cette page indiquant que la compétence est liée à votre compte Amazon.

6.4.- Les skill sont terminées, installées et liées à votre compte Amazon et connectées à la fonction Lambda.

Vous pouvez tester dites Alexa, demandez Test Skill et vous voyez la bienvenue sur Arduino Home Controller car toutes les boîtes de dialogue sont les mêmes.

Configurer Arduino Yun

Si c'est la première fois que vous utilisez Arduino Yun, vous devez le préparer avant de télécharger le croquis.

Je suggère de voir le guide ou le didacticiel de Greg Baugues Premiers pas avec l'Arduino Yun - l'Arduino avec WiFi. Merci à l'utilisateur de Hackster @BenEagen d'avoir trouvé ce guide.

Afin de prendre une photo et d'envoyer un e-mail avec, nous devons installer un logiciel supplémentaire. Nous allons également tester la caméra USB pour voir si les pilotes fonctionnent correctement. Veuillez connecter la webcam USB au port USB d'Arduino Yun.

Pour ce faire connectez-vous à Arduino Yun avec un terminal :

racine [email protected] 

Le mot de passe par défaut est arduino.

Si la connexion est correcte, vous verrez l'invite OpenWRT Linux :

Installer génération d'images logiciel

Commencez par une mise à jour du gestionnaire de paquets :

mise à jour opkg 

Installez les pilotes UVC :

opkg install kmod-video-uvc 

Installez le package python-openssl :

opkg install python-openssl 

Nous avons également besoin de l'utilitaire fswebcam que nous utiliserons pour prendre des photos depuis le terminal :

opkg install fswebcam 

Assurez-vous que la carte SD est montée dans Arduino Yun, vous pouvez la tester en exécutant cette commande :

monter 

Si vous voyez dans la liste des appareils un comme /dev/sda1 sur /mnt/sda1 tapez vfat La carte SD est OK.

Pour tester l'appareil photo et prendre une photo, c'est vraiment facile. Tapez simplement :

cd /mnt/sda1fswebcam test.png 

Vous devriez voir des informations s'afficher, ainsi que des erreurs, mais ne vous en souciez pas. L'important est de voir ces lignes :

--- Ouverture de /dev/video0...Essai du module source v4l2.../dev/video0 ouvert. 

Pour vérifier que la photo a été correctement prise, retirez la carte SD de l'Arduino Yun et lisez-la à l'aide de votre ordinateur. Vous devriez voir apparaître l'image à la racine de la carte SD "test.png ".

Ouvrez-le simplement pour vous assurer qu'il a été correctement pris et qu'il n'est pas corrompu.

Installer envoyer un logiciel de messagerie

Avec la SD dans votre ordinateur, copiez le fichier python AHC_SendEmail.py et modifiez votre e-mail et votre mot de passe à partir d'un compte gmail lignes 11, 12 et 13, si vous avez un autre fournisseur de messagerie, modifiez les informations du serveur à la ligne 36.

Extrayez la SD de l'ordinateur et insérez-la dans l'emplacement SD dans Arduino Yun. Au terminal connecté à Arduino Yun, exécutez les commandes :

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

Si tout va bien, vous devez recevoir un e-mail avec votre photo.

Connectez tous les appareils à Arduino Yun

Basé sur un schéma électronique, connectez tous les appareils, en particulier le capteur DHT11, car nous en avons besoin pour lire la température et l'humidité et le buzzer pour tester le son de l'alarme.

Installer le croquis fichier ArduinoHomeMQTT.ino

Je crée un libraries.zip avec toutes les bibliothèques nécessaires à ce fichier, vous pouvez le télécharger depuis mon site GitHub et décompresser dans le répertoire des bibliothèques Arduino IDE.

Bibliothèques incluses dans libraries.zip à l'intérieur de ArduinoHomeMQTT dossier.

ArduinoJson --> utilisé pour manipuler le contenu JsonDHT_sensor_library --> utilisé pour gérer DHT sensorpubsubclient-master --> utilisé pour se connecter, publier et s'abonner à PubNub(c) 

Ouvrez Arduino IDE 1.6.x, dans les outils, sélectionnez « Board :Arduino Yun ».

Chargez le fichier ArduinoHomeMQTT.ino et dans l'IDE, modifiez la ligne 16 avec votre e-mail Amazon utilisé lorsque le compte lié dans la compétence Amazon App est activé.

Cette option identifie votre contrôleur lorsqu'AWS envoie un message MQTT au courtier.

Changez la ligne 50 avec votre uuid pour identifier votre contrôleur dans PubNub(c), vous pouvez aller sur ce site et copiez un uuid de pâte généré en ligne.

Maintenant, enregistrez et téléchargez le croquis et lorsque vous ouvrez la fenêtre du moniteur Arduino IDE, vous pouvez voir Arduino Yun connecté au courtier PubNub(c) et au capteur initialisé.

Testez tous les énoncés d'Alexa Echo Dot

La skill Alexa "Arduino Home Controller " skill gère cette liste d'énoncés , vous pouvez les voir dans les compétences de l'application Alexa dans la section description. Vous pouvez tout tester et voir sur Arduino ID, surveiller tous les messages reçus et envoyés au courtier PubNub(c).

Contrôle des lumières :

==> "Alexa, demande à arduino home d'allumer la lumière de la pièce"==> "Alexa, demande à arduino home d'éteindre la lumière de la pièce"==> "Alexa, demande à arduino home d'allumer la lumière de la cuisine "==> "Alexa, demande à arduino home d'éteindre la lumière de la cuisine"==> "Alexa, demande à arduino home d'allumer la lumière du garage"==> "Alexa, demande à arduino home d'éteindre la lumière du garage"==> " Alexa, demande à arduino home d'allumer la lumière du salon"==> "Alexa, demande à arduino home d'éteindre la lumière du salon" 

Contrôle des alarmes :

==> "Alexa, demande à arduino home d'activer l'alarme"==> "Alexa, demande à arduino home d'éteindre l'alarme" 

Température et humidité de numérisation :

==> "Alexa, demande à arduino home de lire la température"==> "Alexa, demande à arduino home de lire l'humidité" 

Prenez une photo de sécurité :

==> "Alexa, demande à arduino home de prendre une photo" 

À propos et aide

==> "Alexa, demande à arduino home about"==> "Alexa, demande à arduino home help" 

Détails du logiciel

Vous pouvez télécharger tous les fichiers de ce projet depuis mon site Github.

Les dossiers contiennent des explications

ArduinoHomeMQTT --> fichier ino et bibliothèques pour Arduino Yun Home Controller

lambda --> Fonction Lambda dans Node.js à déployer dans AWS Lambda, inclut tous les node_modules nécessaires, voir l'option 2 dans la section Installer tous les logiciels.

python --> fichier python pour envoyer un e-mail avec photo en pièce jointe.

schéma --> Fichier schématique électronique Fritzing(c).

Flux de travail du contrôleur domestique Arduino afficher vous comment les fichiers interagissent .

(1) Amazon Echo Dot envoie une commande vocale et elle est reçue par la compétence Arduino Home Controller.

( 2 ) Le fichier de fonction Lambda d'appel de compétence index.js .

( 3 ) Le fichier de fonction Lambda est développeur dans Node.Js, utilise certains modules de nœud et a été hébergé sur Amazon Web Service (AWS).

(4) La fonction lambda interprète toutes les intentions et les convertit en message MQTT Json et l'envoie au courtier PubNub(c). Ce message a le format :

{ "topic" :Topic_xxxx, "command" :on ou off, "id" :email address} 

Le sujet Topic_xxxx peut être :

Topic_room --> turn on/off room lightTopic_livingroom --> turn on/off living room lightTopic_kitchen --> turn on/off kitchen lightTopic_garage --> turn on/off garage lightTopic_alarm --> turn on/off alarmTopic_temperature --> read temperatureTopic_humidity --> read humidityTopic_photo --> take and send photo by email 

The command may be on or off .

( 5 ) The message is send using channel AHC_IOC_01. Channel AHC_IOC_02 is used to receive temperature or humidity values.

( 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]; // Lecture de la température en Celsius (valeur par défaut) 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(); retard (2000); Serial.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. Tous les droits sont réservés. 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.'); retourner; } 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); retourner; }, //*** 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

Schémas

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

Processus de fabrication

  1. Contrôleur DMX Web
  2. Dés numériques Arduino
  3. Contrôleur de jeu Arduino
  4. Jeu Pixel Chaser
  5. Système d'arrosage des plantes domestiques
  6. Lévitation électromagnétique répulsive Arduino
  7. Contrôleur d'affichage fluorescent à vide
  8. Robot assistant domestique autonome
  9. NeoMatrix Arduino Pong