Pada artikel ini, saya menjelaskan cara menghubungkan modul Noolite MTRF-32 ke sistem kontrol rumah pintar berbasis Domoticz.
Sedikit tentang rumah itu sendiri
Rumah saya pribadi. Ini telah memperkenalkan beberapa dasar dari rumah pintar dan aktuator nirkabel berbasis Domoticz di MySensor.
Saat ini, sensor pembuka pintu, pencantuman pencahayaan rumah, sensor suhu dan kelembaban di rumah dan di jalan, suara menginformasikan tentang peristiwa dan prakiraan cuaca diimplementasikan.
Rumah itu dari kayu, jadi aku tidak benar-benar ingin mengontrol pencahayaan dengan menutup gulungan dari Cina. Menarik kabel di mana saja juga bukan pilihan. Setelah banyak pertimbangan, kontrol lampu dilakukan pada unit daya dan konsol noolite dan entah bagaimana tetap berteman dengan Domoticz.
Pada saat ini,
sebuah artikel tentang modul MTRF-32 dari Noolite menarik perhatian saya. Domoticz mendukung pengiriman permintaan HTTP GET. Prospek menggunakan modul dengan umpan balik juga memberi isyarat, jadi modul itu dipesan.
Tentang apa yang Anda perlu ukur 7 kali sebelum memotong
Ternyata, saya membeli tidak cukup apa yang Anda butuhkan. Pada saat pembelian, satu modul MTRF-32 tersedia. Dan ketika membaca artikel itu, saya tidak melihat informasi tentang varietas modul ini. Secara umum, saya membutuhkan versi USB dari MTRF-32-USB.
Harus mengklarifikasi32 berarti kemampuan untuk mengontrol lebih dari 32 saluran. Sampai saat ini, modul dengan 64 saluran tersedia di situs web noolite, dengan kedua opsi dengan atau tanpa USB. Pertanyaan kepada pembaca MTRF-32 dapatkah diperbarui ke MTRF-64?
Apa yang dilakukan sudah selesai. Selendang itu ditunda sampai
seseorang menata
perpustakaan yang sudah jadi lebih baik.
Untuk beberapa alasan, waktu terbaik belum tiba. Meskipun saya pikir sistem itu populer.
Upaya pertama
Setelah mengunjungi situs tersebut, Noolite menemukan perangkat lunak NooliteOne untuk bekerja dengan MTRF-64-USB. Ternyata itu bekerja melalui port-com dan saya menyadari bahwa MTRF-64 berbeda dari MTRF-64-USB dengan adaptor USB-COM bawaan. Perangkat lunak yang dibundel termasuk driver dari chip FTDI, dan board saya memiliki pad kontak yang sesuai.
Saya tidak menyolder chip. Tapi saya membuat adaptor USB-COM dari Chinese Arduino Nano dengan FTDI dan menghubungkannya ke papan tulis.
Itu tidak lepas landas. Untuk beberapa alasan, NooliteOne tidak dapat menemukan adaptor saya. Saya sudah mulai melihat ke arah kompilasi ketika saya menemukan
perpustakaan untuk modul MT1132.
Upaya kedua
Saya membandingkan deskripsi modul dan menyadari bahwa dalam hal transfer data, mereka hampir tidak berbeda. Fungsi yang diterapkan di perpustakaan untuk MT1132 sudah cukup bagi saya (Umpan balik belum diperlukan - tidak ada unit daya yang cocok).
Setelah memperbaiki kode di perpustakaan, saya mulai menerima tanggapan dari MTRF-32. Anehnya, semuanya berjalan pertama kali. Dan inilah yang terjadi pada akhirnya:
Ardunoo.H
#ifndef ARDUNOO_H
#define ARDUNOO_H
#jika ditentukan (ARDUINO) && ARDUINO> = 100
#include "Arduino.h"
#else
#sertakan "WProgram.h"
#endif
#termasuk <SoftwareSerial.h>
kelas ArduNoo {
byte chnl;
SoftwareSerial ns;
publik:
ArduNoo (byte rx, byte tx, byte ch = 0);
batal pada (byte ch = -1);
batal (byte ch = -1);
membatalkan onoff (byte ch = -1);
membatalkan bind (byte ch = -1);
void unbind (byte ch = -1);
perintah bool (saluran byte, perintah byte);
};
#endif
Ardunoo.cpp#termasuk <ardunoo.h>
ArduNoo :: ArduNoo (byte rx, byte tx, byte ch): ns (rx, tx) {
chnl = ch;
ns.begin (9600);
}
membatalkan ArduNoo :: off (byte ch) {
perintah (ch, 0);
}
membatalkan ArduNoo :: on (byte ch) {
perintah (bab, 2);
}
membatalkan ArduNoo :: onoff (byte ch) {
perintah (bab, 4);
}
void ArduNoo :: unbind (byte ch) {
perintah (bab, 9);
}
membatalkan ArduNoo :: bind (byte ch) {
perintah (bab, 15);
}
bool ArduNoo :: command (byte chnl, byte command) {
byte statis i, r, buf [17] = {171.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.172};
jumlah int = 0;
memset (buf + 2,0,14); / * jelas isi pesan * /
buf [4] = chnl;
buf [5] = perintah;
untuk (i = 0; i <15; ++ i) {// 10
jumlah + = buf [i];
}
buf [15] = lowByte (jumlah); // 10
buf [16] = 172; // 11
untuk (i = 0; i <17; ++ i) {
ns.write (buf [i]);
}
// kode debug
untuk (i = 0; i <17; ++ i) {
while (! ns.available ()) delay (10);
r = ns.read ();
Serial.print®;
}
Serial.println ();
kembali benar;
}
Ardunoo.ino#termasuk <SoftwareSerial.h>
#termasuk <ardunoo.h>
#define RXpin 10
#define TXpin 11
ArduNoo noo (RXpin, TXpin);
String readString, chString;
pengaturan batal () {
Serial.begin (9600);
}
void loop () {
readString = "";
chString = "";
while (Serial.available ()) {
keterlambatan (3); // tunda untuk memungkinkan buffer untuk mengisi
if (Serial.available ()> 0) {
char c = Serial.read (); // dapatkan satu byte dari buffer serial
readString + = c; // buat string readString
}
}
if (readString.length ()> 1 && readString.length () <4) {// kita mengharapkan 1 huruf dan 1 atau 2 digit (ch = 0-31)
untuk (int i = 1; i <readString.length (); i ++) {
if (isDigit (readString [i]))) {
chString.concat (readString [i]);
}
}
//Serial.println(readString[0]);
int ch = chString.toInt ();
switch (readString [0]) {
huruf 'n': // pada
noo.on (ch);
istirahat;
huruf 'f': // mati
noo.off (ch);
istirahat;
huruf 'x': // beralih
noo.onoff (ch);
istirahat;
huruf 'b': // bind
noo.bind (ch);
istirahat;
huruf 'u': // tidak mengikat
noo.unbind (ch);
istirahat;
huruf 'y': // di semua saluran
untuk (int i = 0; i <32; i ++) {
siang hari (i);
keterlambatan (100);
}
istirahat;
huruf 'z': // dari semua saluran
untuk (int i = 0; i <32; i ++) {
noo.off (i);
keterlambatan (100);
}
istirahat;
}
}
}
Lisensi Perpustakaan oleh Zhumatiy SergeyLisensi MIT (MIT)
Hak Cipta © 2014 Zhumatiy Sergey
Izin dengan ini diberikan, gratis, kepada siapa pun yang mendapatkan salinannya
dari perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk ditangani
dalam Perangkat Lunak tanpa batasan, termasuk tanpa batasan hak
untuk menggunakan, menyalin, memodifikasi, menggabungkan, menerbitkan, mendistribusikan, mensublisensikan, dan / atau menjual
salinan Perangkat Lunak, dan untuk mengizinkan orang kepada siapa Perangkat Lunak ini berada
diperlengkapi untuk melakukannya, tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua
salinan atau bagian substansial Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, BAIK SECARA TEGAS
DITERAPKAN, TERMASUK TAPI TIDAK TERBATAS PADA JAMINAN DAGANG,
KESESUAIAN UNTUK TUJUAN TERTENTU DAN NONINFRINGEMENT. DALAM ACARA TIDAK AKAN
PENULIS ATAU PEMEGANG HAK CIPTA BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN ATAU LAINNYA
KEWAJIBAN, APAKAH DALAM TINDAKAN KONTRAK, TORT ATAU LAINNYA, TINGGAL DARI,
DI LUAR ATAU DALAM HUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HUBUNGAN LAINNYA DALAM
PERANGKAT LUNAK.
Perintah yang diimplementasikan adalah mematikan, menghidupkan, menghidupkan, menghidupkan semua, mematikan semua.
Masalahnya kecil, Anda perlu memberikan perintah ke port com. Karena ini bermasalah dari Domoticz di Windows, saya memutuskan untuk menulis aplikasi konsol yang akan menerjemahkan perintah dari skrip lua. Perintah dilewatkan ke aplikasi sebagai parameter peluncuran.
noo.csmenggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Text;
menggunakan System.IO.Ports;
namespace noo
{
program kelas
{
static void Main (string [] args)
{
if (args.Length == 2)
{
SerialPort COM = SerialPort baru (args [0]);
COM.Open ();
COM.WriteLine (args [1]);
COM.Tutup ();
}
}
}
}
Contoh perintah:
noo.exe com5 n4 - nyalakan lampu pada saluran 4, itu ditransmisikan ke papan Arduino pada port COM5. Nilai yang mungkin dari parameter pemicu kedua:
- nX - aktifkan saluran X
- fX - matikan saluran X
- xX - beralih saluran X
- bX - ikat blok daya ke saluran X
- uX - lepaskan blok daya dari saluran X
- yX - mengaktifkan semua saluran, X nilai apa pun
- zX - matikan semua saluran, X nilai apa pun
naskah luasensor1 lokal = 'SWHallWay'
sensor2 lokal = 'SWHall'
sensor3 lokal = 'SWKitchen'
sensor4 lokal = 'SWBedroom'
sensor5 lokal = 'BTNLiteOff'
commandArray = {}
if (devicechanged [sensor1] == 'On') lalu
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ script \\ noo.exe com4 n3")
akhir
if (devicechanged [sensor1] == 'Off') lalu
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f3")
akhir
if (devicechanged [sensor2] == 'On') lalu
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 n0")
akhir
if (devicechanged [sensor2] == 'Off') lalu
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f0")
akhir
if (devicechanged [sensor3] == 'On') lalu
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ script \\ noo.exe com4 n1")
akhir
if (devicechanged [sensor3] == 'Off') lalu
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f1")
akhir
if (devicechanged [sensor4] == 'On') lalu
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ script \\ noo.exe com4 n2")
akhir
if (devicechanged [sensor4] == 'Off') lalu
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ script \\ noo.exe com4 f2")
akhir
if (devicechanged [sensor5] == 'Off') lalu
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 z9")
akhir
kembali commandArray
Denah lantai dasar di Domoticz Video pendek