HomeAssistant侧边栏Ingress

2023-03-06 13:18:57 1点赞 24收藏 7评论

前文容器方式安装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类似:

Hass IngressHass Ingress

参数说明:
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

HomeAssistant侧边栏Ingress

需求五:类似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的导航页,一键值达!

HomeAssistant侧边栏Ingress


作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
7评论

  • 精彩
  • 最新
  • 老铁,求ingress插件地址

    校验提示文案

    提交
    github搜hass_ingress

    校验提示文案

    提交
    收起所有回复
  • 外网访问ha的话,打开nodered插件,回看到访问的是内网ip,打开失败,请教一下怎么设置一下呢?

    校验提示文案

    提交
    你用的是iframe_panel吧,用ingress就不会有这个问题,方便很多

    校验提示文案

    提交
    收起所有回复
  • 学以致用。。

    校验提示文案

    提交
  • 这个插件没找到呀,能给个地址吗?

    校验提示文案

    提交
  • 这个插件要单独装吗?没看太看懂啊,大佬。上面截图的文本里的代码添加到哪个文件里呢?求指教

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
目录
24
扫一下,分享更方便,购买更轻松