本帖最后由 hungheo 于 2025-12-8 16:05 编辑
由于homeassistant app是play store下载安装的,严重依赖GMS,外网的时候有时及时有时不及时。
网上找了一圈,试了下ntfy通知,感觉好用,外网推送延时很低,Android IOS web端都能使用,且Android app很省电,同时还可以接收ddns-go、nodered等等的通知,分享一下配置过程
安装环境:
HA:docker
ntfy:docker
ntfy官方文档:https://docs.ntfy.sh/
一、ntfy服务端配置
1.1、安装ntfy
新建文件夹,/自定义挂载目录/ntfy/etc,将sever.yml文件复制到新建的etc文件夹(这里下载server.yml:GitHub)
docker run -it \
-p 3001:80 \
--restart=always \
-v /自定义挂载目录/ntfy/etc:/etc/ntfy \
-v /自定义挂载目录:/var/cache/ntfy \
-e TZ=Asia/Shanghai \
--name=ntfy binwiederhier/ntfy \
Serve
2、密码和auth参数
进入容器:
docker exec -it ntfy /bin/sh
创建密码hash值:
生成auth参数:
echo -n "Basic `echo -n '用户名:密码' | base64`" | base64 | tr -d '='
# 用户名、密码替换成自己的
1.3、server.yml配置
打开以下几条注释,并修改:
重启ntfy容器,搞定!
1.4、https配置(nginx)
替换下中文名称的端口、ip、域名等:
server {
listen 外网端口 ssl http2;
listen [::]:外网端口 ssl http2;
server_name 域名;
ssl_certificate /etc/nginx/certs/域名.pem;
ssl_certificate_key /etc/nginx/certs/域名.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
location / {
proxy_pass http://内网ip地址:端口/;
proxy_http_version 1.1;
proxy_buffering off;
proxy_request_buffering off;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 3m;
proxy_send_timeout 3m;
proxy_read_timeout 3m;
client_max_body_size 0;
}
}
2、HA配置
2.1、configuration.yaml添加:
rest_command:
notify_ntfy: # 动作名称
url: "http://192.168.0.1:3001?auth=生成的auth参数" # ntfy服务端地址+映射端口 (内网通信尽量用内网IP地址,避免遗漏)
method: "POST"
headers:
markdown: yes # 内容支持markdown
Tags: "{{ tags }}" # 支持tags及emoji表情
payload: '{"topic": "{{ topic }}", "title":"{{ title }}", "message":"{{ message }}", "priority":{{ priority | default(3) }}}' # 内容模板
content_type: "application/json" #内容为json格式
重载配置,搞定!
2.2、HA里使用
开发者模式-->动作-->rest_command.notify_ntfy:
action: rest_command.notify_ntfy
data:
topic: HA
tags: tada
title: 测试
message: "这是测试,现在太阳的状态是:{{states('sun.sun')}}"
priority: 3
这里的topic是订阅的主题,可以自定义,客户端接收时填写相同主题
Android APP需要打开自启动,任务中心锁定应用,电池管理设置成无限制!!
效果:
3、Node-Red使用:
拉一个http请求节点,如图设置地址、账号、密码:
|