summaryrefslogtreecommitdiff
path: root/main.go
AgeCommit message (Collapse)Author
2025-12-20Implement passing user configurationxengineering
This allows overwriting values of the default configuration with custom ones.
2025-12-20Use default configxengineering
The default config JSON is embedded as bytes into the executable. Instead of constants the default values are now parsed from these embedded bytes.
2025-12-20Separate Homematic codexengineering
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.
2025-12-20Separate MQTT logicxengineering
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.
2025-12-20Raise to QoS 1xengineering
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.
2025-12-20Switch ClientId to `siaserver`xengineering
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
2025-12-20Publish state in retained modexengineering
This ensures the MQTT broker caches the state when it is sent by Sia and sends it via MQTT to new MQTT clients. Thus no state polling is required by the MQTT client.
2025-12-20Reduce polling period to 50 msxengineering
The human reaction time is roughly 100 ms. The Nyquist-Shannon sampling theorem [1] is used for an approximation how often it is required to sample without humans noticing any delays. [1]: https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem
2025-12-20Add cache implementationxengineering
This avoids frequent MQTT messages containing the same state.
2025-12-20Add continuous polling executionxengineering
This state polls the device states with 500 milliseconds period and publishes the state on every poll.
2025-12-20Refactor with Poll() functionxengineering
This function allows to reduce the lines of code in main() further.
2025-12-20Refactor with Start() and Stop()xengineering
This reduces the lines of code of the main() function significantly and groups all start and stop actions.
2025-12-20Add logging for init and de-init stepsxengineering
This helps to debug potential issues.
2025-12-20Run go fmtxengineering
2025-12-20Refactor MQTT connect / disconnectxengineering
2025-12-20Change topic structurexengineering
The new structure for the contact states is the following. <prefix>/contact/<id>/state The reasoning is: - `<prefix>` allows using multiple (Sia) services on the same broker - `contact` as device type indicates contact-specific semantics - `<id>` makes different contacts distinguishable - `state` is the actual payload
2025-12-20Change topic prefix to `sia`xengineering
The old prefix `sia-server` was longer and not completely correct. The topics under this prefix never belong more to the server or the clients. Thus only `sia` seams to be a good solution.
2025-12-20Refactor with OPENCCU constantxengineering
This unifies the HOST and PORT constants used so far and removes the need for a fmt.Sprintf() call.
2025-12-20Publish contact state with MQTTxengineering
This demonstrates the ability to take information from the Homematic system to MQTT. It is a major proof of concept step towards a minimal viable product (MVP) Sia server.
2025-12-10Adopt homematic-go examplexengineering
This requests a list of devices from the Homematic central device and then queries the state of every `SHUTTER_CONTACT`. This is a good starting point for the server logic.
2025-12-08Add hello world as main.goxengineering
This is just a minimal starting point for the repository.