LEHome 是一套完整的智能家居方案
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
data
lib
usr
util
vendor
.gitattributes
.gitignore
LICENSE-2.0.txt
README.md
__init__.py
audio_server.py
config.py
debug_log_home.sh
geo_conf.json
geo_fencing_server.py
home.py
log_home.sh
mqtt_server_proxy.py
ping_endpoint.py
quick_button.py
remote_info_sender.py
remote_server_proxy.py
start.sh
stop.sh
tag_endpoint.py

README.md

    _/        _/_/_/_/  _/    _/    _/_/    _/      _/  _/_/_/_/   
   _/        _/        _/    _/  _/    _/  _/_/  _/_/  _/          
  _/        _/_/_/    _/_/_/_/  _/    _/  _/  _/  _/  _/_/_/       
 _/        _/        _/    _/  _/    _/  _/      _/  _/            
_/_/_/_/  _/_/_/_/  _/    _/    _/_/    _/      _/  _/_/_/_/       
                                                                             
================================================================

LEHome 是一套完整的开源智能家居方案。LEHome拥有以下特性:

  1. 简单的控制命令编程
  2. ibeacon室内定位
  3. 高度模块设计
  4. 视频采集、红外控制、开关控制、传感器采集
  5. android,web app,微信版客户端

项目地址:https://github.com/legendmohe/LEHome

UPDATE

2015.5.26 添加定位功能

example:

定位某某

服务器接受到上述命令后,即会向所有绑定的客户端以“某某”为参数发送一个定位请求。客户端收到请求后,如果“某某”与自己设定的名字是一致的,即会调用SDK发起定位,然后将结果回传给服务器。服务器再将结果发送给所有绑定的客户端。这时候客户端便可以看到“某某”的具体位置了。如下图所示:

定位示例


2015.1.13 添加触发器功能

example:

当打开电灯的时候播放QQ电台

当上述命令生效的时候,只要有打开电灯发生,播放QQ电台即可被触发。

注意,触发器是一次性的,如果要持续触发,请将其放在一个循环里。另外,触发的内容最 好用#包围,以免引起命令解析错误。例如:

循环每工作日早上7点30分内容是当#打开电灯#的时候播放qq电台

部署

软件

服务端

LEHome 服务端基于Python,需要安装以下依赖:

请看这里

down下来后,配置init.json(后面会说明如何配置),然后在根目录下运行./start.sh即可(先用chmod添加执行权限)。

客户端

目前LEHome实现了Android,web app,微信版客户端,如有需要可与我联系legendmohe@foxmail.com

硬件

要完整地运行本项目,需要准备以下硬件:

  1. reco WIFI插座 * n
  2. 蓝牙4.0适配器 * 2
  3. ibeacon模块 * n
  4. 蓝牙音箱 * 1
  5. 红外模块 * 1
  6. zigbee传感器 * 2
  7. UVC 摄像头 * 1

reco WIFI插座

淘宝大概99一个,体积略大,好在控制协议是开放的,可以很方便地整合进LEHome。

买回来后,用reco的手机客户端配置一下插座使其正常工作,然后打开路由器的管理页面,将插座的ip记下来备用。

你也可以通过更改SwitchHelper.py使系统兼容自己的wifi插座。

蓝牙4.0适配器

由于要使用ibeacon进行室内定位,故需要4.0以上的BT适配器。需要两个是因为一个负责连蓝牙音箱,一个负责接受ibeacon数据包。如果直接使用音频线来连音箱,则只需一个适配器即可

蓝牙音箱

可以用普通音箱代替 :)

红外模块

淘宝有售,选择一个开源控制协议的即可。为了避免广告嫌疑,这里不提供链接,有需要的可以私下联系。

zigbee传感器

淘宝有许多zigbee开发板出售,选择其中之一即可。为了避免广告嫌疑,这里不提供链接,有需要的可以私下联系。

注:要根据实际采用的红外模块和zigbee传感器模块来调整LEHome的源码(RILHelper.py和sensor_server.py)。

UVC 摄像头

如果使用截图功能,需要一个UVC摄像头,很容易就可以买到。我使用的是罗技C270。

系统功能

本系统最大的特点是能支持简单的命令编程。

你可以输入:

打开电灯

可以输入:

打开电灯然后打开风扇

可以更复杂一点:

循环每工作日晚上7点30分内容是打开风扇然后打开电灯

或者更更复杂一点:

循环每工作日晚上7点30分内容是如果我在家里那么延时10分钟打开电灯然后如果当前温度大于数值26那么打开风扇然后播放语音#你好#

如何查看系统支持的命令

打开usr/init.json,可以看到在"command"项下,有许多预定义的命令。

系统检测到命令词出现的时候,会调用相应的callback,所有业务逻辑都在callback里面完成。

命令格式

命令由基本命令和控制语句组成。准许以下规则:

  1. 基本命令 = delay + action + target + message
  2. 基本命令 = 基本命令 + 控制语句
  3. 命令 = trigger + 基本命令 + finish/stop

例如:

打开风扇 -- 打开[action]风扇[target]
延时10分钟打开电灯 -- 延时10分钟[delay]打开[action]电灯[target]
查询公交车8路 -- 查询[action]公交车[target]8路[message]
如果我在家里那么打开电灯 -- 如果[控制语句if]我在家里[基本命令]那么[控制语句then]打开电灯[基本命令]

以上命令不能直接被系统识别,需要用trigger和finish/stop包围

例如:

你好打开风扇谢谢 -- 你好[trigger]打开[action]风扇[target]谢谢[finish]

*添加trigger和finish的原因是系统支持连续语音识别命令,需要考虑断句的情况,所以要添加两个标志位来截取命令。

命令callback

所有命令对应的callback.py都保存在usr/callbacks/目录下。

在init.json文件中,可以通过:

"callback":{
    "whiles":{
        "循环":"whiles.while_callback",
        "重复":"whiles.while_callback"
    },
...
}

这样来指定。

callback主要如下所示:

from lib.model import Callback

    class timer_callback(Callback.Callback):
    def callback(self, cmd, action, target, msg):
        ...

当命令词被触发时,相应callback的callback()方法会被调用,传入的参数由callback函数的定义决定。

应用架构

如下图所示:

应用架构图

联系方式

本项目断断续续做了一年,代码风格,逻辑实现等比较幼稚,加上本README写得极简,基本不可作为开发参考使用,故如有任何疑问,可联系legendmohe@foxmail.com