Mirukuteii 发表于 2018-7-12 02:01:52

【暗度陈仓】如何在斐讯N1上安装homeassistant

本帖最后由 Mirukuteii 于 2018-9-8 02:28 编辑


【暗度陈仓】如何在斐讯N1上安装homeassistant


---

##信息- 2018-09-07:4.X内核wifi修复版armbian已经可以刷入N1,有空加上教程。
- 2018-08-21:无灯大神刚搞了个网页版eMMC移植镜像,简化了移植的操作,但是不知系统和内核信息,楼主将视情做更新和补充。
###新手注意:不推荐新手用N1!!!这不是一个入门的平台,学习不是光看硬件指标的,软件还有生态更重要,别给入门环境设置困难模式。- 2018-08-27:新增N1更新HomeAssistant的问题及解决办法。


# 【暗度陈仓】如何在斐讯N1上安装homeassistant
`n1` `安装` `hass` `adb` `Ubuntu`
![](https://img.shields.io/badge/Pas ... 3.1-brightgreen.svg) ![](https://img.shields.io/badge/%E6 ... 7--11-lightgrey.svg)

##斐讯N1
这货是个NAS,但是硬件指标更像一个电视盒子,考虑到不错的性价比,用来做hass服务器妥妥的。
- CPU:Amlogic S905D,ARM Cortex-A53,四核 1.5GHz。
- GPU:ARM Mali™-450,五核支持4K@60fps硬件解码,HDMI 2.0。
- RAM:K4B4G1646E ,4Gb DDR3-1866MHz,共4颗,2GB。
- ROM:KLM8G1GEME,8GB eMMC,eMMC5.1, 三星MLC。
- LAN:RTL8211F,千兆速率
- WIFI:1x1mimo支持5G ac,2.4G 65Mbps,5G 390Mbps。
- 接口:1个HDMI,2个USB2.0,1个千兆口,一个12VDC。
- 电源:12V/2A。





###个人简评
新手须知:如果不知道斐讯K码0元购的事情,请自行百度,这是购买N1应该知道的背景。
简评:挂着网络NAS的名头,配着超清电视盒子的硬件,过去干的往往是挖矿的活,现在却用来当作网络服务器。
优点:与树莓派3B+相比,架构一致,硬件性能基本相当,略有优势。自带eMMC使用方便,读取速度和可靠性高于microSD卡。自带电源、盒子,供电和散热条件好。最关键是价格便宜。
缺点:作为N1的ROM,其eMMC的容量只有8G,按帖子方法移植系统后,系统空间只有5G。
购置:建议多在闲鱼等二手平台上看看,不要太贪便宜,注意卖家的可靠程度和N1的成色。推荐全新未通电的N1,市场价格波动剧烈,参考价格80元。

补充1:N1和3B(+)真的都是ARMv8架构,树莓派的raspbian系统也有arm64版了,真心不是架构不同。
补充2:GPU的比较没啥意义,N1的GPU在手机中属于低端货色,但是肯定比树莓派的GPU强,至少能上4K。而树莓派好像从来就没更新过GPU,一直是2核250MHz,虽然能超频,似乎也仅仅适合1080P(设计规格是1080C30)。

##安装前的准备工作(不一定都用到)
- 感谢前人的各项工作,特别是恩山论坛的各位大神,恕不一一致谢;
- 不建议纯新手操作,设备变砖请找售后(好吧,可能以后也没有售后了),本人概不负责;
- 时刻保持怀疑精神,我是回忆方式整理,比较简单的地方可能有步骤的跳过和疏漏;
- 斐讯N1主机及电源;
- 路由器、Win系统电脑、网线、HDMI线、USB鼠标;
- USB双公头刷机线(老式移动硬盘线可代替,可自制可淘宝);

- U盘(大于4G,要求稳定)

##下载(不一定全部用到)
- 降级工具:`adb.exe`、 `AdbWinApi.dll` 、`AdbWinUsbApi.dll`、 `fastboot.exe`;
- 降级img:`bootloader.img`、`boot.img`、`recovery.img`;
- 刷机软件:`USB_Burning_tool`;
- 刷机镜像:`N1_mod_by_webpad_v2.0_20180601-sf-gms-xposed-2.img`;
- 线刷工具:`adb.exe`、 `AdbWinApi.dll` 、`AdbWinUsbApi.dll`、 `进入线刷模式.bat`;(这里文件有重复没关系)
- U盘镜像加载工具:`USB_Image_tool`
- Ubuntu镜像:`Armbian_5.44_S9xxx_Ubuntu_bionic_3.14.29_server_20180601.img`;
- U盘移植脚本:`install.sh`;
- 另`putty`、`winscp`等SSH必备工具请自己准备好
- 下载地址如下,请注意解压:
- 链接: https://pan.baidu.com/s/1bela8Fvjiu0prJqkNhaVzA 密码: ipir


##第一步:官方固件降级
请注意,此步骤非必须!
拿到N1以后,千万不要直接接入外部网络,系统会自动升级固件!!!

如果是未通电入网的新N1,固件版本应为2.19,可直接进入第二步。
这就是为什么推荐买未通电未联网N1的理由之一,和卖家撕逼几率的可能性大大降低是理由之二。
如果你像我一样,傻傻地把N1通上电还接入网络,然后去洗了个热水澡,那么恭喜你,一起来降级吧。
我的N1被自动从2.19升到了2.28(最新)。
**哪些版本需要降级:2.22-2.28**。

N1的官方固件是一个安卓系统,所以我们可以通过adb工具来降级。
首先安装adb的4个文件(见准备篇),方法是将4个文件扔到win目录下system、system32、syswow64文件夹中,你电脑里有哪个文件夹就放哪个里面,全部都有就全部都放一份好了,以防万一。懂的同学明白就是放path定义的路径下,然后降级开始:
1. N1和电脑放在同一网段,接入路由器(这里无线有线皆可),获取N1的IP,可以路由器设置好禁止N1访问外网避免继续升级固件;
2. N1接上显示器、接上鼠标,通电开机,启动完成后,在“固件版本”几个字附近连点几下打开adb调试(如图,再多点几下又会关闭adb);


3. 电脑运行cmd,输入命令
```shell
adb connect N1的IP地址
````

看到`connected to N1的IP地址...`表示成功。(注意端口被占用也会失败)

4. USB双公头线连接电脑(原生usb2.0口)和N1(靠近hdmi的usb口);

5. 电脑运行cmd,输入命令
```shell
adb shell reboot fastboot
````
等待N1进入fastboot模式,叮咚一声,Windows发现新硬件“Android Phone - Android ADB Interface”;(失败可尝试换usb口)

6. cmd中按下Ctrl+C中断命令,输入
```shell
fastboot devices -l
```
出现设备序列号,说明已经识别为fastboot设备;

7. 将降级img中(见准备篇)3个镜像文件放到电脑某个容易操作的位置,然后cmd输入命令切换到这个目录下,再运行以下命令:
```shell
fastboot flash bootloader bootloader.img
fastboot flash boot boot.img
fastboot flash recovery recovery.img
```

8. 根据提示信息判断是否完成降级(降级成功后,官方系统中显示的信息并不会改变哦),降级完成后在cmd输入`fastboot reboot`重启机器。

##第二步:刷入官改固件2.0(安卓系统)
**注意:此步有变砖风险,如果你只想通过U盘启动的方法来尝鲜其它系统,而不想改变eMMC内原有的斐讯官方系统,请直接跳过这个步骤,进入第三步,并执行到第5小步,就可以直接运行和使用U盘系统,断电拔掉U盘重新通电即可重新使用官方系统。如果你是准备把U盘系统移植到eMMC的话,目前楼主根据各种信息,认为刷官改固件还是有意义的,应该完成第二步操作后再进行第三步操作比较好。如果你觉得对N1比较熟悉,确实没必要用官改,可以考虑跳过此步骤,直接在官方固件上进行移植。**

1. 安装刷机软件`USB_Burning_tool`;
2. 确保刷机镜像`N1_mod_by_webpad_v2.0_20180601-sf-gms-xposed-2.img`验证无损;
3. 打开刷机软件,在文件菜单中选择导入烧录包,导入完毕后,取消右边"擦除flash"和"擦除bootloader"两个选项,取消右边"擦除flash"和"擦除bootloader"两个选项,取消右边"擦除flash"和"擦除bootloader"两个选项,重要的事情说3遍,否则变砖别怪别人,然后点击开始按钮。(这时并不会真正开始刷机,而是进入刷机就绪阶段,等待条件就绪)



4. 确保USB双公头线连接电脑(原生usb2.0口)和N1(靠近hdmi的usb口);
5. 电脑上运行`进入线刷模式.bat`,输入N1的IP地址,N1重启,电脑设备管理器会发现新硬件:`WorldCup Device`,若顺利,此时刷机软件会自行开始刷机;



6. 刷机到100%完成,点击停止,断开电源和所有连线;



7. N1连接显示器、鼠标、网线等,重新开机,经历10分钟的等待,官改固件第一次启动成功,注意此时通过路由器看到N1的名称为"Android..."

##第三步:U盘启动Ubuntu并移植到N1的ROM中
1. 使用U盘镜像加载工具制作U盘;



2. 制作完成后若弹出格式化请求请确保忽略无视该信息;
3. 电脑打开U盘BOOT区,在3.14.29内核目录中找到`gxl_p230_2g.dtb`文件,复制到BOOT区根目录,并重命名为`dtb.img`
4. 不插U盘,通电入网进入官改系统(此处若插U盘,就要修复权限了),在电脑上运行cmd并输入`adb connect n1的ip`,成功连接后,输入`adb shell reboot update`。
5. 黑屏后关机拔掉电源,然后再插入U盘,稍等片刻,然后再插入电源。
6. 稍等片刻,U盘启动,注意此时通过路由器看到N1的名称为"Android..."一闪变为"Amglogic",说明U盘启动成功,注意此时N1的IP地址发生变化。
7. 进入系统,用户名root,密码1234,然后配置新的root密码和新用户。
8. 通过任意方式将/root/install.sh 替换为网盘中的U盘移植脚本`install.sh`;
9. 运行下列命令:
```shell
nand-sata-install
e2label /dev/sda2 ""
e2label /dev/data "ROOTFS"
```
10. 关机,拔掉U盘,重新开机,此时N1的IP地址又变回来了,等待启动完成即可。

以上步骤完成后,N1既可以通过eMMC系统自启动,需要使用U盘启动时,只要插上U盘即可。

##第四步:安装Homeassistant
楼主没有使用docker安装hass,而是选择手动安装,没啥原因,楼主就是想自己装。
论坛很多docker安装hass的教程,有兴趣的同学可以自己找来试试看。
Ubuntu装hass并不麻烦,论坛已经有囧帅大大的无坑版安装方法,我这里再重新梳理一遍。
移植的Ubuntu,版本是18,代号bionic,内核版本3.14.29,Server版。
如果前面顺利,此时你已经可以以自己的用户名ssh登陆到N1上了。
下面我们先配置下基本环境。
1. 修复sudo。若将U盘插入安卓系统后再移植系统,
则移植文件的所有权将出了问题,需要修复。
否则可以跳过此步骤,方法:
如果你使用自己的用户登陆后,发现使用sudo命令出错,告诉你所属用户id不对,那么你可以使用如下办法修复sudo:
先换root登陆N1,然后逐行输入下述命令:
```shell
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
chown root:root /usr/lib/sudo/sudoers.so
chmod 4755 /usr/lib/sudo/sudoers.so
chown root:root /etc/sudoers
chown root:root /etc/sudoers.d
chown root:root /etc/sudoers.d/README
```
然后,试一下sudo命令是否修复,不报错就OK了。
其实楼主这么修是否完全OK我也不清楚,linux经验不足,只是顺着问题填坑罢了。

2. 配置Armbian,设置时区等
使用系统自带的armbian-config,轻松配置系统,输入:
```shell
sudo armbian-config
```
即可通过图形界面对系统进行基本设置。
你可以按需要自由配置网络,比如添加DNS服务器等,具体的配置不详述。
但是请务必在Personal-Timezone中设置好时区,一般是Asia/Shanghai.

3. 换中科大arm源, 先备份再编辑源配置文件
```shell
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo nano /etc/apt/sources.list
```
接下来,把所有的`http://ports.ubuntu.com/` 全部替换为 `http://mirrors.ustc.edu.cn/ubuntu-ports/`
Ctrl + X , Y , 回车,完成保存退出。

4. 更新源,并安装,然后清理。
```shell
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get autoclean
sudo apt-get clean
```

5. 安装python3相关包。
```shell
sudo apt-get install python3-dev
sudo apt-get install python3-pip
sudo apt-get install python3-venv
```
补充,安装ffi库。
```shell
sudo apt-get install libffi-dev
```

6. 添加一个名为homeassistant的用户,转到/srv目录,
建立homeassistant文件夹,更改此文件夹的所有者和所属组。
```shell
sudo useradd -rm homeassistant
cd /srv
sudo mkdir homeassistant
sudo chown homeassistant:homeassistant homeassistant
```

7. 更换用户,切换目录,创建并进入虚拟环境。
```shell
sudo su -s /bin/bash homeassistant
cd /srv/homeassistant
python3 -m venv homeassistant_venv
source /srv/homeassistant/homeassistant_venv/bin/activate
```
8. 虚拟环境下更新pip, 安装依赖netdisco和warrant包。
```shell
pip install --upgrade pip
pip install netdisco
pip install warrant
```

9. 安装HomeAssistant
```shell
pip install homeassistant
```

10. 安装完毕,退出虚拟环境。
```shell
exit
```

11. 设置开机启动,建立service文件,
```shell
sudo nano /etc/systemd/system/[email protected]
```
将下面内容拷入文件
```shell

Description=Home Assistant
After=network.target

Type=simple
User=homeassistant
Environment=PATH="$VIRTUAL_ENV/bin:$PATH"
ExecStart=/srv/homeassistant/homeassistant_venv/bin/hass -c "/home/homeassistant/.homeassistant"

WantedBy=multi-user.target
```
Ctrl+X,Y,回车,完成保存退出。


12. 更新系统设置,设置HomeAssistant开机启动
```shell
sudo systemctl daemon-reload
sudo systemctl enable [email protected]
```

13. 启动HomeAssistant
```shell
sudo systemctl start [email protected]
```
第一次启动,需要安装一些包,此时8123的前端一般登不上。
可以用一下命令查看状态:
```shell
sudo systemctl status [email protected]
```
当状态只重复出现sun组件info信息时,可以重新启动hass。

14. 重启HomeAssistant
```shell
sudo systemctl restart [email protected]
```
重启之后,还是会安装一些包,稍等一会儿,尝试登陆8123前端。

15. 完成
能够登陆8123,看看系统有没有报错,没其他大问题就表示hass安装OK了。


##其它:
### 如何更新HA:
1. 输入:
```shell
sudo su -s /bin/bash homeassistant
source /srv/homeassistant/homeassistant_venv/bin/activate
pip install --upgrade pip
pip install --upgrade homeassistant
```
若一片白字,成功升级则OK。
2. 若出现以下问题(楼主升级到0.76.2时发生)

说明系统缺少ffi库,ubuntu问题。
那么,若已经按步骤1,,进入虚拟系统,则用exit退出虚拟系统;
然后输入:
```shell
sudo apt-get update
sudo apt-get install libffi-dev
```
成功安装后,再执行步骤1即可。

###如何连接wifi网络:
1. 手动加载dhd模块,以驱动无线网卡,以下命令输入一次即可,以后开机不用再输。
```shell
sudo modprobe dhd
```

2. 确认无线网卡驱动正常,这里我用了ifconfig命令,因为系统还没有这个命令,所以让我们先来安装net-tools,当然,你也可以用系统自带的ip link命令,这样就不需要安装额外的命令了。
```shell
sudo apt-get install net-tools
```
使用ifconfig命令,查看wlan0口参数是否正常。
```shell
sudo ifconfig
```
如果出现有wlan0等信息,说明无线接口已经成功开启。

3. 进行网络接口的配置管理。
```shell
sudo nano /etc/network/interfaces
```

4. 将下列内容拷贝进去并进行修改:
```shell
# armbian-config created
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid 你的无线网络SSID
wpa-psk 你的无线网络密码
# wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
```
Ctrl+X,Y,回车,完成保存退出。

5. 重启wifi
```shell
sudo ifup wlan0
```

这里有一行注释的 wpa选项,因为我自己用的是wpa_supplicant和其自带的命令行wpa_cli进行配置的,有兴趣可以了解下。
注意:无线网络接口和有线网络接口在同一个网段中时,不配置的情况下是无法同时使用的,只有一个可以正常工作。
补充:2.4G和5G均可以正常连接,wifi连接后可以通过iwconfig命令确认属于哪个频段并查看连接情况。

###如何安装蓝牙驱动:
https://bbs.hassbian.com/thread-4280-1-1.html


###如何清理安卓系统:
**注意:清理后安卓系统将无法启动。**
1. 清理根目录下文件(主要)使用命令`sudo rm -r /对应文件夹`来删除以下文档。
- /app 以及/app-XXXX
- /dalvik-cache
- /media
- /data
- /misc 以及/misc_XX
- /TDDOWNLOAD 等无关紧要的安卓遗留的空文件夹
注意:根目录下还有Armbian的系统文件夹,别删错了。

2. 格式化system分区(可选)
格式化前注意确认,别格错了分区
```shell
sudo mkfs.ext4 /dev/system
```
然后,把system挂载到你需要的地方使用。

###如何重装eMMC系统:
前提:在之前的移植过程中使用本帖方法替换并运行过`install.sh`;移植系统时的U盘还在,没有的话需要重新做一下。
原理:使用U盘引导系统,格式化eMMC上的data分区,重新使用install.sh移植U盘文件至data分区即可。以下步骤已经过C老湿检验:

1. 使用U盘的系统启动(通电前先把U盘插上N1即可)。

2. 格式化eMMC的data分区(可以先检查下分区内的文件是否是emmc上的Armbian文件)。
```shell
sudo mkfs.ext4 /dev/data
```

3. 重新执行install.sh即可。
把网盘中的`install.sh`放到/root下
```shell
nand-sata-install
```

###如何实现N1的内网穿透
这里使用了自建Frp服务器和配置N1Frp客户端的方法实现。
首先,你需要一台Frp服务器,并且有一个域名,域名的A记录值为服务器IP。
一般我们通过购买VPS的方式,获得服务器,详细内容不做太多描述,
关于Frp服务器,请根据自己的VPS等的系统,配置并安装Frp服务端,记录下主要的参数,本帖不做详细讨论了。
可以参考考虑下面的办法(我这里是直接把客户端装在N1上,所以下文看到服务端配置完成即可):
https://post.smzdm.com/p/566063/
关于DNS域名购买和配置,百度也一大堆内容,故不做详细讨论了。


重点如下-给N1配置Frp客户端服务:
1. 下载frp软件

```shell
cd /home/homeassistant/.homeassistant
sudo wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_arm64.tar.gz
sudo tar -xzvf frp_0.21.0_linux_arm64.tar.gz
sudo rm -f frp_0.21.0_linux_arm64.tar.gz
sudo mv frp_0.21.0_linux_arm64 frpc
```
完毕后,在/home/homeassistant/.homeassistant/frpc文件夹内可以看到相关文件,这里只有frpc和frpc.ini有用,其它没用可以删掉。

2. 配置frpc.ini
```shell
sudo nano /home/homeassistant/.homeassistant/frpc/frpc.ini
```
覆盖为以下内容
```shell

server_addr = frp服务器地址
server_port = frp服务器端口
token = frp服务器token

type = http
local_ip = 127.0.0.1
local_port = 8123
custom_domains = 自定义的域名(含有指向frp服务器地址的A记录的DNS域名)
```

3. 新建frpc服务,此服务在hass服务启动后再加载
```
sudo nano /etc/systemd/system/frpc.service
```
覆盖为以下内容:
```shell

Description=Frpc service
[email protected]

Type=simple
#Set the path to your hass config location
ExecStart=/home/homeassistant/.homeassistant/frpc/frpc -c /home/homeassistant/.homeassistant/frpc/frpc.ini

WantedBy=multi-user.target
```

4. 设置开机自启并现在启动frpc服务
```
sudo systemctl daemon-reload
sudo systemctl enable frpc.service
sudo systemctl start frpc.service
```


























咸味土豆 发表于 2018-7-12 07:28:17

不错不错,赞一个。

淘子 发表于 2018-7-12 09:09:05

还真是简单精炼

潇洒哥er 发表于 2018-7-12 09:15:56

教程我只认 Mirukuteii 的,排版美丽,条理清晰。这货什么都好,就是emmc太小,如果是32g就是一秒天秒地秒空气的神器了。

antsunzj 发表于 2018-7-12 09:24:10

潇洒哥er 发表于 2018-7-12 09:15
教程我只认 Mirukuteii 的,排版美丽,条理清晰。这货什么都好,就是emmc太小,如果是32g就是一秒天秒地秒 ...

你真的是m神的好基友,有m神的帖子必有潇洒哥。

wangyiyuan 发表于 2018-7-12 09:52:55

哦哦期待

xkjstc008 发表于 2018-7-12 09:55:10

不错不错,赞一个。排版美丽,条理清晰

goldstep 发表于 2018-7-12 09:56:36

潇洒哥er 发表于 2018-7-12 09:15
教程我只认 Mirukuteii 的,排版美丽,条理清晰。这货什么都好,就是emmc太小,如果是32g就是一秒天秒地秒 ...

8g我装好以后还剩余2.5g, 貌似目前没多少设备接入,应该够用了吧

paggywong 发表于 2018-7-12 10:39:23

鼓掌!期待后续!

C.Soult 发表于 2018-7-12 11:13:28

选择的也是这个版本的Ubuntu,但是蓝牙始终无法启动,hciconfig显示MAC全0,感觉是没有有完全驱动起来。不知道楼主有没有遇到这样的问题。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【暗度陈仓】如何在斐讯N1上安装homeassistant