<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sia-app/lib, branch v0.1.0</title>
<subtitle>IoT app</subtitle>
<id>https://cgit.xengineering.eu/sia-app/atom?h=v0.1.0</id>
<link rel='self' href='https://cgit.xengineering.eu/sia-app/atom?h=v0.1.0'/>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/'/>
<updated>2026-04-08T12:16:28Z</updated>
<entry>
<title>Add plug control</title>
<updated>2026-04-08T12:16:28Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-08T12:16:28Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=18cbbf877b171fc23950e64dac5fa6abda6fb02b'/>
<id>urn:sha1:18cbbf877b171fc23950e64dac5fa6abda6fb02b</id>
<content type='text'>
This allows the user to turn Wi-Fi plugs on and off.
</content>
</entry>
<entry>
<title>Fix missing SafeArea for Android</title>
<updated>2026-04-08T09:58:06Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-08T09:58:06Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=5171ef6557c3f38a32e68313e51c4ca1e866835a'/>
<id>urn:sha1:5171ef6557c3f38a32e68313e51c4ca1e866835a</id>
<content type='text'>
The start of the DevicesPage could be below a notch or header bar in
Android.
</content>
</entry>
<entry>
<title>Add cover control with up / stop / down</title>
<updated>2026-04-08T09:28:51Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-08T08:58:29Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=e4c61d1b669a43d292be1f40d5b36dbcb93500a4'/>
<id>urn:sha1:e4c61d1b669a43d292be1f40d5b36dbcb93500a4</id>
<content type='text'>
This allows the user to move covers with the Sia app.
</content>
</entry>
<entry>
<title>Display available covers</title>
<updated>2026-04-08T08:45:21Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-07T15:09:45Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=5dc62a59bf12dcc0190c26eb3712c1b7eec3cfcd'/>
<id>urn:sha1:5dc62a59bf12dcc0190c26eb3712c1b7eec3cfcd</id>
<content type='text'>
This does not yet allow control of the covers but existence is shown.
</content>
</entry>
<entry>
<title>Add AppState.covers</title>
<updated>2026-04-07T14:49:20Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-07T13:26:25Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=38705a8c1825638750cbee3e03bd182db1445020'/>
<id>urn:sha1:38705a8c1825638750cbee3e03bd182db1445020</id>
<content type='text'>
This set contains all the covers the server offers. This commit does not
include displaying it.
</content>
</entry>
<entry>
<title>Refactor message routing</title>
<updated>2026-04-07T14:48:45Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-07T12:53:37Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=129c825a77fb3cc039ab978785d72f92023ef1ab'/>
<id>urn:sha1:129c825a77fb3cc039ab978785d72f92023ef1ab</id>
<content type='text'>
This allows to route incoming MQTT messages in the _onMessage() method
and handle it in different handlers per topic.
</content>
</entry>
<entry>
<title>Empty contacts cache on disconnect</title>
<updated>2026-04-07T12:18:01Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-07T12:18:01Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=c2110a2098d475c5fa06d265833e229fad938e8d'/>
<id>urn:sha1:c2110a2098d475c5fa06d265833e229fad938e8d</id>
<content type='text'>
The cache of server data must be cleared on any disconnect. This avoids
a bug when devices from another server are displayed after connecting to
a different server or displaying outdated states on re-connect.
</content>
</entry>
<entry>
<title>Implement setting server_fqdn</title>
<updated>2026-04-06T14:57:58Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-06T14:57:58Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=fcfb2a17733a38b690f4e034c78bc414be5527ef'/>
<id>urn:sha1:fcfb2a17733a38b690f4e034c78bc414be5527ef</id>
<content type='text'>
This persists the used server_fqdn on connection. This makes sure the
user does not need to specify the FQDN every time.
</content>
</entry>
<entry>
<title>Implement SQL migrations</title>
<updated>2026-04-06T14:37:36Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-06T09:04:53Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=34d52bf961071348d8262e6d08d1703530ff8556'/>
<id>urn:sha1:34d52bf961071348d8262e6d08d1703530ff8556</id>
<content type='text'>
This allows to update the SQL schema incrementally.
</content>
</entry>
<entry>
<title>Introduce class DB</title>
<updated>2026-04-03T19:42:15Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-03T19:29:39Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=2dc31225e08260a4a8f84fd61623e28f1c8c001e'/>
<id>urn:sha1:2dc31225e08260a4a8f84fd61623e28f1c8c001e</id>
<content type='text'>
This centralises database related code in one class.
</content>
</entry>
<entry>
<title>Add *_futures to analysis_options.yaml</title>
<updated>2026-04-03T19:42:08Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-03T17:49:29Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=a406df320080bf31e32cb181136928793cb5d37b'/>
<id>urn:sha1:a406df320080bf31e32cb181136928793cb5d37b</id>
<content type='text'>
These options should avoid making typical mistakes in asynchronous code.
</content>
</entry>
<entry>
<title>Add DB schema version check</title>
<updated>2026-03-20T20:10:12Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-20T20:10:12Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=09c34e0f373d48f5993598c76fa176c8ed2fd4cd'/>
<id>urn:sha1:09c34e0f373d48f5993598c76fa176c8ed2fd4cd</id>
<content type='text'>
This version is only compatible with the schema version 0. No migrations
are implemented. Thus the DB is only accessed if the schema version
saved as user_version is as expected.
</content>
</entry>
<entry>
<title>Add reading server domain name from SQLite3 DB</title>
<updated>2026-03-20T19:48:52Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-20T16:02:39Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=09330228991b73ede49ed186f74a2c4f306d2e20'/>
<id>urn:sha1:09330228991b73ede49ed186f74a2c4f306d2e20</id>
<content type='text'>
It is annoying to type the server domain name on every app start. This
should be way more ergonomic.

As a minimal first step reading from the database is implemented and
tested with an externally injected database.
</content>
</entry>
<entry>
<title>Make ConnectionPage a StatefulWidget</title>
<updated>2026-03-10T16:53:34Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-10T16:53:34Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=0f32a2c2aab78b882fff10a6b81ddd271bcb17b0'/>
<id>urn:sha1:0f32a2c2aab78b882fff10a6b81ddd271bcb17b0</id>
<content type='text'>
This allows to store the fully qualified domain name (FQDN) of the MQTT
broker and display it if the user visits the page again.

The old behaviour was that the text input field was empty.
</content>
</entry>
<entry>
<title>Implement server selection</title>
<updated>2026-03-08T16:53:53Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-08T16:53:53Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=6ee59e8c2aaf69951f6f80003c23f9cd44976ce1'/>
<id>urn:sha1:6ee59e8c2aaf69951f6f80003c23f9cd44976ce1</id>
<content type='text'>
This lets the user select the fully qualified domain name (FQDN) of the
MQTT broker.

The FQDN is not yet preserved after a manual disconnect.
</content>
</entry>
<entry>
<title>Switch completely to connection state machine</title>
<updated>2026-03-08T16:27:52Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-08T16:27:52Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=4bc034c7ab627c50aba7e2ce4da360c14465c150'/>
<id>urn:sha1:4bc034c7ab627c50aba7e2ce4da360c14465c150</id>
<content type='text'>
This makes use of the state machine in the UI and implements all states
and transitions planned so far.
</content>
</entry>
<entry>
<title>Add manual disconnect</title>
<updated>2026-03-08T15:49:42Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-08T15:49:16Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=ef8877ccffe0ebcc8f9f1c0bb6db372fa0886c2a'/>
<id>urn:sha1:ef8877ccffe0ebcc8f9f1c0bb6db372fa0886c2a</id>
<content type='text'>
This allows going back to the connection page and to choose a different
server. Furthermore it might be useful to force a new connection attempt
while auto-reconnect might be in a delay state.
</content>
</entry>
<entry>
<title>Remove automatic initial connection</title>
<updated>2026-03-07T15:35:59Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-07T15:35:13Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=796a2b21e8b5989187bfc7d4ddb7ba648038cbca'/>
<id>urn:sha1:796a2b21e8b5989187bfc7d4ddb7ba648038cbca</id>
<content type='text'>
The user should provide the fully qualified domain name (FQDN) of the
MQTT broker manually and then press connect to actually connect
including automated re-connects.

As a first step the initial connect is bound to the manual button in the
bottom bar. To reduce the scope the disconnect button is labeled
"(disabled)" to make clear this is not expected to work.
</content>
</entry>
<entry>
<title>Label button with '(dis)connect'</title>
<updated>2026-03-07T12:03:24Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-07T12:03:24Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=2e15dd323b7c3198e2af10f35f1186d91cc6cfaf'/>
<id>urn:sha1:2e15dd323b7c3198e2af10f35f1186d91cc6cfaf</id>
<content type='text'>
This does not yet work but the correct text based on the page is
displayed.

This is based on a state machine based implementation suitable to
implement the state handling cleanly.
</content>
</entry>
<entry>
<title>Start by default on ConnectionPage</title>
<updated>2026-03-07T10:53:18Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-07T10:53:18Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=a46cb6e94688a65a31248bc4585bccfbc22242f0'/>
<id>urn:sha1:a46cb6e94688a65a31248bc4585bccfbc22242f0</id>
<content type='text'>
This prepares starting connection attempts on manual action only.
</content>
</entry>
<entry>
<title>Allow switching between pages</title>
<updated>2026-03-07T10:45:34Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-07T10:45:34Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=e75d23db9960c6060fd2b530f5878727e0caaf37'/>
<id>urn:sha1:e75d23db9960c6060fd2b530f5878727e0caaf37</id>
<content type='text'>
This prepares manually starting the connection after server name
insertion.
</content>
</entry>
<entry>
<title>Make ConnectionStatus a SafeArea by default</title>
<updated>2026-03-07T10:14:34Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-07T10:13:26Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=b6f6dc481606d0ffb8c06ffb549cb0221b0c6167'/>
<id>urn:sha1:b6f6dc481606d0ffb8c06ffb549cb0221b0c6167</id>
<content type='text'>
This removes the need to write a SafeArea on each use of
ConnectionStatus and replaces it by exactly one occurrence.
</content>
</entry>
<entry>
<title>Add class ConnectionPage</title>
<updated>2026-03-07T10:07:53Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-06T20:45:43Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=6cb5a471a1bb18de802006c1017839c00d1871ad'/>
<id>urn:sha1:6cb5a471a1bb18de802006c1017839c00d1871ad</id>
<content type='text'>
This is a second page to offer a form to set the Sia server name.
</content>
</entry>
<entry>
<title>Move MaterialApp up to class Sia</title>
<updated>2026-03-06T11:49:29Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-06T11:49:29Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=12d36a7457759fdd9a0b3c600dfc81fef36ea37f'/>
<id>urn:sha1:12d36a7457759fdd9a0b3c600dfc81fef36ea37f</id>
<content type='text'>
This makes sure there is only one class instance of MaterialApp.
</content>
</entry>
<entry>
<title>Rename to class DevicesPage</title>
<updated>2026-03-06T11:39:38Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-06T11:39:38Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=2ff436b069564690b204763bc135c3df9611ef0f'/>
<id>urn:sha1:2ff436b069564690b204763bc135c3df9611ef0f</id>
<content type='text'>
The old name class UI was not adding much information and is not well
suited to be differentiated to upcoming other *Page classes.
</content>
</entry>
<entry>
<title>Add `class Sia` as top-level widget</title>
<updated>2026-03-06T11:26:18Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-06T11:26:18Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=5b7084cf9de8f43cdc771f0b5ce92fc15d9e74af'/>
<id>urn:sha1:5b7084cf9de8f43cdc771f0b5ce92fc15d9e74af</id>
<content type='text'>
This simplifies the main function and adheres more to Flutter
conventions.
</content>
</entry>
<entry>
<title>Protect bottom bar with SafeArea</title>
<updated>2026-01-17T20:47:47Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-01-17T20:47:47Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=4b5843336970c8386702191a36ee7e57839b8fd3'/>
<id>urn:sha1:4b5843336970c8386702191a36ee7e57839b8fd3</id>
<content type='text'>
On Android the bottom bar with the connection state used to be hidden by
the three Android navigation buttons.
</content>
</entry>
<entry>
<title>Indicate disconnected Sia server</title>
<updated>2026-01-17T20:12:25Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-01-17T20:12:25Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=b38f887c0ed04e32ae62f097288fd318b4d3c8f2'/>
<id>urn:sha1:b38f887c0ed04e32ae62f097288fd318b4d3c8f2</id>
<content type='text'>
There are now three instead of two status states:

- "Connected" / MQTT connected, Sia server connected
- "Connection issue" / MQTT connected, Sia server disconnected
- "Disconnected" / all other cases (Sia server connection unknown)
</content>
</entry>
<entry>
<title>Add automatic reconnecting</title>
<updated>2026-01-17T19:56:55Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-01-17T19:53:07Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=f083de5a7d4bbc296e5fa07707a4a179f780f85b'/>
<id>urn:sha1:f083de5a7d4bbc296e5fa07707a4a179f780f85b</id>
<content type='text'>
This allows to use the app after a temporary disconnect between app and
MQTT broker.
</content>
</entry>
<entry>
<title>Display MQTT connection status</title>
<updated>2026-01-17T19:56:45Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-01-16T20:49:22Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=1dc47d1991910d95b4472ed3e415adb0d46a6617'/>
<id>urn:sha1:1dc47d1991910d95b4472ed3e415adb0d46a6617</id>
<content type='text'>
The user otherwise cannot trust the state of the contacts because the
app could just be disconnected from the broker.
</content>
</entry>
</feed>
