<feed xmlns='http://www.w3.org/2005/Atom'>
<title>iot-contact/fw/src, branch binary-descriptors</title>
<subtitle>IoT device to check if doors and windows are closed or open</subtitle>
<id>https://cgit.xengineering.eu/iot-contact/atom?h=binary-descriptors</id>
<link rel='self' href='https://cgit.xengineering.eu/iot-contact/atom?h=binary-descriptors'/>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/'/>
<updated>2025-03-22T20:21:44Z</updated>
<entry>
<title>fw: firmware: Use binary descriptors for metadata</title>
<updated>2025-03-22T20:21:44Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-22T20:21:44Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=f4eccbe461f8c33144c72cfe2d533ecda4072d15'/>
<id>urn:sha1:f4eccbe461f8c33144c72cfe2d533ecda4072d15</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fw: firmware: Add app build version output</title>
<updated>2025-03-22T20:21:44Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-22T20:21:44Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=0c771fb52f864c867d2fcff795e4d3ebd8de1c7c'/>
<id>urn:sha1:0c771fb52f864c867d2fcff795e4d3ebd8de1c7c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fw: Remove empty main</title>
<updated>2025-03-22T20:21:44Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-22T20:21:44Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=9f2ce4cc9ba9ad45a7e88247f8c1fb0953717b0e'/>
<id>urn:sha1:9f2ce4cc9ba9ad45a7e88247f8c1fb0953717b0e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fw: network: Set custom hostname</title>
<updated>2025-03-21T21:41:35Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:41:35Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=3447721d20146ba0447ee9998838266619e4c789'/>
<id>urn:sha1:3447721d20146ba0447ee9998838266619e4c789</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fw: network: Rename from mac</title>
<updated>2025-03-21T21:40:53Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:40:53Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=7447a3875ea64b1fd45aaae850085b0cac5c8e50'/>
<id>urn:sha1:7447a3875ea64b1fd45aaae850085b0cac5c8e50</id>
<content type='text'>
The scope of the mac.{c,h} files was very small. Furthermore more
network related logic needs a place. Thus making the name more general
makes sense.
</content>
</entry>
<entry>
<title>fw: js: Add web frontend to display heartbeat</title>
<updated>2025-03-21T21:39:30Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:39:30Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=2ddf4682f4c11f4356b030b6474fb12fea55b8ea'/>
<id>urn:sha1:2ddf4682f4c11f4356b030b6474fb12fea55b8ea</id>
<content type='text'>
This makes it transparent to the user that there is an active connection
to the firmware. If the connection is broken the user notices that
quickly and can re-load the page.
</content>
</entry>
<entry>
<title>fw: ws: Add WebSocket interface</title>
<updated>2025-03-21T21:33:41Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:33:41Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=e042129eddeb06c9272a6544c67f9222c347ab10'/>
<id>urn:sha1:e042129eddeb06c9272a6544c67f9222c347ab10</id>
<content type='text'>
The primary interface for this firmware was so far HTTP. This protocol
is not suitable for small and bidirectional messages which are
time-critical.

If something like this needs to be implemented with HTTP the best
approach is likely long-polling which at least makes it possible for the
server / the firmware to send data to the client / user as reaction to
an event like a closed door sensor.

TCP would fix this issue and is a good choice. Nevertheless web clients
are not allowed to open TCP connections for security purposes.

Thus the WebSocket protocol was created to fill this gap.

To not duplicate the any effort the WebSocket API should be used for
small, time-critical messages for all clients (one with TCP support like
CLI tools as well as web clients).

HTTP is still kept to provide a web page but also for functionality
where HTTP is more suitable like firmware uploads.
</content>
</entry>
<entry>
<title>fw: heart: Add zbus-based heartbeat code</title>
<updated>2025-03-21T21:28:09Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:28:09Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=fb9bf2457dae53cd10a916c9beac6d292e28654a'/>
<id>urn:sha1:fb9bf2457dae53cd10a916c9beac6d292e28654a</id>
<content type='text'>
The heartbeat of the firmware might be used for multiple purposes. It
can trigger a blinking LED on the PCB, can be displayed in a client
program or might serve additional purposes.

Since at least display in client programs should be implemented and
multiple clients should be support in long term it improves the code
structure to use a zbus channel here to publish heartbeat messages in a
publish-subscribe pattern.

That way the publishing of the heartbeat message and the receiving by an
unknown number of observers is completely decoupled. A central trait of
the publish-subscribe pattern and an advantage for a modular code
structure.
</content>
</entry>
<entry>
<title>fw: http: Add /favicon.ico handler</title>
<updated>2025-03-21T21:26:19Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:26:19Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=61e108a0ae856b3e1c849482d0008f698d41db27'/>
<id>urn:sha1:61e108a0ae856b3e1c849482d0008f698d41db27</id>
<content type='text'>
Common browsers always request this URL. Not responding to it shows up
as an error.

To silence this error report the firmware just responds with HTTP 204 No
Content since a favicon is currently not available.
</content>
</entry>
<entry>
<title>fw: html: Add missing license notice</title>
<updated>2025-03-21T21:25:16Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:25:16Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=690f38b8212b2638ec323d19869cc0c14487375e'/>
<id>urn:sha1:690f38b8212b2638ec323d19869cc0c14487375e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fw: html: Move HTML to src folder</title>
<updated>2025-03-21T21:24:27Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:24:27Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=dc146be244c8063971d7b769f35c8c9991cf144a'/>
<id>urn:sha1:dc146be244c8063971d7b769f35c8c9991cf144a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fw: http: Add HTML resource /</title>
<updated>2025-03-21T21:23:47Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:23:47Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=2430e8557685a8af292ae82ca11ec59acb365390'/>
<id>urn:sha1:2430e8557685a8af292ae82ca11ec59acb365390</id>
<content type='text'>
This provides the index HTML page.
</content>
</entry>
<entry>
<title>fw: syslog: Adjust log levels</title>
<updated>2025-03-21T21:23:32Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:23:32Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=b912c63ca9724a31f57226a44e87954e4fbd46c4'/>
<id>urn:sha1:b912c63ca9724a31f57226a44e87954e4fbd46c4</id>
<content type='text'>
This follows the pattern:

* ERR in error handler if statements
* DBG at top of each function and on demand
* INF at end of function
</content>
</entry>
<entry>
<title>fw: mac: Implement MAC address setting</title>
<updated>2025-03-21T21:22:51Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:22:51Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=07d694f3d21ffc1b69638b8732ffd630affc9768'/>
<id>urn:sha1:07d694f3d21ffc1b69638b8732ffd630affc9768</id>
<content type='text'>
The used MAC address is from an example range. Later it can easily be
combined with reading from a MAC-providing EEPROM chip to using a unique
hardware MAC on the device.
</content>
</entry>
<entry>
<title>fw: Use SLAAC for network configuration</title>
<updated>2025-03-21T21:15:46Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:15:46Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=fbed749cd316f1c9fe8dbe8a564b41f93cf0ac1f'/>
<id>urn:sha1:fbed749cd316f1c9fe8dbe8a564b41f93cf0ac1f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fw: syslog: Add static syslog logging</title>
<updated>2025-03-21T21:07:26Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T21:07:26Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=fcbd6ac3415d4a122d21b2e379ccf170620f45da'/>
<id>urn:sha1:fcbd6ac3415d4a122d21b2e379ccf170620f45da</id>
<content type='text'>
Network-based logging via the syslog protocol allows to log from many
IoT devices to a central log server.

This makes reading logs way easier. Choosing UDP removes the need for
logic keeping a state. Maybe dropped packages are acceptable for the use
case but should be rare anyway.
</content>
</entry>
<entry>
<title>fw: Remove GPIO-based logic</title>
<updated>2025-03-21T20:52:38Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-03-21T20:52:38Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=f0561bc721f783487ebdd3cbd1424cf116d48712'/>
<id>urn:sha1:f0561bc721f783487ebdd3cbd1424cf116d48712</id>
<content type='text'>
This makes it easier to develop the whole network-related firmware parts
on a simulation board instead of hardware.

The nucleo_f767zi board has likely a hardware bug making Ethernet
sometimes fail. This is not suitable for development.
</content>
</entry>
<entry>
<title>fw: Switch to MPL 2.0</title>
<updated>2025-02-11T10:59:32Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-02-11T06:14:29Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=57182e7bfad6c635140184db97477559393e2047'/>
<id>urn:sha1:57182e7bfad6c635140184db97477559393e2047</id>
<content type='text'>
The Mozilla Public License seems to be suitable for this firmware
project. See the original license text for details.

This commit also adds a `.txt` suffix to the LICENSE file to make the
file type more visible to humans and tools.
</content>
</entry>
<entry>
<title>fw: Move content of `firmware` here</title>
<updated>2025-02-11T05:58:50Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-02-11T05:58:50Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/iot-contact/commit/?id=304e1e443dc1283efbd1fe8b4a72c13f6cfc2fe4'/>
<id>urn:sha1:304e1e443dc1283efbd1fe8b4a72c13f6cfc2fe4</id>
<content type='text'>
This makes the name shorter which is especially relevant for Git commit
messages.
</content>
</entry>
</feed>
