<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sia-app, branch main</title>
<subtitle>IoT app</subtitle>
<id>https://cgit.xengineering.eu/sia-app/atom</id>
<link rel='self' href='https://cgit.xengineering.eu/sia-app/atom'/>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/'/>
<updated>2026-04-24T19:54:38Z</updated>
<entry>
<title>Update dependencies</title>
<updated>2026-04-24T19:54:38Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-24T19:33:50Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=e7e2a0bac24e06c37041ebd37fbfc4e33d3eeb22'/>
<id>urn:sha1:e7e2a0bac24e06c37041ebd37fbfc4e33d3eeb22</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Switch to fvm</title>
<updated>2026-04-24T19:53:56Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-24T19:16:39Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=6593dff284d1ab7fdb85b0992ebfdd9bbeed7441'/>
<id>urn:sha1:6593dff284d1ab7fdb85b0992ebfdd9bbeed7441</id>
<content type='text'>
This tracks the used Flutter SDK version compatible with the [fvm][1]
Flutter version management tool.

It allows to make the build reproducible. The build documentation is
adapted and the used Flutter version committed.

[1]: https://fvm.app
</content>
</entry>
<entry>
<title>Add CHANGELOG.md</title>
<updated>2026-04-14T18:45:42Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-14T18:45:42Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=a59c7dd5dcbf841cb042505a4fd30973a9f38dd9'/>
<id>urn:sha1:a59c7dd5dcbf841cb042505a4fd30973a9f38dd9</id>
<content type='text'>
</content>
</entry>
<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>Merge cover control</title>
<updated>2026-04-08T09:29:27Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-08T09:29:27Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=9048de5d0ad7611fb92a51b59be332921a93b943'/>
<id>urn:sha1:9048de5d0ad7611fb92a51b59be332921a93b943</id>
<content type='text'>
This allows the user to move covers controlled by the Sia server to move
up, down and to stop them.
</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>Update dependencies</title>
<updated>2026-04-07T12:07:58Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-07T12:07:58Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=628c39ca920213696c8f792af344643cb6e60589'/>
<id>urn:sha1:628c39ca920213696c8f792af344643cb6e60589</id>
<content type='text'>
No special reason for this update apart from using up-to-date software.
</content>
</entry>
<entry>
<title>Merge persisting server fully qualified domain name</title>
<updated>2026-04-06T15:03:46Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-04-06T15:03:46Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=877a39e186699164e68ea969012a4f1ec6840ef8'/>
<id>urn:sha1:877a39e186699164e68ea969012a4f1ec6840ef8</id>
<content type='text'>
This allows to save the server fully qualified domain name (FQDN). The
user does not have to insert this on every app start.

Saved is the value of the corresponding text field on the last press on
the connect button.
</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>Add package path</title>
<updated>2026-03-20T19:48:26Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-20T18:58:57Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=f021bffe2b37af563037195e0e93a74849cd860b'/>
<id>urn:sha1:f021bffe2b37af563037195e0e93a74849cd860b</id>
<content type='text'>
This is added to join paths.
</content>
</entry>
<entry>
<title>Add sqlite3 package</title>
<updated>2026-03-20T16:20:13Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-20T16:17:08Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=2aa1aa0d29fd551509d4a1ebb2a0a5470fc460d7'/>
<id>urn:sha1:2aa1aa0d29fd551509d4a1ebb2a0a5470fc460d7</id>
<content type='text'>
Application data should be stored in a single sqlite3 database. This
allows pretty mature and powerful data storage which works on Linux,
Android, iOS, MacOS and Windows.
</content>
</entry>
<entry>
<title>Add path_provider package</title>
<updated>2026-03-20T15:59:45Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-20T15:59:45Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=5fa8c6496076422cd3f117978654e76edbda51dc'/>
<id>urn:sha1:5fa8c6496076422cd3f117978654e76edbda51dc</id>
<content type='text'>
This is required to get the "Application Support" directory on Linux,
Android, iOS, MacOS and Windows.

This folder is used to store persistence of the Sia app.
</content>
</entry>
<entry>
<title>Merge MQTT broker selection</title>
<updated>2026-03-10T16:56:51Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-03-10T16:56:51Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/sia-app/commit/?id=1809a88c679fcd17f29c13ddd47732bb65db96b2'/>
<id>urn:sha1:1809a88c679fcd17f29c13ddd47732bb65db96b2</id>
<content type='text'>
This allows the user to select the MQTT broker and thus Sia server
instance which should be used.
</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>
</feed>
