Kisah tentang bagaimana saya mengotomatisasi apartemen menggunakan Node-RED. Bagian II

Kelanjutan lama ditunggu-tunggu posting tentang otomatisasi apartemen . Pada bagian ini saya akan berbicara tentang pencahayaan, sistem multimedia dan sensor keamanan.



Petir


Untuk mengontrol pencahayaan, beberapa komponen digunakan:

  • tirai bermotor;
  • pencahayaan dimmable.

Bersinar


Lampu di kamar dibagi menjadi dua zona. Saya menggunakan lampu dimmable ikeev LED. Saya menggunakan tiga modul untuk kontrol: Dimmer
Dimmer bawaan FIBARO Dimmer 2
built-in FIBARO Dimmer 2

Built-in double relay FIBARO Saklar Ganda 2x1.5kW
Built-in dual relay FIBARO Double Switch 2x1.5kW Relay

Relay Terpadu FIBARO Single Switch 2.5kW
built-in FIBARO Single Switch 2.5kW

Dimmer dapat secara otomatis memilih metode peredupan (pada ujung trailing fase terkemuka) dan mengkalibrasi untuk minimum dan kecerahan maksimum. Karena saya memiliki sistem tiga kawat di muka untuk semua soket, saya tidak perlu menggunakan bypass. Lampu LED tidak berkedip dan tidak menyala ketika tidak ada tegangan. Untuk modul yang dapat dimmable, saya menggunakan ringer switches sehingga Anda dapat mengatur kecerahannya.


Diagram kabel dimmer tiga kawat

Begini cara kerjanya:

  • - , ( ).
  • - , — . . , .
  • , , . — .
  • , . , 1% .
  • , 15 .
  • , .














Seperti yang saya tulis sebelumnya, semua jendela apartemen saya menghadap ke jalan yang sibuk dengan cahaya terang. Untuk mengatasi masalah cahaya terang dari lampu di malam hari atau di musim panas dari matahari yang cerah, saya menggunakan roller blind bermotor.

Awalnya saya ingin membeli kit yang sudah jadi, tetapi harganya sangat tinggi, dan saya tidak suka skema warnanya. Gagasan ini harus dibuang dan mengumpulkan beberapa set sendiri.

Dari mesin 220 V, pilihannya kecil: Prancis Somfy atau Cina Dooya. Somfy lebih tenang, tetapi juga lebih mahal, sehingga pilihan jatuh pada mesin Dooya DM35S. Saya memesannya bersama pengencang di "Aliexpress". Mesin memiliki dua sakelar batas yang menyesuaikan posisi maksimum dan minimum.


Engine dengan tunggangan

Masalah selanjutnya adalah pipa untuk tirai berliku. Menurut aturan pesan email, Anda dapat mengirim parsel tidak lebih dari 180 cm, dan salah satu jendela yang saya miliki lebih dari 2 meter. Di pasar konstruksi terdekat, saya menemukan pipa aluminium dengan diameter yang diinginkan - 50 mm. Setelah memasang mesin di pipa, masih menemukan tirai pemadaman. Saya memesan kain dalam ukuran saya dari "Aliexpress" setelah setuju dengan penjual bahwa ia akan mengirim saya hanya kain, tanpa mekanisme.


Dirakit Tirai tetap

tirai dikendalikan menggunakan FIBARO Roller Shutter 2 Z-Wave kontrol buta modul. Louver


modul kontrol

Modul ini dibangun ke dalam soket. Untuk modul semacam itu, disarankan untuk segera meletakkan soket yang dalam untuk mendorong modul, kabel, dan sakelar. Modul ini memiliki pengaturan yang cukup, termasuk respons terhadap alarm, perhitungan konsumsi daya, kalibrasi dengan sakelar batas.


Switch switch

Gorden dipasang di setiap kamar dan di dapur. Anda dapat mengontrol gorden baik dengan sakelar yang terletak di sebelahnya, atau dengan menggunakan antarmuka atau skrip.

Tirai diturunkan secara otomatis ketika senja masuk dan lampu menyala di jalan. Mereka naik sesuai dengan waktu yang diprogram untuk setiap kamar pada hari kerja dan akhir pekan. Jika gelap di luar, lampu mulai menyala dengan lancar di ruangan tempat gorden diturunkan.

Hari kerja dan akhir pekan dihitung sesuai dengan kalender produksi yang diunduh. Anda dapat mengkonfigurasi ulang waktu hari berikutnya untuk setiap kamar menggunakan perintah telegram. Sebelum melipat gorden sesuai dengan "jam alarm", pesan telegram tiba dengan kemampuan untuk mengkonfirmasi, membatalkan, dan menjadwal ulang selama 30 menit. Jika tindakan tidak mengikuti, gorden secara otomatis terlipat. Pada hari-hari yang cerah, gorden secara otomatis mengatur posisi mereka tergantung pada pencahayaan di ruangan dan waktu hari, dan juga memeriksa apakah lampu menyala atau tidak. Setelah menerima perintah "Liburan", semua tirai di semua kamar diturunkan. Tirai Manajemen Skenario tirai Manajemen Skenario








Contoh kerja

Sistem multimedia


Saya memiliki banyak perangkat multimedia dengan berbagai remote di ruang tamu, dan saya ingin mengendalikannya dengan satu tombol.

Di Internet, saya menemukan kode IR terpisah untuk menghidupkan dan mematikan amplifier, TV dan splitter HDMI. Menggunakan skrip Python pronto_broadlink, mereka ditranskode ke base64, dan kemudian dikonversi ke array byte dan ditulis ke basis kode IR. Oleh karena itu, sekarang tidak perlu mengetahui keadaan perangkat saat ini: Anda cukup mengirim sinyal lagi.

Karena amplifier saya sudah cukup tua dan tidak tahu cara memproses gambar 4K melalui HDMI, saya membeli splitter HDMI. Ini memungkinkan Anda untuk membagi sinyal video dan audio menjadi dua HDMI yang terpisah: salah satunya terhubung ke amplifier, yang kedua ke TV.


Amplifier dan perangkat lain

Saat ini saya memiliki dua sumber audio dan video: komputer desktop dan server. Dari antarmuka, Anda dapat menghidupkan semua perangkat untuk pemutaran dengan satu tombol, hanya dalam satu kasus penerimaan sinyal akan dikonfigurasikan pada splitter dari server, dan pada yang kedua - dari komputer. Di masa depan, direncanakan untuk menghubungkan konsol game ke splitter.

Jika semua orang meninggalkan rumah, semua perangkat multimedia dimatikan. Adegan kontrol media




Sistem kehadiran beroperasi pada 6 sensor gerak dan sensor pembuka pintu depan. Jika, setelah membuka dan menutup pintu, tidak ada sensor hunian tunggal yang dipicu, sebuah pesan akan dikirim ke Telegram pada interval tertentu dengan konfirmasi. Jika tidak ada tindakan yang diambil dalam dua menit atau tombol "OK" ditekan, sistem beralih ke mode "Keluar dari rumah". Jika perpindahan terjadi saat ini, perintah dibatalkan dan pesan dihapus.

Saya mencoba menggunakan BLE, tetapi dalam kasus saya itu tidak bekerja dengan sangat stabil dan sangat tergantung pada pemancar telepon. Deteksi kehadiran otomatis




Sensor keamanan


Perangkat pengunci Gidrolock dipasang pada pipa air . Ketika kabel kontrol disingkat menjadi fase, aktuator menutup keran, saat terputus, ia terbuka. Kedua drive terhubung ke kontak kering Philio built-in relay .

Gidrolock
Drive Gidrolock

Relay dikendalikan oleh sensor NEO Coolcam Z-Wave yang terletak di area kebocoran potensial. Semua sensor berhubungan langsung dengan relai, sehingga air mati tanpa partisipasi pengontrol. Untuk mencegah keran menjadi masam, setiap dua minggu di malam hari keran secara otomatis membuka dan menutup. Diagram Otomasi Drive Saat Philio Menghisap Sensor




ventilasi dimatikan agar tidak mengembang api. Pada saat yang sama, pesan dikirim ke obrolan telegram, dan sensor berdecit menjijikkan.

Sensor dan perangkat lain



Otorisasi server


Modul ini adalah implementasi sederhana dari layanan otorisasi.
Ada dua metode http: satu akan memeriksa apakah permintaan tersebut berasal dari jaringan internal dan jika demikian, itu akan memberi otorisasi kepada pengguna dengan mengeluarkan token JWT. Token JWT dienkripsi menggunakan RSA 256, kunci pribadi harus terdaftar dalam file di sebelahnya. Jika permintaan tersebut bukan dari jaringan internal, pengguna akan diarahkan ke halaman login, di mana ia harus memasukkan login dan kata sandi dan login. Karena pemisahan menjadi pengguna tidak seharusnya, file login dan kata sandi dalam bentuk terenkripsi (SHA 512) ada di dekatnya dalam file konfigurasi.

Server MQTT


Server MQTT diimplementasikan menggunakan komponen aedes .

Server naik pada dua port: internal, untuk komunikasi dengan server, tanpa otorisasi, dan eksternal, yang mengimplementasikan WebSocket. Semua klien front-end terhubung melalui soket dan melewati otentikasi selama otorisasi, berlangganan topik, dan menerbitkan pesan apa pun. Token JWT yang diterima dari server otorisasi masuk dan divalidasi menggunakan kunci publik. Untuk permintaan dari server, validasi tidak terjadi.

Node Khusus-Node MERAH


Ketika menulis otomatisasi, diperlukan untuk mengimplementasikan satu simpul tambahan dan dua simpul untuk menyelesaikan.

Saya harus memodifikasi node-red-contrib-openzwave , karena permintaan tarik saya diterima hanya setelah 7 bulan, tetapi sekarang Anda dapat menggunakan perpustakaan dari npm. Penyempurnaan terdiri dari melemparkan peristiwa penghapusan simpul.



Node MQTT juga telah diselesaikan. Bahkan, penyempurnaan utama di dalamnya adalah menarik id dari klien yang terhubung dan menuliskannya kembali ketika dikirim ke antrian. Di sini Anda dapat bertahan dengan fungsionalitas subflow. Itu juga seharusnya mentransfer data apa pun ke input MQTT-node, tetapi itu tidak berguna.



Untuk mengontrol tirai dan keran air, diperlukan simpul jadwal. Tersedia saat itu di perpustakaan terlalu kaya fitur dan tidak mendukung implementasi sederhana menggunakan CRON. Implementasi saya cukup sederhana: jadwal dapat diambil pada input dari node atau diatur secara internal. Dimungkinkan untuk membatalkan jadwal. Di bawah tenda, jadwal simpul digunakan .



Depan


Setiap komponen aktif dari apartemen, yang berakhir dengan otomatisasi, adalah modul di bagian depan. Setiap modul mandiri dan berisi semua komponen yang diperlukan untuk rendering. Modul dibagi menjadi dua agregasi: statis dan Z-Wave. Modul harus mengimplementasikan satu antarmuka.

Antarmuka
export interface INode {
    id: string;
    type: NodeTypes;
    name: string;
    addWidget: ComponentClass<AddProps> | StatelessComponent<AddProps>;
    model: INodeModelConstructor;
    service?: INodeServiceConstructor;
    smallComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    bigComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    dialogEditComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    dialogViewComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
}


Contoh implementasi
class Widget extends BaseWidget implements INode {
    model: INodeModelConstructor = Model;
    manufacturerid: string = '0x0086';
    producttype: string = '0x1a02';
    productid: string = '0x0064';
    addWidget: StatelessComponent<AddProps> = AddWidget;
    service: INodeServiceConstructor = Service;
    smallComponent: StatelessComponent<WidgetProps<Model>> = SmallComponent;
    bigComponent: StatelessComponent<WidgetProps<Model>> = BigComponent;
    dialogEditComponent: ComponentClass<WidgetProps<Model>> = DialogEditComponent;
    dialogViewComponent: ComponentClass<WidgetProps<Model>> = DialogViewComponent;
}
export default Widget;


Untuk modul statis - misalnya, AC - Anda perlu mengimplementasikan data warehouse di bagian depan. Implementasi seperti itu tidak nyaman, dengan cara yang baik perlu diubah ke satu repositori.Untuk

Z-Wave-modules saya mengatur repositori umum dan melacak semua perubahan di dalamnya.

Modul mengimplementasikan tampilan dengan dua cara:

  • untuk layar "besar" (tablet, komputer);
  • untuk telepon.

Tergantung pada jenis perangkat, kontrol sentuh atau mouse akan dipilih.

Aplikasi ini dibangun menggunakan webpack + babel: sesuai dengan pengaturan saat ini, ia dirakit untuk dua versi terakhir dari Firefox, Chrome, Chrome Android.

Fitur kode sumber


Sumber

Semua Aliran dinonaktifkan, agar tidak membuang kesalahan dalam log. Node konfigurasi untuk Z-Wave dihapus: itu buggy jika tidak menemukan Z-Wave controller, dan menjatuhkan seluruh Node-RED. Seharusnya terlihat seperti ini:


Agar loader kalender kantor berfungsi, Anda harus mendaftar di data.gov.ru , dapatkan token di sana dan masukkan setelah access_token:


Prakiraan cuaca diunduh dari darksky.net setiap 15 menit sekali. Ia juga membutuhkan token, Anda harus mendaftar dan memasukkan token setelah perkiraan, ke koordinat:


Untuk mengirim pemberitahuan telegram, Anda perlu mendapatkan bot Anda, masukkan bot itu di simpul konfigurasi Telegram dan tulis id obrolan jika perlu. Dalam kasus Aliran saya, ini adalah subflow:



Sumber dibagi menjadi depan dan belakang. Di bagian belakang terletak:

  • Otorisasi server.
  • Server MQTT.
  • Modul Kustom Node-RED.
  • Aliran yang Diekspor dalam satu file, yang dapat diunggah ke akun Anda sendiri atau contoh terpisah untuk pengujian.
  • Sebuah proyek untuk Node-RED, di mana Anda perlu menginstal modul dan kemudian hanya memuat Aliran yang diekspor (modul sudah ada dalam proyek).
  • Cadangan Mongo-base.

Anda dapat menemukan informasi instalasi yang lebih rinci di file readme di repositori github .

Rencana


Rencananya adalah dengan menggunakan mikrofon dari smartphone atau tablet yang terpasang di dinding untuk kontrol suara. Saya berencana untuk menggunakan sistem open-source pada server berbasis CMU Sphinx .

Saya juga berencana untuk menyusun modul untuk mengambil dan mentransmisikan pembacaan pipa dan meteran listrik.

Juga patut mempertimbangkan penggunaan statistik yang terakumulasi untuk berbagai parameter untuk mengoptimalkan otomatisasi.

Kesimpulan


Saat ini, saya telah mencapai otomatisasi rumah yang hampir lengkap dengan kebutuhan saya - untuk menjaga iklim dan pencahayaan yang nyaman di rumah. Karena beberapa otomatisasi, dimungkinkan untuk mengurangi konsumsi listrik (sekitar 1.500 ₽ di musim dingin dibandingkan dengan peralatan yang sama tanpa otomatisasi), baik dari sisi elemen pemanas dan dari sisi pencahayaan.

Tentu saja, masih ada bug dalam algoritma, tetapi saya akan menangkapnya suatu hari nanti, setidaknya saya bergerak ke arah ini. Sistem bekerja dengan stabil, saya tidak melihat rem, meskipun kecepatannya sangat rendah dalam protokol Z-Wave.

Tentu saja, sistem tidak akan membayar sendiri dengan mengorbankan tabungan, ada lebih banyak masalah kenyamanan. Otomatisasi seperti ini sangat lembab dalam hal-hal kecil seperti menutup dan membuka tirai, mengendalikan cahaya. Ketika Anda berada di apartemen biasa, Anda kadang-kadang lupa untuk menyalakan atau mematikan lampu, dan Anda tidak membuka tirai sama sekali.

Saya jarang mengatur sistem iklim dengan tangan saya, tetapi kadang-kadang Anda perlu menghidupkan atau mematikan AC atau menyesuaikan suhu pada baterai. Secara umum, saya puas dengan sistem yang dihasilkan: ini memungkinkan lebih sedikit waktu untuk dihabiskan untuk penyesuaian apa pun. Jika terjadi kegagalan pengontrol, semua fungsi akan tetap ada (hanya otomasi yang akan jatuh). Fungsi dari penutupan air juga akan dipertahankan. Jika saya memutuskan untuk menjual apartemen, maka saya akan dengan mudah menghapus semua otomatisasi. Atau biarkan di tempat, tetapi jual lebih banyak.

All Articles