
Baru-baru ini, Yandex meluncurkan sistem rumah pintar. Kami ditawari untuk membeli perangkat Wi-Fi yang murah: adaptor di stopkontak, bola lampu, dan remote control IR. Sangat menarik bahwa pengembang perangkat "pintar" memiliki kesempatan untuk menciptakan keterampilan "rumah pintar" mereka, ini akan memungkinkan Anda untuk menghubungkan perangkat ke sistem Yandex dan mengelola suara mereka melalui Alice. Semakin banyak merek baru muncul di daftar keterampilan. Alice sangat memahami ucapan Rusia, yang menjadikannya pemimpin yang tak perlu dipersoalkan di antara para asisten suara di pasar Rusia.
Namun, tidak semuanya lancar ...
Pertama minus: pada dasarnya, semua sistem yang diusulkan "mendung". Keandalan mereka terkadang diragukan, karena kinerja mereka secara langsung tergantung pada kualitas koneksi dengan server pabrikan. Dan ketika Anda mematikan Internet, perangkat sepenuhnya berubah menjadi "labu".
Kedua minus: sistem scripting. Bagian penting dari rumah pintar adalah skrip. Dan di sini mereka sangat primitif: Jika "frasa ini dan itu," maka aktifkan "perangkat ini dan ini." Bagi rumah pintar saya, ini terlalu sedikit.
Kontra tidak berakhir di sana, tetapi sisanya lebih cenderung terhubung dengan ketidakdewasaan sistem. Tim pengembang Yandex terus secara aktif menambahkan berbagai fitur, dan bug untuk diedit, yang karenanya banyak terima kasih!
Setelah mempelajari dokumentasi, saya memutuskan untuk membuat keterampilan Yandex UD dan menghubungkan pengontrol rumah pintar untuk itu. Ini akan memungkinkan Anda untuk tidak bergantung pada server cloud, mengimplementasikan skrip apa pun secara lokal pada pengontrol dan pada saat yang sama mengontrol sistem dengan suara melalui Alice. Untuk ini, saya menulis plugin "yandex2mqtt" di Node.js.
Sedikit teori
- Alice, nyalakan lampu.
Setelah kalimat ini, keajaiban terjadi dan lampu menyala. Tapi apa yang ada di balik layar? Mari kita cari tahu cara kerjanya.
Stasiun Yandex, setelah mendengar perintah yang dikenalnya, mengirimkan data ke server Yandex, yang sebelumnya kami tentukan alamat pengontrol kami. Server memproses informasi dan mengarahkannya ke controller dalam bentuk Post-request. Pada controller, API perantara (dalam kasus kami, ini adalah plugin yandex2mqtt) memproses permintaan dan mengalihkannya ke topik MQTT. Selanjutnya, skrip diproses dalam program Node-Red.
Node-Red memutuskan apa yang harus dilakukan selanjutnya. Jika disediakan oleh skrip, ia mengirim perintah untuk menyalakan lampu di topik MQTT yang sesuai. Driver wb-mqtt-serial merespons dengan mengirimkan perintah Modbus ke modul relai, yang mengalihkan relai. Dan akhirnya, lampu menyala! Ya, jalannya tidak dekat, tetapi beberapa fraksi dari pass kedua untuk pengguna.
Mari kita lihat lebih dekat pada plugin yandex2mqtt. Hal pertama yang diperlukan Yandex agar keterampilannya berfungsi adalah layanan oAuth untuk bundling akun dalam aplikasi Yandex. Setelah Yandex menerima token otorisasi dari layanan oAuth, ia meminta daftar perangkat. Plugin yandex2mqtt merespons dengan daftar perangkat dengan semua properti dalam format json. Kemudian mereka muncul dalam daftar perangkat yang tersedia untuk kontrol (dalam apa yang disebut quasar). Sekarang, jika Anda memberi tahu Alice untuk mengaktifkan beberapa perangkat dari daftar, Yandex akan mengirim permintaan Posting dengan data perangkat yang ia ingin nyalakan ke controller. Sebagai tanggapan, plugin mengkonfirmasi inklusi dan menulis status baru ke topik mqtt yang ditentukan dalam pengaturan plugin yang sama. Jika perangkat mengubah statusnya tanpa partisipasi Yandex, maka plug-in, melihat data baru dalam topik mqtt, akan mengirimkannya ke Yandex ketika meminta status, yang sekarang terjadi hanya jika Anda masuk ke perangkat itu sendiri di quasar. Dalam kasus lain, Yandex tidak memilih status.
Sekarang saya akan berbicara tentang beberapa properti perangkat Yandex UD.
Jenis perangkat
Untuk tampilan yang benar di "quasar" dan definisi perintah yang lebih tepat oleh Alice, Yandex menyarankan untuk menetapkan berbagai jenis perangkat ke perangkat. Total tipe 10:
- devices.types.light - Setiap lampu, lampu, bola lampu, dll.
- devices.types.socket - Outlet
- devices.types.switch - Beralih
- devices.types.thermostat - Thermostat
- devices.types.thermostat.ac - Penyejuk udara
- devices.types.media_device - Perangkat media
- devices.types.media_device.tv - TV
- devices.types.cooking - Peralatan dapur
- devices.types.cooking.kettle - Maker
- devices.types.other - Segala sesuatu yang tidak sesuai dengan paragraf sebelumnya.
Kemampuan
Selain itu, setiap perangkat harus memiliki setidaknya satu
kemampuan .
Secara total, Yandex UD memiliki 5 jenis keterampilan. Setiap skill memiliki fungsi yang berbeda
(contoh) , dan beberapa skill memiliki beberapa fungsi seperti itu, yang menambah fleksibilitas ketika mengkonfigurasi perangkat.
Kemampuan:1.
devices.capabilities.on_off - Hidupkan dan matikan.
contoh:
2.
devices.capabilities.color_setting - Manajemen warna.
contoh:
3.
devices.capabilities.mode - Beralih mode.contoh:
4.
devices.capabilities.range - Kontrol rentang.contoh:
- kecerahan
- suhu
- volume
- saluran
5.
devices.capabilities.toggle - Bisukan.contoh:
Dengan kombinasi yang tepat dari semua properti perangkat, Alice mengerti tanpa masalah semua perintah untuk mengelola Smart Home yang diberikan kepadanya. Di sini, tentu saja, ada beberapa kesulitan dengan menggabungkan keterampilan. Dokumentasi jelas tidak menunjukkan keterampilan mana yang dapat digabungkan dan mana yang tidak. Tetapi "metode pencarian ilmiah" akan membantu kita dalam hal ini.
Jadi, misalnya, saya menemukan bahwa pendingin ruangan mengandung empat keterampilan:
Jenis perangkat:
devices.types.thermostat.acJenis Keterampilan:
devices.capabilities.on_offcontoh:
devices.capabilities.rangecontoh:
devices.capabilities.modecontoh:
devices.capabilities.modecontoh:
Saya tidak akan menjelaskan properti yang tersisa, semuanya cukup sederhana di sana.
Untuk membuatnya bekerja, Anda perlu:
- Pengendali
- Domain apa saja
- Sertifikat SSL
- Node.js
- Plugin Yandex2mqtt
- Broker MQTT
- Node-red
Pengendali
Apartemen "pintar" saya dikendalikan oleh Wiren Board 6. Tetapi Anda dapat menggunakan pengontrol Linux lainnya yang akan menarik Node.js dan Node-Red. Misalnya, Raspberry pi atau PC.
Domain
Tentu saja, diinginkan untuk memiliki alamat IP putih dan membeli domain, tetapi ini tidak perlu. Anda dapat menggunakan DDNS - misalnya,
www.noip.com .
Semuanya sederhana di sini: daftar, buat nama host gratis, masukkan alamat IP Anda. Beberapa router memiliki pengaturan DDNS khusus di mana Anda dapat memasukkan data noip.com. Router akan secara otomatis mengirim alamat IP ketika diubah. Jika tidak ada pengaturan seperti itu di router, Anda dapat menginstal program noip pada controller dan menambahkannya ke autorun. Program ini akan melakukan hal yang sama persis seperti router dengan pengaturan DDNS khusus - perbarui alamat ip Anda di database noip.com
Dengan demikian, kami memiliki alamat statis yang mengalihkan semua permintaan ke controller kami.
Port 443 dan 80
Sekarang hampir semua orang di rumah memiliki router. Selain fungsinya yang jelas, ini juga menjadi penghalang jaringan lokal dari tamu yang tidak diinginkan dari luar. Tetapi dalam kasus-kasus tertentu, kita memerlukan akses ke jaringan internal dari luar. Pembuat router membayangkan ini dan menambahkan fitur NAT (Network Address Translation).
Saya tidak akan menjelaskan momen pengaturan router, karena berbeda untuk setiap produsen. Cara melakukannya, baca instruksi untuk router Anda. Google kata kunci: Port Forwarding, Port Mapping, NAT.
Diperlukan untuk meneruskan port untuk akses ke yandex2mqtt (bisa berupa apa saja, saya memilih 443) dan port 80 (hanya diperlukan untuk menerima sertifikat SSL. Setelah menerima sertifikat, port 80 dapat ditutup).
Sertifikat SSL
Segera letakkan semua titik pada "dan": sertifikat yang ditandatangani sendiri tidak akan berfungsi.
Sebagian besar pendaftar domain (misalnya, reg.ru) memberi pelanggan mereka sertifikat SSL gratis untuk domain utama (www.domainanda.ru). Jika Anda membeli domain khusus untuk Alice, maka Anda dapat menggunakan sertifikat SSL yang disediakan.
Jika Anda tidak memiliki domain sendiri, atau Anda memiliki subdomain lain yang dialokasikan untuk Alice (misalnya, alice.yourdomain.ru), maka Anda perlu mendapatkan sertifikat untuk subdomain ini, atau untuk alamat yang disediakan oleh layanan DDNS.
Untuk melakukan ini, saya mengusulkan untuk menggunakan layanan gratis untuk memperoleh sertifikat SSL dari letsencrypt.org.
Untuk mendapatkan sertifikat, Anda harus menginstal program certbot, menjalankan dan menentukan semua data yang diminta. Pada saat yang sama, port 80 harus bebas dan dapat diakses dari luar. Saya menyarankan Anda untuk hati-hati mempelajari instruksi dari letsencrypt.
Instal dan konfigurasikan certbotapt-get update apt-get install certbot
Hentikan layanan pengawas dan nginx.
service watchdog stop service nginx stop
Kami meneruskan port ke-80 di router.
Jalankan program certbot:
certbot certonly --standalone
Setelah memulai program akan mengajukan beberapa pertanyaan sederhana.
1. Email Anda. Cukup masukkan alamat dan tekan enter

2. Anda diminta untuk membaca perjanjian pengguna. Jika Anda setuju dengan semuanya, cukup masukkan "A", yang berarti Setuju, yaitu, saya setuju.

3. Program meminta izin untuk mengirim alamat email Anda ke pengembang. Masukkan N.

4. Masukkan domain Anda di mana Anda ingin menerima sertifikat (Anda dapat memasukkan yang sebelumnya kami terima di noip). Di sini saya memberikan contoh input yang salah. Http: // awalan tidak diperlukan.

Jika Anda melakukan semuanya dengan benar, Anda akan melihat yang berikut:

Ini berarti bahwa sertifikat tersebut berhasil diterima. Ingat jalur ke sertifikat dan kunci, itu akan diperlukan saat mengkonfigurasi plugin yandex2mqtt. Untuk keamanan, tutup port 80 di pengaturan router, itu tidak lagi berguna.
Kami mengaktifkan layanan pengawas dan nginx.
service nginx start service watchdog start
Sertifikat dari letsencrypt dikeluarkan selama
3 bulan.
Jangan lupa perbarui. Node.js dan plugin yandex2mqtt
InstalasiMengkonfigurasi repositori node.js
curl -sL https://deb.nodesource.com/setup_10.x | bash -
Selanjutnya, instal atau perbarui semua komponen yang diperlukan
apt-get install -y nodejs git make g++ gcc build-essential
Setelah instalasi berhasil, salin repositori yandex2mqtt ke controller.
git clone https://github.com/munrexio/yandex2mqtt.git /mnt/data/root/yandex2mqtt
Kami menetapkan hak.
chown -R root:root /mnt/data/root/yandex2mqtt
Kami pergi ke folder.
cd /mnt/data/root/yandex2mqtt
Kami memulai instalasi.
npm install
Instalasi selesai.
Mulai otomatisBuat unit systemd:Buka folder
/ etc / systemd / system / pada controller dan buat file bernama
yandex2mqtt.service . Salin yang berikut ke dalamnya:
[Unit] Description=yandex2mqtt After=network.target [Service] ExecStart=/usr/bin/npm start WorkingDirectory=/mnt/data/root/yandex2mqtt StandardOutput=inherit StandardError=inherit Restart=always User=root [Install] WantedBy=multi-user.target
Setelah itu simpan perubahan dan tutup file.
Untuk mengaktifkan unit, masukkan perintah di konsol:
systemctl enable yandex2mqtt.service
Sekarang Anda dapat memulai dan menghentikan plugin dengan perintah
service yandex2mqtt start service yandex2mqtt stop service yandex2mqtt restart
Pengaturan:Semua pengaturan plug-in yang diperlukan ada di file
/mnt/data/root/yandex2mqtt/config.jsEdit file ini sesuai dengan parameter Anda.
Sertifikat SSL harus berupa
rantai penuh .
Setelah konfigurasi, jalankan yandex2mqtt dengan perintah:
service yandex2mqtt start
Setelah mengatur dan memulai jembatan, saya menyarankan Anda untuk memeriksa sertifikat di
situs ini .
Cukup masukkan domain Anda yang akan Anda gunakan untuk mengakses Alice. Untuk operasi yang tepat, sertifikat harus lulus semua cek. Kalau tidak, tidak akan ada yang berhasil.
Keahlian Yandex UD
Penciptaan keterampilan1. Buka halaman
dialogs.yandex.ru/developer2. Masuk dengan akun Anda.
3. Klik "buat dialog"
4. Pilih “Rumah Pintar”
5. Masukkan parameter yang diperlukan:
- Nama - Nama apa saja.
- URL Titik Akhir - alamat jenis domain / penyedia Anda , di mana alih-alih “ domain Anda” adalah alamat dari noip atau domain Anda yang menerima sertifikat ssl.

- Privasi - pilih "Jangan tampilkan di katalog" (Diperlukan! Jika tidak, keterampilan tidak akan lulus moderasi instan)
- Nama dan Email pengembang - tunjukkan rincian Anda.
- Deskripsi - teks apa pun
- Ikon - ikon apa saja.

6. Bundel akun:

Klik "tambah baru"
- Dua poin pertama - tentukan data dari config.js / klien :
1.
Pengidentifikasi aplikasi adalah clientId
2.
Rahasia aplikasi - clientSecret

7. Simpan keterampilan

8. Klik "Moderasi"

9. Klik "Terbitkan"

Menambahkan perangkat ke Yandex UD.1. Buka aplikasi Yandex di telepon

2. Di menu, pilih Perangkat / Smart Home

3. Klik “Tambah perangkat”

4. Pilih keahlian Anda

5. Klik "Gabungkan Akun"

6. Halaman otorisasi akan terbuka
Masukkan login dan kata sandi (atur file config.js di blok pengguna)
7. Klik "Izinkan".

8. Klik "Perbarui daftar perangkat"

Sekarang Alice dapat diberikan perintah untuk mengelola perangkat yang ditambahkan. Tim yang sesuai akan datang ke topik yang ditunjukkan oleh mqtt.
Masih mengikat beberapa tindakan untuk topik ini.
Node-red
Node-Red dipilih untuk sistem otomasi. Ini adalah alat pemrograman visual yang hebat. Prosedur instalasi dan konfigurasi dapat dilihat di
sini .
Proses mengatur dan mengotomatisasi rumah pintar akan menarik seluruh artikel, atau bahkan dua. Dan sudah ada banyak artikel semacam itu. Sebagai gantinya - contoh kecil menggunakan plugin, cara menyalakan suara bola lampu.
Untuk kenyamanan, kami membuat perangkat virtual pada pengontrol Wiren Board 6 di antarmuka web.
Di mesin aturan
wb-rules Anda harus memasukkan
defineVirtualDevice("yandex", { title: "yandex controls", cells: { light1: { type: "switch", value: false }, } });
Kami akan menulis topik MQTT perangkat virtual ini di
config.js untuk tipe keterampilan "aktif" dari perangkat "Light":
devices: [ //_______________ ______________// { name: '', room: '', type: 'devices.types.light', mqtt: [ { type: 'on', set: '/devices/yandex/controls/light1/on', // stat: '/devices/yandex/controls/light1' // }, ], capabilities: [ { type: 'devices.capabilities.on_off', retrievable: true, state: { instance: 'on', value: true } }, ] }, //_______________ _______________// ]
Sekarang, dengan kalimat "Alice, nyalakan / matikan Lampu", perangkat virtual beralih.
Mari kita pergi ke Node-Red, yang diinstal sesuai dengan instruksi.
Untuk pekerjaan yang mudah dengan Wiren Board 6, Anda juga dapat menggunakan “node”
node-red-contrib-wirenboard tambahan .
Modul ekspansi
WBE2R-R-ZIGBEE dipasang di controller, yang memungkinkan untuk terhubung ke lampu pintar IKeevskaya dari seri TRODFRY menggunakan protokol ZigBee.
Sekarang terserah kecil. Lemparkan beberapa blok ke ruang kerja Node-Red, hubungkan dengan "string" dan klik Deploy.

Bola lampu ikeevsky terhubung melalui plugin zigbee2mqtt, oleh karena itu dalam mqtt topik bola harus dikirim json untuk kontrol. Untuk melakukan ini, kami akan menyisipkan fungsi sederhana antara perangkat virtual WB dan topik mqtt bulb.

Klik Menyebarkan. Kami periksa.
Alice, nyalakan Lampu!
Jadi, hari ini kami belajar bagaimana menghubungkan Alice ke sistem otomasi. Mungkin dalam beberapa kasus terlalu rumit, lebih mudah untuk membeli bola lampu wi-fi biasa, dan itu sudah cukup. Tetapi jika Anda berencana untuk membangun rumah yang benar-benar cerdas untuk diri sendiri, maka cara-cara sederhana tidak dapat dilakukan di sini. Tetapi apakah itu layak atau tidak, semua orang akan memutuskan sendiri. Terima kasih atas perhatian anda!