在本文中,我描述了如何将Noolite MTRF-32模块连接到基于Domoticz的智能家居控制系统。
关于房屋本身的一些知识
我的房子是私人的。 它已经在MySensors上引入了一些基于Domoticz的智能家居和无线执行器的基础知识。
目前,已经实现了开门传感器,房屋照明,家庭和街道上的温度和湿度传感器,有关事件和天气预报的语音通知。
房子是木制的,所以我真的不想通过关闭来自中国的卷轴来控制照明。 也不能选择在任何地方拉电线。 经过深思熟虑,灯光控制已在动力装置和Noolite控制台上完成,但仍以某种方式与Domoticz成为了朋友。
此时,Noolite的有关MTRF-32模块的文章引起了我的注意。 Domoticz支持发送HTTP GET请求。 使用带有反馈的模块的前景也很诱人,因此订购了该模块。
关于切割前需要测量7次的内容
事实证明,我购买的不是您所需要的。 购买时,有一个MTRF-32模块可用。 在阅读本文时,我没有看到有关这些模块种类的信息。 通常,我需要USB版本的MTRF-32-USB。
应该澄清32表示可以控制32个通道。 迄今为止,noolite网站上提供了具有64个通道的模块,具有带或不带USB的两个选项。 给MTRF-32读者的问题可以以某种方式更新为MTRF-64吗?
完成的工作已经完成。 披肩被推迟,直到
有人安排
了更好的
图书馆 。
由于某些原因,最好的时机还没有到。 尽管我认为该系统很受欢迎。
第一次尝试
访问该站点后,Noolite找到了可与MTRF-64-USB一起使用的NooliteOne软件。 事实证明,它通过一个COM端口工作,我意识到MTRF-64与带有内置USB-COM适配器的MTRF-64-USB不同。 捆绑的软件包括来自FTDI芯片的驱动程序,而我的开发板具有合适的接触垫。
我没有焊接芯片。 但是我用FTDI用中文Arduino Nano制造了一个USB-COM适配器,并将其连接到板上。
它没有起飞。 由于某些原因,NooliteOne无法找到我的适配器。 当我发现MT1132模块的
库时,我已经开始着眼于反编译。
第二次尝试
我比较了模块的描述,并意识到在数据传输方面,它们几乎没有区别。 对于我来说,在MT1132库中实现的功能就足够了(尚不需要反馈-没有合适的电源装置)。
在更正了库中的代码之后,我开始收到来自MTRF-32的响应。 奇怪的是,一切都在第一次生效。 这是最后发生的事情:
阿敦努
#ifndef ARDUNOO_H
#定义ARDUNOO_H
#如果已定义(ARDUINO)&& ARDUINO> = 100
#include“ Arduino.h”
#else
#include“ WProgram.h”
#endif
#include <SoftwareSerial.h>
ArduNoo类{
字节chnl;
ns系列软件;
公开:
ArduNoo(字节rx,字节tx,字节ch = 0);
无效(字节ch = -1);
无效(字节ch = -1);
无效的onoff(字节ch = -1);
无效绑定(字节ch = -1);
无效解除绑定(字节ch = -1);
bool命令(字节通道,字节命令);
};
#endif
Ardunoo.cpp#include <ardunoo.h>
ArduNoo :: ArduNoo(字节RX,字节TX,字节ch):ns(RX,TX){
chnl = ch;
ns.begin(9600);
}
void ArduNoo ::关闭(字节ch){
命令(ch,0);
}
void ArduNoo :: on(字节ch){
命令(ch,2);
}
void ArduNoo :: onoff(字节ch){
命令(ch,4);
}
void ArduNoo ::解除绑定(字节ch){
命令(ch,9);
}
void ArduNoo ::绑定(字节ch){
命令(ch,15);
}
bool ArduNoo ::命令(字节chnl,字节命令){
静态字节i,r,buf [17] = {171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172);
int sum = 0;
memset(buf + 2,0,14); / *清除邮件正文* /
buf [4] = chnl;
buf [5] =命令;
对于(i = 0; i <15; ++ i){// 10
和+ = buf [i];
}
buf [15] = lowByte(sum); // 10
buf [16] = 172; // 11
对于(i = 0; i <17; ++ i){
ns.write(buf [i]);
}
//调试代码
对于(i = 0; i <17; ++ i){
while(!ns.available())延迟(10);
r = ns.read();
Serial.print®;
}
Serial.println();
返回true;
}
Ardunoo.ino#include <SoftwareSerial.h>
#include <ardunoo.h>
#定义RXpin 10
#定义TXpin 11
ArduNoo noo(RXpin,TXpin);
字符串readString,chString;
无效设置(){
Serial.begin(9600);
}
无效循环(){
readString =“”;
chString =“”;
而(Serial.available()){
延迟(3); //延迟以允许缓冲区填充
如果(Serial.available()> 0){
char c = Serial.read(); //从串行缓冲区获取一个字节
readString + = c; //使字符串为readString
}
}
if(readString.length()> 1 && readString.length()<4){//我们期望1个字母和1或2个数字(ch = 0-31)
for(int i = 1; i <readString.length(); i ++){
如果(isDigit(readString [i])){
chString.concat(readString [i]);
}
}
//Serial.println(readString[0]);
int ch = chString.toInt();
开关(readString [0]){
情况'n'://开
noo.on(ch);
打破
情况'f'://关闭
noo.off(ch);
打破
case'x'://切换
noo.onoff(ch);
打破
案例'b'://绑定
noo.bind(ch);
打破
案例'u'://取消绑定
noo.unbind(ch);
打破
案例'y'://在所有频道上
for(int i = 0; i <32; i ++){
不(i);
延误(100);
}
打破
案例'z'://关闭所有频道
for(int i = 0; i <32; i ++){
noo.off(i);
延误(100);
}
打破
}
}
}
Zhumatiy Sergey的图书馆许可MIT许可证(MIT)
版权所有©2014 Zhumatiy Sergey
特此授予获得副本的任何人免费的许可
软件和相关文档文件(以下简称“软件”)的交易
在软件中不受限制,包括但不限于权利
使用,复制,修改,合并,发布,分发,再许可和/或出售
本软件的副本,并允许本软件所针对的人
具备以下条件:
上述版权声明和此许可声明应包含在所有
软件的副本或实质性部分。
本软件按“原样”提供,不提供任何形式的明示或明示保证。
暗示(包括但不限于对适销性的保证),
适用于特定目的和非侵权。 在任何情况下都不会
作者或版权持有人对任何索赔,损害或其他责任
无论是由于合同,侵权或其他原因而引起的责任,
与软件或软件的使用或其他处理无关或与之有关
软件。
已实现的命令将关闭,打开,切换,全部打开,全部关闭。
事情很小,您需要向com端口提供命令。 由于这在Windows上的Domoticz中是有问题的,因此我决定编写一个控制台应用程序,该应用程序将转换lua脚本中的命令。 命令作为启动参数传递给应用程序。
noo.cs使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Text;
使用System.IO.Ports;
命名空间noo
{
班级计划
{
静态void Main(字符串[] args)
{
如果(args.Length == 2)
{
SerialPort COM =新的SerialPort(参数[0]);
COM.Open();
COM.WriteLine(args [1]);
COM.Close();
}
}
}
}
命令示例:
noo.exe com5 n4-打开通道4上的灯,将其传输到COM5端口上的Arduino板。 第二个触发器参数的可能值:
- nX-启用通道X
- fX-关闭频道X
- xX-切换频道X
- bX-将电源块绑定到通道X
- uX-从通道X解开电源块
- yX-启用所有通道,X任意值
- zX-关闭所有通道,X任意值
lua脚本本地传感器1 ='SWHallWay'
本地传感器2 ='SWHall'
本地传感器3 ='SWKitchen'
本地传感器4 ='SWBedroom'
本地传感器5 ='BTNLiteOff'
commandArray = {}
如果(devicechanged [sensor1] =='On'),则
os.execute(“ c:\\ PROGRA〜1 \\ Domoticz \\脚本\\ noo.exe com4 n3”)
结束
如果(devicechanged [sensor1] =='Off'),则
os.execute(“ c:\\ PROGRA〜1 \\ Domoticz \\脚本\\ noo.exe com4 f3”)
结束
如果(devicechanged [sensor2] =='On'),则
os.execute(“ c:\\ PROGRA〜1 \\ Domoticz \\脚本\\ noo.exe com4 n0”)
结束
如果(devicechanged [sensor2] =='Off'),则
os.execute(“ c:\\ PROGRA〜1 \\ Domoticz \\脚本\\ noo.exe com4 f0”)
结束
如果(devicechanged [sensor3] =='On'),则
os.execute(“ c:\\ PROGRA〜1 \\ Domoticz \\脚本\\ noo.exe com4 n1”)
结束
如果(devicechanged [sensor3] =='Off'),则
os.execute(“ c:\\ PROGRA〜1 \\ Domoticz \\脚本\\ noo.exe com4 f1”)
结束
如果(devicechanged [sensor4] =='On'),则
os.execute(“ c:\\ PROGRA〜1 \\ Domoticz \\脚本\\ noo.exe com4 n2”)
结束
如果(devicechanged [sensor4] =='Off'),则
os.execute(“ c:\\ PROGRA〜1 \\ Domoticz \\脚本\\ noo.exe com4 f2”)
结束
如果(devicechanged [sensor5] =='Off'),则
os.execute(“ c:\\ PROGRA〜1 \\ Domoticz \\脚本\\ noo.exe com4 z9”)
结束
返回commandArray
短片