『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 293434|回复: 599

[进阶教程] 闲置安卓手机安装HA变身智能家居中枢,及网关接入教程

  [复制链接]

32

主题

986

帖子

4233

积分

论坛元老

Rank: 8Rank: 8

积分
4233
金钱
3207
HASS币
110

教程狂人论坛风云人物

发表于 2017-8-28 01:48:19 | 显示全部楼层 |阅读模式
本帖最后由 27hh 于 2018-6-1 16:32 编辑
参考文献:
[1]没有树莓派?没关系,手机也行!闲置安卓设备打造智能家庭中枢,https://post.smzdm.com/p/553097
[2]首发威锋!我们一起来玩HomeKit智能家居!用Siri来控制你的家用电器!,http://bbs.feng.com/forum.php?mod=viewthread&tid=10857822

向以上文章的作者致敬!--------------------------------------
【这篇帖子已经比较老了,其中的部分方法可能已经不适用于当下环境,建议参考囧帅的Ubuntu安装HomeAssistant教程(ubuntu17.04无坑版)

由于本人没有树莓派,于是试图从其它设备运行HomeAssistant系列软件。网上相关教程极少,仅找到一篇相关文章,因此走了很多弯路,花了三天时间,才配置成功。现将完整的配置过程分享出来,方便后人。

(12月27日补充:)有两位网友就 Linux Deploy 方法谈了自己的经验,可供参考:

[经验分享] 关于linuxdeploy布署系统的一些提示

[经验分享] 关于折腾电视盒子linuxdeploy


涉及到的设备:

已root的安卓手机(华为G610-T00);电脑;小米多功能网关。


====================================
目录
1F 准备工作
2F 部署系统(安装环境、HA、HB)
3F 连入外部设备、心得记录


1.准备工作

1.1 下载所需的软件

安卓设备所需的软件有2个:Linux Deploy;BusyBox。
电脑所需的软件有2个:Xshell(免费,可以PuTTY等软件替代);Xftp(免费,可以其他FTP软件替代)。


1.2 安装Busybox

由于只需要点击一下“Install”按钮,这里就不上图了。

1.3 配置Linux Deploy
打开Linux Deploy,按如下步骤操作:
点击左上角,打开抽屉菜单;

Screenshot_2017-08-28-00-51-58.png

点击 设置;
点击 更新环境;OK。

Screenshot_2017-08-28-00-52-11.png

返回主界面,点击右下角的下载图标(该按钮的实际作用为设置)
按照图来配置。

Screenshot_2017-08-28-00-54-46.png Screenshot_2017-08-28-00-54-58.png Screenshot_2017-08-28-00-55-07.png

最后,按下手机菜单键,选择安装。程序会根据我们刚才的配置开始安装Linux系统。这也说明了,刚才那些配置的项目并不是即时生效的,而是需要一系列操作的。

当窗口底部出现“<<< deploy”字样时,即为安装完成。此时,准备工作完成。

59191dce74a4a8181.png_e600.png

评分

参与人数 2金钱 +6 收起 理由
jyz_0501 + 1 在下对你的景仰犹如滔滔长江之水,连绵不绝.
hevake_lcj + 5 谢谢大神分享!

查看全部评分

回复

使用道具 举报

32

主题

986

帖子

4233

积分

论坛元老

Rank: 8Rank: 8

积分
4233
金钱
3207
HASS币
110

教程狂人论坛风云人物

 楼主| 发表于 2017-8-28 01:50:13 | 显示全部楼层
本帖最后由 27hh 于 2017-9-25 16:30 编辑

2. 部署系统

2.1 连接

点击Linux Deploy下面的启动按钮,启动Linux系统。

当出现“<<<start”时,系统启动完成,我们就可以在电脑上操作手机了。

打开Xshell,通过SSH连接到手机。地址就是Linux Deploy最上面显示的地址,例如我的是192.168.1.15。

QQ截图20170828011239.png

用户名和密码是刚刚配置过的。

当出现下图所示的界面时,连接成功。

QQ截图20170828011324.png

2.2 执行命令

(这里提供一个我写的脚本,执行此脚本后可以省去一部分复制粘贴的麻烦,可以空降到“创建 Python 虚拟运行环境并切换”步骤继续。) 1.sh.zip (411 Bytes, 下载次数: 423)
(经测试脚本不能使用,请手动粘帖命令
2.2.1 各种小准备


由于发行版默认没有安装 nano(文本编辑器) 所以需要手动安装一下
sudo apt-get install nano

nano 的基本操作就是 Ctrl+O 是保存,会提示是否写入,回车确认即可,Ctrl+X 是退出
安装Python 的包管理器
sudo apt-get install -y python3-pip

为了解决安装慢的问题,需要修改一下 Python 包管理器(pip)的安装源
sudo mkdir /root/.pip
sudo sh -c "echo '[global]\nindex-url = http://mirrors.ustc.edu.cn/pypi/web/simple/' > /root/.pip/pip.conf"

更新pip
sudo pip3 install -U pip

安装需要用到的 python 虚拟环境工具
sudo pip3 install virtualenv


2.2.2 HomeAssistant


添加一个用户
sudo useradd -rm homeassistant

在 /srv 目录下面添加 python 运行环境,
sudo mkdir /srv/homeassistant
sudo chown homeassistant:homeassistant /srv/homeassistant

之前修改过的 pip 安装源是针对 root 用户的,由于要使用 homeassistant 这个用户运行,而首次运行过程中又需要安装一些 python 包,所以这里还得来一次。
sudo mkdir /home/homeassistant/.pip
sudo sh -c "echo '[global]\nindex-url = http://mirrors.ustc.edu.cn/pypi/web/simple/' > /home/homeassistant/.pip/pip.conf"

需要把新建的文件权限给 homeassistant 用户
sudo chown -R homeassistant:homeassistant /home/homeassistant/.pip

然后切换到新建的用户
sudo su -s /bin/bash homeassistant

创建 Python 虚拟运行环境并切换
virtualenv -p python3 /srv/homeassistant
source /srv/homeassistant/bin/activate

安装 homeassistant
pip3 install -U homeassistant


至此,HomeAssistant安装完成。如果你想马上尝尝鲜,输入hass回车;如果想继续配置,输入exit回车。

2.2.3 HomeBridge



默认是没有安装 curl 的,手动安装一下
sudo apt-get install -y curl

使用官方脚本先添加好安装源
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash –

修改安装源
sudo nano /etc/apt/sources.list.d/nodesource.list

删除文件原有的内容,粘贴以下内容:
deb https://mirrors.tuna.tsinghua.edu.cn/nodesource/deb_7.x xenial main
deb-src https://mirrors.tuna.tsinghua.edu.cn/nodesource/deb_7.x xenial main

Ctrl+X,Y,回车。(这就是保存退出的动作)
安装 nodejs
sudo apt-get update
sudo apt-get install -y nodejs

然后是几个编译用到的依赖包
sudo apt-get install -y python git libavahi-compat-libdnssd-dev

接下来,输入
sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gypcd /usr/lib/node_modules/homebridge/
sudo npm install --unsafe-perm bignum
cd /usr/lib/node_modules/hap-nodejs/node_modules/mdns
sudo node-gyp BUILDTYPE=Release rebuild

在安卓上运行需要执行的额外步骤:
sudo nano /etc/avahi/avahi-daemon.conf

在[publish]部分,有两行前面没有井号(#),把它们加上,保存退出。

然后需要修改服务的启动参数
sudo nano /etc/init.d/avahi-daemon

找到启动服务的地方 d_start() 这一段,在 $DAEMON 后面添加上 --no-drop-root 参数

d_start() {
   $DAEMON --no-drop-root -c && return 0

   if [ -e $DISABLE_TAG -a "$AVAHI_DAEMON_DETECT_LOCAL" != "0" ]; then
       # Disabled because of the existance of an unicast .local domain
       log_warning_msg "avahi-daemon disabled because there is a unicast .local domain"
       exit 0;
   fi;

   $DAEMON --no-drop-root -D
}

至此,HomeBridge配置完成。


2.2.4接下来的工作,是要安装一个HomeBridge的插件HomeBridge-HomeAssitant,这个插件很重要,它是一个“桥”,可以将HomeAssitant这个智能家居系统与苹果的HomeKit平台连接。


先输入并回车
cd /

然后输入
sudo npm install -g homebridge-homeassistant

输入
cd /home/android/.homebridge

输入
sudo nano config.json


文本编辑,内容如下:

{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:30",
        "port": 51826,
        "pin": "123-45-678"
    },

    "platforms": [
  {
    "platform": "HomeAssistant",
    "name": "HomeAssistant",
    "host": "http://192.168.1.200:8123",
    "password": "yourapipassword",
    "supported_types": ["fan", "garage_door", "input_boolean", "light", "lock", "media_player", "rollershutter", "scene", "switch"]
  }
    ]
}


QQ截图20170828013143.png
补充:如果HomeAssistant和HomeBridge在同一台手机运行,则“手机的IP地址”可以为127.0.0.1,这样写响应应会更快一些。"host": "http://127.0.0.1:8123",
回复

使用道具 举报

32

主题

986

帖子

4233

积分

论坛元老

Rank: 8Rank: 8

积分
4233
金钱
3207
HASS币
110

教程狂人论坛风云人物

 楼主| 发表于 2017-8-28 02:02:06 | 显示全部楼层
本帖最后由 27hh 于 2017-8-30 22:54 编辑

3. 连入小米多功能网关

HomeAssistant已经自带了小米网关的插件,因此直接配置使之识别即可。
在终端窗口执行以下命令:
sudo nano /home/homeassistant/.homeassistant/configuration.yaml

复制下列代码至如图位置并按实际情况修改:

#you can leave sid empty if you only have one gateway
xiaomi:
 gateways:
   - sid:
     key: xxxxxxxxxxxxxxxx


QQ截图20170828021605.png

再次启动hass时,会自动扫描网关。然后,HomeAssistant就会出现相关选项,可以控制小米多功能网关了。

4. 心得记录

  • Linux Deploy的设置并不是即时生效的,需要按下菜单键点“配置”才能生效。这一点需要注意。
  • 如果有些命令执行失败,可以在前面加sudo再试试。
  • 参考文献中作者提供的镜像源是https的,在我这里无法连接,换成http解决。
  • Linux 和 Windows 的文本格式不一样,会有各种奇怪的问题。使用现成的脚本时,尽量在 Linux 中编辑。




评分

参与人数 1金钱 +6 收起 理由
+ 6 谢谢大神分享!

查看全部评分

回复

使用道具 举报

32

主题

986

帖子

4233

积分

论坛元老

Rank: 8Rank: 8

积分
4233
金钱
3207
HASS币
110

教程狂人论坛风云人物

 楼主| 发表于 2017-8-28 12:52:26 | 显示全部楼层

后台运行和开机启动

本帖最后由 27hh 于 2017-9-22 21:54 编辑

1.HomeAssistant的后台运行

创建并编辑hass-daemon文件,以创建服务:
sudo touch /etc/init.d/hass-daemon
sudo nano /etc/init.d/hass-daemon

粘贴以下内容:
#!/bin/sh
### BEGIN INIT INFO
# Provides:          hass
# Required-Start:    $local_fs $network $named $time $syslog
# Required-Stop:     $local_fs $network $named $time $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       Home\ Assistant
### END INIT INFO

# /etc/init.d Service Script for Home Assistant
# Created with: [url=https://gist.github.com/naholyr/4275302#file-new-service-sh]https://gist.github.com/naholyr/4275302#file-new-service-sh[/url]
PRE_EXEC="source /srv/homeassistant/bin/activate;"
RUN_AS="homeassistant"
PID_FILE="/var/run/hass.pid"
CONFIG_DIR="/home/homeassistant/.homeassistant"
FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --daemon"
REDIRECT="> $CONFIG_DIR/home-assistant.log 2>&1"

start() {
  if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then
    echo 'Service already running' >&2
    return 1
  fi
  echo 'Starting service…' >&2
  local CMD="$PRE_EXEC hass $FLAGS $REDIRECT;"
  su -c "$CMD" $RUN_AS
  echo 'Service started' >&2
}

stop() {
    if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then
    echo 'Service not running' >&2
    return 1
  fi
  echo 'Stopping service…' >&2
  kill $(cat "$PID_FILE")
  while ps -p $(cat "$PID_FILE") > /dev/null 2>&1; do sleep 1;done;
  echo 'Service stopped' >&2
}

install() {
    echo "Installing Home Assistant Daemon (hass-daemon)"
    echo "999999" > $PID_FILE
    chown $RUN_AS $PID_FILE
    mkdir -p $CONFIG_DIR
    chown $RUN_AS $CONFIG_DIR
}

uninstall() {
  echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] "
  local SURE
  read SURE
  if [ "$SURE" = "yes" ]; then
    stop
    rm -fv "$PID_FILE"
    echo "Notice: The config directory has not been removed"
    echo $CONFIG_DIR
    update-rc.d -f hass-daemon remove
    rm -fv "$0"
    echo "Home Assistant Daemon has been removed. Home Assistant is still installed."
  fi
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  install)
    install
    ;;
  uninstall)
    uninstall
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|install|uninstall}"
esac
以后输入 sudo /etc/init.d/hass-daemon start 即可后台启动HomeAssistant。


2.HomeBridge的后台运行
上传这个文件到/home/android/ homebridge (2.03 KB, 下载次数: 114)
然后执行以下命令:
sudo useradd -r homebridge
sudo mkdir /var/opt/homebridge
sudo cp -R ~/.homebridge/* /var/opt/homebridge
sudo chown -R homebridge:homebridge /var/opt/homebridge
sudo chmod -R +x /var/opt/homebridge
sudo cp ~/homebridge /etc/init.d/homebridge
sudo chmod +x /etc/init.d/homebridge
sudo update-rc.d homebridge defaults


3.二者的开机自启
编辑自启脚本:
sudo nano /etc/rc.local

在 exit 0 上面加入:
sudo /etc/init.d/hass-daemon start
sudo /etc/init.d/dbus start
sudo /etc/init.d/avahi-daemon start
sudo /etc/init.d/homebridge start

保存退出即可。以后,HomeAssistant和HomeBridge就会随系统启动运行。


回复

使用道具 举报

3

主题

159

帖子

587

积分

高级会员

Rank: 4

积分
587
金钱
428
HASS币
0
发表于 2018-3-10 07:23:19 来自手机 | 显示全部楼层
对安卓手机作为Linux服务器安装HA后的耗电测试:

被测手机: 红米3S (锁屏状态)
测试仪表: 小米ZigBee插座 + 米家App (经对比测试,还是很准的)
测试结果: 0.9W (平均)

相当地省电啊!
比家中其它电器待机时的耗电都低哈!

下图是周期24小时的功耗曲线。
中间那个尖峰(3W)就是昨天傍晚我改完WiFi的BMPS(见前面贴子)后重启手机时的。说明重启手机过程还是很耗电的。

图中可见,关闭BMPS模式后,总体耗电并没太大变化,只是把最低耗电点抬高了大约0.2W。

Screenshot_2018-03-10-06-31-56.png

评分

参与人数 1金钱 +10 收起 理由
27hh + 10 666!

查看全部评分

回复

使用道具 举报

6

主题

87

帖子

643

积分

高级会员

Rank: 4

积分
643
金钱
556
HASS币
0
发表于 2017-8-28 13:20:03 | 显示全部楼层
不错,这样就可以把旧手机利用起来了,最想拿旧手机做个魔镜出来
回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16410
金钱
11664
HASS币
45
发表于 2017-8-28 13:26:39 | 显示全部楼层
很好很强大,多谢分享,权限奉上!
回复

使用道具 举报

0

主题

43

帖子

243

积分

中级会员

Rank: 3Rank: 3

积分
243
金钱
200
HASS币
0
发表于 2017-8-28 13:50:07 | 显示全部楼层
打包的文件呢???
回复

使用道具 举报

7

主题

48

帖子

390

积分

论坛技术达人

积分
390
金钱
342
HASS币
0
QQ
发表于 2017-8-28 19:22:45 来自手机 | 显示全部楼层
很棒,请问Android上能不能做编译开发方面的工作?
回复

使用道具 举报

7

主题

48

帖子

390

积分

论坛技术达人

积分
390
金钱
342
HASS币
0
QQ
发表于 2017-8-28 19:23:59 来自手机 | 显示全部楼层
如直接使用gcc, gdb这样的工具
回复

使用道具 举报

32

主题

986

帖子

4233

积分

论坛元老

Rank: 8Rank: 8

积分
4233
金钱
3207
HASS币
110

教程狂人论坛风云人物

 楼主| 发表于 2017-8-28 22:04:56 | 显示全部楼层
hevake_lcj 发表于 2017-8-28 19:22
很棒,请问Android上能不能做编译开发方面的工作?

我记得是可以的!因为参考文章的作者说自己用Linux Deploy原本就是要测试开发工作的!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 19:54 , Processed in 0.077912 second(s), 40 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表