petermolnar.net

FreeBSD "kiosk" for home automation dashboard

My current, FreeBSD based server for self-hosting and home automation - now with a touchscreen!

Background

For quite a few years now I have been looking for a small touchscreen, because I wanted a local (no network involved) interface for my home automation server. I tried the following which didn't work:

I nearly gave up: the machine I choose, the Lenovo M600 tiny (I have an unneeded on I'm currently selling, if anyone wants a fanless mini pc1) only has 2 DisplayPort connectors, and DP -> HDMI adapters are not great. Then suddenly, I found the HP L7010t 10.1-inch Retail Touch Monitor2: Displayport + touch, no special drivers, and even FreeBSD's kernel can use the touch features out of the box.

Update: well, nothing is perfect. The HP's mounting space is about 2mm smaller, than the standard stands, so I ended up making a DIY stand by drilling a 10cm by 10cm square in the four corners into a steel bookend and bending it backwards.

Minimal X to run a single browser session on FreeBSD

On FreeBSD 14.1, the base system needed the following:

pkg install xorg xorg-server drm-kmod xf86-video-intel gsed surf-browser openbox

xf86-video-intel is not in the official documentation, but it's needed3.

Update: on FreeBSD 14.2, as long as 14.1 is supported, drm-kmod is broken4 because it's still built for 14.1 Instead use drm-515-kmod:

pkg install xorg xorg-server drm-515-kmod xf86-video-intel gsed surf-browser openbox

Tried twm, tinywm: they had issues with window size. Tried dwm but the menubar is annoying. Settled with openbox.

Tried midori, but wasn't working smooth, firefox-esr, but it consumed too much CPU and touch scrolling wasn't working fine, chromium which worked perfectly but had too much Google in it for this scenario, surf-browser which didn't work at all. settled with epiphany. Update: I realized I wasn't starting surf-browser5 they way I should have, and it's much lighter, then epiphany, so surf it is. Note: it's not NetSurf6 - I'd love to use NetSurf, but it lacks the JavaScript support needed for Domoticz and Zigbee2MQTT.

These are needed to enable graphics and auto-power off the screen:

sysrc kld_list+=i915kms
sysrc blanktime=300

Create a user that will be logged in automaticaly:

pw adduser -n kioskuser -d /home/kioskuser -s /bin/sh

Set up auto login for this user:

cp /etc/gettytab /etc/gettytab.backup
gsed -ri 's/root/kioskuser/g' /etc/gettytab

In /etc/ttys change

ttyv0 "/usr/libexec/getty Pc"   xterm onifexists secure

to

ttyv0 "/usr/libexec/getty autologin"   xterm onifexists secure

Then create:

/home/kioskuser/.profile

ENV=$HOME/.shrc; export ENV

if [ "$PWD" != "$HOME" ] && [ "$PWD" -ef "$HOME" ] ; then cd ; fi

XPID=`pgrep xinit`
if [ -z "$XPID" ] && [ `tty` == "/dev/ttyv0" ]; then
  startx
fi

And:

/home/kioskuser/.xinitrc

#!/bin/sh

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/usr/local/etc/X11/xinit/.Xresources
sysmodmap=/usr/local/etc/X11/xinit/.Xmodmap

# merge in defaults and keymaps
if [ -f $sysresources ]; then
  xrdb -merge $sysresources
fi

if [ -f $sysmodmap ]; then
  xmodmap $sysmodmap
fi

if [ -f "$userresources" ]; then
  xrdb -merge "$userresources"
fi

if [ -f "$usermodmap" ]; then
  xmodmap "$usermodmap"
fi

xset +dpms
xset s on
xset s blank
openbox &
exec /usr/local/bin/epiphany

Which should auto-start X with epiphany.

Note: this is not hardened, if the browser is closed, the user will be in the shell, X and epiphany will not auto-restart.

Extra: home automation jail on lo0 with PF firewall routing

I moved my services onto a single machine which now runs 3 jail: one for web and exposed to the world services, one for home automation, and one for minidlna. The first two listen on an extra 127.0.0.x on lo0, while the last has it's own IP. This also makes it quite simple to create a backup of them: I found zrepl7 and I can sync the jails onto a virtual machine on my laptop. Backup problem solved without needing to run yet another computer at home.

I ended up with this setup because my router - a FRITZ!Box 7530 AX - is surprisingly dumb, and can't comprehend the idea of multiple IPs on the same node, so to overcome any possible routing issue I decided to use a single IP initially and route everything with pf locally.

I mostly works, except for DLNA. I can't make the DLNA broascast packets work with this setup, so that jail is the exception, but I won't get into details with that now.

Zigbee2MQTT needs access to raw sockets, so that has to be reflected in the jail setup:

/etc/jail.conf

domoticz {
  exec.start = "/bin/sh /etc/rc";
  exec.poststart = "/bin/sh /usr/local/jails/domoticz/usr/local/etc/jail_dev_symlinks.sh";
  exec.poststart += "/usr/sbin/service pf reload";
  exec.stop = "/bin/sh /etc/rc.shutdown";
  exec.consolelog = "/var/log/jail_console_${name}.log";

  # PERMISSIONS
  allow.raw_sockets;
  allow.read_msgbuf;
  exec.clean;
  mount.devfs;
  devfs_ruleset = 3;
  allow.reserved_ports;

  # HOSTNAME/PATH
  host.hostname = "${name}";
  path = "/usr/local/jails/${name}";

  # NETWORK
  ip4.addr = 127.0.0.2;
  interface = lo0;
}

And to avoid issues with tty namings, I run a script to create the symlinks. I tried doing this properly with devd, but it's virtually impossible inside the jails to do it right.

/usr/local/jails/domoticz/usr/local/etc/jail_dev_symlinks.sh

#!/bin/sh

rootdir="/usr/local/jails/domoticz"
vendor="0x10c4"
product="0xea60"
ttyname=`sysctl dev.uslcom | grep "vendor=$vendor product=$product" | sed -r 's/.*ttyname=([^\s]+) .*/\1/'`
chgrp dialer $rootdir/dev/tty$ttyname
chown zigbee2mqtt $rootdir/dev/tty$ttyname 
chmod g+rw $rootdir/dev/tty$ttyname 
/bin/ln -s /dev/tty$ttyname $rootdir/dev/ttyUzigbee

As I mentioned, the two main jails listen on lo0 so they don't have issues of not having 127.0.0.1 resolved and so only what PF allows will be exposed this way.

/usr/local/etc/pf.conf

# vim: set ft=pf
# /usr/local/etc/pf.conf
 
lan="re0"
lo="lo0"
localnet = $lan:network
jail_domoticz="127.0.0.2"
local_ip="192.168.1.2"

# 8800: node-red
# 8880: zigbee2mqtt
# 8088: domoticz
# 1883: mqtt
rdr on $lan inet proto {tcp, udp} from any to $lan port {8800, 8880, 8088, 1883} -> $jail_domoticz
nat on $lan from { $jail_domoticz } to any -> $local_ip

block in all
block return

pass inet proto icmp icmp-type echoreq
pass quick proto pfsync
pass proto carp

# for jail
pass proto tcp from any to $jail_domoticz port { 8800, 8880, 8088, 1883 } keep state

# ssh - you probably want this
pass proto tcp from any to $lan port { 22 } keep state

pass from {$lan, $lo} to any keep state

pass out all keep state

Thoughts on Home Assistant

I gave Home Assistant yet another go. Every once in a while I try it out to see if it got simpler, but no: it's not even slowly becoming a bloated monster. It started as heaviweight, but it's just ridiculous now.

First and foremost their idea of supporting the last 2 versions of Python is already not true: I wasn't able to install the current version on 3.11, which FreeBSD 14.1 comes with. Not supporting stable Debian Python8 is a shitty decision.

In the end I wasn't able to install it at all. It's one thing that pip install needs to compile half the universe because it's not actually Python but C or Rust and it's not distributed for FreeBSD, but once it all looked good and I started hass is started to install even more Python modules.

This thing is badly designed, going entirely against ideas of simplicity and robustness, and I'm genuinely losing my belief in anything Python these days. So many projects out there will tell you "just use docker" thinking you want one more layer of complexity, or that it's available for you at all.

Dated or not, Domoticz is staying true to it's simle philosophy of it just works, and I'm going to stay loyal to it in the foreseable future.

Other notes

Don't try to run anything DLNA, like minidlna behind a firewall. It doesn't work.


  1. https://www.ebay.co.uk/itm/186603942366↩︎

  2. https://www.ebay.co.uk/itm/155788268323↩︎

  3. https://forums.freebsd.org/threads/unable-to-start-anything-x.95048/#post-672721↩︎

  4. https://forums.freebsd.org/threads/display-turns-black-when-the-i915kms-loads-freebsd-14-2.95973/↩︎

  5. https://surf.suckless.org/↩︎

  6. https://www.netsurf-browser.org/↩︎

  7. https://zrepl.github.io/↩︎

  8. https://wiki.debian.org/DebianBookworm↩︎

by Peter Molnar <mail@petermolnar.net>

When you have an evening and a morning in Granada

A brief visit to the a wonderful old town and an unbelievably serene Generalife

The Pa-Kua1 Open Classes 2024 Europe (a yearly gathering for the martial studies school I'm learning from) were held in Malága this year. Considering how close it is to Granada, where the legendary Alhambra is located at, it would have been a shame not to visit the place.

My way there was not without tiny bumps, the first being the glorious 12°C I left at 04:30 from Cambridge (to get the 05:17 train for the 8:30? flight to Malága, because there were no flights for the day to Granada from Stansted). When I got to Malága, it was hot for trousers with boots, but not intolerable. Buy bus tickets from ALSA2 online, because the spanish seem to be very relaxed about opening the only booth for bus tickets...

The bus way to Granada is beautiful, passing the Sierra Nevada, countless olive farms - but there were so many clouds, and, escaping the monstrous weather from the UK I was getting disappointed. That was until I got off the bus, and the heat hit me. Eventually I stopped on the street and changed to sandals and a shirt, only to see a pharmacy sign showing 35°C. That's with full cloud cover. Once I changed, it was nice.

A week before I realized I messed up tickets are for the Alhambra admission: the official website is kind enough not to link the non-guided tours, so it's a bit funny to find those tickets. I left buying too late, at which point even the Generalife (gardens) and Alcazaba (fortress) only were out for that Thursday evening planned to go, leaving me with no option, but to visit in the morning. (If you're after the tickets: https://tickets.alhambra-patronato.es/en/ ; Google Maps actually lists the official tickets as well, so that is quite helpful, and I rarely praise Google these days.)

Anyhow, this turned out to be an excellent decision, as Granada is most lively in the evening and at night. I took long strolls on the streets of the Albaicín, and the area of the Alhambra combined with this far exceeded any of my expectations, this place is simply lovely.

It would have been nicer without the car, but this way the steepness
shows a bit
It would have been nicer without the car, but this way the steepness shows a bit PENTAX K-5 II s, 100.0 mm, f/6.3, 1/250 sec, ISO 80 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0
Jesus is watching you
Jesus is watching you PENTAX K-5 II s, 35.0 mm, f/8.0, 1/640 sec, ISO 100 smc PENTAX-DA 35mm F2.4 AL CC-BY-NC-ND-4.0
I absolutely love the black and white pebbles for the street, and the
size of whatever flower this is was incredible
I absolutely love the black and white pebbles for the street, and the size of whatever flower this is was incredible PENTAX K-5 II s, 18.0 mm, f/8.0, 1/125 sec, ISO 100 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0
I found a spot where nobody came at all at the foot of the Alhambra
with excellent view and scorging heat
I found a spot where nobody came at all at the foot of the Alhambra with excellent view and scorging heat PENTAX K-5 II s, CC-BY-NC-ND-4.0
Funny how pictures taken at late afternoon doesn't really show the
impressive beauty of the complex
Funny how pictures taken at late afternoon doesn't really show the impressive beauty of the complex K-5 II s, 48.0 mm, f/4.5, 1/1600 sec, ISO 100 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0
It's a bit better in the evening, but something is still
missing.
It's a bit better in the evening, but something is still missing. PENTAX K-5 II s, 53.0 mm, f/5.6, 1/10 sec, ISO 1600 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0

I was planning to only see Generalife and Alcazaba, because according to photos, the Nasrid Palaces is overwhelming and would need it's own day. The Generalife, despite having been rebuild countless times, is one of the most serene, gentle places I've visited in my life, and has absolutely incredible, equable energies - especially in the morning, when one has the chance to be alone in some of the spots.

Careful with the morning sprinklers
Careful with the morning sprinklers PENTAX K-5 II s, 35.0 mm, f/4.0, 1/200 sec, ISO 80 smc PENTAX-DA 35mm F2.4 AL CC-BY-NC-ND-4.0
These lined the path that lead to the main entrance
These lined the path that lead to the main entrance PENTAX K-5 II s, 35.0 mm, f/2.4, 1/20 sec, ISO 80 smc PENTAX-DA 35mm F2.4 AL CC-BY-NC-ND-4.0
Just another view on the morning sun
Just another view on the morning sun K-5 II s, 35.0 mm, f/8.0, 1/250 sec, ISO 80 smc PENTAX-DA 35mm F2.4 AL CC-BY-NC-ND-4.0
While the fountains are modern addition, they do feel like they'd
always been part of the buildings
While the fountains are modern addition, they do feel like they'd always been part of the buildings PENTAX K-5 II s, 18.0 mm, f/8.0, 1/125 sec, ISO 80 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0
There's an incredible peacefullness and welcoming feel in the
Generalife
There's an incredible peacefullness and welcoming feel in the Generalife PENTAX K-5 II s, 18.0 mm, f/8.0, 1/80 sec, ISO 80 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0
Throughout my sort time I was wondering where the cats are, because I
didn't see any. Apparently they exist.
Throughout my sort time I was wondering where the cats are, because I didn't see any. Apparently they exist. PENTAX K-5 II s, 88.0 mm, f/5.6, 1/160 sec, ISO 80 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0
The birds and the sprinklers change the view a lot.
The birds and the sprinklers change the view a lot. K-5 II s, 135.0 mm, f/5.6, 1/320 sec, ISO 80 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0
One of the classic tourist shots.
One of the classic tourist shots. K-5 II s, 18.0 mm, f/8.0, 1/125 sec, ISO 80 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0

I'm sure the real Alhambra is incredibly, and one day, when I have the time to stretch the visit into a bit more days, I want to see it. In a single Friday morning, even the Generalife was wonderful and was certainly worth the extra bus from Malága.

PS: In 2007, Loreena McKennit gave a surreal, wonderful concert in the Alhambra. It's on Youtube, and it's worth watching.

by Peter Molnar <mail@petermolnar.net>

How to change DPI when docking with XFCE and systemd

DPI change on docking with XFCE and systemd on Manjaro

A little while ago I got a ThinkPad X1 Carbon 7th gen1 from my father that replaced my aging X250. I've been resisting the thinner and thinner trends, but I have to admit, it's a lovely machine, with an incredible keyboard, and a wonderful display. The 8GB fixed RAM sounds is limiting, but for me, it's all right. It stays significantly colder, than the X250, and after upgrading the SSD to 2TB, now that they are available and don't cost an arm and a leg, I don't need the secondary HDD like I used to.

The display, however, poses a problem: it's WQHD, 2560 * 1440 pixels. I know that these days people go for 4k with insane refresh rates, but on a 14" display, I have no need for either: full HD, 1920 * 1080 would be perfectly fine. To achive something like this I set the DPI of the system to 120, all good.

Until I dock it, because the 23" monitor is, indeed, 1920 * 1080, and with 120 DPI, it takes me back in time to much smaller resolutions. Note: I only use a single monitor either way. If I have more, I tend to put up too many distractions: I used to use 2 monitors, one for the tasks, the other for communication, but it's not nearly as productive as many people believe it to be.

It was easy to fix this by hand: every time I docked, I ran a script, but it was hard to believe there's no way to automate this. Well, there's no built in way, but there is certainly a way.

I use XFCE as my desktop, which provides me with xfconf-query. It has a monitor mode to display changes. I set up a profile for the docked display layout:

XFCE display dialogue with the Advanced tab open, showing a save profile
XFCE display dialogue with the Advanced tab open, showing a save profile

Once that was done, xfconf-query --monitor --channel displays --verbose had the following outputs on docking:

set: /Default/DP-2/Active (false)
set: /ActiveProfile (554a6d9a9dfdb915105b05437cdcf1a73ac5badd)
set: /Default/eDP-1/Active (false)
set: /Default/DP-2/Active (true)

and the following on un-docking

set: /ActiveProfile (Default)
set: /Default/eDP-1/Active (true)
set: /Default/eDP-1/Position/X (0)

So I wrote a bash script to monitor it, following a tip that I wasn't aware with while and tail2:

~/.local/bin/dpi-daemon.sh

#!/usr/bin/env bash

xfconf-query --monitor --channel displays --verbose | while read -r line; do
    if grep 'set: /ActiveProfile (554a6d9a9dfdb915105b05437cdcf1a73ac5badd)' <<< "${line}"; then
        xfconf-query -c xsettings -p /Xft/DPI -s -1
    elif grep 'set: /ActiveProfile (Default)' <<< "${line}"; then
        xfconf-query -c xsettings -p /Xft/DPI -s 120
    fi
done

Initially I tried to start this from Session and Startup but that wasn't happy, so I tried with a systemd user unit file:

mkdir -p ~/.local/share/systemd/user/

~/.local/share/systemd/user/dpi-daemon.service

[Unit]
Desription=DPI changer

[Service]
Type=simple
ExecStart=~/.local/bin/dpi-daemon.sh
Restart=always

[Install]
WantedBy=multi-user.target
systemctl --user daemon-reload
systemctl --user enable dpi-daemon

Which made everything and every happy: automated DPI change on display change.

by Peter Molnar <mail@petermolnar.net>

The quest for simple, hight quality music and video playback in 2023

The year 2023 reminded me of my mortality quite a bit, so I took a good, deep look at my home setups in case someone else ever needs to be able to understand it, use it, maintain it. I decided to start with something that we use day to day - music and video playing.

About snowflake setups

Many things in my setups work for me, it is not always user, let alone child friendly. Because I want to ensure I'm not the singular bus factor for the setup, I need to think of the following:

This is not easy, and with the ongoing enshittification of everything1 it'll only get harder: new devices are cloud connected, they rely on streaming platforms which will, eventually, go bust, and in the meanwhile support for local media gets forgotten. Did you know Chromecast doesn't support DivX and old AVI formats natively2, so you can't cast these without transcoding?

My journey with audio and video

Over 10 years ago we moved to England and I left my "hifi" - a Panasonic SA-AK18 which had a better service manual3 than any device I ever owned, despite falling into Black Plastic Crap category - in Hungary as it was too large to fit first in a shared accommodation, then in a one bedroom rented flat. I had a jack - RCA cable connected to it which went in from my computer, and if I wanted to play music, I used either that connection, or CDs.

Once we got here I still wanted music so I got two small Panasonic speakers for ~£20 and a cheap but hyped car amplifier, a Lepai LP-2020A, for a similar price from eBay, and continues the same connection to the laptop. When I finally brought the old speakers to the UK I realised they sounded much better in my memories, then they actually did, and I wasted quite a lot of valuable space in the car boot with them. They ended up being donated to a charity.

Later I bought a Topping MX34 all-in-one (DAC, headphone- and power amplifier) as an upgrade to overcome the issues with the Lepai (eg. terrible balance). The Topping, in it's category, is a marvel, and sounded incredible with those absurdly cheap speakers. At this point I had my home server connected to it, running MPD on the local music, but I was listening more and more to Spotify over headphones at work. Eventually I had a Raspberry Pi (see the addendums) running MPD5, and raspotify6 for Spotify Connect.

Turn a few years: the pandemic and the lockdowns happened, we missed out on concerts and fun, and ended up buying a decent set of speakers, namely a pair of Dali Oberon 57s. I kept the Topping, because on paper, it had just enough power for the floorstanders, and foolishly didn't listen to the people in Richer Sounds that it won't. I adore these speakers, the bring out so many extras in songs I never noticed before, and I can only recommend them.

Videos, in my childhoold were VHS tapes, later .avi files on the computer, and for many years, I simply connected the computer to the TV or the largest monitor in the house and watched them that way.

When streaming started to pick up the lack of widevine on linux only allowed 480p on many platforms. This forced me to look into other possibilities: at first our pre-WebOS LG smart TV was adequete, but it soon got abandoned by providers, so we eventually got a Chromecast with Google TV8. The TV can still receive DivX DLNA casts natively, and the Chromecast can do the rest, but it's fascinating to see how short lived a full era of early computer video had become due to licencing issues.

When music quality kicks you in the teeth

A little while ago we attended to a birthday celebration where the owner had a nicely sounding HiFi setup (B&W speakers, some way too expensive, class A amplifier, etc), playing some tunes in the background. One of those songs stood out with the clarity of the guitar9, so when I got home I decided to hear it on my setup.

It wasn't entirely disappointing - knowing it costed minimum an order of magnitude less, it was pretty good -, but it was certainly lacking: those guitar strings lacked the same tingling in certain ranges. I did try if re-arranging would help: a tiny bit, but I can't afford that kind of repositioning with a whirlwind toddler around.

And so I started searching how I could improve upon it. I marched upon audiophile forums, and my dear, there be dragons of insanity10, but not everything audiophiles say is nonsense.

Over 20 years ago, in the high school studio, there was a patch board with printed circuit boards. I have witnesses, including musicians, that plain those circuit boards with nothing but jack sockets on them can emit music if driven hard enough, for example the pre-amp output of an ancient Sound Blaster card. We didn't want to believe our eyes and ears, but there it was, so when amplifier engineers say things like "circuit board: bad" because "sound always moves", they are not incorrect.

Another thing I can stand behind is some description of speakers: analytical vs musical. When we went to test some speakers we were shown a set of them first, and once finished listening, all I could say is that I hear every instrument, every detail - just not the music. That's when we were shown the Dali Oberon 5, which sounded much closer to our preference.

Experienced audio engineers can provide valuable insights, like why listening to music on a lot of audio bricks11 gets tiring after a while12. Also thanks to comparison videos from E Project13 because they made the choice much easier.

A detour: among the videos I came across a few which lead me down another rabbit hole: "Combination Tones"14 - the effect of how 2 higher pitched sound can generate a 3rd phantom low pitch sound in our ears, due to biology. Apparently an avantgarde artist, Maryanne Amacher, exploited this with her music15, but I'm not ready to listen to a piece to which people referred to "it had ghosts in it" just yet.

After much time spent on reading opinions, forums, listening to tests and comparisons between brands like Cambridge Audio, NAD, Audiolab, Rega, Yamaha, Marantz, etc. we decided that the sound we preferred, based on recordings, is NAD.

The cheapest, simplest, and still AB class amplifier NAD sales is the C 316BEE v216: analogue line-ins, no digital boards - nothing that gets obsolete in a year when the next shiny-shiny comes out, so this is what we got. Amplifier class doesn't matter; my reason for AB was that I wanted oldschool and simple.

Sidenote: apparently, in Europe it's a law that banana plug sockets need to be plugged in when the appliance is sold, so one needs to remove the plugs first. That is because the EU power adapter fits the banana sockets, and vice versa... I wasn't aware of this, so I first removed the banana plugs themselves, only to learn that I could have simply pulled those socket covers out. And no, this is not mentioned in the manual at all.

Once the NAD was plugged in it far superseded my expectations. To keep it as simple as possible, we (my wife an me) both made the following observations:

However, I want to stop here. "How to stop rewriting your site and write more"17 is a problem for us with websites, and searching for the perfect audio gear is a very similar problem. It's easy to keep going instead of enjoying the music. I'm joyous with the current setup and have no desire to seek thousands of pounds worth of gear, as after a certain point, one would need to spend orders of magnitude more money only to get a tiny bit better sound.

But the hardware is just in element in the whole chain.

There are many studies out there that most people can't tell the difference between a 320kbps MP3 and CD - and that is true if you're listening to a random song. It is most certainly not true when you're to listening to something you know from CD and the gear you're listening on is good enough.

"The Smell of Rain" from Mortiis18 had an official "redux" mp3 release, which I listened to for years. One day, out of curiosity, I got a copy of the CD and I was speechless: there are sounds on the CD release I never heard before, it essentially introduced a new layer to me in the music. The lossy compression was hiding it all.

We all got used to the limitations of our setups (cassettes copied from a copy of a copy of a cassette recorded from FM radio... the good old days) then later, to lossy music, and many of us have no idea what a decent, not even silly expensive setup (read: below £1000, newly bought), that's playing from CD is truly capable of.

Coming to this realisation I decided to try Tidal, which does offer CD streaming quality, unlike Spotify - and yes, it sounds much nicer. And it also sucks, because the hacks that used to enable Tidal Connect on a Raspberry are now dead19 and the available hack to use it, like the upmpdcli plugin for Tidal is significantly less user friendly, like librespot20, which just exposes itself as a Spotify Connect speaker.

Following the usability credo I needed something that allows us to use either Tidal or Spotify, and it came down to some sort of Chromecast.

I soon learnt that Google used to sell a device called Chromecast audio21, but discontinued some years ago. It costs more used, than when it was new, yet it's still 1/3rd of the price of a WiiM Pro22 which seems to be the cheapest, audio oriented, Chromecast capable device currently on the market.

When I plugged the second hand Chromecast audio in I thought I got played: there was a rhytmic noise, like a train. Turned out the device is fine: it was the low quality power supply I plugged it into. Apparently this little thing is cheap because it lacks a lot of filters and extras the more expensive devices have, so it really needs a nice, high quality power supply, preferable it's original.

Nonetheless: it's sound quality is amazing. To me, it sounds better, than the Topping as DAC.

Update (2023-12-03): for now, I went back to Spotify. Tidal has weird issues, and it regularly had buffering problems.

Controlling and browsing

I miss the physicality of CDs, casettes, VHS tapes, but I admire how accessible endless collections of music had become. To keep my ripped CD collection usable I used to run MPD on some sort of capable device, because MPD clients had great interfaces to browse what's available.

With this Chromecast oriented setup I had to find an alternative, which could do the same, and the answer was an Android app called BubbleUPnP23. I don't like having to pay for software, but ever since I can afford donating or tipping, I'm happy to do that. Sometimes there are exceptions, and BubbleUPnP is one of them, because it's worth it.

It's an immensely useful little app for Android that can act both as UPnP/DLNA control point and a UPnP media renderer. This means that it can play network media - or it can send it to something to play it. It can even transcode (!) if it needs to, so no need for the source to support transcoding.

To me, this is important, because the backend is a minidlna24 server. It's as simple as it gets, and even some routers have it installed. No setup needed, it's all through zeroconf, and it just works.

Less of a plus is the lack of catalogue, covers for video files, or the ability to set age limits (Jellyfin has that). However: looking back at my childhood I could have watched movies recorded in VHS that were definitely not for me - I didn't want to. I wanted to see Star Wars for the 6000th time instead, so this may not pose as much of a threat as I think it could. Time will tell, I'll come back to this problem when the now <2 years old has a phone and wants to watch Alien.

This was local audio and video can be browsed from any Android device in the family, casted or viewed locally, with no issues at all.

Conclusions

I have access to millions of hours of audio and video today, but that access' usability is definitely not on par with the simplicity of inserting a disc, a casette, or a VHS tape and simply pressing "play". Then there's also the loss of nice, physical album art, but that is another topic.

If I was Windows or Mac oriented, my life would be simpler, and I could have simply dedicated a machine as media center, because on those systems, the streaming services are willing to show decent quality. If you're on Win/Mac, keep it simple, and use an older machine to do this, it'll make your life much, much simpler.

MPD is a brilliant system for local music playback, and once set up, it'll probably run forever.

Every and all hobby has rabbit holes, though some might be more expensive, than others - audio is dangerous, because there's always something nicer, more special, newer.

Some audiophiles are simply mad, others have the curse of exceptional hearing. Audio is subjective. If you like it, it's OK. More expensive won't always or won't necessary make it better for you. The class of the amplifier will also not determine how much you like the sound.

I always try to buy things that last, but with technology I tend to go cheap and tinker. Part of it is wanting to be in control, another is wanting to understand my stack. For local things where updating is not an issue and which don't need to connect to ever changing APIs this approach works, and it's even usable, but when it comes to streaming services where everyone tries to protect their turf the tinkered solutions will eventually break. If I want to avoid that I need to buy in to some of the solutions. Chromecast works as DLNA was meant to work, but it's closed, and it plays nasty with anything that's not android or Google based. It probably also syphons a stupid amount of semi-private data to Google, but regardless of this, I couldn't find anything that works overall better.

I'm starting to dislike Rasbperry Pi based solutions. It's cheap board which is used for a lot of things it was never really meant to be used for, hacks on top of hacks. Sometimes getting the right tool for the right job is worth it instead of trying to apply a swiss army knife.

The same goes for the lottery of wonders-of-the-internet products. The current Chinese audio brick rage is around Fosi and S.M.S.L. audio, like it was some years ago for Topping. Don't get me wrong: some of these products are absurdly good, but if not, you're out of your money. The price of an S.M.S.L. AL200 is more or less the price of the NAD C316BEE and the latter will be better made and will outlive the Chinese brick for sure. My Topping has already developed weird quirks, like it's flaky volume button, the rubbish from start remote control, and occasional freezing at which point it needs to powered off and on.

Addendum #1: A Raspberry Pi with extras for local source playback

There are ready made images for audio on Raspberry Pi, but Volumio25 , moOde audio player26, or rAudio27 all failed me at some point.

Volumio is closed source, moOde and rAudio are open, but they all have one thing in common: a web based interface, which makes them incredibly slow on the Pi 3B.

They also don't play nice with custom configurations for MPD, and none of them is ready for easy satellite mode config. This means that network shares had to be added on their web config, and it made them crawl- except for moOde, which just died after I added my NFS share.

There are other, fun configuration issues. For example, on Volumio MPD set to hardware volume mixer, but Spotify Connect is still on softvol, so setting the volume on MPD sets a baseline for Spotify, but not the other way around.

However, if the goal is simply local playback:

gives you a rock-solid playback system, that is once setup, will probably run forever. In case you want to turn MPD into a DLNA client, there's a beautiful little software, called upmpdcli28 that can do that. It worked quite nice.

This was my MPD config with the Topping:

/etc/mpd.conf

music_directory         "/path/to/music"
database                "/var/lib/mpd/database"
playlist_directory      "/var/lib/mpd/playlists"
log_file                "syslog"
pid_file                "/run/mpd/pid"
state_file              "/var/lib/mpd/state"
sticker_file            "/var/lib/mpd/sticker.sql"
user                    "mpd"
group                   "audio"
bind_to_address         "0.0.0.0"
log_level               "error"
input {
        plugin          "curl"
}
decoder {
        plugin          "hybrid_dsd"
        enabled         "no"
}
decoder {
        plugin          "wildmidi"
        enabled         "no"
}
audio_output {
        type            "alsa"
        name            "MX3"
        device          "hw:CARD=MX3,DEV=0"
        mixer_type      "hardware"
        mixer_device    "hw:CARD=MX3"
        mixer_control   "PCM"
}
filesystem_charset      "UTF-8"

Addendum #2: Spotify Connect with raspotify

If you want to stream: raspotify29 works fine for Spotify Connect, but there's no telling, how long, given it's a reverse-engineered, unofficial solution.

/etc/raspotify/conf

LIBRESPOT_AUTOPLAY=
LIBRESPOT_DISABLE_AUDIO_CACHE=
LIBRESPOT_DISABLE_DISCOVERY=
LIBRESPOT_BITRATE="320"
LIBRESPOT_FORMAT="S16"
LIBRESPOT_SAMPLE_RATE="44.1kHz"
LIBRESPOT_DEVICE_TYPE="speaker"
LIBRESPOT_DEVICE="hw:CARD=MX3,DEV=0"
LIBRESPOT_BACKEND="alsa"
LIBRESPOT_MIXER="alsa"
LIBRESPOT_ALSA_MIXER_DEVICE="hw:CARD=MX3"
LIBRESPOT_ALSA_MIXER_CONTROL="PCM"
LIBRESPOT_USERNAME="$SPOTIFY_USER"
LIBRESPOT_PASSWORD="$SPOTIFY_PASSWORD"
LIBRESPOT_INITIAL_VOLUME="50"
LIBRESPOT_VOLUME_CTRL="linear"
LIBRESPOT_ONEVENT=""
TMPDIR=/tmp

Addendum #3: Using the Topping MX3 as DAC or pre-amplifier

Do not believe Reddit experts30: yes, you can use a Topping MX3 both as pre-amp and for line-in level, but keep this in mind:

To change between level and dB display, press Mute then Mode on the remote.

Addendum #4: failed attempts

Kodi32 on Raspberry Pi 3

I have two Raspberry Pi 3 Model B Rev 1.2 -s. These things supposed to have both h264 and h265 hardware decoders, but as it turns out, this got messed up because some the decoders are closed source. This means no Kodi beyond 18 if hardware acceleration is needed for HEVC (aka x265).33.

This wasn't my only problem: Kodi turned out to be utterly unusable with my music collection, mainly because there is no folders/file view. It was slow and miserable to use with Kore, on the web, on the TV, basically in any way.

There is a Spotify Connect addon that worked though, but nothing for Tidal.

Jellyfin server34 with Jellyfin app on Chromecast

Everyone loves raving about Jellyfin, but they all forget one thing: it loves to transcode. My low powered energy efficient server(s) don't, and because of the aforementioned lack of DivX support in Google TV35 no native playback is possible for those kind of files without transcoding, meaning this setup is a no-go.

Chromecast with Google TV with USB-C hub and the Topping MX3 as external DAC

One of the hacks I tried was to connect the Chromecast with Google TV to a USB-C hub that had PD passthrough charging and an external DAC. Unfortunately Android 12 doesn't want you to do that3637 and so it sometimes breaks rather randomly.

While there's MPD server38 app for the Google TV that works flawlessly in satellite mode39, because of HDMI CEC it kept turning the TV when the music started playing.

There's also no working MPD client for the TV, so while it was playing music, there was no way of stopping it from the Chromecast.

An Android tablet with USB-C hub and an external DAC

I learned it the fun way that Spotify Connect only works for the very account you log in with on the tablet - it's not like the Chromecast or librespot, where anyone on the network could do it, so this was dropped as well.

by Peter Molnar <mail@petermolnar.net>

I ended up with a Zigbee smart home because the alternative was hurting my ears

I've been eyeing with FIR (far infrared) heating for years, long before we got to buy our current house. Now we have it, and while it's certainly not a cheap way to heat, it feels lovely; getting here, however, had some unforeseen problems.

2022/2023 warning: FIR is not cheaper to run, than gas or heat pumps

It might be strange to start an article titled "I love my FIR panels" with a "why not" immediately, but this is important.

Electricity in the UK at the moment around 35p/kWh, gas is close to 10p/kWh. The FIR heating will probably need a bit less energy (as in kWh) due to the way it heats objects as well, so the room feels friendlier at a slightly lower temperature, but the required energy is not that much less. Even if it was 75% of the gas energy the cost is still 2.6x compared to gas.

If the most important factor for you is running cost, you should probably look at heat pumps. Even Herschel themselves admit this1, however, there are factors beyond running cost which you might want to consider, such as installation, maintenance, space and plumbing requirements, lack of existing insulation, and so on.

Background

In 2018 we were about to buy a house: we won the bidding and were waiting on surveys to come back. They did came back and unfortunately we walked away from the deal - the house was surrounded by old, decaying asbestos cement roofed garages that were part of freeholds, so absolutely no way to make people replace them - but during the waiting time I started making plans on renovating it.

It had old, electric storage heaters, no gas at all, so I started looking at modern electrical heating options, and came across the idea of FIR - far infrared - heating.

There's disturbingly little about these on the net, though there are two23 articles which cover practically every aspect. I fell in love with the idea, but when the house deal fell through it was put on hold.

After some time I grew curious to see how and if the FIR heating actually works. To check it at a reasonable price I decided to buy a small, under desk heater4. Having used it in our bedroom during the night to avoid making turning the full house heating on during last winter it became clear that it's a lovely thing, but a ~200W one is definitely not suitable as the only heating system.

In 2019 we finally bought a house. It was a long journey and there was quite a bit of work that had to be done on it, starting with a full house re-wiring. This gave us an opportunity to prepare the cabling for the heating - and I should have prepared cabling for an electric water heater, which I completely forgot about.

Why not a heat pump?

The house had (still has) a gas central heating, but with quite old plumbing (and a few, occasional leaks), heavily dated panels (some not even radiators, type 10 only), and a (now, due to it's age and how the previous owners neglecting it) a somewhat loud and waning gas boiler. We didn't want to invest into renovating it, given how the world is moving to renewable energy5, and lowest common denominator for that is electricity.

Underfloor or wall heating is not an option in this house, so if we were to install a heat pump we would have needed MUCH bigger radiators, along with a complete redoing of the pipework. Given the available space is ~85m2, new double/triple radiators would have taken up even more of the valuable space.

I wanted to embrace the idea of as simple as possible: a heat pump, while mechanically simple, has quite a few moving parts, liquids, and needs servicing - and there's the circulating water, which, if the pipes break, causes a lot of trouble. It would still be central heating, so besides the pump we would have needed smart valves on the radiator, and the pump were to break down all heating and hot water goes with it (as with any central heating to be fair).

On top of this it would create the same "feeling" of heating: stuffy, heated, dusty air. FIR feels like the sun shining on you from the ceiling.

Panels, sizing, cost

The house is a 3 bedroom, semi-detached, cavity insulated Laing Easiform from the 1950s, made of concrete with an acceptable amount of loft insulation - "the" average UK house so to speak. It has category A double glazed windows installed in 2021, which puts it beyond the average a bit. In total it has 9 areas: a living room, dining room, kitchen, corridor, landing, bathroom, 2 bedrooms, and a small bedroom which functions as office. The living room received 2 panels instead of a single large one.

The required/recommended panel size calculation was done on Heschel's calculator, but was verified by their representative. There are lot of other sites out which will give you significantly smaller panel recommendations - please do not believe them.

We choose the more expensive Inspire range: we have been trying very hard to try longer lasting, and possibly made in UK/Europe appliances. The Inspire is made in Germany, and they have 10 years warranty - and they are plain, dead simple panels, without the controller built onto them. This latter turned out to be an important factor if you want smart options without a Chinese cloud provider, see later.

Part No. Description Quantity Where
CL-750L Herschel Inspire White 820W 1700 x 400 1 corridor
CL-750 Herschel Inspire White 750W 3 dining and living (2x) rooms
CL-900 Herschel Inspire White 900W 3 bedrooms, kitchen
CL-500 Herschel Inspire White 550W 2 study, bathroom
CL-400 Herschel Inspire White 420W 1 landing
T-T2 Herschel IQ T2 Thermostat (Inc R2 Receiver) 9 1x in each area

The total price inc VAT was close to £7500. I'm well aware £7500 is a lot, and that doesn't include the installation cost which added nearly £3000 on top of this. It took 4 days of work for 2 electricians, there were some tricky bits to connect to the wiring, some lights had to be moved, and we worked with Safeswitch, which was the only Herschel approved installer our area.

We also had a whole house voltage optimiser installed (an extra, painful, nearly £900 in material cost). The UK runs on ~242V, whereas these panels - and most electrical appliances to be clear - are optimised more for 230V. The one we bought is from Energy Ace6, and the installation cost included adding this as well. It pushed the voltage down to ~232V which is healthier for all the appliances.

If one decides on the more affordable panels the material cost can be nearly halved, and those panels might not need accredited installers - although it is never a bad idea to hire someone who's familiar with the project already.

Post-install problems: coil whine with the Herschel R2

Once the system was installed I happily turned it on - only to be greeted with an omnipresent coil whine from every single R2 unit, and it was wild. I made the recordings with a smartphone and you may need wired headphones to hear them; bluetooth has a compression that seems to cut it out, but in real life, especially during the night, it was intolerable.

Coil whine test #1
Coil whine test #1

I got in touch with Herschel who sent a replacement unit to test if it had the issue as well, because it turned out that a lot of people can't hear the noise in these recordings. Unfortunately it also had it, but this time I made a more complex measurement. When WiFi traffic was applied the noise changed significantly.

Coil whine test #2 with WiFi
traffic
Coil whine test #2 with WiFi traffic

I started digging to see what might be making the whine and I had a feeling it's the WiFi module, but in the process I became rather sure these are customised Tuya units7. I have a strong itch against WiFi based Tuya because of their Chinese cloud, which these would have had to go through to be smart, so I had one more reason to be unhappy with them. These are also special with their 2 way RF communication, so Tasmota is not an option.

The front of a disassembled Herschel T2 (thermostat)
unit
The front of a disassembled Herschel T2 (thermostat) unit
The back of a disassembled Herschel T2 (thermostat)
unit
The back of a disassembled Herschel T2 (thermostat) unit
Herschel R2 (switch) installed and
opened
Herschel R2 (switch) installed and opened
Herschel R2 (switch) disassembled
Herschel R2 (switch) disassembled

While I got refunded for these units once they were sent back, and Herschel didn't make any problems with the refund process, the rest of the message wasn't ideal:

I am saddened to hear that the replacement receiver from our latest batch is also audible to you. As I mentioned we have sold these receivers in vast numbers, (thousands), and you are only the second person to report the noise, but I fully appreciate it is a problem for you.

I find it mildly offending to sell these with the excellent quality German panels to be honest. Our current battery powered, Z-Wave based boiler controller, (re)branded as "Secure"8 is far superior to these units - though they come with their own issues without additional z-ware routers in a house -, but the switch is rated only to 3A. I'm sure that with minor modifications it could take up to 10A and would be a significantly better fit with the Inspire line, particularly from a privacy/security perspective.

My current Z-Wave based, battery powered, 7 day programmable
thermostat to control the gas
boiler
My current Z-Wave based, battery powered, 7 day programmable thermostat to control the gas boiler

Looking for alternatives, settling with Zigbee (3.0)

I went through my options: I had some issues with Z-Wave before, learned that KNX would cost more, than the system installed, skipped a lot other things, until I bumped into Zigbee 3.0.

I bought Sonoff ZBMINIs9 to be the controllers, which are great, and carelessly went for Aqara temperature and humidity sensors. Don't buy Aqara unless you go all-in with the brand. I had to sell those and buy Sonoff SNZB-02 Temperature and Humidity Sensors10 because some of the Aqara devices kept stopping sending data no matter what I did. The host controller is a Sonoff ZigBee 3.0 USB Dongle Plus P11, which feeds into Zigbee2MQTT12 which sends to Mosquitto13 which talks to Domoticz14.

Final setup of a panel in the study, on the ceiling. The fused switch
is required by UK standards, the other box contained the R2 switch
originally, now it has the Sonoff ZBMINI
Final setup of a panel in the study, on the ceiling. The fused switch is required by UK standards, the other box contained the R2 switch originally, now it has the Sonoff ZBMINI

There's an alternative firmware for the SNZB-02-s15 which would turn them into a real thermostat with binding - I've been testing one for a while, and so far, it's surprisingly nice. I haven't had the time to replace the firmware on all of them (it includes some temporary soldering), but there are plans to do so.

I tested the EFEKTA firmware. It worked for a few weeks, and yes, it can be used as a standalone thermo/humidistat, but after some time it started to transmit multiple temperature values simultaneously, making the FIR to stay on all the time, so I decided to drop the experiment and stay with the stock firmware on the SNZB-02s.

One day I might have time to write about this setup in more details, but here's an important bit: for reasons I'm yet to identify why, but the initial setup with a Raspberry Pi 3B was unstable, and the Pi kept rebooting. I bought another fanless Lenovo M60016 and it's been rock solid since.

I finally found a solution to my interface problem: I bought a used "2-in-1" PC, namely a Dell Venue Pro 714017. It's maintainable, has a dock, a nice touchscreen, and can act as the server on it's own, and it has a full sized USB port, so it was possible to add the Zigbee stick. To my surprise, it has a fan, but once it was set into powersave mode, it barely ever came up. The OS is Ubuntu 22.04, because I wanted a full touch-screen support, and this was the simplest way to do so.

The Dell, out of the blue, died so hard that I couldn't boot it. Turned out that if the battery has any issue in it the charger alone can't power the device. Back to the fanless Lenovo M60018 and, for the time being, a tablet to control it, because proper touchscreens cost an arm and a leg.19

Domoticz vs thermostats

I tried Home Assistant many times but I find their YAML configurations repulsive: it's practically random and complicated. Yes, there is documentation, and it's OK, but I'll take a programming language any timer over that YAML horror. Once it told me that python 3.9, which is the Python in the current stable Debian, will be deprecated for HA in 2023 I walked away for good.

Domoticz on the other hand is small, simple (maybe sometimes even too simple), and can be scripted with a lot of languages, including it's own dialect of Lua, called dzVents20. So I did the following: I created virtual thermostats for each room, a virtual boost switch for each room, than added a script that connected these to the state changes of the relevant temperature sensors and switches in each room. The "sufni" (shed in Hungarian) is special because that's an oil radiator and it only ever comes up when the shed goes below 4°C - I have some paint there which shouldn't be allowed to freeze.

return {
    on = {
        devices = {
            'Háló', 'Gyerekszoba', 'Kisszoba', 'Fürdő', 'Lépcsőfeljáró',
            'Folyosó', 'Nappali', 'Stúdió', 'Konyha',
            'Sufni',
            'Háló termosztát', 'Gyerekszoba termosztát', 'Kisszoba termosztát', 'Fürdő termosztát', 'Lépcsőfeljáró termosztát',
            'Folyosó termosztát', 'Nappali termosztát', 'Stúdió termosztát', 'Konyha termosztát',
            'Sufni termosztát',
            'Háló boost', 'Gyerekszoba boost', 'Kisszoba boost', 'Fürdő boost', 'Lépcsőfeljáró boost',
            'Folyosó boost', 'Nappali boost', 'Stúdió boost', 'Konyha boost',
        },
    },
    logging = {
        marker = '[thermostat]',
    },
    execute = function(domoticz, device)
        local basename = string.gsub(string.gsub(device.name, ' termosztát', ""), ' boost', "")
        local thermostat = domoticz.devices(basename .. ' termosztát')
        local temperature_sensor = domoticz.devices(basename)
        local boost = domoticz.devices(basename .. ' boost')
        local heater = nil
        local hysteresis = nil

        if (basename == 'Sufni') then
            hysteresis = 1
            heater = domoticz.devices(basename .. ' olajradiátor')
        else
            hysteresis = 0.3
            heater = domoticz.devices(basename .. ' FIR')
        end

        if ((device.id == boost.id) and (boost.active == true)) then
            boost.switchOff().afterSec(900)
            if (heater.active == false) then
                domoticz.log(basename ..  ' ON (boost)', domoticz.LOG_INFO)
                heater.switchOn()
            end
        end

        if ((boost.active == false) and (heater.active == true) and (temperature_sensor.temperature >= (thermostat.setPoint + hysteresis))) then
            domoticz.log(basename ..  ' OFF (thermostat)', domoticz.LOG_INFO)
            heater.switchOff()
        end

        if ((heater.active == false) and (temperature_sensor.temperature <= (thermostat.setPoint - hysteresis))) then
            domoticz.log(basename ..  ' ON (thermostat)', domoticz.LOG_INFO)
            heater.switchOn()
        end

    end
}

The schedule is done with timers on each thermostat:

Current schedule of the living room; between 9:00 and 19:00 the gas
central heating takes over until I figure out how not to pay and arm and
a leg for electricity :(
Current schedule of the living room; between 9:00 and 19:00 the gas central heating takes over until I figure out how not to pay and arm and a leg for electricity :(

It works as expected, without issues.

Energy needs and running cost

The end of 2022 was quite nice in terms of weather at the beginning, but December brought serious colds - in the past 10 years we lived in the UK and I haven't experienced periods in Cambridge where the temperature barely moved above zero for days:

Early December 2022 was COLD in the UK
Early December 2022 was COLD in the UK

We decided to run a test and see the cost if we rely solely on the panels to heat. While they were able to handle it and heat up the house, which is good, the cost was brutal. Keep it in mind that we regularly wash, use the dryer, cook, and work from home, so the only thing we used gas for was hot water on 11 Dec. The drop you see later is when we decided to turn the gas heating back on between 09:00 and 17:00 so the clicking and the noise doesn't bother us during the night.

68kWh of electricity costs £24... and that was a single
day.
68kWh of electricity costs £24... and that was a single day.
In the meanwhile our garden looked like this - in front of the bench
there's a pond which had at least 10cm of solid ice on it. In previous
years it barely froze over.
In the meanwhile our garden looked like this - in front of the bench there's a pond which had at least 10cm of solid ice on it. In previous years it barely froze over.

Does far infrared heating work?

In my experience, yes. It's lovely using them, the heat is instant and stays with the house. The heat does eventually get everywhere, it will not be "shaded" by desks and furniture more, than a heating panel or a type 10/20 wet unit would be by furniture.

It is, however, different, and with regular thermostats that have 1-2°C hysteresis, it could be tricky to make them perfect.

I'd seen a video on youtube about someone telling that a 1kW FIR panel barely heats him up sitting next to it. If I sit in front of our 200W portable it already heats me up and the 900W panels in the bedrooms can easily deal with the rooms. It might just be the difference between cheap panels and expensive ones, so be very careful on choosing a brand.

The only thing we had a problem with is the humidity and green mould (like the one on stale bread) in the bathroom on some baskets of ours in the aforementioned December period, but we weren't the only ones, so I can't yet tell if it was due to the new heating, or the mixture of other circumstances.

Conclusions, observations, summary

The way FIR heats feels nicer, than many other heating methods: it's able to heat you up at some deep level very fast, but as the electrician installing them said: it's more "digital" whereas floor heating, for example, is more "analogue".

The panels radiate from their back as well, meaning putting the upstairs ones on the walls instead of the ceiling could result in better use of that heat - that is if the wall is made of material that can "store" heat - solid walls would be ideal - and not from clinker blocks, like ours.

Some of the ceilings developed hairline cracks behind the heaters, but only upstairs, with the loft and the insulation above them. I'm guessing it's where the plasterboards meet, and I'm yet to address them.

SONOFF is reliable, cheap, and generally speaking just works.

Mixing Zigbee 3.0 and 1.2 can result in the 1.2 devices losing their way and stopping sending data.

This type of heating makes more sense when it's combined with solar panels, battery storage, and utilising varying electricity costs throughout the day. On single tariff it will be expensive, just like plain electric heating.

Was it worth it? Even with devastating energy prices I believe that in the long run, it was. When we get to the point to replace the boiler with an electric one as well21 we can get rid of the gas, the radiators, which will free up a lot of space. Plus I like how they look on the ceiling, making it less boring and less usual - although this is a subjective thought.

by Peter Molnar <mail@petermolnar.net>

28 July, 2022

This post is a reply to: https://rubenerd.com/russia-withdraws-from-the-iss/

Yes. I felt and feel the same, and the current news are the saddest step backwards in my lifetime so far.

I somewhat also feel the same about the Concorde. That thing was a symbol of engineering, and while it was full of issues, abandoning the whole class still feels like we simply gave up on forward looking engineering and decided to polish what we have.

Two thoughts and recommendation: The End of Eternity1 from Isaac Asimov, and what happens when humanity always takes the safe and comfy route; and a movie, The Arrow2 "The right stuff, the wrong time".

by Peter Molnar <mail@petermolnar.net>

08 January, 2022

This post is a reply to: https://jamesg.blog/2022/01/06/brainstorming-email-to-rss/

James, you are most probably looking for something like https://github.com/remko/atomail/

by Peter Molnar <mail@petermolnar.net>

Old Web, New Web, Indie Web

If you have to decide on the order of creative freedom vs data ownership, what order do you choose?

When you set your mind to search for something explicit, the internet becomes an incredible place: from the tiny, "recommended for you" world of algorithms claiming to know you better, than yourself, you're suddenly in uncharted territories of thoughts of others.

There were times, long ago, when this was normal. For example, there were specific websites built only to contain links to other sites - 'portals' - or communities that connected sites to the eachother - webrings -, so it was easy to suddenly drop of your known internet.

This is much harder today, particularly because some of those recommendation engines (think of youtube, netflix, and so on - even ebay (!!!) recently) are not bad at all. There's only one, tiny issue: they tend to limit whatever they recommend more and more, only showing you a glimpse of what is available on their service, let alone on the internet.

Usually this phenomenon is called a "recommendation bubble", and to get out of it, one needs to deliberately seek beyond it. This isn't trivial though: there are known unknowns (when there's a question on an exam you know you should have learnt, but you didn't) and unknown unknowns (things you'd never before heard of). If we don't know what to look for, which is the vast majority of the internet itself for anyone, the search engines become useless. That is why links to other sites were and are so utterly important: to be able to explore. There is the "I'm Feeling Lucky" button on Google, which once took a friend of mine to a Flash version of the 'Tunak Tunak' song when he searched for "Cthulhu" eons ago, so using that button can sometimes be fun, I'll give Google that.

In the past weeks I've found myself staring at websites designed in early 90s Geocities style, particularly at web manifestos: why their site exists, and why it was better in the good ol' days, and how can it be similar today123. Surprisingly enough, there were similar manifestos from before the web2.0 craze of the early 2000s4, but most of them now seems to be lost to decay5.

Most of these manifestos are new, written in the 2020s by people who had experienced the 90s web. They all have some overlapping thoughts, such as: the web should stay weird, whacky, whimsical, (why do all these words start with a w?), personal websites are important, the creative freedom one's own site gives is wonderful, and that social media is becoming monotonous and lifeless.

There are also a lot of people longing for something they believe is lost:

I miss the useless web. I miss your grandpa’s blog. I miss weird web art projects that trolled me. I miss fan pages for things like hippos. I wish I didn’t feel like the web was collapsing into just a few sites plus a thousand resumes. Sarah Drasner Jul 1, 2018

They are only partially correct. Much of the old content is still there, but because they are not HTTPS, or haven't been updated in years, decades sometimes, Google de-prioritizes, or even purges them from the search options. Google, sadly, has no obligations to remembering6.

These days there are wonderously easy to use tools to make websites - although some of them are better7, than others - so why isn't everyone making their own page?

Some early social networks, such as MySpace, allowed profile customization at a very deep level, which is actually enough for many people to make a small self-representation on the net. I was recently pointed at modern, but similar examples8, showing how many are happy with simply a profile they can completely design. They are not after a whole website, they are after a way to be creative.

In 2019, Flash was killed off, and Vice published an article: "Flash Is Responsible for the Internet's Most Creative Era"9. There is no overstatement in that title; the Flash era was absolutely incredible. It didn't just give us geniously designed websites (I vividly remember the site of Cuvée des Trolls, a beer, with a built in minigame), meme citadels10, unforgettable minigames, no; it also gave us things like Happy Tree Friends11. Flash had it's problems (many of them to be honest), but it indeed gave an unprecedented flexibility to be original, and many used it to expand the possibilites of the web, to go beyond text and websites.

Coming to this realisation I got into some arguments discussions on the IndieWeb chats12 about ordering the IndieWeb principles13. There are multiple elements on the list of IndieWeb priorities, but no matter how many times I read it, the one I believe to be the most important - "have fun" - is down at the bottom, like a bit of an afterthought.

The IndieWeb wiki14 is a disturbingly messy, but staggeringly deep site, with a crazy amount of collected reference, knowledge, and tooling around the IndieWeb Movement. It is important to realise that the IndieWeb - as in indieweb.org - is not the same as that manifesto from 199715 called "the indie web". The former is a community, a movement, made up of people believing and following those principles, whereas the latter is the old Internet, The World Wide Web: a haphazardly entangled mess of individual websites.

As time passes, not truly owning a digital creative work, including a website, can quickly become a problem. There are many documented cases where usernames, handles, subdomains were taken over by the host16, and even more cases of hosting providers, silos, etc going under17. One must have the option to move and save their content to avoid losing it, hence the need for your own domain name, which can be repointed to another place, if needed.

The rest of the IndieWeb ideas, in my opinion, are completely optional. For example, marking up HTML with microformats18 is only useful if someone wants their content machine-parseable for other IndieWeb sites (or search engines that still respect microformats v1). This is the reason why there aren't clear guides: this is not a step-by-step thing. The owner of a website needs to decide what functionality they want to participate in, and for those functionalities, the guides are much clearer.

However... many people leaving social media might want to leave it and it's features - likes, comments, etc - for good, and are looking for their own place, their own home on the internet. In many cases this is a creative, visual call. There is no need to first register a domain name to start filling this desire: jump on a place like Neocities19 and start creating - and I firmly believe this is the most important step: the will, and action, to create.

It might be time for IndieWeb to rethink principles and priorities. The current list might appeal to developers, or people deeply emerged in utilizing social media silos, looking to ease their workflow, or their fears of losing their content, but it doesn't necessarily talk to the ones looking to satisfy the call of creativity, or those disillusioned of social media itself.

PS: I asked my wife, Nora, to proof-read this entry. At the beginning, her immediate answer to the question in the summary was: "of course data ownership has priority!". After reading it through I I asked her to revisit the question, and she told me that if she sells a painting - she has been practising Chinese brush painting for many years now20 -, she loses that painting, yet that loss will make her happy, and so maybe, the possibility of creativity is indeed higher on the list of priorities.

by Peter Molnar <mail@petermolnar.net>

A view of Lanzarote

PENTAX K-5 II s, 31.0 mm, f/11.0, 1/250 sec, ISO 80 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0

During our stay, it rained on Lanzarote. That is a rather rare event on the island, and it also resulted in quite a few clouds. The good thing about clouds is that if they are nice, one can use them in a photo as a feature.

I've changed the contrast on this photo a bit.

by Peter Molnar <mail@petermolnar.net>

Sunset at La Santa

PENTAX K-5 II s, 78.0 mm, f/8.0, 1/125 sec, ISO 80 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR CC-BY-NC-ND-4.0

We were looking for the perfect spot to take photos of another view, only to realize that there are a few points on the island where resorts were built on such an ugly manner that it blocks out the view of the otherwise incredibly area around La Santa.

Nonetheless, just before we were deciding to leave the sun started to set and gave us some magnificent lights on the shore.

by Peter Molnar <mail@petermolnar.net>

Petra of the Canaries

PENTAX K-5 II s, 50.0 mm, 1/60 sec, ISO 80 SMC Pentax-M 50mm F1.7 CC-BY-NC-ND-4.0

There are some sandstone formations on Lanzarote, and they are becoming an Instragram location, so taking shoots without people in it takes some patience, but it's worth it.

by Peter Molnar <mail@petermolnar.net>