LEHome–完整的开源智能家居方案

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电台即可被触发。

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

部署

软件

服务端

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。

系统功能

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

你可以输入:

可以输入:

可以更复杂一点:

或者更更复杂一点:

如何查看系统支持的命令

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

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

命令格式

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

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

例如:

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

例如:

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

命令callback

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

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

这样来指定。

callback主要如下所示:

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

应用架构

如下图所示:

应用架构图

联系方式

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

python版qq音乐电台及android控制端

python版qq音乐电台

熬了几天夜,分析了qq电台的api,用python实现了基于http协议的qq音乐电台服务。代码共享到github上:

https://github.com/legendmohe/qqfm/

使用方式如下:

开启服务

注意,本项目依赖于 mplayer 和 tornado,要事先安装好。

随机下一首

如果要指定类别下随机下一首,则:

暂停

标记当前播放

获取类别列表

android控制端

代码同样地共享到 github:

https://github.com/legendmohe/QQFM_Android

该版本实现了上述接口的功能。不过代码和界面都比较粗糙。

收工!

ocr2keystroke

用了几乎一整天来实现这样的需求:手机识别纸质数据,然后自动输入到excel里。

这个需求是如下实现的:

详情请看代码,已上传到github,在这里

附上项目的README:


又花了一整天实现了ios版本,代码在这里

用python编写1024游戏 (1)

我们从整体到局部地设计这个游戏。

首先,整个游戏过程可以简化如下:

再想具体一点,可以变成这样:

思考一下 进行 这一步,可以变成:

改写一下,加上判断条件,如下:

具体一下随机出现一个数字这一步,有:

再思考一下滑动这一步,有:

再具体思考一下更改棋盘状态这一步,可得:

其中序列中元素合并步骤具体为:

注意这一步在具体实现时可以同时进行。具体如下:

其中计分的规则是:

回到一开始判断未结束步骤,具体地:

初始化步骤具体为:

综上,可以写出整体的游戏设计思路:

好了,说完思路,接下来将采用python实现。

高清壁纸下载python脚本

** 更新 ** :由于原http://wallbase.cc/已经上不去,又发现了一个类似的网站http://wallpapers.wallhaven.cc,所以修改了一下代码让其正常工作。

偶尔看到一个壁纸网站,高质量壁纸任意下载,当时就震惊了。

于是就有把它们都下下来的冲动,于是顶着困意,写了一个抓取该网页热点图片的python脚本,如下所示:


直接在控制台运行即可。

脚本比较原始,很多请求的参数没有暴露出来,各位自己扩展一下哈~

为什么挂号费、诊疗费相对于化验费、药费,价格这么低?

受朋友所托,发一篇她写的文章在blog上。

作为医疗行业的财务人员,我觉得自己有一点资格回答这个问题。我国医疗机构的价格体系是扭曲的,正如题主所说:挂号费、诊疗费,相对于检查费、化验费是过低的。并且,不仅仅是挂号费、诊疗费,所有新中国成立至八十年代就已经存在一系列服务类项目的价格都是过低的,形成这样的现象有其历史原因。

我国医疗行业的定价大概可以分为三个发展阶段:

1.新中国成立至上世纪八十年代
新中国成立初期,我国可以说是一个全民公费医疗的国家,去医院看病是基本不花钱的,医院作为实实在在的事业单位,其收支平衡主要依靠国家财政补贴。可以说,那个时候,大家看病花了多少钱,国家就补多少钱。医疗服务的价格由国家确定,虽然定的非常低,但医院、百姓的利益都有保障。

2.上世纪八十年代至2000年
自上世纪八十年代开始,医疗占财政支出的比例不断变大,政府不愿意继续担这么大的包袱,开始缩减对医院的财政补贴。对医疗服务的定价出台了新政策,即高新科技项目可以按照成本定价。这意味着,八十年代以后出现的很多检查类、化验类项目,医疗机构可以自己定价了,虽然是按照成本定价,但实际上,医院是可以有一定的盈利的。因此,从这个时候开始,新中国成立至上世纪八十年代已有的项目和后来新出现的高新科技项目形成了两类不同的定价标准,题主所说的服务类项目和检查检验类项目价格倒挂的现象也是从这个时候开始形成的。

3.2000年至今
2000年后,国家新出台政策,医疗机构的定价全面开放根据成本定价,财政补贴进一步缩减。但这时候出现了两个问题:第一,定价全面开放,但医疗机构服务的成本无从统计,因此,最终全国医疗机构的服务类项目依然沿用了2000年以前的定价体系;第二,财政补贴的不断缩减使医疗机构愈发难以自负盈亏,据统计,2000年至2013年我国医疗机构的财政补贴占比平均为10%左右,而以我自己所在医院为例,一家一线城市的著名三甲医院的政府补贴仅占年总收入的6%-7%。

今天,我们的医疗服务价格体系已经达到了非常扭曲的地步。一个阑尾切除手术的手术费用是几百元,用时1.5-2h,其中包括2名医生,1.5个麻醉师,1个护士,不计一间手术室的折旧以及水电等常规消耗成本,单是几位医生护士的时薪就已经超过了定价。如题主所说,一个三甲医院的大教授给你看病,多年的诊治经验就值几块钱的诊金吗?

那么,这些无法负担的成本依靠什么来补偿?你想的没错:药品和检查。国家规定医疗机构药品的价格可以相比进价上浮10%-15%,因此,虽然价格是限定的,但医院依然在药品方面可以有收益(若你觉得药品价格太贵,那么可以参考 @田吉顺 的答案,一针见血啊……)。

说到这里,想必大家也看明白了,我们现行的医疗服务价格制度并没有鼓励医生发挥自己的专业知识为患者做更为高明的诊治,而是鼓励医生让每一位患者多做检查,多吃药,以弥补自己为他看病而无法负担的诊疗服务成本。不是说医生就会故意乱检查乱开药,而是说医生的价值没有体现在他的诊疗和手术实施当中,其本该最受人敬佩的部分被赋予了最低的价值。

但值得欣慰的是,医改的步伐已经开始向前迈进,2014年开始,全国800多家医疗机构开始向国家卫计委上报详细的财务数据,其中包括所有医疗服务项目的明细数据。成果也许不会在一两年之内反映出来,但我们的数据基数在不断变大,对全国医疗机构的把控和分析研究也不断增强,相信在2-5年内,我国的医疗服务定价可以变得合理很多,做医生,亦可以重新变成很多精英的择业方向。

以下附上:
广东省卫生厅_医疗服务价格查询结果

pcDuino v2 实现无线热点

请严格按照以下步骤进行

准备头文件

下载编译需要的头文件:

更新内核支持NAT

编译或直接下载内核

打开这个链接,下载下面提供的内核文件:pcduino_a10_hwpack_20131226.tar

如果你有时间的话也可以按照他的教程来自己编译内核。也可以参考这里

内核安装

首先,将 pcduino_a10_hwpack_YYYYMMDD.tar.xz 放到pcDuino的~下。

  1. 为从nand 启动的板子更新kernel

    依次执行如下命令:

  2. 为从存储卡启动的板子更新kernel

    依次执行如下命令:

注意,此方法不会重装ubuntu

编译安装网卡驱动

参考这里

先执行一下:

然后下载驱动:

然后执行如下命令:

然后删除原有的8188cu.ko

注意,这里做完后最好不要重启,一重启网卡便连不上了,otg和无线都无效,只能通过hdmi或者debug port继续进行下一步

然后执行:

等大概5min。

安装hostapd

执行如下命令:

等大概5min

然后执行:

等大概5min

配置hostapd

这里注意一下,在控制台输入:

出现类似:

时,记下来你的无线网卡标识(这里是wlan4)。

然后,执行:

然后修改:

保存以后执行:

然后你应该会看到hostapd成功运行了。

配置AP固定ip

执行:

在后面添加:

配置dhcp

执行:

在最后添加:

执行:

应该可以看到isc-dhcp-server正常启动了。

设置开机启动

注意,这一步很重要,如果不设置开机启动,那么重启以后,wifi连不上,otg连不上,只能接hdmi或者debug port了。

依次执行:

配置NAT

执行:

修改该文件:

然后安装:

reboot

重启完后(会比之前久一点),你会搜到wifi热点信号了。能连上,但是不能上网,于是我们继续。

设置转发

参考这里

开机后执行:

这时,你再重连一下热点,你会发现可以上网了!

设置开机启动转发

每次开机都要输入命令才能上网太麻烦了。我们把它设置成开机启动:

执行:

#net.ipv4.ip_forward=1#去掉。

然后执行:

添加:

现在开机就可以连上网了!

但是!

刷完内核以后,发现gpio驱动不见了。整个/lib/modules/3.4.29+/kernel/drivers/hardwarelib/驱动都丢失了。搜索讨论了一番,应该是官方img里面的编译设置不是默认的设置(坑!)。

我们可以将官方的hardwarelib文件夹拷贝回来解决这个问题。到这里下载lib文件,放到~目录下。然后执行:

输入:

如果没有输出** faild,那么就成功了。