Pada artikel ini saya ingin berbicara tentang pengalaman saya dalam mengembangkan apa yang disebut Device Handler for SmartThings. Tugasnya adalah menambahkan perangkat universal berdasarkan protokol Z-Wave -
Z-Uno , serta pemrosesan perangkat anak yang terhubung dengannya.

Pengantar pengembangan membutuhkan banyak waktu, tetapi setelah
mencerahkan studi yang cermat tentang sebagian besar dokumentasi, pengembangan lebih lanjut tidak lagi membutuhkan banyak usaha. Sebagai akibatnya, diputuskan untuk menulis artikel ini untuk memfasilitasi pekerjaan pengguna berbahasa Rusia.
Seluruh proses pengembangan berlangsung dalam aplikasi web SmartTings IDE bahasa GroThy. Pengujian lebih mudah dilakukan dari perangkat seluler, namun, dimungkinkan untuk membuat simulator perangkat di lingkungan pengembangan yang sama. Dalam hal menguji shell grafis, sudah ada kebutuhan untuk menggunakan aplikasi seluler SmartThings Classic (
Android ,
iOS ).
Perangkat plug-in adalah papan yang memungkinkan Anda menambahkan kontrol ke hampir semua perangkat di Z-Wave. Selain itu, perangkat yang terhubung dapat berupa nomor yang berbeda (hingga 32 pcs.). Dengan demikian, pada tingkat perangkat lunak, semua jenis perangkat yang terhubung juga harus diproses dan mengontrol output ke aplikasi.
Daftar jenis yang diproses:
- Switch Binary - perangkat dengan hanya dua posisi: on / off
- Switch Multilevel - perangkat yang dapat dimatikan atau dihidupkan dengan makna yang berbeda. Misalnya, dimer.
- Sensor Multilevel - sensor yang mengirim nilai non-biner. Misalnya, sensor suhu.
- Meter - perangkat seperti penghitung
- Pemberitahuan - sensor biner akan dari jenis ini. Misalnya, saklar buluh.
- Thermostat - kelas terpisah dari tim yang bertanggung jawab untuk bekerja dengan thermostat
Struktur dokumen
Dua blok logis dapat dibedakan:
- Deskripsi dan informasi meta tentang penangan. Ini termasuk informasi tentang perangkat, bagaimana UI dan informasi lainnya harus diambil. Ini dialokasikan dengan metode
metadata()
.

- Metode handler adalah logika handler. Mereka bertanggung jawab atas "komunikasi" dengan perangkat.
Secara terpisah, kita dapat membedakan metode parse (), yang menafsirkan perintah yang diterima dari perangkat.
Saya akan menjelaskan secara lebih rinci tujuan dan isi setiap blok selama serangkaian artikel.
Metadata
Seperti yang Anda lihat dari nama metode, ini mengandung meta-informasi.
Mari pertimbangkan apa yang termasuk dalam blok ini:
Definisi ()
Dalam metode ini, argumen menunjukkan tiga hal, masing-masing: nama pawang, namespace, dan nama penulis.
- Nama pawang akan digunakan di masa depan saat menerbitkan dan saat membuat perangkat anak.
- Namespace digunakan ketika mencari penangan dengan nama untuk memastikan bahwa yang benar ditemukan, misalnya, di antara penangan dengan nama yang sama. SmartThings merekomendasikan penggunaan nama panggilan Anda di github.
- Nama penulis diisi dengan nama Anda.
definition(name: "Your device", namespace: "yournamespace", author: "your name") {}
Variabel berikut dapat dideklarasikan di tubuh metode:
attribute, capability, command, fingerprint
. Selanjutnya kami akan mempertimbangkan secara lebih rinci apa itu dan kapan diterapkan.
Koneksi dan sidik jari
Kami menghubungkan perangkat kami. Dalam kasus kami, SmartThings V2 Hub dan
Z-Uno akan digunakan.
Pada saat menambahkan perangkat Z-Wave atau ZigBee baru, hub akan mencoba mengenali jenis perangkat yang mereka coba sambungkan dan mulai mencari penangan yang paling relevan. Dia akan memilihnya dengan "Sidik Jari". Jika hub tidak menemukan kecocokan pada penangan khusus, ia akan mencoba menggunakan salah satu templat standar terdekat.
"Sidik jari" diatur dalam handler itu sendiri untuk menunjukkan jenis perangkat apa yang didukungnya. Dokumentasi resmi mengatakan bahwa mereka akan berbeda untuk perangkat Z-Wave dan perangkat ZigBee, kami akan mempertimbangkan implementasi untuk Z-Wave.
Perangkat protokol Z-Wave menyimpan informasi tentang pabrikan, tipe perangkat, kemampuannya, dll. Selama apa yang disebut "wawancara" dengan perangkat, ST mengumpulkan informasi ini dalam deskripsi mentah Z-Wave. Contoh garis seperti itu:
zw:Ss type:2101 mfr:0086 prod:0102 model:0064 ver:1.04 zwv:4.05 lib:03 cc:5E,86,72,98,84 ccOut:5A sec:59,85,73,71,80,30,31,70,7A role:06 ff:8C07 ui:8C07
Nilai setiap tombol digunakan untuk mengisi "sidik jari". Deskripsi terperinci dari setiap item dapat ditemukan di
sini Kami akan mempertimbangkan yang akan digunakan dalam penangan kami.
Untuk menemukan baris ini dengan informasi, Anda harus pergi ke tab 'Perangkat Saya' dan klik perangkat yang kami minati (sebelum itu, perangkat harus ditambahkan ke jaringan).
mfr adalah nilai 16-bit yang mengandung ID Pabrikan. Daftar pabrikan dan ID mereka dapat ditemukan di
sini .
prod - nilai 16-bit yang mengandung ID Jenis Produk - ID jenis perangkat unik.
model adalah nilai 16-bit yang berisi ID Produk.
inClusters - Nilai 8-bit yang menetapkan kebutuhan untuk Kelas Perintah tertentu. Misalnya, jika kami perlu menunjukkan bahwa pawang kami akan bekerja dengan MultiChannel CC, Anda perlu menulis kode 0x60. Daftar yang tersedia untuk SmartThings
CC dapat ditemukan di
sini .
Keempat tombol ini cukup bagi hub untuk memahami dengan tepat perangkat yang dimiliki oleh pawang ini. Contoh bagaimana mereka digunakan dengan saya:
fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60"
Suatu perangkat dapat memiliki jumlah parameter yang lebih besar, dalam hal ini ia dapat berhasil terhubung ke penangan ini, namun, jika setidaknya salah satu dari mereka tidak cocok dengan sidik jari yang dinyatakan, perangkat akan mengabaikan penangan ini.
Smartthings merekomendasikan menambahkan informasi tentang pabrikan (mfr) dan model (prod, model) dalam sidik jari, untuk mengecualikan kasus ketika pilihan prosesor tidak akan jelas. Misalnya, ketika sidik jari salah satu templat atau contoh yang digunakan secara default akan cocok dengan milik Anda.
Lokasi dalam kode
metadata { definition(...) { ... fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60" } ... }
Siklus penuh artikel direncanakan, hingga rilis. Saya harap informasi ini akan membantu Anda dalam pengembangan.