<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Maximilian Böhm</title>
	<atom:link href="https://maximilian-boehm.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://maximilian-boehm.com/</link>
	<description></description>
	<lastBuildDate>Mon, 23 Feb 2026 11:02:04 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>Gamma and brightness control is not available on Raspberry 4 &#038; 5</title>
		<link>https://maximilian-boehm.com/gamma-and-brightness-control-is-not-available-on-raspberry-4-5/</link>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Mon, 21 Apr 2025 09:18:41 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://maximilian-boehm.com/?p=326</guid>

					<description><![CDATA[<p>Update 11.05.2025 I&#8217;ve contacted the Raspberry Pi Fundation and got some more detailed information: Intro Since I am using a Raspberry PI 4 to serve Homeassistant on a 24&#8243; touchscreen, I was eager to use something like Redshift or F.Lux to adapt the gamma and brightness settings of my screen to my timezone, i.e., to [&#8230;]</p>
<p>The post <a href="https://maximilian-boehm.com/gamma-and-brightness-control-is-not-available-on-raspberry-4-5/">Gamma and brightness control is not available on Raspberry 4 &amp; 5</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Update 11.05.2025</h2>



<p>I&#8217;ve contacted the Raspberry Pi Fundation and got some more detailed information:</p>



<ul class="wp-block-list">
<li>BCM2711 (Pi4/CM4) and BCM2712 C1 (current 4GB and 8GB Pi5s) do not support gamma control due to hardware limitations</li>



<li>BCM2712D0 (2GB and 16GB Pi5, and CM5) do not have these hardware limitations, but it&#8217;s not yet implemented in software. There is a <a href="https://github.com/raspberrypi/linux/pull/6839">pull request</a> aiming to resolve this, but it does not work yet.</li>
</ul>



<h2 class="wp-block-heading">Intro</h2>



<p>Since I am using a Raspberry PI 4 to serve Homeassistant on a 24&#8243; touchscreen, I was eager to use something like Redshift or F.Lux to adapt the gamma and brightness settings of my screen to my timezone, i.e., to dim and reduce the blue light at night.</p>



<h2 class="wp-block-heading">Limitations in gamma control</h2>



<p>Unfortunately, <strong>I had to learn that this is not possible on an Rasperry 4 or 5</strong>, since this seems to be not implemented within the firmware. Raspberry 3 seems to be not affected, but due to a lack of hardware I was not able to confirm this.</p>



<p>Primary source: <a href="https://github.com/raspberrypi/firmware/issues/1274">https://github.com/raspberrypi/firmware/issues/1274</a>. Sadly, the issue was locked and there was no update since 2022. </p>



<p>I did some digging and read about KMS, FKMS and a switch (Either dtoverlay=vc4-fkms-v3d or &#8220;dtoverlay=vc4-kms-v3d&#8221;) to be placed in <em>/boot/firmware/config.txt</em>, but none of this was successful.</p>



<p>These findings were made an 14.04.2025 on a Raspberry 4:</p>



<pre class="wp-block-code"><code>uname -a

Linux raspberrypi 6.12.20+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.20-1+rpt1~bpo12+1 (2025-03-19) aarch64 GNU/Linux</code></pre>



<p>Also, rpi-update was conducted:</p>



<pre class="wp-block-code"><code>max@raspberrypi:~$ sudo rpi-update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
*** Performing self-update
*** Relaunching after update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
FW_REV:0a0b3671d5fd313983ea584c6067836e5143eb3b
BOOTLOADER_REV:816bf7c594a4c117ab2815f443ad3d535be475a6
*** We're running for the first time
*** Backing up files (this will take a few minutes)
*** Backing up firmware
*** Backing up modules 6.1.0-rpi7-rpi-v8
WANT_32BIT:0 WANT_64BIT:1 WANT_64BIT_RT:0 WANT_PI4:1 WANT_PI5:1

#

WARNING: This update bumps to rpi-6.12.y linux tree
See discussions at:
https:&#47;&#47;forums.raspberrypi.com/viewtopic.php?t=379745

#

Would you like to proceed? (y/N)
Downloading bootloader tools
Downloading bootloader images
*** Downloading specific firmware revision (this will take a few minutes)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 151M 100 151M 0 0 3985k 0 0:00:39 0:00:39 --:--:-- 4336k
*** PREPARING EEPROM UPDATES ***

BOOTLOADER: update available
CURRENT: Thu 3 Sep 12:11:43 UTC 2020 (1599135103)
LATEST: Tue 11 Feb 17:00:13 UTC 2025 (1739293213)
RELEASE: latest (/usr/lib/firmware/raspberrypi/bootloader-2711/latest)
Use raspi-config to change the release.

VL805_FW: Dedicated VL805 EEPROM
VL805: up to date
CURRENT: 000138c0
LATEST: 000138c0
CURRENT: Thu 3 Sep 12:11:43 UTC 2020 (1599135103)
UPDATE: Tue 11 Feb 17:00:13 UTC 2025 (1739293213)
BOOTFS: /boot/firmware
'/tmp/tmp.P04Uq1QHWm' -&gt; '/boot/firmware/pieeprom.upd'
Copying recovery.bin to /boot/firmware for EEPROM update

EEPROM updates pending. Please reboot to apply the update.
To cancel a pending update run "sudo rpi-eeprom-update -r".
*** Updating firmware
*** Updating kernel modules
*** depmod 6.12.22-v8-16k+
*** depmod 6.12.22-v8+
*** Updating VideoCore libraries
*** Running ldconfig
*** Storing current firmware revision
*** Deleting downloaded files
*** Syncing changes to disk
*** If no errors appeared, your firmware was successfully updated to 0a0b3671d5fd313983ea584c6067836e5143eb3</code></pre>



<h2 class="wp-block-heading">Sources for further investigations</h2>



<ul class="wp-block-list">
<li><a href="https://forums.raspberrypi.com/viewtopic.php?t=372630">https://forums.raspberrypi.com/viewtopic.php?t=372630</a></li>



<li><a href="https://forums.raspberrypi.com/viewtopic.php?t=326126">https://forums.raspberrypi.com/viewtopic.php?t=326126</a></li>



<li><a href="https://github.com/raspberrypi/firmware/tree/master/boot/overlays">https://github.com/raspberrypi/firmware/tree/master/boot/overlays</a></li>



<li><a href="https://forums.gentoo.org/viewtopic-p-8809094.html?sid=f896e6eabc60027d3ba948fc22effe7d">https://forums.gentoo.org/viewtopic-p-8809094.html?sid=f896e6eabc60027d3ba948fc22effe7d</a></li>



<li><a href="https://www.raspberrypi.com/documentation/computers/config_txt.html">https://www.raspberrypi.com/documentation/computers/config_txt.html</a></li>
</ul>



<p></p>



<p></p>
<p>The post <a href="https://maximilian-boehm.com/gamma-and-brightness-control-is-not-available-on-raspberry-4-5/">Gamma and brightness control is not available on Raspberry 4 &amp; 5</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Debrand Telekom Speedport II (Huawei 593s-12)</title>
		<link>https://maximilian-boehm.com/debrand-telekom-speedport-ii-huawei-593s-12/</link>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Wed, 01 Nov 2023 10:20:23 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://maximilian-boehm.com/?p=306</guid>

					<description><![CDATA[<p>I bought a used Telekom Speedport II for a vacation abroad just to realize that Telekom limited the functionality of the device heavily: They disabled roaming, thus I was not able to use the device. Since I was already on-site, I wanted to solve the problem and found no solution online. I am happy to [&#8230;]</p>
<p>The post <a href="https://maximilian-boehm.com/debrand-telekom-speedport-ii-huawei-593s-12/">Debrand Telekom Speedport II (Huawei 593s-12)</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>I bought a used Telekom Speedport II for a vacation abroad just to realize that Telekom limited the functionality of the device heavily: They disabled roaming, thus I was not able to use the device. Since I was already on-site, I wanted to solve the problem and found no solution online. I am happy to show you how I solved that. </p>



<h2 class="wp-block-heading">Background: Different Hardware Versions</h2>



<p>The original manufacturer of the Telekom Speedport II is Huawei. In my case, it is a &#8220;593s-12&#8221;. You can find your exact model on the back of the device. Telekom also used other hardware versions (&#8220;593u-12&#8221;), which seem to contain another hardware. The 593s-12 is rather exotic, most people discuss the 593u-12 or 593s-22.</p>



<p>In my understanding, the 593s-12 seems to be (more or less?) hardware identical to the 593s-22, but with a degraded software which seems to restrict LTE bands.</p>



<h2 class="wp-block-heading">Bring the Telekom Speedport II Back to the Original Firmware</h2>



<p>I found no instructions online but I have found a solution. It might not be necessary to follow step 1, but these were the steps that worked for me. </p>



<p>Please check the exact version of your Telekom Speedport II. Mine is &#8220;593s-12&#8221;. If you have a different model, like &#8220;593u-12&#8221;, it probably will not work or even brick your device.</p>



<p>My hardware version is &#8220;B&#8221; and I started with software version &#8220;V200R001B180D35SP03C748&#8221; whereas the &#8220;C748&#8221; stands for Telekom. Every telco who is customizing that kind of Huawei device has an own number <sup data-fn="4bf15666-4ab3-4342-bc09-7fe514d5cd7d" class="fn"><a href="#4bf15666-4ab3-4342-bc09-7fe514d5cd7d" id="4bf15666-4ab3-4342-bc09-7fe514d5cd7d-link">1</a></sup> <sup data-fn="63fc5436-6203-46f0-8d45-8de0ceb0fe06" class="fn"><a href="#63fc5436-6203-46f0-8d45-8de0ceb0fe06" id="63fc5436-6203-46f0-8d45-8de0ceb0fe06-link">2</a></sup>.</p>



<p><strong>Disclaimer: Do the next steps at your own risk. It may brick your device. The original Telekom image is not available, and the next steps are non-reversible!</strong></p>



<h2 class="wp-block-heading">Step 1): Flash Firmware #1</h2>



<p>This is an intermediary step which leads to a software with more features, but 4G will not work. That&#8217;s why there is a second step.. </p>



<p>There is a telco from Finland which provides a firmware which can be flashed. You can use the <a href="https://www-dna-fi.translate.goog/tuki/laitteet/mokkulat/kotimokkulat/dna-kotimokkula-4g-wlan-b593s/paivitykset?_x_tr_sl=auto&amp;_x_tr_tl=en&amp;_x_tr_hl=de&amp;_x_tr_pto=wapp">translated version</a> or the <a href="https://www.dna.fi/tuki/laitteet/mokkulat/kotimokkulat/dna-kotimokkula-4g-wlan-b593s/paivitykset">original version</a> of the page to download the firmware. Click on &#8220;Updates&#8221; and scroll down a little bit to download the &#8220;.bin&#8221;-file. </p>



<p>Your device will not let you flash this firmware. You have to modify the binary: Open the binary with an editor, for example Notepad++, and replace the first occurence of &#8220;C182&#8221; with &#8220;C748&#8221; <sup data-fn="b5e6e695-8821-4837-a60a-aff3654ae872" class="fn"><a href="#b5e6e695-8821-4837-a60a-aff3654ae872" id="b5e6e695-8821-4837-a60a-aff3654ae872-link">3</a></sup> <sup data-fn="74c5901a-6a01-46ff-a2e0-1d51c268fd93" class="fn"><a href="#74c5901a-6a01-46ff-a2e0-1d51c268fd93" id="74c5901a-6a01-46ff-a2e0-1d51c268fd93-link">4</a></sup>. That is enough. We are mitigating the built-in check if the firmware belongs to the same telco.</p>



<p>If you have modified the binary file of the firmware, upgrade the device via web interface. It might be necessary to reset the device after flashing to also reset the password.</p>



<h2 class="wp-block-heading">Step 2) Flash Firmware #2</h2>



<p>As I already told you, the first firmware looked quite well until I recognized, that only 3G would work. Since that is too slow for my purposes, I digged deeper to enable also 4G. </p>



<p>The second firmware is easier, just <a href="https://huaweistockrom.com/huawei-b593s-22">download</a> it and flash it on the device.</p>



<p>That&#8217;s it. Now you have a &#8220;593s-22&#8221; with full roaming, VOIP, port forwarding and other functions Telekom should have never disabled in the first place.</p>



<h2 class="wp-block-heading">Sources</h2>


<ol class="wp-block-footnotes"><li id="4bf15666-4ab3-4342-bc09-7fe514d5cd7d"><a href="https://blog.hqcodeshop.fi/archives/198-B593-firmware-version-numbers.html">Explanation of software version naming of Huawei</a> <a href="#4bf15666-4ab3-4342-bc09-7fe514d5cd7d-link" aria-label="Jump to footnote reference 1">↩︎</a></li><li id="63fc5436-6203-46f0-8d45-8de0ceb0fe06"><a href="https://blog.hqcodeshop.fi/archives/198-B593-firmware-version-numbers.html">Further explanation of software version naming of Huawei</a> <a href="#63fc5436-6203-46f0-8d45-8de0ceb0fe06-link" aria-label="Jump to footnote reference 2">↩︎</a></li><li id="b5e6e695-8821-4837-a60a-aff3654ae872"><a href="http://blog.asiantuntijakaveri.fi/2015/07/crossflashing-huawei-b592s-22-from.html">Cross-Flashing and modifying binaries</a> <a href="#b5e6e695-8821-4837-a60a-aff3654ae872-link" aria-label="Jump to footnote reference 3">↩︎</a></li><li id="74c5901a-6a01-46ff-a2e0-1d51c268fd93"><a href="https://blog.hqcodeshop.fi/archives/215-Huawei-B593-u-12-firmware-spreadsheet.html#c1863">Comment which led me try editing the binary</a> <a href="#74c5901a-6a01-46ff-a2e0-1d51c268fd93-link" aria-label="Jump to footnote reference 4">↩︎</a></li></ol>


<h2 class="wp-block-heading">Further Sources</h2>



<ul class="wp-block-list">
<li><a href="https://forum.huawei.com/enterprise/en/download-the-latest-firmware-of-huawei-b593s-22/thread/667259398126452736-667213871523442688">https://forum.huawei.com/enterprise/en/download-the-latest-firmware-of-huawei-b593s-22/thread/667259398126452736-667213871523442688</a></li>



<li><a href="https://www.huaweiflashfiles.com/2016/02/huawei-b593s-22-firmware.html">https://www.huaweiflashfiles.com/2016/02/huawei-b593s-22-firmware.html</a></li>



<li><a href="https://www.lte-anbieter.info/lte-forum/threads/vf-b-2000-alternative-firmware.2690/">https://www.lte-anbieter.info/lte-forum/threads/vf-b-2000-alternative-firmware.2690/</a></li>



<li><a href="https://www.lte-anbieter.info/lte-forum/threads/speedport-lte-2-b593s-12-debrand.3368/">https://www.lte-anbieter.info/lte-forum/threads/speedport-lte-2-b593s-12-debrand.3368/</a></li>



<li><a href="https://blog.hqcodeshop.fi/archives/201-Huawei-B593-different-models-revisited-u-12-vs-s-22.html">https://blog.hqcodeshop.fi/archives/201-Huawei-B593-different-models-revisited-u-12-vs-s-22.html</a></li>



<li><a href="https://www.google.com/search?client=firefox-b-d&amp;q=huawei+b593-s22+reset+password">https://www.google.com/search?client=firefox-b-d&amp;q=huawei+b593-s22+reset+password</a></li>



<li><a href="https://openwrt.org/toh/huawei/b593s-22">https://openwrt.org/toh/huawei/b593s-22</a></li>



<li><a href="http://blog.asiantuntijakaveri.fi/2015/07/crossflashing-huawei-b592s-22-from.html">http://blog.asiantuntijakaveri.fi/2015/07/crossflashing-huawei-b592s-22-from.html</a></li>
</ul>
<p>The post <a href="https://maximilian-boehm.com/debrand-telekom-speedport-ii-huawei-593s-12/">Debrand Telekom Speedport II (Huawei 593s-12)</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ubuntu Server: Turn off Screen until Key is pressed</title>
		<link>https://maximilian-boehm.com/ubuntu-server-turn-off-screen-until-key-is-pressed/</link>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Mon, 01 May 2023 10:30:27 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://maximilian-boehm.com/?p=303</guid>

					<description><![CDATA[<p>I&#8217;ve recently installed Ubuntu server on an old laptop to use it as a homeserver. Since I want to keep the power consumption as low as possible, I tried to disable the display after a certain period of inactivity. This was harder to establish than I have thought. Anyways, I have found a solution. Initially, [&#8230;]</p>
<p>The post <a href="https://maximilian-boehm.com/ubuntu-server-turn-off-screen-until-key-is-pressed/">Ubuntu Server: Turn off Screen until Key is pressed</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>I&#8217;ve recently installed Ubuntu server on an old laptop to use it as a homeserver. Since I want to keep the power consumption as low as possible, I tried to disable the display after a certain period of inactivity. This was harder to establish than I have thought. Anyways, I have found a solution.</p>



<p>Initially, the laptop used about 9 watts, after disabling the screen it went down to almost 2 watts.</p>



<h2 class="wp-block-heading">Common Problems</h2>



<p>If commands are executed via SSH, they are within another environment (esp. TERM) as if one would do it directly via keyboard. A typical error message is:</p>



<p><code>setterm: terminal xterm-256color does not support --blank</code></p>



<h2 class="wp-block-heading">System Attributes</h2>



<ul class="wp-block-list">
<li>Laptop: Acer Aspire Switch Alpha 12</li>



<li>Ubuntu: 22.04.2 LTS</li>



<li>uname -a: Linux p-11 5.15.0-71-generic #78-Ubuntu SMP Tue Apr 18 09:00:29 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux</li>
</ul>



<h2 class="wp-block-heading">Solution</h2>



<p>Create new service</p>



<pre class="wp-block-code"><code>sudo vi /etc/systemd/system/enable-console-blanking.service</code></pre>



<p>Put the following content into this file:</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=Enable virtual console blanking

&#91;Service]
Type=oneshot
Environment=TERM=linux
StandardOutput=tty
TTYPath=/dev/console
ExecStart=/usr/bin/setterm -blank 1

&#91;Install]
WantedBy=multi-user.target

</code></pre>



<p>And enable after reboot</p>



<pre class="wp-block-code"><code>sudo chmod 664 /etc/systemd/system/enable-console-blanking.service
sudo systemctl enable enable-console-blanking.service</code></pre>



<p>Reboot, and after one minute screen should go blank and power consumption.</p>



<p>Credits for this solution goes to <a href="https://askubuntu.com/questions/1275192/server-20-04-turn-screen-off-after-inactivity">Tobias Holm on askubuntu.com</a>.</p>
<p>The post <a href="https://maximilian-boehm.com/ubuntu-server-turn-off-screen-until-key-is-pressed/">Ubuntu Server: Turn off Screen until Key is pressed</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Build a statically linked Rsync for limited SSH Accounts</title>
		<link>https://maximilian-boehm.com/build-statically-linked-rsync-for-limited-ssh-accounts/</link>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Sun, 16 Apr 2023 18:37:19 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://maximilian-boehm.com/?p=299</guid>

					<description><![CDATA[<p>Update (Feb 23, 2026):It looks like the build flags in this how-to aren’t correct for newer versions. This does fails on 3.4.1 with a popt error: ./configuremake CFLAGS="-static" EXEEXT="-static" Use this instead: Let&#8217;s say, you have some cheap webhosting provider which told you, you would have access via SSH just to let you determine, that [&#8230;]</p>
<p>The post <a href="https://maximilian-boehm.com/build-statically-linked-rsync-for-limited-ssh-accounts/">Build a statically linked Rsync for limited SSH Accounts</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Update (Feb 23, 2026):</strong><br>It looks like the build flags in this how-to aren’t correct for newer versions. This does fails on 3.4.1 with a <code>popt</code> error:</p>



<pre class="wp-block-preformatted">./configure<br>make CFLAGS="-static" EXEEXT="-static"</pre>



<p>Use this instead:</p>



<pre class="wp-block-code"><code>./configure CFLAGS="-static"
make</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Let&#8217;s say, you have some cheap webhosting provider which told you, you would have access via SSH just to let you determine, that even rsync is not available. Well, here we go. You can create a build with statically linked libraries, which will hopefully work for you.</p>



<pre class="wp-block-code"><code>docker run -it debian /bin/bash
apt update
apt install -y gcc wget libssl-dev libxxhash-dev libzstd-dev liblz4-dev build-essential libpopt-dev zlib1g-dev
wget https://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
tar xzf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure
make CFLAGS="-static" EXEEXT="-static"
strip rsync-static</code></pre>



<p>Thanks to the <a href="https://www.bachmann-lan.de/vmware-esxi-5-1-rsync-3-0-9-statically-linked-binary-erstellen/">source</a>, I&#8217;ve used to compile the commands.</p>



<p>Side note: Yes, you should update rsync to the latest version. Sadly, it is not intended to create static builds anymore. Thus, you will receive a lot of errors. Adding (https://github.com/curl/curl/issues/2199) &#8220;-ldl -lpthread&#8221; are the first steps and rsync can be compiled, but I have received a segmentation fault.</p>



<p></p>
<p>The post <a href="https://maximilian-boehm.com/build-statically-linked-rsync-for-limited-ssh-accounts/">Build a statically linked Rsync for limited SSH Accounts</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Expose Local Home Assistant Installation via Tailscale</title>
		<link>https://maximilian-boehm.com/expose-local-home-assistant-installation-via-tailscale/</link>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Sun, 16 Apr 2023 15:48:11 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://maximilian-boehm.com/?p=291</guid>

					<description><![CDATA[<p>I am currently setting up Home Assistant to prepare my new Smart Home. Since I do want to control HA via voice, I need to expose my local installation to the public internet. The guide explains clearly that the local installation must be available via HTTPS on port 443. And that is exactly, what I [&#8230;]</p>
<p>The post <a href="https://maximilian-boehm.com/expose-local-home-assistant-installation-via-tailscale/">Expose Local Home Assistant Installation via Tailscale</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>I am currently setting up <a href="https://www.home-assistant.io/">Home Assistant</a> to prepare my new Smart Home. Since I do want to control <a href="https://www.home-assistant.io/integrations/alexa.smart_home/">HA via voice</a>, I need to expose my local installation to the public internet. The <a href="https://www.home-assistant.io/integrations/alexa.smart_home/">guide</a> explains clearly that the local installation must be available via HTTPS on port 443. And that is exactly, what I want to show you within this blog post.</p>



<p>Note: There are several options how this can be achieved. Tailscale is just one option and depending on your flavor, you might want to choose another one like Cloudflare Argo, WireGuard, OpenVPN or DynDNS on your dynamic IP address. </p>



<h2 class="wp-block-heading">Definitions:</h2>



<ul class="wp-block-list">
<li>Local server: The server within your basement running Home Assistant</li>



<li>Remote server: The server within some datacenter which has a public IPv4 address (Yes, it could also be an IPv4, but you probably do not want to bother with that)</li>
</ul>



<h2 class="wp-block-heading">Steps</h2>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="233" src="https://maximilian-boehm.com/wp-content/uploads/2023/04/grafik-1-1024x233.png" alt="" class="wp-image-294" srcset="https://maximilian-boehm.com/wp-content/uploads/2023/04/grafik-1-1024x233.png 1024w, https://maximilian-boehm.com/wp-content/uploads/2023/04/grafik-1-300x68.png 300w, https://maximilian-boehm.com/wp-content/uploads/2023/04/grafik-1-768x175.png 768w, https://maximilian-boehm.com/wp-content/uploads/2023/04/grafik-1-1200x273.png 1200w, https://maximilian-boehm.com/wp-content/uploads/2023/04/grafik-1.png 1376w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ol class="wp-block-list">
<li>Provision a server instance, e.g. a VPS, with a public IPv4</li>



<li>Install docker &amp; docker-compose on that server instance</li>



<li>Install Tailscale on your local and your remote server</li>



<li>Run Traefik to forward the traffic from your remote server IPv4 to your local server</li>
</ol>



<h2 class="wp-block-heading">Traefik setup</h2>



<h3 class="wp-block-heading">docker-compose.yml</h3>



<pre class="wp-block-code"><code>version: '3.3'

services:
  traefik:
    image: traefik
    container_name: traefik
    volumes:
      - ./acme.json:/acme.json
      - ./static.yml:/static.yml
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - 'traefik.enable=true'
      - 'traefik.http.routers.api.rule=Host(`&#91;FQDN_FOR_YOUR_SERVER]`)'
      - 'traefik.http.routers.api.entrypoints=https'
      - 'traefik.http.routers.api.service=api@internal'
      - 'traefik.http.routers.api.tls=true'
      - 'traefik.http.routers.api.tls.certresolver=letsencrypt'
      - "traefik.http.routers.api.middlewares=auth"
      - "traefik.http.middlewares.auth.basicauth.users=&#91;YOUR_USER_NAME_FOR_TRAEFIK_DASHBOARD]:&#91;HASHED_PASSWORD]" # user/password
    ports:
      - 80:80
      - 443:443
    command:
      - '--api'
      - '--providers.docker=true'
      - '--providers.docker.exposedByDefault=false'
      - '--entrypoints.http=true'
      - '--entrypoints.http.address=:80'
      - '--entrypoints.http.http.redirections.entrypoint.to=https'
      - '--entrypoints.http.http.redirections.entrypoint.scheme=https'
      - '--entrypoints.https=true'
      - '--entrypoints.https.address=:443'
      - '--certificatesResolvers.letsencrypt.acme.email=&#91;INSERT_YOUR_MAIL]'
      - '--certificatesResolvers.letsencrypt.acme.storage=acme.json'
      - '--certificatesResolvers.letsencrypt.acme.httpChallenge.entryPoint=http'
      - '--log=true'
      - '--log.filepath=/var/log/traefik.log'
      - '--providers.file.filename=/static.yml'
</code></pre>



<h3 class="wp-block-heading">static.yml</h3>



<p>Place this file within the same folder as your docker-compose.yml</p>



<pre class="wp-block-code"><code>http:
  routers:
    homeassistant:
      rule: Host(`&#91;PUBLIC_FQDN_FOR_HOME_ASSISTANT]`)
      service: homeassistant
      tls:
        certResolver: letsencrypt

  services:
    homeassistant:
      loadBalancer:
        servers:
          - url: http://&#91;TAILSCALE_IP_OF_LOCAL_SERVER]:&#91;PORT_OF_YOUR_LOCAL_HOMEASSISTANT_SERVICE]</code></pre>



<p></p>
<p>The post <a href="https://maximilian-boehm.com/expose-local-home-assistant-installation-via-tailscale/">Expose Local Home Assistant Installation via Tailscale</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2022-12 Link Collection</title>
		<link>https://maximilian-boehm.com/2022-12-link-collection/</link>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Sun, 11 Dec 2022 16:45:22 +0000</pubDate>
				<category><![CDATA[Link Collection]]></category>
		<guid isPermaLink="false">https://maximilian-boehm.com/?p=286</guid>

					<description><![CDATA[<p>Diátaxis: A systematic framework for technical documentation authoring. A structured approach to document any kind of product. Basically, information is divided into four categories: I just wonder, if these categories might also be a good fit for a technical blog.</p>
<p>The post <a href="https://maximilian-boehm.com/2022-12-link-collection/">2022-12 Link Collection</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><a href="https://diataxis.fr/">Diátaxis: A systematic framework for technical documentation authoring.</a></h2>



<p>A structured approach to document any kind of product. Basically, information is divided into four categories:</p>



<ul class="wp-block-list">
<li>Tutorials (Learning-oriented)</li>



<li>How-to guides (Task-oriented)</li>



<li>Explanations (Understanding-oriented)</li>



<li>Reference (Information-oriented)</li>
</ul>



<p>I just wonder, if these categories might also be a good fit for a technical blog.</p>
<p>The post <a href="https://maximilian-boehm.com/2022-12-link-collection/">2022-12 Link Collection</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2022-11 Link Collection</title>
		<link>https://maximilian-boehm.com/2022-11-link-collection/</link>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Mon, 07 Nov 2022 20:37:31 +0000</pubDate>
				<category><![CDATA[Link Collection]]></category>
		<guid isPermaLink="false">https://m0x.de/bg/?p=262</guid>

					<description><![CDATA[<p>Reasons you aren&#8217;t updating your personal site A nice summary why one might stop updating his or her site (discipline, in my case). Also contains some neat ideas how to collect new ideas (maintaining an ongoing list of ideas, asking interesting questions on twitter, etc.). There is also a separate headline for the techies who [&#8230;]</p>
<p>The post <a href="https://maximilian-boehm.com/2022-11-link-collection/">2022-11 Link Collection</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><a href="https://brianlovin.com/writing/reasons-you-arent-updating-your-personal-site">Reasons you aren&#8217;t updating your personal site</a></h2>



<p>A nice summary why one might stop updating his or her site (discipline, in my case). Also contains some neat ideas how to collect new ideas (maintaining an ongoing list of ideas, asking interesting questions on twitter, etc.). There is also a separate headline for the techies who always strive for perfectionism (Good is enough!): &#8220;<a href="https://brianlovin.com/writing/reasons-you-arent-updating-your-personal-site#too-hard-to-add-and-edit-content">Too hard to add and edit content</a>&#8220;. My simple solution: I use WordPress with some plugins and one of its&#8217; standard themes.</p>



<h2 class="wp-block-heading"><a href="https://brianlovin.com/writing/side-project-prophecy">The Side Project Prophecy</a></h2>



<p>This month only posts of Brian Loving get covered. His page and content are really great. </p>



<figure class="wp-block-pullquote"><blockquote><p>The side project prophecy: the more you talk about building your side project, the less likely you are to ship it.</p><cite>Brian Lovin</cite></blockquote></figure>



<p>I fully agree. One could also <em>replace</em> with <em>talk</em>, and you get a new meaning which probably even covers more people and their approach for tackling their ideas. Not, probably most often.</p>



<h2 class="wp-block-heading">Steve Jobs</h2>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Steve Jobs Insult Response - Highest Quality" width="580" height="435" src="https://www.youtube.com/embed/oeqPrUmVz-o?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<figure class="wp-block-pullquote"><blockquote><p>Some mistakes will be made along the way, that&#8217;s good. At least decision are made on the way. And if we find mistakes, we fix them.</p></blockquote></figure>



<figure class="wp-block-pullquote"><blockquote><p>It started with what incredible benefits can we give to the customer. Not, starting with, let&#8217;s sit down with the engineers and figure out what awesome technologies we have and then how we gonna market that.</p></blockquote></figure>
<p>The post <a href="https://maximilian-boehm.com/2022-11-link-collection/">2022-11 Link Collection</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Blog Manual</title>
		<link>https://maximilian-boehm.com/blog-manual/</link>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Mon, 07 Nov 2022 20:29:24 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://m0x.de/bg/?p=260</guid>

					<description><![CDATA[<p>This is a reminder to myself, how I thought, I would setup and use this blog. Generally, it is about learning how to write in public. TIL: Today I learned I learned on HackerNews about TIL: Today I learned, which aims to be a simple summary of the things one learned without using up to [&#8230;]</p>
<p>The post <a href="https://maximilian-boehm.com/blog-manual/">Blog Manual</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>This is a reminder to myself, how I thought, I would setup and use this blog. Generally, it is about learning how to write in public. </p>



<h2 class="wp-block-heading">TIL: Today I learned</h2>



<p>I learned on HackerNews about TIL: Today I learned, which aims to be a simple summary of the things one learned without using up to much time for writing. Inspired by <a href="https://til.simonwillison.net/">Simon Willison</a>.</p>



<h2 class="wp-block-heading">Links of the month</h2>



<p>I summarize and collect the <a href="https://m0x.de/bg/category/link-collection/">most interesting links per month</a>. The content not necessarily needs to be new, but rather interesting to me at this point in time.</p>



<h2 class="wp-block-heading">Startup ideas</h2>



<p>I have a lot of <a href="https://m0x.de/bg/category/startup-idea/">ideas</a> collected during the last years. Instead of getting them even more dusty, I want to publish them here and hope one might sucessfully pursue one of them.</p>
<p>The post <a href="https://maximilian-boehm.com/blog-manual/">Blog Manual</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Accessible PDF Generator</title>
		<link>https://maximilian-boehm.com/accessible-pdf-generator-saas/</link>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Wed, 21 Sep 2022 19:03:02 +0000</pubDate>
				<category><![CDATA[Startup Ideas]]></category>
		<guid isPermaLink="false">https://m0x.de/bg/?p=237</guid>

					<description><![CDATA[<p>Businesses within the EU are forced by law (European accessibility act) to provide accessible PDF files to their customers. Creating accessible PDF files is an complex and expensive task, thus, this service offers best practices, templates and API to convert templates into PDF files. At a later stage, docker images could be made available to [&#8230;]</p>
<p>The post <a href="https://maximilian-boehm.com/accessible-pdf-generator-saas/">Accessible PDF Generator</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Businesses within the EU are forced by law (European accessibility act) to provide accessible PDF files to their customers. Creating accessible PDF files is an complex and expensive task, thus, this service offers best practices, templates and API to convert templates into PDF files. At a later stage, docker images could be made available to enterprise customers allowing them to run the service on premise, as PDFs most often contain sensitive information.</p>



<p>Pricing could be pay-as-you-go, i.e., customers pay per page. So far, no competitors are known. Problem with non-functional requirements is always, that often times people are not aware that they need to fulfill this law (and you don&#8217;t want to educate people to e.g. comply with GDPR) and even if they know, they might just neglect the cost and ignore the requirement. </p>
<p>The post <a href="https://maximilian-boehm.com/accessible-pdf-generator-saas/">Accessible PDF Generator</a> appeared first on <a href="https://maximilian-boehm.com">Maximilian Böhm</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
