Saya ingin menyampaikan kepada Anda serangkaian artikel tentang modul kontrol Laurent KernelChip . Dalam seri ini saya akan memberi tahu Anda tentang bagaimana mengintegrasikan modul-modul ini ke dalam Smart Home Anda, bagaimana mempelajari cara mengelolanya dari sistem otomatisasi rumah MajorDoMo yang populer , dari sketsa Arduino, dari sistem Arduino Mega Server dan bahkan bagaimana menerapkan modul-modul ini untuk tujuan yang sama sekali tidak terduga - untuk mengajar anak-anak Anda pemrograman dalam Memproses.
Secara umum, modul yang cukup menarik di dalam dan dari dirinya sendiri dapat secara tak terduga menjadi sangat berguna di rumah tangga jika Anda mendekatinya dengan sejumlah imajinasi dan kreativitas.Kenapa Laurent?
Karena modul-modul ini telah bekerja dengan sukses di sistem Smart Home saya untuk waktu yang lama (lebih dari tiga tahun) dan saya telah memperoleh beberapa pengalaman dalam menggunakannya dan saya memiliki sesuatu untuk diceritakan tentang mereka. Dan saya juga memiliki beberapa pengalaman dan kode teruji yang siap pakai untuk mengelola modul-modul ini, yang ingin saya bagikan kepada Anda.Dan Anda akan dapat mengembangkan solusi perangkat lunak Anda berdasarkan kode ini, itu akan sangat sederhana, karena saya sudah melakukan sebagian besar pekerjaan. Selain itu, kode tersebut akan dijelaskan secara rinci, yang tentunya berkontribusi pada pemahaman Anda tentang cara kerjanya, mempelajari pemrograman, dan membangun sistem rumah pintar.Modul itu sendiri
Ketika saya memilih sendiri beberapa solusi siap pakai untuk mengelola beban listrik melalui jaringan, Laurent menyuap saya dengan kelengkapan dan kesederhanaan solusinya. Untuk mulai mengontrol jaringan dan mematikan perangkat dan pencahayaan, hampir tidak ada yang diperlukan. Tidak perlu mempelajari bahasa pemrograman, tidak perlu menyolder apa pun, cukup menghubungkan modul ke jaringan lokal, menghubungkan beban ke terminal relai (dan jangan lupa menerapkan daya ke modul itu sendiri) dan itu saja. Setelah itu, dimungkinkan untuk mengirim perintah langsung dari komputer (dari program terminal). Modul itu segera mulai dengan patuh menyalakan dan mematikan lampu sesuai dengan perintah saya. Saat itu, saya tidak perlu lagi.Saya dapat mengatakan tentang modul itu sendiri bahwa selama seluruh periode operasi tidak ada crash dan macet, semuanya bekerja dan bekerja "seperti jam", yang, pada kenyataannya, diperlukan dari modul tersebut untuk hanya bekerja.Desain dan kualitas bangunan
Cukup dengan melihat modul untuk membuatnya jelas bahwa itu dikembangkan karena suatu alasan, "jika saja", tetapi mencoba melakukan hal yang benar-benar layak. Saya juga tidak memiliki keluhan tentang kualitas pembuatan, semuanya dilakukan dengan hati-hati dan sebagaimana mestinya: tidak ada bagian yang bengkok, noda solder atau apapun seperti itu, semuanya jelas dan rapi. Pada umumnya, kualitas build tidak berbeda dari komponen komputer "bermerek" dan Arduino "pabrik".Satu-satunya hal yang akan saya lakukan jika saya merilis modul-modul ini sendiri adalah menginstal terminal multi-warna alih-alih terminal satu warna untuk menghubungkan kabel, paling tidak menyoroti terminal koneksi daya, tetapi ini sangat kecil, nit-picking (semuanya, tentu saja, ditandatangani dengan rapi).Tentang apakah artikel pertama dalam seri ini?
Semua informasi dibagi menjadi tiga artikel yang diselesaikan secara logis. Artikel pertama akan fokus pada pengintegrasian modul Laurent dengan MajorDoMo, sebuah platform otomatisasi rumah open source yang populer. Contoh spesifik dan kode PHP akan diberikan.Artikel kedua adalah tentang integrasi dengan ekosistem Arduino. Anda dapat mengelola modul dari sketsa pribadi Anda atau mengintegrasikan Laurent dengan Arduino Mega Server (yang juga didasarkan pada kode Arduino) dan mengelola Laurents dari antarmuka yang nyaman atau secara otomatis, sesuai dengan program. Solusi yang sudah jadi dan kode yang diuji juga akan diberikan.Dan yang ketiga - tentang mengelola modul Laurent dari sketsa pada Pemrosesan. Yaitu, langsung dari desktop komputer di rumah Anda. Artikel yang sama akan menjelaskan cara meningkatkan minat anak-anak dalam mempelajari pemrograman dan peran apa yang dapat dimainkan modul ini dalam masalah ini.Seri ini dikhususkan untuk integrasi modul Laurent dengan sistem otomasi rumah dan tidak mempertimbangkan arsitektur dan pengoperasian modul itu sendiri. Ini dijelaskan dalam artikel lain yang dapat Anda baca 1 , 2 , 3 dan akan dibahas kemudian. Di sini kita hanya fokus pada integrasi.Dalam proses penulisan artikel, modul Laurent dengan firmware La01 dan versi antarmuka web LW1.0 digunakan, yaitu modul "pertarungan" yang telah bekerja selama tiga tahun. Dalam versi baru detail implementasi modul mungkin sedikit berbeda, tetapi kompatibilitas dengan tim kontrol dipertahankan, jadi semua yang dikatakan di sini juga berlaku untuk modifikasi yang lebih baru.Bagaimana manajemen modul bekerja
Semua pertukaran informasi dengan modul dilakukan melalui jaringan dan untuk mulai bekerja dengannya, Anda perlu membuat koneksi TCP / IP pada port 2424. Setelah koneksi dibuat, Anda dapat mengirim perintah teks (disebut perintah KE) yang mengontrol modul. Situs web KernelChip memiliki dokumentasi terperinci, termasuk deskripsi yang dapat diakses dari perintah KE.KernelChip merawat para pengguna dan menyediakan modul-modulnya dengan antarmuka web yang nyaman, tetapi ini adalah "kontrol manual", dan kenyamanan, nilai, dan kegunaan solusi akan meningkat berdasarkan pesanan jika kita belajar mengelola modul dari Smart Home kami.
Antarmuka web dilindungi kata sandi secara default dan untuk melihat konten halaman web Anda harus memasukkan nama pengguna "admin" dan kata sandi "Laurent".MajorDoMo
Sistem MajorDoMo cukup populer dan saya tidak akan membahasnya di sini secara rinci. Diasumsikan bahwa Anda telah menginstal sistem ini dan bekerja dengannya selama beberapa waktu. Bagi mereka yang sama sekali tidak up to date, saya akan menjelaskan bahwa ini adalah platform otomatisasi rumah terbuka yang berjalan pada Windows dan Linux dan didasarkan pada server web dan merupakan sejenis CMS (sistem manajemen konten) khusus dengan kemampuan luas dan "diasah" untuk otomatisasi rumah.Kemungkinan dari MajorDoMo benar-benar tidak terbatas dan mengelola modul Laurent hanyalah salah satu talenta dari sistem ini.Rincian teknis
MajorDoMo menggabungkan file laurent.class.php, yang terletak di direktori\htdocs\lib\
Kode lengkap laurent.class.php<?
function laurent_command($host, $command, $password='Laurent') {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo «socket_create() failed: reason: ». socket_strerror(socket_last_error()). "\n";
return 0;
}
$result = socket_connect($socket, $host, 2424);
if ($result === false) {
echo «socket_connect( $socket, $host, 2424) failed.\nReason: ($result) ». socket_strerror(socket_last_error($socket)). "\n";
return 0;
}
$in='$KE'."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in='$KE,PSW,SET,'.$password."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
socket_close($socket);
return trim($res);
}
function laurent_getStat($host, $password='Laurent') {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo «socket_create() failed: reason: ». socket_strerror(socket_last_error()). "\n";
return 0;
}
$result = socket_connect($socket, $host, 2424);
if ($result === false) {
echo «socket_connect( $socket, $host, 2424) failed.\nReason: ($result) ». socket_strerror(socket_last_error($socket)). "\n";
return 0;
}
$in='$KE'."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in='$KE,PSW,SET,'.$password."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$command='$KE,DAT,ON';
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
$started=0;
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "#TIME,"))) {
if (!$started) {
$started=1;
} else {
break;
}
}
}
$command='$KE,DAT,OFF';
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
sleep(1);
socket_write($socket, $in, strlen($in));
socket_write($socket, $in, strlen($in));
socket_close($socket);
return trim($res);
}
?>
dan berisi semua yang Anda butuhkan untuk bekerja dengan modul Laurent. File ini berisi fungsi-fungsi dalam bahasa pemrograman PHP dan, mungkin, dalam bentuk jadi atau dengan modifikasi minimal, dapat ditransfer ke sistem apa pun menggunakan bahasa pemrograman ini. Jadi, jika Anda memiliki proyek Smart Home pada platform yang berbeda, maka Anda dapat mencoba mengintegrasikan Laurent dengan sistem Anda menggunakan file ini.Fungsi utama yang digunakan untuk mengontrol modul adalahlaurent_command('< >', '<>', '< >');
misalnya,$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
, di mana '192.168.2.19' adalah alamat IP dari modul, '$ KE, INF' adalah perintah itu sendiri, 'Laurent' adalah kata sandi (default).Hasil kerja fungsi masuk ke variabel $ hasil, yaitu, respons modul, yang dapat Anda analisis dan interpretasikan menggunakan alat bahasa PHP standar. Kata sandi ditentukan sebagaimana adanya secara default. Jika Anda telah mengubah kata sandi untuk akses ke modul Anda, Anda harus menggantinya dengan yang baru dan dalam panggilan fungsi.Semuanya harus jelas dengan tim, Anda dapat mengambil perintah dari direktori dan mengelola modul seperti yang Anda inginkan. Alamat IP juga tidak boleh menyebabkan masalah. Cukup tentukan alamat IP yang benar-benar dimiliki modul Laurent Anda.Anda dapat mengakhiri teorinya dengan ini dan sekarang saya akan menunjukkan kepada Anda dengan contoh praktis bagaimana membuat kontrol cahaya (atau alat) langsung dari menu MajorDoMo.Contoh praktis
Sebagai contoh praktis, mari kita lihat penciptaan dua tombol "Nyalakan" dan "Matikan" di menu utama sistem MajorDoMo. Dengan tombol-tombol ini Anda dapat menghidupkan atau mematikan lampu atau alat listrik apa pun (di sini Anda hanya perlu mengingat bahwa relay yang dipasang pada modul tidak dapat langsung mengendalikan beban yang kuat seperti kompor listrik atau pemanas air).Jadi, kita membuat tombol "Enable", untuk ini kita pergi ke panel admin MajorDoMo dan masukkan nama pengguna dan kata sandi (admin / admin secara default) dan klik "OBJECTS / Control Menu" dan kemudian pada tombol hijau besar "Tambah bagian baru".
Selanjutnya, kami menemukan daftar drop-down "Jenis" dan pilih "Tombol" dari seluruh jenis yang disajikan dan klik "Simpan".
Selanjutnya, pilih "Item menu induk" adalah tempat tombol kami "kait". Saya memilikinya Laurent, dan Anda dapat memiliki item menu yang nyaman. Secara default, ada "ROOT", yang berarti tombol akan segera terlihat, tanpa mengklik item menu apa pun.Di bidang input "Judul" tulis apa yang Anda inginkan tertulis pada tombol. Dan terakhir, di bidang Kode, tulis kode fungsi laurent_command yang sudah akrab bagi kita:laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');
Ini sama dengan dalam contoh teoretis, hanya variabel $ result yang hilang (kita tidak membutuhkannya) dan perintah digantikan oleh '$ KE, REL, 2,1', yang berarti mengaktifkan relay No. 2.Kami melakukan hal yang sama untuk tombol "Matikan", tapi jangan lupa untuk mengubah nama tombol dan alih-alih '$ KE, REL, 2.1' tulis '$ KE, REL, 2.0', yang berarti matikan relai No. 2:laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');
Itu saja. Kami memuat ulang halaman dengan antarmuka MajorDoMo, muncul dua tombol baru yang menghidupkan dan mematikan lampu (atau alat) langsung dari antarmuka MajorDoMo dengan indah dan hampir tanpa penundaan. Apa yang ingin kami capai.Kontrol otomatis
Sekarang mari kita coba untuk mengontrol modul secara otomatis, tanpa campur tangan manusia. Sekarang Anda akan melihat bahwa itu bahkan lebih mudah daripada menggunakan tombol untuk mengontrol modul.
Kami menemukan di menu utama panel admin MajorDoMo item "Objek", klik, lalu kami menemukan objek "ClockChime" dan metodenya "onNewMinute". Kami membutuhkannya. Bagi mereka yang tidak tahu, ini adalah metode "sentral" MajorDoMo, yang disebut setiap menit dan sangat populer. Dalam metode ini ada banyak fungsi dan panggilan skrip yang menyediakan fungsionalitas pengguna sistem.
Dan yang perlu kita lakukan adalah menambahkan kode kita ke metode ini. Sebagai contoh, pertimbangkan situasi ini. Modul Laurent Anda mengontrol pencahayaan malam di halaman rumah Anda. Dan Anda, misalnya, ingin lampu menyala jam 21.00, dan mati jam 7.30 pagi. Tidak ada yang lebih sederhana, ini adalah kode yang harus Anda tambahkan ke metode onNewMinute:if (timeIs('21:00')) {
laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');
}
if (timeIs('7:30')) {
laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');
}
Dan itu dia! Setuju, itu sama sekali tidak sulit. Ini hanyalah sebuah contoh, logika kerja dapat benar-benar ada dan sangat canggih. Dan bakat dari modul Laurent tidak berakhir dengan menyalakan dan mematikan beban, fungsinya jauh lebih luas, tetapi ini bukan topik artikel ini, di sini kami hanya mempertimbangkan masalah integrasi dengan contoh sederhana.Menerima dan mengeluarkan data modul
Dan contoh terakhir adalah bagaimana mendapatkan dan menampilkan informasi yang diterima dari modul Laurent pada halaman web MajorDoMo.MajorDoMo adalah sistem berorientasi objek dan semua pekerjaan terjadi di dalamnya melalui penciptaan objek dan penggunaan data (variabel) dan metode (kode program) mereka. Sedikit sulit? Sebenarnya, tidak apa-apa dan sekarang Anda akan melihatnya sendiri.
Jadi, sebagai contoh kita akan menggunakan objek yang sudah ada "ThisComputer" dan kita akan menambahkannya ke "test" properti baru. Untuk melakukan ini, klik pada item menu "Objek" yang sudah akrab bagi kita di area admin MajorDoMo, temukan objek "ThisComputer" dan klik pada item "Properties", gulir ke bawah dan temukan bidang input "Tambahkan properti baru", masukkan "tes" dan klik "Refresh" (biarkan nilainya kosong).
Mengenai hal ini, operasi persiapan dapat dianggap selesai, kami menambahkan "pengujian" properti baru ke objek "Komputer ini", yang akan kami gunakan dalam percobaan kami.Sekarang tugas kita adalah meminta informasi yang diperlukan dari modul Laurent dan meletakkannya di properti (variabel) dari "tes" objek "ThisComputer". Bagaimana cara melakukannya? Sangat sederhana.Tambahkan kode ini ke metode onNewMinute yang sudah kita ketahui:$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
setGlobal('ThisComputer.test', $result);
Dan setiap menit MajorDoMo akan meminta modul untuk informasi yang diperlukan dan memperbarui variabel "test", yang dapat kita gunakan sesuai kebutuhan. Misalnya, tampilkan di halaman web. Untuk melakukan ini, kami menempatkan kode berikut di sembarang tempat pada halaman yang kami butuhkan:%ThisComputer.test%
Inilah yang disebut. makro yang, saat memuat halaman, menggantikan nilai variabel bukan dirinya sendiri, disimpan dalam properti "test" dari objek "ThisComputer". Dan sebagai hasilnya, Anda melihat informasi yang dikirimkan oleh modul Laurent sebagai tanggapan atas permintaan Anda di halaman web.Bagaimana cara menambahkan makro ke halaman? Kami pergi ke menu admin dan pilih item "Halaman Beranda" dan pilih halaman yang Anda inginkan atau buat yang baru menggunakan tombol hijau "Halaman Baru". Dan tambahkan makro ke lokasi yang diinginkan di halaman.Subtotal
Jadi itu saja. Dipersenjatai dengan informasi dari artikel ini, Anda dapat merasa seperti master sejati dari Laurents dan mengintegrasikan modul-modul ini ke dalam sistem Smart Home Anda. Dan dalam artikel selanjutnya dari seri ini Anda akan belajar cara mengelola modul dari sketsa Anda di Arduino dan dari sistem Arduino Mega Server .