Iklan
Soket daya pintar adalah cara paling sederhana untuk mengotomatisasi rumah Anda, tetapi masing-masing sekitar $ 40 untuk soket berbasis Wi-Fi atau ZWave, Anda tidak mungkin membeli lebih dari beberapa.
Anda mungkin sudah memiliki beberapa soket berbasis RF murah - jenis yang datang dengan kendali jarak jauh kustom mereka sendiri, dan memiliki beberapa saluran dan pemilih ID di bagian belakang. Sayangnya tidak ada hub rumah pintar di pasar Battle of the Smart Home Hubs: Apa yang Ada dan Apa yang Datang? Baca lebih banyak yang bekerja dengan mereka. Bukankah lebih bagus jika Anda bisa menautkannya ke sistem rumah pintar DIY Anda entah bagaimana? Yah, Anda bisa - sebenarnya cukup mudah - dengan sekitar $ 10 di bagian.
Dengan sedikit lebih banyak pekerjaan, Anda juga dapat mengintegrasikan beberapa perangkat keras jarak jauh berbasis RF yang dipesan lebih dahulu, seperti layar bioskop anggaran ini.
Apa yang kau butuhkan:
- ESP8266 NodeMCU v12E dev board (model yang tepat tidak masalah, v1 atau v3 juga akan baik-baik saja). Alasan kami menggunakan papan NodeMCU adalah karena kami ingin koneksi Wi-Fi yang mudah nanti. Tautan ini untuk paket 2, yang masing-masing bernilai $ 7.
- Paket dari 433Mhz pemancar dan penerima (sekitar $ 3).
- Pustaka RCSwitch dan MQTT, dan kode kami - semua tersedia untuk diunduh dari Github.
- Server MQTT, lokal atau jarak jauh.
- Beberapa soket yang dikendalikan RF beroperasi pada pita 433 mHz (seharusnya dikatakan pada remote control). Saya membeli barang saya dari Maplin sebagai paket 3 seharga sekitar £ 20 ($ 25,89).
Jika ini adalah pertama kalinya Anda memprogram papan NodeMCU, Anda harus mengunduh plugin Arduino untuknya: ikuti bersama dengan bagian pertama dari kami Panduan pengantar Arduino Killer Temui Pembunuh Arduino: ESP8266Bagaimana jika saya memberi tahu Anda bahwa ada papan dev yang kompatibel dengan Arduino dengan Wi-Fi bawaan kurang dari $ 10? Ya ada. Baca lebih banyak untuk chip NodeMCU / ESP8266. Anda juga perlu Untuk driver CH430. Kamu dapat menemukan driver MacOS CH430 yang ditandatangani di sini, atau Windows di sini.
Saya telah menggunakan v1.6.5 dari Arduino karena apa pun yang lebih tinggi menimbulkan lebih banyak masalah daripada yang diselesaikan. Turunkan versi jika Anda belum melakukannya.
Sebelum Anda melanjutkan, saya akan mengasumsikan tingkat pengetahuan dasar tentang Pemrograman Arduino Pemrograman Arduino untuk Pemula: Lalu Lintas Proyek Pengontrol CahayaMembangun pengontrol lampu lalu lintas Arduino membantu Anda mengembangkan keterampilan pengkodean dasar! Kami membantu Anda memulai. Baca lebih banyak , dan Anda memiliki pengaturan NodeMCU di manajer papan, dan dapat mengunggah beberapa kode demo dengan benar. Anda juga harus menambahkan perpustakaan yang termasuk dalam unduhan kami ke perpustakaan Anda Arduino / perpustakaan map.
Jika sudah ada Perpustakaan PubSubClient atau MQTT, cadangkan dan hapus - yang saya sertakan dalam unduhan adalah satu-satunya di mana saya dapat dengan andal menerima pesan di NodeMCU, dan saya mencoba banyak!
RF Sniffing (Opsional)
Langkah ini tidak diperlukan jika Anda hanya ingin mengontrol DIP-switch atau soket steker pemilih sel - yang didukung di luar kotak, dan modifikasi kode minimal akan diperlukan (meskipun ini masih menarik untuk dilakukan terlebih dahulu, jadi Anda akan mengerti apa yang terjadi di balik adegan).
Jika Anda memiliki remote RF lain yang ingin Anda tambahkan, Anda harus terlebih dahulu "mengendus" kode RF yang sedang dikirim. Untuk melakukannya, muat TerimaDemo_Advanced sketsa dari Menu -> Contoh -> RCSwitch folder, dan ubah baris berikut dari 0
mySwitch.enableReceive (0); // Penerima pada interupsi 0 => yaitu pin # 2
ke 2.
mySwitch.enableReceive (2); // Penerima pada GPIO 2 / D4.
Pasang modul penerima sebagai berikut. Melihat bagian depan papan penerima (lebih panjang dari keduanya, pemancar berbentuk bujur sangkar) - sisi dengan komponen-komponen di:
- Paling kanan adalah GND. Sambungkan ke GND pada papan NodeMCU.
- Paling kiri adalah VCC. Sambungkan ke VIN pada papan NodeMCU.
- Dua pin tengah adalah sinyal. Hubungkan salah satu ke D4 di NodeMCU (mereka terhubung bersama, jadi tidak masalah yang mana).

Sekarang unggah yang dimodifikasi TerimaDemo_Advanced, dan setelah selesai, buka monitor serial dan mulai menekan tombol pada kendali jarak jauh Anda. Salin desimal (termasuk panjang bit), panjang pulsa, dan protokol saat Anda menekan tombol.

Setelah melakukan ini, saya menemukan layar proyektor saya gunakan
- SCREEN UP: Menerima 8694273 / 24bit; Panjang pulsa: 355 atau 356; Protokol: 1
- LAYAR BAWAH: Menerima 8694276 / 24bit;Panjang pulsa: 355 atau 356; Protokol: 1
Lanjutkan untuk sebanyak mungkin tombol yang Anda butuhkan.
Menguji Pemancar
Selanjutnya, kami akan mencoba mengirim kode menggunakan pemancar. Kawat modul pemancar (yang persegi) sebagai berikut. Hati-hati: pelabelan pada pin ini mengerikan.
Pin VCC sebenarnya di tengah, bukan di sisi kiri. Saya menghancurkan satu modul dalam proses mencari tahu ini. Hal yang mengatakan "ATAD" sebenarnya adalah "DATA", dieja terbalik. Sekali lagi, data masuk ke D4, VCC ke VIN, dan GND ke GND (lepaskan modul penerima, Anda tidak lagi membutuhkannya).

Memuat Contoh -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, dan sekali lagi, ubah pin data:
mySwitch.enableTransmit (10);
untuk
mySwitch.enableTransmit (2);
Catatan, berbagai contoh disertakan dalam pustaka, dan yang mana yang bekerja untuk Anda akan bergantung pada jenis saklar yang Anda miliki. Tipe A (sakelar celup) dan B (cepat atau geser) adalah yang paling umum - lihat gambar di halaman RCSwitch. Untuk tipe B, menyalakan dan mematikan soket sesederhana:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
di mana 1 adalah ID saluran (panggil atas), dan 4 adalah ID soket (panggil bawah). Ini ditulis dalam angka romawi di sakuku. Maksimal 16 soket individu dapat ditangani, meskipun beberapa soket dapat menggunakan alamat yang sama jika Anda memiliki beberapa perangkat untuk dihidupkan sekaligus.
Namun, layar proyektor saya sedikit berbeda - menggunakan panjang pulsa yang berbeda. Jadi, untuk mengoperasikannya, berikut ini berhasil. Catatan Anda juga dapat menentukan protokol yang berbeda jika kendali jarak jauh Anda membutuhkannya, TAPI pastikan Anda mendefinisikan protokol sebelum panjang pulsa. Panjang pulsa ditimpa saat mengubah protokol.
// Perhatikan bahwa layar saya sebenarnya membutuhkan tombol DUA tekan (bukan tekan lama, tapi dua fisik menekan), jadi saya menunda sedikit kemudian mengirim sinyal yang sama lagi membatalkan screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (kode desimal, jumlah bit) delay (2000); mySwitch.send (8694273,24); } membatalkan screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); delay (2000); mySwitch.send (8694276,24); }
Tes semua kode Anda bekerja terlebih dahulu sebelum Anda melanjutkan ke langkah berikutnya.
Mengontrol melalui MQTT
Buka sketsa yang Anda unduh dari nama Github mqtt_rcswitch.ino, dan mulai dengan memodifikasi SSID dan kata sandi jaringan untuk rumah Anda. Kemudian, ubah nama saluran jika Anda inginkan, dan atur server MQTT. Jika Anda belum memiliki server MQTT yang berjalan pada instalasi OpenHAB Anda, baca bagian 2 dari panduan pemula OpenHAB kami Panduan Pemula OpenHAB Bagian 2: ZWave, MQTT, Rules and ChartingOpenHAB, perangkat lunak otomatisasi rumah open source, jauh melebihi kemampuan sistem otomasi rumah lainnya di pasaran - tetapi tidak mudah untuk diatur. Bahkan, itu bisa membuat frustasi. Baca lebih banyak . Perhatikan bahwa kode saya dirancang untuk soket tipe B (sakelar putar), meskipun Anda dapat dengan mudah memodifikasinya untuk sakelar DIP juga.
Bagian terpenting dari kode adalah pesan diterima() fungsi, yang merespons perintah MQTT yang masuk. Dalam fungsi ini, kami pertama-tama memeriksa kata kunci utama - Saya memilih "beralih" dan "layar". Dalam kasus "switch", kami kemudian mengurai saluran dan memasukkan ID; lalu periksa badan payload untuk melihat perintahnya.
void messageReceived (topik String, payload String, char * byte, panjang int unsigned) {if (topic.indexOf ("switch")> = 0) {// sakelar kontrol, parsing saluran dan pasang id int channel = getValue (topik, '/', 3) .toInt (); int plug = getValue (topik, '/', 4) .toInt (); if (payload == "on") {mySwitch.switchOn (channel, plug); } else {mySwitch.switchOff (channel, plug); }} lain jika (topic.indexOf ("layar")> = 0) {// kontrol layar if (payload == "up") {screenUp (); } lain jika (payload == "down") {screenDown (); }} / * tambahkan yang lain jika di sini untuk mendengarkan lebih banyak perintah (atau hanya memodifikasi yang di atas jika Anda tidak ingin layar) * / }
Secara default, perintah MQTT berikut berfungsi:
ruang tamu / kontrol / switch / X / Y (di mana X adalah saluran, dan Y adalah plug ID; dengan badan pesan hidup atau mati)
ruang tamu / kontrol / layar (dengan isi pesan naik atau turun)
Gunakan baris perintah atau klien GUI MQTT untuk menguji perangkat Anda sebelum menambahkan ke OpenHAB.
Menambahkan ke OpenHAB
Sebagai langkah terakhir, kita hanya perlu membuat beberapa item untuk switch ini di OpenHAB. Saya telah mendefinisikan item-item berikut untuk saat ini, tetapi Anda harus dapat mengetahui cara menambahkan lebih banyak:
/ * Perangkat RF433mHz * / Alihkan CinemaScreen "Layar" (Bioskop) {mqtt = "> [broker: livingroom / control / screen: command: ON: down],> [broker: livingroom / control / screen: command: OFF: up]"} Switch Switch41 "Switch41" (Cinema) {mqtt = "> [broker: livingroom / control / switch / 4/1: perintah: ON: on],> [broker: livingroom / control / switch / 4/1: perintah: OFF: mati]"} Switch Switch42 "Switch42" (Bioskop) {mqtt = "> [broker: livingroom / control / switch / 4/2: perintah: ON: on],> [broker: livingroom / control / switch / 4/2: perintah: OFF: mati]"}
Anda sekarang seharusnya dapat mengontrol perangkat RF Anda dari OpenHAB! Satu hal yang membuat saya terkejut adalah jangkauannya - satu simpul bisa menutupi sebagian besar rumah saya. Anda tentu saja dapat menambahkan node lain, mendengarkan saluran yang sama, yang hanya mengulangi perintah yang sama, jika Anda membutuhkan jangkauan lebih lanjut.
Satu-satunya batasan yang perlu diingat adalah soket itu sendiri tidak dapat melaporkan statusnya, jadi jika Anda menggunakan remote asli, mengontrol status soket mungkin tidak tercermin secara akurat di dalamnya OpenHAB. Tetap menggunakan hanya antarmuka OpenHAB dan Anda harus baik-baik saja.
Pertanyaan atau masalah? Tanyakan di komentar, dan saya akan melakukan yang terbaik untuk membantu. Jika Anda ingin memperbaiki kode saya, jangan ragu untuk mengirimkan permintaan penarikan.
James memiliki gelar BSc dalam Artificial Intelligence, dan bersertifikat CompTIA A + dan Network +. Dia adalah pengembang utama MakeUseOf, dan menghabiskan waktu luangnya bermain VR paintball dan boardgames. Dia telah membangun PC sejak dia masih kecil.