打造属于自己的智能家居(home-assistant和homekit)

作者 donggua

2018-02-23 02.开源硬件 无评论 脚印:

智能家居现在越来越受到装修人士的青睐,特别是对新房装修来说,许多装修公司声称可以实现整体家电的智能化,但相应的装修方案高的惊人!本人利用自己一点IT知识,利用现有的家中设备,争取利用最少的money,实现家庭电器的智能化。

1.所使用到的软硬件有:

软件:HomeKit(苹果的家庭软件,如果是安卓控这个可以忽略)、Home-Assistant(如果你是安卓控,可以使用这个平台,推荐,网上也有类似平台如:Domoticz)、Python-Broadlink(实现射频开关的软件)、Homebridage(实现与HomeKit连接的软件,如果是安卓控这个可以忽略)、Yeelight灯泡(非必需)

硬件:小米家的智能网关及相应配件(这个最好弄,直接买即可,但是费用还是相对贵,我只买了网关、温湿度计、人体传感器、门窗传感器、无线开关和插座,对于壁式开关由于成本相对高,所以没有购买)、broadlink pro(带射频和红外的那种,这个主要是用于壁式开关的遥控)、LV遥控开关(315HZ的那种)、群晖NAS机器(或者是树莓派,由于本人很早就有台DS1513+,所以就没有买树莓派)

2.以下是捣腾过程啦:

(一)前期软硬件准备

(1)小米家设备的安装调试

对于小米家的设备安装就非常简单了,直接安装,如智能插座、传感器、网关(网关买最新版本的,一代是不行的)等。对于软件调试,

调试步骤:

  • 需要下载“米家”这个APP(安卓和苹果都有);
  • 进入程序右上角+,添加设备;

  • 需要添加先网关,过后再在网关中添加子设备,如传感器、插座、无线开关等(这个就不用啰嗦了,网上教程一大把);
  • 打开网关右上角点击…,出来关于,点击进入,再在空白处点击5次,进入开发者模式,里面就会出现局域网通信协议和网关信息,记住MAC地址和密码(后续会用到),Yeelight需要安装Yeelight APP打开极客模式(这个就不介绍了,自行百度);

 

(2)Broadlink及LV智能开关安装调试

  • 先要改造下现有的普通开关,接入LV遥控开关(开关费用就几十块钱一个),安装方式购买时会有说明书,所以就不贴出了;

  • 安装完过后就是遥控器学码,学码需要的是你手头要有射频的无线开关(这个某宝上有卖的,我是买LV开关的时候送的),由于我只需要开关,不需要定时开关,所以我就没有设置定时开关功能。简单介绍下遥控开关学码过程-首先需要在在关灯的情况下,按住LV遥控开关的设置按钮(上图最右边可以看到),指示灯会闪烁,闪一下代表开关、闪两下代表总开,闪三下代表总关,我就是用到后两种(便于后续broadlink远控),过后在灯闪烁的状态下按下遥控器按钮,指示灯随即熄灭,学码成功。如果遇到设置出问题可以进行清码,关灯状态长按设置按钮或者连续拨动普通开关16次以上,指示灯快速闪烁即清码完成(安装即学码完成后即可进行遥控器远控和普通开关的开关,两者不冲突)。
  • 遥控器学码完成后下一步就是使用broadlink pro来学码,为什么不用broadlink pro学码原因是没法学,必须使用遥控器来做桥梁,RM pro学码前需要下载“易联”APP,打开程序,点击右上角+—添加遥控器—自定义,添加按键,过后点击按键学习,这时候broadlink pro设置指示灯变黄,按下刚才遥控器上使用过的一个按键,此按键的整套学码正式完成,APP里面点击你刚才建立的按键看看效果吧,是不是很神奇!(自定义里面可以添加很多按键,但我不建议将所有的按键放在一个自定义里面,可以使用多个自定义来区分不同开关,如下图就是我自己的APP界面)。

(3)学习完的配对码的导出,这个苹果系统相对封闭,可以使用安卓系统进行导出,首先点击APP右上角菜单,出来选项,选择共享-本地分享-同时安卓机器选本地导入来搜索和导入共享的设置,即可实现两台机器的同步,或者使用备份功能,实现云同步(前提是你需要注册一个账户),如果使用的是安卓系统的话此步骤可忽略。

(4)安卓系统安装文件管理器(推荐使用ES文件浏览器),在安卓存储里面找到broadlink文件夹,将此文件夹中的SharedData文件夹拷贝出来(比如说我拷贝到我的NAS机器上),下图中用到一个py文件getBroadlinkSharedData.py,这个可以通过https://github.com/NightRang3r/Broadlink-e-control-db-dump来下载,里面也有使用方法,就是要提取到配对码

上面的py程序必须和你要提取的文件放在同一文件夹中,同时需要你的机器安装了python(群晖机器在套件安装中有python安装,其他机器可以使用命令安装python,这个大家自行度娘去)才能使用py命令,其实提取只用到了jsonSubIr、jsonButton和jsonIrCode三个文件,需要修改py文件中几处地方的目录路径,具体见下图,图中所示的为我自己NAS机器中这三个文件所在位置(位置不对就无法提取)及保存配对码txt文件位置。

过后通过putty或者苹果终端来登陆机器(机器要开启SSH或telnet,群晖机器开启方式:控制面板-终端机和SNMP-终端机中开启和关闭,有的机器默认就已经开启了,所以就不用管),

windows系统,putty软件直接使用telnet或ssh登陆即可

苹果系统输入:ssh 用户名@服务器地址—进入后输入密码— sudo -i —输入密码即可进入root权限(其实可以通过synouser –setpw root 密码 来设置您的root密码,我是设置了root密码了,所以可以直接root登陆)

导出后我们再看看里面是什么东东

里面包含按钮命令的配对码,即code后面的那串数字和字母组成,就是我们需要的。

(5)使用python-broadlink做架桥实现与home-assistant关联,python-broadlink可以去https://pypi.python.org/pypi/broadlink下载,解压到相应文件夹,安装命令如下:

python 所在绝对目录/setup.py  install

再使用https://github.com/NightRang3r/Broadlink-e-control-db-dump里面下载的sendCode.py文件,将其修改为自己的配置,也可以使用如下的配置,并将其保存为py文件(例如:broadlink.py),修改的主要是红色部分。

py文件格式

#!/usr/bin/python

import broadlink
import sys
import time

device_ip=”broadlink IP地址“
device_port=80
device_mac=”broadlink的MAC地址(去除之间的:)“
device_type=”broadlink.rmpro”

device = broadlink.rm(host=(device_ip,device_port), mac=bytearray.fromhex(device_mac))

device.auth()

device.host

device.check_temperature()

livingRoom1=”780734003612133637121336361213363612133637121336133636123712371237123712371213000229133537121336371213353712133600000000“
#device.send_data(livingRoom1.decode(‘hex’))
livingRoom2=”7800fc001334351113343511133435113511361013341334133412351235123512000228133435111334351113343511133435111334351113343610123535111235351135113511123512351235123512351235120002281334351113343511133435111235351112353511123535111235351112353511351135111334123512351235123512351200022812353511123535111334351112353511123535111235351112353511123535113511351112351235123512351234133413000228123535111235351112353511123535111235351112353511123535111235351135113511123512351235123512351234130002281235351112353511120005dc000000000000000000000000“
#device.send_data(livingRoom2.decode(‘hex’))

修改好后放入与python-broadlink安装文件所在的同一文件夹,并在命令行输入

python 所在的绝对目录/broadlink.py

一般不会出错,我之前没有将device.send_data()命令注释掉,每次运行的时候家里面的灯都会闪一下,所以看您的网络情况了,可能有的不需要注释掉。

(二)Home-Assistant安装与配置

(1)安装方法

Home-Assistant安装可以参照https://home-assistant.io/docs/installation/中的方法,这个是官方安装方法。我使用的是docker安装方法,因为我的群晖系统里面有docker程序,而且docker折腾起来比较方便,不想要了直接释放容器即可(其他系统的安装请自行搜索),一下是群晖docker的安装方法

首先是下载Home-Assistant的镜像,这个有官方的镜像,所以推荐使用官方的,第三方的估计也可以,但本人不推荐。搜索栏输入“home-assistant”,过后出现如下界面,选择第一个镜像(官方的)点击下载,过后就是漫长等待吧,因为镜像要2G左右,而且是从国外服务器下载,速度相对慢,且有时会出现下载失败,没关系多试几次就好了。

下载完后就是SSH或telnet进入NAS系统,输入如下命令后回车,这样镜像和容器都弄好了。

docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant

对了上面红色部分修改为你建立的一个文件夹,目的是将此文件夹映射为home-assistant的config文件夹,里面是放各种配置文件的,第一次运行系统会自动生成一些文件,你可以在自动生成的文件中进行自己配置的修改,比如我将其修改为/volume4/docker/home-assistant,什么意思呢?就是我的第四块硬盘中docker文件夹里面的home-assistant文件夹,后续修改文件都是在此文件夹中。

(2)配置方法

配置主要用到的是yaml语言,这个就不多介绍了,主要是我也不清楚,只能按照其他人的方法进行修改和增加新的内容。使用的模版是来自网络,模版如下

configuration.yaml模版

homeassistant:
# 下面这些内容是老高给初学者提供的一个“范例文件”,更多的玩法请访问home-assistant.io,或者等后续的帖子
# 这是你给智能家居系统起的名字
name: Frank’s Home
# 下面填入纬度和经度,用于计算你所在城市的“日出日落时间”,请认真填写,越精确越好!
latitude: 39.9336592
longitude: 116.3366056
# 海拔高度用于修正天气参数和日出日落时间参数 (认真填写,默认单位是:米)
elevation: 56.46
# 度量衡单位制式(metric)是公制,(imperial)是英制
unit_system: metric
# 时区,请参照: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones,一般不需要修改
time_zone: Asia/Shanghai
#下面这个区域,是赋予“智能设备”一个“中文名字”,便于E文不好的人使用,具体用法请仔细看视频教程
packages: !include_dir_named packages
customize:
sensor.dark_sky_apparent_temperature:
friendly_name: 室外体感温度
homebridge_name: 室外体感温度
sensor.cpu_use:
friendly_name: CPU使用率
sensor.dark_sky_cloud_coverage:
friendly_name: 天气云量
sensor.dark_sky_daily_high_temperature:
friendly_name: 室外最高温度
homebridge_name: 室外最高温度
sensor.dark_sky_daily_low_temperature:
friendly_name: 室外最低温度
homebridge_name: 室外最低温度
sensor.dark_sky_humidity:
friendly_name: 室外天气湿度
homebridge_name: 室外天气湿度
sensor.dark_sky_icon:
friendly_name: 天气概况
sensor.dark_sky_summary:
friendly_name: 天气现况
sensor.dark_sky_temperature:
friendly_name: 室外实时温度
homebridge_name: 室外实时温度
sensor.dark_sky_visibility:
friendly_name: 能见度
sensor.dark_sky_wind_bearing:
friendly_name: 风向
sensor.dark_sky_wind_speed:
friendly_name: 风速
sensor.ram_use:
friendly_name: RAM使用率
sun.sun:
friendly_name: 日出日落 时间
sensor.time:
friendly_name: 时间
sensor.waqi_xizhimen_n_st:
friendly_name: 室外空气质量
homebridge_name: 室外空气质量
sensor.cpu_load_total:
friendly_name: CPU负荷
sensor.memory_usage_real:
friendly_name: 内存使用
sensor.network_up:
friendly_name: 上传速率
light.yeelight_rgb_286c07b152fc:
friendly_name: 餐厅灯
homebridge_name: 餐厅吊灯
light.dinner_room:
friendly_name: 餐厅灯
homebridge_name: 餐厅吊灯
switch.livingroom:
friendly_name: 客厅灯
homebridge_name: 客厅灯
icon: mdi:lightbulb
switch.cookroom:
friendly_name: 厨房灯
homebridge_name: 厨房灯
icon: mdi:lightbulb
switch.bedroom1:
friendly_name: 父母卧室灯
homebridge_name: 父母卧室灯
icon: mdi:lightbulb
switch.bedroom2:
friendly_name: 卧室灯
homebridge_name: 卧室灯
icon: mdi:lightbulb
switch.dinnerroom:
friendly_name: 餐桌灯
homebridge_name: 餐桌灯
icon: mdi:lightbulb
switch.bathroom:
friendly_name: 洗手间灯
homebridge_name: 洗手间灯
icon: mdi:lightbulb
switch.balcony:
friendly_name: 阳台灯
homebridge_name: 阳台灯
icon: mdi:lightbulb
sensor.broadlink_sensor_temperature:
friendly_name: 室内温度
homebridge_name: 室内温度
binary_sensor.door_window_sensor_158d00015832f5:
friendly_name: 窗户感应器
homebridge_name: 窗户感应器
binary_sensor.motion_sensor_158d00011c7d42:
friendly_name: 人体感应器
homebridge_name: 人体感应器
sensor.humidity_158d000156d72d:
friendly_name: 客厅湿度
homebridge_name: 客厅湿度
sensor.temperature_158d000156d72d:
friendly_name: 客厅温度
homebridge_name: 客厅温度
binary_sensor.switch_158d0001103c80:
friendly_name: 无线开关
homebridge_name: 无线开关
light.gateway_light:
friendly_name: 网关灯
homebridge_name: 网关灯
switch.plug_158d00012dd28f:
friendly_name: 净化器插座
homebridge_name: 净化器插座
switch.plug_158d00012dd420:
friendly_name: 客厅电视插座
homebridge_name: 客厅电视插座
# switch.sonoff_woshi_3:
# friendly_name: 卧室的灯
# homebridge_name: 卧室里的灯
# switch.sonoff_woshi_2:
# friendly_name: 卧室顶灯
# homebridge_name: 夜灯
#switch.sonoff_woshi_1:
# 在网页界面的首页显示简介(那一大段E文),不想看到的话,请在前面加上#号
introduction:

# 是否使用默认的“首页”
frontend:

http:
# 给系统网页的登录加上一个密码 (推荐!),先去掉下面这行的#号,然后把PASSWORD改成你想要的密码
# api_password: PASSWORD
api_password: 这个你自己设置吧
# Set to 1 to enable development mode
# development: 1
# sessions_enabled: 0
trusted_networks:
– 127.0.0.1
– 192.168.1.0/24
ip_ban_enabled: True
login_attempts_threshold: 50

# 升级提示,当HomeAssitant有新版本发布的时候,“日出日落”图标会变成(Update)字样
updater:

# 系统自动发现新的设备
discovery:

# Allows you to issue voice commands from the frontend in enabled browsers
conversation:

# 在系统数据库中保存“历史数据”
history:

# 在logbook查看所有的“已发生事项”
logbook:

# 太阳“跟踪器”,也就是“日出日落时间”
sun:
#MQTT服务器的相关设置,除了username和password,没搞懂之前,别瞎改
#mqtt:
# broker: 192.168.0.102
# port: 1883
# client_id: Sonoff_WoShi_1
# keepalive: 60
# username: pi
# password: raspberry
# protocol: 3.1.1
#开关1:下面就是楼主在教程中给大家演示的Sonoff开关(Sonoff的刷机,请看视频教程)
switch: !include switches.yaml
# platform: mqtt
# name: “Sonoff_WoShi_3”
# state_topic: “home/Bed_room/3/stat”
# command_topic: “home/Bed_room/3”
# qos: 1
# payload_on: “on”
# payload_off: “off”
# retain: true
#开关2,预留
#switch 2:
# platform: mqtt
# name: “Sonoff_WoShi_2”
# state_topic: “home/Bed_room/2/stat”
# command_topic: “home/Bed_room/2”
# qos: 1
# payload_on: “on”
# payload_off: “off”
# retain: true

# 传感器1:天气“传感器”,API请到forecast.io网站注册并获得,然后填写好
sensor:
– platform: darksky
api_key: 你自己获取吧,我无能为力 # 在forecast.io网站注册并获得,然后填写好
monitored_conditions:
– summary
– icon
#- nearest_storm_distance
#- nearest_storm_bearing
#- precip_type
#- precip_intensity
#- precip_probability
– temperature
– apparent_temperature
#- dew_point
– wind_speed
– wind_bearing
– cloud_cover
– humidity
#- pressure
– visibility
#- ozone
#- minutely_summary
#- hourly_summary
#- daily_summary
– temperature_max
– temperature_min
#- apparent_temperature_max
#- apparent_temperature_min
#- precip_intensity_max
#传感器2:树莓派硬件“监测器”,楼主只使用了两项:CPU占用率和RAM使用率
sensor 2: !include sensors.yaml
# – platform: systemmonitor
# resources:
# – type: memory_free
# – type: memory_use_percent
# – type: processor_use
# – type: since_last_boot
#灯类
light: !include lights.yaml

# Text to speech
tts: !include tts.yaml

device_tracker: !include tracker.yaml

media_player: !include player.yaml
xiaomi:
gateways:
– sid: 你小米网关MAC地址(去除之间的:)
key: 这个是你网关局域网通讯协议的密码

group:
###VIEWS
# default_view:
# view: yes
# entities:
# – group.LivingRoom
# – group.DinnerRoom
# – group.CookRoom
# – group.BedRoom1
# – group.BedRoom2
# – group.BathRoom
# – group.Balcony
LivingRoom_view:
view: yes
name: 客厅
entities:
– group.LivingRoom
DinnerRoom_view:
view: yes
name: 餐厅
entities:
– group.DinnerRoom
CookRoom_view:
view: yes
name: 厨房
entities:
– group.CookRoom
BedRoom1_view:
view: yes
name: 父母卧室
entities:
– group.BedRoom1
BedRoom_view:
view: yes
name: 卧室
entities:
– group.BedRoom2
####GROUPS
CookRoom:
name: 厨房
# view: yes
entities:
– switch.cookroom
DinnerRoom:
name: 餐厅
# view: yes
entities:
– light.dinner_room
– switch.dinnerroom
LivingRoom:
name: 客厅
# view: yes
entities:
– switch.livingroom
– switch.plug_158d00012dd420
– switch.plug_158d00012dd28f
BedRoom1:
name: 父母卧室
# view: yes
entities:
– switch.bedroom1
BedRoom2:
name: 卧室
# view: yes
entities:
– switch.bedroom2
BathRoom:
name: 洗手间
# view: yes
entities:
– switch.bathroom
– light.gateway_light
Balcony:
name: 阳台
# view: yes
entities:
– switch.balcony

这个不做过多介绍,主要做的是一些传感器和设备的配置,home-assistant里面可以从一些网站上获取数据,也可以从您安装的传感器和设备获取数据。

对于使用broadlink pro的方法可以参考:https://home-assistant.io/components/switch.broadlink/,特别提醒的是使用broadlink需要转码、需要转码、需要转码,转码方法以上参考地址的都有,所以就不累述了。

如果你不需要代码中一部分代码可以使用#将其注释掉,另外如果你和我一样有小米的网管的话,除了上面配置以外还需要去https://github.com/lazcad/homeassistant里面下载支持小米的py插件,将其放在新建的文件夹“custom_components”里面,我的配置文件夹中构成如下:

配置完成后网页的界面就是这样的(是不是很酷,可以使用网页来控制家中的电器了):

(三)Homekit配置

Homekit大家应该都熟悉吧!没错,就是iphone或ipad等苹果设备上的家庭程序(智能家居)。Homekit的配置主要用到的是homebridge这个程序和相关插件。以下我还是以docker中的安装和配置为例介绍,其他系统安装类似,可自行搜索!

还是在docker注册表的搜索栏中输入homebridge,下载第一个镜像。

这个配置非常简单,而且作者已经给出了配置方法,我就不介绍了,直接上地址:https://hub.docker.com/r/marcoraddatz/homebridge/

需要在配置文件夹中创建config.json和install.sh两个文件,其他文件不是必须要的。两个文件的格式可以参照我的:

config.json模版

{
“bridge”: {
“name”: “Homebridge”,
“username”: “CC:22:3D:E3:CE:30”,
“port”: 53699,
“pin”: “023-66-678”
},

“platforms”: [
{
“platform”: “AqaraPlatform”,
“sid”: [“你小米网关MAC地址(去除之间的:)“],
“password”: [“这个是你网关局域网通讯协议的密码“]
},
{
“platform”: “yeelight”,
“name”: “yeelight”
},
{
“platform”: “HomeAssistant”,
“name”: “HomeAssistant”,
“host”: “http://127.0.0.1:8123”,
“password”: “home-assistant配置文件中登陆密码“,
“supported_types”: [“binary_sensor”, “cover”, “fan”, “input_boolean”, “light”, “lock”, “media_player”, “scene”, “sensor”, “switch”],
“logging”: true
}
],
“accessories”: [
{
“accessory”: “Synology”,
“name”: “Diskstation”,
“ip”: “群晖系统IP地址“,
“mac”: “群晖机器的MAC地址“,
“port”: “管理界面的端口,默认5000“,
“secure”: false,
“account”: “用户名“,
“password”: “密码“,
“version”: 6
}
]
}

install.sh模版

#!/bin/bash
apt-get install libavahi-compat-libdnssd-dev
npm install -g homebridge-aqara
npm install -g homebridge-yeelight
npm install -g homebridge-synology
npm install -g homebridge-homeassistant

这两个文件是对应的,配置文件里面设备和安装的插件是对应的,不然就没法在homebridge里面使用。

配置完成后就可以将容器中的系统关闭后再运行一次,过后会出现类似如下的结果,其中会出现homekit所需的配对码

过后就可以在iphone或其他苹果设备上使用homekit了,配对成功后会提示你配置各个可用设备,过后就可以使用手机或苹果其他设备对家中的电器进行控制,甚至可以使用siri来语音控制了!

至此,所有介绍暂时告一段落,如有问题可以随时给我留言或邮件,我会尽我所能帮助大家,后续有新的内容我也会随时更近!

其实home-assistant里面功能是比较强大的,可以实现条件控制,比如:利用日出日落时间控制家中灯的开关和灯亮度的调节,根据手机是否在家实现电气的开关等,后续有时间再折腾!

码字太累了,就不再检查文章内容了(其实我很懒的~~~~,写作能力有限~~~),大家凑合看吧!!!!!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注