• My Attempts to Integrate Home Assistant with ADT UK

    TL;DR. In the UK, you cannot connect the ADT alarm panel with any other devices or services that aren’t ADT-certified.

    Z-Wave Secondary Controller

    This is the first solution that I tried. Now I no longer say it doesn’t work in other regions than the UK, but I also can’t verify that myself. Full disclaimer that my experience is limited to the UK market, I managed to put my SmartThings Hub v3 Z-Wave into the learner mode, and was able to use the ADT mobile app to add it as a secondary controller (IIRC, it asked for a code, and I just gave 2222 which seems to be the generic installer’s code that ADT engineers use). Afterwards, I have 5 Z-Wave “Dimmer Switches” shown in the SmartThings app (I have 4 motion sensors, 1 door/window sensor, which I assume that’s why I have 5 Z-Wave devices shown up), but none of them would transmit any data. Later on, they went into the state of “disconnected” perpetually.

    To make things worse, the ADT panel would then display a warning saying my SmartThings Hub is an unknown device in the “Smart Devices” section. I was also not able to remove it myself using neither the panel nor the mobile app.

    In the end, over a phone call with an ADT technician, they were able to remotely remove my SmartThings Hub from the devices. Now my SmartThings Hub is just in a broken state as a secondary Z-Wave controller. Of course, I could reset my SmartThings Hub but then I’d also need to reconnect my 15 ZigBee devices. Instead of going through that hassle, I managed to use the SmartThings web app to remove these zombie Z-Wave dimmer switches, which is enough to hide them from the SmartThings app.

    Qolsys Gateway

    I then checked out https://github.com/XaF/qolsysgw which seemed to be the only working integration according to some HomeAssistant posts. Unfortunately, I’m not able to see “Installation” in the Advanced Settings in my Qolsys IQ Panel 4.

    Over a phone call with an ADT technician, I’ve been told that menu is reserved for ADT engineers only, and that connecting to other systems such as Google Home, Alexa is not allowed in the UK (but he admitted it is something that customers can do in the US for example). This might explain why some people is able to use Z-Wave secondary controller, yet I’m not able to (though the error is much less obvious).

    I do feel a bit conflicted on their approach to this matter, as this effectively breaks my smart home setup into two disconnected worlds: one with SmartThings and HomeAssistant that’s relatively well connected, and one with just ADT alarm system. Hopefully they’ll update their policies in the UK in the coming years, and we could use more competition in this space and someone should provide a solution that integrates with other smart home systems in the UK.

  • Citrix Receiver UK Keyboard Layout Issue on Linux and Chrome OS

    I have this weird issue where my employer’s remote virtual desktop is configured in English (UK), and it works well in Windows with UK keyboard layout. However, if I try to connect to the same instance from Linux (or Chrome OS), with the same hardware, it would appear as if I’m typing from a US keyboard. To make it more bizarre, if I configure a US keyboard in the remote Windows session and switch to it, it would appear as if I’m typing with the UK keyboard layout.

    Googling this yields a few frustrating customers, but probably the combination of using a UK keyboard in Linux and accessing a Windows VDA is not that common? I’m surprised that hacks need to be applied… The bizarre symptoms made me wonder what if I just tell the Citrix receiver (or workspace) application to simply use whatever the keyboard layout the remote VDA configured? Bingo! That solves the problem (for me at least). Changing the keyboard layout to (Server Default) in the [WFClient] configuration section did the trick for me in Linux. The configuration file should be in ~/.ICAClient/wfclient.ini

    However, I have yet to find where the configuration is stored for Chrome App (in Chrome OS), nor whether it’s even possible to update the default setting there. In the meantime, I found a workaround by editing the ICA file. Open it with a text editor, and add

    KeyboardLayout=(Server Default)

    to the [WFClient] section.

    Reference: https://support.citrix.com/article/CTX328177/keyboardlayoutserver-default-cannot-take-effect-on-citrix-workspace-app-for-linux

  • 部落格迁移到甲骨文云

    感觉这是重复每隔几年就要进行的练习,这一次把Blog从Amazon Lightsail VPS迁移到了甲骨文云(Oracle Cloud)的虚拟机。

    很多人白嫖甲骨文云(确实有非常丰厚的免费额度),我之前架设的Termux的APT镜像也是用的甲骨文的免费资源。但是最近发现免费账户基本allocate不到资源了,所以填了个信用卡升级到了Pay As You Go账户级别,突然就能allocate到VM了。虽然是付费账户,但只要还是在免费额度以内,并不会产生费用所以其实无所谓。

    甲骨文云的定价真的是白菜价(免费啊!),开了个四核24G内存的VM来作为我主要的VPS,其中一个用途就是用来跑这个博客(部落格)网站。促使我从Amazon Lightsail搬过来并不是因为我不想每个月掏那3.5美金(好吧,不只是),而是很快亚马逊要开始对公用的IPv4地址收取额外的费用。已经被亚马逊云收费恶心过一次了(给的CPU非常垃圾,超过的部分要额外收费,超得太过了还会pause导致前一段时间VPS无响应了一天)。一对比,甲骨文云的虚拟主机性能高出太多,还不要钱!

    吐槽完了,分享一下这次迁移的心得。

    1. 首先从原主机上做一个新的备份,把/var/www/整个目录都备份下来,然后MySQL或者MariaDB也做一个备份(这里至少需要备份wordpress这个table
    2. 把备份传到新主机上(用scp安全传输)
    3. 新主机依次安装配置好:
      • nginx
      • php-fpm
      • iptables (保证80和443端口开放)
      • mysql-server or mariadb-server (用和原主机一样的vendor,不然可能恢复备份的时候会有问题)
    4. 恢复wordpress到新主机的数据库里
    5. 恢复/var/www/,可能需要按新的nginx配置稍微改动权限或者nginx的配置文件

    一开始我在新VM安装配置的是MySQL,结果恢复备份的时候就有问题(database engine不一致,好像用了个MySQL没有或者是默认没有的引擎)。彻底删掉重新配置安装MariaDB就没事了。

    后来又遇到恢复的SQL用户没法登录的问题,好在这个简单,我删掉重新创建一个同名的用户(同样的密码)就OK了。

    我遇到的最大的问题,是wordpress本身没法运行,害得我要重新下载安装wordpress,不过可以继续用原来的数据库所以并没有丢失任何帖子或者评论,多媒体附件从之前的备份wp_content目录下拷贝过来修改好权限也没问题。就是插件都要重新安装配置,干脆就趁机轻装上阵少了几个插件,然后换了一套主题。

    另一个小问题是,因为IP地址变化,要在DNS那边改动,估计会导致有一段时间暂时无法访问。要申请新的SSL证书,LetsEncrypt也会要检查DNS记录,所以要稍微耐心一点。

    目前个人感觉网站访问速度比之前在亚马逊垃圾VPS要快一些。操作系统也从CentOS 7换成了Ubuntu 22.04,所以很多组件也随着升级了(PHP升级到8.1了!),也算是个bonus

  • Home Assistant Core Setup on Banana Pi M5

    There is no support for BananaPi M5 from Home Assistant OS, which leaves me either the container or the core version. Originally I was going to use the container image, however, it needs too much disk space (7GB was not enough as it maxed out my onboard storage). I went for Home Assistant Core instead, and this post records my journey setting it up.

    1. Install uv (a Python environment manager)
    2. Install latest Python (3.13 at the time of writing), because Home Assistant Core has deprecated the support for older versions of Python
    3. Install Home Assistant Core (official documentation as a reference). I’m using uv to manage the virtual environment (note that I’ll enable ISAL for better performance).
    cd /srv/homeassistant/
    uv venv pyenv --python 3.13
    source pyenv/bin/activate
    uv pip install homeassistant==2024.12.3
    uv pip install isal  # ISAL for faster gzip and zlib
    1. Install and configure Cloudflare Zero Trust Tunnel (official documentation for remote tunnel). To expose my Home Assistant access to the public Internet, so that I can access it everywhere. Besides, some cloud-based services require that access because they use callbacks (the alternative is to pay for Nabu Casa which is a subscription-based service). Configure the access control in Cloudflare Zero Trust so that only verified emails from a restricted list have access (additional policies can be set for a new application that bypasses any control for cloud services callbacks)
      • Worth noting that the cloudflared add-on cannot be used because Home Assistant Core doesn’t support add-ons.
    2. Setup a new service in systemd for Home Assistant’s hass so that it starts on boot and restarts on failures. I created this file /etc/systemd/system/ha@homeassistant.service (systemctl enable and systemctl start afterwards):
    [Unit]
    Description=Home Assistant
    After=network-online.target
    After=network.target
    
    [Service]
    Type=simple
    User=homeassistant
    ExecStart=/srv/homeassistant/pyenv/bin/hass
    Restart=on-failure
    RestartSec=5s
    
    [Install]
    WantedBy=multi-user.target
    
  • Chrome OS Flex on Samsung Galaxy Book Pro 360 Dual Boot

    Happy Chinese New Year (Year of Dragon/Loong) to you all!

    A New Year’s surprise from Google. The latest version of Chrome OS Flex finally supports Samsung Galaxy Book Pro 360 to an extent that can be used as a daily driver.

    (more…)
  • Flatpak Wine 微信安装手记

    这两天花了一点点时间来优化我的KDE Plasma 5桌面,顺便想起来Wine这个软件而且发现居然已经上架Flathub了!微信很长一段时间都能用Wine在Linux上跑起来,结合网上的一些优化教程,这里总结写一个2024版本的手记。

    任何非Ubuntu发行版估计都已经自带支持flatpak而且配置好了flathub源了,flatpak简单来说就是Linux桌面软件的一种分发形式,相较于AppImage的最大区别就是有沙盒(sandbox)一定程度上保护宿主系统。

    如果你只是对微信感兴趣,是否通过flatpak安装wine并不重要,我只是喜欢sandboxed wine, wine这个软件每次安装都是东一块西一块弄得文件系统很乱。废话不多说,首先安装好Wine

    flatpak install flathub org.winehq.Wine
    

    如果不通过flatpak那就用你发行版的apt、dnf、pacman、zypper之类的安装好wine, 我安装的是flathub上23.08这个版本。flatpak发行的wine有一个麻烦的点就是,之后运行wine都要通过flatpak run org.winehq.Wine这个命令。而且文件系统结果和常规安装的wine会很不一样!所有和wine相关的东西基本都在$HOME/.var/app/org.winehq.Wine这个目录下。

    Wine的中文字体显示问题,我直接从Windows那边把微软雅黑的三个字体文件拷贝过来然后点击打开KDE自带的字体管理程序安装到Linux系统了。然后运行winecfg

    flatpak run org.winehq.Wine winecfg
    

    在Desktop Integration那里把所有的字体都替换成了微软雅黑。

    好了, 现在可以下载微信Windows版的安装包一路Next安装好。启动运行先检查是不是字体显示正常没有方块。

    最近的微信版本有一个WeChatAppEx.exe这个程序,在Linux下通过wine运行会占用大量CPU甚至导致桌面卡死……按照网上的建议,在winecfg里Libraries选项卡手动打入wechatappex.exe 然后Edit选择Disabled禁用掉。

    然后一直以来一个很烦人的点就是微信Windows版实现的窗口阴影在Linux下会导致一个置顶的模糊窗口,不仅看起来很烦而且会导致GUI交互问题。这里有一个KDE桌面环境专属福利,安装并启用这个KWin Script就可以了!

    Flatpak安装的Wine不能创建桌面启动项,这里我们可以自己捏一个wechat.desktop文件放在~/.local/share/applications下,供参考这是我的文件内容:

    [Desktop Entry]
    Exec=flatpak run org.winehq.Wine 'C:/Program Files (x86)/Tencent/WeChat/WeChat.exe'
    GenericName=WeChat PC Client
    Icon=wechat
    Name=WeChat
    NoDisplay=false
    Path=/home/simeon/.var/app/org.winehq.Wine/data/wine/drive_c/Program Files (x86)/Tencent/
    StartupNotify=true
    StartupWMClass=wechat.exe
    Terminal=false
    Type=Application
    X-KDE-SubstituteUID=false
    

    最后祝大家2024新年快乐!

    2024-02-26更新: 找到个更好用的flatpak:WineZGUI, 各位不妨试试

  • FydeOS上手体验

    距离上次写与Chrome OS/Chromium OS相关的帖子又有一段时间了。之前提到了怎么用Brunch项目来运行原味的Chrome OS,奈何Brunch的内核和我的新笔电(Samsung Galaxy Book Pro 360)一直不是很兼容,主要两个痛点:

    1. 声卡和麦克风识别时有时无
    2. 笔电折叠后不会自动切换到平板模式

    网上有人提到了FydeOS,于是这个周末抽了点时间来试试。剧透一下,感觉真不错!

    (more…)
  • Banana Pi M5 Pro Quick Review

    My old ODROID-U3 has been giving me quite some headaches. Its old USB 2.0 ports and 100Mbps Ethernet port are also very limiting in 2023. Its power supply is not the best (not an uncommon issue with HardKernel’s products, certainly not uncommon among the older generation of single board computers). A hardware upgrade is therefore necessary.

    I don’t really use it for anything else other than a humble home server to stream videos, music, and sometimes photos. Generally used as a private file share system at home. I already bought an 1 TB USB 3.0 HDD, so I definitely need a device that supports USB 3.0 at least. To not have a limiting network I/O, it should also have 1Gbps Ethernet port.

    Why not buying a popular Raspberry Pi 4? Well, I tried, but it’s out of stock everywhere. That’s why I turned to its alternatives, initially I was going to buy another HardKernel’s ODROID product, but its pricing in Europe is just way too high than the price on its website. Unfortunately, (not sure if this has anything to do with Brexit), there is a minimum order requirement to ship to the UK. I’m building a cluster or something, so looking again…

    Ta-da! I found Banana Pi, the name is a bit.. knock-off, and the manufacturer is in China, I’ll let you connect the dots. Banana Pi M5 is not the newest model, but it’s comparable to Raspberry Pi 4 and ticks all of my boxes. Long story short, I bought it from Ali-Express where it’s much cheaper than Amazon or other local retailers here. They were also running some sales on bundles, so I ended up buying it with a metal case, yet paying less.

    On paper, it provides even better performance than Raspberry Pi 4! More importantly, it’s readily available! One thing I did pay extra attention to is the availability of upstream Linux images, having suffered quite a bit there with HardKernel’s products. Thankfully, Banana Pi has Armbian support (rated platinum for Banana Pi M5, whatever platinum means). To save even few more pennies, it comes with an onboard 16GB eMMC storage!

    It’s been faithfully serving its purpose on the shelf next to the router for a couple of weeks now. Reliable little machine that’s fast and responsive! If you’re thinking of buying a single-board computer like Raspberry Pi, but couldn’t find available stocks, Banana Pi might fit in.

  • Chrome OS, Linux Containers and Application Launchers

    So I installed the great brunch framework on my laptop after a hiatus of a couple of months. I still dislike the fact that the Linux containers are running under a VM on Chrome OS. Sure it is more secure as the containers won’t be able to access the host hardware directly etc. It is also slightly inefficient. So I tried both chromebrew and brioche. Note that brioche only supports brunch (thus half of this post won’t apply to official Chrome OS builds).

    (more…)
  • Number Rounding Business

    Rounding numbers is probably one of the topics in primary school. In school, we’ve learned that half rounds up, anything less than half rounds down. For example, 0.5 rounds to 1, but 0.4 rounds to 1. Duh, I’m stating the obvious you think. It only came to my attention that this is NOT really the default behaviour in a very popular programming language: Python.

    Here, is a simple example to try in your own Python console.

    (more…)