Home Assistant 绑定米家账号后怎么刷新设备列表

问题

在 Home Assistant 使用小米官方插件并绑定账号(初始化)后,再在米家 APP 内添加设备,HA 内没有自动添加上设备,需要手动刷新设备列表

这里有一个之前写的绑定米家设备的教程,不知不觉过了两年啦


解决方法

在 HA 左下角设置>设备与服务>XiaoMi Home 里点击齿轮图标

然后在弹出的窗口滑到上方,勾选更新设备列表

在页面下方点击下一步,再勾选确认后等待几秒就能看到新添加的设备了


后记:这个 GitHub 文档里是有写的,但是明显我没有看到,在设置里找了很久才找到 🙁

如何解决 Matomo 统计的历史数据突然变成 0 访客

问题

今天打开博客的 Matomo 统计,发现 2 月其中两天的访客人数突然就变成了 0 人,我很确定在前天看的时候是有访客的,隔了两天再看已经消失了


解决方法

搜索发现,遇到这种情况只是归档数据出了问题,原始的访客日志还是在的,所以只需要重新建立一遍归档就能修复,重建归档的方法主要有两种:直接删除归档的数据表和用插件把数据表设置成“无效”,这里用后者

首先到 Matomo 插件市场里下载Invalidate Reports,在页面最底部的橘色按钮下载 WordPress 版本的插件,在 WP 里上传插件压缩包安装插件

然后到 Matomo 统计的设置>系统>设置为无效报告里把从上个月开始的数据设置为无效(根据需要调整)

然后等待下一次计划任务触发(默认一小时一次)归档数据就会重建了,或者也可以在 WP 插件的诊断>Troubleshooting 里手动点击 存档报告 按钮重建

利用 n8n 工作流实现定时检测友链状态

博客的友链不时会出现死链,网站打不开等的状态,本来想着用 UptimeRobot 这类网站监控工具来监控但是手动同步友链列表又比较麻烦,所以就改为用 n8n 工作流来定时自动获取友情链接列表,再自动逐一检测状态并筛选失效链接推送,用了点时间弄出来一个工作流,如果你有类似需求可以参考看看 🙂


n8n 工作流

先看截图:

逐一说明:

  1. 定时触发:每 10 小时触发运行
  2. HTTP 请求:发送请求到博客的友链页面(https://wuminboke.site/misc),失败重试三遍;这里需要注意如果你的博客开了 CF 5 秒盾或者类似检测,需要调整一下 WAF 规则
  3. JS 代码:提取<li>里的<a>标签,并且排除掉博客自身的域名:
    const html = $input.first().json.data
    const regex = /<li[^>]*>\s*<a\s+[^>]*href=["']?([^"'\s>]+)["']?[^>]*>/gi;
    const excludedDomains = ['wuminboke.site']; //排除自己的博客域名
    const hrefs = [];
    let match;
    while ((match = regex.exec(html)) !== null) {
      const href = match[1];
      const isExcluded = excludedDomains.some(domain => href.includes(domain));
      if (!isExcluded) {
        hrefs.push(href);
      }
    }
    return hrefs.map(href => ({ json: { href } }));
  4. HTTP 请求:逐一发送 GET 请求到 {{ $json.href }} ,并且把设置里的 On Error 改为 Continue (using error output),错误时继续
  5. 如果:把上一步的 Error 拉到如果,配置 {{ $input.all().length }} # is equal to 0,判断有无错误
  6. JS 代码:如果上一步“如果”的结果是“否”,那么把错误的网址和错误码拼起来:
    const items = $input.all();
    const lines = items.map(item => {
      const href = item.json.href;
      const status = item.json.error?.status ? ` ${item.json.error.status}` : '';
      return `${status}\n ${href}`;
    });
    const message = `检测完成 (共有${lines.length}个错误)\n\n` + lines.join('\n\n');
    return [{ json: { message } }];
  7. TG 推送:利用 TG 机器人发送通知(我在消息前还加了时间,但是不是必要的);在@BotFather 创建机器人获取 Token 并用@userinfobot 获取账号的聊天 ID

不想自己托管 n8n 的可以找找那些免费 Docker 容器服务,比如 ClawCloud 绑定 GitHub 后就有免费的额度可以用 😛

WordPress 优化 – 把博客的图片挂载到免费的 Cloudflare R2 储存桶

Cloudflare 的 R2 储存桶提供了免费的 10GB 空间再加上 100 万次 A 类操作(写入),1000 万次的 B 类操作(读取),小博客存放图片够用了,不过是需要绑定付款方式的,不过无需绑卡的方案也有不少,比如 IBM 云有免费的 25GB 对象储存,具体还请自行搜索,这里就不多叙述了 🙂


创建储存桶

首先登录 Cloudflare,在左侧菜单的 Storage & databases 里找到 R2 object storage,第一次使用需要输入付款方式(不超过免费额度是不会扣钱的),我是直接用 PayPal 绑定一遍再解绑,避免意外

进入到 R2 页面后,点击 Create bucket 创建储存桶

在下一页的 Bucket name 里给储存桶命名,其余的选项保持默认即可

创建完成后会跳转到储存桶详情页,点击 Settings

找到 Custom Domains,绑定一个子域名,如 images.example.com ,CF 会自动创建一条 DNS 记录(所以这个子域不能是已经解析过的)

接下来需要创建一条 API Token,回到 R2 主页面,在页面右下角找到 API Tokens,点击右方的管理按钮

在下一页选择 Create User API token 并设置权限为 Read & Write(读+写),Specify bucket 就选择刚刚创建的储存桶

创建后 CF 会显示 Access Key,Secret Key,以及 Endpoint,把这三项信息记下来,稍后配置插件时要用到

到这里,在 CF 中的配置已经完成


安装配置插件

转到 WP 后台,在安装插件里搜索Advanced Media Offloader,安装并启用插件

在后台左侧找到 Media Offloader,进入到设置页面

依次填入信息后保存:

  • Access Key
  • Secret Key
  • Endpoint
  • Bucket 名称
  • 自定义域名

保存后进入到 WP 的媒体库,随便上传一张图片作测试,上传后右键图片复制图片地址,如配置正确的话图片的网址会类似于:https://images.example.com/2026/03/xxxxx.png,代表插件已经成功配置

本文所有图片都是利用这个方法挂载到 R2 的,可以参考看看


我到现在才发现原来 CF 全称是 Cloudflare,一直以为是 CloudFlare 🙁

写到一半发现可读性有点差,改了一遍还是有些奇怪,抱歉 😥

如何使用 Rclone 下载 Google Drive 分享链接内的文件

一般如果要下载别人用 Google Drive 谷歌网盘分享的文件链接时,只能先压缩成.zip 压缩包再下载,下点小文件还好,一旦要下载动辄几十 GB 的文件时就力不从心了

不过我们可以利用 Rclone 同步工具,登录谷歌账号来进行下载


解决方法

这里以 Windows 环境为例,首先到 Rclone 的官网下载最新版,如果慢的话可以到 Github 下载

解压缩获得 rclone.exe,在文件目录 Shift+右键打开终端,执行 .\rclone.exe config 命令登录,依次输入:

  1. 新配置 > n
  2. 输入配置名称 > remote
  3. 选择 Google Drive > drive
  4. 用户端 ID > (Enter)
  5. 用户端密钥 > (Enter)
  6. 选择权限 > 1
  7. 账号保存文件 > (Enter)
  8. 浏览器登录 > y

这里会弹出浏览器,正常登录账号,登录后回到 Rclone 窗口继续:

  1. 团队盘 > n
  2. 是否保存配置 > y

到这里我们成功建立了一个名为 remote 的配置文件

然后在浏览器用同一个账号打开一遍共享链接,文件夹会被自动保存到“与我共享”里

回到 Rclone,用以下命令下载:

.\rclone.exe copy "remote:刚刚保存的文件夹/文件名称" "要下载到的本机目录" -P --drive-shared-with-me

最后能看到文件正在下载

 

WordPress 优化 – 后台禁用 Ctrl+K 快捷键控制面板

WordPress 在 6.9 版本更新后在仪表盘后台加入了一项新的功能——控制面板(Command Palette)

但是这东西我是越看越难受啊,所以我想把它禁用掉


解决方法

要禁用掉控制面板很简单,只需要在主题的 functions.php 内加入以下代码:

// 禁用 CTRL + K
function disable_command_palette() {

	wp_deregister_script( 'wp-commands' );
	wp_dequeue_script( 'wp-commands' ); 

}
add_action('admin_enqueue_scripts', 'disable_command_palette');

保存后刷新页面,再按 Ctrl+K 已经没有控制面板了


6.9 的更新可以看这篇博客:WordPress 6.9 发布,开启 AI 时代的内容创作新体验!,不知道啥时候开始几乎所有东西都加上了 AI!虽然 WordPress 这次更新只是实验性的加上了 Abilities API 和 MCP 服务器,但是这在我看来是“踏出了第一步”,以后会有更多的 AI 功能引入 🙁

不用自己瞎折腾了,WordPress 7.0 要加 AI 功能,底层直接整合 AI 核心基础架构

通过 Portainer 更新 Docker 容器镜像/重新拉取镜像

背景

我想把 Portainer 管理的 Immich 图库容器更新到新版本(v2.5.6),所以需要重新拉取容器镜像

这篇教程同样适用于其他容器的更新

解决方法

首先登录 Portainer 后台,打开左侧菜单里的 Containers,在容器列表内找到要更新的容器

这里我要更新 immich_server 这个容器,所以点击容器名称进入到详情页面

在详情页点击 Stop 按钮停止容器后点击 Recreate 按钮

下一步在弹出的提示窗中把 Re-pull image 选项启用,再次点击 Recreate 按钮

注意:容器内如有非持久化数据,更新后会丢失

最后,等待更新完成

Remotely – 群晖 NAS 自建免费远程控制软件

我一直在用 ToDesk 远程控制工具,麻烦的是 ToDesk 超出每月连接限制就要付费了,我可不想给钱,所以我找到了开源远程控制软件 Remotely 来做替代品(软件比较冷门,废了点时间才找到)

操作逻辑是以网页作为主控端以及软件作为被控端,支持 Windows,Linux,以及 Mac 御三家


Docker 部署

这里以我安装了 Portainer 的群晖 NAS 环境为例,其余 NAS 的操作也大差不差(类似 Docker/容器管理这些),还没有安装 Portainer 的可以参考这篇英语博客,很详细:How to Install Portainer on Your Synology NAS,已经安装的请跳过

首先,在群晖的 File Station 内创建一个 remotely 目录,然后右键内容找到目录位置,我的是 /volume1/remotely

登录 Portainer 管理页面,找到 Stacks,点击 Add stack 后把docker-compose 文件内的内容粘贴,修改挂载的目录:

volumes:
      - /volume1/remotely:/app/AppData #修改为刚刚创建的目录

然后到页面最低点击 Deploy the stack 部署,等待部署完成


设置

部署完成后我建议使用 CloudFlare Tunnel 把 5000 端口映射到公网,具体可以参考我之前写的教程,也能直接访问 IP:5000 打开主页

在主页注册一个账号,第一个注册的用户默认为管理员

注册后到 Server Config 内把 Max Organization Count 这个选择设置为 1,关闭注册功能


添加设备

有两种方式来添加设备

安装版

控制自己的多台设备时推荐用此方式

在左侧目录找到 Deploy,里面有给 Windows 和 Linux 的一键安装脚本,以 Windows 为例,复制命令到 PowerShell 内部署,待进度条跑完后安装完成

完成后回到主页能看到设备已上线,点击 Action 按钮能选择远程控制,传输文件等操作

便携版

当需要控制其他人的设备时可以用便携版,在页面左侧的 Downloads 页面内下载

下载后直接运行可以获得一个远程代码,在菜单里的 Remote Control 中连接

远程控制软件界面,显示会话ID输入框和观众列表,包含名称和控制权限信息。


类似还有开源的 RustDesk,同样也是免费的开源远程控制软件,不过我是比较喜欢这个软件啦

解决 W3 Total Cache 插件启用页面压缩后 CSS/JS 文件返回 404 错误

问题

当 W3 Total Cache 插件内的页面压缩启用后,且正在使用 NGINX 引擎时,/wp-content/cache/minify/ 路径的 CSS/JS 文件返回 404,页面样式丢失

原因:插件在网站跟目录生成的 nginx.conf 伪静态配置文件没有正确加载,导致 URL 重写没有起作用,返回 404 错误


解决方法

方法一

在 W3 Total Cache>常规设置>压缩 内把Rewrite URL structure选项关闭

方法二

在 NGINX 配置文件(或某塔面版内站点设置>配置文件)完结前加入这一行,把/www/wwwroot/example.com替换成网站根目录:

include /www/wwwroot/example.com/nginx.conf;

然后重启 NGINX,以及清除 CDN 的缓存,页面恢复正常


参考:https://wordpress.stackexchange.com/questions/209059/ubuntu-nginx-everything-works-except-rewrite-url-structure

群晖 NAS – 通过 CloudFlare Tunnel 免费内网穿透 在外网远程访问 NAS

继上文我组了一台新 NAS 后,由于家中网络没有公网 IP,而我又用不了 QuickConnect,无法在外网访问家里 NAS 内的文件,不过我发现可以用大善人 CloudFlare 提供的 Tunnel 隧道服务实现“内网穿透”

不过由于网络原因,速度会有些慢 🙁


域名注册

(已有域名请跳过这一步)

要用 CloudFlare Tunnel,首先需要一个域名,这里以 DigitalPlat 提供的免费域名为例(需要验证 GitHub 账号领取)

这个平台可以免费注册:

  • .dpdns.org
  • .us.kg (需要密钥,15 元)
  • .qzz.io
  • .xx.kg (需要密钥,15 元)

所以如果不想给钱就只剩下两个能选了(至于剩下两个以后会不会收费我也不确定)

首先到注册页面输入信息,注意要填一个真实的地址,不能乱填(域名注册后可以开启 WHOIS 隐私保护功能)

注册验证后,提示需要 KYC,不过这里所谓 KYC 只需用 GitHub 登录授权即可

验证后到域名注册界面,填一个喜欢的前缀,选一个后缀后点击 Check Availability,即可注册

注册后会跳转的 NS 服务器界面,这时我们可以到 CloudFlare 添加域名

登录CloudFlare仪表盘(CF 的界面变了好多),点击 Onboard a domain,输入刚刚注册的域名,选择下方的 Manually enter DNS records,点击 Continue 继续,在下一页我们可以看到两个 NS 服务器地址,复制到 DigitalPlat 的 NS 页面

然后在 DigitalPlat 的域名管理页面找到 WHOIS Privacy 选项,开启域名隐私设置(可选)

要注意免费领的域名有效期一年,到期前 180 天内可以手动续期,想省事也可以直接买一刀一年的数字 xyz 域名


设置隧道

回到 CloudFlare 仪表盘,在左侧菜单找到 Zero Trust,再找到 Networks>Connectors,点击 Create a tunnel 创建隧道,选择 Cloudflared,然后为隧道设置一个名称

到下一页选择系统页面,会看到各系统的运行命令,如:

cloudflared.exe service install wqeDh... #<这一段是 Token

把最后一串很长的 Token 复制下来

然后登录群晖控制台,打开套件中心,在右上角设置内,套件来源里添加第三方 SynoCommunity 套件源: https://packages.synocommunity.com/

(我是 RR 引导安装的,已经自带了这个源,里面有很多有意思的套件可以看看)

回到套件中心的社群页面,搜索 cloudflare,找到 Cloudflare tunnel 套件,安装套件,安装时会提示套件并非官方制作可能有危险,点击同意即可

安装途中会要求输入 Token,输入刚刚复制的 Token 后点击下一步,安装

回到 CloudFlare 页面,应该能看到有一个 Connectors 上线了,点击下一步设置隧道

以 DSM 为例,HTTP 默认端口 5000 则在 Service 一栏填 localhost:5000,如图:

 

(同理,如果你想在 NAS 部署网站但又不想暴露你的 IP,也能用相同的方法)

设置后我们可以访问域名测试,如无意外可以看到 DSM 的登录界面


不知不觉 2025 就已经过了 99%,倒数最后两天啦,在这里提前祝各位新年快乐,明年再见