<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sia-server, branch v0.1.0</title>
<subtitle>IoT backend server</subtitle>
<id>https://cgit.xengineering.eu/sia-server/atom?h=v0.1.0</id>
<link rel='self' href='https://cgit.xengineering.eu/sia-server/atom?h=v0.1.0'/>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/'/>
<updated>2025-12-20T14:38:31Z</updated>
<entry>
<title>Release version 0.1.0</title>
<updated>2025-12-20T14:38:31Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T14:38:31Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=b3092e759896ec038e6b42ee2310036fedcde41f'/>
<id>urn:sha1:b3092e759896ec038e6b42ee2310036fedcde41f</id>
<content type='text'>
This is the first release of the Sia server. It is the Minimal Viable
Product (MVP).
</content>
</entry>
<entry>
<title>README.md: Adhere to Semver / define public API</title>
<updated>2025-12-20T14:33:19Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T14:33:19Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=15a634093351f91b7bbaa68ccd9d0a2965eab6d1'/>
<id>urn:sha1:15a634093351f91b7bbaa68ccd9d0a2965eab6d1</id>
<content type='text'>
This project should use semantic versioning. This requires defining the
public Application Programming Interface (API).
</content>
</entry>
<entry>
<title>README.md: Add usage instructions</title>
<updated>2025-12-20T14:28:23Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T14:28:23Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=9db4822c5b0991b0c19c3bb028110449a6ce8b82'/>
<id>urn:sha1:9db4822c5b0991b0c19c3bb028110449a6ce8b82</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add CHANGELOG.md</title>
<updated>2025-12-20T14:23:33Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T14:23:33Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=134991968b8661aef17468aa3358af29a21b9f32'/>
<id>urn:sha1:134991968b8661aef17468aa3358af29a21b9f32</id>
<content type='text'>
</content>
</entry>
<entry>
<title>README.md: Add build instructions</title>
<updated>2025-12-20T14:18:15Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T14:18:15Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=71ffe1112b2d1312157c42b90908fb4cdb6308b5'/>
<id>urn:sha1:71ffe1112b2d1312157c42b90908fb4cdb6308b5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Deploy README.md</title>
<updated>2025-12-20T14:13:17Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T14:13:17Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=f2e6dee6000258c95b5e0e52a9e17fafc35f6a5b'/>
<id>urn:sha1:f2e6dee6000258c95b5e0e52a9e17fafc35f6a5b</id>
<content type='text'>
This information is useful in the deploy tar archive. Thus it is copied
there.
</content>
</entry>
<entry>
<title>Add README with description and hardware support</title>
<updated>2025-12-20T14:08:32Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T14:08:32Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=248fc6d1ef0a40c691a341589c5327f7e995ef14'/>
<id>urn:sha1:248fc6d1ef0a40c691a341589c5327f7e995ef14</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Do not print start banner on usage</title>
<updated>2025-12-20T14:03:33Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T14:03:33Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=fe3d36791e3fa97d4f03639b6c7f8a2d61e28a0b'/>
<id>urn:sha1:fe3d36791e3fa97d4f03639b6c7f8a2d61e28a0b</id>
<content type='text'>
Before this commit the start banner `+++ Started Sia server +++` was
printed before the usage instructions. The stop banner was not printed.

The intended behaviour is to print none of them. This is not
implemented.
</content>
</entry>
<entry>
<title>systemd: Add service and sysusers configuration files</title>
<updated>2025-12-20T13:59:15Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:59:15Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=b1bd87926098e03ffd983666d0746055122854fd'/>
<id>urn:sha1:b1bd87926098e03ffd983666d0746055122854fd</id>
<content type='text'>
This makes it possible to run the Sia server executable on systemd-based
Linux distributions with systemd making system administration easier.

Maintaining these files in the source instead of packaging repository
was decided since systemd is the dominant init system across Linux
distributions and thus not every distribution-specific packaging repo
needs to re-invent the wheel.
</content>
</entry>
<entry>
<title>Deploy default configuration</title>
<updated>2025-12-20T13:54:42Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:54:42Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=5f3cd750b2867854a1e05f66312062426024f676'/>
<id>urn:sha1:5f3cd750b2867854a1e05f66312062426024f676</id>
<content type='text'>
The default configuration from the source tree is embedded into the
executable with Go's embed package to assume the correct defaults.
Furthermore it is now also part of the artifact tar archive to give
users an idea how a configuration file should look like.
</content>
</entry>
<entry>
<title>Add Meson-tracked project version</title>
<updated>2025-12-20T13:50:28Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:50:28Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=b9ae3f51309ff0b38e7291239a0334e8df76b9d1'/>
<id>urn:sha1:b9ae3f51309ff0b38e7291239a0334e8df76b9d1</id>
<content type='text'>
This allows to use the version of the project in the build system
independent from the version control system. Thus a source tar archive
can be built the same and also changing the version control system does
not change anything regarding the build process.
</content>
</entry>
<entry>
<title>configs: .gitignore: Add `debug.json`</title>
<updated>2025-12-20T13:45:32Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:45:32Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=228230b6018194b4fb4ca902a772d97b6fab787f'/>
<id>urn:sha1:228230b6018194b4fb4ca902a772d97b6fab787f</id>
<content type='text'>
This is reserved foooooooooor local development.
</content>
</entry>
<entry>
<title>Add tar archive generation for deployment</title>
<updated>2025-12-20T13:40:31Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:40:31Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=e66f5b43a41283ddf4c4dae10e3b32e1fa0be077'/>
<id>urn:sha1:e66f5b43a41283ddf4c4dae10e3b32e1fa0be077</id>
<content type='text'>
Bundling all build artifacts into one tar archive is good practise to
make deployment easier and underline which files in the build directory
are important.

zstd was picked for compression because of the very good compression
ratio.
</content>
</entry>
<entry>
<title>Make GOOS and GOARCH part of executable name</title>
<updated>2025-12-20T13:35:45Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:35:45Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=e4eeebd12a41b65da02087d93e19ee719723fd8b'/>
<id>urn:sha1:e4eeebd12a41b65da02087d93e19ee719723fd8b</id>
<content type='text'>
This renames `sia-server` to `sia-server-linux-amd64`. This makes clear
for which target environment the executable is built and allows to later
place additional executables for other environments too without name
collisions.
</content>
</entry>
<entry>
<title>Disable log timestamps</title>
<updated>2025-12-20T13:30:37Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:30:37Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=c76a967bce0bb182ae2a5d81f5bd940869aa464f'/>
<id>urn:sha1:c76a967bce0bb182ae2a5d81f5bd940869aa464f</id>
<content type='text'>
The primary target environment is a systemd-based Linux system. There
the logging system of the operating system will timestamp the log
messages.
</content>
</entry>
<entry>
<title>Add startup config logging</title>
<updated>2025-12-20T13:25:45Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:25:45Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=0dc4bea01a2f51b8a1c8f8b8c586e040c065fe38'/>
<id>urn:sha1:0dc4bea01a2f51b8a1c8f8b8c586e040c065fe38</id>
<content type='text'>
This is useful during early development to make possible
misconfiguration visible.

Later it might be dropped especially if the config gets larger.
</content>
</entry>
<entry>
<title>Implement passing user configuration</title>
<updated>2025-12-20T13:20:42Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:20:42Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=167772b87698cce479090dbe5bd3d1cc7c1bc808'/>
<id>urn:sha1:167772b87698cce479090dbe5bd3d1cc7c1bc808</id>
<content type='text'>
This allows overwriting values of the default configuration with custom
ones.
</content>
</entry>
<entry>
<title>Add StartupConfiguration.Validate()</title>
<updated>2025-12-20T13:15:58Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:15:58Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=d429f3a7dbe8fc8cc43ebe565b6130b1cfce4ea1'/>
<id>urn:sha1:d429f3a7dbe8fc8cc43ebe565b6130b1cfce4ea1</id>
<content type='text'>
This method makes it easy to validate a configuration.

A call of it is now embedded into the StartupConfiguration.FromJSON()
method which should always be the lowest level function to parse
configurations.

Thus configurations can usually be trusted.
</content>
</entry>
<entry>
<title>Use default config</title>
<updated>2025-12-20T13:11:13Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:11:13Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=224d52d1033d8ccce5087c9bee5a63457830a13a'/>
<id>urn:sha1:224d52d1033d8ccce5087c9bee5a63457830a13a</id>
<content type='text'>
The default config JSON is embedded as bytes into the executable.
Instead of constants the default values are now parsed from these
embedded bytes.
</content>
</entry>
<entry>
<title>Add default config parsing</title>
<updated>2025-12-20T13:06:34Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:06:34Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=d6fa255b1df26a12329a614601a027e074aabeb2'/>
<id>urn:sha1:d6fa255b1df26a12329a614601a027e074aabeb2</id>
<content type='text'>
This is a first step towards configurability.
</content>
</entry>
<entry>
<title>Add Meson target `test` for unit testing</title>
<updated>2025-12-20T13:01:51Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T13:01:51Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=ba367f41077be88338db981c88802d7292ac7013'/>
<id>urn:sha1:ba367f41077be88338db981c88802d7292ac7013</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Implement &lt;prefix&gt;/server/health</title>
<updated>2025-12-20T12:57:21Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T12:57:21Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=c6249f96b09d9862f160c439ac8a97a92edb8228'/>
<id>urn:sha1:c6249f96b09d9862f160c439ac8a97a92edb8228</id>
<content type='text'>
This indicates if the Sia server is available and connected to the MQTT
broker.

Using the MQTT Will messages these will also be sent if the Sia server
unexpectedly crashes.

Using the retained flag it is ensured that freshly connected MQTT
clients will receive these messages even when they missed the initial
one from the Sia server.
</content>
</entry>
<entry>
<title>Implement Homematic reconnects</title>
<updated>2025-12-20T12:53:06Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T12:53:06Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=576e1bf2300e7a324713710871d9bcd5424ff286'/>
<id>urn:sha1:576e1bf2300e7a324713710871d9bcd5424ff286</id>
<content type='text'>
This is as simple as do not handling errors on state polling.

It ensures the server does not panic when the connection to the OpenCCU
is temporarily not alive.
</content>
</entry>
<entry>
<title>Separate Homematic code</title>
<updated>2025-12-20T12:47:56Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T12:47:56Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=6978bf0635372b0330629469fb86ddb640cdd863'/>
<id>urn:sha1:6978bf0635372b0330629469fb86ddb640cdd863</id>
<content type='text'>
Similar to a previous refactoring of the MQTT-related code this removes
all Homematic logic to a dedicated file.

The only connection to the outside is the `tx chan MQTTMessage` channel
and the `HomematicRun()` function.

This makes the code more modular.
</content>
</entry>
<entry>
<title>Add MQTT keepalives</title>
<updated>2025-12-20T12:43:31Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T12:43:31Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=58d7c51baa053be8d6d4ec5f409fceef1c7c11b5'/>
<id>urn:sha1:58d7c51baa053be8d6d4ec5f409fceef1c7c11b5</id>
<content type='text'>
This issues ping request / response messages between the Sia server and
the MQTT broker making sure an interrupted connection is noticed.
</content>
</entry>
<entry>
<title>Implement MQTT reconnects</title>
<updated>2025-12-20T12:38:14Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T12:38:14Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=bfd7b70c927d60242fb77b9b58a7c7aad73cf1bc'/>
<id>urn:sha1:bfd7b70c927d60242fb77b9b58a7c7aad73cf1bc</id>
<content type='text'>
This is a central requirement to ensure a restart of the MQTT broker
does not harm the Sia server operation.
</content>
</entry>
<entry>
<title>Log MQTT disconnect</title>
<updated>2025-12-20T12:32:55Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T12:32:55Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=12198f4d921eb6406d08a122e2e51971bf65e7fa'/>
<id>urn:sha1:12198f4d921eb6406d08a122e2e51971bf65e7fa</id>
<content type='text'>
This makes connection loss visible during debugging.
</content>
</entry>
<entry>
<title>Separate MQTT logic</title>
<updated>2025-12-20T12:27:42Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T12:27:42Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=96299467958aaffdbef5cb8ae780d3abeddfcaba'/>
<id>urn:sha1:96299467958aaffdbef5cb8ae780d3abeddfcaba</id>
<content type='text'>
This reduces the coupling between the MQTT-related code and everything
else to a single `tx` channel of type `MQTTMessage`.

This improves the code quality significantly.
</content>
</entry>
<entry>
<title>Raise to QoS 1</title>
<updated>2025-12-20T12:23:17Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T12:23:17Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=faf9fb7a8c5e8b31e9c1104b42d7e550e986ca61'/>
<id>urn:sha1:faf9fb7a8c5e8b31e9c1104b42d7e550e986ca61</id>
<content type='text'>
This ensures the state updates reach the broker. QoS 2 is not required
since multiple reception of the same state will not make a difference.
</content>
</entry>
<entry>
<title>Switch ClientId to `siaserver`</title>
<updated>2025-12-20T12:18:55Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-12-20T12:18:55Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-server/commit/?id=2b4b4235d692b32f5dc18e1fda39917365857336'/>
<id>urn:sha1:2b4b4235d692b32f5dc18e1fda39917365857336</id>
<content type='text'>
The old version `sia-server` was problematic since the MQTT
specification [1] ensures only this list of valid characters:

    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

For every other character the broker might support this or not.

[1]: https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718031
</content>
</entry>
</feed>
