恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3063|回复: 52

[N1盒子] 基于Flippy的openwrt固件下docker搭建mqtt、hass接入homekit实现Siri语音控制

  [复制链接]
发表于 2020-2-17 17:44 | 显示全部楼层 |阅读模式
本帖最后由 layui 于 2020-10-21 22:32 编辑

笔者的N1固件版本是23+版本,所有操作理论上是没有版本区别的。
N1是旁路由模式,取消桥接,已添加防火墙规则
环境:
  • 主路由 K2P  IP地址192.168.123.1  DHCP开启,网关以及dns指向192.168.123.2
  • 旁路由 N1 IP地址192.168.123.2  DHCP关闭 ,网关指向192.168.123.1                     
  • Home-Assistant  IP地址192.168.123.3   
  • RabbitMQTT  IP地址192.168.123.4

以下所有操作在ssh(终端)完成,拉取镜像需要自备梯(全局)
这用的是RabbitMQTT部署的,实际上来说和其他mqtt相比稍微有点大
2020-3-1更新:hass是自带有MQTT的,具体使用请看链接:https://www.home-assistant.io/integrations/mqtt

RabbitMQTT部署
// 新建配置目录
  1. mkdir -p /mnt/mmcblk1p3/rabbitmqtt/confdir /mnt/mmcblk1p3/rabbitmqtt/workdir
复制代码

// 设置rabbitmqtt目录 777权限,否则会提示权限不足,启动容器失败
  1. chmod -R 777 /mnt/mmcblk1p3/rabbitmqtt/
复制代码

// 开启网卡混杂模式
  1. ip link set eth0 promisc on
复制代码

// 新建macvlan模式 子网掩码192.168.123.0/24  网关192.168.123.1  网卡名称eth0  macvlan名称macne

  1. docker network create -d macvlan --subnet=192.168.123.0/24 --gateway=192.168.123.1 -o parent=eth0 macne
复制代码

// 容器名称some-rabbit  macvlan名称macne IP地址192.168.123.4 后面就是配置目录以及镜像了
  1. docker run -d --restart=always --name some-rabbit --network macne --ip=192.168.123.4 -v /etc/localtime:/etc/localtime:ro -v /mnt/mmcblk1p3/rabbitmqtt/workdir:/var/lib/rabbitmq -v /mnt/mmcblk1p3/rabbitmqtt/confdir:/etc/rabbitmq arm64v8/rabbitmq
复制代码

// 举例容器ID66b76e8bd266 手动开启rabbitmq_management插件,rabbitmq_mqtt插件和rabbitmq_web_mqtt插件
  1. docker exec 66b76e8bd266 rabbitmq-plugins enable rabbitmq_management
  2. docker exec 66b76e8bd266 rabbitmq-plugins enable rabbitmq_mqtt
  3. docker exec 66b76e8bd266 rabbitmq-plugins enable rabbitmq_web_mqtt
复制代码

// 默认有guest账户,密码guest  但仅限本地测试
// 新增layui用户,密码demodemo   设置虚拟机以及管理员权限
  1. docker exec 66b76e8bd266 rabbitmqctl add_user layui demodemo
  2. docker exec 66b76e8bd266 rabbitmqctl set_permissions -p / layui ".*" ".*" ".*"
  3. docker exec 66b76e8bd266 rabbitmqctl set_user_tags layui administrator
复制代码

// 查看容器是否启动
  1. docker ps
复制代码


确认启动成功过了,浏览器打开 ip:15672  进行访问mqtt,举例192.168.123.4:15672

15672 是rabbitmq management管理界面默认访问端口
5672 是amqp默认端口
1883 是mqtt tcp协议默认端口
15675 是web_mqtt ws协议默认端口

Home-assistant部署
// 新建配置目录
  1. mkdir -p /mnt/mmcblk1p3/home-assistant/confdir
复制代码

// 开启网卡混杂模式
mqtt和hass部署在同一台机器不用执行这行,前面已经设置
  1. ip link set eth0 promisc on
复制代码

// 新建macvlan模式 子网掩码192.168.123.0/24  网关192.168.123.1  网卡名称eth0  macvlan名称macne  mqtt和hass
部署在同一台机器不用执行这行,前面已经设置
  1. docker network create -d macvlan --subnet=192.168.123.0/24 --gateway=192.168.123.1 -o parent=eth0 macne
复制代码

// 网络模式 macne  固定ip192.168.123.3  容器名字home-assistants 配置目录/mnt/mmcblk1p3/home-assistant/confdir  
  1. docker run -d --restart=always --name home-assistants --network macne --ip=192.168.123.3 --privileged -v /etc/localtime:/etc/localtime:ro -v /mnt/mmcblk1p3/home-assistant/confdir:/config homeassistant/home-assistant:latest
复制代码

//
查看是否正常启动
  1. docker ps
复制代码


确认启动成功过了,浏览器打开 ip:8123  进行访问hass,举例192.168.123.3:8123


hass具体配置请参考本站帖子https://www.right.com.cn/forum/thread-1348855-1-1.html

启用homekit仅需一个单词,在configuration.yaml随意一行填写“homekit:” (带冒号的,路径是:
  1. /mnt/mmcblk1p3/home-assistant/confdir/configuration.yaml
复制代码

最后补充一下,记得保存homekit code码,否则你就得重新添加!
// 如忘记homekit code码,需要删除配置目录下的文件,操作完记得重启容器:
  1. rm /mnt/mmcblk1p3/home-assistant/confdir/.homekit.state
复制代码

// 如忘记hass管理账号密码,也可以通过删除文件夹重置,操作完记得重启容器:
  1. rm -rf /mnt/mmcblk1p3/home-assistant/confdir/.storage
复制代码
温馨提示:删除文件夹后,重启容器后配置好账号再设置下mqtt,再次重启容器即可识别设备(别问我怎么知道的,我已经误操作一次了233)

题外docker 命令备忘,查看docker容器挂载目录。container_id为容器名称或者容器ID
  1. docker inspect container_id | grep Mounts -A 20
复制代码


MQTT的容器一定得要在HASS前面启动完成





本帖被以下淘专辑推荐:

  • · N1|主题: 17, 订阅: 1
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2020-3-15 17:14 | 显示全部楼层
本帖最后由 layui 于 2020-6-17 23:16 编辑

如果报错:docker: Error response from daemon: failed to create the macvlan port: device or resource busy.

即设置网卡名称和实际使用网卡名称不是同一个!举例:openwrt默认是桥接,使用的网卡名称就是br-lan,这时你设置eth0网卡是没作用的!
并不是只要有eth0就可以设置启动docker

附上hass配置文件,设置上应该是没有什么问题了!只需要替换几个mac地址即可使用,文件内已经注释
我个人是没有在N1同时部署MQTT和HASS的(但文档是测试通过正常使用的),因为我安卓机,只有一个iPad是放在宿舍语音控制的。
使用的mqtt是公网服务器上架设的,你当然也可以直接使用HASS自带的MQTT
https://www.lanzous.com/iaa7c3c




点评

您好,我在我的服务器上也安装了rabbitmq 开启了MQTT ,用MQTT工具测试是可以链接的,但是不知道为什么HA就是无法连接MQTT。(HA是可以链接N1本地架设的MQTT的)。请问一下这个该如何解决呢?  详情 回复 发表于 2020-6-27 01:39
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-18 01:11 | 显示全部楼层
这个一定要顶上!!!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-18 01:43 来自手机 | 显示全部楼层
顶上,感谢分享。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-18 01:48 来自手机 | 显示全部楼层
感谢分享,楼主是光猫拨号?N1网关1.1

点评

光猫桥接,主路由拨号的  详情 回复 发表于 2020-2-18 13:27
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-18 09:16 | 显示全部楼层
本帖最后由 aska2004 于 2020-2-18 09:29 编辑

谢谢教程、正好看看,研究一下,能否实现对网络中的其他PC进行开关控制。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-18 09:29 | 显示全部楼层
本帖最后由 aska2004 于 2020-2-18 09:31 编辑

原来用host 模式直接安装后, - platform: wake_on_lan
和 turn_off_rs0x: 'net rpc shutdown -I 192.168.1.x -U xxxr%xxx'  无法实现开关机

点评

这个我就不太清楚了  发表于 2020-2-18 13:29
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-18 09:30 | 显示全部楼层
好帖,早看到就不用自己折腾了
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-18 10:22 | 显示全部楼层
贝壳云刷的23+  运行报错
root@OpenWrt:~# docker run -d --restart=always --network macne --ip=192.168.1.253 --pri
vileged --name="home-assistants" -v /mnt/mmcblk0p4/docker-my/homeassistant/config:/conf
ig homeassistant/aarch64-homeassistant:latest
0ee82fe60637f8dc610b66ac438beb081531500b032e4a65df8299a0b36e960e
docker: Error response from daemon: failed to create the macvlan port: device or resource busy.


刷了还几个版本都是这样?请问怎么解决
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-18 10:22 | 显示全部楼层
贝壳云刷的23+  运行报错
root@OpenWrt:~# docker run -d --restart=always --network macne --ip=192.168.1.253 --pri
vileged --name="home-assistants" -v /mnt/mmcblk0p4/docker-my/homeassistant/config:/conf
ig homeassistant/aarch64-homeassistant:latest
0ee82fe60637f8dc610b66ac438beb081531500b032e4a65df8299a0b36e960e
docker: Error response from daemon: failed to create the macvlan port: device or resource busy.


刷了还几个版本都是这样?请问怎么解决

点评

报错原因是设置网卡名称和使用网卡名称不一致,你去看接口网卡名称就知道了  详情 回复 发表于 2020-2-18 13:30
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2020-2-18 13:27 | 显示全部楼层
oosee 发表于 2020-2-18 01:48
感谢分享,楼主是光猫拨号?N1网关1.1

光猫桥接,主路由拨号的,感谢提醒,我又粗心了!
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2020-2-18 13:30 | 显示全部楼层
∮茫然£如风 发表于 2020-2-18 10:22
贝壳云刷的23+  运行报错
root@OpenWrt:~# docker run -d --restart=always --network macne --ip=192.168 ...

报错原因是设置网卡名称和使用网卡名称不一致,你去看接口网卡名称就知道了
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-20 09:54 | 显示全部楼层
谢谢楼主分享!!!!!!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-21 20:49 | 显示全部楼层
我确定网卡名称是同一个,还是出现这个错误,是什么问题?而且拉取镜像之后就变卡了,网络也断了,只有卸载重启才正常

点评

在终端输入ifconfig 附上图  详情 回复 发表于 2020-2-21 20:53
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2020-2-21 20:53 | 显示全部楼层
tofution 发表于 2020-2-21 20:49
我确定网卡名称是同一个,还是出现这个错误,是什么问题?而且拉取镜像之后就变卡了,网络也断了,只有卸载 ...

在终端输入ifconfig   附上图

点评

[attachimg]347014[/attachimg][attachimg]347015[/attachimg]我把镜像都删了  详情 回复 发表于 2020-2-21 21:40
我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-2-21 21:40 | 显示全部楼层
layui 发表于 2020-2-21 20:53
在终端输入ifconfig   附上图

QQ截图20200221213246.png QQ截图20200221213235.png 我把镜像都删了

点评

你这个就是我上面说的啊,设置网卡和实际使用的网卡不是同一个,你这里使用的是br-lan,而教程说的是eth0,不出错就有鬼了  详情 回复 发表于 2020-2-22 02:45
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )|网站地图

GMT+8, 2020-10-22 03:24

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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