基于家庭自动化的跨生态音乐播放系统

前段日子为了响应消费降级,就把自认为一直不怎么使用的 Apple Music 给退了。但不知怎么的,自从不能再用 Siri 直接让 HomePod Mini 放歌之后,想要在做咖啡或是洗澡的时候舒适地听歌这个念想突然就日渐强烈起来。 我本身并不是 HomePod 的忠实用户,家里也还有小米之类的其他 Wi-Fi 音箱,回去续订 Apple Music 本身并不能解决全部问题。因此眼下的需求便是以相对便捷的方式在 HomePod、小米音箱这些跨生态的设备上实现统一播放来自 Spotify 或是 Plex 等服务上的音乐。 Music Assistant Music Assistant 是一个能同时管理离线音乐和聚合在线音乐服务的音乐库管理工具,它可以轻松将音乐流式传输到各种支持的播放器,并与 Home Assistant 高度契合。不久前刚加入了对 Apple Music 的支持,目前已可以用其聚合非常多的音乐服务。 播放器支持方面则对 Airplay、DLNA、Sonos、Google Cast 等常见方案一应俱全。直接使用已经接入 Home Assistant 的播放器自然不在话下,用户还可以透过官方提供的桌面应用 Music Assistant Companion 将 PC 或者 Mac 的扬声器以 Squeezebox (Slimproto) 播放器的形式加入进去以实现更为同步的全屋音乐。 不同传输协议在 Music Assistant 中存在一定差别,对此官方也在文档中提供了很直观的对比图。 我目前所需要接入的 HomePod Mini 和 XiaoMi Sound 均有且仅支持 Airplay 的传输方式(为什么小米不提供 DLNA?),这里就直接省去思考直奔 Airplay 了。 ...

December 12, 2024 · Chock · Notes

Unraid 无法引导 qcow2 的解决办法

今天在给 Unraid 调整缓存池后,发现片刻前仍正常运行的 Home Assistant 在更改了虚拟磁盘的路径后无法正常启动了。 各种尝试无果后,爬帖子发现还需要在 xml 视图下稍作修改: <devices> <emulator>/usr/local/sbin/qemu</emulator> <disk type='file' device='disk'> - <driver name='qemu' type='raw' cache='writeback'/> + <driver name='qemu' type='qcow2' cache='writeback'/> <source file='/mnt/cache/domains/Home Assistant/haos_ova-10.5.qcow2' index='1'/> 修改后总算是顺利启动了. 应该是刚刚在 webui 中修改了 qcow2 的路径导致 UNRAID 错误得将 type='raw' 写到了 xml 里. 但我全然不记得以前也过这样的操作, 如果没有的话, 以前又是如何引导的呢? 带着这样的疑惑, 我重新开了一台新虚拟机, 选择 qcow2 后没有编辑 xml 直接创建后启动, 这次也成功了. 查看此机的 xml 发现 type='qcow2' 好端端得摆在那. 看起来是 UNRAID 只有在添加磁盘的时候才能对 qcow2 作出正确的配置了.

December 4, 2024 · Chock · Notes

通过 Home Assistant 切换罗技 Unifying 优联频道

自入手 MX Master 2S 起就对罗技的 Unifying 优联系列颇为钟爱,后来也把键盘换成了魔改 K375s 的 DIY 键盘。优联的 Flow 在双机双屏的情况下频道切换十分自如,但相较而言在双机共用一屏的时候因为手动切换频道的按键在鼠标底部就显得十分不便了。 此时购买带 KVM 的 HDMI 切换器使两台电脑共用一个接收器算是比较简单粗暴的办法,但因为听到不少关于此类切换器可能会在使用中遇到各种Bug迟迟没有下手。 于是我便想,有没有一种方法可以用命令来切换键鼠的频道,从而进一步设定调用规则来实现双机一屏的自动切换呢?想着想着我便找到了这个项目 marcelhoffs/input-switcher。经过 2 天的测试算是得到了一个相对满意的结果,特此记录一下。 准备工作 此脚本的原理大概是利用 hidapitester 直接向特定硬件 ID 的 USB 设备发送一串 16 进制的报文来实现频道切换。具体报文可以通过分析 Linux 下的罗技驱动程序 Solaar 进行推测,原 Repo 只提供了 MX Anywhere 和 MX Keys 的报文,在实际使用中发现并不能兼容我的 MX Master 2S 与 K375s,因此需要自行使用 Solaar 提取。 随便起一个 Ubuntu 虚拟机,桌面环境可以直接从自带的应用中心搜索安装 Solaar。 随后打开 Solaar,插上接收器,设备列表中已配对的设备会亮起,此时打开终端,先查询下MX Master 2S solaar -dd config "MX Master 2S" change-host 1 #任意其他频道,此处使用频道1 顺利的话会返回以下信息 logitech_receiver.base: (17) <= w[11 01 091A 01000000000000000000000000000000] 根据 marcelhoffs/input-switcher 的说明,可以确认 MX Master 2S 切换至频道 1 时所发送的报文对应到 hidapitester 的格式为 11,01,09,1A,01,00,00。其中 09 对应具体的设备型号,1A 是一个随机数,这里只需要记住这两个数值即可。 ...

March 15, 2023 · Chock · Notes

让 macOS 更好地合并同名文件夹

以往我在 Windows 下整理 NAS 上的文件时,遇到需要合并的同名文件夹时,只需要简单地把其中一个拖入到另一个文件夹所在的目录中。如若没有遇到同名文件冲突的情况,那么整个过程会在一瞬间完成,它时十分符合操作直觉的。 但在 macOS 下想要像这样合并两个文件夹却是意外地困难。 在 macOS 下,Finder 默认只为同名文件夹冲突提供了“停止”与“替换”两个选择,无须怀疑,这里的“替换”并没有字面之外意思。而在一番搜索后,不难会发现苹果设置了一个可以用 opt 键触发的隐藏的“合并”按钮。 但这个“合并”始终是以拷贝的形式进行的,这意味着每一次合并文件夹的时候 Finder 都会制造一次毫无意义的磁盘写入。而这份无意义的写入所造成的影响对于 NAS 用户来说,则会被传输协议、磁盘性能、网络带宽等因素进一步放大,最后从无意义进化成了一种折磨。 对此,如果不愿意选择那些更迎合 Windows 使用习惯的第三方文件管理器的话,使用跟 Finder 高度耦合的 Automator 来跑一个合并行为更接近 Windows 的脚本可以算是一个折中办法。 Automator 能够很方便得透过 Finder 获取所选文件的路径,同时它也能调用 Finder 的弹窗选择器来手动选择一个路径来作为变量使用。像是这样: 在运行工作流的时候,所有被选择的项目的路径都会依序作为列表值被输入,而在通过请求访达项目选择输出路径后,就得到了一个类似 ['-c', 'path1', 'path2', 'path3',...'pathN'] 的列表。起始项始终是固定的值 '-c',所以此处只需要截取第二项至倒数第二项作为 src,以及结尾项作为 dst 即可。 有了 src 和 dst ,事情就变得非常简单了,这里就用 Python 的 shutil 模块起一个脚本。 import sys,os,shutil src = sys.argv[1:-1] dst = sys.argv[-1] for item in src: for root,dirs,files in os.walk(item): for file in files: old = os.path.join(root,file) start = os.path.dirname(item.rstrip('/')) new = os.path.join(dst,os.path.relpath(old,start)) if not os.path.exists(os.path.dirname(new)): os.makedirs(os.path.dirname(new)) shutil.move(old,new) shutil.rmtree(item) 现在将脚本拖入工作流,传递输入选择“作为自变量”,再把脚本的输出作为文本导出一份,最后这个样子就大抵堪用了。 ...

September 9, 2022 · Chock · Notes

Plex 最后的波纹 —— Plexamp

今年四月,向来傲慢且怠惰的 Plex 一口气发布了 2 款手机 App,分别是用于监管后台信息的 Plex Dash 及音乐播放器 Plexamp。前者看起来是打算要取代 Tautulli,后者则其实在桌面系统上由来已久。 先不论仅仅支持移动端的 Plex Dash 是否真的能代替桌面移动两开花的 Tautulli,另外那个终于从桌面端滑向移动端的 Plexamp 则宛如重获新生。 如果你也使用或打算使用 Plex 管理音乐且正好购买了 Plex Pass 的话,那么 Plexamp 也许是一款能让你为之惊叹的音乐播放器。 关于 Plexamp Plexamp 是 Plex 在 2017 年推出的跨平台音乐客户端,最初仅支持 Windows 与 macOS。尽管它的名字一看就是在致敬 Winamp,但它并非是在 Winamp精神续作 这样的包袱下诞生的。它首先不是一款通用播放软件,PlexMediaServer 仍然是它正常运作的绝对前提,它的外观也与 Winamp 截然不同。 作为 Plex 的减法产物,剥去了一切与音乐不相关的元素后,在自己本地的收藏中聆听音乐这件事也确实变得纯粹起来。在全局热键系统的帮助下,你甚至可以像使用 Spotlight 那样激活 Plexamp 的搜索快速找到想听的音轨。 可惜的是每当我按下激活搜索框的热键,接下来听什么 这个问题却往往无法在这之后立刻得到答案。每每到此,我便陷入短暂的呆滞,旋即便沮丧着脸试图快速想起一个之前建立的歌单名,或者就干脆回到网页端去慢慢浏览。 而我每多使用一次 Plexamp,这种沮丧就每增加一分。 浏览是 Plexamp 的最大短板,最初的 Plexamp 并没有一个完整的媒体库界面,除了仅有几个 Recently 节点外绝大部分音乐需要靠搜索来访问。此外,在高分屏下摆弄一个大约只占显示器 1/32的软件无论如何都难以让我对它尚且无法实现的浏览体验有所期待。 鉴于本来在 app.plex.tv 上听歌也并没有什么不方便的,我很快就卸载并淡忘了它。 直到我在手机上与它再次见到了它…… ...

December 7, 2020 · Chock · Notes

正式弃用 Wordpress

才不会说是因为没有备份Wordpress才被迫更换平台的呢。 ...

October 1, 2020 · Chock · Notes

在 EdgeOS 上安装 ZeroTier

EdgeOS更新2.0固件后底层系统从Debian7直升到了Debian9,现在已经可以直接通过ZeroTier官方提供的Linux安装脚本进行安装了。 安装ZeroTier EdgeOS默认的apt源在国内的连接已经非常困难,非常容易因连接超时导致安装失败,建议自行替换国内镜像源。 sudo -i curl -s https://install.zerotier.com | sudo bash 安装成功后你将得到一个ZeroTier的Client ID。 接着用ZeroTier官网申请的网络ID来加入网络即可。 sudo zerotier-cli join [NETWORK-ID] 保护配置文件 为防止因固件升级导致配置文件丢失,我们可以把ZT的配置文件移动到/config/scripts再软连接回到原路径,这样在每次更新固件后重新执行一遍软连接就可以轻松恢复配置。 mv /var/lib/zerotier-one /config/scripts/ ln -s /config/scripts/zerotier-one 映射网络接口(可选) EdgeOS无法识别ZeroTier的接口(ZT0),因此ZT0不会反映到EdgeOS的WEBUI上面。但即便如此,ZeroTier依然能够正常工作。 如果你闲得蛋疼,路由器上又正好有空闲的网口没地方用,那么可以来试一下把zt0映射到eth(0~4)上面。 在/var/lib/zerotier-one下创建一个devicemap文件,内容如下(将X替换成你闲置的那个口,下略) <zerotiernetworkid>=ethX 重启ZeroTier /etc/init.d/zerotier-one restart 这时ifconfig下的ethX应该已经对应zt0的接口信息了。 set interfaces ethernet ethX description "ZeroTier [NETWORK-ID]" commit save

November 24, 2019 · Chock · Notes

过气 HTPC 升级记

HP Microserver Gen8 是我钟爱的一款适合当 NAS 的微型服务器,但当初考虑到客厅三星电视的Tizen OS 四舍五入相当于是无系统,NAS + HTPC 的方案看起来会挺棒,于是就有了这个玩意(现在看来这是一个坏主意)。 到目前为止(2年来),它的软硬件都经历了不少变化,从 SteamOS 到 OMV 再到 Windows, 从G3900 到 G4560 再到 G4600,期间还更换过主板加过内存,唯一没变的也许只有这个卧室机箱,可以说是机走箱还在了。 OS 方面,各种 NAS 系统其实我试过许多,包括上面没有提及的 Nas4Free、Freenas 等等,但从整体来看我的 OS 选择基本上是从 Linux 到 Windows 的过渡,这里面其实没什么特别的理由,仅仅是 Linux 上的应用目前还不能很好地不支持HEVC硬解 。 CPU 方面,G3900 换成 G4560 的原因依然是为了 HEVC 的硬解( G3900 仅支持到 HEVC 8Bit ),而事实上 G4560 也依然未能成为 4K 电影的解决方案,其原因就在于 4K 电影几乎标配 HDR。为了迎合 Intel 的核显 HDR 支持方针,我又把 CPU 换成了搭载 HD630 的 G4600。然而我只算到了显卡的要求,实际上因为 HDMI1.4 和 DP1.2 本身无法输出 HDR 内容,这一切又成了无用功。 ...

May 9, 2019 · Chock · Notes

无法逃离 Plex 的魔爪

在搞定 IPV6 后终于可以如愿以偿地在地铁上听 Plex 上的歌了,但不知是我家上行带宽太小还是 IPv6 本身不稳定的缘故,间歇性的连接失败总是在比较尴尬的时刻来临。 想了想我收藏的歌其实也不是很多,为什么不直接把它们丢在第三方公有云上呢。一番搜索后得知吃灰已久的 Apple Music 已经提供类似网易音乐云盘的功能(iTunes Match)。 Plex 本身不会去修改任何文件信息(比如ID3),所以如果要打算回到 iTunes 上,那么从源头去整理 ID3 才是一劳永逸的 继续一番搜索后找到了这个叫 MusicBrainz 的服务。 使用下来匹配精度要比 Plex 高不少,针对一些疑难杂歌提供的手动匹配功能也非常顺手,唯一的缺点大概就是它只使用自家的数据库以至于确实有一部分刮削不到信息,但对于勤劳的我来说只要能自行编辑数据库那就不是问题。 得益于 MusicBrainz 优秀的操作体验,我花了大概儿时手动整理歌曲 1/100 都不到的时间就处理完了大半的歌曲。 在批量执行 ID3 写入的时间里我打开了那个又卡又臃肿的 iTunes,一边导入音乐库一边掏出了手机准备开个 Apple Music 的订阅。而就在我险些完成支付的时候,我恰好注意到此时此刻的资料库仍然是空无一物。—— 2019 年了 iTunes 还是不支持 FLAC。 那么,iTunes 再见,Plex 我又回来了。

May 4, 2019 · Chock · Notes

通过 IPv6 连接你的 Plex 服务器

目前国内 IPv6 的推进速度已经相当不错,对于有家庭服务器需求的用户来说,获取一个不知道能用多久的公网 IPv4 可能已经远远超过了获得原生 IPv6 的难度。 长期受到无公网IP的我拿到IPv6后想到的第一件事就是试试能不能透过公网连接自家的 PLEX 库。 前期工作 首先是配置路由器给局域各网客户机分配地址,不同路由系统对 IPv6 的自动化配置程度有所差异,我的 Ubnt ER-X 就属于比较麻烦的那种,好在官方论坛已经有比较详尽的配置示范。 仅仅配置完路由器后还无法通过 IPv6 测试,打开 WIN10 的防火墙,添加一条入站规则放行 ICMPv6 后一切显示正常。 配置 DDNS 大部分域名解析服务提供商都有提供相关的 API 用于动态域名解析,如果你没有独立的域名,也可以直接向 DDNS 提供商申请二级动态域名。 配置 PLEX 由于 PLEX 自带的远程访问服务并不支持 IPv6 映射,尽管添加完 DDNS 的 AAAA 记录后你应该已经能在浏览器直接通过域名访问,但你仍然无法通过官网的 Launch APP 来使用 PLEX 的 SSL 证书,同时你的手机 APP 也无法找到你的服务器。 因此这里就需要用到先前配置好动态域名来进行主动上报。 打开 PLEX WEB,依次进入设置/网络,点击显示高级选项,勾选 Enable server support for IPv6,找到 Custom server access URLs 填入需要上报的地址, 类似于http://YOUR.DOMAIN.COM:32400/web,保存修改。 断开手机WIFI,打开PLEX,可以确认到访问成功。

April 26, 2019 · Chock · Notes