HomeAssistant侧边栏Ingress
前文容器方式安装HomeAssistant介绍了因为hassio更新导致OpenWrt上无法运行,我们改用了容器方式安装HomeAssistant和实现扩展功能。hassio提供了一个称为Hass.io Ingress的非常实用的功能,可以把扩展页面的入口放到HA侧边栏,免登录,而且在内网穿透时只需对HA设置穿透即可支持Ingress扩展的外网访问。因为抛弃hassio改用容器运行而失去如此实用功能的话,还是挺遗憾的。
有人可能会说,iframe Panel就可以把任意链接放到侧边栏呀,设置panel_iframe不就一样了?区别还是挺明显的,以nodered为例,我需要内网和外网都能访问,不支持Ingress的话,得在nginx额外对nodered添加一条proxy_pass规则;暴露到外网如果还免登录的话,太不安全了,所以得在nodered的settings.js里开启管理密码;但是这样每次从侧边栏访问nodered也得登录,便利性比Ingress方式差远了!
有没有什么办法能实现类似Hass.io Ingress的功能呢?用Hass Ingress插件,用法与panel_iframe类似:
参数说明:
title: 显示在侧边栏的名称
icon: 显示在侧边栏的图标
url: 地址
index: 首页路径,可选,默认空
headers: 自定义http headers,可选,默认无
parent: 挂靠在哪个下面,可选,默认无
ingress: 是否ingress模式,可选,默认true
require_admin: 是否仅admin可访问,可选,默认false
需求一:与hassio一样的侧边栏ingress功能
以nodered为例,首先修改nodered配置文件settings.js,uiHost改为127.0.0.1,端口按需修改例如12580,不设置管理密码,这样在本机上能通过http://127.0.0.1:12580免登录访问,但其他机器上无法访问,安全又方便。但是我们nodered部署在openwrt,监听127.0.0.1怎么局域网和外网访问呢?答案是通过ingress从HA侧边栏访问。
nodered:
title: Node-RED
icon: mdi:sitemap
url: http://127.0.0.1:12580
配置看上去跟panel_iframe一样,但这个是ingress的实现,具备跟hassio扩展的Hass.io Ingress相同的功能。
需求二:默认打开指定路径
nodered有个node-red-dashboard节点可以实现自定义页面,能否将这个页面放到HA里直接访问呢?将url改为http://127.0.0.1:12580/ui/是可以实现,但这时所有相对链接都基于该url,如果页面还需要访问非/ui/下的内容,改url就不合适了,可以通过index参数指定首页路径来实现:
nodered_ui:
title: Node-RED面板
icon: mdi:monitor-dashboard
url: http://127.0.0.1:12580
index: ui/
需求三:自定义Header
目标站点开启了Basic认证,能否自动发送认证信息,实现免登录呢?可以通过headers参数实现,也支持设置Host等其他header:
nodered_ui:
title: Node-RED面板
icon: mdi:monitor-dashboard
url: http://127.0.0.1:12580
index: ui/
headers:
authorization: 'Basic dXNlcjpwYXNzd29yZA=='
需求四:从侧边栏隐藏
像nodered_ui这种非常用功能,能否从侧边栏隐藏,通过lovelace的weblink来访问,从而保持侧边栏清爽呢?可以通过parent参数将入口挂靠在其他侧边栏页面下,例如:
nodered_ui:
parent: nodered
title: Node-RED面板
icon: mdi:monitor-dashboard
url: http://127.0.0.1:12580
index: ui/
这里将nodered_ui挂靠在了nodered下面,/nodered是nodered的地址,而通过/nodered/ui则可以访问到nodered_ui。
type: entities
entities:
- type: weblink
name: Node-RED面板
icon: mdi:monitor-dashboard
url: /nodered/ui
需求五:类似panel_iframe的功能
并非所有站点都支持ingress访问,需要站点本身资源都是相对路径,或者有根据X-Ingress-Path做特殊处理,已知nodered、adguardhome、zigbee2mqtt、portainer等很多站点是支持的,但也有一些站点例如openwrt管理页面是不支持的,这种就只能以非ingress的形式放到侧边栏,通过ingress: false可以实现该功能。
相比panel_iframe有什么优势呢?可以与parent参数结合,从侧边栏隐藏。
mdiindex:
ingress: false
title: MDI Index
icon: mdi:vector-square
url: /local/home-assistant-mdi/home-assistant-mdi.html
总结
通过ingress插件,实现了堪比Hass.io Ingress的体验,甚至比hassio要更好,不仅nodered、zigbee2mqtt、adguardhome等扩展有的功能能被ingress,很多扩展没有的功能也能被ingress,例如OpenWrt里的实时监控http://127.0.0.1:19999、TTYD终端http://192.168.0.1:7681等,从而将HA侧边栏打造成我们All in One的导航页,一键值达!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~




fanticat
校验提示文案
值友6075113924
校验提示文案
奥德彪运芭蕉
校验提示文案
Phnxwang
校验提示文案
谢小萌
校验提示文案
值友6075113924
校验提示文案
fanticat
校验提示文案
谢小萌
校验提示文案
Phnxwang
校验提示文案
奥德彪运芭蕉
校验提示文案