Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Arduino Home Controller Diaktifkan oleh Alexa

Komponen dan persediaan

Arduino Yun
× 1
ControlEverything.com 4-CHANNEL RELAY CONTROLLER UNTUK I2C
× 1
Sensor Suhu &Kelembaban DHT11 (4 pin)
× 1
Resistor 10k ohm
× 2
SparkFun RedBot Buzzer
× 1
NPN Transistor Serbaguna
× 1
Konverter Buck DC ke DC LM2596
× 1
Amazon Alexa Echo Dot
× 1
Arduino Proto Shield
× 1
Wesb WebCam
× 1
Kotak Persimpangan Putih 200mmx155mmx80mm
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)

Aplikasi dan layanan online

Arduino IDE
Perangkat Keterampilan Alexa Alexa Amazon
Layanan Web Amazon AWS Lambda
PubNub Publish/Subscribe API

Tentang proyek ini

Ikhtisar

Saat Amazon diluncurkan ke pasar Alexa dan perangkat seperti Amazon Echo Dot membuka pilihan tak terbatas untuk membuat Rumah Pintar yang hebat dikendalikan oleh perintah suara menggunakan bahasa alami.

Proyek ini membuat Arduino Home Controller yang dapat menghubungkan banyak sensor dan perangkat ke internet dan Anda dapat mengontrolnya menggunakan keterampilan Amazon Alexa.

Anda dapat menginstal dan mengaktifkan keterampilan saya "Arduino Home Controller " langkah yang mudah, atau Anda dapat membuat keterampilan Anda dipandu oleh tutorial ini.

Untuk saat ini kami akan mengontrol :

  • Empat lampu di kamar, garasi, dapur, dan ruang tamu.
  • Sensor Suhu dan Kelembaban.
  • Alarm bel.
  • WebCam untuk mengambil foto keamanan dan mengirim melalui email.

Anda dapat melihat Arduino Home Controller beraksi dalam demo video singkat ini. Untuk proposal demo dan video, saya menggunakan empat led di prothoboard yang mensimulasikan bola lampu di setiap ruangan rumah.

Jika Anda ingin menggunakan modul jarak jauh untuk mengaktifkan lampu Anda, Anda dapat melihat Modul Jarak Jauh Pengontrol Rumah Arduino saya proyek di URL ini.

Diagram Blok

Dalam gambar diagram blok kita dapat melihat empat komponen utama dari proyek ini:

1.- Amazon Echo Dot untuk menerima perintah suara dan mengirimkannya ke AWS (Amazon Web Service).

2.- AWS dengan Keterampilan Amazon dan Fungsi Lambda untuk menginterpretasikan semua perintah.

Nama skillnya adalah "Arduino Home Controller " Anda dapat mengaktifkannya nanti.

3.- Broker MQTT menggunakan awan PubNub(c).

Pialang ini akan menerima pesan kontrol dalam dua saluran, satu untuk nilai yang ditetapkan dan yang lainnya untuk membaca nilai dari sensor.

Anda tidak perlu membuat akun di PubNub, Anda dapat menggunakan akun saya untuk proposal demo.

4.- Pengontrol Rumah menggunakan Arduino Yun.

Kami akan menggunakan Arduino Yun karena memiliki perisai ethernet di dalamnya dan memiliki mesin linux kecil di mana kami akan mengeksekusi python untuk menangani beberapa tindakan.

Ini mengontrol relai untuk lampu, membaca sensor suhu dan kelembaban, mengaktifkan bel untuk alarm, dan memanipulasi webcam untuk mengambil foto keamanan.

Untuk modul jarak jauh, lihat pelengkap saya, Modul Jarak Jauh Pengontrol Rumah Arduino proyek di URL ini.

Instal semua perangkat lunak yang diperlukan

Pada titik ini Anda dapat mengambil dua opsi satu untuk proposal demo, gunakan keterampilan Alexa saya, instal dan gunakan atau opsi dua Anda dapat menjadikan keterampilan pribadi Anda.

Jelajahi aplikasi Alexa dengan url . ini , di bagian itu pilih Keterampilan di menu, Cari Arduino dan dalam daftar Anda melihat keterampilan dengan nama "Arduino Home Controller ", klik di kartu keterampilan dan klik tombol "Aktifkan" untuk menginstal.

Atau Anda perlu pergi ke Amazon Skill Store menggunakan tautan . ini dan tekan tombol "Aktifkan"

Anda perlu menautkan akun Amazon Anda karena kami akan menggunakan alamat email Anda seperti ID untuk semua perintah yang dikirim ke Arduino. Perhatikan bahwa kami tidak akan menggunakan alamat ini untuk mengirim email, hanya akan menggunakan seperti ID.

Skill diinstal dan ditautkan ke akun Amazon dan terhubung ke fungsi lambda saya di AWS cloud.

1.- Buat a keterampilan

Anda perlu mendaftar dan membuat akun pengembang gratis di situs https://developer.amazon.com/home.html

1.1.- Setelah Login masuk ke Alexa opsi menu dan pilih di Alexa Skills Kit tombol "Mulai"

1.2.- Selanjutnya klik tombol "Tambahkan Keterampilan Baru" untuk membuat keterampilan baru.

1.3.- Di Buat Keterampilan Alexa Baru bagian Anda harus:

  • Pilih:Model Interaksi Khusus
  • Bahasa Inggris AS
  • Nama TestSkill adalah nama skill yang digunakan untuk mencari di toko.
  • Nama Panggilan Uji Keahlian adalah nama untuk memulai perintah suara seperti Alexa Ask, Test Skill untuk mengaktifkan alarm
  • Semua bidang global disetel semua ke Tidak ada opsi
  • Klik "Simpan"

Keterampilan baru telah dibuat dan Anda melihat bidang baru Id Aplikasi

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

Ini digunakan untuk menghubungkan antara keterampilan dan fungsi lambda, kami menggunakannya nanti di bagian tutorial 2.5.

1.4.- Model Interaksi di sini menentukan bagaimana Anda berinteraksi dengan keterampilan berdasarkan definisi maksud, celah, dan ucapan.

Di Model Interaksi opsi menu salin dan tempel skema Json ini di Skema Intent.

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

Tentukan beberapa slot yang diperlukan seperti Serikat dan HabRooms dalam Jenis Slot Kustom.

Definisikan semua ucapan seperti model percakapan di Contoh Ucapan , salin dan tempel daftar ini.

LightIntent Putar {which} light {light}LightIntent Setel {which} light {light}AlarmIntent Putar alarm {alarm}AmbilPhotoIntent Ambil FotoAmbilPhotoIntent Ambil Foto KeamananDapatkanTemperatureIntent Membaca SuhuDapatkanHumidityIntent Membaca KelembabanTentangNiat Ceritakan tentangTentangIntent Tentang 

Sebelum melanjutkan ke bagian berikutnya, Konfigurasi, kita perlu membuat Fungsi Lambda karena kita membutuhkan tautan keterampilan dan fungsi lambda.

2.- Membuat Fungsi Lambda

Anda perlu mendaftar dan membuat akun di AWS Console menggunakan url https://aws.amazon.com/console/

2.1.- Pilih Layanan di atas menu dan Lambda di menu bilah kiri.

2.2.- Pilih di bilah kiri Fungsi dan klik tombol "Buat fungsi".

2.3.- Setel data ini :

  • Klik Penulis dari Awal
  • Nama: TestSkillLambda
  • Waktu berjalan: Node.js.6.10
  • Peran: Buat Peran Khusus

Ini akan membuka jendela baru di mana Anda harus memilih nilai berikut:

  • Peran IAM: Lambda_Basic_Execution
  • NamaKebijakan: “Buat Kebijakan Peran Baru” lalu edit kebijakan dan rekatkan berikut ini:
{ "Versi":"2012-10-17", "Pernyataan":[ { "Efek":"Izinkan", "Tindakan":[ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource":"arn:aws:logs:*:*:*" }, { "Effect":"Allow", "Action":[ "iot:UpdateThingShadow" ], "Resource" :"*" } ]} 

Untuk menyimpan, tekan tombol "Tambah" dan kembali ke Buat Fungsi halaman dan pilih lambda_basic_execution di Peran yang ada lapangan.

2.4.- TestSkillLambda fungsi telah dibuat dan Anda melihat halaman perancangnya.

2.5.- Pilih dari bilah menu kiri Alexa Skills Kit dan tambahkan ke tambahkan pemicu daerah yang dibatasi.

Klik Perangkat Keterampilan Alexa kotak dan gulir ke bawah ke Konfigurasikan pemicu pilihan, pilih Aktifkan dan di ID Keterampilan bidang salin dan tempel ID Aplikasi nilai simpan nanti, lihat bagian tutorial nomor 1.3.

Saat ini kami menghubungkan fungsi lambda dengan skill menggunakan Application atau Skill ID.

Tekan tombol "Simpan" dan Alexa Skills Kit disimpan dan berfungsi keterampilan yang diketahui lambda dan ditautkan.

2.6.- Gulir ke bawah ke Kode fungsi bagian dan setel bidang:

  • Jenis entri kode:Unggah file .zip
  • Waktu tayang: Node.js 6,10
  • Tekan tombol "Unggah " untuk mengupload kode fungsi menggunakan file data.zip .

Editor kode akan terbuka dan Anda akan melihat folder dan file yang diunggah.

Pilih file index.js ini berisi semua implementasi fungsi lambda.

Anda harus mengubah baris 23, salin dan tempel ID Aplikasi yang sama digunakan nanti di bagian tutorial nomor 1.3.

Tekan tombol "Simpan" dan fungsi lambda diaktifkan untuk menerima perintah keterampilan.

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

Di bagian atas halaman di atas tombol "Simpan" Anda akan melihat ARN (Amazon Resource Name) itu adalah ID fungsi lambda daripada yang akan kita gunakan di Konfigurasi bagian di halaman Keterampilan.

3.- Kembali ke definisi Keterampilan

3.1.- Pilih Konfigurasi bagian, di EndPoint pilih AWS Lambda ARN, salin dan tempel string ARN di atas di Default bidang. Ini adalah tindakan terakhir untuk menghubungkan keterampilan dan fungsi lambda, keterampilan yang diketahui fungsi lambda dan ditautkan.

3.2.- Gulir ke bawah ke Penautan Akun bagian dan salin dua URL Pengalihan pertama, Anda membutuhkan mereka untuk mengonfigurasi profil keamanan.

Sebelum melanjutkan dengan Konfigurasi keterampilan, kita perlu menentukan profil keamanan yang digunakan untuk menautkan keterampilan dan akun Amazon di Aplikasi Alexa.

4.- Buat Profil Keamanan

Di konsol pengembang yang sama yang digunakan untuk membuat keterampilan, pilih Aplikasi &Layanan dan Masuk dengan Amazon dan tekan tombol "Buat a Baru Keamanan Profil"

4.1.- Pengelolaan Profil Keamanan halaman memungkinkan Anda membuat profil dengan semua keamanan OAuth 2.0 untuk menautkan keterampilan dengan akun Amazon Anda.

4.2.- Isi semua kolom dengan data ini:

  • Nama Profil Keamanan :TestSkillProfile
  • Deskripsi Profil Keamanan :Profil yang digunakan oleh TestSkill
  • URL Pemberitahuan Privasi Izin :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 ini adalah contoh yang harus Anda gunakan.
  • Klik tombol "Simpan".

4.3.- Saat menyimpan semua data atau mengedit profil keamanan, dua bidang baru menunjukkan data penting, ID Klien dan Rahasia Klien . Anda membutuhkannya untuk konfigurasi keterampilan akhir.

4.4.- Tentukan url daftar putih, pilih tab Pengaturan Web.

  • Asal yang Diizinkan :https://layla.amazon.com dan https://pitangui.amazon.com
  • URL Pengembalian yang Diizinkan :tambahkan dua url pertama dari bagian 3.2

5.- Menyelesaikan pembuatan keterampilan

5.1.- Kembali ke definisi keterampilan, pilih Konfigurasi bagian dan gulir ke bawah ke Penautan Akun .

  • Apakah Anda mengizinkan pengguna membuat akun :Pilih Ya
  • URL Otorisasi :https://www.amazon.com/ap/oa/?redirect_url=UUUUUU Jika ada “UUUUUU”, Anda harus menggantinya dengan salah satu URL Pengalihan dari bawah halaman. Tautan akan berakhir seperti ini https://www.amazon.com/ap/oa/?redirect_url=https://layla.amazon.com/api/skill/link/UUUUUU
  • Id Klien :salin dan tempel Id Klien dari bagian 4.3.
  • Cakupan :profil , lihat penjelasannya di url ini.

5.2.- Lanjutkan dengan penautan Akun:

  • Jenis Hibah Otorisasi :Pemberian Kode Otentikasi
  • URI Token Akses :https://api.amazon.com/auth/o2/token
  • Rahasia Klien :salin dan tempel Rahasia Klien dari bagian 4.3.
  • URL Kebijakan Privasi :https://www.amazon.com/gp/help/customer/display.html?nodeId=201809740 ini adalah contoh yang harus Anda gunakan.
  • Klik tombol "Simpan" dan "Berikutnya"

5.3.- Bidang Global adalah bagian yang digunakan untuk mendokumentasikan keterampilan.

  • Pilih kategori tempat menemukan keterampilan di toko saat disertifikasi , "Rumah Pintar"
  • Petunjuk pengujian
  • Keterampilan akan tersedia di semua negara .
  • Deskripsi singkat
  • Deskripsi keterampilan lengkap
  • Contoh frasa
  • Beberapa kata kunci yang menentukan keterampilan
  • Ikon Png o Jpg 108x108 piksel
  • Ikon Png o Jpg 512x512 piksel

5.4.- Bagian terakhir Privasi &Kepatuhan

6.- Instal TestSkill di Aplikasi Alexa

6.1- Saat Anda menyimpan keterampilan, Anda dapat membuka Aplikasi Alexa di https://alexa.amazon.com/ pilih di menu bilah kiri opsi Keterampilan , klik tombol di kanan atas "Keterampilan Anda" dan filter Keterampilan Pengembang Anda dapat melihat TestSkill kartu. Perhatikan pesan yang diperlukan untuk menghubungkan akun.

6.2.- Jika Anda mengklik kartu TestSkill halaman deskripsi menampilkan semua informasi tentang keterampilan, klik tombol "Aktifkan".

6.3.- Karena definisi yang diperlukan penautan akun, Anda telah mengarahkan ulang ke halaman kredensial masuk Amazon untuk menautkan keterampilan dengan akun Amazon Anda.

Jika info Login divalidasi, Anda melihat halaman ini yang menunjukkan bahwa keterampilan terkait dengan akun Amazon Anda.

6.4.- Keterampilan selesai, dipasang dan ditautkan ke akun Amazon Anda dan terhubung ke fungsi Lambda.

Anda dapat menguji katakan Alexa, tanyakan Uji Keterampilan dan selamat datang di Arduino Home Controller karena semua dialognya sama.

Konfigurasi Arduino Yun

Jika Anda baru pertama kali menggunakan Arduino Yun, Anda perlu mempersiapkannya sebelum mengunggah sketsa.

Saya sarankan lihat panduan atau tutorial Greg Baugues Memulai dengan Arduino Yun – Arduino dengan WiFi. Terima kasih kepada pengguna Hackster @BenEagen karena telah menemukan panduan ini.

Untuk mengambil foto dan mengirim email dengan itu kita perlu menginstal perangkat lunak tambahan. Kami juga akan menguji kamera USB untuk melihat apakah driver berfungsi dengan benar. Sambungkan webcam USB di port usb Arduino Yun.

Untuk melakukannya, sambungkan ke Arduino Yun dengan terminal:

ssh [email protected] 

Kata sandi default adalah arduino.

Jika koneksi baik-baik saja, Anda akan melihat perintah OpenWRT Linux:

Pasang menghasilkan gambar perangkat lunak

Mulai dengan pembaruan pengelola paket:

opkg update 

Instal driver UVC:

opkg install kmod-video-uvc 

Instal paket python-openssl:

opkg install python-openssl 

Kita juga membutuhkan utilitas fswebcam yang akan kita gunakan untuk mengambil gambar dari terminal:

opkg install fswebcam 

Pastikan kartu SD terpasang ke Arduino Yun, Anda dapat mengujinya dengan menjalankan perintah ini:

mount 

Jika Anda melihat daftar perangkat seperti /dev/sda1 pada /mnt/sda1 ketik vfat Kartu SD baik-baik saja.

Untuk menguji kamera dan mengambil gambar, sangat mudah. Cukup ketik:

cd /mnt/sda1fswebcam test.png 

Anda akan melihat beberapa informasi yang ditampilkan, bersama dengan beberapa kesalahan, tetapi jangan khawatir tentang itu. Yang penting adalah melihat baris-baris ini:

--- Membuka /dev/video0...Mencoba modul sumber v4l2.../dev/video0 dibuka. 

Untuk memeriksa apakah gambar telah diambil dengan benar, lepaskan kartu SD dari Arduino Yun dan baca menggunakan komputer Anda. Anda akan melihat gambar yang muncul di akar kartu SD "test.png ".

Cukup buka untuk memastikan itu diambil dengan benar dan tidak rusak.

Pasang mengirim perangkat lunak email

Dengan SD di komputer Anda, salin file python AHC_SendEmail.py dan ubah email dan kata sandi Anda dari akun gmail baris 11, 12 dan 13, jika Anda memiliki penyedia email lain, ubah informasi server di baris 36.

Ekstrak SD dari komputer dan masukkan ke slot SD di Arduino Yun. Pada terminal yang terhubung ke Arduino Yun, jalankan perintah :

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

Jika semuanya baik-baik saja, Anda harus menerima email dengan foto Anda.

Hubungkan semua perangkat ke Arduino Yun

Berdasarkan skema elektronik, sambungkan semua perangkat terutama sensor DHT11 karena kami membutuhkannya untuk membaca suhu dan kelembaban serta bel untuk menguji suara alarm.

Pasang sketsa berkas ArduinoHomeMQTT.ino

Saya membuat libraries.zip file dengan semua perpustakaan yang dibutuhkan oleh file ini, Anda dapat mengunduhnya dari situs GitHub saya dan unzip di direktori perpustakaan Arduino IDE.

Perpustakaan termasuk dalam libraries.zip di dalam ArduinoHomeMQTT folder.

ArduinoJson --> digunakan untuk memanipulasi konten JsonDHT_sensor_library --> digunakan untuk menangani DHT sensorpubsubclient-master --> digunakan untuk menghubungkan, mempublikasikan, dan berlangganan PubNub(c) 

Buka Arduino IDE 1.6.x, di tools pilih "Board:Arduino Yun".

Muat file ArduinoHomeMQTT.ino dan di IDE, modifikasi baris 16 dengan email Amazon Anda yang digunakan saat akun tertaut di Amazon App skill diaktifkan.

Opsi ini mengidentifikasi pengontrol Anda saat AWS mengirim pesan MQTT ke broker.

Ubah baris 50 dengan uuid Anda untuk mengidentifikasi pengontrol Anda di PubNub(c), Anda dapat membuka situs ini dan salin tempel uuid yang dibuat secara online.

Sekarang simpan dan unggah sketsa dan ketika membuka jendela monitor Arduino IDE Anda dapat melihat Arduino Yun terhubung ke broker PubNub(c) dan sensor diinisialisasi.

Uji semua ucapan dari Alexa Echo Dot

Keterampilan Alexa "Pengontrol Rumah Arduino " keterampilan menangani daftar ucapan ini , Anda dapat melihatnya di keterampilan Aplikasi Alexa di bagian deskripsi. Anda dapat menguji semua dan melihat di monitor serial ID Arduino semua pesan yang diterima dan dikirim ke broker PubNub(c).

Kontrol lampu:

==> "Alexa, minta arduino home untuk menyalakan lampu kamar"==> "Alexa, minta arduino home untuk mematikan lampu kamar"==> "Alexa, minta arduino home untuk menyalakan lampu dapur "==> "Alexa, minta arduino home untuk mematikan lampu dapur"==> "Alexa, minta arduino home untuk menyalakan lampu garasi"==> "Alexa, minta arduino home untuk mematikan lampu garasi"==> " Alexa, minta arduino home untuk menyalakan lampu ruang tamu"==> "Alexa, minta arduino home untuk mematikan lampu ruang tamu" 

Kontrol alarm:

==> "Alexa, minta arduino home untuk menyalakan alarm"==> "Alexa, minta arduino home untuk mematikan alarm" 

Memindai Suhu dan Kelembaban:

==> "Alexa, minta arduino home untuk membaca suhu"==> "Alexa, minta arduino home untuk membaca kelembaban" 

Ambil foto keamanan:

==> "Alexa, minta arduino pulang untuk mengambil foto" 

Tentang dan Bantuan

==> "Alexa, tanya arduino home tentang"==> "Alexa, tanya arduino home help" 

Detail perangkat lunak

Anda dapat mengunduh semua file untuk proyek ini dari situs Github saya.

Folder berisi penjelasan

ArduinoHomeMQTT --> ino file dan library untuk Arduino Yun Home Controller

lambda --> Fungsi Lambda di Node.js untuk diterapkan di AWS Lambda, mencakup semua node_modules yang diperlukan, lihat opsi 2 di bagian instal semua perangkat lunak.

python -> file python untuk mengirim email dengan foto terlampir.

skema --> Fritzing(c) file skema elektronik.

Alur Kerja Pengontrol Rumah Arduino tampilkan Anda how files interact .

( 1 ) Amazon Echo Dot send command voice and it is received by Arduino Home Controller skill.

( 2 ) The skill call Lambda function file index.js .

( 3 ) The Lambda function file is developer in Node.Js, uses some node modules and was hosted at Amazon Web Service (AWS).

( 4 ) The lambda function interpret all intents and convert them to MQTT Json message and send it to PubNub(c) broker. This message have the format :

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

The topic Topic_xxxx may be:

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.

Kode

  • 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(); penundaan(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. 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.'); kembali; } 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); kembali; }, //*** 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

Skema

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

Proses manufaktur

  1. Pengontrol DMX yang Dioperasikan Web
  2. Arduino Digital Dice
  3. Pengontrol Game Arduino
  4. Game Pixel Chaser
  5. Sistem Penyiraman Tanaman Rumah
  6. Arduino Repulsive Electromagnetic Levitation
  7. Pengontrol Tampilan Fluorescent Vakum
  8. Robot Asisten Rumah Otonom
  9. NeoMatrix Arduino Pong
  10. Pengontrol Penguji Arduino DMX-512