{"id":946,"date":"2025-11-09T00:43:11","date_gmt":"2025-11-08T22:43:11","guid":{"rendered":"https:\/\/gentz.cloud\/?p=946"},"modified":"2025-11-09T00:44:02","modified_gmt":"2025-11-08T22:44:02","slug":"fixing-knx-multicast-issues-on-a-gira-homeserver-debian-build","status":"publish","type":"post","link":"https:\/\/gentz.cloud\/?p=946","title":{"rendered":"Fixing KNX Multicast Issues on a Gira Homeserver Debian Build"},"content":{"rendered":"\n<p>A common issue when running the Homeserver firmware on a generic Debian system is that <strong>KNX multicast communication (224.0.23.12:3671)<\/strong> only starts working <em>after<\/em> manually restarting the service via:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo systemctl restart hs_starter\n\n<\/pre><\/div>\n\n\n<p>This happens because <code>hs_admin<\/code> is launched too early during boot\u2014before the network interface is fully initialized with its IPv4 address and multicast routing. When you restart the service later, the interface is already ready, so multicast works immediately.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix \u2013 Wait for network before starting<\/h3>\n\n\n\n<p>You can fix this permanently by updating the systemd service definition <code>\/etc\/systemd\/system\/hs_starter.service<\/code> so that it explicitly waits for the network to come online and ensures a multicast route exists before the Homeserver starts.<\/p>\n\n\n\n<p>Replace your existing service file with:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo tee \/etc\/systemd\/system\/hs_starter.service &gt;\/dev\/null &lt;&lt;&#039;EOF&#039;\n&#x5B;Unit]\nDescription=Homeserver Starter\nAfter=network-online.target\nWants=network-online.target\n\n&#x5B;Service]\nType=oneshot\nEnvironment=HS_IF=eth0\n\n# Wait until the interface is UP (max 30s)\nExecStartPre=\/bin\/sh -c &#039;for i in $(seq 1 30); do ip link show &quot;$HS_IF&quot; | grep -q &quot;state UP&quot; &amp;&amp; exit 0; sleep 1; done; echo &quot;WARN: $HS_IF not UP&quot;; exit 0&#039;\n\n# Wait until an IPv4 address is assigned (max 30s)\nExecStartPre=\/bin\/sh -c &#039;for i in $(seq 1 30); do ip -4 addr show dev &quot;$HS_IF&quot; | grep -q &quot;inet &quot; &amp;&amp; exit 0; sleep 1; done; echo &quot;WARN: no IPv4 on $HS_IF&quot;; exit 0&#039;\n\n# Ensure multicast route is available (idempotent)\nExecStartPre=\/bin\/sh -c &#039;ip route show 224.0.0.0\/4 &gt;\/dev\/null || ip route add 224.0.0.0\/4 dev &quot;$HS_IF&quot;&#039;\n\n# Start the main init script (which launches hs_main and hs_admin)\nExecStart=\/etc\/init.d\/hs_starter\nRemainAfterExit=yes\n\n&#x5B;Install]\nWantedBy=multi-user.target\nEOF\n\nsudo systemctl daemon-reload\nsudo systemctl restart hs_starter.service\n\n<\/pre><\/div>\n\n\n<p>After this change, multicast works immediately after boot, no manual restart required.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Disclaimer<\/h2>\n\n\n\n<p>This guide is published&nbsp;<strong>for educational and training purposes only<\/strong>.<br>It is not affiliated with or endorsed by&nbsp;<strong>Gira Giersiepen GmbH &amp; Co. KG<\/strong>.<br>All product names, trademarks, and registered trademarks are property of their respective owners.<\/p>\n\n\n\n<p>The intention of this post is to&nbsp;<strong>document a technical experiment<\/strong>&nbsp;on legacy hardware (Dell Optiplex FX160) for learning purposes.<br>If you plan to run a Gira Homeserver in production, please obtain the official hardware and licenses directly from Gira.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A common issue when running the Homeserver firmware on a generic Debian system is that KNX multicast communication (224.0.23.12:3671) only starts working after manually restarting the service via: This happens because hs_admin is launched too early during boot\u2014before the network interface is fully initialized with its IPv4 address and multicast routing. When you restart the<\/p><\/div>\n<div class=\"blog-btn\"><a href=\"https:\/\/gentz.cloud\/?p=946\" class=\"home-blog-btn\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-946","post","type-post","status-publish","format-standard","hentry","category-tips-ricks"],"_links":{"self":[{"href":"https:\/\/gentz.cloud\/index.php?rest_route=\/wp\/v2\/posts\/946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gentz.cloud\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gentz.cloud\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gentz.cloud\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gentz.cloud\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=946"}],"version-history":[{"count":2,"href":"https:\/\/gentz.cloud\/index.php?rest_route=\/wp\/v2\/posts\/946\/revisions"}],"predecessor-version":[{"id":948,"href":"https:\/\/gentz.cloud\/index.php?rest_route=\/wp\/v2\/posts\/946\/revisions\/948"}],"wp:attachment":[{"href":"https:\/\/gentz.cloud\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gentz.cloud\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gentz.cloud\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}