Iklan

Gratis tidak selalu berarti "tidak sebagus dibayar", dan OpenHAB tidak terkecuali. Perangkat lunak otomatisasi rumah sumber terbuka jauh melebihi kemampuan sistem otomasi rumah lainnya di pasaran - tetapi tidak mudah untuk diatur. Bahkan, itu bisa membuat frustasi.

Panduan ini tersedia untuk diunduh sebagai PDF gratis. Unduh OpenHAB Beginner's Guide Bagian 2: ZWave, MQTT, Rules and Charting sekarang. Jangan ragu untuk menyalin dan berbagi ini dengan teman dan keluarga Anda.

Di bagian 1 dari panduan ini, saya menuntun Anda menginstal OpenHAB pada Raspberry Pi Memulai dengan OpenHAB Home Automation di Raspberry PiOpenHAB adalah platform otomatisasi rumah sumber terbuka yang matang yang berjalan pada berbagai perangkat keras dan sedang protokol agnostik, artinya dapat terhubung ke hampir semua perangkat keras otomasi rumah di pasaran hari ini. Baca lebih banyak , memperkenalkan konsep inti OpenHAB, dan menunjukkan kepada Anda cara menambahkan item pertama Anda ke dalam sistem. Hari ini kita akan melangkah lebih jauh:

instagram viewer
  • Menambahkan perangkat ZWave
  • Menambahkan pengontrol Harmony Ultimate
  • Memperkenalkan aturan
  • Memperkenalkan MQTT, dan menginstal broker MQTT pada Pi Anda, dengan sensor pada Arduino
  • Merekam data dan membuat grafiknya

Pengantar Z-Wave

Z-Wave telah menjadi protokol otomatisasi rumah yang dominan selama bertahun-tahun: ini dapat diandalkan, telah dikembangkan secara luas, dan bekerja dalam rentang yang jauh lebih lama daripada produk rumah pintar lainnya. Ada ratusan sensor Z-Wave yang tersedia untuk Anda yang melakukan berbagai tugas. OpenHAB bisa bekerja dengan Z-Wave, tetapi sulit untuk diatur, dan keandalannya tidak dijamin.

Jika Anda mempertimbangkan untuk membeli rumah yang penuh dengan sensor Z-Wave khusus untuk digunakan dengan OpenHAB, saya mendorong Anda untuk mempertimbangkan kembali. Ini mungkin berhasil untuk Anda, atau mungkin terganggu dengan masalah kecil tapi terus-menerus. Setidaknya, jangan membeli rumah yang penuh dengan sensor sampai Anda punya kesempatan untuk mencoba beberapa. Satu-satunya alasan untuk memilih Z-Wave adalah jika Anda tidak 100% memilih OpenHAB, dan ingin membiarkan opsi Anda terbuka di masa depan: Z-Wave misalnya bekerja dengan Samsung SmartThings Smart Hub untuk Otomasi Rumah Yang Terbaik untuk Anda?Untuk sementara, orang-orang menganggap ide itu tidak lebih dari tipu muslihat, tetapi rilis produk baru-baru ini menunjukkan bahwa otomatisasi rumah pintar mulai memenuhi janjinya. Baca lebih banyak hub, serta hub spesifik Z-Wave seperti Homeseer, dan berbagai pilihan perangkat lunak lain seperti Domoticz.

Meskipun OpenHAB termasuk Z-Wave mengikat, Anda masih perlu melakukannya konfigurasikan jaringan Z-Wave terlebih dahulu, sebelum OpenHAB dapat mulai menanyakannya untuk data. Jika Anda memiliki papan pengontrol Rasberry, Anda memiliki beberapa perangkat lunak yang disediakan untuk mengonfigurasi jaringan, jadi kami tidak akan membahasnya di sini. Jika Anda membeli pengontrol Aeotec USB Z-Stick atau sejenisnya, kemungkinan Anda tidak menyertakan perangkat lunak apa pun, jadi baca terus.

Aeotec Z-Stick Gen5, Z-Wave Plus USB untuk membuat gatewayAeotec Z-Stick Gen5, Z-Wave Plus USB untuk membuat gateway Beli Sekarang Di Amazon $44.95

Jika Anda sudah memiliki pengaturan jaringan Z-Wave, Anda cukup tancapkan controller Anda ke Pi dan mulai mengkonfigurasi binding dan item. Jika ini adalah perampokan pertama Anda ke Z-Wave, ini sedikit lebih rumit.

Pertama, di sisi perangkat keras: setiap pengontrol memiliki cara sendiri untuk memasangkan dengan perangkat (secara teknis dikenal sebagai "mode inklusi" di mana ID node ditugaskan). Dalam kasus Aotec Z-Stick, ini berarti mencabutnya dari port USB, dan menekan tombol sekali untuk menempatkannya ke mode inklusi. Kemudian bawa ke dekat perangkat yang Anda pasangkan, dan tekan tombol inklusi juga (ini juga akan bervariasi: soket Everspring saya memerlukan tombol untuk menekan 3 kali berturut-turut dengan cepat, jadi pelajaran di sini adalah membaca manual untuk perangkat Anda).

Z-Stick berkedip sebentar untuk menunjukkan keberhasilan. Ini menyajikan masalah ketika menghubungkannya kembali ke Pi, karena port baru ditugaskan. Mulai ulang Pi Anda untuk meresetnya kembali ke port standar jika Anda menemukannya secara dinamis dipindahkan yang lain. Lebih baik lagi: jangan tancapkan ke Pi sampai Anda menyelesaikan semua pemasangan perangkat keras terlebih dahulu.

Menginstal HABmin dan Z-Wave Bindings

Karena OpenHAB sebenarnya bukan utilitas konfigurasi untuk Z-Wave, kami akan menginstal alat manajemen web lain yang berfungsi - sesuatu yang disebut HABmin. Kepala ke Repositori HABmin Github unduh rilis saat ini. Setelah membuka ritsletingnya, Anda akan menemukan 2 .botol file di direktori addons - ini harus ditempatkan di direktori addons yang sesuai di OpenHAB Home share Anda (jika Anda juga menggunakan Aotec gen5 Z-Stick, pastikan Anda mendapatkan setidaknya versi 1.8 dari ikatan Z-Wave).

Selanjutnya, buat folder baru di direktori webapps, dan beri nama "habmin" (huruf kecil penting). Salin sisa file yang diunduh ke sana.

Catatan: Ada juga a HABmin 2 dalam pengembangan aktif. Instalasi hampir sama tetapi dengan tambahan add .jar. Mungkin ada baiknya mencoba keduanya hanya untuk melihat mana yang Anda sukai.

Jika Anda belum melakukannya, tancapkan controller Anda ke Pi Anda. Ketik yang berikut untuk menemukan port yang benar.

ls / dev / tty *

Anda sedang mencari apa pun dengan USB di namanya, atau dalam kasus khusus saya, Z-stick hadir dengan sendirinya /dev/ttyACM0 (modem). Mungkin lebih mudah untuk melakukan perintah sekali sebelum Anda memasangnya, dan sekali setelahnya, sehingga Anda dapat melihat perubahan apa jika Anda tidak yakin.

devtty

Buka file konfigurasi OpenHAB dan modifikasi bagian pada Z-Wave, batalkan komentar kedua baris dan letakkan alamat perangkat Anda yang sebenarnya. Satu langkah terakhir bagi saya adalah mengizinkan pengguna OpenHAB untuk mengakses modem.

sudo usermod -a -G dialout openhab

Sekarang, untuk memulai semuanya, mulai kembali OpenHAB

sudo layanan openhab restart

Semoga, jika Anda memeriksa log debug, Anda akan melihat sesuatu seperti ini. Selamat, Anda sekarang berbicara Z-Wave. Anda juga dapat menemukan log debug dibanjiri dengan pesan dari berbagai node Z-Wave. Mari kita mulai dengan memeriksa HABMIN untuk melihat apa yang ditemukannya: http://openhab.local: 8080 / habmin / index.html (mengganti openhab.local dengan nama host Raspberry Pi atau alamat IP Anda).

zpergi memulai di log openhab

Ada banyak yang bisa dilihat di HABMIN, tetapi kami hanya benar-benar peduli dengan Konfigurasi -> Bindings -> Z-Wave -> Perangkat tab, seperti yang Anda lihat di bawah. Perluas node untuk mengedit label lokasi dan nama untuk kemudahan referensi Anda.

edit nama perangkat

Mengkonfigurasi Item Z-Wave

Setiap perangkat Z-Wave akan memiliki konfigurasi spesifik untuk OpenHAB. Untungnya, sebagian besar perangkat telah dieksplorasi dan akan ada contoh untuk Anda. Mengonfigurasikan perangkat khusus yang tidak dikenali berada di luar cakupan panduan ini, tetapi mari kita asumsikan itu didukung untuk saat ini.

Pertama, saya punya saklar dan meteran daya Everspring AN158 dasar pada Node 3. Googling cepat membawa saya ke posting blog di Wetwa.re, dengan konfigurasi item sampel. Saya mengadaptasi ini sebagai berikut:

Alihkan Dehumidifier_Switch "Dehumidifier" {zwave = "3: command = switch_binary"} Nomor Dehumidifier_Watts "Konsumsi daya dehumidifier [% .1f W]" {zwave = "3: command = meter"}

Sempurna.

Selanjutnya adalah Aeotec Gen5 Multi-Sensor.

Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) Beli Sekarang Di Amazon $69.27

Untuk yang ini, saya menemukan contoh konfigurasi di iwasdot.com, dan multisensor saya ada di Node 2.

Angka Hallway_Temperature "Suhu Hallway [% .1f ° C]" (Hallway, Temperature) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Nomor Lorong_Humiditas "Lorong Kelembaban [% .0f %%]" (Lorong, Kelembaban) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Angka Hallway_Luminance "Pencahayaan Lorong [% .0f Lux]" (Hallway) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 3"} Hubungi Hallway_Motion "Hallway Motion [% s]" (Hallway, Motion) {zwave = "2: 0: command = sensor_binary, respond_to_basic = true"} Number sensor_1_battery "Battery [% s %%]" (Motion) {zwave = "2: 0: command = battery"}

Jika format ini terlihat aneh bagi Anda, silakan kembali ke yang pertama panduan pemula Memulai dengan OpenHAB Home Automation di Raspberry PiOpenHAB adalah platform otomatisasi rumah sumber terbuka yang matang yang berjalan pada berbagai perangkat keras dan sedang protokol agnostik, artinya dapat terhubung ke hampir semua perangkat keras otomasi rumah di pasaran hari ini. Baca lebih banyak , khususnya bagian pengikatan Hue, tempat saya menjelaskan bagaimana barang ditambahkan. Anda mungkin hanya perlu menyalin contoh tempel seperti ini, tetapi jika Anda memiliki perangkat baru, dokumentasi yang mengikat merinci semua perintah.

Penjilidan Logitech Harmony

Sebelum kita masuk ke aturan, saya ingin menambahkan catatan singkat tentang bekerja dengan ikatan Harmony. Saya penggemar berat Seri harmoni dari jarak jauh Ulasan dan Hadiah Logitech Harmony UltimateRuang tamu Anda kacau - akui saja. Anda dimaafkan karena bertanya-tanya kendali jarak jauh mana perangkat. Apa dengan TV, amplifier, TiVO, pemutar BluRay, bahkan mungkin pencahayaan - aktivitas switching menjadi ... Baca lebih banyak untuk menyederhanakan pengalaman pusat media rumah, tetapi mereka sering berdiri sebagai sistem terpisah di dalam rumah pintar. Dengan OpenHAB, kegiatan Logitech Harmony dan kontrol perangkat penuh sekarang dapat menjadi bagian dari sistem terpusat Anda, dan bahkan termasuk dalam aturan otomatisasi.

Mulailah dengan menginstal tiga file mengikat yang Anda temukan dengan menggunakan apt-cache untuk mencari "harmoni":

pencarian apt-cache openhab untuk pengikatan harmoni

Jangan lupa dikunyah direktori binding lagi ketika Anda selesai:

sudo apt-get install openhab-addon-action-harmonyhub. sudo apt-get install openhab-addon-binding-harmonyhub. sudo apt-get install openhab-addon-io-harmonyhub. sudo chown -hR openhab: openhab / usr / share / openhab

Untuk mengkonfigurasi ikatan, buka file openhab.cfg dan tambahkan bagian baru sebagai berikut:

########## HARMONY REMOTE CONTROLS ########## harmonyhub: host = 192.168.1.181atau ip Anda
harmonyhub: nama pengguna =login-harmoni-email-Anda
harmonyhub: password =kata sandi Anda

Alamat IP adalah dari hub Harmony Anda. Gunakan pemindai jaringan untuk mengetahuinya. Anda juga harus memasukkan detail login Anda, yang Anda masukkan saat meluncurkan utilitas konfigurasi Harmony standar. Itu dia. Setelah memulai ulang Hue Anda, log debug Anda akan tiba-tiba muncul dari pengikatan.

Ini adalah daftar yang diformat JSON dari semua aktivitas, perangkat, dan perintah Anda yang dapat dikirim. Merupakan ide bagus untuk menyalin ini untuk referensi di masa mendatang. Anda dapat membuatnya lebih mudah untuk dibaca dengan node yang dapat dilipat dengan menempel ke formatter JSON online seperti ini.

json memformat keluaran openhab

Selain aktivitas PowerOff standar yang merupakan default, Anda akan menemukan aktivitas Anda sendiri yang didaftarkan di sini berdasarkan nama. Sekarang mari kita buat kontrol satu tombol sederhana untuk memulai aktivitas. Pertama, dalam file item Anda, tambahkan baris berikut. Ubah grup dan ikon jika Anda mau.

/ * Hub Harmony * / String Harmony_Activity "Harmony [% s]" (Living_Room) {harmonyhub = "* [currentActivity]"}

Ini adalah sebuah mengikat string dua arah, yang dapat mengambil aktivitas saat ini, dan memerintahkan aktivitas saat ini untuk menjadi sesuatu yang lain. Sekarang kita dapat membuat tombol untuk itu, di file sitemap.

Beralih item = Pemetaan Harmony_Activity = [PowerOff = 'Off', Latihan = 'Latihan', 13858434 = 'TV', Karaoke = 'Karaoke']

Di braket persegi Anda akan melihat setiap aktivitas bersama dengan label. Secara umum Anda dapat merujuk langsung ke aktivitas yang Anda beri nama pada remote Anda, tetapi pengecualian untuk ini saya temukan, adalah sesuatu dengan spasi dalam nama aktivitas, seperti "Tonton TV". Dalam hal ini, Anda harus menggunakan ID aktivitas. Sekali lagi, Anda dapat menemukan ID di output debug JSON. Simpan dan segarkan antarmuka Anda, Anda akan melihat sesuatu yang mirip dengan ini:

harmoni openhab di sitemap

Anda juga dapat merujuk ke aktivitas dalam aturan Anda, seperti yang akan kita lihat selanjutnya. Baca halaman wiki untuk informasi lebih lanjut tentang Mengikat harmoni.

Pengantar Umum tentang Aturan

Sebagian besar hub rumah pintar mencakup beberapa jenis pembuatan aturan sehingga Anda dapat secara otomatis bereaksi terhadap data sensor dan acara di rumah. Faktanya, saya berpendapat bahwa rumah yang benar-benar cerdas bukanlah rumah yang Anda perlukan untuk menghabiskan waktu berinteraksi dengan aplikasi seluler - ini adalah rumah yang tidak terlihat oleh pengguna akhir dan sepenuhnya otomatis. Untuk tujuan ini, OpenHAB juga menyertakan bahasa scripting aturan yang kuat yang dapat Anda programkan, jauh melebihi kompleksitas kebanyakan hub rumah pintar Battle of the Smart Home Hubs: Apa yang Ada dan Apa yang Datang? Baca lebih banyak atau Resep IFTTT IFTTT Sekarang Terhubung ke Apa Pun: Memperkenalkan Saluran PembuatPenggunaan potensial untuk IFTTT tidak terbatas. Tetapi sampai sekarang, sulit untuk menghubungkannya dengan proyek perangkat keras Anda sendiri. Hari ini, itu semua berubah. Baca lebih banyak .

Aturan pemrograman terdengar lebih buruk dari itu. Mari kita mulai dengan sepasang aturan yang menghidupkan atau mematikan lampu tergantung pada sensor kehadiran:

aturan "Lampu kantor menyala ketika James hadir" ketika Item JamesInOffice berubah dari OFF ke ON. lalu kirim Perintah (Office_Hue, ON) akhiri aturan "Lampu kantor mati ketika James pergi" ketika Item JamesInOffice berubah dari ON ke OFF. lalu kirim Perintah (Office_Hue, OFF) akhir

Pertama, kami beri nama aturan - deskriptif, sehingga Anda tahu acara apa yang diaktifkan. Selanjutnya, kita mendefinisikan aturan sederhana kita dengan mengatakan ketika x benar, maka lakukan y. End menandakan penutupan aturan khusus itu. Ada sejumlah kata khusus yang dapat Anda gunakan dalam aturan, tetapi untuk saat ini kami sedang berhadapan dengan dua bit sintaks sederhana - Barang, yang memungkinkan Anda untuk menanyakan keadaan sesuatu; dan sendCommand, yang melakukan persis seperti yang Anda pikirkan. Sudah kubilang ini mudah.

Mungkin tidak perlu menggunakan sepasang aturan, tetapi karena logika saya menjadi lebih kompleks, akan bermanfaat untuk memisahkannya apakah saya memasuki atau meninggalkan area - dan mungkin merupakan ide yang bagus untuk menambahkan sensor cahaya di suatu tempat ke dalam persamaan sehingga kita tidak perlu menyalakannya secara tidak perlu lampu.

Mari kita lihat contoh lain untuk membuat aturan terjadwal.

aturan "Olahraga setiap pagi" when Time cron "0 0 8 1/1 *? *" lalu harmonyStartActivity ("Latihan") akhir.

Sekali lagi, kita beri nama aturan, nyatakan kondisi kapan harus menyala, dan tindakan yang harus diambil. Tetapi dalam kasus ini, kami mendefinisikan pola Waktu. Kode lucu yang Anda lihat dalam tanda kutip adalah ekspresi CRON untuk Quartz Scheduler (formatnya sedikit berbeda dengan CRONtab biasa). Saya menggunakan cronmaker.com untuk membantu membuat ekspresi, tetapi Anda juga dapat membaca panduan format [Tidak Lagi Tersedia] untuk penjelasan terperinci dan lebih banyak contoh.

generator cron
CronMaker.com digunakan untuk menghasilkan ekspresi Cron yang diformat dengan benar

Peraturan saya hanya mengatakan "8 pagi setiap pagi, setiap hari dalam seminggu, beri tahu sistem Harmony Ultimate saya untuk memulai aktivitas Latihan", yang pada gilirannya mengaktifkan TV, Xbox, amplifier, dan menekan tombol A setelah satu menit untuk meluncurkan disk di drive.

Sayangnya, OpenHAB belum dapat melakukan latihan untuk saya.

Satu lagi aturan yang ingin saya tunjukkan kepada Anda adalah sesuatu yang saya gunakan untuk mengatur tingkat kelembaban di rumah saya. Saya memiliki dehumidifier tunggal yang saya perlukan untuk bergerak di mana saja diperlukan, jadi saya memutuskan untuk melihat semua sensor kelembaban saya, menemukan mana yang tertinggi, dan menyimpannya dalam suatu variabel. Saat ini dipicu setiap menit, tetapi itu dapat dengan mudah diturunkan. Lihatlah dulu:

impor org.openhab.core.library.types. * import org.openhab.model.script.actions. * impor java.lang. Aturan string "Monitor Kelembaban" ketika Time cron "0 * * * *?" lalu var prevHigh = 0 var highHum = "" Kelembaban? .members.forEach [hum | logDebug ("moisture.rules", hum.name); if (hum.state as DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("moisture.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); akhir.

Inti dari aturan ada di Kelembaban?. Anggota baris. Kelembaban adalah nama grup untuk sensor kelembaban saya; anggota ambil semua item dalam grup itu; untuk setiap beralih di atasnya (dengan format kurung siku yang aneh yang mungkin tidak Anda kenal). Sintaks aturan adalah turunan dari Xtend, jadi Anda bisa membaca Dokumentasi Xtend jika Anda tidak dapat menemukan contoh untuk beradaptasi.

Anda mungkin tidak perlu melakukannya - ada ratusan aturan contoh di luar sana:

  • Penjelasan rinci tentang aturan di wiki resmi
  • Itu sampel aturan resmi halaman wiki
  • Mengambil aturan ke ketinggian baru
  • Sampel tingkat lanjut di IngeniousFool.net

MQTT untuk OpenHAB dan Internet of Things

MQTT adalah sistem pesan ringan untuk komunikasi mesin-ke-mesin - semacam Twitter untuk Anda Arduino atau Raspberry Pis untuk berbicara satu sama lain (meskipun tentu saja itu berfungsi dengan lebih dari sekadar itu). Ini dengan cepat mendapatkan popularitas dan menemukan dirinya sebagai rumah dengan perangkat Internet of Things, yang biasanya rendah sumber daya pengontrol mikro yang membutuhkan cara yang andal untuk mengirimkan data sensor kembali ke hub Anda atau menerima remote perintah. Itulah tepatnya yang akan kita lakukan dengannya.

Tetapi mengapa menciptakan kembali roda?

MQ Telemetry Transport ditemukan pada tahun 1999 untuk menghubungkan pipa minyak melalui satelit yang lambat koneksi, yang dirancang khusus untuk meminimalkan penggunaan baterai dan bandwidth, sambil tetap menyediakan yang andal pengiriman data. Selama bertahun-tahun prinsip-prinsip desain tetap sama, tetapi use case telah bergeser dari embedded system khusus ke perangkat Internet of Things umum. Pada 2010 protokol ini dirilis secara gratis, terbuka untuk siapa saja untuk menggunakan dan mengimplementasikan. Kami suka gratis.

Anda mungkin bertanya-tanya mengapa kita bahkan repot dengan protokol lain - kita sudah memiliki HTTP - yang bisa digunakan untuk mengirim pesan cepat antara semua jenis sistem yang terhubung web (seperti OpenHAB dan IFTTT, khususnya dengan yang baru saluran pembuat IFTTT Sekarang Terhubung ke Apa Pun: Memperkenalkan Saluran PembuatPenggunaan potensial untuk IFTTT tidak terbatas. Tetapi sampai sekarang, sulit untuk menghubungkannya dengan proyek perangkat keras Anda sendiri. Hari ini, itu semua berubah. Baca lebih banyak ). Dan kamu benar. Namun, overhead pemrosesan server HTTP cukup besar - sangat banyak sehingga Anda tidak dapat menjalankannya dengan mudah tertanam mikrokontroler seperti Arduino (setidaknya, Anda bisa, tetapi Anda tidak akan memiliki banyak memori tersisa untuk apa pun lain). MQTT adalah sisi lain yang ringan, jadi mengirim pesan ke jaringan Anda tidak akan menyumbat pipa, dan dapat dengan mudah masuk ke dalam ruang memori kecil Arduino kami.

Bagaimana cara kerja MQTT?

MQTT membutuhkan server (disebut "pialang") dan satu atau lebih klien. Server bertindak sebagai perantara, menerima pesan dan menyiarkan ulang mereka ke klien yang berminat.

Mari kita lanjutkan dengan Twitter untuk mesin analoginya. Seperti halnya pengguna Twitter dapat men-tweet 140 karakter mereka sendiri yang tidak berarti, dan pengguna dapat "mengikuti" pengguna lain untuk melihat aliran posting yang dikuratori, Klien MQTT dapat berlangganan saluran tertentu untuk menerima semua pesan dari sana, serta mempublikasikan pesan mereka sendiri untuk itu saluran. Pola penerbitan dan berlangganan ini disebut sebagai pub / sub, yang bertentangan dengan tradisi server klien model HTTP.

HTTP mengharuskan Anda menjangkau mesin tempat Anda berkomunikasi, katakan Halo, lalu bolak-balik saling mengakui satu sama lain sementara Anda mendapatkan atau memasukkan data. Dengan pub / sub, klien yang melakukan penerbitan tidak perlu tahu klien mana yang berlangganan: itu hanya memompa keluar pesan, dan broker mendistribusikannya ke klien yang berlangganan. Setiap klien dapat mempublikasikan, dan berlangganan topik, seperti halnya pengguna Twitter.

Tidak seperti Twitter, MQTT tidak terbatas pada 140 karakter. Itu data agnostik, sehingga Anda dapat mengirim sejumlah kecil atau blok teks besar, datagram berformat JSON, atau bahkan gambar dan file biner.

Bukannya MQTT lebih baik dari HTTP untuk semuanya - tetapi MQTT lebih baik adalah lebih cocok jika kita akan memiliki banyak sensor di sekitar rumah, terus melaporkan.

Penting juga untuk mengetahui bahwa OpenHAB tidak akan bertindak sebagai broker MQTT Anda - kami akan membahasnya nanti. Namun, OpenHAB akan bertindak sebagai klien: ia dapat menerbitkan log aktivitas OpenHAB Anda, serta mengikat tertentu saluran ke perangkat, jadi misalnya Anda dapat memiliki sakelar yang dikendalikan oleh pesan MQTT pada khususnya saluran. Ini sangat ideal untuk membuat rumah yang penuh dengan sensor.

Instal Mosquitto di Pi Anda

Meskipun OpenHAB menyertakan klien MQTT sehingga Anda dapat berlangganan suatu topik dan juga mempublikasikan pesan, OpenHAB tidak akan bertindak sebagai server. Untuk itu, Anda harus menggunakan broker MQTT berbasis web (berbayar atau gratis), atau menginstal perangkat lunak gratis di Pi Anda. Saya ingin menyimpan semuanya di rumah, jadi saya memasang Mosquitto di Pi.

Sayangnya, versi yang tersedia melalui apt-get yang biasa benar-benar ketinggalan zaman. Sebagai gantinya, mari kita tambahkan sumber terbaru.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key tambahkan mosquitto-repo.gpg.key. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get install mosquitto.

Hanya itu yang perlu kita lakukan untuk memiliki server MQTT dan berjalan di jaringan lokal. Broker Anda berjalan pada port 1883 secara default.

Periksa server MQTT Anda berfungsi menggunakan MQTT.fx gratis, yang merupakan cross-platform. Klik ikon pengaturan untuk membuat profil baru, dan masukkan alamat IP atau nama Raspberry Pi Anda. Simpan, dan tekan terhubung. Jika lampu lalu lintas kecil di kanan atas berubah hijau, Anda senang melakukannya.

contoh profil mqttfx

Untuk tes cepat, klik pada tab "berlangganan", dan ketik inTopic / ke dalam kotak teks, lalu tekan tombol Langganan tombol. Anda sekarang berlangganan untuk menerima pesan tentang topik bernama inTopic, meskipun itu akan menampilkan 0 pesan. Kembali ke tab publikasikan, ketikTopic ke dalam kotak kecil, dan pesan singkat ke kotak teks besar di bawah ini. Memukul Menerbitkan beberapa kali dan lihat kembali pada tab berlangganan. Anda akan melihat beberapa pesan muncul di topik itu.

Tes MQTT inTopic

Sebelum kita menambahkan beberapa sensor aktual ke jaringan kita, kita perlu belajar tentang tingkat topik, yang memungkinkan kita untuk menyusun dan memfilter jaringan MQTT. Nama topik peka huruf besar-kecil, tidak boleh dimulai dengan $, atau menyertakan spasi, atau karakter non-ASCII - praktik pemrograman standar untuk nama variabel, sungguh.

/ Pemisah menunjukkan tingkat topik, yang bersifat hierarkis, misalnya yang berikut adalah semua tingkat topik yang valid.

inTopic / smallSubdivision / evenSmallerSubdivision. myHome / livingRoom / suhu. myHome / livingRoom / kelembaban. myHome / dapur / suhu. myHome / dapur / kelembaban

Sudah, Anda harus melihat bagaimana struktur pohon ini sangat cocok untuk rumah pintar yang penuh dengan sensor dan perangkat. Praktik terbaik untuk digunakan dengan beberapa sensor dalam satu ruangan adalah dengan mempublikasikan setiap variabel sensor sesuai tingkat topiknya sendiri - bercabang ke lebih spesifik (seperti pada contoh di atas) - daripada mencoba untuk menerbitkan beberapa jenis sensor yang sama saluran.

Klien kemudian dapat menerbitkan atau berlangganan ke sejumlah level topik individual, atau menggunakan beberapa karakter wildcard khusus untuk memfilter dari tingkat lebih tinggi di pohon.

+ Wildcard menggantikan setiap level satu topik. Contohnya:

suhu myHome / + /

akan berlangganan klien untuk keduanya

myHome / livingRoom / suhu. myHome / dapur / suhu

... tetapi tidak pada tingkat kelembaban.

# Adalah wildcard multi-level, jadi Anda bisa mengambil apa saja dari array sensor livingRoom dengan:

myHome / livingRoom / #

Secara teknis, Anda juga dapat berlangganan ke level root # yang membuat Anda benar-benar segalanya melewati broker, tapi itu bisa seperti menempelkan selang kebakaran di wajah Anda: sedikit luar biasa. Coba sambungkan ke broker MQTT publik dari HiveMQ dan berlangganan ke #. Saya mendapat sekitar 300 pesan dalam beberapa detik sebelum klien saya mogok.

Tip Pemula MQTT: “/myHome/” adalah topik yang berbeda dengan “rumah saya/" - termasuk garis miring di awal membuat level topik kosong, yang walaupun secara teknis valid, tidak disarankan karena dapat membingungkan.

Sekarang kita tahu teorinya, mari kita mulai dengan Arduino, Ethernet Shield, dan sensor suhu dan kelembaban DHT11 - Anda mungkin punya satu di starter kit Anda, tetapi jika tidak, tukar saja sensor lingkungan dengan sensor gerak (atau bahkan tombol).

Menerbitkan MQTT Dari Arduino Dengan Koneksi Ethernet

Jika Anda memiliki perangkat hybrid yang kompatibel dengan Arduino dengan Wi-Fi atau Ethernet built-in, itu juga bisa digunakan. Akhirnya kami akan menginginkan cara komunikasi yang lebih baik / lebih murah yang harus menggunakan koneksi jaringan di setiap kamar, tetapi ini berfungsi untuk mempelajari dasar-dasarnya.

Mulailah dengan mengunduh perpustakaan pubsubclient dari Github. Jika Anda telah menggunakan tombol "Unduh sebagai ZIP", strukturnya sedikit salah. Unzip, ganti nama folder menjadi adil pubsubclient, lalu keluarkan dua file dari menu src folder dan pindahkan ke atas satu tingkat ke akar folder yang diunduh. Kemudian pindahkan seluruh folder ke folder Anda Arduino / perpustakaan direktori.

Ini kode contoh saya yang dapat Anda adaptasi: output sinyal DHT11 ada di pin 7. Ubah IP server untuk Pi Anda pada baris berikut:

client.setServer ("192.168.1.99", 1883);

Sayangnya, kami tidak dapat menggunakannya dengan nama yang bersahabat (OpenHAB.lokal dalam kasus saya) karena tumpukan TCP / IP pada Arduino sangat sederhana dan menambahkan kode untuk penamaan Bonjour akan menjadi banyak memori yang tidak ingin kita buang. Untuk mengubah topik di mana data sensor disiarkan, gulir ke bawah ke baris ini:

buffer char [10]; dtostrf (t, 0, 0, buffer); client.publish ("openhab / himitsu / temperature", buffer); dtostrf (h, 0, 0, buffer); client.publish ("openhab / himitsu / moisture", buffer);

Kode ini juga termasuk berlangganan saluran perintah. Temukan dan sesuaikan baris berikut:

client.subscribe ("openhab / himitsu / command");

Periksa kode di sekitar sana dan Anda akan melihat bahwa Anda dapat dengan mudah mengontrol LED atau relay misalnya dengan mengirim perintah ke saluran tertentu. Dalam kode contoh, itu hanya mengirim pesan kembali mengakui penerimaan perintah.

Unggah kode Anda, colokkan Arduino Anda ke jaringan, dan gunakan MQTT.fx untuk berlangganan # atau openhab / himitsu / # (atau apa pun nama kamar yang Anda ubah, tetapi jangan lupa untuk memasukkan # di bagian akhir). Sebentar lagi Anda akan melihat pesan masuk; dan jika Anda mengirim ON atau OFF ke topik perintah, Anda akan melihat ucapan terima kasih kembali juga.

mqtt arduino pesan kembali

Binding MQTT untuk OpenHAB

Langkah terakhir dalam persamaan adalah untuk menghubungkan ini ke OpenHAB. Untuk itu, tentu saja kita membutuhkan yang mengikat.

sudo apt-get install openhab-addon-binding-mqtt. sudo chown -hR openhab: openhab / usr / share / openhab

Dan edit file konfigurasi untuk mengaktifkan penjilidan.

mqtt: broker.url = tcp: // localhost: 1883. mqtt: broker.clientId = openhab

Mulai ulang OpenHAB

sudo layanan openhab restart

Lalu, mari tambahkan satu atau dua item:

/ * Sensor MQTT * / Nomor Himitsu_Temp "Suhu Himitsu [% .1f ° C]"(Himitsu, Temperatur) {mqtt = " (Himitsu, Kelembaban) {mqtt = "

Sekarang Anda harus memahami formatnya; itu mendapatkan Item nomor dari ikatan MQTT, pada topik yang ditentukan. Ini contoh sederhana, Anda mungkin ingin merujuk ke halaman wiki tempat itu bisa jauh lebih kompleks.

Selamat, Anda sekarang memiliki basis dari array sensor berbasis Arduino yang murah. Kami akan meninjau kembali ini di masa mendatang dan menempatkan Arduino ke dalam jaringan RF mereka yang sepenuhnya terpisah. Saya juga membuat versi yang identik untuk Wizwiki 7500 board jika Anda kebetulan memiliki salah satunya.

Data Kegigihan dan Grafik

Sekarang Anda mungkin sekelompok sensor yang diatur, baik dari Z-Wave atau Arduino khusus yang menjalankan MQTT - sehingga Anda dapat melihat kondisi saat ini dari sensor tersebut kapan saja, dan Anda juga harus bereaksi terhadap nilainya aturan Tetapi hal yang menarik tentang nilai sensor umumnya adalah perubahannya seiring waktu: di situlah ketekunan dan grafik masuk. Kegigihan di OpenHAB berarti menyimpan data dari waktu ke waktu. Mari kita lanjutkan dan setup RRD4J (Database Round Robin untuk Java), dinamakan demikian karena data disimpan dalam mode round robin - data yang lebih lama dibuang untuk mengompres ukuran database.

Instal paket rrd4j dengan perintah berikut.

sudo apt-get install openhab-addon-persistence-rrd4j. sudo chown -hR openhab: openhab / usr / share / openhab. 

Kemudian buat file baru bernama rrd4j.persist dalam konfigurasi / kegigihan map. Tempel di bawah ini:

Strategi {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange. } Item {// bertahan semuanya ketika nilai diperbarui, hanya default, dan mengembalikannya dari database saat startup *: strategy = everyChange, restoreOnStartup // selanjutnya kita tentukan strategi spesifik everyHour untuk apa pun di grup Temperatur, dan dan setiap menit untuk Temperatur Kelembaban *: strategy = everyHour Humidity *: strategy = everyMinute // atau Anda dapat menambahkan item tertentu di sini, seperti // Bedroom_Humidity, JamesInOffice: strategy = setiap menit. }

Di bagian pertama file ini, kami mendefinisikan strategi, yang berarti memberi nama pada ekspresi CRON. Ini sama dengan yang sudah kami lakukan dengan My. OpenHAB, tetapi kali ini kami membuat beberapa strategi baru yang dapat kami gunakan setiap hari, setiap jam dan setiap menit. Saya belum menggunakannya semuanya, tetapi saya mungkin akan ada di masa depan.

Di bagian kedua file, kami memberi tahu rr4dj nilai data mana yang harus disimpan. Sebagai default, kami akan menyimpan semuanya setiap kali pembaruan, tetapi saya juga telah menentukan beberapa strategi berbasis waktu untuk sensor tertentu. Suhu Saya tidak terlalu peduli, jadi saya menetapkan itu untuk menyelamatkan setiap Jam saja, tetapi kelembaban adalah masalah besar bagi saya, jadi saya ingin melihat bagaimana itu berubah setiap menit. Jika ada data lain yang secara khusus ingin Anda simpan pada waktu yang ditentukan, tambahkan di sini sekarang atau sesuaikan sesuai kebutuhan.

Catatan: jika Anda ingin membuat grafik data juga, Anda HARUS menyimpannya setidaknya sekali dalam satu menit. Tidak masalah jika data sensor Anda bahkan diperbarui dengan cepat, Anda hanya perlu memberitahu rr4dj untuk menyimpannya sekali dalam satu menit.

Dengan itu, Anda harus mulai melihat beberapa hasil debug yang memberi tahu Anda bahwa nilai sedang disimpan.

rrd4j menyimpan data

Selanjutnya, mari kita buat beberapa grafik cantik dari semua data ini. Sangat mudah. Untuk membuat grafik dari masing-masing sensor, tambahkan berikut ini ke peta situs Anda:

Bagan item = Kamar Tidur_Humidity periode = h

Itu benar-benar yang Anda butuhkan. Nilai yang valid untuk titik adalah h, 4j, 8j, 12j, D, 3D, W, 2W, M, 2M, 4M, Y; harus jelas apa artinya ini. Ini default ke D untuk data sehari penuh jika tidak ditentukan.

Untuk membuat grafik dengan banyak item, cukup gambarkan nama grup sebagai gantinya:

Item grafik = Periode kelembaban = h
grafik

Anda mungkin juga tertarik mengetahui bahwa Anda dapat menggunakan grafik ini di tempat lain; itu menghasilkan gambar menggunakan URL berikut: http://YOUROPENHABURL: 8080 / bagan? kelompok = Kelembaban & periode = h

Bagaimana Anda Sistem OpenHAB Datang?

Itu saja untuk pemasangan panduan ini, tetapi jangan berharap ini akan menjadi yang terakhir Anda dengar dari kami tentang OpenHAB. Semoga panduan ini dan pemula telah memberi Anda landasan yang kuat untuk mengembangkan sistem OpenHAB lengkap Anda sendiri - tetapi ini adalah proses yang tidak pernah benar-benar selesai sepenuhnya.

Untungnya, OpenHAB dapat menskalakan dengan baik dari beberapa perangkat hingga ratusan, dari kompleksitas aturan sederhana hingga otomatisasi rumah yang paling hebat - jadi bagaimana sistem Anda? Perangkat mana yang Anda pilih? Apa proyek besar selanjutnya yang akan Anda tangani?

Mari kita bicara di komentar - dan tolong, jika Anda menemukan panduan ini berguna, klik tombol berbagi itu untuk memberi tahu teman Anda bagaimana mereka juga dapat mengatur sistem OpenHAB mereka sendiri.

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.