<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.deprelledelanieppe.be/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Apn</id>
	<title>PN Wiki - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.deprelledelanieppe.be/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Apn"/>
	<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php/Sp%C3%A9cial:Contributions/Apn"/>
	<updated>2026-09-18T11:27:35Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.45.4</generator>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Fichier:Armes_Samyn.png&amp;diff=1016</id>
		<title>Fichier:Armes Samyn.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Fichier:Armes_Samyn.png&amp;diff=1016"/>
		<updated>2026-09-16T11:24:17Z</updated>

		<summary type="html">&lt;p&gt;Apn : Armes de la famille de Philippe Samyn&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
Armes de la famille de Philippe Samyn&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Familles_contemporaines_de_la_noblesse_belge&amp;diff=1015</id>
		<title>Familles contemporaines de la noblesse belge</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Familles_contemporaines_de_la_noblesse_belge&amp;diff=1015"/>
		<updated>2026-09-16T11:23:45Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* S */ Samyn&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Cette page est un &#039;&#039;[https://fr.wikipedia.org/wiki/Fork_(d%C3%A9veloppement_logiciel) fork]&#039;&#039; démarré en février 2019 à partir de la version d&#039;archive de la page de WikipédiA en date du 5 janvier 2018. De nombreuses altérations ont été introduites depuis janvier 2018, rendant la page de WikipédiA lacunaire.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette liste de &#039;&#039;&#039;familles contemporaines de la noblesse belge&#039;&#039;&#039; prend en compte uniquement des familles faisant actuellement partie officiellement de la noblesse belge à l&#039;exclusion des familles éteintes, de noblesse non reconnue ou de noblesse étrangère ayant soit la nationalité belge soit résidant dans le pays et n&#039;ayant pas introduit une requête d&#039;incorporation dans la noblesse auprès de S.M. le roi des Belges.&lt;br /&gt;
&lt;br /&gt;
Cette liste non exhaustive est reprise de façon plus complète dans l’&#039;&#039;État présent de la noblesse belge&#039;&#039;, qui, quoiqu&#039;il ne soit pas une publication officielle (comme le &#039;&#039;Nederland&#039;s Adelsboek&#039;&#039;), n&#039;en présente pas moins, malgré certaines erreurs, un caractère relativement fiable.&lt;br /&gt;
&lt;br /&gt;
== Statistiques ==&lt;br /&gt;
&lt;br /&gt;
En 2015, il y avait environ {{formatnum:32500}} personnes faisant partie de la noblesse belge et réparties dans {{formatnum:1196}} familles&amp;lt;ref name=&amp;quot;ANRB_284&amp;quot;&amp;gt;&#039;&#039;Bulletin trimestriel&#039;&#039;, publié par &#039;&#039;Association de la noblesse du royaume de Belgique&#039;&#039;, {{numéro|284}}, octobre 2015.&amp;lt;/ref&amp;gt;, dont :&lt;br /&gt;
* 356 appartiennent à la noblesse antérieure à la Révolution française ;&lt;br /&gt;
* 6 ont reçu concession de noblesse de Napoléon {{Ier}} ;&lt;br /&gt;
* 1 a reçu concession de noblesse de François II, empereur du Saint-Empire ;&lt;br /&gt;
* 1 a reçu concession de noblesse de Louis XVIII ;&lt;br /&gt;
* 19 ont reçu concession de noblesse de Guillaume {{Ier}} ;&lt;br /&gt;
* 50 ont reçu concession de noblesse du roi Léopold {{Ier}} ;&lt;br /&gt;
* 92 ont reçu concession de noblesse du roi Léopold II ;&lt;br /&gt;
* 109 ont reçu concession de noblesse du roi Albert {{Ier}} ;&lt;br /&gt;
* 29 ont reçu concession de noblesse du roi Léopold III ;&lt;br /&gt;
* 5 ont reçu concession de noblesse du prince Charles de Belgique ;&lt;br /&gt;
* 269 ont reçu concession de noblesse du roi Baudouin ;&lt;br /&gt;
* 210 ont reçu concession de noblesse du roi Albert II ;&lt;br /&gt;
* 49 ont reçu concession de noblesse du roi Philippe.&lt;br /&gt;
&lt;br /&gt;
Environ un tiers de la noblesse belge plonge ses racines dans la noblesse du Saint-Empire et le Royaume de France, avec des influences issues du système nobiliaire des Habsbourg. Les deux tiers restants, sont plus récents et ont été anoblis aux {{s mini-|XIX}}, {{s2-|XX|XXI}} par les rois des Belges, généralement pour services rendus à la nation.&lt;br /&gt;
&lt;br /&gt;
== Le système onomastique ==&lt;br /&gt;
Contrairement à un pays comme l&#039;Allemagne  où tous les nobles se voient attribuer la particule nobiliaire &#039;&#039;von&#039;&#039;, rien ne distingue officiellement en Belgique les noms des familles nobles des non nobles, comme c&#039;est également le cas dans d&#039;autres pays comme l&#039;Italie, la Pologne…&lt;br /&gt;
Seules quelques familles d&#039;origine féodale ne sont connues que par leur nom de terre.&lt;br /&gt;
&lt;br /&gt;
Toutefois, à la fin du {{s-|XIX|e}}, par imitation de la France où la noblesse, outre son patronyme, se faisait connaître par le nom de sa seigneurie, et aussi par l&#039;influence de l&#039;œuvre de romanciers comme Alexandre Dumas, de nombreuses familles belges, nobles ou non, ont sollicité les tribunaux, malgré la fréquente faiblesse des arguments produits, afin de se créer des noms faisant croire à tort ou à raison à l&#039;existence dans cette famille d&#039;une antique seigneurie. Souvent, il s&#039;agissait simplement de l&#039;ajout d&#039;un nom d&#039;alliance ou d&#039;une résidence campagnarde ou encore du maquillage de l&#039;article néerlandais &#039;&#039;De&#039;&#039; (signifiant &amp;quot;Le&amp;quot; ou &amp;quot;La&amp;quot;) s&#039;écrivant avec une majuscule, en particule française &amp;quot;de&amp;quot;, s&#039;écrivant avec une minuscule. Mais tout cela était fait&#039;&#039; motu proprio&#039;&#039; par les requérants.&lt;br /&gt;
&lt;br /&gt;
== La hiérarchie nobiliaire belge ==&lt;br /&gt;
La hiérarchie en Belgique est fixée par la loi du 12 décembre 1838 :&lt;br /&gt;
* Prince [en néerlandais Prins(es)] ; il existe 9 familles princières : d&#039;Arenberg (1576, admis en Belgique en 1953), de Ligne (Saint-Empire, 1601), de Croÿ (prince de Solre en 1677, prince du Saint-Empire en 1742), Habsbourg-Lorraine  (incorporé en 1978 et 1983), Lobkowicz (Saint-Empire 1624, admis en Belgique en 1958), de Merode (confirmation des titres de prince de Rubempré et d&#039;Everberg en 1823, et prince de Grimberghe en 1842 pour l&#039;aîné ; prince de Merode à tous en 1930), Chimay (admis en 1824); Swiatopolk-Czetwertynski (princes en Pologne depuis 1495, reconnu en 2007) ; Wellesley (princes de Waterloo).&lt;br /&gt;
* Duc [en néerlandais Hertog(in)] ; il existe 5 familles ducales (d&#039;Arenberg, de Beaufort-Spontin, de Looz-Corswarem, d&#039;Ursel  et de Croÿ). Le titre de « duc de Brabant » est traditionnellement porté par le prince héritier ou la princesse héritière du royaume.&lt;br /&gt;
* Marquis [en néerlandais &#039;&#039;Markgraaf&#039;&#039; ou &#039;&#039;Markies / Markgravin&#039;&#039; ou Markiezin] ; il existe 10 familles portant ce titre : d&#039;Assche, de Beauffort, de la Boëssière-Thiennes, Imperiali des Princes de Francavilla, du Parc Locmaria, de Radiguès, Ruffo de Bonneval de La Fare des Comtes de Sinopoli de Calabre, de Trazegnies, Westerloo (titre porté par l&#039;aîné des princes de Merode), d&#039;Yve.&lt;br /&gt;
* Comte [en néerlandais &#039;&#039;Graaf / Gravin&#039;&#039;] ; il existe environ 85 familles portant ce titre, dont les plus anciennes portant celui de Comte du Saint-Empire telles que les : de Lannoy ; de Limburg Stirum ; de Looz-Corswarem ; de Liedekerke ; d&#039;Oultremont ; de Renesse ; etc.&lt;br /&gt;
* Vicomte [en néerlandais &#039;&#039;Burggraaf / Burggravin&#039;&#039;] ; il existe environ 35 familles portant ce titre.&lt;br /&gt;
* Baron [en néerlandais &#039;&#039;Baron(es)&#039;&#039;] ; il existe environ 325 familles portant ce titre.&lt;br /&gt;
* Chevalier [en néerlandais &#039;&#039;Ridder&#039;&#039;, pas d&#039;équivalent féminin] ; il existe environ 120 familles portant ce titre.&lt;br /&gt;
* Écuyer [en néerlandais &#039;&#039;Jonkheer / Jonkvrouw&#039;&#039;] : le titre se porte. Ce titre signifie l&#039;appartenance simple à la noblesse (environ 500 familles).&lt;br /&gt;
&lt;br /&gt;
Quelques familles belges sont d&#039;anciennes maisons souveraines reprises avec leur titres respectifs de princes ou comtes dans la noblesse belge : Arenberg, Croÿ, Limburg-Stirum et Lobkowicz.&lt;br /&gt;
&lt;br /&gt;
== Liste des familles contemporaines de noblesse belge ==&lt;br /&gt;
Cette liste concerne uniquement les familles toujours existantes faisant partie officiellement de la noblesse belge, et ne contient donc pas les noms des familles éteintes de la noblesse belge ni des familles éteintes de la noblesse des anciens Pays-Bas du Sud et de la principauté de Liège.&lt;br /&gt;
&lt;br /&gt;
Les noms écrits en caractères gras sont ceux des familles d&#039;&#039;&#039;&#039;ancienne noblesse&#039;&#039;&#039; ayant fait partie dans l&#039;Ancien Régime du Second Ordre et ayant eu de ce fait un rang privilégié dans l&#039;organisation des États, les noms écrits en caractères ordinaires sont ceux des familles de la &#039;&#039;nouvelle noblesse&#039;&#039; ou &#039;&#039;aristocratie bourgeoise&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Seules sont mentionnées dans cette liste les familles jouissant de la noblesse héréditaire.&lt;br /&gt;
La colonne &#039;&#039;&#039;titre(s)&#039;&#039;&#039; ne mentionne que le(s) titre(s) héréditaire(s) porté(s) par une famille donnée.&lt;br /&gt;
&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== A ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;&amp;gt;Ne sont mentionnés dans cette colonne que les titres héréditaires. Par défaut, il s&#039;agit du titre d&#039;écuyer (Jonkvrouw pour les femmes en flamand, sans équivalent en français).&amp;lt;/ref&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Abeele (Vanden)&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 16. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 114. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 7-8.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire et baron à titre personnel à Andries Vanden Abeele en 1989.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes d&#039;Andries Van den Abeele.png|60px|alt=Armes d&#039;Andries Van den Abeele]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Ackere (van)&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 16. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 116-117. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 51 (anno 1355). &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 9-10.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1939, concession du titre de baron transmissible par ordre de primogéniture mâle en 1951.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille van Ackere.png|60px|alt=Armes de la famille van Ackere]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Ackerman&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 11.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire et du titre personnel de baron en 1992.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Blason famille be Ackerman.png|60x60px|alt=Armes de la famille Ackerman]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Aefferden (van)&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 33-38.Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 118-119. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 12-16. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 286 (anno 1609).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Déclaration de noblesse ancienne en 1690. Nomination en tant que membre du corps équestre du Limbourg en 1816, mention sur la {{1ère}} liste officielle des nobles.&amp;lt;br&amp;gt;Concession du titre de vicomte pour tous en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille d&#039;Aefferden.png|60px|alt=Armes d&#039;Aefferden]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Aerssen Beijeren van Voshol (van)&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;Nederland&#039;s Adelsboek&#039;&#039; 79 (1988), {{p.|13-42}}, pour la branche belge: &#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 38-40. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 119. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 16-18. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 179 (anno 1543).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Écuyer en France en 1605; baron en France en 1635. Titre personnel de chevalier en Angleterre en 1611. Nomination en tant que membre du corps équestre de la Hollande en 1814. Reconnaissance du titre de baron pour tous en 1822.&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |[[File:Armes de la famille van Aerssen Beijeren van Voshol.png|60px|alt=Armes d&#039;Aerssen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Agie de Selsaeten&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 42-47. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 121. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 19-24. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 565 (anno 1757).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1890 et adjonction du nom &amp;quot;de Selsaeten&amp;quot; par arrêté royal du 4 avril 1914&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Agie de Selsaeten.png|60px|alt=Armes Agie de Selsaeten]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Alcantara (d&#039;)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Alcantara de Querrieu (d&#039;)&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 48-58. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 123-124. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 29-35. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 506 (anno 1710).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et autorisation de porter le titre de chevalier pour tous en 1842, comtes attribué à la primogéniture mâle en 1852, comtes pour tous en 1881. Adjonction de &#039;&#039;de Querrieu&#039;&#039; à Juan d&#039;Alcantara (1879-1945) et ses fils en 1927.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille d&#039;Alcantara.png|60px|alt=Armes de la famille d&#039;Alcantara.png]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Allard&amp;lt;ref&amp;gt;Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 127-128. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 37-38. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 523 (anno 1722).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron transmissible par primogéniture masculine en 1929.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Allard.png|60px|alt=Armes de la famille Allard]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Almásy de Zsádany et Törökszentmiklós&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (2015), p. 3.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte pour tous en 1815 en Autriche. Reconnaissance de noblesse avec le titre de comte pour tous en 2013.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Almásy.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Anciaux Henry de Faveaux&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 17. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 133-134. &#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 64-68. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 39-44. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 451 (anno 1682).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction de &#039;&#039;Henry de Faveaux&#039;&#039; en 1914, concession de noblesse en 1932, titre de chevalier, puis transmissible au deuxième fils à la primogéniture mâle en 1959. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Armoiries famille Anciaux Henry de Faveaux.png|60px|alt=Armes de la famille Anciaux Henry de Faveaux]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Ancion&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 69-74. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 134-135. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 45-50. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 525 (anno 1723).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1899 et 1906, concession du titre de baron transmissible à la primogéniture mâle en 1899 et 1920.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Armoiries de la famille Ancion.png|60px|alt=Armes de la famille Ancion]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|André-Dumont&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 18. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 136-137. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 56-58. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 501 (anno 1707).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1985.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes d&#039;Andre-dumont.png|60px|alt=Armes d&#039;André-Dumont]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Andrimont (d’)&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 18. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 138. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 52-55. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 151-152 (anno 1523).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1977.&lt;br /&gt;
La famille noble &#039;&#039;Godin&#039;&#039; est une branche cadette de la même famille.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille d&#039;Andrimont.png|60px|alt=Armes d&#039;Andrimont]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Anethan (d&#039;)&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 78-84. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 138-140. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 59-62. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 170-171 (anno 1536).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en Saint-Empire en 1630, concession du titre de baron transmissible à la primogéniture mâle en 1787, membre du corps équestre du Grand-Duché de Luxembourg en tant que baron en 1816, mention dans la {{1ère}} liste officielle des nobles avec le titre de baron transmissible par primogéniture mâle, chevaliers pour les autres. Baron pour tous en 1840.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille d&#039;Anethan.png|60px|alt=Armoiries de la famille d&#039;Anethan]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Anne de Molina&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 85-87. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 140-141. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 63-67. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 262-263 (anno 1599).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1750.&amp;lt;br&amp;gt;Reconnaissance de noblesse en 1871 et adjonction du nom &#039;&#039;de Molina&#039;&#039; en 1885.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Anne de Molina.png|60px|alt=Armes de la famille Anne de Molina]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Annez de Taboada&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 87-93. Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 19. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 142-143. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 68-74. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 280 (anno 1606).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1714 par la Chancellerie de l&#039;Empire, confirmation de noblesse en 1736 par la Chancellerie des Pays-Bas.&amp;lt;br&amp;gt;Reconnaissance de noblesse en 1897 et 1899, titre de chevalier attribué à la primogéniture mâle en 1959.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Annez de Taboada.png|60px|alt=Armes de la famille Annez de Taboada]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Ansiaux&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 19. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 143-144. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 75.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron personnel en 1969, extension du titre de baron attribué à la primogéniture mâle en 1977.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Ansiaux.png|60px|alt=Armes d&#039;Ansiaux]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Arenberg (d&#039;)&#039;&#039;&#039;&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 20. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 150-151. Paul De Win, &#039;&#039;Lettres Patentes de Noblesse octroyées par S.M. Albert II, Roi des Belges 1993-2000&#039;&#039;, 2001, p. 66-67. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 78-81. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 38 (anno 1125).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|duc&amp;lt;br /&amp;gt;prince&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Ancienne famille régnante, cadette des Ligne, maison médiatisée, extraction chevaleresque, comte princier d&#039;Arenberg en 1547, comte du Saint-Empire en 1549, prince du Saint-Empire en 1576, grand d&#039;Espagne de {{1ère}} classe en 1612, duc en 1644, Altesse sérénissime en 1825, reconnu prince-duc en France en 1827 et prince en Belgique en 1953 avec prédicat d&#039;Altesse sérénissime (S.A.S.). Autorisation au Chef de la Maison de porter le titre de duc en Belgique en 1994. La branche cadette, issue d&#039;Alexandre de Croÿ-Chimay d&#039;Arenberg (1590-1629), est aujourd&#039;hui fondue dans celle des princes de Caraman-Chimay.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Arenberg.PNG|60px|alt=Armes d&#039;Arenberg]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&#039;&#039;&#039;Arrazola de Oñate&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 107. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 154-155. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2002), p. 65-66. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 294 (anno 1612). Paul De Win, &#039;&#039;Lettres Patentes de Noblesse octroyées par S.M. Albert II, Roi des Belges 1991-2008&#039;&#039;, Lannoo, 2010 [pas de pagination]. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2015), p. 5-8.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre personnel de chevalier en 1647 et 1663, obtention de noblesse héréditaire en 1654. Membre du corps équestre du Limbourg et inscription sur la {{1ère}} liste officielle des nobles en 1816 avec mention que le titre de baron se transmettra à toute la descendance (branche éteinte).&amp;lt;br&amp;gt;&lt;br /&gt;
Reconnaissances de noblesse en 2001 et en 2008 pour divers membres d&#039;une branche subsistante.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Arrazola de Oñate.png|60px|alt=Armes de la famille éteinte Arrazola de Oñate]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Arschot Schoonhoven (d&#039;)&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 108-112. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 156. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 41 (anno 1226).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Noblesse féodale, reconnaissance de noblesse et du titre de comte pour tous en 1816.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille d&#039;Arschot Schoonhoven.png|60px|alt=Armes d&#039;Arschot de Schoonhoven]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Aspremont Lynden (d&#039;)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Aspremont Lynden de Maillen (d&#039;)&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (1984), p. 113-123. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 157-158. Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, 2008, p. 146-147 (anno 1520).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Confirmation du titre de comte d&#039;Aspremont&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt; Selon Jean-François Houtart dans son ouvrage Anciennes familles de Belgique paru à Bruxelles en 2008, les Lynden n&#039;ont aucun lien avec la maison lorraine d&#039;Aspremont alors qu&#039;ils adpotent le nom &#039;&#039;Aspremont Lynden&#039;&#039; en 1676. Il s&#039;agit d&#039;une usurpation de nom et d&#039;armes. Houtart donne pour littérature à propos de cette famille : Jacques-Henry de la Croix, &#039;&#039;La Maison de Lynden et ses continuateurs les Aspremont Lynden&#039;&#039;, dans le &#039;&#039;Bulletin des Archives verviétoises&#039;&#039;, tome 3, 1953, {{p.|265}}.&amp;lt;/ref&amp;gt; et concession du titre de comte de Lynden et du Saint-Empire en 1676. Nomination en 1816 en tant que membre du corps équestre de Namur avec titre de comte, avec la mention sur la {{1ère}} liste que ce titre sera transmissible à tous les descendants du nom. Adjonction de &amp;quot;&#039;&#039;de Maillen&amp;quot;&#039;&#039; en 1909 pour Guy d&#039;Aspremont Lynden et ses descendants.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille d&#039;Aspremont de Lynden.png|60px|alt=Armoiries de la famille d&#039;Aspremont de Lynden]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Avenne (Vanden)&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 20. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 166. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 102.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire et du titre personnel de chevalier par le roi Baudouin en faveur de Walter Vanden Avenne en 1984.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Blason famille be Vanden Avenne.png|60x60px|alt=Armes de la famille Vanden Avenne]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== B ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Backer (de)&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 21. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 173-174. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 103.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire et du titre personnel de chevalier par le roi Baudouin en faveur d&#039;Adrien-Antoine-Constant de Backer, alias Claude Étienne, en 1985.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Backer.png|60px|alt=Armes de Backer]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Baeyens&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron transmissible par ordre de primogéniture masculine par le roi Léopold II en faveur de Ferdinand Baeyens en 1904.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Baeyens.png|60px|alt=Armes de Baeyens]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bailly de Tilleghem (Le)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;Coomans et al. 2003&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Nomination par les archiducs Albert et Isabelle de Renon le Bailly comme conseiller et maître des requêtes au Grand Conseil de Malines, charge conférant au besoin la noblesse héréditaire, en 1605.&amp;lt;br&amp;gt;Concession du titre personnel de baron de l&#039;Empire, par l&#039;empereur Napoléon {{Ier}}, en faveur de Renon Le Bailly de Tilleghem, en 1813.&amp;lt;br&amp;gt;Reconnaissance de noblesse et désignation comme membre du Corps équestre de la Flandre occidentale avec le titre de baron par le roi Guillaume {{Ier}} en faveur du même en 1816. Il figure sur la {{1ère}} liste officielle des nobles. Par arrêté royal de 1817, le titre de baron fut déclaré pouvoir être porté par lui et tous ses descendants.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Blason famille be Le Bailly de Tilleghem.png|60x60px|alt=Armes de la famille Le Bailly de Tilleghem]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Baines&amp;lt;ref name=&amp;quot;Coomans et al. 2003&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire et du titre personnel de chevalier par le roi Albert II en faveur de Georges Baines en 2000.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Baines.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bandt (de)&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039;, 2003.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul De Win, &#039;&#039;Lettres Patentes de Noblesse octroyées par S.M. Albert II, Roi des Belges 1993-2000&#039;&#039;, Lannoo, 2001, {{p.|68-69}}.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref&amp;gt;Journal officiel du 14 juillet 2008.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire avec le titre personnel de chevalier en 1994; concession du titre personnel de baron en 2009.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Barchman Wuytiers van Vliet&amp;lt;ref name=&amp;quot;Coomans et al. 2003&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse, avec droit de conversion en reconnaissance si des preuves de l&#039;extraction de la maison de Berthout sont apportées, en faveur de Cornelis-Gerard Barchman Wuytiers van Vliet&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;, seigneur de Vliet, par le roi Guillaume {{Ier}} en 1829. Il figure sur la {{5e|liste}} officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Barchman Wuytiers van Vliet.png|60px|alt=Armes de la famille Barchman Wuytiers van Vliet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Baré de Comogne (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et membre du corps équestre de Namur en 1816, titre de baron transmissible à la primogéniture mâle en 1827. Mentions dans les {{1re}} et {{3e|listes}} officielles des nobles. Concession du titre de vicomte pour tous en 1848.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Baré de Comogne.png|60px|alt=Armes de Baré de Comogne.png]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Barquin (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;Coomans et al. 2003&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse par l&#039;empereur Charles VI en faveur de Jean (de) Barquin, seigneur en partie de Rienne, en 1721.&amp;lt;br&amp;gt;Reconnaissance de noblesse en 1981 pour les quatre branches.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Barquin.png|60px|alt=Armes de Barquin]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Barre d&#039;Erquelinnes (de la)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1613, concession du titre de chevalier par le roi Philippe IV, comte d&#039;Erquelinnes par l&#039;empereur Charles VI en 1722. Reconnaissance de noblesse et du titre de comte transmissible à la primogéniture mâle en 1829, 1844 et 1961. Mention dans la liste supplémentaire des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de la Barre d&#039;Erquelinnes.png|60px|alt=Armoiries de la famille de la Barre d&#039;Erquelinnes]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Barsy (de)&amp;lt;ref name=&amp;quot;Coomans et al. 2003&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et autorisation de porter les armes figurant sur la pierre tombale de Bernard de Barsy, son sextaïeul, en faveur de Thierry de Barsy en 1990, puis élevé au titre de baron personnel en 2007&amp;lt;ref&amp;gt;{{Lien web|url=http://archives.lesoir.be/le-roi-anoblit-et-recompense-plusieurs-citoyens_t-20071221-00E95J.html|titre=Thierry de Barsy élevé au titre de Baron|site=lesoir.be}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Famille be de Barsy.png|65x65px|alt=Armes de la famille de Barsy]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bartholomée&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 138-139.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et titre de baron personnel en 1999 pour Pierre Bartholomée.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bassompierre (de)&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1929.&amp;lt;br&amp;gt;Modifications d&#039;armoiries en 1956 et 1960&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;. Concession du titre personnel de baron en 1982&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;. Concession du titre de baron pour tous aux enfants du baron Guy de Bassompierre (1947-1990) en 2014&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (2015), p. 17-18&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason ville fr Chambellay (Maine-et-Loire).png|60px|alt=Armes de la famille de Bassompierre]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bauchau&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Hervé Douxchamp, &#039;&#039;La Famille Bauchau&#039;&#039;, Recueil {{numéro|LII}} de l&#039;Office Généalogique et Héraldique de Belgique.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Chevalier de l&#039;Empire en 1809, concession de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1973.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des chevaliers Bauchau (branche anoblie).png|60px|alt=Armes des chevaliers de Bauchau]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bauduin&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 146.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre personnel de chevalier à René Bauduin en 1998.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Beaucarne d&#039;Eenaeme&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 149-150.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1968. Adjonction &#039;&#039;d&#039;Eenaeme&#039;&#039; en 1980.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Beauffort (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|marquis&amp;lt;br /&amp;gt;comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Ancienne chevalerie. Concession en France en 1735 du titre de marquis transmissible à la primogéniture mâle. Naturalisation belge et reconnaissance de noblesse en 1836. Reconnaissance de noblesse et du titre de comte pour tous en 1863, reconnaissance du titre de marquis transmissible à la primogéniture mâle en 1897.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille fr Beaufort-Artois.png|60px|alt=Armes de Beauffort]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Beaufort-Spontin (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|duc&amp;lt;br /&amp;gt;comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Extraction chevaleresque. Baron de Spontin en 1674. Comte de Beaufort et marquis de Beaufort Spontin (avec rang et honneurs princiers) transmissible à la primogéniture mâle et applicable sur la terre de Spontin en 1746. Confirmation du titre de comte en 1762, duc de Beaufort Spontin transmissible à la primogéniture mâle en 1782. Concession par la Chancellerie de l&#039;Empire du titre de prince du Saint-Empire transmissible à la primogéniture mâle en 1783. Comte du Saint-Empire pour tous attribué par la Chancellerie de l&#039;Empire en 1789. Inscrit dans l&#039;ordre équestre de Namur en tant que duc de Beaufort Spontin transmissible à la primogéniture mâle. Confirmation en Autriche des titres de duc et prince transmissibles à la primogéniture mâle en 1876, Altesse Sérénissime (S.A.S.) transmissible à la primogéniture mâle en 1878.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de Beaufort-Spontin.png|60px|alt=Armes de Beaufort Spontin]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Beckers&amp;lt;br /&amp;gt;Beckers-Vieujant&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (2003), p. 170-172.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039; (2015), p. 20-21.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre personnel de chevalier en 1996 et du titre personnel de baron en 2013. Autorisation de subsituer le patronyme en &#039;&#039;Beckers-Vieujant&#039;&#039; en 2013.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Beco (de)&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1924, titre transmissible à la primogéniture mâle. Concession de noblesse en 1867 pour une autre branche.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:De Beco.png|60x60px|alt=Armes de la famille de Beco]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Beeckmans de West-Meerbeeck&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction de &#039;&#039;de West-Meerbeeck&#039;&#039; en 1923 (seigneurie dans la famille depuis 1772&amp;lt;ref&amp;gt;{{Ouvrage|langue=néerlandais|auteur1=Karel Degryse|titre=De Antwerpse fortuinen. Kapitaalaccumulatie, investering, en rendement te Antwerpen in de 18de eeuw|passage=bijlage I|lieu=Anvers|éditeur=U.F.S.I.A.|date=2005|pages totales=|isbn=|lire en ligne=}}&amp;lt;/ref&amp;gt;), concession de noblesse en 1939.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Beeckmans de West-Meerbeeck.png|60px|alt=blasonnement: &amp;quot;d&#039;azur à la bande d&#039;argent, accompagnée en chef d&#039;une tête de lion arrachée d&#039;or, lampassée de gueules et en pointe d&#039;une étoile à 6 rais d&#039;or.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Beer de Laer (de)&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction de &#039;&#039;de Laer&#039;&#039; en 1912, concession de noblesse en 1921, chevalier transmissible à la primogéniture mâle en 1928.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Beer de Laer.png|60px|alt=Armes de la famille de Beer de Laer]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Behaghel de Bueren&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en France en 1822. Reconnaissance de noblesse en 1845, chevalier transmissible à la primogéniture mâle en 1907, adjonction de &#039;&#039;de Bueren&#039;&#039; en 1921, &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Behaghel.png|60px|alt=Armes de la famille Behaghel]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Behault (de)&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot; /&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse le 26 avril 1726.&amp;lt;br&amp;gt;Reconnaissance de noblesse le 4 septembre 1822 pour la première branche et le 19 juin 1827 pour la seconde branche (&#039;&#039;de Behault Dornon&#039;&#039;, éteinte).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Behault.png|60px|alt=Armoiries de la famille de Behault]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Behr (de)&amp;lt;ref name=&amp;quot;EPN1984&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de Chevalier du Saint-Empire en 1755. Admission dans la noblesse du Royaume des Pays-Bas en 1828. Reconnaissance de noblesse en 1956 et 1980&amp;lt;ref&amp;gt;Luc DUERLOO &amp;amp; Paul JANSSENS, Wapenboek van de Belgische adel van de 15de tot de 20ste eeuw, 4 delen, Crédit Communal, Brussel, 1992, {{p.|125-126}}.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (la): &amp;quot;Videlicet scutum quadratum inferius in cuspidem desinens, album sive argenteum, in hoc ursum in caespite viride erectum, sive in proedam intentum.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bekaert&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1966, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van zilver, met een linkerschuinbalk van keel, beladen met drie sterren van goud, en vergezeld van twee populieren op een grasgrond van sinopel.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Beken Pasteel (Van der)&amp;lt;ref name=&amp;quot;EPN1984&amp;quot;&amp;gt;&#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1984.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1822.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van der Beken Pasteel.png|60px|alt=Armoiries de la famille van der Beken Pasteel]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Belen (Van der)&amp;lt;ref name=&amp;quot;EPN1984&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1931.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van lazuur, met een zwijnskop vergezeld van drie sterren met zes stralen alles van goud.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bellefroid d&#039;Oudoumont (de)&amp;lt;br&amp;gt;Bellefroid (de)&amp;lt;ref name=&amp;quot;EPN1984&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1829, autre ligne &#039;&#039;de Bellefroid&#039;&#039; anoblie en 1975.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Bellefroid d&#039;Oudoumont.png|60px|alt=Armes de Bellefroid]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Beltjens&amp;lt;ref name=&amp;quot;EPN1984&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1930, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van lazuur, met keper van hermelijn, vergezeld van drie koninklijke kronen van goud.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Benoist (de)&#039;&#039;&#039; &amp;lt;br/&amp;gt;&#039;&#039;&#039;Benoist de Gentissart (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1984&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;EPN2003&amp;quot;&amp;gt;&#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 2003.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron &amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1778, titre transmissible à la primogéniture mâle. Reconnaissance de noblesse et concession du titre de baron transmissible à la primogéniture mâle en 1822 ; reconnaissance avec titre d&#039;écuyer en 1822 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Benoist de Gentissart.png|60px|alt=Armoiries de la famille Benoist de Gentissart]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Berch van Heemstede (van den)&amp;lt;ref name=&amp;quot;EPN2003&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse aux Pays-Bas en 1842; admission dans la noblesse belge en 1955. Eteint dans les mâles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille van den Berch van Heemstede.png|60px|alt=Armes de la famille van den Berch van Heemstede]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Berger&amp;lt;ref name=&amp;quot;EPN2003&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1998 avec le titre personnel de chevalier.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bergh (Van Den)&amp;lt;ref name=&amp;quot;EPN2003&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1983 avec le titre personnel de baron.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;gevierendeeld, één in keel, een mercuriusstaf van goud, twee in azuur, negen penningen, drie, drie en drie geplaatst, drie in azuur, een vierhoekige diamant van zilver, met vijf facetten geslepen en op een punt staand, vier in keel een tabaksblad van goud, een kruis van zilver over de hoofdverdelingen heen.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Berghe (Vanden)&amp;lt;ref name=&amp;quot;EPN2003&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1993 avec le titre personnel de baron.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Berghmans&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;&#039;&#039;Bulletin trimestriel de l&#039;Association de la noblesse du royaume de Belgique&#039;&#039;, {{Numéro|240}}, octobre 2004, {{p.|128}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire avec le titre personnel de baron à Jean-Pierre Berghmans, industriel, groupe Lhoist en 2004. Concession de noblesse héréditaire à Vincent et Jacques Berghmans, groupe Lhoist, en 2004.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bernadotte&amp;lt;ref name=&amp;quot;EPN1984&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Prince et duc de Pontecorvo en 1806. Prince héréditaire de Suède en 1810. Roi de Suède et de Norvège en 1818. Concession du titre personnel de prince et des titres de comte et comtesse pour sa descendance en Belgique en 1938.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Arms of Bernadotte.png|60px|alt=Armes de la Maison de Bernadotte coa]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bernard de Fauconval de Deuken (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Bernard de Fauconval (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et concession du titre de baron transmissible à la primogéniture mâle en 1843. Adjonction du nom &#039;&#039;&amp;quot;de Deuken&amp;quot;&#039;&#039; en ….&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Bernard de Fauconval.png|60px|alt=Armes de Bernard de Fauconval]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Berryer&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés vicomtes en 1925, titre transmissible à la primogéniture mâle. Concession du titre de vicomte à un fils cadet en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in lazuur, een keper van zilver, vergezeld van drie bijen van goud.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Béthune (de)&amp;lt;br /&amp;gt;Béthune-Sully (de)&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;&amp;gt;Oscar Coomans de Brachène &amp;amp; Georges de Hemptinne, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1971, seconde partie, Bet - Bo, collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1971.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevaliers en 1845, titre transmissible à la primogéniture mâle. Concession du titre de baron transmissible à la primogéniture mâle. Baron pour tous en 1871, comte pontifical transmissible par ordre de primogéniture masculine en 1866. Adjonction du nom &#039;&#039;Sully&#039;&#039;, à la suite de l&#039;adoption en 1952 par Gabrielle-Marthe-Marie Sully à Chatou (Yvelines).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Béthune (anoblie en 1845).png|60px|alt=File:Armoiries de la famille de Béthune (anoblie en 1845)]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bethune&#039;&#039;&#039; Hesdigneul (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|prince&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Cette Maison est toujours considérée comme princière en Belgique. Mais la réversibilité n&#039;étant pas mentionnée dans les lettres patentes belges, le titre belge s&#039;est éteint en 1976, contrairement à celui des anciens Pays-Bas autrichien, et à sa reconnaissance française. Ainsi donc, la Maison de Béthune se trouve dans la délicate position, en Belgique uniquement, d&#039;une famille princière, sans prince.&amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt;comte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Chevalerie et prise du nom &#039;&#039;de Bethune&#039;&#039; en 1632. Titre de prince transmissible à la primogéniture mâle octroyé par l&#039;empereur Joseph II en 1781. Reconnaissance de noblesse et du titre de comte transmissible à la primogéniture mâle en 1816. Reconnaissance du titre de prince transmissible à la primogéniture mâle en 1888 et en 1932&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason Maison de Béthune (branche Hesdigneul).png|60px|alt=Armes de Béthune Hesdigneul]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Beughem de Houtem (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Réhabilitation de noblesse en 1654, chevalier en 1661, vicomte en 1756. Reconnaissance de noblesse et du titre de vicomte transmissible à la primogéniture mâle en 1823.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Beughem de Houtem.png|60px|alt=Armes de Beughem de Houtem]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Beyens&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Créés barons en 1850 par le duc Ernest II de Saxe-Cobourg et Gotha. &#039;&#039;Eugène&#039;&#039;-Henri-Léonard Beyens (1816-1894) obtint virtuellement&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;sic dans l&#039;EPN&amp;lt;/ref&amp;gt; reconnaissance de noblesse en 1851 lors de la reconnaissance de son titre de baron (pour tous) que le duc de Saxe-Cobourg-Gotha lui avait concédé. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries Beyens 5.jpg|60px|alt=Armes de Beyens]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Biber (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et octroi de la particule en 1714, reconnaissance de noblesse en 1856, baron transmissible à la primogéniture mâle en 1857&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Biber.png|60px|alt=File:Armoiries de la famille de Biber]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Biebuyck&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de chevalier à titre personnel en 1958, concession du titre de chevalier transmissible à la primogéniture masculine en 1968.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van keel, met gaffel van zilver, vergezeld van drie bijen, verkeerd geplaatst, van goud.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Biolley (de)&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse, octroi de la particule et concession du titre de vicomte pour tous les mâles en 1843.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Biolley.png|60px|alt=File:Armoiries de la famille de Biolley]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Biseau d&#039;Hauteville (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Augmentation d&#039;armoiries (supports et couronne à la place du bourrelet) en 1690. Reconnaissance de noblesse en 1822, chevalier transmissible à la primogéniture mâle en 1928. Deux branches à l&#039;orthographe différente subsistent : celle du chevalier de Biseau d&#039;Hauteville (branche aînée) et celle des écuyers de Biseau de Hauteville (branche cadette).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la Famille de Biseau.png|60px|alt=Armes de Biseau]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Blommaert de Soye (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1774, reconnaissance de noblesse en septembre 1822, baron transmissible à la primogéniture mâle en novembre 1822, membre du corps équestre de la province de Namur de 1822 à 1830.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Blommaert de Soye.png|60px|alt=Armes de la famille de Blommaert de Soye]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bodart&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Attestation de noblesse par le roy d&#039;armes de la principauté de Liège en 1787. Reconnaissance de noblesse en 1861.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement: &amp;quot;parti, au premier de gueules, à deux dauphins adossés et affrontés d&#039;argent, coupé d&#039;azur, à cinq bandes d&#039;or, au deuxième d&#039;argent, à trois quintefeuilles de gueules, boutonnées d&#039;or, feuillées de sinople.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Boël&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1930, titre transmissible à la primogéniture mâle. Concession du titre de comte transmissible à la primogéniture mâle en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason Boël.png|60px|alt=Armes de Boël]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Boels&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1953, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van azuur, met een keper vergezeld in het schildhoofd met twee molenijzers en in de schildvoet met twee zwaarden, schuinkruisgewijze opgesteld, de punt naar boven gericht, alles van zilver.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&#039;&#039;&#039;Boëssière-Thiennes (de la)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Marquis&amp;lt;br/&amp;gt;Comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Maintenue de noblesse en Bretagne en 1539 et 1669. Confirmation du titre de marquis par Napoléon III en 1863.&amp;lt;br/&amp;gt;Adjonction du nom de &amp;quot;Thiennes&amp;quot;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;À la suite de l&#039;extinction du dernier comte de Thiennes dont la famille de la Boëssière descendait.&amp;lt;/ref&amp;gt; par arrêté royal du 10 juin 1868, admission en 1885 dans la noblesse belge avec le titre de marquis transmissible à la primogéniture mâle et avec le titre de comte pour tous les autres descendants masculins.&amp;lt;br&amp;gt;Famille éteinte dans les mâles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement: &amp;quot;écartelé, au premier et quatrième de sable, au sautoir d&#039;or, qui est de la Boëssière, au deuxième et troisième d&#039;or, à la bordure d&#039;azur, à l&#039;écusson d&#039;argent, bordé d&#039;azur, chargé d&#039;un lion de gueules, couronné et lampassé d&#039;or, qui est de Thiennes.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bogaerde de ter Brugghen (van den)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1705. Reconnaissance de noblesse et membre du corps équestre de la Flandre occidentale en 1818. Reconnaissance de noblesse et du titre de baron transmissible à la primogéniture mâle en 1830.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Van den Bogaerde wapen 1830.png|60px|alt=Van den Bogaerde wapen 1830]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bois (du)&amp;lt;br /&amp;gt;Bois de Bounam de Ryckholt (du)&amp;lt;br /&amp;gt;Bounam de Ryckholt (de)&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1892. Adjonction du nom &#039;&#039;de Bounam de Ryckholt&#039;&#039; en 1934. Comte pontifical transmissible par ordre de primogéniture masculine en 1881 (branche éteinte). Rectification du nom &amp;quot;du Bois de Bounam de Ryckholt&amp;quot; en &amp;quot;de Bounam de Ryckholt&amp;quot; en 1977&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes du Bois.png|60px|alt=Armes du Bois]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bois (du)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Bois d&#039;Aische (du)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Bois de Nevele (du)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Bois de Vroylande (du)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br /&amp;gt;baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1672 et créés chevaliers en 1676 et 1701. Reconnaissance de noblesse et membre du corps équestre de la province d&#039;Anvers en 1816. Concession du titre de baron transmissible à la primogéniture mâle en 1835 et 1845. Concession du titre de comte transmissible à la primogéniture mâle en 1846 et 1873. Adjonction du nom &#039;&#039;de Nevele&#039;&#039; en 1885 (branche des barons). Adjonction du nom &#039;&#039;d&#039;Aische&#039;&#039; en 1885 (branche des comtes). Adjonction du nom &#039;&#039;de Vroylande&#039;&#039; en 1886 (branche des écuyers).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des comtes du bois d&#039;Aische et des barons du Bois (de Vroylande) de Nevele.png|60px|alt=Armes des comtes du bois d&#039;Aische et des barons du Bois (de Vroylande) de Nevele]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bonaert&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Bonaert de la Roche-Marchiennes&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1676. Obint virtuellement reconnaissance de noblesse et concession du titre de baron en 1867. Baron pour tous en 1881. Adjonction du nom &#039;&#039;de la Roche-Marchiennes&#039;&#039; à la suite de l&#039;adoption par son beau-père. Modification d&#039;armoiries en 1955 (substitution de l&#039;ancien bonnet de baron brabançon par la couronne à sept perles). &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Bonaert.png|60px|alt=Armoiries de la famille Bonaert]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bonhome (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Ancienne extraction, confirmation de noblesse au Saint-Empire en 1653, concession du titre de baron en 1799. Reconnaissance de noblesse et du titre de baron pour &#039;&#039;chacun des chefs des sept branches de la famille de Bonhome&#039;&#039;&amp;lt;ref name=&amp;quot;Parch411&amp;quot;&amp;gt;Roger Harmignies A.I.H., &#039;&#039;Les lettres patentes de Léopold de Bonhome libre baron du Saint-Empire&#039;&#039;, dans &#039;&#039;Le Parchemin&#039;&#039;, Bulletin bimestriel édité par l&#039;association royale Office Généalogique et Héraldique de Belgique, {{Numéro|411}}, mai-juin 2014, {{p.|194}}.&amp;lt;/ref&amp;gt; et toute leur descendance en 1856.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Bonhome.png|60px|alt=File:Armoiries de la famille de Bonhome]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bonvoisin (de)&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1957, titre transmissible à la primogéniture mâle. Rectification de nom par jugement du 11 mai 1959 (&amp;quot;&#039;&#039;Bonvoisin&#039;&#039;&amp;quot; est rectifié en &amp;quot;&#039;&#039;de Bonvoisin&#039;&#039;&amp;quot;). Baron pour tous les mâles et modification d&#039;armoiries en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;doorsneden van goud en van azuur, met een leeuw met drakenstaart van het ene in het andere.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Borchgrave (de)&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis 1902 et créés barons en 1951, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement: &amp;quot;de gueules, au château d&#039;or, à quatre créneaux, ouvert et ajouré d&#039;argent.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Borchgrave d&#039;Altena (de)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Borchgrave d&#039;Altena Merghelynck (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concessions du titre de comte du Saint-Empire transmissible à toute la descendance en 1745 ; autorisation de faire précéder leur nom du prédicat &#039;&#039;&amp;quot;Hoch- und Wohlgeboren&amp;quot;&#039;&#039; en faveur de Jean-Baptiste et Nicolas-Bernard de Borchgrave (des comtes d&#039;Altena, seigneurs de Bovelinghe, etc)&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille de Borchgrave&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;.&amp;lt;br&amp;gt;Reconnaissance de noblesse et du titre de comte pour tous en 1816. Membres du corps équestre du Limbourg. Adjonction du nom &#039;&#039;Merghelynck&#039;&#039; à la suite de l&#039;adoption par une tante en 1953.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de Borchgrave.jpg|60px|alt=Armoiries des Borchgrave d&#039;Altena]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Borman (de)&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1857. Titre de baron transmissible à la primogéniture mâle pour une branche cadette en 1913.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Borman.png|60px|alt=Armoiries de la famille de Borman]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Borrekens (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Maintenue de noblesse avec anoblissement autant que de besoin et concession du titre hérité de chevalier du Saint-Empire attribué par la Chancellerie de l&#039;Empire en 1716. Confirmation de noblesse et du titre de chevalier par la Chancellerie des Pays-Bas en 1734. Baron en 1783. Reconnaissance de noblesse et du titre de chevalier pour tous les mâles en 1824, baron transmissible à la primogéniture mâle en 1827. Confirmation du titre de baron et extension à tous les descendants en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Borrekens.png|60px|alt=Armoiries de la famille Borrekens]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bosch (van den)&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1933, titre transmissible à la primogéniture mâle. Concession du titre de baron à une branche cadette en 1965, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in zilver, een keper van lazuur, beladen met drie sterren met zes stralen van goud, en vergezeld van drie lotusbloemen van lazuur.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Boucquéau&amp;lt;ref&amp;gt;EPN 1985 {{p.|118-121}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1974 en faveur de Georges Boucquéau et de ses deux neveux: Geoffroy et Stéphane&amp;lt;ref&amp;gt;Luc DUERLOO &amp;amp; Paul JANSSENS, Wapenboek van de Belgische adel van de 15de tot de 20ste eeuw, 4 delen, Crédit Communal, Brussel, 1992, {{p.|246-247}}.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in keel, een klimmende bok van zilver, gehoornd en genageld van goud, begeleid rechts van drie ringen en links van drie vierbladeren, alles van goud.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bousies (de)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Bousies Borluut (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1971_Bet-Bo&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Noblesse féodale. Reconnaissance de noblesse et du titre de chevalier pour tous les mâles en 1816. Présidence du corps équestre du Hainaut de 1817 à 1830. Concession du titre de comte pour tous en 1870. Adjonction du nom &#039;&#039;Borluut&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Nom d&#039;une mère, dernière du nom.&amp;lt;/ref&amp;gt; en 1948.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason ville fr Bousies (Nord).png|60px|alt=Armes de Bousies]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Braas&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;&amp;gt;Oscar Coomans de Brachène &amp;amp; Georges de Hemptinne, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1972, première partie, Br - Bam, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1972.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1932. Extension du titre à une branche cadette en 1963.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van keel, met een balans van goud, ondersteund door een degen met de punt omhoog van zilver, met gevest van goud, het vrij-kwartier van hermelijn, beladen met de magistraatsbaret in natuurkleur, met een passement van goud.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Brabandère (de)&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1848.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement: &amp;quot;d&#039;or, au lion de gueules, armé et lampassé d&#039;azur, au chef d&#039;azur, chargé de trois étoiles à six rais d&#039;or, posées en fasce.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bracht&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van zilver met een kruisboog van sabel, de hoefd vergezeld aan de rechterkant van een zespuntige ster van keel.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Braconier (de)&amp;lt;br /&amp;gt;Braconier d&#039;Alphen (de)&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1957. Adjonction du nom &#039;&#039;d&#039;Alphen&#039;&#039; en 1962.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van sinopel, met drie schuinbalken, het veld beladen tussen de eerste en de tweede schuinbalk met twee jachthoornen en tussen de tweede en de derde met een lopende everzwijn achtervolgd door een jachthond, gezegde wapenstukken geplaatst in de richting van de schuinbalken, alles van goud.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Branden de Reeth (van den)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1689, chevalier à titre personnel en 1691, augmentation d&#039;armoiries (supports) en 1692. Confirmation par la Chancellerie de l&#039;Empire de noblesse, anoblissement pour autant que de besoin, confirmation et approbation d&#039;armoiries et concession du titre de chevalier du Saint-Empire pour tous en 1717. Reconnaissance de noblesse et du titre de chevalier pour tous les mâles en 1823. Baron transmissible à la primogéniture mâle en 1856. Baron pour tous (branche aînée) en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van den Branden.png|60px|alt=Armoiries de la famille van den Branden]]&lt;br /&gt;
|-&lt;br /&gt;
|  align=&amp;quot;left&amp;quot;|Breuls de Tiecken &#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concessions de noblesse en 1925, 1926 et 1938, adjonction du nom &amp;quot;de Tiecken&amp;quot; en 1928, titre de baron en 1938 pour Camille-Louis Breuls de Tiecken, titre transmissible par primogéniture masculine&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Breuls de Tiecken.png|60px|alt=Armes de Breuls]]&lt;br /&gt;
|-&lt;br /&gt;
|  align=&amp;quot;left&amp;quot;|Breydel de Groeninghe&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;quot;Réhabilitation&amp;quot; de noblesse en 1988 et adjonction du nom &#039;&#039;de Groeninghe&#039;&#039; en 1990.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in keel, drie paardekoppen van zilver, gebreideld van azuur. &amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
|  align=&amp;quot;left&amp;quot;|Bribosia&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Bribosia&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1982 avec le titre de chevalier transmissible à la primogéniture mâle. Un autre membre de cette famille obtient une concession de noblesse héréditaire en 1982.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in goud, een golvende linkerschuinbalk van azuur, beladen met drie hermelijnstaartjes van zilver, vergezeld boven van een meerltje van sabel, en beneden van een stijgbeugel van hetzelfde, gebonden van keel.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Briey (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Noblesse féodale. Reconnaissance de noblesse et du titre de comte transmissible à la primogéniture mâle. Comte pour tous en 1842 et 2013&amp;lt;ref name=&amp;quot;ANRB_276&amp;quot;&amp;gt;&#039;&#039;Bulletin trimestriel de l&#039;Association de la noblesse du royaume de Belgique&#039;&#039;, {{Numéro|276}}, octobre 2013.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de Briey.png|60px|alt=Armes de Briey]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Brogniez (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevalier du Saint-Empire par le comte de Zeyll en 1767. Reconnaissance de noblesse et du titre de chevalier pour tous en 1869. Reconnaissance de noblesse pour une autre branche en 1893.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement: &amp;quot;parti, au premier d&#039;azur, à trois étrilles d&#039;argent, emmanchées d&#039;or, au second coupé, en chef d&#039;or, à trois loups rampants et ravissants de sable, en pointe d&#039;argent, au dextrochère armé de même, tenant une épée d&#039;argent, garnie d&#039;or.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Broqueville (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br /&amp;gt;baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et créés barons en 1867, titre transmissible à la primogéniture mâle. Comte transmissible à la primogéniture mâle et baron pour tous en 1914. Comte pour tous les mâles et augmentation d&#039;armoiries pour tous en 1965.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Broqueville.png|60px|alt=Armes de Broqueville]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Brouchoven de Bergeyck (de)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Brouchoven de Bergeyck de Namur d&#039;Elzée (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concessions de noblesse en 1607 par la Chancellerie impériale et en 1620 par la Chancellerie des Pays-Bas. Baron de Bergeyck en 1665. Comte de Bergeyck en 1676. Baron de Leefdael en 1679. Reconnaissance de noblesse et du titre de comte transmissible à la primogéniture mâle en 1898. Comte pour tous en 1898. Adjonction du nom &#039;&#039;de Namur d&#039;Elzée&#039;&#039; en 1927.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Brouchoven de Bergeyck.png|60px|alt=Armes de Brouchoven de Bergeyck]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Brouwer (de)&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1934. Titre personnel de baron en 1934. Concession du titre de baron transmissible à la primogéniture mâle en 1953.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Broux (de)&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille de Broux&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire en 1986 avec le titre personnel de chevalier. Concession du titre personnel de baron en 1991.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Browne (de)&amp;lt;br /&amp;gt;Browne de Tiège (de)&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Ajonction du nom &#039;&#039;de Tiège&#039;&#039; dans les actes de naissance et de mariage du baron Trophime de Browne de Tiège (° 1906). Les actes de naissance de ses enfants indiquent aussi le nom &#039;&#039;de Browne de Tiège&#039;&#039;.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1929, titre transmissible à la primogéniture mâle. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Bruggen (van der)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Nomination en 1657 de Conrad van der Bruggen comme conseiller à la Cour de justice de la province de Brabant puis conseiller et &#039;&#039;rekwestmeester&#039;&#039; au Conseil privé à Bruxelles (charge anoblissante)&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille van der Bruggen&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;. Concession du titre personnel de chevalier en 1663. Augmentation d&#039;armoiries en 1667. Reconnaissance de noblesse en 1860. Concession du titre de baron pour tous en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Buffin de Chosal&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;Léopold Buffin succéda, au décès de son grand-père maternel, le baron Désiré De Hults, au titre de baron concédé à ce dernier par Lettres patentes du 15 janvier 1844 (titre déclaré transmissible au fils aîné issu du mariage de sa fille Aglaé avec Achille Buffin, et ensuite transmissible par ordre de primogéniture masculine), et obtint, 4 octobre 1871, extension de son titre à tous ses descendants&#039;&#039; (sic dans l&#039;État présent de la noblesse belge 1972&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;&#039;&#039;État présent de la noblesse belge&#039;&#039;, annuaire de 1985, {{p.|303}}.&amp;lt;/ref&amp;gt;. Baron pour tous en 1871. Adjonction du nom &#039;&#039;de Chosal&#039;&#039; en 1931. Concession du titre personnel de vicomte en 1938. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Buisseret Steenbecque de Blarenghien (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Élevation des terres de Thiennes-Steenbecque et Blarenghien en comté de &#039;&#039;Thiennes-Steenbecque&#039;&#039; et concession du titre de comte en faveur Jean-François Buisseret, titre transmissible à la primogéniture mâle&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Buisseret&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;. Comte en France en 1776. Admission dans la noblesse belge avec le titre de comte transmissible à la primogéniture mâle en 1881. Comte à titre personnel en 1900.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Buisseret.png|60px|alt=File:Armoiries de la famille de Buisseret]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Burbure de Wesembeek (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1722. Reconnaissance de noblesse et concession du titre de chevalier en 1844, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Burbure.png|60px|alt=Armes de la famille de Burbure]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Burch (van der)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Noblesse féodale, chevalerie en 1600, comtes en 1720. Reconnaissance de noblesse et du titre de comte transmissible à la primogéniture mâle en 1816. Désignation comme membre du corps équestre du Hainaut à la même date. Comte pour tous en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Burlet (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1763. Reconnaissance de noblesse en 1852.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Burlet.png|60px|alt=Armes de Burlet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Bus (du)&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1873. Adjonction du nom &#039;&#039;de Warnaffe&#039;&#039; en 1896. Concession du titre de vicomte transmissible à la primogéniture mâle en 1919.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille du Bus.png|60px|alt=blasonnement: &amp;quot;D&#039;azur à un écusson d&#039;argent, accompagné en orle de quatre fleurs de lis.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Buysse&amp;lt;ref&amp;gt;EPN 2004 {{pp.|225-227}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Cyrille Buysse (1859-1932) obtint concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1932. Il mourut avant d&#039;avoir pu lever les Lettres patentes. Sa veuve, née Nelly Dyserinck, obtint par diplôme de 1934 concession du titre personnel de baronne, pour elle-même, et concession de noblesse et du titre de baron par ordre de primogéniture mâle pour ses enfants issus de son union avec Cyrille Buysse [branche éteinte dans les mâles].&lt;br /&gt;
Concession de noblesse en 1951&amp;lt;ref&amp;gt;Luc DUERLOO &amp;amp; Paul JANSSENS, Wapenboek van de Belgische adel van de 15de tot de 20ste eeuw, 4 delen, Crédit Communal, Brussel, 1992, {{pp.|323-324}}.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Buysse&amp;lt;ref&amp;gt;EPN 2004, {{p.|228}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession personnel et du titre personnel de chevalier pour Paul Buysse en 1994. Concession de noblesse héréditaire et du titre personnel de baron en 1999. Concession du titre de comte pour tous en 2014&amp;lt;ref&amp;gt;http://diplomatie.belgium.be/fr/Newsroom/actualites/communiques_de_presse/affaires_etrangeres/2014/04/ni_150414_faveurs_nobiliaires_et_distinctions_honorifiques.jsp?referer=tcm:313-246286-64 (consulté le 14/03/2016)&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== C ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Callataÿ (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en Hongrie en 1794, admission dans la noblesse belge en 1901, chevaliers en 1925 et barons en 1934, titres transmissibles à la primogéniture mâle. Baron à titre personnel en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Caloen (van)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Caloen de Basseghem (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Br-Cam&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Chevalerie en 1663. Reconnaissance de noblesse en 1823. Baron de Basseghem en 1839, titre transmissible à la primogéniture mâle tant que la terre de Basseghem restera en possession de la famille. Adjonction du nom &#039;&#039;de Basseghem&#039;&#039; en mai 1900. Augmentation d&#039;armoiries en août 1900. Concession du titre de baron transmissible à la primogéniture mâle en 1857. Comte pontifical en 1866. Baron pour tous en 1878.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van Caloen.png|60px|alt=Armoiries de la famille van Caloen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Cardon de Lichtbuer&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;&amp;gt;Oscar Coomans de Brachène &amp;amp; Georges de Hemptinne, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1972, seconde partie, Can - Col, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1972.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1861. Adjonction du nom &#039;&#039;de Lichtbuer&#039;&#039; en 1898.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Carpentier de Changy&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Famille d&#039;origine française, maintenue de noblesse en France en 1669, confirmation en France  du titre de comte transmissible à la primogéniture mâle en 1865, admis dans la noblesse belge en 1892, 1940 et 1957. Concessions du titre de comte transmissibles à la primogéniture mâle en 1892, 1934, 1940, 1962 et 1966.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Cartier (de)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Cartier d&#039;Yves (de)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Cartier de Marchienne (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1826 et créés barons en 1857 et en 1968, titres transmissibles à la primogéniture mâle, adjonction du nom &#039;&#039;de Marchienne&#039;&#039; en 1946 à la suite de l&#039;adoption par un oncle&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Il s&#039;agit du baron Emile de Cartier de Marchienne.&amp;lt;/ref&amp;gt; d&#039;une ligne éteinte depuis. Reconnaissance de noblesse et créés baron en 1823, titre transmissible à la primogéniture mâle, baron pour tous les mâles en 1841 (Ligne : Cartier d&#039;Yves)&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille de Cartier&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Cartier.png|60px|alt=Armoiries de la famille de Cartier]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Carton de Tournai&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;de Tournai&#039;&#039; en 1932, anoblis et créés barons en 1956, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Carton de Wiart&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br /&amp;gt;baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1904. Comte transmissible à la primogéniture mâle en 1922 et 1940. Baron transmissible à la primogéniture mâle en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Cartuyvels&amp;lt;br /&amp;gt;Cartuyvels de Collaert&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevaliers en 1968, titre transmissible à la primogéniture mâle. Branche de Collaert anoblie en 1903, concession du titre de baron personnel en 1921 et baron transmissible à la primogéniture mâle en 1927. Une autre branche fut anoblie avec concession du titre personnel de chevalier en 1936. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|  align=&amp;quot;left&amp;quot;|Casier&amp;lt;br&amp;gt;Casier de ter Beken&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron pontifical en 1880, concession de noblesse en 1886. Ce titre de baron fut ensuite déclaré transmissible par ordre de primogéniture masculine&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Reconnaissance implicite de ce titre de baron pontifical dans la noblesse belge.&amp;lt;/ref&amp;gt;. Concession du titre de baron transmissible par ordre de primogéniture masculine pour un rameau de cette branche aînée en 1922, ce rameau adjoignit à son nom celui de &#039;&#039;&amp;quot;de ter Beken&amp;quot;&#039;&#039; par arrêté royal du 19 mai 1931.&amp;lt;br&amp;gt;Une seconde branche de cette famille obtint concession de noblesse en 1933.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Casier.png|60px|alt=Armes de la famille Casier]]&lt;br /&gt;
|-&lt;br /&gt;
|  align=&amp;quot;left&amp;quot;|Cassiers&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Deux concessions de noblesse héréditaires avec le titre personnel de baron en 2003&amp;lt;ref name=&amp;quot;ANRB_237&amp;quot;&amp;gt;&#039;&#039;Bulletin trimestriel&#039;&#039;, publié par &#039;&#039;Association de noblesse du royaume de Belgique, {{numéro|237}}, janvier 2004.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Caters (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1735. Reconnaissance de noblesse et créés baron en 1857, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Caters.png|60px|alt=Armes des Caters]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Caubergh (van)&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblissement en 1931 et concession du titre de baron transmissible à la primogéniture mâle en 1954.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van Caubergh.png|60px|alt=Armoiries de la famille van Caubergh]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Ceuninck (de)&amp;lt;ref&amp;gt;EPN 1986 {{p.|130-131}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1925, titre transmissible à la primogéniture mâle&amp;lt;ref&amp;gt;Luc DUERLOO &amp;amp; Paul JANSSENS, Wapenboek van de Belgische adel van de 15de tot de 20ste eeuw, 4 delen, Crédit Communal, Brussel, 1992, {{p.|381-382}}.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Charlent&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 2014, concession du titre de baron à lui-même et ses descendants à M. Jean Charlent&amp;lt;ref name=&amp;quot;AR 2 avril 2014&amp;quot;&amp;gt;Arrêté royal du 2 avril 2014 publié au Moniteur belge du 15 avril 2014.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Chastel de la Howarderie (du)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Noblesse féodale, vicomte de Haubourdin et d&#039;Emmerin en 1605&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de comte pour tous en 1816, 1857 et en 1864. Membres du corps équestre du Hainaut en 1816&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;.&amp;lt;br/&amp;gt;Adjonction du nom &#039;&#039;&amp;quot;Andelot&amp;quot;&#039;&#039; en 1876, adjonction du nom &#039;&#039;&amp;quot;de la Howarderie&amp;quot;&#039;&#039; en 1883 et 1884 et rectification du nom &#039;&#039;&amp;quot;Duchastel&amp;quot;&#039;&#039; en &#039;&#039;&amp;quot;du Chastel de la Howarderie&amp;quot;&#039;&#039; en 1878&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason de la ville de Haubourdin (59) Nord-France.png|60px|alt=Armes du Chastel de la Howarderie]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Chestret de Haneffe (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblissement et concession du titre de chevalier du Saint-Empire par le comte de Zeyll en 1755. Reconnaissance de noblesse et du titre de baron personnel en 1816. Membre du corps equestre et mention dans la première liste des nobles en 1816. Baron transmissible à la primogéniture mâle en 1884.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Chestret de Haneffe.png|60px|alt=Armoiries de la famille Chestret de Haneffe]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Chevalerie (de la)&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Rectification de nom en &#039;&#039;&amp;quot;de la Chevalerie&amp;quot;&#039;&#039; au lieu de &#039;&#039;Delchevalrie&#039;&#039; par jugement du 31 mai 1919&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Au tribunal de {{1ère}} instance de Bruxelles.&amp;lt;/ref&amp;gt;.&amp;lt;br&amp;gt;Concession de noblesse héréditaire le 16 mars 1921.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Christyn de Ribaucourt&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Augmentation d&#039;armoiries en 1671, barons de Meerbeek en 1687, vicomtes de Tervueren et Duysbourg en 1690.&amp;lt;br&amp;gt;Chevalier à titre personnel en 1693, comte de Ribaucourt en 1748, baron de Laerne en 1793&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;.&amp;lt;br&amp;gt;Reconnaissance de noblesse et du titre de vicomte en 1816, remplacement du titre de vicomte par celui de comte transmissible par ordre de primogéniture masculine en 1820, mention sur la {{1ère}} liste officielle des nobles.&amp;lt;br&amp;gt;Comte pour tous en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Christyn de Ribaucourt.png|60px|alt=Armes de la famille Christyn de Ribaucourt]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Cleenewerck de Crayencour&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1925. Chevalier à titre personnel en 1957. Chevalier transmsissible à la primogéniture mâle en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Cleenewerck de Crayencour.png|60px|alt=Armes de la famille Cleenewerck de Crayencour]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Clément de Cléty&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1758, titre de chevalier héréditaire en 1759. Reconnaissance de noblesse et du titre de chevalier pour tous les mâles en 1823. Mention dans la {{3e|liste}} officielle des nobles. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Clément de Cléty.png|60px|alt=Armoiries de la famille Clément de Cléty]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Clément de Saint-Marcq (le)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;ANRB_272&amp;quot;&amp;gt;&#039;&#039;Bulletin trimestriel&#039;&#039;, publié par &#039;&#039;Association de noblesse du royaume de Belgique, {{numéro|272}}, janvier 2010.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier en 1658. Reconnaissance de noblesse et du titre de chevalier pour tous les mâles en 1827. Deux concessions du titre de baron pour tous en 2009.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Coart&amp;lt;ref name=&amp;quot;EPN2005&amp;quot;&amp;gt;&#039;&#039;État Présent de la Noblesse, &#039;&#039;Première partie : Clo - Crom&#039;&#039;, Annuaire de 2005.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1975.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Coart.png|60px|alt=Armes de la famille Coart]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Cocquéau des Mottes (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse et anoblissement pour autant que de besoin le 24 janvier 1739&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Avec modification d&#039;armoiries.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;.&amp;lt;br&amp;gt;Reconnaissance de noblesse en 1825 avec modification d&#039;armoiries&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;{{,}}&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Ajout de tenants : deux sauvages de carnation, ceints et couronnés de feuillage, s&#039;appuyant sur leur massue.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Cocquéau des Mottes.png|60px|alt=Armes de la famille de Cocquéau des Mottes]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Codt (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1756. Reconnaissance de noblesse en 1828. Concession du titre de chevalier transmissible à la primogéniture mâle en 1964.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Codt.png|60px|alt=Armoiries de la famille de Codt.png]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Cogels&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt; &amp;lt;br/&amp;gt;&#039;&#039;&#039;Cogels van Reynegom&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1753. Reconnaissance de noblesse en 1822, concession du titre baron transmissible à la primogéniture mâle en 1857, en 1909 et en 1969. Membre du corps équestre de la province d&#039;Anvers. Mention sur la première liste officielle des nobles. Adjonction du nom &#039;&#039;&amp;quot;van Reynegom&amp;quot;&#039;&#039; en 1988&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Cogels.png|60px|alt=Armes de Cogels]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Coget&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1972_Can-Col&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1743. Reconnaissance de noblesse en 1902.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Coget (Belgique).png|60px|alt=Armes de Coget]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Collinet &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron pour lui-même et tous ses descendants à M. Dominique Collinet, écuyer&amp;lt;ref name=&amp;quot;AR 10 juillet 1997&amp;quot;&amp;gt;Arrêté royal du 10 juillet 1997 publié au Moniteur belge du 18 juillet 1997.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Coninck de Merckem (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;&amp;gt;Oscar Coomans de Brachène &amp;amp; Georges de Hemptinne, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1973, première partie, Com - Cuy, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1973.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Maintenue du noblesse et créés chevaliers du Saint-Empire par la Chancellerie de l&#039;Empire en 1719. Confirmation de noblesse par la Chancellerie des Pays-Bas en 1735. Créés barons de l&#039;Empire en 1810. Reconnaissance de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1816. Membre du corps équestre de la Flandre occidentale. Mention dans la {{1ère}} liste officielle des nobles. Baron pour tous en 1875. Adjonction du nom &#039;&#039;de Merckem&#039;&#039; en 1884. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Coninck.png|60px|alt=Armoiries de la famille de Coninck]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Constant&amp;lt;ref&amp;gt;Philippe de Bounam de Ryckholt et Georges de Hemptinne, &#039;&#039;Lettres de noblesse octroyées par Sa Majesté Baudoin Roi des Belges (1951-1991)&#039;&#039;, 1991, p. 69. Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge&#039;&#039;, 1992, p. 563. &#039;&#039;État présent de la noblesse belge&#039;&#039; (2005), p. 58. Eteint dans les mâles en 1986; seule subsistante est sa fille Geneviève Constant (1926).&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire avec le titre personnel de baron en 1973 en faveur de Jean-Théophile-Joseph Constant.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Constant.png|60px|alt=Armes de la famille Constant]] &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Cooman d&#039;Herlinckhove (de)&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1930, adjonction du nom &#039;&#039;d&#039;Herlinckhove&#039;&#039; en 1933.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Coomans de Brachène&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;de Brachène&#039;&#039; en 1931. Anoblis en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Cooreman&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1966.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Coppée&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1912, titre transmissible à la primogéniture mâle.&amp;lt;br/&amp;gt;Concession du titre personnel de baronne en 2007&amp;lt;ref name=&amp;quot;ANRB_251&amp;quot;&amp;gt;&#039;&#039;Bulletin trimestriel&#039;&#039;, publié par &#039;&#039;Association de noblesse du royaume de Belgique, {{numéro|251}}, juillet 2007.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Coppens d&#039;Eeckenbrugge&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron transmissible à la primogéniture mâle en 1766&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Coppens&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;. Reconnaissance de noblesse en 1816. Reconnaissance de noblesse et du titre de baron transmissible à la primogéniture mâle en 1823. Mention dans la {{1ère}} liste officielle des nobles. Membre du corps équestre du Luxembourg. Baron pour tous en 1870.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Coppens.png|60px|alt=Armoiries de la famille Coppens]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Coppieters&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Coppieters de Gibson&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Coppieters &#039;t Wallant&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Coppieters de ter Zaele&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblissement par charge&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Nomination au Conseil des Finances.&amp;lt;/ref&amp;gt; en 1709. Reconnaissance de noblesse en 1822. Mention dans la {{1ère}} liste officielle des nobles. Adjonction du nom &#039;&#039;de ter Zaele&#039;&#039; en 1957 et concession du titre de chevalier transmissible à la primogéniture mâle en 1966. Adjonction du nom &#039;&#039;de Gibson&#039;&#039; en 1930 et concession de noblesse pour cette branche en 1931.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Coppieters.png|60px|alt=Armes de Coppieters]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Coppin de Grinchamps (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Admission à l&#039;État noble de Luxembourg en 1614&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Information non reprise dans l&#039;Armorial de la noblesse belge.&amp;lt;/ref&amp;gt;. Reconnaissance de noblesse et créés baron en 1888, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Coppin de Grinchamps.png|60px|alt=Armes de Coppin]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Corbisier de Méaultsart&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire en 1844, concession du titre de chevalier transmissible à la primogéniture masculine en 1957. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=Armes de Corbisier: &#039;&#039;d&#039;argent, à trois trèfles de sinople, au chef d&#039;azur, chargé d&#039;une étoile à six rais d&#039;or. &#039;&#039;]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Cornet d&#039;Elzius de Peissant&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Cornet d&#039;Elzius du Chenoy&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Cornet d&#039;Elzius du Chenoy de Wal&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Cornet de Ways-Ruart&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Espiennes Cornet d&#039;Elzius du Chenoy (d&#039;)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Espiennes Cornet d&#039;Elzius du Chenoy de Wal (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Chevalier en 1724, comte pour tous en 1747. Reconnaissance de noblesse et concession du titre de comte transmissible à la primogéniture mâle en 1848 (branche de Peissant), extension du titre de comte pour tous en 1859. Reconnaissance de noblesse et du titre de comte pour tous en 1823 (branche du Chenoy), membre du corps équestre du Brabant méridional, mention dans la {{1re|liste}} officielle des nobles. Adjonction du nom &#039;&#039;de Wal&#039;&#039; en 1928. Adjonction du nom d&#039;Espiennes en 1940 à la suite de l&#039;adoption par le comte d&#039;Espiennes.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Cornet.png|60px|alt=Armoiries de la famille Cornet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Cossée de Maulde&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Cossée de Maulde Dumortier&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Cossée de Semeries&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Chevalier en 1743. Reconnaissance de noblesse et créés vicomtes en 1823, titre transmissible à la primogéniture mâle. Concession du titre de vicomte transmissible à la primogéniture mâle en 1861. Adjonction du nom &#039;&#039;Dumortier&#039;&#039; en 1930. Reconnaissance de noblesse en 1855 (branche de Semeries).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Cossée.png|60px|alt=Armoiries de la famille Cossée]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Coune (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1748. Reconnaissance de noblesse en 1821. Membre du corps équestre de Liège. Mention dans la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Coune.png|60px|alt=File:Armoiries de la famille Coune]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Court (de le)&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1924 et créés barons en 1936, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:De le Court.png|60px|alt=Armes de la famille de le Court]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Crane d&#039;Heysselaer (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1932. Concession du titre de chevalier transmissible à la primogéniture mâle en 1975&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Crane&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Crane d&#039;Heysselaer.png|60px|alt=Armes de Crane d&#039;Heysselaer]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Crawhez (de)&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1878, titre transmissible à toute la descendance.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Crawhez (de).png|60px|alt=Armes de Crawhez]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Creeft (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Attestation de noblesse ancienne en 1787. Reconnaissance de noblesse en 1882. Titres de chevaliers transmissibles à la primogéniture mâle en 1930.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Creeft.png|60px|alt=File:Armoiries de la famille de Creeft]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Crombez de Rémond de Montmort&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1792.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1826, mention sur la {{3e|liste}} officielle des nobles, adjonction du nom &#039;&#039;&amp;quot;de Rémond de Montmort&amp;quot;&#039;&#039; en 1910.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Crombez de Rémond de Montmort.png|60px|alt=File:Armoiries de la famille Crombez de Rémond de Montmort]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Crombrugghe de Picquendaele (de)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Crombrugghe de Schipsdaele (de)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Crombrugghe de Looringhe (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation d&#039;armoiries en 1789 (port de deux bannières). Reconnaissance de noblesse en 1816 (branche de Picquendaele), membre du corps équestre de la Flandre orientale, mention dans la {{1ère}} liste officielle des nobles, baron pour tous en 1873, adjonction du nom &#039;&#039;de Picquendaele&#039;&#039; en 1885. Reconnaissance de noblesse et augmentation d&#039;armoiries en 1822 (branche de Schipsdaele), mention dans la {{1ère}} liste officielle des nobles, adjonction du nom &#039;&#039;de Schipsdaele&#039;&#039; en 1888, baron pour tous en 1969. Reconnaissance de noblesse en 1816 (branche de Looringhe), membre du corps équestre de la Flandre occidentale, concession du titre de baron transmissible à la primogéniture mâle et autorisation de porter le nom &#039;&#039;de Looringhe&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Tant que la terre de Looringhe sera en leur possession.&amp;lt;/ref&amp;gt; en 1818, baron pour tous dans la noblesse luxembourgeoise en 1847, baron pour tous en Belgique en 1868 et en 1884, adjonction du nom &#039;&#039;de Looringhe&#039;&#039; en 1885.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Crombrugghe de Picquendaele.png|60px|alt=File:Armoiries de la famille de Crombrugghe de Picquendaele]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Croÿ (de)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Croÿ du Rœulx (de)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Croÿ-Solre (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|duc&amp;lt;br/&amp;gt;prince&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Extraction chevaleresque 1350, comte de Chimay en 1473 &amp;amp; prince de Chimay en 1486 (branche cadette éteinte le {{1er}} septembre 1527 dans la branche aînée des Croÿ, elle-même éteinte le 12 juin 1612 dans une branche cadette des ducs d&#039;Arenberg, qui en releva le nom et qui est toujours représentée aujourd&#039;hui par les princes de Caraman-Chimay), comte de Solre en 1590, duc de Croÿ transmissible à la primogéniture mâle en 1598, duc d&#039;Havré en 1627, prince de Solre en 1677, prince du Saint-Empire en 1742, confirmation du titre de duc de Croÿ transmissible à la primogéniture mâle en 1768, honneur de la cour. Admission dans la noblesse du Royaume avec le titre de prince pour tous avec qualification d&#039;Altesse Sérénissime (S.A.S.) en 1892. Reconnaissance de noblesse et autorisation de porter le titre de prince pour tous avec qualification d&#039;Altesse Sérénissime (S.A.S.) en 1933 (branche de Solre). Admission dans la noblesse du Royaume avec le titre de prince pour tous avec qualification d&#039;Altesse Sérénissime (S.A.S.) en 1927 (branche du Rœulx), adjonction du nom &#039;&#039;du Rœulx&#039;&#039; en 1947.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de Mesnil 3.png|60px|alt=Armes de Croÿ]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Cumont (de)&amp;lt;ref name=&amp;quot;EPN1973_Com-Cuy&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1963, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Cumont (Belgique).png|60px|alt=Armes de Cumont]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== D ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Daele (van) &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 2003, concession de noblesse héréditaire et le titre personnel du baron à Franciskus van Daele. En 2006 concession du titre de baron à son décès transmissible à ses enfants des deux sexes, le titre étant ensuite transmis en ligne masculine à la génération suivante, après le décès d&#039;un porteur du titre.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Daems &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 2014, concession du titre de baron à lui-même et ses descendants à M. Herman Daems&amp;lt;ref name=&amp;quot;AR 2 avril 2014&amp;quot; /&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|David&amp;lt;br&amp;gt;David de Lossy&amp;lt;br&amp;gt;David-Fischbach Malacord&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concessions de noblesse et d&#039;un titre de chevalier transmissible à la primogéniture masculine en 1888, concession de noblesse en 1890, concession d&#039;un titre de chevalier transmissible à la primogéniture masculine en 1922, adjonction du nom &amp;quot;de Lossy&amp;quot; en 1929, concession d&#039;un titre personnel de chevalier en 1970.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de David (Belgique).png|60px|alt=Armes de David]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Davignon&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;&amp;gt;Oscar Coomans de Brachène &amp;amp; Georges de Hemptinne, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1973, seconde partie, D - Dum, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1973.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br&amp;gt;vicomte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de vicomte pour tous en 1919 et, en 2017, concession du titre de comte pour lui-même et ses descendants au vicomte Etienne Davignon&amp;lt;ref name=&amp;quot;AR 13 juillet 2017&amp;quot;&amp;gt;Arrêté royal du 13 juillet 2017 publié au Moniteur belge du 13 septembre 2017.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des vicomtes Davignon.png|60px|alt=Armes de la famille Davignon]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Decker (de)&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre personnel de chevalier en 1955. Chevalier transmissible à la primogéniture mâle en 1970.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Decker.png|60px|alt=Armes de la famille de Decker]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Delbeke&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de baron transmissible à la primogéniture mâle en 1912.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Delvaux de Fenffe&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;de Fenffe&#039;&#039; en 1908, concession de noblesse en 1923, titre de baron transmissible à la primogéniture mâle en 1951. Concession de noblesse en 1967 pour deux autres branches.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Delvaux de Fenffe.png|60px|alt=Armes de Delvaux de Fenffe]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Descampe&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1965.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Descamps&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de chevalier transmissible à la primogéniture mâle en 1892. Titre de baron transmissible à la primogéniture mâle en 1904 et 1933.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Descantons de Montblanc&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession en France du titre de comte transmissible à la primogéniture mâle en 1841. Baron d&#039;Ingelmunster en Belgique en 1841, titre transmissible à la primogéniture mâle, baron Descantons pour les autres descendants mâles. Comte transmissible à la primogéniture mâle en 1921.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Descantons de Montblanc.png|60px|alt=File:Armoiries de la famille Descantons de Montblanc]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Desprechins de Gaesebeke&amp;lt;ref&amp;gt;EPN 1987 {{p.|303}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire en 1967. Concession du titre de chevalier par ordre de primogéniture mâle en 1977. Autorisation d&#039;ajouter le nom &amp;quot;de Gaesebeke&amp;quot; par Arrêté royal en 1979&amp;lt;ref&amp;gt;Luc DUERLOO &amp;amp; Paul JANSSENS, Wapenboek van de Belgische adel van de 15de tot de 20ste eeuw, 4 delen, Crédit Communal, Brussel, 1992, {{p.|572-573}}.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Dessain&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1910 et 1930. Chevalier transmissible à la primogéniture mâle en 1922,&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Dhanis&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1894. Titre de baron transmissible à la primogéniture mâle. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Didisheim&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Didisheim&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de baron transmissible à la primogéniture mâle en 1984. Concession du titre de baron transmissible à toute la descendance en 1986.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|D&#039;Ieteren &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 2009, concession du titre de baron pour lui-même et tous ses descendants à M. Roland D&#039;Ieteren&amp;lt;ref&amp;gt;Arrêté royal du 9 juillet 2008 paru au Moniteur belge du 14 juillet 2008.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Dieudonné de Corbeek over Loo (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et concession du titre de chevalier transmissible à tous les mâles en 1842. Baron de &#039;&#039;Corbeek over Loo&#039;&#039; transmissible à la primogéniture mâle&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Attribué au descendant qui sera propriétaire de la terre de &#039;&#039;Corbeek over Loo&#039;&#039;.&amp;lt;/ref&amp;gt; en 1843. Titre personnel de baronne en 1892. Baron transmissible à la primogéniture mâle en 1892 et adjonction du nom &#039;&#039;de Corbeek over Loo&#039;&#039; en 1897.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Dieudonné de Corbeek over Loo.png|60px|File:Armoiries de la famille Dieudonné de Corbeek over Loo]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Dievoet (van)&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire avec le titre de baron personnel à titre posthume pour Émile van Dievoet en 1968&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;L&#039;&#039;&#039;État présent de la noblesse belge&#039;&#039;, édition de 2007, p. 441, attribue erronément à cette famille la généalogie de la famille Van Dievoet dit Vandive parue dans : &#039;&#039;Le Parchemin&#039;&#039;, éd. Office généalogique et héraldique de Belgique, Bruxelles, 1986, n° 245, p. 273 à 293, à laquelle la famille du baron van Dievoet n&#039;est pas apparentée.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Wapen van Baron en Jonkheren van Dievoet.jpg|60px|alt=Armes baron van Dievoet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Dillemans &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&amp;lt;br/&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1991, concession de noblesse héréditaire et du titre personnel de baron à M. Roger Dillemans&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot;&amp;gt;Arrêté royal du 18 juillet 1991.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Dirix &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1991, concession de noblesse héréditaire et du titre personnel de chevalier à M. Albert Dirix&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot; /&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Donnea (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Donnea de Fologne (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Donnea de Hamoir (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|1763: chevalerie héréditaire du Saint Empire (avec couronne à neuf perles), par le comte de Zeyll.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de chevalier transmissible à tous les mâles en 1845.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Donnea.png|60px|alt=Armes de Donnea]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Donnet&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1925. Baron transmissible à la primogéniture mâle en 1966.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Donny&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1912, titre transmissible à la primogéniture mâle. Baron transmissible à la primogéniture mâle en 1923.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Dorlodot (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1857 et 1923. Baron transmissible à la primogéniture mâle en 1920, extension de ce même titre à des frères cadets en 1934. Augmentation d&#039;armoiries en 1904 et baron transmissible à la primogéniture mâle en 1934, extension de ce même titre à des fils et petits-fils. Baron transmissible à la primogéniture mâle en 1892 pour une autre branche. Baron transmissible à la primogéniture mâle en 1921.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Dorlodot.png|60px|alt=Armes des barons de Dorlodot]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Douxchamps Segesser de Brunegg&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire avec le titre personnel de chevalier le 14 octobre 1993&amp;lt;ref&amp;gt;[https://books.google.com/books?id=OKuL8mfCJc4C&amp;amp;pg=PA114&amp;amp;lpg=PA114&amp;amp;dq=Douxchamps+Segesser+de+Brunegg&amp;amp;source=bl&amp;amp;ots=dVnLvp_DG0&amp;amp;sig=g9R-h0y7qdPzqI4EcgFJPTUEnME&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ved=0CDQQ6AEwBGoVChMI8qmJvsD0xwIVDJgaCh012wvK#v=onepage&amp;amp;q=Douxchamps%20Segesser%20de%20Brunegg&amp;amp;f=false Adelbrieven verleend door Z.M. Albert II, Koning der Belgen, 1993-2000.]&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref&amp;gt;[http://archives.lesoir.be/24-nouveaux-anoblissements-dirk-frimout-fait-vicomte-pa_t-19920718-Z05LCM.html 24 nouveaux anoblissements.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Drion du Chapois&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1886, titre transmissible à la primogéniture mâle. Modification d&#039;armoiries en 1898. Adjonction du nom &#039;&#039;du Chapois&#039;&#039; en 1898.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Dumont&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1991, concession de noblesse héréditaire et du titre personnel de baron à M. Georges-Henri Dumont&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot; /&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Dumont de Chassart&amp;lt;ref name=&amp;quot;EPN1973_D-Dum&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1906, adjonction du nom &#039;&#039;de Chassart&#039;&#039; en 1908. Baron transmissible à la primogéniture mâle en 1963.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Duquesne Watelet de la Vinelle&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;&amp;gt;Oscar Coomans de Brachène &amp;amp; Georges de Hemptinne, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1974, première partie, Duq - For, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1974.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1898. Adjonction du nom &#039;&#039;de Watelet de la Vinelle&#039;&#039; en 1908.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Duve (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille de Duve&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et autorisation d&#039;adjoindre la particule &#039;&#039;&amp;quot;von&amp;quot;&#039;&#039; à leur nom en 1767.&lt;br /&gt;
Reconnaissance de noblesse en 1858.&lt;br /&gt;
Titre de vicomte attribué à Christian de Duve (1989), prix Nobel de Médecine.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Duve.png|60px|alt=Armes de la famille de Duve]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== E ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Eecken (Van der)&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1991, concession de noblesse héréditaire et du titre personnel de chevalier à M. Henri Van der Eecken&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot; /&amp;gt;, &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Eetvelde (van)&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés baron en 1897, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Elst (van der)&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1894, titre de chevalier transmissible à la primogéniture mâle en 1899, titre de baron transmissible à la primogéniture mâle en 1910 et 1919.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Empain&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Aîné (Edouard) anobli et créé baron en 1907 (titre transmissible par ordre de primogéniture masculine), son frère cadet (François) anobli en 1913 et créé baron en 1921 (titre transmissible par ordre de primogéniture masculine). Extension du titre de baron au fils cadet d&#039;Edouard en 1923 (et par ordre de primogéniture masculine pour sa descendance) et autorisation à la même date aux fils d&#039;Edouard de porter leur titre du vivant de leur père.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Emsens&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 2005, concession de noblesse héréditaire à MM. Gaëtan et Claude Emsens ainsi que concession du titre héréditaire de baron à M. Stanislas Emsens&amp;lt;ref&amp;gt;Arrêté royal du 8 juillet 2005 publié au Moniteur belge du 15 juillet 2005.&amp;lt;/ref&amp;gt;, &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Enffans d&#039;Avernas (des)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1642, concession en Autriche du titre de comte pour tous en 1805. Admission dans la noblesse belge avec le titre de comte pour tous en 1955.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries des Enffans.png|60px|alt=Armoiries des Enffans]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Englert&amp;lt;ref name=&amp;quot;ANRB_276&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire avec le titre de baron pour François Englert en 2013.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Ernst de Bunswyck&amp;lt;br/&amp;gt;Ernst de la Graete&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1871 (lignée de la Graete) et en 1964 et 1976&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt; (lignée de Bunswyck). Adjonction du nom &#039;&#039;de la Graete&#039;&#039; en 1929 et ensuite anoblis en 1964. Baron pontifical en 1875, adjonction du nom &#039;&#039;de Bunswyck&#039;&#039; en 1912, et baron transmissible à la primogéniture mâle en 1924 et 1930. Titre de chevalier (pour un rameau de la lignée de Bunswyck) transmissible à la primogéniture mâle en 1914 et ensuite titre de baron transmissible à la primogéniture mâle en 1930.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Ernst.png|60px|alt=Armes de la famille Ernst]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Errembault de Dudzeele&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Errembault du Maisnil et du Coutre&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte en 1774 pour la branche Dudzeele. Reconnaissance implicite de noblesse et titre de comte personnel pour la branche de &#039;&#039;Dudzeele&#039;&#039; en 1868, comte pour tous en 1878. Reconnaissance de noblesse en 1822 pour la branche &#039;&#039;du Maisnil et du Coutre&#039;&#039;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Errembault de Dudzeele.png|60px|alt=File:Armoiries de la famille Errembault de Dudzeele]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Everard&amp;lt;br/&amp;gt;Everard de Harzir&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1904, adjonction du nom &#039;&#039;de Harzir&#039;&#039; en 1934. Titre de chevalier transmissible à la primogéniture mâle en 1957 et en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Everarts de Velp&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;de Velp&#039;&#039; en 1926, concession de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Eyll (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse et concession du titre de chevalier à titre personnel en 1662. Reconnaissance de noblesse et membre du corps équestre du Luxembourg en 1816. Baron pour tous en 1871. Admission dans la noblesse belge et concession du titre de baron transmissible à la primogéniture mâle en 1922 pour une autre branche.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van Eyll.png|60px|alt=File:Armoiries de la famille van Eyll]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Eyskens&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés vicomtes en 1973, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Eyskens.png|60px|alt=Armes vicomte Eyskens]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== F ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Fabribeckers de Cortils et Grâce (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Chevaliers du Saint-Empire en 1705. Reconnaissance de noblesse et désignation de membre du corps équestre&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Pas de reconnaissance du titre chevalier.&amp;lt;/ref&amp;gt; en 1816. Reconnaissance du titre de chevalier pour tous les mâles en 1886. Adjonction du nom &#039;&#039;de Grâce&#039;&#039; en 1931.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Fabribeckers de Cortils et Grâce.png|60px|alt=File:Armoiries de la famille de Fabribeckers de Cortils et Grâce]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Faille de Waerloos (della)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Faille d&#039;Huysse (della)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Faille d&#039;Huysse van den Hecke de Lembeke (della)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Faille de Leverghem (della)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Faille de Modave de Masogne (della)&#039;&#039;&#039;{{refins|&amp;lt;ref name=&amp;quot;CM2014&amp;quot;&amp;gt;&#039;&#039;Carnet Mondain 2014 et Familles (presque) éteintes de la Noblesse belge.&#039;&#039;&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;quot;Concession&amp;quot; d&#039;armoiries en 1562, concession de noblesse en 1642, augmentation d&#039;armoiries en 1675, chevalier à titre personnel en 1679. Baron d&#039;Huysse en 1736.&amp;lt;br/&amp;gt;Ligne de &#039;&#039;Waerloos&#039;&#039; : reconnaissance de noblesse en 1889.&amp;lt;br/&amp;gt;Ligne d&#039; &#039;&#039;Huyse&#039;&#039; : reconnaissance de noblesse et du titre de baron transmissible à la primogéniture mâle en 1816, membre du corps équestre et citation sur la première liste officielle des nobles sous le nom &#039;&#039;della Faille d&#039;Huysse&#039;&#039; la même année, baron pour tous en 1843, autorisation de joindre le nom &#039;&#039;d&#039;Huysse&#039;&#039; en 1885 et 1890, adjonction du nom &#039;&#039;van den Hecke de Lambeke&#039;&#039; en 1940&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Après adoption par une tante née &#039;&#039;van den Hecke de Lambeke&#039;&#039;&amp;lt;/ref&amp;gt;&amp;lt;br/&amp;gt;Ligne de &#039;&#039;Leverghem&#039;&#039; : reconnaissance de noblesse en 1816, membre du corps équestre et citation sur la première liste officielle des nobles la même année, titre de comte transmissible à la primogéniture mâle en 1893, titre de baron transmissible à la primogéniture mâle en 1964.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille della Faille de Leverghem.png|60px|alt=File:Armoiries de la famille della Faille de Leverghem]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Failly (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1869, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Failly.png|60px|alt=Armes de Failly]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Fallon&amp;lt;br/&amp;gt;Fallon Kund&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1857, titre transmissible à la primogéniture mâle, extension du titre à deux petits-fils en 1859. Baron transmissible à la primogéniture mâle en 1931. Baron pour tous en 1871, 1967 et 1968. Adjonction du nom Kund en 1928&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;À la suite de l&#039;adoption par un oncle nommé &#039;&#039;Kund&#039;&#039;&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Fallon.png|60px|alt=File:Armoiries de la famille Fallon]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Favereau (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Favereau de Jeneret (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1747, reconnaissance de noblesse en 1895 pour la branche aînée. Reconnaissance de noblesse et concession du titre de baron tranmissible à la primogéniture mâle pour une seconde branche en 1889, cette branche reçut l&#039;autorisation de joindre à leur nom celui de &#039;&#039;de Jeneret&#039;&#039; en 1928, extension du titre de baron à tous les enfants du Couple Favereau de Jeneret - Aspremont Lynden en 1937.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Favereau.png|60px|alt=File:Armoiries de la famille de Favereau]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Fierlant (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Fierlant Dormer (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Augmentation d&#039;armoiries en 1664. Reconnaissance de noblesse et créés barons en 1838, titre transmissible à la primogéniture mâle. Baron pour tous en 1871. Reconnaissance de noblesse et concession du titre de baron pour tous pour une autre ligne en 1871. Adjonction du nom &#039;&#039;Dormer&#039;&#039; en 1888.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Blason de la famille de Fierlant.png|60px|alt=Armes de la famille de Fierlant]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Fisenne (de)&#039;&#039;&#039;&amp;lt;ref&amp;gt;État présent de la noblesse belge, 2002, {{pp.|134-135}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse du Saint-Empire par l&#039;empereur Léopold {{Ier}} en faveur d&#039;Antoine-Georges &#039;&#039;Fisen&#039;&#039;, alias &#039;&#039;de Fisen&#039;&#039; en 1701.&lt;br /&gt;
Reconnaissance de noblesse par le roi Philippe V d&#039;Espagne en faveur du même en 1706.&amp;lt;br&amp;gt;Reconnaissance de noblesse, en Prusse, en faveur de Pierre-Georges &#039;&#039;von Fisenne&#039;&#039; en 1827.&amp;lt;br&amp;gt;Incorporation de Pieter &#039;&#039;von Fisenne&#039;&#039; dans la noblesse des Pays-Bas en 1866.&amp;lt;br&amp;gt;Reconnaissance de noblesse en 2001.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Von Fisenne wapen.png|60px|alt=Armes de Fisenne]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Floor&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire et du titre personnel de chevalier en 1974.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Fœstraets (de)&#039;&#039;&#039;&amp;lt;ref&amp;gt;{{Ouvrage|langue=français|auteur1=|titre=Etat présent de la noblesse belge|passage=t. 2, p. 268.|lieu=|éditeur=|année=2006|pages totales=|isbn=|lire en ligne=}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse par l&#039;impératrice Marie-Thérèse en 1756. Reconnaissance de noblesse en 1822.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Blason famille be de Fœstraets.png|60px|alt=Armes de la famille de Fœstraets]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Fontainas&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1940.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Fontaine de Ghélin&amp;lt;ref&amp;gt;{{Ouvrage|langue=|auteur1=|titre=Etat présent de la noblesse belge|passage=t. 2, p. 277.|lieu=|éditeur=|année=2006|pages totales=|isbn=|lire en ligne=}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Branche aînée de la famille Fontaine (voir ci-dessous).&amp;lt;br&amp;gt;Concession de noblesse en 1823. Jugement du tribunal de première instance de Charleroi qui porte rectification du nom &#039;&#039;Fontaine&#039;&#039; en celui &#039;&#039;Fontaine de Ghélin&#039;&#039; en 1859.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Blason famille be Fontaine de Ghélin.png|60x60px|alt=Armes de la famille Fontaine de Ghélin]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Fontaine (de)&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Branche cadette de la famille Fontaine (voir ci-dessus).&amp;lt;br&amp;gt;Anoblis en 1924, concession du titre de chevalier transmissible à la primogéniture mâle en 1938.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Forgeur&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;{{,}}&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Les armes de cette famille sont assez exceptionnelles car l&#039;un des quartiers contient une tête de mort ; élément peu courant en héraldique familiale.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1872, titre transmissible à toute la descendance. Augmentation d&#039;armoiries en 1888.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Formanoir de la Cazerie (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Duq-For&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en faveur de Félix de Formanoir de la Cazerie par le roi Guillaume {{Ier}} des Pays-Bas en 1823, mention sur la {{1ère}} liste officielle des nobles.&amp;lt;br&amp;gt;Une deuxième ligne obtint reconnaissance de noblesse en 1823 en la personne de Pierre-Hubert de Formanoir de la Cazerie, frère du précédent, il est aussi mentionné sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Fosse et d&#039;Espierres (del)&#039;&#039;&#039;&amp;lt;ref&amp;gt;{{Ouvrage|langue=|auteur1=|titre=Etat présent de la noblesse belge|passage=t. 2, p. 295.|lieu=|éditeur=|année=2006|pages totales=|isbn=|lire en ligne=}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et désignation comme membre du corps équestre de la Flandre occidentale avec le titre de baron par l&#039;arrêté collectif de 1816. Mention de transmission du titre par ordre de primogéniture [masculine] sur la première liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Blason famille be del Fosse et d&#039;Espierres.png|60x60px|alt=Armes de la famille de Folle et d&#039;Espierres]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Foy (de)&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1974, seconde partie, Fos - Gom, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1974.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1934.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Fraeijs de Veubeke&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Concession de noblesse en 1929.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Francquen (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Reconnaissance de noblesse en 1882.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Blason famille be de Francquen.png|60px|alt=Armes de la famille de Francquen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Franchimont&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Première et Deuxième branches: Concession de noblesse héréditaire en 1991.&amp;lt;br&amp;gt;Troisième branche: Concession de noblesse héréditaire et du titre personnel de baron en 1991.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Franck&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Concession de noblesse personnel et du titre personnel de baron en faveur de Jacques Franck en 2004.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Franckx&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |baronne&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Concession de noblesse personnelle et du titre personnel de baronne en faveur de Hilde Franckx en 2002.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|François&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Concession de noblesse héréditaire et du titre personnel de baron en 1983.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Francqui&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1967. Titre de comte transmissible à la primogéniture mâle pour l&#039;une des quatre branches anoblies.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|Frederic&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;{{Ouvrage|langue=|auteur1=Comte Humbert de Marnix de Sainte Aldegonde|titre=Etat présent de la noblesse belge|passage=seconde partie.|lieu=Bruxelles|éditeur=|année=2006|pages totales=|isbn=|lire en ligne=}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron transmissible par ordre de primogéniture masculine en 1929.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Fredericq&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1931, titre transmissible à la primogéniture mâle. Une deuxième branche obtint concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1958. Un frère cadet issu de cette seconde branche obtint concession du titre de baron transmissible à la primogéniture mâle en 1973.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Frère&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Concession de noblesse héréditaire en 1995 avec titre personnel de baron à Albert Frère, puis concession du titre de baron à ses descendants&amp;lt;ref name=&amp;quot;AR 13 juillet 2017&amp;quot; /&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Frimout&amp;lt;ref&amp;gt;{{Ouvrage|langue=français|auteur1=|titre=Etat présent de la noblesse belge|passage=t. 2, p. 334.|lieu=|éditeur=|année=2006|pages totales=|isbn=|lire en ligne=}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire et du titre personnel de vicomte en 1993.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== G ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Gaiffier d&#039;Emeville (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Gaiffier d&#039;Hestroy (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br /&amp;gt;baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse (pour autant que de besoin) en 1635. Reconnaissance de noblesse en 1816, concession du titre de baron en 1820, concession du titre de vicomte en 1828. Mention que le titre se transmettra par ordre de primogéniture sur la {{1ère}} et la {{5e|liste}} officielle des nobles.&amp;lt;br/&amp;gt;Adjonction du nom &#039;&#039;d&#039;Emeville&#039;&#039; à la branche ainée en 1888.&amp;lt;br/&amp;gt;Concession du titre de baron sous le nom &#039;&#039;de Gaiffier d&#039;Hestroy&#039;&#039; tranmissible à la primogéniture mâle en 1843 et en 1906 pour une seconde branche, baron pour tous en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Gaiffier d&#039;Hestroy.png|60px|alt=File:Armoiries de la famille de Gaiffier d&#039;Hestroy]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Geelhand de la Bistrate&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;Geelhand de Merxem&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1728.&amp;lt;br&amp;gt;Reconnaissance de noblesse et mention sur la {{1ère}} liste officielle des nobles en 1823 en faveur de Joseph-Pierre Geelhand (1785-1877). Adjonction du nom &#039;&#039;de la Bistrate&#039;&#039; en 1888 pour la branche aînée. Rectification du nom &#039;&#039;Geelhand&#039;&#039; en &#039;&#039;Geelhand de Merxem&#039;&#039; par jugement du 18 avril 1951 pour la deuxième et troisième branche.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Geelhand.png|60px|alt=Armes de la famille Geelhand]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Gendebien&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1903, titre de baron transmissible à la primogéniture mâle en 1930 et en 1933.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Genon&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre personnel de baron pour &#039;&#039;Emile&#039;&#039;-Jean-Joseph († 1972) en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Geradon (de)&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Geradon Braconier (de)&amp;lt;ref name=&amp;quot;EPN2006_Fis-God&amp;quot;&amp;gt;Humbert de Marnix de Sainte Aldegonde, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 2006, Fis - God, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 2006.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1825, mention sur la deuxième liste officielle des nobles. Titres de chevalier transmissibles par primogéniture mâle pour deux membres de la branche aînée : l&#039;un en 1951 et l&#039;autre en 1962 ({{1er|rameau}} de la branche ainée). Adjonction du nom &#039;&#039;Braconier&#039;&#039; en 1977&amp;lt;ref name=&amp;quot;EPN2006_Fis-God&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Geradon.png|60px|alt=File:Armoiries de la famille de Geradon]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Gericke d&#039;Herwijnen&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis aux Pays-Bas en 1833, concession aux Pays-Bas du titre de baron transmissible à la primogéniture mâle en 1846, baron pour tous aux Pays-Bas en 1874. Admission dans la noblesse belge avec le titre de baron pour tous en 1955.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Gericke d&#039;Herwijnen.png|60px|alt=Armes de la famille Gericke d&#039;Herwijnen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Gerlache (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Gerlache de Gomery (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Gerlache de Waillimont (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1751. Reconnaissance de noblesse en 1844. Concession du titre de baron transmissible à la primogéniture mâle en 1885. Par arrêté royal de 1895, le titre est passé à un frère cadet à la suite de la renonciation de son titre d&#039;un frère aîné entré dans les ordres. Concession du titre de baron transmissible à la primogéniture mâle à un frère cadet en 1924.&amp;lt;br/&amp;gt;Adjonction du nom &#039;&#039;de Waillimont&#039;&#039; pour une seconde branche en 1891.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1856 pour une deuxième ligne. Adjonction du nom &#039;&#039;de Gomery&#039;&#039; pour cette ligne en 1899 et concession du titre de baron transmissible à la primogéniture mâle en 1924.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Gerlache.png|60px|alt=Armes de Gerlache]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Gerven (Van)&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1991, concession de noblesse héréditaire et du titre personnel de baron à M. Walter Van Gerven&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot; /&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Gheldere (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Gheldere-Joos (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse (pour autant que de besoin) en 1727. Reconnaissance de noblesse en 1822 et mention sur la première liste officielle des nobles. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Gheldere.png|60px|alt=File:Armes de la famille de Gheldere]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Ghellinck d&#039;Elseghem (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Ghellinck d&#039;Elseghem Vaernewijck (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1705 mais annulée par décret impérial en 1716. Concession en 1715 de la chevalerie héréditaire du Saint-Empire, avec augmentation d&#039;armoiries et octroi de la particule par la Chancellerie impériale. En 1735, confirmation de la chevalerie avec effet rétroactif au 3 octobre 1715 par la Chancellerie des Pays-Bas. Reconnaissance de noblesse et du titre de chevalier en 1826, la même année, mention sur la troisième liste officielle des nobles avec mention que le titre de chevalier est transmissible à tous les mâles, concession du titre de comte pontifical transmissible à la primogéniture mâle en 1864, rectification de nom &#039;&#039;de Ghellinck&#039;&#039; en &#039;&#039;de Ghellinck d&#039;Elseghem&#039;&#039; en 1884, adjonction du nom &#039;&#039;Vaernewyck&#039;&#039; en 1885, augmentation d&#039;armoiries et créés vicomtes en 1900, titre transmissible à la primogéniture mâle, titre de vicomte transmissible à la primogéniture mâle en 1925 et en 1958.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Ghellinck.png|60px|alt=Armes de Ghellinck]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Giey (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance virtuelle de noblesse et du titre de baron pour tous les mâles en 1857 lorsque Henri de Giey (1805-1876) obtint l&#039;autorisation de prendre le titre de baron afin de perpétuer le souvenir de ses ancêtres qui avaient porté ce titre.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Giey.png|60px|alt=File:Armoiries de la famille de Giey]]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot;|Gilbert de Cauwer&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis par arrêté royal du 15 août 1906, ajout du nom &#039;&#039;de Cauwer&#039;&#039; par arrêté royal du 6 novembre 1928.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Gilbert de Cauwer.png|60px|alt=Armes de Gilbert]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Gillès de Pélichy&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse avec anoblissement pour autant que de besoin et concession du titre de chevalier en 1752. Reconnaissance de noblesse en 1829, titre de baron pour tous les mâles en 1842, mention sur la liste supplémentaire des nobles. Adjonction du nom de &#039;&#039;de Pelichy&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Nom du beau-père du baron Louis Gillès (1798-1876) dont il avait hérité&amp;lt;/ref&amp;gt; en 1872.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Gillès de Pélichy.png|60px|alt=File:Armoiries de la famille Gillès de Pélichy]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Gilliot&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1909.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:&amp;quot;D&#039;azur semé d&#039;étoiles à six rais d&#039;or à la croix fleurdelisée d&#039;argent chargée de cinq roses de gueules boutonnées d&#039;or et barbées de sinople brochant sur le tout&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Glénisson&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte romain transmissible à la primogéniture masculine&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Titre non-reconnu en Belgique.&amp;lt;/ref&amp;gt; en janvier 1902 en faveur d&#039;Édouard Antoine Marie Glénisson, concession d&#039;armoiries pour le même en septembre 1902&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Armoiries non-reconnues en Belgique. Blasonnement (latin): {{Langue|la|texte=&#039;&#039;&amp;quot;Stemma autem scuto consta quadrifariam diviso cuius in auratis prima et quarta parte trinae extent apes, duae sursum et una deorsum, in secunda vero et tertia, nigro unaquaque colore, argentea fascia transverse porrigatur, pinnis utrinque distincta.&amp;lt;br&amp;gt;Scuto denique corona impendeat comitalis, albaque taenia subiaceat dictum gerens: {{citation|&#039;&#039;Non permutare sed meliorare.&#039;&#039;}}&amp;quot;&#039;&#039;}}&amp;lt;/ref&amp;gt;.&amp;lt;br&amp;gt;Concession de noblesse en 1924 en faveur d&#039;Édouard-Antoine-Jean-Marie, commissaire d&#039;arrondissement à Alost, fils d&#039;Édouard précité.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Glénisson.png|60px|alt=Armes de la famille Glénisson]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Goblet d&#039;Alviella&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte d&#039;Alviella par la Reine Marie II de Portugal le 21 avril 1838. Comtes sous le nom &#039;&#039;Goblet d&#039;Alviella&#039;&#039; pour tous les mâles en Belgique  le 20 novembre 1838.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Goblet d&#039;Alviella.png|60px|alt=Armoiries de la famille Goblet d&#039;Alviella]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Godin&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1971, titre de chevalier transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Goethals de Mude de Nieuwland&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse en 1794. Reconnaissance de noblesse en 1822, concession du titre de comte héréditaire du Palais de Latran par le Pape Pie VIII en 1830, confirmation du titre personnel de comte en Belgique en 1838, confirmation de ce titre pour tous les descendants en 1841, mention sur la première liste officielle des nobles, membre de l&#039;ordre équestre de la Flandre orientale.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Goethals.png|60px|alt=Armes de Goethals]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Goethals&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de baron  transmissible à la primogéniture mâle pour la branche aînée en 1971. D&#039;autres branches obtinrent concessions de noblesse en 1897 en en 1925.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Goffinet&amp;lt;ref name=&amp;quot;EPN1974_Fos-Gom&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron en 1867 pour une branche aînée éteinte en 1931, titre étendu à toute la descendance en 1870&amp;lt;ref&amp;gt;Baron de Ryckman de Betz, &#039;&#039;Armorial général de la noblesse belge&#039;&#039;, H. Dessain, éditeur à Liège, 1941, {{p.|592}}.&amp;lt;/ref&amp;gt;.&amp;lt;br/&amp;gt;Trois frères d&#039;une branche cadette obtinrent une nouvelle concession de noblesse en 1946 dont l&#039;aîné (décédé sans descendance en 1973&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Son titre de baron transmissible à la primogéniture mâle échut à un neveu à la suite de son décès.&amp;lt;/ref&amp;gt;) avec le titre de baron transmissible à la primogéniture mâle. Un cousin germain de ces derniers obtint en même temps une concession de noblesse avec le titre de baron transmisible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Goffinet.png|60px|alt=Armories de Goffinet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Gourcy Serainchamps (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1975, première partie, Gor - Ha, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1975.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Famille d&#039;extraction chevaleresque, originaire de Lorraine dont la filiation remonte à Jean, seigneur de Gorcey en 1270&amp;lt;ref name=&amp;quot;books.google.fr&amp;quot;&amp;gt;[https://books.google.fr/books?id=to5YAAAAMAAJ&amp;amp;pg=PA311&amp;amp;dq=famille+de+gourcy&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ei=OYEbVO_CC5KyogS96YDICw&amp;amp;ved=0CCAQ6AEwAA#v=snippet&amp;amp;q=%22Gorcey%20ou%20Gourcy%3A%20village%22&amp;amp;f=false François Alexandre Aubert de La Chesnaye-Desbois  Dictionnaire de la noblesse... 1774, page 305]&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;IFCAAAAcAAJ 1866, page 83&amp;quot;&amp;gt;[https://books.google.fr/books?id=dIFCAAAAcAAJ&amp;amp;pg=PA99&amp;amp;dq=Gourcy+chanoine-comte+de+Lyon&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ei=Bo0bVNHcBaSCjAKp54Eg&amp;amp;ved=0CCAQ6AEwAA#v=onepage&amp;amp;q=%22s&#039;appelait%20primitivement%20Gorcey%22&amp;amp;f=false  Charles Emmanuel Joseph Poplimont &amp;quot;La Belgique Héraldique&amp;quot;, 1866, page 83 et suivantes.]&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;France page 189&amp;quot;&amp;gt;Henri Jougla de Morenas &amp;quot;Grand Armorial de France, volume 4, page 189.&amp;lt;/ref&amp;gt;. Reconnaissance de noblesse et du titre de comte pour tous en 1829, mention sur la cinquième liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Gourcy.png|60px|alt=File:Armoiries de la famille de Gourcy]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Gourdet&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1930.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Gracht de Rommerswael (van der)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et du titre de baron transmissible à la primogéniture mâle en 1816 lors de la désignation comme membre du corps d&#039;équestre d&#039;Anvers, mention sur la première liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van der Gracht de Rommerswael.png|60px|alt=File:Armoiries de la famille van der Gracht de Rommerswael]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Grady de Horion (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de chevalier du Saint-Empire en 1705. Seigneurs de Horion. Reconnaissance de noblesse et du titre de chevalier pour tous les mâles en 1829, mention sur la liste supplémentaire des nobles en 1856.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Grady de Horion.png|60px|alt=File:Armoiries de la famille de Grady]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Grand Ry (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en Prusse en 1827. Admission dans la noblesse belge en 1933 pour la branche aînée. Reconnaissance de noblesse en 1844 et concession du titre de baron transmissible à la primogéniture mâle pour une autre branche.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Grand Ry.png|60px|alt=File:Armes de la famille de Grand Ry]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Granges de Surgères (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Maintenue de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1715 par l&#039;Intendant de la Généralité de Poitiers. Admission dans la noblesse belge avec le titre de chevalier transmissible à la primogéniture mâle en 1968.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Granges de Surgères.png|60px|alt=Armes de la famille de Granges de Surgères]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Greef (de)&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés baron en 1965, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Greindl&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1856, titre transmissible à la primogéniture mâle. Baron pour tous en 1871. Concession du titre de comte transmissible à la primogéniture mâle en 1912.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Greindl.png|60px|alt=Armes de Greindl]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Grelle (Le)&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Branche aînée actuellement éteinte anoblie en 1794&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille le Grelle&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;. Autres branches de la famille anoblies en 1822 et 1826. Titre de comte pontifical pour tous par bref du Pape Pie IX en 1852 et autorisation de porter ce titre de comte pontifical (transmissible à la primogéniture mâle) en Belgique en 1853. Extension de ce titre à tous les descendants en 1871. Mention sur le troisième liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des comtes Le Grelle.png|60px|alt=Armes des comtes Le Grelle]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Groote (de)&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons du Saint-Empire Romain en 1613. Reconnaissance de noblesse avec le titre de baron pour tous en 1903.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Groote (Bruxelles).png|60px|alt=Armes de la famille de Groote (Bruxelles)]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Groothaert (de)&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;notice Kint&amp;quot;&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Kint&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse avec le titre personnel de baron en 1991.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Gruben (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Admission dans la noblesse en 1822, admission dans la noblesse avec le titre de baron pour tous en 1824, mention sur la première liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Gruben.png|60px|alt=File:Armoiries de la famille de Gruben]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Guillaume&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés baron en 1873, titre transmissible à toute la descendance.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Guillaume (Bruxelles).png|60px|alt=Armes de la famille Guillaume (Bruxelles)]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Gysel de Meise (van)&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille van Gysel&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;et&amp;lt;ref&amp;gt;Arrêté royal du 20 décembre 1995 paru au Moniteur belge du 18 janvier 1996 autorisant la substitution du nom &amp;quot;van Gysel de Meise&amp;quot; au nom &amp;quot;van Gysel&amp;quot;.&amp;lt;/ref&amp;gt;  &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse avec le titre personnel de chevalier en 1983. Concession du titre personnel de baron en 1992.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== H ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Halleux (de)&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;ANRB_272&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concessions de noblesse en 1929 et 2009.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Halloy de Waulsort (de)&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1925, adjonction du nom &#039;&#039;&amp;quot;de Waulsort&amp;quot;&#039;&#039; en 1937 et 1938.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Hardÿ de Beaulieu (le)&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1893, titre transmissible à la primogéniture mâle. Concession du titre de vicomte transmissible à la primogéniture mâle en 1900, 1924 et 1970.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille le Hardÿ de Beaulieu.png|60px|alt=Armes le Hardÿ de Beaulieu]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Harlez de Deulin (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier par le comte de Zeyll en 1762. Reconnaissance de noblesse et du titre de chevalier transmissible à tous les mâles en 1828. Concession du titre de vicomte transmissible à la primogéniture mâle en 1928.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Harmel&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Harmel&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de comte pour tous en 1991 pour Pierre Harmel (1911-2009).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Haulleville (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en Lorraine en 1753. Reconnaissance de noblesse en 1861, concession du titre de baron pour tous en Autriche en 1867. Concession du titre de baron transmissible à la primogéniture mâle en 1929.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Haulleville.png|60px|alt=Armes de la famille de Haulleville]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Haus&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1892 et créés baron en 1953, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Havre (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevalier du Saint-Empire en 1716. Baron de l&#039;Empire en 1814&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Les lettres patentes n&#039;ont pas pu être levées.&amp;lt;/ref&amp;gt;. Reconnaissance de noblesse et du titre de chevalier pour tous les mâles 1816. Membre du corps équestre de la province d&#039;Anvers en 1816. Mention sur la première liste officielle des nobles. Concession du titre personnel de baron en 1840. Concession du titre de baron transmissible à la primogéniture mâle en 1840. Reconnaissance de noblesse et du titre de chevalier pour tous les mâles pour une seconde branche.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van Havre.png|60px|alt=File:Armoiries de la famille van Havre]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Hayoit de Termicourt&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom de &#039;&#039;de Termicourt&#039;&#039; en 1891. Anoblis et créés vicomtes en 1968, titre transmissible à la &lt;br /&gt;
primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Hecke (van den)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_Gor-Ha&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1696.&amp;lt;br&amp;gt;Reconnaissance de noblesse en 1828 et mention sur la {{4e}} liste officielle des nobles en faveur de Jean-Bruno-Ghislain van den Hecke (1761-1842).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Hemptinne (de)&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1975, seconde partie, He - Hou, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1975.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Une première ligne a été anoblie en 1888 et créée comte en 1894, titre transmissible à la primogéniture mâle. Concession du titre de comte transmissible à la primogéniture mâle pour une autre branche en 1924.&amp;lt;br/&amp;gt;Une seconde ligne possédait le titre de comte pontifical avant son anoblissement avec le titre de comte en 1886, titre transmissible à la primogéniture mâle. Concession du titre de comte transmissible à la primogéniture mâle en 1920 et en 1921.&amp;lt;br/&amp;gt;Une troisième ligne obtint concession de noblesse en 1888 et, par la suite, concession du titre de comte transmissible à la primogéniture mâle en 1954.&amp;lt;br/&amp;gt;Concession du titre personnel de baron en 2002&amp;lt;ref name=&amp;quot;ANRB_232&amp;quot;&amp;gt;&#039;&#039;Bulletin trimestriel&#039;&#039;, publié par &#039;&#039;Association de noblesse du royaume de Belgique, {{numéro|232}}, octobre 2002.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Hemptinne.png|60px|alt=Armes de la famille de Hemptinne]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Hemricourt de Grunne (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Comtes du Saint-Empire en 1747. Reconnaissance de noblesse et du titre de comte pour tous en 1816. Membre du corps équestre de la province de Namur. Mention sur la première liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des comtes d&#039;Hemricourt de Grunne.png|60px|alt=Armes des comtes d&#039;Hemricourt de Grunne]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Hennezel (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Maintenue de noblesse par l&#039;intendance de Lorraine et Barrois en 1646. Maintenue de noblesse par le conseil d&#039;État de Lorraine en 1664. Preuves de noblesse devant d&#039;Hozier pour l&#039;entrée dans les Écoles royales militaires en 1780. Naturalisation belge ordinaire en 1960, admission dans la noblesse belge en 1974.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Hennin de Boussu Walcourt (de)&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Rectification du nom &#039;&#039;Dehennin&#039;&#039; en &#039;&#039;de Hennin&#039;&#039; en 1884, adjonction du nom de &#039;&#039;&amp;quot;de Villiers&amp;quot;&#039;&#039; en 1893, adjonction du nom de &#039;&#039;&amp;quot;de Boussu Walcourt&amp;quot;&#039;&#039; en 1895 et 1896, concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1932, conversion de la concession de noblesse en admission dans la noblesse belge avec modification d&#039;armoiries par voie de reconnaissance en 1958, 1960 et 1967.&amp;lt;br/&amp;gt;Une autre branche obtint reconnaissance de noblesse en 1983&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;{{,}}&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Selon Jean-François Houtart dans son ouvrage &#039;&#039;Anciennes familles de Belgique&#039;&#039; paru à Bruxelles en 2008, le Conseil héraldique se serait laissé abuser en 1957 lorsqu&#039;il accorda une admission dans la noblesse belge sur base d&#039;une sentence de l&#039;Élection d&#039;Artois de 1609 - confirmée par le Grand conseil de Malines en 1641 - qui rattache indûment la famille de Hennin de Boussu Walcourt à la maison noble des Haynin du comté de Hainaut. Houtart donne pour littérature à propos de cette famille : 1°) Thierry de Hennin de Boussu Walcourt, &#039;&#039;Les origines et l&#039;ascendance de la Maison de Hennin de Boussu Walcourt&#039;&#039;, 1961 et 2°) critique de cet ouvrage par Frédéric Collon, dans &#039;&#039;L’intermédiaire des Généalogistes&#039;&#039;, 1962, {{p.|151}} ([http://agfh59.free.fr/dehainin/Hennin_Frederic_Collon.pdf voir l&#039;article de Frédéric Collon]). Voir également l&#039;article publié en mars 2017 dans le n° 133 de la revue de l’A.G.F.H. (Association Généalogique Flandres Hainaut), où Pierre Sage réfute les conclusions de Frédéric Collon ([http://agfh59.free.fr/dehainin/Article_AGFH_2N12BW.pdf voir l&#039;article de Pierre Sage]).&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Hennin de Boussu Walcourt.png|60px|alt=Armes de Hennin de Boussu Walcourt]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Henry de Frahan&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom de &amp;quot;de Frahan&amp;quot;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Nom présent dans l&#039;ascendance maternelle.&amp;lt;/ref&amp;gt; en 1921 et anoblis en 1923.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason Henry de Frahan (Belgique).jpg|60px|alt=Blason Henry de Frahan.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Herckenrode (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et concession du titre de baron transmissible à la primogéniture mâle en 1846.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Herckenrode.png|60px|alt=File:Armoiries de la famille de Herckenrode]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Herry&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1756. Reconnaissance de noblesse en 1880. Concession du titre de baron transmissible à la primogéniture mâle en 1898 pour la branche aînée.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason de la famille Herry.jpg|64px|Blason de la famille Herry]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Heusch de la Zangrye (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Heusch de Hannesche (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Admission à l&#039;État noble de Namur en 1725. Reconnaissance de noblesse et du titre de baron pour tous en 1822. Mention sur la première liste officielle des nobles sous le nom de &#039;&#039;&amp;quot;de Heusch de la Zangrye&amp;quot;&#039;&#039;.&amp;lt;br/&amp;gt;Une autre branche connue sous le nom &#039;&#039;&amp;quot;de Heusch de Hannesche&amp;quot;&#039;&#039; était membre de l&#039;ordre équestre, obtint reconnaissance de noblesse et du titre de baron pour tous en 1823. Mention sur la {{2e}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Heusch de la Zangrye.png|60px|alt=File:Armoiries de la famille de Heusch de la Zangrye]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Hollanders de Ouderaen&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1925, adjonction du nom de &#039;&#039;&amp;quot;de Ouderaen&amp;quot;&#039;&#039; en 1926.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Holvoet&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1823, membre du corps équestre de la Flandre occidentale. Mention sur la première liste officielle des nobles. Une branche obtint concession du titre de baron transmissible à la primogéniture mâle en 1921.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Holvoet.png|60px|alt=File:Armoiries de la famille Holvoet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Hontheim (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1622, confirmation de noblesse en 1627. Reconnaissance de noblesse et membre du corps équestre du Luxembourg en 1816. Concession du titre de chevalier pour tous les mâles antidatée à la date à laquelle la reconnaissance de noblesse eut lieu. Mention sur la première liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Hontheim.png|60px|alt=File:Armoiries de la famille de Hontheim]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Hoobrouck d&#039;Aspre (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1658. Concession du titre de baron (avec reconnaissance implicite de noblesse) en 1869, titre transmissible à la primogéniture mâle, adjonction du nom de &#039;&#039;&amp;quot;d&#039;Aspre&amp;quot;&#039;&#039; en 1885.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van Hoobrouck d&#039;Aspre.png|60px|alt=File:Armoiries de la famille van Hoobrouck d&#039;Aspre]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Hoop (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1789. Reconnaissance de noblesse en 1859. En 1994, substitution du nom &amp;quot;d&#039;Hoop de Synghem&amp;quot; à celui de &amp;quot;d&#039;Hoop&amp;quot;&amp;lt;ref&amp;gt;Arrêté royal du 6 octobre 1994.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes_dHoop.jpg|60px|alt=Armes d&#039;Hoop]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Houtart&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1921. Diverses concessions du titre de baron transmissible à la primogéniture mâle en 1929, 1933, 1935 et en 1956 pour les 3 fils de François Houtart et de Marie-Louise Vanderstraeten.&amp;lt;br/&amp;gt;Une autre branche obtint concession du titre de baron pontifical en 1871, anoblissement en Belgique et concession du titre de baron en 1892, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Houtart.png|60px|alt=Armes de la famille Houtart]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Houtte (van)&amp;lt;ref name=&amp;quot;EPN1975_He-Hou&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1970, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Hove d&#039;Ertsenryck (van den)&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1976, première partie, Hov - J, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1976.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom de &#039;&#039;&amp;quot;d&#039;Ertsenryck&amp;quot;&#039;&#039; en 1921. Anoblis en 1932. Concession du titre de chevalier transmissible  la primogéniture mâle en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Hövell tot Westervlier (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Admission au corps équestre du Gelderland en 1814. Reconnaissance du titre de baron pour tous en 1819. Mentions sur les {{1ère}} et {{2e}} listes officielles des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Hoye (de Le)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1782. Reconnaissance de noblesse en 1825. Mention sur la {{2e}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Le Hoye.png|60px|alt=Armes de Le Hoye]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Huart (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier du Saint-Empire en 1613. Concession du titre de baron en 1709. Reconnaissance de noblesse et du titre de baron transmissible à la primogéniture mâle en 1816. Membre du corps équestre du Luxembourg en 1816. Mention sur la {{1ère}} liste officielle de nobles. Concession du titre de baron pour les trois branches de la seconde ligne en 1842 et en 1843, titres transmissibles à toutes les descendances.&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |[[File:D&#039;Huart armes-variante.png|80px|alt=Armes d&#039;Huart]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Huart&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1956, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Hufkens&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 2008, concession de noblesse héréditaire et du titre personnel de chevalier à M. Guy Hufkens. En 2013, extension du titre de chevalier aux deux fils. En 2015, concession du titre de baron à lui-même et tous ses descendants au chevalier Guillaume (Guy) Hufkens. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Hynderick de Theulegoet&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Hynderick de Ghelcke&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1781. Concession du titre de chevalier en 1789. Reconnaissance de noblesse et du titre de chevalier transmissible à tous les mâles en 1829. Mention sur la {{5e}} liste officielle des nobles. Adjonction du nom de &#039;&#039;&amp;quot;de Theulegoet&amp;quot;&#039;&#039; pour la branche aînée en 1895. Adjonction du nom de &#039;&#039;&amp;quot;de Ghelcke&amp;quot;&#039;&#039; en 1910.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Hynderick.png|60px|alt=File:Armoiries de la famille Hynderick]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== I ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Imperiali des Princes de Francavilla&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|marquis&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Italie, noblesse féodale, créés marquis par le Roi d&#039;Espagne en 1668. Admission dans la noblesse belge en 1902 avec le titre de marquis transmissible à la primogéniture masculine.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Stemma Imperiali.jpg|60px|alt=Armes d&#039;Imperiali]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Iweins d&#039;Eeckhoutte&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Iweins de Wavrans&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse pour la ligne &#039;&#039;&amp;quot;Iweins de Wavrans&amp;quot;&#039;&#039; en 1793. Cette ligne obtint reconnaissance de noblesse en 1884 et adjoignit à son nom celui de &#039;&#039;&amp;quot;de Wavrans&amp;quot;&#039;&#039; en 1921, une branche de cette ligne obtint concession du titre de baron en 1937, titre transmissible à la primogéniture mâle.&amp;lt;br/&amp;gt; La ligne &#039;&#039;&amp;quot;Iweins d&#039;Eeckhoutte&amp;quot;&#039;&#039; obtint concession de noblesse en 1861 et adjoignit à son nom celui de &#039;&#039;&amp;quot;d&#039;Eeckhoutte&amp;quot;&#039;&#039; en 1885.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes d&#039;Iweins.png|60px|alt=Armes d&#039;Iweins]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== J ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Jacobs de Hagen&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br&amp;gt;baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1965&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;.&amp;lt;br&amp;gt;Concession du titre de baron en faveur de Georges Jacobs et de sa descendance&amp;lt;ref&amp;gt;Adelbrieven verleend door Z.M. Albert II, Koning der Belgen, 1993-2000, Lannoo, 2001, {{p.|144}}. [https://books.google.be/books?id=OKuL8mfCJc4C&amp;amp;lpg=PA144&amp;amp;pg=PA144#v=onepage&amp;amp;q&amp;amp;f=false Lire en ligne].&amp;lt;/ref&amp;gt;. En 2007, autorisation de substitution au nom Jacobs celui de Jacobs de Hagen&amp;lt;ref&amp;gt;Arrêté royal du 23 mars 2007 publié au Moniteur belge le 10 avril 2007, page 20009.&amp;lt;/ref&amp;gt;. En 2008, concession du titre de comte pour lui-même et tous ses descendants au baron Georges Jacobs de Hagen&amp;lt;ref&amp;gt;Arrêté royal du 9 juillet 2008 publié au Moniteur belge du 14 juillet 2008.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Jacobs van Merlen&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;van Merlen&amp;quot;&#039;&#039; en 1936, concession de noblesse en 1951.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Jacques de Dixmude&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1919, titre transmissible à la primogéniture mâle. Extension du titre à deux fils cadets en 1923. Adjonction du nom &#039;&#039;&amp;quot;de Dixmude&amp;quot;&#039;&#039; en 1924. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Jacquet de Haveskercke&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;de Haveskercke&amp;quot;&#039;&#039; en 1931. Anoblis en 1953&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;.&amp;lt;br&amp;gt;Modification d&#039;armoiries en 1995&amp;lt;ref&amp;gt;Adelbrieven verleend door Z.M. Albert II, Koning der Belgen, 1993-2000, Lannoo, 2001, {{p.|148}}. [https://books.google.be/books?id=OKuL8mfCJc4C&amp;amp;lpg=PA148&amp;amp;pg=PA148#v=onepage&amp;amp;q&amp;amp;f=false Lire en ligne]&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;&#039;&#039;{{citation|Autorisation à remplacer le bourrelet sommant le heaume des armoiries de leur famille par une couronne à trois fleurons séparés par deux perles.}}&#039;&#039;&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Jacquier de Rosée (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1705. Concession du titre de baron en 1726. Reconnaissance de noblesse et du titre de baron transmissible à la primogéniture mâle en 1816, mention sur la première liste officielle des nobles la même année. Concession à un frère cadet du titre de baron transmissible à la primogéniture mâle en 1852. Concessions à des branches cadettes des titres de baron transmissibles aux primogénitures mâles en 1953.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Jacquier de Rosée.png|60px|alt=Armes de Jacquier de Rosée]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Jamblinne de Meux (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et désignation comme membre du corps équestre de la province de Namur en 1816, mention sur la première liste officielle des nobles la même année. Concession du titre de baron pour tous en 1871. Modification d&#039;armoiries en 1926 (le premier quartier de l&#039;écartelé devient les armes de la branche aînée).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Jamblinne de Meux.png|60px|alt=File:Armoiries de la famille de Jamblinne de Meux]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Janssen&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1910, titre transmissible à la primogéniture mâle. Concession du titre personnel de baron à un frère cadet en 1910. Une autre branche fut anoblie et reçut concession du titre de baron transmissible à la primogéniture mâle en 1930.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]] &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Janssens&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1929, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]] &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Janssens de Bisthoven&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Janssens de Varebeke&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1871, adjonction du nom de &#039;&#039;&amp;quot;de Bisthoven&amp;quot;&#039;&#039; en 1885, concession du titre de baron transmissible à primogéniture mâle en 1922, concession à un frère cadet du titre de baron transmissible à primogéniture mâle en 1965.&amp;lt;br/&amp;gt;Trois autres branches obtinrent le droit d&#039;adjoindre à leur nom celui de &#039;&#039;&amp;quot;de Varebeke&amp;quot;&#039;&#039; en 1912 et furent anoblies ensuite en 1938.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Janssens (branches de Bisthoven et de Varebeke).png|60px|alt=Armes de Janssens (branches de Bisthoven et de Varebeke)]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Jeune d&#039;Allegeershecque (le)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre personnel de chevalier avec augmentation d&#039;armoiries en 1770. Reconnaissance de noblesse et concession du titre de chevalier transmissible à la primogéniture mâle en 1847.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement: &#039;&#039;fascé d&#039;argent et d&#039;azur de huit pièces, la seconde fasce chargée d&#039;une étoile à six rays d&#039;or.&#039;&#039;]] &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Jolly&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1846, titre transmissible à la primogéniture mâle. Extension du titre à un fils cadet en 1856, titre transmissible de la même façon. Concession du titre de vicomte transmissible à la primogéniture mâle en 1890 pour une branche cadette. Concessions du titre personnel de vicomte en 1957 pour deux porteurs du nom.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Jolly.png|60px|alt=File:Armoiries de la famille Jolly]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Joly&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1899, concession du titre de baron transmissible à la primogéniture mâle en 1929 et 1988.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &#039;&#039;in zilver, een ankerkruis van keel, beladen met vijf klaverbladen van zilver, een schildhoofd van keel, beladen met drie sterren van zilver.&#039;&#039;]] &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Jonghe (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Jonghe d&#039;Ardoye (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;vicomte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse pour autant que de besoin en 1690. Concession du titre de vicomte transmissible à la primogéniture mâle en 1772. Reconnaissance de noblesse et du titre de vicomte en 1816, désignation comme membre du corps équestre de la Flandre orientale la même année, mention sur la {{1ère}} liste officielle des nobles. Membre du corps équestre de la Flandre occidentale et concession du titre de vicomte transmissible à la primogéniture mâle en 1827 pour un frère cadet, extension de ce titre à un fils cadet et adjonction du nom de &#039;&#039;&amp;quot;d&#039;Ardoye&amp;quot;&#039;&#039; en 1845, extension de ce titre à tous les descendants en 1857. Concession du titre de comte pour tous pour une branche cadette en 1875.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Jonghe d&#039;Ardoye.png|60px|alt=Armes de Jonghe d&#039;Ardoye]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Jooris&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1919. Concession du titre personnel de baron en 1955, ce titre devient transmissible à la primogéniture mâle en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Joos de ter Beerst&amp;lt;ref name=&amp;quot;EPN1976_Hov-J&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1827, mention sur la {{3e}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== K ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Kerchove de Denterghem (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1976, seconde partie, K, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1976.&amp;lt;/ref&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kerchove de Denterghem de Pinto (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kerchove d&#039;Exaerde (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kerchove d&#039;Exaerde de Borluut (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kerchove d&#039;Ousselghem (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre personnel de chevalier en 1640.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et mention sur la {{2e}} liste officielle des nobles sous le nom de &#039;&#039;« de Kerchove de Denterghem »&#039;&#039; en 1825 pour la première ligne non-éteinte, Adjonction du nom &#039;&#039;« de Pinto »&#039;&#039; à la suite d&#039;une adoption.&amp;lt;br/&amp;gt;La deuxième ligne non-éteinte obtint reconnaissance de noblesse en 1825, reçut en 1852 concession du titre de comte transmissible à la primogéniture mâle et figure sur la {{2e}} liste officielle des nobles, extension de ce titre de comte à toute la descendance du comte &#039;&#039;André de Kerchove de Denterghem&#039;&#039; en 1933. Un rameau de cette ligne obtint concession du titre de comte en 1882, titre transmissible à la primogéniture mâle.&amp;lt;br/&amp;gt;La troisième ligne non-éteinte qui porte le nom &#039;&#039;&amp;quot;de Kerchove d&#039;Ousselghem&amp;quot;&#039;&#039; obtint reconnaissance de noblesse en 1818, figurait sur la {{1ère}} liste officielle des nobles et était membre du corps équestre de la Flandre orientale. Cette ligne obtint concession du titre de baron transmissible à la primogéniture mâle en 1925.&amp;lt;br/&amp;gt;La quatrième ligne non-éteinte obtint reconnaissance de noblesse en 1884, elle adjoignit à son nom celui de &#039;&#039;&amp;quot;d&#039;Exaerde&amp;quot;&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Nom d&#039;une ancienne seigneurie ayant appartenu à cette famille.&amp;lt;/ref&amp;gt; en 1886. Une branche de cette ligne obtint concession du titre de baron transmissible à la primogéniture mâle en 1920. Une autre branche de cette même ligne obtint concession du titre de baron transmissible à la primogéniture mâle en 1922, et adjoignit à son nom celui de &#039;&#039;&amp;quot;de Borluut&amp;quot;&#039;&#039; en 1948.&amp;lt;br/&amp;gt;La cinquième ligne non-éteinte adjoignit à son nom celui de &#039;&#039;&amp;quot;d&#039;Exaerde&amp;quot;&#039;&#039; en 1888, obtint reconnaissance de noblesse en 1894 et concession du titre de baron en 1929, titre transmissible à la primogéniture mâle. Une autre branche de cette ligne obtint reconnaissance de noblesse en 1884, adjoignit à son nom celui de &#039;&#039;&amp;quot;d&#039;Exaerde&amp;quot;&#039;&#039; en 1888, et obtint concession du titre de baron transmissible à la primogéniture mâle en 1898.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Kerchove.png|60px|alt=File:Armoiries de la famille de Kerchove]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Kerchove d&#039;Hallebast (van de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kerchove (van de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kerchove Bosmans (van de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1676. Reconnaissance de noblesse en 1858, en 1912 et en 1921.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Van de Kerchove.png|60px|alt=Armes de la famille van de Kerchove]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&#039;&#039;&#039;Kervyn&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kervyn d&#039;Oud Mooreghem&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kervyn de Volkaersbeke&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kervyn de Lettenhove&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kervyn de Marcke ten Driessche&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kervyn de Meerendré&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Kervyn de Meerendré d&#039;Irumberry de Salaberry&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1766.&amp;lt;br/&amp;gt;Reconnaissance de noblesse, augmentation d&#039;armoiries et mention sur la {{1ère}} liste officielle de nobles en 1823 pour une première ligne (&#039;&#039;Kervyn d&#039;Oud Mooreghem&#039;&#039;), cette ligne obtint concession du titre de baron transmissible à la primogéniture mâle en 1929.&amp;lt;br/&amp;gt;Reconnaissance de noblesse, désignation comme membre du corps équestre de la Flandre orientale, mention sur la {{1ère}} liste officielle des nobles en 1816 pour une seconde ligne (&#039;&#039;Kervyn de Volkaersbeke&#039;&#039;), cette ligne obtint concession du titre de baron pour tous en 1871.&amp;lt;br/&amp;gt;Reconnaissance de noblesse, désignation comme membre du corps équestre de la Flandre occidentale et mention sur la {{1ère}} liste officielle des nobles sous le nom de &#039;&#039;&amp;quot;&amp;quot;Kervyn de Heere&#039;&#039; en 1818 pour une troisième ligne (&#039;&#039;Kervyn de Lettenhove&#039;&#039;), cette ligne obtint concession du titre de baron transmissible à la primogéniture mâle en 1861, titre étendu à tous les descendants en 1871. Adjonction du nom de &#039;&#039;&amp;quot;de Lettenhove&amp;quot;&#039;&#039; en 1884.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1886 pour une quatrième ligne (&#039;&#039;Kervyn&#039;&#039;). Concession du titre de baron transmissible à la primogéniture mâle en 1921 pour un rameau éteint et adjonction du nom de &#039;&#039;&amp;quot;de Marcke de ten Driessche&amp;quot;&#039;&#039; en 1927 pour ce même rameau.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1886 pour une cinquième ligne éteinte (&#039;&#039;Kervyn&#039;&#039;). Adjonction du nom de &#039;&#039;&amp;quot;de Marcke de ten Driessche&amp;quot;&#039;&#039; en 1928.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1888 pour une sixième ligne (&#039;&#039;Kervyn&#039;&#039;). Adjonction du nom de &#039;&#039;&amp;quot;de Marcke de ten Driessche&amp;quot;&#039;&#039; en 1927.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1886 et adjonction du nom de &#039;&#039;&amp;quot;de Meerendré&amp;quot;&#039;&#039; en 1887 pour une autre ligne. Une branche de cette ligne obtint concession du titre de baron transmissible à la primogéniture mâle en 1920 et adjoignit à son nom celui de &#039;&#039;&amp;quot;d&#039;Irumberry de Salaberry&amp;quot;&#039;&#039; à la suite d&#039;une adoption. Un sous-rameau d&#039;une branche de cette ligne obtint concession du titre de comte transmissible à la primogéniture mâle en 1965.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Kervyn.png|60px|alt=Armes de Kervyn]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Kethulle de Ryhove (de la)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse, membre du corps équestre de la Flandre orientale et mention sur la {{1ère}} liste officielle des nobles en 1816. Adjonction du nom de &#039;&#039;&amp;quot;de Ryhove&amp;quot;&#039;&#039; en 1889. Concession du titre de baron transmissible à la primogéniture mâle en 1921, en 1938 et en 1971.&amp;lt;br&amp;gt;&lt;br /&gt;
Concession du titre de chevalier transmissible à la primogéniture mâle en 1994&amp;lt;ref&amp;gt;Adelbrieven verleend door Z.M. Albert II, Koning der Belgen, 1993-2000, Lannoo, 2001, {{p.|88}}. [https://books.google.be/books?id=OKuL8mfCJc4C&amp;amp;lpg=PA148&amp;amp;pg=PA88#v=onepage&amp;amp;q&amp;amp;f=false Lire en ligne].&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Kethulle de Ryhove.png|60px|alt=File:Armoiries de la famille de Kethulle de Ryhove]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Keutgen&amp;lt;ref name=&amp;quot;ANRB_276&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concessions de noblesse héréditaire avec les titres de chevalier à titre personnel en 2014 pour Guidon et Jacques Keutgen.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Keyser (de)&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire à Jean-Albert de Keyser (1798-1892) le 10 mars 1890.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Kint de Roodenbeke (t&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1754&amp;lt;ref name=&amp;quot;notice Kint&amp;quot; /&amp;gt;.&amp;lt;br&amp;gt;Reconnaissance de noblesse en 1854 et décoration d&#039;armoiries en 1867 pour la première ligne. La branche ainée de cette ligne obtint concession du titre de baron pour tous en 1870 et concession du titre de comte transmissible à la primogéniture mâle en 1900. Une branche cadette de cette même ligne obtint concession du titre de baron pontifical transmissible à la primogéniture mâle en 1889.&amp;lt;br/&amp;gt;Cinq branches d&#039;une seconde ligne obtinrent concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1952.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason Famille T&#039;Kint.png|60px|alt=Armes de la Famille T&#039;Kint&#039;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Knyff (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier du Saint-Empire avec décoration d&#039;armoiries et octroi de la particule en 1719. Confirmation de noblesse avec augmentation d&#039;armoiries en 1734. Concession du titre de chevalier en 1756. Reconnaissance de noblesse avec le titre de chevalier pour tous les mâles et mention sur la {{1ère}} liste officielle des nobles en 1822.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Knyff.png|60px|alt=File:Armoiries de la famille de Knyff]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Kraft de la Saulx&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de chevalier pour tous en Autriche en 1882. Admission dans la noblesse belge avec le titre de chevalier transmissible à tous les mâles en 1887.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Kronacker&amp;lt;ref name=&amp;quot;EPN1976_K&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1949.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== L ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Laage de la Rocheterie de Man d&#039;Attenrode et Wevere&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1977, première partie, L - Lig, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., Bruxelles, 1977.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Convocation aux Assemblées de la noblesse d&#039;Orléans en 1789.&amp;lt;br/&amp;gt;Adjonction du nom &#039;&#039;&amp;quot;de Man d&#039;Attenrode et Wevere&amp;quot;&#039;&#039; en 1910, admission dans la noblesse belge et concession du titre de baron transmissible à la primogéniture mâle en 1911.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lagasse de Locht&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom de &#039;&#039;&amp;quot;de Locht&amp;quot;&#039;&#039; en 1912, concession de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1924. Concession du titre de chevalier transmissible à la primogéniture mâle en 1931.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Lalaing (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Élevation en comté de la seigneurie de Lalaing en 1522 et concession du titre de comte associé en faveur de Charles de Lalaing, titre transmissible à la primogéniture mâle ; élévation en 1518 de la seigneurie d&#039;Hoogstraten en comté et concession du titre de comte associé en faveur d&#039;Antoine de Lalaing, titre transmissible à la primogéniture mâle&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille de Lalaing&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;. Concession du titre de comte en 1719. Augmentation d&#039;armoiries en 1749. Érection en baronnie de la terre d&#039;Arquennes en 1793. Le comte Charles de Lalaing (1768-1816) était baron d&#039;Arquennes, membre de l&#039;État noble du Brabant et fut désigné comme membre du corps équestre de la province d&#039;Anvers&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Il mourut avant la prestation de serment et ne fut pas repris sur les listes officielles des nobles. Source: EPN1977&amp;lt;/ref&amp;gt;. Son fils, le comte Maximilien de Lalaing (1811-1881), obtint reconnaissance de noblesse et du titre de comte pour tous en 1877.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason ville fr Marpent (Nord).png|60px|alt=Armes de la Maison Lalaing]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lalieux de la Rocq (de)&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1886. Adjonction du nom de &#039;&#039;&amp;quot;de la Rocq&amp;quot;&#039;&#039; en 1911.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lamarche&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevaliers en 1965, titre transmissible à la primogéniture mâle. Concession de noblesse en 1975.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lambert&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1896, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lambert&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1925.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lambert de Rouvroit&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom de &#039;&#039;&amp;quot;de Rouvroit&amp;quot;&#039;&#039; en 1950, concession de noblesse en 1954, concession du titre de chevalier en 1969, titre transmissible à la primogéniture mâle. Concession de noblesse en 1971 pour huit autres branches.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Laminne (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Laminne de Bex (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier du Saint-Empire en 1783. Reconnaissance de noblesse et du titre de chevalier en 1883, titre transmissible à tous les mâles. Adjonction du nom de &#039;&#039;&amp;quot;de Bex&amp;quot;&#039;&#039; en 1925. Une autre ligne obtint reconnaissance de noblesse et du titre de chevalier en 1884, titre transmissible à tous les mâles. En 2015, concession du titre de baron à lui-même et ses descendants au chevalier Ernest de Laminne de Bex&amp;lt;ref&amp;gt;Arrêté royal du 17 juillet 2015 publié au Moniteur belge du 18 novembre 2015.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Lannoy (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Extraction chevaleresque. Concession en 1526 du titre de comte du Saint-Empire transmissible à tous les descendants à Charles de Lannoy, vice-roi de Naples, titre reversible à tous les membres de la famille Lannoy en cas d&#039;extinction de sa descendance (ce qui arriva). Décoration d&#039;armoiries en 1776. Reconnaissance de noblesse et du titre de comte en 1816 pour le comte &#039;&#039;Jacques de Lannoy&#039;&#039; (1769-1835)&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Jacques de Lannoy fut désigné comme membre du corps équestre du Hainaut mais il refusa d&#039;y siéger ce qui eut pour conséquence que sa nomination fut annulée.&amp;lt;/ref&amp;gt;, inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre de comte est transmissible à toute la descendance.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de Lannoy.png|60px|alt=Armes de Lannoy]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lantsheere (de)&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1955.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Launoit (de)&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1929, titre transmissible à la primogéniture mâle. Concession du titre de comte transmissible à la primogéniture mâle en 1951. Extension du titre de comte pour toute la descendance masculine en 1953.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Leclercq&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concessions de noblesse en 1930 et 1931. Concessions des titres de baron transmissible à la primogéniture masculine en 1931 et 1936.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:&amp;quot;van zilver, met den leeuw van keel, gekroond van goud, met het vrijkwartier links van sabel, beladen met een passer van zilver.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lejeune de Schiervel&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte pontifical en 1890, titre transmissible à la primogéniture mâle. Adjonction du nom de &#039;&#039;&amp;quot;de Schiervel&amp;quot;&#039;&#039; en 1891. Anoblis en 1892.&amp;lt;br&amp;gt;Concession du titre de baron transmissible à la primogéniture mâle en 1984&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Lejeune de Schiervel&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lepage&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1976.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Leyniers&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1906. Concession du titre de chevalier transmissible à la primogéniture mâle en 1965.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lhoist&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1991, concession de noblesse héréditaire et du titre personnel de chevalier à M. Raymond Lhoist&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot; /&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lhoneux (de)&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1897. Concession du titre de baron en 1928, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Lhoneux.png|60px|alt=Armes de la famille de Lhoneux]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Lichtervelde (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Extraction chevaleresque. Qualification de baron de Lichtervelde au {{s-|XIII}} (branche éteinte). Plusieurs qualifications de chevalier aux {{XIVe}}, {{XVe}} et {{XVIe}} siècles. Chevalier à titre personnel en 1600 et 1639. Concession du titre de comte transmissible à la primogéniture mâle en 1745. Reconnaissance de noblesse et concession du titre de comte en 1816, désignation comme membre du corps équestre de la Flandre orientale la même année et inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre restera personnel. Reconnaissance du titre de comte transmissible à la primogéniture mâle en 1902. Extension du titre de comte pour toute le descendance en 1957.&amp;lt;br/&amp;gt;Une autre branche obtint reconnaissance de noblesse en 1816 lors de sa désignation comme membre du corps équestre de la Flandre orientale, inscription sur la {{1ère}} liste officielle des nobles. Concession du titre de comte transmissible à la primogéniture mâle en 1846. Extension du titre de comte pour toute la descendance en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason ville be Lichtervelde.png|60px|alt=Armes de Lichtervelde]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Liebaert&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1930, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Liedekerke (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Liedekerke de Pailhe (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Liedekerke de Pailhe Merillon (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Liedekerke Beaufort (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Sire et baron de Grave, comte d&#039;Everghem, dès le {{s-|XI}}, seigneuries liées à une branche aînée éteinte au {{s-|XIV}}. La seigneurie de Liedekerke fut reçue par une branche cadette apparue au {{s-|XIII}}. Chevalier dès le {{s-|XIII}}, admission à l&#039;État noble de Namur au {{s-|XVII}} et en 1708. Qualification de comte de Liedekerke au {{s-|XVII}}. Reconnaissance de noblesse et du titre de comte lors de la désignation comme membre du corps équestre de Namur en 1816. Inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre est transmissible à toute la descendance. L&#039;adjonction du nom de &#039;&#039;&amp;quot;de Pailhe&amp;quot;&#039;&#039; apparait sur les actes de mariages et la descendance de deux membres de cette famille en 1862 et en 1864, adjonction du nom de &#039;&#039;&amp;quot;Merillon&amp;quot;&#039;&#039; à la suite d&#039;une adoption en 1947.&amp;lt;br/&amp;gt;Une seconde ligne (&#039;&#039;de Liedekerke Beaufort&#039;&#039;) obtint reconnaissance de noblesse et du titre de comte lors de sa désignation comme membre du corps équestre de la province de Namur. Inscription en 1912 sur la liste officielle des familles appartenant à la noblesse de Belgique avec le titre de comte transmissible à toute la descendance.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Liedekerke.png|60px|alt=Armes de Liedekerke]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Ligne (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Ligne de la Trémoïlle (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_L-Lig&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|prince&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Sire et baron de Ligne, dès le {{s-|XII}}. 1479 : qualification de &amp;quot;cousin&amp;quot; par les Empereurs d&#039;Allemagne. 1503 : titre de comte de Fouquemberghe. 1513 : concession du titre de prince de Mortagne, par le roi d&#039;Angleterre. 1545 : concession du titre de comte du Saint-Empire. 1592 : acquisition par héritage de la principauté d&#039;Epinoy. 20 mars 1601 : concession du titre de prince du Saint-Empire. 20 avril 1608 : acquisition par héritage de la principauté d&#039;Amblise. 1643 : grandesse d&#039;Espagne de {{1ère}} classe. 20 juillet 1770 : érection de la baronnie de Fagnolles en comté immédiat du Saint-Empire. 1780 : indigénat polonais. 3 juillet 1788 : admission au Collège des comtes du Cercle de Westphalie. 8 mars 1789 : autorisation d&#039;attribuer au comté de Fagnolles le nom de Ligne. 1803 : perte du comté de Ligne (Fagnolles) par suite de la paix de Lunéville et octroi, à titre d&#039;indemnité, par la Dière de l&#039;Empire, de l&#039;ancienne abbaye d&#039;Edelstetten qui donnait, comme comté princier, une voix virile dans le Conseil des princes du Saint-Empire. 22 mai 1804 : vente de ladite abbaye aux princes Esterhazy.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de prince et désignation comme membre du corps équestre du Brabant en 1816. Inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre sera transmissible à toute la descendance. Adjonction du nom de &#039;&#039;&amp;quot;de la Trémoïlle&amp;quot;&#039;&#039; par une branche cadette en 1934.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason Fécocourt 54.png|60px|alt=Armes de Ligne]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Limbourg (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1977, deuxième partie, Lil - Man, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., Bruxelles, 1977.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse et concession du titre héréditaire de chevalier du Saint-Empire en 1782.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de chevalier pour tous les mâles en 1885.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des chevaliers de Limbourg.png|60px|alt=Armes des chevaliers de Limburg]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Limburg Stirum (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Noblesse féodale, comtes souverains et régnants du Saint-Empire depuis 1246, maison médiatisée en 1806.&amp;lt;br/&amp;gt;Maison issue des comtes de Berg et Altena, construction du château de Hohen-Limburg et prise du nom &#039;&#039;von Limburg&#039;&#039; au {{s-|XIII}}, acquisition de la seigneurie de Styrum, comte souverain de Limburg et seigneur de Styrum en 1246, seigneur de Wisch en 1541, comte souverain de Bronkhorst, seigneur de Borculo, de Liedberg et de Lichtenvoorde en 1553 (sous le nom &#039;&#039;von Limburg-Styrum-Bronkhorst&#039;&#039;), banneret du Duché de Gueldre et du comté de Zutphen en 1553, seigneur de Gemen en 1640 (sous le nom &#039;&#039;von Limburg-Styrum-Gemen&#039;&#039;), seigneur de Raesfeld en 1675, seigneur d&#039;Illereichen en 1677, seigneur de Wilhermsdorf en 1759, seigneur d&#039;Oberstein en 1766, médiatisation au profit du grand-duché de Berg en 1806.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de comte pour tous dans le nouveau royaume des Pays-Bas en 1814 (sous le nom &#039;&#039;van Limburg Stirum&#039;&#039;). Présent en Belgique depuis 1841 et reconnu dans la Noblesse belge (sous le nom &#039;&#039;de Limburg Stirum&#039;&#039;).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Wappen Limburg-Styrum.png|60px|alt=Armes de Limburg Stirum]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Limnander de Nieuwenhove&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1683. Reconnaissance de noblesse et désignation comme membre du corps équestre de la Flandre orientale en 1816, mention sur la {{1ère}} liste officielle des nobles. Concession du titre de baron pour tous en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Limnander de Nieuwenhove.png|60px|alt=File:Armoiries de la famille Limnander de Nieuwenhove]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Limpens&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1900.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Linard de Guertechin&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1922, adjonction du nom de &#039;&#039;&amp;quot;de Guertechin&amp;quot;&#039;&#039; en 1928.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Linden d&#039;Hooghvorst (van der)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre personnel de chevalier en 1627 et 1643, augmentation d&#039;armoiries en 1649, érection en baronnie de la seigneurie d&#039;Hooghvorst en 1663.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron d&#039;Hooghvorst en 1816, titre transmissible à la primogéniture mâle. Membre du corps équestre du Brabant et mention sur la {{1ère}} liste officielle des nobles. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des barons van der Linden d&#039;Hooghvorst.png|60px|alt=Armes des barons van der Linden d&#039;Hooghvorst]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Lippens&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession en 1965 du titre de comte transmissible à la primogéniture mâle pour une branche aînée anoblie en 1921.&amp;lt;br/&amp;gt;Concession du titre personnel de comte en 1936 pour une seconde branche aussi anoblie en 1921, conversion de ce titre personnel en titre transmissible à la primogéniture mâle en 1949 et, à défaut de descendance mâle (ce qui arriva), transmission de ce titre à un gendre de la branche aînée.&amp;lt;br/&amp;gt;Une troisième branche fut anoblie en 1924.&amp;lt;br/&amp;gt;Une quatrième branche fut aussi anoblie en 1924 et obtint concession du titre de comte transmissible à la primogéniture mâle en 1975.&amp;lt;br/&amp;gt;Une cinquième et dernière branche fut anoblie en 1921.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Lippens.png|60px|alt=Armes Lippens]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Lobkowicz (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|prince&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|3 août 1459 : barons du Saint-Empire (ce diplôme ne paraît pas être authentique, mais confectionné selon un document original, perdu depuis). 1479 : barons (seigneurs) de Bohème. 17 août 1624 : princes du Saint-Empire et, par primogéniture, Fürst und Regierer des Hauses Lobkowicz, et qualification de Unser Oheim servie par l&#039;Empereur. 17 août 1624 : grand palatinat. 23 août 1641 : comte princier de Sternstein, à la suite de l&#039;érection en comte princier immédiat de la seigneurie d&#039;Empire de Neustadt sur la Waldnaab. 9 juillet 1646 : ducs de Sagan, à la suite de l&#039;acquisition de ce duché et jusqu&#039;à sa cession en 1785. 15 février 1647 : grand palatinat (confirmation et extension des privilèges). 30 juin 1653 : droit de rang, siège et voix au Conseil des princes du Saint-Empire (introduction solennelle le 12 octobre 1654). 5 septembre 1663 : qualification de &amp;quot;hochgeboren&amp;quot; et &amp;quot;Euer Libden&amp;quot;. 20 novembre 1663 : indigénat hongrois. 3 mai 1786 : duc de Raudnitz, en remplacement du titre perdu par la cession de Sagan. 18 août 1825 : qualification d&#039;Altesse Sérénissime (primogéniture) par la Diète germanique. 1833 : grand-trésorier héréditaire de Bohème. 18 avril 1861 : membre héréditaire (primogéniture) de la Chambre des Seigneurs d&#039;Autriche. 27 avril 1869 : extension, en Autriche, de la qualification d&#039;Altesse Sérénissime à tous les membres.&amp;lt;br/&amp;gt;Admis en 1958 dans la noblesse belge avec le titre de prince et le prédicat d&#039;Altesse Sérénissime (S.A.S.) pour tous.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Lobkowicz.jpg|60px|alt=Armes de Lobkowicz]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Loën d&#039;Enschedé (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron en 1757.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron pour tous en 1816, membre du corps équestre de Namur, mention sur la {{1ère}} liste officielle des nobles. Famille éteinte dans les mâles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des barons de Loën d&#039;Enschedé.png|60px|alt=Armes des barons de Loën d&#039;Enschedé]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Longrée (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier du Saint-Empire en 1783. Reconnaissance de noblesse et du titre de chevalier transmissible à tous les mâles en 1817. Mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armesdelongree.jpg|60px|alt=Armes Famille de Longrée]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Corswarem (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Looz-Corswarem (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Looz-Corswarem et de Corswarem-Looz (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;Parch403&amp;quot;&amp;gt;Cte Baudouin d’URSEL, &#039;&#039;Princes en Belgique – Looz-Corswarem et Corswarem-Looz 1734&#039;&#039;, dans &#039;&#039;Le Parchemin&#039;&#039;, {{Numéro|403}}, janvier-février 2013, {{pp.|1-29}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|duc&amp;lt;br/&amp;gt;prince&amp;lt;br/&amp;gt;comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Dans le parchemin&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;Parch403&amp;quot;/&amp;gt;: &#039;&#039;Robert de Corswarem&#039;&#039;, premier du nom, chevalier cité de 1213 à 1220, ministerialis du comte de Looz. Baron de Longchamps en 1652, titre transmissible à la primogéniture mâle. Concession, en 1734, des titres de duc de Looz-Corswarem et de duc de Corswarem-Looz pour Louis-Félix-Emmanuel-Chrysostome-Denis, comte de Looz-Corswarem, seigneur de Niel, Longchamps, pair de la province de Namur et pour son frère, Joseph-Philippe-Hyacinthe-François. Adjonction du nom de &#039;&#039;&amp;quot;Looz&amp;quot;&#039;&#039; à leur nom &#039;&#039;&amp;quot;de Corswarem&amp;quot;&#039;&#039; &amp;lt;ref&amp;gt;Cte Baudouin d’URSEL, &#039;&#039;Princes en Belgique – Looz-Corswarem et Corswarem-Looz 1734&#039;&#039;, dans &#039;&#039;Le Parchemin&#039;&#039;, {{Numéro|403}}, janvier-février 2013, {{p.|15}}.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref&amp;gt;Philippe Farcy, &#039;&#039;Longchamps, enclave du Brabant &#039;&#039;, dans le quotidien &#039;&#039;&amp;quot;La libre Belgique&#039;&#039;&amp;quot;&amp;quot;, 7 mars 2008: &#039;&#039;Longchamps entra dans le patrimoine des Corswarem (qui ne prirent le nom de Looz-Corswarem qu&#039;à la première génération ducale) par le mariage de François de Corswarem (+ 1593) avec Antoinette de Gulpen, dame de Wangnée et de Longchamps.&#039;&#039;, à consulter [http://www.lalibre.be/archives/divers/article/406823/longchamps-enclave-du-brabant.html ici].&amp;lt;/ref&amp;gt;. Confirmation pour autant que de besoin du titre de comte de Looz-Corswarem, titre transmissible à toute la descendance du nom. Titre personnel de prince en 1749. Marquis de Ligny en 1779, titre transmissible à la primogéniture mâle.&amp;lt;br/&amp;gt;&#039;&#039;&#039;Dans l&#039;État présent de la noblesse&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;: &#039;&#039;24 décembre 1734 : concession du titre de duc à des collatéraux avec reconnaissance du titre de comte à tous les descendants de François {{1er}} de Corswarem-Looz et d&#039;Antoinette de Gulpen, comme descendants des anciens comtes de Looz Hesbaie. 2 décembre 1778 : décoration d&#039;armoiries. 28 février 1792 : le titre de duc échoit par disposition testamentaire au père du degré I (Duc Charles Louis Auguste Ferdinand Emmanuel de Looz-Corswarem, auteur de la première ligne). 25 février 1803 : décision de la Députation du Saint-Empire d&#039;accorder Rhena-Wolbeck au duc de Looz-Corswarem à titre d&#039;indemnité (à la suite du traité de Lunéville) avec le titre de prince et voix virile au collège des princes du Saint-Empire - titre passé par héritage aux Lannoy-Clervaux dès 1827 et depuis lors revendiqué judiciairement par les ducs de Looz-Corswarem successifs sans que ce titre ait été jamais reconnu en Belgique.&#039;&#039;&amp;lt;br/&amp;gt;Pour la {{1ère}} ligne: reconnaissance de noblesse et du titre de duc en 1816. Membre du corps équestre du Limbourg. Inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre de duc sera transmissible à la primogéniture mâle et que les autres descendants porteront le titre de prince et de princesse.&amp;lt;br/&amp;gt;Pour la {{2e}} ligne: reconnaissance de noblesse et du titre de comte en 1816. Membre du corps équestre de la province de Liège. Inscription sur la première liste officielle des nobles avec mention que le titre de comte sera transmissible à toute la descendance.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1977. Concession du titre personnel de baronne en 2008&amp;lt;ref name=&amp;quot;ANRB_251&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la Maison de Looz-Corswarem.png|60px|alt=Armoiries de la Maison de Looz-Corswarem]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== M ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Macar (de)&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron par le Roi des Pays-Bas en 1839. Anoblis et créés barons en Belgique en 1844, titre transmissible à la primogéniture mâle. Extension de ce titre à toute la descendance en 1881.&amp;lt;br/&amp;gt;Une autre branche fut anoblie en 1888.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Macar.png|60px|alt=File:Armoiries de la famille de Macar]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Maelcamp d&#039;Opstaele&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblissement et concession d&#039;armoiries (avec couronne sur le heaume au lieu d&#039;un bourlet) en 1720 par la Chancellerie de l&#039;Empire. Confirmation de noblesse par lettres patentes régulières en 1736 (avec rétroaction au {{1er}} juillet 1720.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et concession du titre de baron transmissible à la primogéniture mâle en 1866.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Maere d&#039;Aertrycke (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Baron&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse aux Pays-Bas et membre du corps équestre de la province d&#039;Overyssel en 1842.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1867 et concession du titre de baron transmissible à la primogéniture mâle en 1871 et en 1896. Adjonction du nom &#039;&#039;d&#039;Aertrycke&#039;&#039; en 1897. La devise est &amp;quot;Stella Maris succurre cadenti&amp;quot;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Maertens de Noordhout&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1896 et en 1898. Adjonction du nom &#039;&#039;&amp;quot;de Noordhout&amp;quot;&#039;&#039; en 1929 et en 1931. Concession du titre de chevalier transmissible à la primogéniture mâle en 1969.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Mahieu (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevaliers à titre héréditaire par l&#039;Empereur Charles VI (par le canal de la Chancellerie du Saint-Empire) en 1715. Concession de noblesse et confirmation du titre personnel de chevalier en 1740 par l&#039;Empereur Charles VI (par le canal de la Chancellerie des Pays-Bas).&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1901, créés chevalier en 1921, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Mahieu.png|60px|alt=Armes modernes de la famille de Mahieu]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Maire de Warzée d&#039;Hermalle (le)&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés baron en 1928, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Maistre d&#039;Anstaing (le)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1845, concession du titre de chevalier transmissible à la primogéniture mâle en 1937.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille le Maistre d&#039;Anstaing.png|60px|alt=File:Armes de la famille le Maistre d&#039;Anstaing]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Maldeghem (van)&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire en 1952.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de van Maldeghem.png|60px|alt=Armes van Maldeghem]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Maleingreau d&#039;Hembise (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier en 1723 et du titre de baron en 1749.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron en 1816. Membre du corps équestre du Brabant en 1816. Inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre de baron se transmet à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Maleingreau d&#039;Hembise.png|60px|alt=File:Armoiries de la famille de Maleingreau d&#039;Hembise]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Malevez&amp;lt;ref name=&amp;quot;EPN1977_Lil-Man&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevalier en 1969, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Marchant et d&#039;Ansembourg (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1978, première partie, Mar - Me, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., Bruxelles, 1978.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1681, baron d&#039;Ansembourg en 1728, titre transmissible à la primogéniture mâle. Comtes du Saint-Empire en 1750, titre transmissible à toute la descendance.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de comte pour tous en 1816, nomination comme membre du corps équestre de Limbourg, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Marchand d&#039;Ansembourg.png|60px|alt=File:Armoiries de la famille de Marchand d&#039;Ansembourg]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Marmol (del)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;ANRB_272&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1845 et concession du titre de baron pour toute la descendance mâle en 1848. Reconnaissance de noblesse et du titre de baron pour tous en 2009.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille del Marmol.png|60px|alt=File:Armoiries de la famille del Marmol]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Marnix de Sainte Aldegonde (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre personnel de chevalier en 1543, 1590 et 1617&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille de Marnix&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;. Vicomtes en 1629 et titre de comte par Louis XV. Concession du titre personnel de chevalier en 1590 et 1617, concession du  titre de vicomte d&#039;Ogimont en 1629, confirmation pour autant que de besoin du titre de comte par Louis XV en 1749.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de vicomte et de comte en 1816. Nomination comme membre du corps équestre de la province d&#039;Anvers en 1816. Inscription sur la {{1ère}} liste officielle des nobles avec mention que les titres de comte et de vicomte sont transmissibles à la primgéniture mâle. Concession du titre de vicomte transmissible à la primogéniture mâle en 1847. Concession du titre de comte pour tous en 1878. Adjonction du nom de &#039;&#039;&amp;quot;de Sainte-Aldegonde&amp;quot;&#039;&#039; en 1881.&amp;lt;br/&amp;gt;Une seconde branche obtint décoration d&#039;armoiries et concession du titre de vicomte transmissible à la primogéniture mâle en 1847. Concession du titre de comte pour tous en 1878. Adjonction du nom de &#039;&#039;&amp;quot;de Sainte-Aldegonde&amp;quot;&#039;&#039; en 1884.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Marnix.png|60px|alt=Armes de Marnix]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Marotte de Montigny (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis par Philippe IV avec permission d&#039;adjoindre le nom de &#039;&#039;&amp;quot;de Montigny&amp;quot;&#039;&#039; à leur nom &#039;&#039;&amp;quot;de Marotte&amp;quot;&#039;&#039; en 1630.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1957. Concession du titre de comte transmissible à la primogéniture mâle en 1966.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Marquet&amp;lt;ref name=&amp;quot;EPN1993_Maes-Meer&amp;quot;&amp;gt;Oscar Coomans de Brachène &amp;amp; Georges de Hemptinne, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1993, seconde partie, Maes-Meer, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1993.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron transmissible par ordre de primogéniture mâle en 1989.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Marquet.png|60px|alt=Armes Marquet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Massange de Collombs&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1925. Adjonction du nom de &#039;&#039;&amp;quot;de Collombs&amp;quot;&#039;&#039; en 1926. Créés chevaliers en 1957, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Matray&amp;lt;ref name=&amp;quot;ANRB-BT_OCT2012&amp;quot;&amp;gt;&#039;&#039;Bulletin trimestriel de l&#039;Association de la noblesse du royaume de Belgique&#039;&#039;, {{Numéro|272}}, octobre 2012, Dépôt Liège X, {{p.|113}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de baron en 2012.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Meester (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Meester de Betzenbroeck (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Meester de Heyndonck (de)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Meester de Ravenstein (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1776.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1823 pour une première ligne portant le nom &#039;&#039;&amp;quot;de Meester&amp;quot;&#039;&#039;. Mention sur la {{1ère}} liste officielle des nobles.&amp;lt;br/&amp;gt;Adjonction du nom de &#039;&#039;&amp;quot;de Ravenstein&amp;quot;&#039;&#039; en 1890 (branche éteinte).&amp;lt;br/&amp;gt;Concession du titre de baron transmissible à la primogéniture mâle en 1925 et en 1974 pour des fils cadets. &amp;lt;br/&amp;gt;Adjonction du nom de &#039;&#039;&amp;quot;de Ravenstein&amp;quot;&#039;&#039; en 1937 et 1938.&amp;lt;br/&amp;gt;Une seconde ligne portant le nom &#039;&#039;&amp;quot;de Meester de Tilbourg&amp;quot;&#039;&#039; obtint aussi reconnaissance de noblesse en 1823 et figure aussi sur la {{1ère}} liste officielle des nobles.&amp;lt;br/&amp;gt;Une troisième ligne portant le nom &#039;&#039;&amp;quot;de Meester&amp;quot;&#039;&#039; obtint reconnaissance de noblesse en 1828 et figure sur la {{5e|liste}} officielle des nobles. Adjonction du nom de &#039;&#039;&amp;quot;de Betzenbroeck&amp;quot;&#039;&#039; en 1885. Concession du titre de baron transmissible à la primogéniture mâle en 1952 et en 1971. Une seconde branche de cette troisième ligne adjoignit à son nom celui de &#039;&#039;&amp;quot;de Heyndonck&amp;quot;&#039;&#039; en 1911.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des barons de Meester (de Betzenbroeck, de Heyndonck et de Ravenstein).png|60px|alt=Armes de Meester]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Meeûs (de)&amp;lt;br/&amp;gt;Meeûs d&#039;Argenteuil (de)&amp;lt;br /&amp;gt;Meeûs d&#039;Argenteuil de Trannoy (de)&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Créés comtes en 1836&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Le diplôme ne mentionne pas la concession de noblesse qui est donc implicite mais deux membres de la famille Meeûs avaient été anoblis en 1688 et 1689 par le roi Charles II d&#039;Espagne.&amp;lt;/ref&amp;gt;, titre transmissible à toute la descendance mâle. Adjonction du nom de &#039;&#039;&amp;quot;d&#039;Argenteuil&amp;quot;&#039;&#039; en 1937 et en 1938. Adjonction du nom de &#039;&#039;&amp;quot;de Trannoy&amp;quot;&#039;&#039; en 1953.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des comtes de Meeûs d&#039;Argenteuil.png|60px|alt=Armes de Meeûs d&#039;Argenteuil]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Mélot&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1967 et 1975, titres transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Menten de Horne (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et du titre de chevalier à titre posthume en 1823. Inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre de chevalier est porté par tous les descendants mâles. Concession du titre de baron en 1871, titre transmissible à toute la descendance.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason ville fr Cébazat (Puy-de-Dôme).png|60px|alt=Armes de Menten de Horne]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Merode (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|prince&amp;lt;br&amp;gt;marquis&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation du titre de libre baron de Petersheim par l&#039;Empereur Frédéric III en 1473. Concession du titre de marquis de Westerloo en 1626, titre transmissible à la primogéniture mâle. Élévation à la Grandesse d&#039;Espagne en 1709.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et des titres de comte de Merode et marquis de Westerloo en juillet 1823. Confirmation des titres de prince de Rubempré et d&#039;Everbergh en octobre 1823. Inscription sur la {{1ère}} liste officielle des nobles avec la mention que le titre de comte est porté par tous les descendants, les titres de marquis et de prince se transmettent à la primogéniture.&amp;lt;br/&amp;gt;Substitution -pour toute la descendance- du titre de comte par celui de prince en 1930.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de Merode 2.png|60px|alt=Armes de Mérode]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Mertens de Wilmars&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom de &#039;&#039;&amp;quot;de Wilmars&amp;quot;&#039;&#039; en 1950 et en 1952. Anoblis en 1955 et en 1967. Concession du titre personnel de baron en 1985.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Mévius (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession d&#039;armoiries en 1562 par l&#039;Empereur Ferdinand {{1er}}, anoblis avec augmentation d&#039;armoiries par le roi Charles-Gustave de Suède en 1665.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et concession du titre de baron pour tous en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Meyers&amp;lt;ref name=&amp;quot;EPN1978_Mar-Me&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés baron en 1929, titre transmissible à la primogéniture mâle. Concession du titre de baron transmissible à la primogéniture mâle en 1956.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Michotte van den Berck&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1978, seconde partie, Mil - Neu, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., Bruxelles, 1978.&amp;lt;/ref&amp;gt;&amp;lt;br/&amp;gt;Michotte de Welle&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom de &#039;&#039;&amp;quot;van den Berck&amp;quot;&#039;&#039; en 1929, concession de noblesse en 1940, concession du titre de baron transmissible à la primogéniture mâle en 1954.&amp;lt;br/&amp;gt;Une autre branche (&#039;de Welle&#039;) fut anoblie et créée baron en 1925, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Minne&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1931, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Misson&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1775.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1826 et mention sur la {{3e|liste}} officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Misson.png|60px|alt=File:Armoiries de la famille Misson]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Moens de Fernig&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;de Fernig&amp;quot;&#039;&#039; en 1934, anoblis et créés barons en 1949, titre transmissible à la primogéniture mâle, concession du titre de comte transmissible à la primogéniture mâle en 1959.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Moffarts (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Moffarts d&#039;Houchenée (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse avec concession pour autant que de besoin, reconnaissance de 4 quartiers nobles et concession du titre de chevalier héréditaire du Saint-Empire avec octroi de la particule et d&#039;une couronne d&#039;or par l&#039;Empereur Charles VI en 1717. Concession du titre de libre baron du Saint-Empire avec le prédicat du Wehlgeboren par l&#039;Electeur de Bavière, vicaire de l&#039;Empire en 1745, titre transmissible à toute la descendance.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron pour tous en 1830. Adjonction (dans des actes de naissance uniquement) du nom &#039;&#039;&amp;quot;d&#039;Houchenée&amp;quot;&#039;&#039; en 1840 et en 1853.&amp;lt;br/&amp;gt;Une seconde ligne obtint reconnaissance de noblesse et du titre de baron en 1817, membre du corps équestre de Liège la même année, inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre de baron est transmissible à toute la descendance.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Moffarts.png|60px|alt=File:Armoiries de la famille de Moffarts]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Mols&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1756.&amp;lt;br/&amp;gt;Reconnaissance de noblesse par le Roi des Pays-Bas en 1830&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Les formalités nécessaires à cette reconnaissance de noblesse ne purent pas être effectuées à la suite des événements de cette époque.&amp;lt;/ref&amp;gt;. Reconnaissance de noblesse en Belgique en 1843. Concession du titre de baron et augmentation d&#039;armoiries en 1971, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Mols.png|60px|alt=Armes de Mols]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Monceau de Bergendal (du)&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Dumonceau de Bergendal&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte de Bergeduin par Louis-Napoléon en 1810, concession du titre de comte de Bergendal par l&#039;Empereur Napoléon en 1811.&amp;lt;br/&amp;gt;Concession de noblesse et du titre de comte en 1820, titre transmissible à la primogéniture mâle. Mention sur la {{1ère}} liste officielle des nobles. Comtes pour tous les descendants mâles en 1871. Comtes pour tous les descendants en 1871 pour deux autres lignes.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armorial de la famille du Monceau de Bergendal.png|60px|alt=File:Armorial de la famille du Monceau de Bergendal]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Moncheur&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron pour tous en 1881.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Moncheur.png|60px|alt=Armes de Moncheur]]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Montens&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&amp;lt;br&amp;gt;&#039;&#039;&#039;Montens d&#039;Oosterwyck&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&amp;lt;br&amp;gt;&#039;&#039;&#039;Montens d&#039;Oosterwyck de Jacquier de Rosée&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Déclaration de noblesse en 1786 par la chambre héraldique&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Information non-mentionnée dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039; de Luc Duerlo et Paul Janssens&amp;lt;/ref&amp;gt;.&amp;lt;br&amp;gt;Reconnaissance de noblesse en 1854 et 1871. Adjonction du nom &#039;&#039;d&#039;Oosterwyck&#039;&#039; pour une seconde branche en 1913 et du nom &#039;&#039;de Jacquier de Rosée&#039;&#039; (à la suite d&#039;une adoption) pour un rameau de de cette seconde branche en 1932. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Armoirie Montens d&#039;Oosterwyck.jpg|60px|alt=Armes de Montens]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Montpellier d&#039;Annevoie (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Montpellier de Vedrin (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1743 par l&#039;Impératrice Marie-Thérèse.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1847, adjonction du nom &#039;&#039;&amp;quot;d&#039;Annevoie&amp;quot;&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Nom d&#039;une ancienne seigneurie entrée dans le patrimoine de cette famille en 1758.&amp;lt;/ref&amp;gt; en 1871.&amp;lt;br/&amp;gt;Une autre branche obtint reconnaissance de noblesse en 1847, concession du titre de baron transmissible à la primogéniture mâle en 1896 et en 1919, extension de ce titre à des fils cadets en 1929 et adjonction du nom &#039;&#039;&amp;quot;de Vedrin&amp;quot;&#039;&#039; en 1929. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Montpellier.png|60px|alt=Armes de Montpellier]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Moreau (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Moreau d&#039;Andoy (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Moreau de Villegas de Saint-Pierre (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse et concession du titre de chevalier en 1731.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et concession du titre de chevalier pour tous les descendants masculins en 1816, membre du corps équestre de Namur en 1816, mention sur la {{1ère}} liste officielle des nobles. Concession du titre de baron transmissible à la primogéniture mâle en 1893.&amp;lt;br/&amp;gt;Adjonction du nom &#039;&#039;&amp;quot;d&#039;Andoy&amp;quot;&#039;&#039; en 1929 pour la branche aînée. Concession du titre de baron transmissible à la primogéniture mâle en 1930.&amp;lt;br/&amp;gt;Une seconde branche obtint concession du titre de baron transmissible à la primogéniture mâle en 1930 et adjonction du nom &#039;&#039;&amp;quot;de Villegas de Saint-Pierre&amp;quot;&#039;&#039; à la suite d&#039;une adoption.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Moreau.png|60px|alt=File:Armoiries de la famille de Moreau]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Moreau de Bellaing&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Fonction anoblissante de conseiller-secrétaire du Roi de France en la Grande Chancellerie en 1787, réception au collège Mazarin avec preuve de 4 degrés nobles en 1789.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de chevalier en 1817, inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre sera transmissible à tous les descendants masculins. Naturalisation belge en 1875, admis dans la noblesse du royaume et créés chevaliers en 1877, titre transmissible à la toute la descendance masculine.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Moreau de Bellaing.png|60px|alt=File:Armoiries de la famille Moreau de Bellaing]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Morel de Westgaver&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1768.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1822 et 1854, adjonction du nom &#039;&#039;&amp;quot;de Westgaver&amp;quot;&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Nom d&#039;une seigneurie possédée par cette famille.&amp;lt;/ref&amp;gt; en 1885.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Morel.png|60px|alt=File:Armoiries de la famille Morel]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Motte Baraffe (de la)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier par Philippe II en 1579 et 1613, augmentation d&#039;armoiries en 1766.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1816, membre du corps équestre du Hainaut, concession du titre de baron transmissible à la primogéniture mâle en 1954.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de la Motte Baraffe.png|60px|alt=File:Armoiries de la famille de la Motte Baraffe]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Moyersoen&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de baron personnel en 1950, conversion de ce titre en titre transmissible à la primogéniture mâle en 1964.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Mulle de ter Schueren&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1843, adjonction du nom &#039;&#039;&amp;quot;de ter Schueren&amp;quot;&#039;&#039; en 1870, concession du titre de baron transmissible à la primogéniture mâle en 1914.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Mulle de ter Schueren.png|60px|alt=File:Armoiries de la famille Mulle de ter Schueren]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Musch&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1991, concession de noblesse héréditaire et du titre personnel de chevalier à M. André Musch&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot; /&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Muûls&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre personnel de baron en 1959 en faveur de Fernand Muûls. Concession du titre personnel de baron en 2013 en faveur de Thierry Muûls, écuyer, fils du précédent&amp;lt;ref name=&amp;quot;DR_nom-nob_2013&amp;quot;&amp;gt;[http://www.didierreynders.be/2013/07/12/nominations-nobiliaires/ Nominations nobiliaires] sur le site officiel de Didier Reynders, [http://diplomatie.belgium.be/fr/Services/Protocole/Noblesse ministre des affaires étrangères].&amp;lt;/ref&amp;gt;. Concession du titre de baron aux descendants du baron Dirk Muûls en 2016&amp;lt;ref&amp;gt;Arrêté royal du 10 juillet 2016 publié au Moniteur belge le 13 novembre 2017.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason ville fr Cleebourg (Bas-Rhin).png|60px|alt=Armes de la famille Muûls]]&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== N ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Nagelmackers&amp;lt;ref name=&amp;quot;EPN1978_Mil-Neu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1966, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Nerincx&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Nerincx&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1991 avec le titre personnel de baron.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Nève de Mévergnies&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1979, première partie, Nev - O, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1979.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br /&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse 1908, adjonction du nom &#039;&#039;de Mévergnies&#039;&#039; en 1928. Concession du titre de chevalier transmissible à la primogéniture mâle en 1954 et en 1961. Concession de noblesse en 1921 et en 1958 pour deux autres branches.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Nève de Mévergnies.png|60px|alt=Armes de Nève de Mévergnies]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Neve de Roden (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Lettres de chevalerie et décoration d&#039;armes en 1661 par Philippe IV d&#039;Espagne, chevalier en 1715 par Charles VI du Saint-Empire et par le canal irrégulier de la Chancellerie de l&#039;Empire, concession du titre de baron en 1736.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron en 1816, titre transmissible à la primogéniture mâle, les autres descendants porteront tous le titre de chevalier, membre du corps équestre de la Flandre orientale, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des barons de Neve de Roden.png|60px|alt=Armes des barons de Neve de Roden]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Nicaise&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1892, titre transmissible à la primogéniture mâle. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Nicaise&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1930, titre transmissible à la primogéniture mâle. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Nobels&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1973.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Nolet de Brauwere van Steeland&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire en faveur de Hugues Nolet de Brauwere van Steeland en 1987.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Nolf&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Huit branches anoblies en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Noot d&#039;Assche (van der)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Noot de Moorsel (van der)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|marquis&amp;lt;br/&amp;gt;comte&amp;lt;br/&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre personnel de chevalier en 1589 en faveur de Guillaume van der Noot, conseiller à la Cour de justice du Brabant à Bruxelles&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille van der Noot&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;.&amp;lt;br&amp;gt;Concession du titre de baron de Carloo en 1678, concession du titre de comte en 1716.&amp;lt;br/&amp;gt;Membre de l&#039;État noble du Brabant, président du corps équestre du Brabant, reconnaissance de noblesse et des titres de comte &#039;&#039;van der Noot&#039;&#039; et de marquis &#039;&#039;d&#039;Assche&#039;&#039; en 1816. Inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre de comte est transmissible à toute la descendance et que le titre de marquis l&#039;est à la primogéniture mâle.&amp;lt;br/&amp;gt;Une deuxième branche: &#039;&#039;van der Noot, dit de Moorsel&#039;&#039; obtint reconnaissance de noblesse et autorisation de porter le titre de baron en 1842, titre transmissible à la primogéniture mâle. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la Maison van der Noot.png|60px|alt=Armes de la Maison van der Noot]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Norman et d&#039;Audenhove (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Norman und von Audenhove (von)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Norman und von Audenhove-Elvenich (von)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Küenburg&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Octroi de la chevalierie par Philippe IV d&#039;Espagne en 1630, concession du titre de baron en 1754.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de comte sous le nom &#039;&#039;de Norman&#039;&#039; en 1827, titre transmissible à la primogéniture mâle. Mention sur la liste officielle des nobles. Rectification de nom en &#039;&#039;de Norman d&#039;Audenhove&#039;&#039; en 1933. Incorporation dans la noblesse de Basse-Autriche avec reconnaissance du titre de baron en 1842 sous le nom &#039;&#039;von Norman und von Audenhove&#039;&#039;, titre transmissible à la primogéniture mâle. Adjonction du nom &#039;&#039;Elvenich&#039;&#039; en 1899 à la suite d&#039;une adoption. Substitution du nom par le nom &#039;&#039;Küenburg&#039;&#039; en 1962 à la suite d&#039;une adoption.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Norman et d&#039;Audenhove.png|60px|alt=File:Armoiries de la famille de Norman et d&#039;Audenhove]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Nothomb&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de baron personnel en 1937, concession du titre de baron transmissible à la primogéniture mâle en 1953, extension de ce même titre à des fils cadets en 1966, concession du titre de baron transmissible à des fils en 1966 lesquels le transmettront à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Nothomb.png|60px|alt=Armes de la famille Nothomb]]&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== O ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Oldeneel tot Oldenzeel (van)&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Oldenneel de Heerenbrinck (d&#039;)&amp;lt;br/&amp;gt;Oldenneel (d&#039;)&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et de titre de baron pour tous en 1826 pour la ligne van Oldeneel tot Oldenzeel. Reconnaissance du titre de baron pour tous en 1842 pour les lignes d&#039;Oldennel et d&#039;Oldennel de Heerenbrink.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Oldeneel tot Oldenzeel.png|60px|alt=Armes d&#039;Oldeneel]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Olne (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1664 avec le titre de chevalier par Léopold Ier du Saint-Empire. Reconnaissance de noblesse et titre de baron pour tous accordé en 1816.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (de): &amp;quot;einen quartierten Schildt, dessen hinder under Theill weiss oder silberfarb, und in mitte dessen ein aufrechts gestelter achtstachelter eissenfarber Streittkolben oder Morgenstern mit undersich gekhertem Styhl oder Stangen, vorder obere gelb oder goldtfarb darinnen an der Abtheillung furwerts ein halber schwarzer Adler mit auffgethaner Flüg, offenem Schnabel und von sich spreizenden Waffen, vorder undere Veldung schwarz, in welcher drey gleichsfalls furwerts dryangelsweiss also under eine und oben zwo gestelte weisse Spazen, hinder obere aber roth oder rubinfarb ist und in derselben eine nach schreeg von dem hinderen underen gegen dem vorderen oberen Egg raichend in der Mitt zeprochene Partisane mit gelb oder goldtfarber Quasten.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Oldenhove de Guertechin&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1910, adjonction du nom &#039;de Guertechin&#039; accordée en 1926 par le roi Albert {{Ier}}.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in rood, eene goud geknopte en groen gepunte zilveren roos, vergezeld van drie zespuntige sterren van goud.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Onghena&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1969 avec le titre personnel de baron.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in zilver, een rad met acht spaken van keel, het veld omkleed met hetzelfde.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Oost (van)&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1937.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in lazuur, een keper vergezeld in het schildhoofd van twee rozen en in den schildvoet van een bij met gesloten vleugels, dit alles van goud.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Oosterlinck&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession en 2004 du titre personnel de baron à M. André Oosterlinck&amp;lt;ref&amp;gt;Arrêté royal du 4 juillet 2004 publié au Moniteur belge du 9 juillet 2004.&amp;lt;/ref&amp;gt;. Concession du titre de baron aux descendants du baron André Oosterlinck en 2016&amp;lt;ref&amp;gt;Arrêté royal du 10 juillet 2016 publié au Moniteur belge du 13 novembre 2017.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement : &amp;quot;…&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Opsomer &amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1951. Titre de baron transmissible à la primogéniture mâle en 1953.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in goud, een faas van sabel, vergezeld in het schildhoofd van twee dubbele adelaars van hetzelfde, en in de schildvoet van een roos eveneens van sabel, geknopt van goud.&amp;quot;]] &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Orban de Xivry&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;de Xivry&amp;quot;&#039;&#039; en 1875, concession de noblesse en 1971 et en 1886, concession du titre de baron en 1886 et en 1929, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Oreye de Lantremange (d&#039;)&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de chevalier en 1937, adjonction du nom &#039;&#039;&amp;quot;de Lantremange&amp;quot;&#039;&#039; en 1946. Concession du titre de chevalier en 1962, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Orjo de Marchovelette (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Admis à l&#039;État noble de Namur en 1680, 1718 et 1729.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et désignation comme membre du corps équestre de la province de Namur le 20 février 1816, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes d&#039;Orjo.png|60px|alt=Armes d&#039;Orjo (anciennes)]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Orts&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Noblesse personnelle dès 1735 en tant que conseiller au Conseil souverain de Brabant pour Pierre Orts (1696-1768), nomination d&#039;Englebert Orts (1743-1831) comme Conseiller au Grand Conseil de Malines en 1789, charge conférant la noblesse héréditaire&amp;lt;ref&amp;gt;Marie-Anne Dolez, &amp;quot;Orts. Une famille bruxelloise de gens de robe&amp;quot;, dans : &#039;&#039;Tablettes du Brabant&#039;&#039;, tome I.&amp;lt;/ref&amp;gt;.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1956, 1960 et 1963.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Osy de Zegwaart&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse, décoration d&#039;armoiries et concession du titre héréditaire de chevalier en 1778.&amp;lt;br/&amp;gt;Concession de noblesse et membre du corps équestre de la province de Hollande en 1816, reconnaissance de noblesse et concession du titre de baron en 1817, inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre de baron est transmissible à toute la descendance, membre du corps équestre de la province d&#039;Anvers, adjonction du nom &#039;&#039;&amp;quot;de Zegwaart&amp;quot;&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Nom d&#039;une seigneurie possédée par cette famille&amp;lt;/ref&amp;gt; en 1887.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des barons Osy de Zegwaart.png|60px|alt=Armes des barons Osy de Zegwaart]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Otreppe de Bouvette (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse par l&#039;Empereur Charles VI en 1738. Reconnaissance de noblesse et désignation de membre du corps équestre de la province de Namur en 1816. Mention sur la première liste officielle des nobles. Concession du titre de baron pour tous en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes d&#039;Otreppe de Bouvette.png|60px|alt=Armes d&#039;Otreppe de Bouvette]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Oultremont (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Oultremont de Wégimont et Warfusée (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte du Saint-Empire par l&#039;Empereur Charles VI en 1731.&amp;lt;br /&amp;gt;Reconnaissance de noblesse et du titre de comte pour tous en 1816, membre du corps équestre de la province de Liège, inscription sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be d&#039;Oultremont.png|60px|alt=Armes d&#039;Oultremont]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Outryve d&#039;Ydewalle (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis, décoration d&#039;armes et concession du titre héréditaire de chevalier en 1771.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de chevalier pour tous en 1823, mention sur la {{1ère}} liste officielle des nobles, adjonction du nom &#039;&#039;&amp;quot;de Diest&amp;quot;&#039;&#039; à la suite d&#039;une adoption en 1946, concession&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt; du titre de baron en 1982.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de van Outryve d&#039;Ydewalle.png|60px|alt=Armes de van Outryve d&#039;Ydewalle]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Overschie de Neeryssche (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_Nev-O&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron du Saint-Empire en 1676, concession du titre de baron (de la terre de Neeryssche) aux Pays-Bas par l&#039;Empereur Charles VI en 1719.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron pour tous en 1816, membre du corps équestre du Brabant, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes d&#039;Overschie.png|60px|alt=Armes d&#039;Overschie]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== P ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Page (de)&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1979, seconde partie, P - Pos, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1979.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre personnel de baron en 1868. Concession du titre de baron pour tous en 1870.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement: &amp;quot;de gueules, au sautoir d&#039;or, chargé de cinq étoiles à six rais de sable. &amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Paige (le)&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1906. Concession du titre de chevalier en 1925, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in rood, drie gouden ringen, en een zilveren meerltje in &#039;t hart.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Pangaert d&#039;Ordorp&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1729 par Charles VI, concession du titre de chevalier par Charles VI en 1729.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1845, adjonction du nom &#039;&#039;&amp;quot;d&#039;Opdorp&amp;quot;&#039;&#039; en 1885, concession du titre de chevalier en 1886, titre transmissible à la primogéniture mâle, concession du titre de baron transmissible à la primogéniture mâle en 1969, modification d&#039;armoiries par l&#039;adjonction d&#039;une devise en 1969.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Pangaert d&#039;Ordorp.png|60px|alt=File:Armes de la famille Pangaert d&#039;Ordorp]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Papeians de Morchoven dit van der Strepen&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Chevalier personnel et permission de porter le nom &#039;&#039;&amp;quot;de Papeians de Morchoven dit van der Strepen&amp;quot;&#039;&#039; par Charles VI en 1717.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1876, concession du titre de chevalier transmissible à la primogéniture mâle en 1921, concession du titre de baron transmissible à la primogéniture mâle en 1930 et 1955. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Parc Locmaria (du)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Parc Locmaria du Parc (du)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|marquis&amp;lt;br/&amp;gt;comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Ancienne extraction, changement du nom &#039;&#039;&amp;quot;du Parc&amp;quot;&#039;&#039; en &#039;&#039;&amp;quot;Le Bervet&amp;quot;&#039;&#039; en 1405, autorisation par Louis XIII de reprendre le nom &#039;&#039;&amp;quot;du Parc&amp;quot;&#039;&#039; en 1613 (patentes enregistrées par le Parlement de Bretagne en 1614 et confirmées par le Parlement de Paris en 1640), maintenue de noblesse de dix générations par la Chambre de Réformation en 1671.&amp;lt;br/&amp;gt;Admission dans la noblesse belge et concession du titre de vicomte en 1888, titre transmissible à la primogéniture mâle, concession du titre de marquis transmissible à la primogéniture mâle en 1932, concession du titre de vicomte transmissible à la primogéniture mâle en 1921, 1925 et 1939, adjonction du nom &#039;&#039;&amp;quot;de Locmaria&amp;quot;&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Selon Jean-François Houtart dans son ouvrage Anciennes familles de Belgique paru à Bruxelles en 2008, la famille &#039;&#039;du Parc&#039;&#039; n&#039;a aucun lien avec les seigneurs &#039;&#039;de Locmaria&#039;&#039; et il se demande pourquoi elle en a repris le nom.&amp;lt;/ref&amp;gt; en 1926 et 1927, adjonction du nom &#039;&#039;&amp;quot;du Parc&amp;quot;&#039;&#039; en 1945 à la suite d&#039;une adoption, concession du titre de comte transmissible à la primogéniture mâle en 1959, 1969 et 1971, concession du titre de comte pour tous en 2006.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Parthon de Von&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;[https://books.google.com/books?id=f9tEAAAAcAAJ&amp;amp;pg=PT76&amp;amp;dq=%22Parthon+de+Von,+originaire+de+France%22&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ved=0ahUKEwjnsqPNq9nNAhUoyoMKHalFCJoQ6AEIHjAA#v=onepage&amp;amp;q=%22Parthon%20de%20Von%2C%20originaire%20de%20France%22&amp;amp;f=false Félix-Victor Goethals, &#039;&#039;Dictionnaire généalogique et héraldique des familles nobles du royaume de Belgique, Volume 4&#039;&#039;, 1852.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et, pour autant que de besoin, concession de noblesse avec le titre de chevalier, transmissible de mâle en mâle par ordre de primogéniture par lettres patentes du 2 janvier 1845&amp;lt;ref name=&amp;quot;Bulletin&amp;quot;&amp;gt;[https://books.google.fr/books?id=mjxGAQAAMAAJ&amp;amp;pg=PA294&amp;amp;dq=Parthon+de+Von+1845&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ved=0ahUKEwibtrvcvNnNAhXBzIMKHU65DyoQ6AEIOjAG#v=onepage&amp;amp;q=Parthon&amp;amp;f=false &#039;&#039;Bulletin usuel des lois et arrêtés: concernant l&#039;administration générale&#039;&#039;]&lt;br /&gt;
&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
D&#039;origine française, la famille Parthon occupait des offices dans la justice et dans les Eaux et Forêts du duché de Châteauroux depuis le {{s-|XVI|e}}. Étienne-Sulpice Parthon, conseiller et avocat du roi au bailliage, appartenait à l&#039;administration municipale de Châteauroux comme notable en 1776&amp;lt;ref&amp;gt;[https://books.google.fr/books?id=sqc4AQAAIAAJ&amp;amp;q=%22du+duch%C3%A9+depuis+le+xvIe+si%C3%A8cle.+Etienne-Sulpice+Parthon+appartient+%C3%A0+l&#039;administration+municipale+de+Ch%C3%A2teauroux+comme+notable+en+1776%22&amp;amp;dq=%22du+duch%C3%A9+depuis+le+xvIe+si%C3%A8cle.+Etienne-Sulpice+Parthon+appartient+%C3%A0+l&#039;administration+municipale+de+Ch%C3%A2teauroux+comme+notable+en+1776%22&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ved=0ahUKEwjBq77fk9nNAhWr5IMKHR_MC9AQ6AEIIDAA &#039;&#039;Grands notables du Premier Empire: Indre&#039;&#039;, Centre national de la recherche scientifique, 1994, page 203.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Parthon de Von.png|60px|alt=Armes Parthon de Von]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Pastur&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de chevalier en 1967&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Pastur (Belgique).png|60px|alt=Armes Pastur]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Paternotte de la Vaillée&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;de La Vaillée&amp;quot;&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Nom d&#039;une seigneurie possédée par une famille homonyme bretonne éteinte du nom de &#039;&#039;&amp;quot;de Paternostre&amp;quot;&#039;&#039;.&amp;lt;/ref&amp;gt;, anoblis et créés barons en 1955, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Patoul (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec permission de porter la particule &#039;&#039;de&#039;&#039; par l&#039;Empereur Charles VI et par le canal irrégulier de la Chancellerie de l&#039;Empire en 1718, confirmation de noblesse en 1735 avec effet retroactif au 18 juillet 1718 par le canal irrégulier de la Chancellerie des Pays-Bas.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1822, mention sur la {{1ère}} liste officielle des nobles, concession du titre de chevalier pour toute la descendance masculine en 1871, concession du titre de comte transmissible à la primogéniture mâle en 1930 et conversion de ce titre en titre réversible à un neveu qui le transmettra de la même manière en 1961.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Patoul.png|60px|alt=Armes de Patoul]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Paulus du Châtelet&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de baron en 1951, adjonction du nom &#039;&#039;&amp;quot;de Châtelet&amp;quot;&#039;&#039; en 1954 et 1969, conversion du titre personnel de baron en titre transmissible à la primogéniture mâle en faveur de deux petits-fils en 1956, concession du titre personnel de baron en 1969. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Pecsteen&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Pecsteen de Buytswerve&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;AFB_269&amp;quot;&amp;gt;Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, Recueil LXI de l&#039;Association royale Office Généalogique et Héraldique de Belgique, Bruxelles, 2008, {{p.|269}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Admission dans la noblesse belge en 1822, membre du corps équestre de la Flandre occidentale, mention sur la {{1ère}} liste officielle des nobles, concession du titre de baron transmissible à la primogéniture mâle en 1851&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;. Adjonction du nom &#039;&#039;&amp;quot;de Buytswerve&amp;quot;&#039;&#039; en 1982 et 1983&amp;lt;ref name=&amp;quot;AFB_269&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Pecsteen.png|60px|alt=Armes de Pecsteen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Peers de Nieuwburgh&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis  et créés chevaliers en 1847, titre transmissible à la primogéniture mâle, concession du titre de baron transmissible à la primogéniture mâle en 1852, adjonction du nom &#039;&#039;&amp;quot;de Nieuwburgh&amp;quot;&#039;&#039; en 1896. Une autre branche fut anoblie en 1841 et obtint concession du titre de baron transmissible à la primogéniture mâle en 1934.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes Peers de Nieuwburgh.jpg|60px|alt=Armes Peers de Nieuwburgh]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Peñaranda de Franchimont (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;{{,}}&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Franchimont était le nom d&#039;une seigneurie ayant appartenu à la famille &#039;&#039;van der Beke&#039;&#039; et qui passa aux Peñaranda au {{s-|XVIII}} par héritage.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1852, mention sur la {{1ère}} liste officielle des nobles sous le nom &#039;&#039;&amp;quot;de Peñaranda de Dufilée&amp;quot;&#039;&#039;. Concession du titre de baron transmissible à la primogéniture mâle en 1952.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Peñaranda de Franchimont.png|60px|alt=File:Armoiries de la famille de Peñaranda de Franchimont]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Pierpont (de)&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Pierpont Surmont de Volsberghe (de&#039;&#039;&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevalier en 1954, titre transmissible à la primogéniture mâle.&amp;lt;br/&amp;gt;Une deuxième ligne fut anoblie en 1897, adjoignit à son nom celui de &#039;&#039;&amp;quot;Surmont de Volsberghe&amp;quot;&#039;&#039; en 1912, et hérita d&#039;un titre de baron en 1913&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Par lettres patentes du 26 mai 1900, si la descendance masculine du baron &#039;&#039;Henri-François-Marie-Ghislain Surmont de Volsberghe&#039;&#039; venait à s&#039;éteindre, alors le titre reviendrait aux enfants de sa petite-fille &#039;&#039;Marie-Antoinette Surmont de Volsberghe&#039;&#039; issus de son mariage avec &#039;&#039;Albéric de Pierpont&#039;&#039;. Source: EPN 1979.&amp;lt;/ref&amp;gt;.&amp;lt;br/&amp;gt;Une troisième ligne obtint concession de noblesse en 1964.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Pessemier &#039;s Gravendies (de)&amp;lt;ref name=&amp;quot;EPN1996_P-Pes&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1989.&amp;lt;br/&amp;gt;Autorisation d&#039;ajouter &amp;quot;s&#039;Gravendries&amp;quot; par Arrêté royal en 1990.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Piers de Raveschoot&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et membre du corps équestre la Flandre Orientale&amp;lt;ref&amp;gt;[https://books.google.be/books?id=VcQ_AAAAcAAJ&amp;amp;pg=PA39&amp;amp;dq=piers+de+raveschoot+almanach&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ved=0CB0Q6AEwAGoVChMIkMuQuqSPyAIVCwoaCh2oxwcI#v=onepage &#039;&#039;Almanach de la province de la Flandre-Orientale&#039;&#039;, {{p.|39}}]&amp;lt;/ref&amp;gt; en 1816&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt; avec inscription sur la première liste officielle des nobles&amp;lt;ref&amp;gt;[https://books.google.be/books?id=aDpEAAAAcAAJ&amp;amp;pg=PA198#v=onepage&amp;amp;q&amp;amp;f=false &#039;&#039;Recueil des lois et actes géneraux du gouvernement, en vigueur dans le Royaume des Pays-Bas&#039;&#039;, troisième série, Tome 12, [[Bruxelles]], [[1826]], {{p.|198}}]&amp;lt;/ref&amp;gt; pour une première branche (éteinte).&amp;lt;br&amp;gt;Adjonction du nom &#039;&#039;de Raveschoot&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Ancienne seigneurie ayant longtemps appartenu à cette famille&amp;lt;/ref&amp;gt; en 1885 et en 1892. Reconnaissance de noblesse en 1886 pour les autres branches.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Piers de Raveschoot.png|60px|alt=Armes de la famille Piers de Raveschoot]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Pirmez&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1912, concession du titre de baron transmissible à la primogéniture mâle en 1925.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Pitteurs de Budingen (de)&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Pitteurs Hiégaerts (de)&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Branche &#039;&#039;de Pitteurs de Budingen&#039;&#039; anoblie en 1816, membre du corps équestre de la province de Liège, concession du titre de baron transmissible à la primogéniture mâle en 1921.&amp;lt;br/&amp;gt;Branche &#039;&#039;de Pitteurs Hiégaerts&#039;&#039; anoblie avec le titre de baron pour tous en 1876.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Pitteurs de Budingen.png|60px|alt=File:Armes de la famille Pitteurs de Budingen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Plancke (van der)&amp;lt;ref name=&amp;quot;EPN1979_P-Pos&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1898.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Poncelet&amp;lt;ref name=&amp;quot;EPN1996_Pon-Pro&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1996, seconde partie, Pon - Pro, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1996.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Poncelet à la croix d&#039;or&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de baron en 1938.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Poncelet&amp;lt;ref name=&amp;quot;EPN1996_Pon-Pro&amp;quot;/&amp;gt;{{,}}&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Poncelet à la fasce bretessée d&#039;argent&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Poncelet&amp;lt;ref name=&amp;quot;EPN1996_Pon-Pro&amp;quot;/&amp;gt;{{,}}&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Poncelet aux chevrons d&#039;argent&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1989.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Posch (de)&amp;lt;ref name=&amp;quot;EPN1996_Pon-Pro&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Anoblis et créés barons en 1931, titre transmissible à la primogéniture mâle, baron pour tous les mâles de la branche aînée en 1989.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Posson (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1996_Pon-Pro&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Posson de Wanfercée (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1996_Pon-Pro&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de chevalier héréditaire et octroi de la particule &#039;&#039;&amp;quot;de&amp;quot;&#039;&#039; par l&#039;Empereur Charles VI et par le canal irrégulier de la Chancellerie d&#039;Empire en 1715. Anoblis en 1736 avec effet rétroactif au 29 juillet 1715 via le canal régulier de la chancellerie des Pays-Bas par Charles VI. Concession de noblesse par l&#039;impératrice Marie-Thérèse en 1754.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1822&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Les lettres Patentes nécessaires ne furent pas levées.&amp;lt;/ref&amp;gt; et en 1852, concession du titre de baron transmissible à la primogéniture mâle en 1922, adjonction du nom &#039;&#039;&amp;quot;de Wanfercée&amp;quot;&#039;&#039; en 1993.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Posson.png|60px|alt=Armes de Posson]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Poswick&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1996_Pon-Pro&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Poswick de Crawhez&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1996_Pon-Pro&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1952, concession du titre de baron transmissible à la primogéniture mâle en 1955, adjonction du nom &#039;&#039;&amp;quot;de Crawhez&amp;quot;&#039;&#039; en 1985 à la suite d&#039;une adoption par une cousine.&amp;lt;br/&amp;gt;Deux autres branches obtinrent reconnaissance de noblesse en 1953 et concession du titre de baron transmissible à la primogéniture mâle en 1968.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Poswick.png|60px|alt=Armes Poswick]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Potesta de Waleffe (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;&amp;gt;Comte Humbert de Marnix de Sainte Aldegonde, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 2011, seconde partie, Pot - Rob, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 2011.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Admission dans la noblesse belge en 1816, membre du corps équestre de Liège, concession du titre de baron transmissible à la primogéniture mâle en 1822 et 1851, mention sur la {{1ère}} liste officielle des nobles. Adjonction du nom &#039;&#039;&amp;quot;de Waleffe&amp;quot;&#039;&#039; dans un acte de mariage en 1823, &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Potesta.png|60px|alt=Armes de Potesta]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Potter (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Potter de Zinzerling (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Potter d&#039;Indoye (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse par l&#039;impératrice Marie-Thérèse en 1764.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1816, 1817 et 1822, mention sur la {{1ère}} liste officielle des nobles, adjonction du nom &#039;&#039;&amp;quot;de Zinzerling&amp;quot;&#039;&#039; en 1979, adjonction du nom &#039;&#039;&amp;quot;d&#039;Indoye&amp;quot;&#039;&#039; en 1847 et 1897, adjonction du nom &#039;&#039;&amp;quot;de ten Broeck&amp;quot;&#039;&#039; en 1897&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Potter.png|60px|alt=File:Armoiries de la famille de Potter]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Poullet&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1871, concession du titre de vicomte transmissible à la primogéniture mâle en 1925. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Pouppez de Kettenis de Hollaeken&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Fonction anoblissante de membre du Grand Conseil de Malines en 1749.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1827, adjonction du nom &#039;&#039;&amp;quot;de Hollaeken&amp;quot;&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Aussi longtemps qu&#039;ils posséderont la terre de ce nom.&amp;lt;/ref&amp;gt; en 1840, mention sur la {{3e|liste}} officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Pouppez de Kettenis de Hollaeken.png|60px|alt=File:Armoiries de la famille Pouppez de Kettenis de Hollaeken]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Powis de Tenbossche&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis par l&#039;Empereur Charles VI en 1732. Octroi de la chevalier avec modification d&#039;armoiries et autorisation de porter le nom de &#039;&#039;Powis&#039;&#039; par l&#039;Empereur Charles VI en 1733.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de chevalier en 1856, titre transmissible à la primogéniture mâle, concession du titre de baron transmissible à la primogéniture mâle en 1912.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason Powis de Tenbossche.png|60px|alt=blasonnement:D&#039;or, au lion de gueules]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Praet (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Praet d&#039;Amerloo (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis par l&#039;Empereur Charles VI en 1734.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et concession du titre de chevalier en 1857, titre transmissible à la primogéniture mâle, adjonction du nom &#039;&#039;&amp;quot;d&#039;Amerloo&amp;quot;&#039;&#039; en 1948&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van Praet.png|60px|alt=File:Armoiries de la famille van Praet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Prelle de la Nieppe (de)&#039;&#039;&#039;&amp;lt;ref&amp;gt;Voir toutes les références dans l&#039;article : [https://fr.wikipedia.org/wiki/Famille_de_Prelle_de_la_Nieppe Famille de Prelle de la Nieppe sur WikipediA].&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Seigneurs d&#039;Eugies et d&#039;Hensies au {{s-|XVI}}, seigneurs à Sclayn aux {{XVIIe}} et {{XVIIIe}} siècles, seigneur de Picquendale au {{s-|XVII}}, seigneurs de la Nieppe, de Berlette, d&#039;Edequines et de Secquier aux {{XVIIe}} et {{XVIIIe}} siècles.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1823, mention sur la {{1ère}} liste officielle des nobles, membre du corps équestre du Brabant méridional.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Prelle de la Nieppe.png|60px|Armes de la famille de Prelle de la Nieppe]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Pret Roose de Calesberg (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Maintenue de noblesse et concession du titre de chevalier héréditaire via le matricule irrégulier de l&#039;Empire par Charles VI en 1712. Confirmation de noblesse avec effet rétroactif au 11 avril 1712 par Charles VI en 1735, concession de noblesse par l&#039;impératrice Marie-Thérèse en 1745.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1816, membre du corps équestre de la province d&#039;Anvers, mention sur la {{1ère}} liste officielle des nobles, concession du titre de comte transmissible à la primogéniture mâle en 1919.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Pret.png|60px|alt=Armes de Pret]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Preud&#039;homme d&#039;Hailly de Nieuport (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1530 par Charles-Quint, octroi de la chevalerie en 1600 et 1610 par l&#039;archiduc Albert, octroi de la chevalerie en 1640 par le roi Philippe IV, concession du titre de comte &#039;&#039;d&#039;Hailly&#039;&#039; en 1721 par le roi Louis XV, confirmation des titres de chevalier transmissible à la descendance masculine et de marquis &#039;&#039;de Verquigneul&#039;&#039; transmissible à la primogéniture en 1756 par le roi Louis XV.&amp;lt;br/&amp;gt;Reconnaissance de noblesse avec le titre de vicomte de Nieuport en 1816, membre du crops équestre de la province de Flandre occidentale, inscription sur la {{1ère}} liste officielle des nobles avec la mention que le titre est transmissible la primogéniture, concession du titre personnel de vicomte et mention sur la {{5e|liste}} officielle des nobles, adjonction du nom &#039;&#039;&amp;quot;de Nieuport&amp;quot;&#039;&#039; en 1886.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Preud&#039;homme d&#039;Hailly de Nieuport.png|60px|alt=File:Armoiries de la famille de Preud&#039;homme d&#039;Hailly de Nieuport]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Prigogine&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire avec le titre personnel de vicomte en 1990 en faveur d&#039;Ilya Prigogine.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Prisse&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés baron en 1844, titre transmissible à la primogéniture mâle. Concession du titre de baron transmissible à la primogéniture mâle en 1858 et 1921.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Prisse.png|60px|alt=File:Armoiries de la famille Prisse]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Puissant Baeyens&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;Baeyens&amp;quot;&#039;&#039; en 1911, anoblis en 1957, concession du titre de baron transmissible à la primogéniture mâle en 1964.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Put (van de)&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte pontifical en 1921 par le pape Benoît XV, titre transmissible à la primogéniture mâle.&amp;lt;br/&amp;gt;Concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1927.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== Q ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Quirini (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevalier du Saint-Empire par le comte de Zeyll en 1774, titre transmissible à toute la descendance mâle.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1902 et 1920.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== R ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Radiguès Saint-Guédal de Chennevière (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Radiguès de Chennevière (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|marquis&amp;lt;br/&amp;gt;comte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Qualificatif d&#039;écuyer à partir de 1400, qualification ancienne de marquis, lettres de relief de noblesse en 1651 par Louis XIV, preuves de noblesse d&#039;ancienne extraction à la Cour des aydes de Paris en 1652, reconnaissance de noblesse par jugement du Conseil du Luxembourg en 1715, jugement confirmé par le Grand conseil de Malines en 1717, confirmation de noblesse et du titre de chevalier en 1763 par le comte de Zeyll.&amp;lt;br/&amp;gt;Pour la première ligne portant le nom &#039;&#039;de Radiguès Saint-Guédal de Chennevière&#039;&#039;: Reconnaissance de noblesse et désignation comme membre du corps équestre de la province de Liège avec le titre de marquis transmissible à la primogéniture mâle en 1816, mention sur la {{1ère}} liste officielle des nobles.&amp;lt;br/&amp;gt;Pour la seconde ligne portant le nom &#039;&#039;de Radiguès de Chennevière&#039;&#039;: Admission dans la noblesse belge en 1926, modification d&#039;armoiries par voie de reconnaissance en 1955, concession du titre de baron transmissible à la primogéniture mâle en 1966 pour trois branches de cette lignée, concession du titre de comte pour tous et augmentation d&#039;armoiries en 2010.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de Radiguès de Chennevière.png|60px|alt=File:Armoiries de Radiguès de Chennevière]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Radzitzky d&#039;Ostrowick (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Naturalisation belge en 1837, reconnaissance de noblesse et du titre de baron transmissible à la primogéniture mâle en 1851, adjonction du nom &#039;&#039;&amp;quot;d&#039;Ostrowick&amp;quot;&#039;&#039; en 1887, concession du titre de baron et augmentation d&#039;armoiries en 1937 pour un frère cadet, titre transmissible à la primogéniture mâle, concession du titre de baron transmissible à la primogéniture mâle pour un frère cadet en 1964.&amp;lt;br/&amp;gt;Une seconde branche obtint concession du titre de baron transmissible à la primogéniture mâle en 1884 et adjoignit à son nom celui &#039;&#039;&amp;quot;d&#039;Ostrowick&amp;quot;&#039;&#039; en 1887, un frère cadet de cette branche obtint concession du titre de baron transmissible à la primogéniture mâle et augmentation d&#039;armoiries en 1932.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes du baron Georges de Radzitzky d&#039;Ostrowick et de ses descendants.png|60px|alt=Armes du baron Georges de Radzitzky d&#039;Ostrowick et de ses descendants]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Rémion&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de baron en 1992.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Renesse (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Érection de la seigneurie de Warfusée en comté et concession du titre de comte du Saint-Empire pour toute la descendance par l&#039;empereur Roldophe II en 1609, nominations à l&#039;État Noble de Liège aux {{XVIIe}} et {{XVIIIe}} siècles.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et nomination comme membre du corps équestre du Limbourg avec le titre de comte pour tous en 1816, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Renesse.png|60px|alt=File:Armoiries de la famille de Renesse]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Rest (van der)&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de baron transmissible à la primogéniture mâle en 1966. Une autre branche fut anoblie avec le titre personnel de chevalier en 1987.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Richard&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Richard de Foucaud et d&#039;Aure&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de baron transmissible à la primogéniture mâle en 1947, adjonction du nom &#039;&#039;&amp;quot;de Foucaud et d&#039;Aure&amp;quot;&#039;&#039; à la suite d&#039;une adoption en 1979.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Rion&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire et du titre de baron à titre personnel en faveur de Pierre Rion par SM le roi Philippe en 2016 / Journal officiel 19 juillet 2016.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason (1).jpg|60px|alt=Armes de la Pierre Rion et de sa descendance]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Riquet de Caraman-Chimay (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|prince&amp;lt;br/&amp;gt;comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Titre de baron de Bonrepos par relief du roi Louis XIV en 1666 pour Pierre-Paul Riquet, maintenue de noblesse en 1670, concession du titre de &#039;&#039;comte de Caraman&#039;&#039; par Louis XIV en 1670, concession du titre de baron de l&#039;Empire par Napoléon {{1er}} en 1814, concession du titre de &#039;&#039;marquis de Caraman&#039;&#039; par Louis XVIII, concession du titre de &#039;&#039;duc de Caraman&#039;&#039; à titre personnel en 1828 par le roi Charles X, ordonnance rendant ce titre de duc héréditaire en 1830, confirmation du titre héréditaire de duc en 1870 par l&#039;empereur Napoléon III&amp;lt;br/&amp;gt;Reconnaissance de noblesse et désignation comme membre du corps équestre de Hainaut avec les titres de prince de Chimay et de comte de Caraman en 1817, incorporation dans la noblesse du royaume des Pays-Bas avec les titres de &#039;&#039;prince de Chimay&#039;&#039; transmissible par ordre de primogéniture masculine et de &#039;&#039;comtes et comtesses de Caraman&#039;&#039; pour tous les descendants des deux sexes en 1824, mention sur la {{3e|liste}} officielle des nobles, susbstitution du titre de &#039;&#039;prince de Caraman&#039;&#039; et de &#039;&#039;comtesse de Caraman&#039;&#039; par celui de &#039;&#039;prince de Caraman-Chimay&#039;&#039; et de &#039;&#039;comtesse de Caraman-Chimay&#039;&#039; sauf pour le chef de famille qui continuera de porter les titres de &#039;&#039;prince de Chimay et prince de Caraman&#039;&#039;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason Joseph Marie Guy Henri Philippe de Riquet (1836-1892).png|60px|alt=Armes de Chimay-Caraman]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Rittweger de Moor&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de baron en 1983.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Roberti&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de chevalier transmissible à la primogéniture mâle en 1954, 7 autres branches anoblies en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Roberti de Winghe&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1857, adjonction du nom &#039;&#039;&amp;quot;de Winghe&amp;quot;&#039;&#039; en 1933, concession du titre de baron transmissible à la primogéniture mâle en 1961, concession du titre personnel de baron en 1993.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Roberti de Winghe.png|60px|alt=File:Armoiries de la famille Roberti de Winghe]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Robiano (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Mengersen-Robiano (von)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN2011_Pot-Rob&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Fonction anoblissante de membre conseiller et trésorier général du Conseil des Finances par les archiducs Albert et Isabelle, concession du titre de vicomte transmissible à la primogéniture mâle par l&#039;impératrice Marie-Thérèse en 1753 et 1754.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et concession du titre de comte pour tous en 1848. Naturalisation prussienne en 1924 précédée en 1923 d&#039;une adoption par le couple &#039;&#039;von Mengersen&#039;&#039;-&#039;&#039;von Fürstenberg&#039;&#039; qui engendra un changement de nom en &#039;&#039;&amp;quot;von Mengersen-Robiano&amp;quot;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Robiano.png|60px|alt=Armes de Robiano]]&lt;br /&gt;
|-&lt;br /&gt;
 | align=&amp;quot;left&amp;quot;|Roelants du Vivier&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1980, seconde partie, Ro - Ry, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1980.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;EPN2012_Roc-Sche&amp;quot;&amp;gt;Comte Humbert de Marnix de Sainte Aldegonde, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 2012, première partie, Roc - Sche, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 2012.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1930 (branche éteinte)&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;. Adjonction du nom &#039;&#039;&amp;quot;du Vivier&amp;quot;&#039;&#039; en 1938 et concession de noblesse en 1958 pour une seconde branche&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Roelants du Vivier.png|60px|alt=Armes de Roelants du Vivier]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Roest d&#039;Alkemade Oem de Moesenbroeck (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de vicomte à un collatéral en 1739, couronne de comte en 1741, relève du nom et des armes de &#039;&#039;Oem de Moesenbroeck&#039;&#039; en 1781, concession du titre de baron sous le nom de &#039;&#039;Oem de Moesenbroeck&#039;&#039; en 1786, titre transmisible à la primogéniture mâle.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de vicomte transmissible à la primogéniture mâle en 1816, membre de l&#039;Ordre équestre du Brabant méridional, mention sur la {{1ère}} liste officielle des nobles, concession du titre de baron transmissible à la primogéniture mâle en 1925, reconnaissance du titre de baron pour tous en 1956.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoires de la famille de Roest d&#039;Alkemade.png|60px|alt=File:Armoires de la famille de Roest d&#039;Alkemade]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Rolin&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Rolin Jacquemyns&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Rolin Hymans&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;Jacquemyns&amp;quot;&#039;&#039; en 1912, anoblis et créés barons en 1921, titre transmissible à la primogéniture mâle.&amp;lt;br/&amp;gt;Une autre branche adjoignit à son nom celui d’&#039;&#039;Hymans&#039;&#039; en 1912 et fut anoblie en 1921.&amp;lt;br/&amp;gt;Quatre autres branches (&#039;&#039;Rolin&#039;&#039;) obtinrent concession de noblesse en 1921 et concession du titre de baron transmissible à la primogéniture mâle en 1939.&amp;lt;br/&amp;gt;Une autre branche (&#039;&#039;Rolin&#039;&#039;) obtint concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1921 puis, concession du titre de baron transmissible à la primogéniture mâle en 1938 pour un frère cadet.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Rolin.png|60px|alt=Armes de Rolin]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Romrée de Vichenet (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier en 1622 par Philippe IV, admission à l&#039;État Noble de Namur en 1679, 1699 et 1751.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de comte transmissible à la primogéniture mâle en 1901.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Romrée de Vichenet.png|60px|alt=Armes de Romrée]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Rosen de Borgharen (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1680, chevalier du Saint-Empire en 1698, baron du Saint-Empire en 1703.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron pour tous en 1816, membre du corps équestre du Limbourg, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Rosen.png|60px|alt=Armes de Rosen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Rosseeuw&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevalier en 1931, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Rossius d&#039;Humain (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse pour autant que de besoin en 1650 par l&#039;Empereur Ferdinand III.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1896, concession du titre de baron transmissible à la primogéniture mâle en 1922.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Rossius.png|60px|alt=File:Armoiries de la famille de Rossius]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Rotsart de Hertaing&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Rotsart de Hertaing de Kerchove d&#039;Exaerde&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1721.&amp;lt;br/&amp;gt;Reconnaissance de noblesse implicite en 1856 à la suite des lettres patentes accordant la reversibilité du titre de baron porté par un grand-père (portant le nom &#039;&#039;Pecsteen&#039;&#039;), titre transmissible à la primogéniture mâle, concession du titre personnel de baron en 1910, adjonction du nom &#039;&#039;de Kerchove d&#039;Exaerde&#039;&#039; à la suite d&#039;une adoption en 1942.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Rotsart de Hertaing.png|60px|alt=File:Armoiries de la famille Rotsart de Hertaing]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Roy de Blicquy (du)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&#039;&#039;&#039;Beveridge&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse en 1735.&amp;lt;br/&amp;gt;Seigneurs de Blicquy, reconnaissance de noblesse en 1816, membres du corps équestre du Hainaut, mention sur la {{1ère}} liste officielle des nobles, concession du titre de baron transmissible à la primogéniture mâle en en 1930 et 1940, substitution du nom &#039;&#039;du Roy de Blicquy&#039;&#039; en &#039;&#039;Beveridge&#039;&#039; à la suite d&#039;une adoption en 1942.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille du Roy de Blicquy.png|60px|alt=Armes du Roy de Blicquy]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Royer de Dour de Fraula (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron transmissible à la primogéniture mâle en 1787.&amp;lt;br/&amp;gt;Seigneurs Dour, reconnaissance de noblesse et du titre de baron transmissible à la primogéniture mâle en 1816, membre du corps équestre du Hainaut, mention sur la {{1ère}} liste officielle des nobles, adjonction du nom &#039;&#039;de Fraula&#039;&#039; en 1909,  modification d&#039;armoiries en 1913, &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Royer de Dour.png|60px|alt=File:Armoiries de la famille Royer de Dour]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Ruffo de Bonneval de La Fare des Comtes de Sinopoli de Calabre&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|marquis&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Seigneurs de Bonneval (comté de Provence) au {{s-|XVII}} sous le nom &#039;&#039;Roux&#039;&#039;, co-seigneur de la Fare au {{s-|XVIII}}, anoblis en 1732, concession du titre de marquis de la Fare par Louis XV en 1768. Autorisation de porter le nom &#039;&#039;Ruffo des comtes de Sinopoli&#039;&#039; en 1791 par Ferdinand IV des Deux-Siciles à la suite d&#039;une émigration à Turin en 1789, autorisation de porter le nom &#039;&#039;Ruffo&#039;&#039; au lieu de &#039;&#039;Roux&#039;&#039; en France en 1814 par Louis XVIII, rectification du nom &#039;&#039;Ruffo-Bonneval&#039;&#039; en &#039;&#039;Ruffo de Bonneval&#039;&#039; en 1874, admission dans la noblesse belge avec le titre de marquis transmissible à la primogéniture mâle en 1902&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Jean-François Houtart rajoute dans son ouvrage &#039;&#039;Anciennes familles de Belgique&#039;&#039; que cette famille n&#039;a pas de lien les &#039;&#039;Ruffo di Calabria&#039;&#039; dont la représentante contemporaine la plus connue est la reine de Belgique: Paola Ruffo di Calabria&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Ruzette&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier en 1757.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1822, mention sur la {{1ère}} liste officielle des nobles, concession du titre de chevalier transmissible à toute la descendance mâle en 1877, concession du titre de baron transmissible à la primogéniture mâle en 1888.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Ruzette.png|60px|alt=Armes de Ruzette]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Ryckel (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1749.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre personnel de baron en 1817, membre du corps équestre de la province de Liège, mention sur la {{1ère}} liste officielle des nobles, concession du titre de baron transmissible à la primogéniture mâle en 1923.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Ryckel.png|60px|alt=File:Armoiries de la famille de Ryckel]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Ryckman de Betz (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1822, mention sur la {{1ère}} liste officielle des nobles, concession du titre de baron transmissible à la primogéniture mâle en 1928.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Ryckman de Betz.png|60px|alt=Armes de Ryckman de Betz]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Ryelandt&amp;lt;ref name=&amp;quot;EPN1980_Ro-Ry&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1907, concession du titre de baron transmissible à la primogéniture mâle en 1938.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== S ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Sadeleer (de)&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1981, première partie, Sa - Se, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1981.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1922, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Sadeleer.png|60px|alt=Armes de Sadeleer]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Samyn&amp;lt;ref name=&amp;quot;ANRB-BT_OCT2012&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de chevalier en 2012. Patentes de noblesse en 2014.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes_Samyn.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|San (de)&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de chevalier en 1972.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Sauvage (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Sauvage Vercour (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier en 1762 par le comte de Zeyll.&amp;lt;br/&amp;gt;Concession de nobless et du titre de chevalier en 1822, titre transmissible à la primogéniture mâle, mention sur la {{1ère}} liste officielle des nobles, conversion de la concession de noblesse en reconnaissance de noblesse et du titre de chevalier qui sera transmis à toute la descendance mâle en 1840, concession du titre de comte transmissible à la primogéniture mâle en 1953.&amp;lt;br/&amp;gt;Une autre branche (&#039;&#039;de Sauvage Vercour&#039;&#039;) obtint concession de noblesse et du titre de chevalier transmissible à la primogéniture mâle en 1822, membre du corps équestre de la province de Liège, mention sur la {{1ère}} liste officielle des nobles, conversion de la concession de noblesse en reconnaissance de noblesse et du titre de chevalier qui sera transmis à toute la descendance mâle en 1830.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Sauvage Vercour.png|60px|alt=File:Armoiries de la famille de Sauvage Vercour]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Schaetzen (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Schaetzen van Brienen (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Schaetzen de Schaetzenhoff (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de chevalier transmissible à toute la descendance mâle en 1876, concession du titre de baron transmissible à la primogéniture mâle en 1929 et 1939, adjonction du nom &#039;&#039;&amp;quot;de Schaetzenhoff&amp;quot;&#039;&#039; en 1949, modification d&#039;armoiries par voie de reconnaissance en 1952, modifications d&#039;armoiries en 1956, concession du titre de baron transmissible à la primogéniture mâle et modifications d&#039;armoiries en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Schellekens&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1888, concession du titre de chevalier transmissible à la primogéniture mâle en 1896.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Scheppers de Bergstein&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1959.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Schietere de Lophem (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier en 1641.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1816, membre du corps équestre de la Flandre occidentale, mention sur la {{1ère}} liste officielle des nobles, concession du titre de chevalier transmissible à la primogéniture mâle en 1824, &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des chevaliers de Schietere de Lophem.png|60px|alt=Armes des chevaliers de Schietere de Lophem]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Schmitz&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire en 1985&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Pour Yves Schmitz et sa descendance.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Schoutheete de Tervarent (de)&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1993, concession du titre de baron transmissible par ordre de primogéniture masculine au chevalier Philippe de Schoutheete de Tervarent&amp;lt;ref&amp;gt;Arrêté royal du 16 juillet 1993.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Schrynmakers de Dormael (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Reconnaissance de noblesse et du titre de vicomte transmissible à la primogéniture mâle en 1823, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Schrynmakers de Dormael.png|60px|alt=File:Armes de la famille de Schrynmakers de Dormael]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Schueren (Van der)&amp;lt;br/&amp;gt;Schueren Devèze (Van der)&amp;lt;br/&amp;gt;Schueren Devèze (van der)&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession &#039;&#039;motu proprio&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Suivant la volonté de S.M. le Roi Albert II&amp;lt;/ref&amp;gt; de noblesse héréditaire à titre posthume&amp;lt;ref&amp;gt;Paul De Win, &#039;&#039;Lettres Patentes de Noblesse octroyées par S.M. Albert II, Roi des Belges 1993-2000&#039;&#039;, Lannoo, 2001, {{p.|16}}&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Jacques Van der Schueren décéda en cours de procédure.&amp;lt;/ref&amp;gt; en 1998 avec le titre personnel de baron en faveur de Jacques Van der Schueren&amp;lt;ref&amp;gt;Paul De Win, &#039;&#039;Lettres Patentes de Noblesse octroyées par S.M. Albert II, Roi des Belges 1993-2000&#039;&#039;, Lannoo, 2001, {{p.|224}}.&amp;lt;/ref&amp;gt;.&amp;lt;br&amp;gt;Adjonction du nom &#039;&#039;Devèze&#039;&#039; en 1949 et modification du nom &#039;&#039;Van der Schueren Devèze&#039;&#039; en &#039;&#039;van der Schueren Devèze&#039;&#039; en 2008.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Schyns&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire avec le titre personnel de chevalier en 1972 en faveur de Charles Schyns.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in tegenhermelijn, een paal van zilver, beladen met een kruis van keel.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Séjournet de Rameignies (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Nomination dans le Corps équestre du Hainaut et reconnaissance de noblesse en 1816. Concession du titre de baron transmissible à la primogéniture mâle en 1822.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement: &amp;quot;d&#039;azur, à trois fers de moulin d&#039;argent.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Selliers de Moranville (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et concession du titre de chevalier pour toute la descendance masculine en 1840.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Selliers de Moranville.png|60px|alt=Armes de Selliers de Moranville]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Selys de Longchamps (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1656, barons du Saint-Empire en 1699.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron pour tous en 1867, concession du titre de comte transmissible à la primogéniture mâle et modification d&#039;armoiries en 1958.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason Sélys-Longchamps.png|60px|alt=Armes de Sélys Longchamps]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Sergeant d&#039;Hendecourt (le)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1614 par les Archiducs Albert et Isabelle.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et concession du titre de vicomte transmissible à la primogéniture mâle en 1890.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Serstevens (t&#039;)&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1907, concession du titre de chevalier transmissible à la primogéniture mâle en 1914.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Shetty&amp;lt;ref&amp;gt;&#039;&#039;Bulletin trimestriel de l&#039;Association de la noblesse du royaume de Belgique&#039;&#039;, {{Numéro|251}}, juillet 2007, {{p.|125}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de baron en 2007.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Simonart&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1981, seconde partie, Si - Su, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1981.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de chevalier en 1960, concession du titre personnel de baron en 1977.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Simonis&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1911, concession du titre de baron transmissible à la primogéniture mâle en 1934&amp;lt;br/&amp;gt;Une seconde branche fut anoblie avec le titre de vicomte transmissible à la primogéniture mâle en 1908.&amp;lt;br/&amp;gt;Une troisième branche obtint concession de noblesse en 1911.&amp;lt;br&amp;gt;Un autre membre de cette famille, Joseph-Antoine Simonis, membre de la Deuxième Chambre des États généraux, fut anobli en 1816 par le roi Guillaume {{1er}} (branche éteinte).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Simonis.png|60px|alt=File:Armoiries de la famille Simonis]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Siraut&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec reversion du titre de baron transmissible à la primogéniture mâle en 1886, ce titre avait été concédé à une branche aînée éteinte en 1893.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Smet d&#039;Olbecke (de)&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1928, adjonction du nom &#039;&#039;&amp;quot;d&#039;Olbecke&amp;quot;&#039;&#039; en 1948.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Smet de Naeyer (de)&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;de Naeyer&amp;quot;&#039;&#039;&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Patronyme maternel.&amp;lt;/ref&amp;gt; en 1876&amp;lt;ref&amp;gt;Baron de Ryckman de Betz, &#039;&#039;Armorial général de la noblesse belge&#039;&#039;, H. Dessain, éditeur à Liège, 1941, {{p.|686}}.&amp;lt;/ref&amp;gt; et concession de noblesse pour trois branches de cette famille en 1886 (dont deux éteintes). En 1900, concession motu proprio du titre de comte, transmissible par ordre de primogéniture pour Paul-Joseph de Smet de Naeyer, fils d&#039;Eugène (branche aînée éteinte).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Smissen (van der)&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Smissen de Cortenberg (van der)&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Colleton vander Smissen&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1818, concession du titre de baron transmissible à la primogéniture mâle en 1857 et 1886.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van der Smissen de Cortenberg.png|60px|alt=File:Armoiries de la famille van der Smissen de Cortenberg]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Snoy&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Snoy et d&#039;Oppuers&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Chevalier à titre personnel en 1633 par Philippe IV, baron d&#039;Oppuers en 1664 par Philippe IV.&amp;lt;br/&amp;gt;Reconnaissance de noblesse sous le nom de &#039;&#039;baron de Snoy d&#039;Oppuers&#039;&#039; en 1816, membre du corps équestre de la province d&#039;Anvers, reconnaissance du titre de baron pour tous en 1822, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Snoy et d&#039;Oppuers.png|60px|alt=File:Armoiries de la famille Snoy et d&#039;Oppuers]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Solvay de la Hulpe&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;de la Hulpe&#039;&#039; en 1966. Concession de noblesse héréditaire avec le titre personnel de comte en 1969.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Solvyns&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1912, concession du titre de baron transmissible à la primogéniture mâle en 1939.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Speeckaert&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire en 1933. Augmentation d&#039;armoiries en 1969 et concession du titre personnel de chevalier en 1988&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Speeckaert.png|60px|alt=Armes de la famille Speeckaert]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Speth&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de baron en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Spirlet (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Spirlet Lamarche (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de chevalier héréditaire du Saint-Empire en 1768 par le comte de Zeyll.&amp;lt;br/&amp;gt;Admission dans la noblesse belge en 1817, membre du corps équestre de la province de Liège, mention sur la {{1ère}} liste officielle des nobles. Adjonction du nom de &#039;&#039;&amp;quot;Lamarche&amp;quot;&#039;&#039; en 1961 à la suite d&#039;une adoption.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Spirlet.png|60px|alt=File:Armoiries de la famille de Spirlet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Spoelberch (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et concession du titre de vicomte pour tous en 1816, membre du corps équestre du Brabant, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Spoelberch.png|60px|alt=Armes de la famille de Spoelberch]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Spot (de)&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1963, concession du titre de chevalier transmissible à la primogéniture mâle en 1973.&amp;lt;br/&amp;gt;Une autre branche obtint concession de noblesse en 1892 et concession du titre de chevalier transmissible à la primogéniture mâle en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Stas de Richelle&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevalier en 1848, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Stas de Richelle.png|60px|alt=Armes de Stas de Richelle]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Stassen&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Stassen&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1991 avec le titre personnel de chevalier.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Steenhault de Waerbeek (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Henri Buelens anobli en 1659 par Philippe IV avec autorisation de relever le nom et les armes de la famille éteinte &#039;&#039;de Steenhault&#039;&#039;, concession du titre de baron par l&#039;Impératrice Marie-Thérèse en 1766.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1816, membre du corps équestre de la province d&#039;Anvers, mention sur la {{1ère}} liste officielle des nobles avec le titre de baron transmissible à la primogéniture mâle.&amp;lt;br/&amp;gt;Famille éteinte dans les mâles en 1997&amp;lt;ref&amp;gt;Didier Cogels van Reynegom et Michel Cardon de Lichtbuer, &#039;&#039;Des armoiries des familles belges sur céramiques&#039;&#039;, Imprimerie Hayez, Bruxelles, 6 mai 2014, page 302.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Steenhault.png|60px|alt=File:Armoiries de la famille Steenhault]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Stegen de Schrieck (van der)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte transmissible à la primogéniture mâle en 1698 par le roi Charles II&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de comte personnel en 1816, membre du corps équestre du Brabant, mention sur la {{1ère}} liste officielle des nobles, concession du titre de comte en 1828, concession du titre de comte pour tous en 1871, adjonction du nom &#039;&#039;&amp;quot;de Schrieck&amp;quot;&#039;&#039; en 1887.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille van der Stegen.png|60px|alt=Armes de la famille van der Stegen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Stexhe (de)&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1965 avec le titre personnel de chevalier, conversion de ce titre en titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Stichelen Rogier (van der)&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;Rogier&amp;quot;&#039;&#039; en 1925, anoblis en 1931.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Stiénon du Pré&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte pontifical en 1874, adjonction du nom &#039;&#039;&amp;quot;du Pré&amp;quot;&#039;&#039; en 1877, concession de noblesse en 1886, concession du titre de baron transmissible à la primogéniture mâle en 1908.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Storme&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1990&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Straten Ponthoz (van der)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&amp;lt;br&amp;gt;&#039;&#039;&#039;Straten Waillet (van der)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse et augmentation d&#039;armoiries en 1521, concession du titre de comte en 1788 par Louis XVI&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt; Selon Jean-François Houtart dans son ouvrage Anciennes familles de Belgique paru à Bruxelles en 2008, le diplôme de noblesse accordé en 1521 par Charles Quint est un faux, la certification de ce diplôme par un secrétaire du Conseil privé en 1562 est un faux, l&#039;attestation de noblese produite par trois roys d&#039;armes en 1647 est un faux, les lettres de convocation aux États Généraux du comté de Hainaut datées de 1788 et 1789 par Louis XVI au comte Vanderstrade sont des faux. Houtart donne pour littérature à ce propos : Hervé Douxchamps, &#039;&#039;Aux origines de la famille van der Straten-Waillet-Ponthoz&#039;&#039;, dans le &#039;&#039;Parchemin&#039;&#039;, 1991, {{p.|221}} ; Hervé Douxchamps, &#039;&#039;Les diplômes de noblesse de la famille van der Straten-Waillet-Ponthoz&#039;&#039;, dans le &#039;&#039;Parchemin&#039;&#039;, 1992, {{p.|76}}&amp;lt;/ref&amp;gt;.&amp;lt;br/&amp;gt;Pour la Ligne &#039;&#039;&#039;van der Straten Waillet&#039;&#039;&#039;: Seigneurs de Waillet, du Mont, etc., pair du comté de Rochefort, membre de l&#039;état noble du Hainaut français, reconnaissance de noblesse et du titre personnel de baron en 1816, membre du corps équestre de Namur, mention sur la {{1ère}} liste officielle des nobles, reconnaissance du titre de baron pour tous en 1839, reconnaissance du titre de comte transmissible à la primogéniture mâle en 1868.&amp;lt;br/&amp;gt;Pour la Ligne &#039;&#039;&#039;van der Straten Ponthoz&#039;&#039;&#039;: seigneurs de Ponthoz, reconnaissance de noblesse en 1816, membre du corps équestre du Luxembourg, mention sur la {{1ère}} liste officielle des nobles, reconnaissance du titre de baron pour tous en 1839, concession du titre de comte transmissible à la primogéniture mâle en 1840, extension de ce titre à toute la descendance masculine en 1846 et 1848.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille van der Straten Waillet.png|60px|alt=File:Armoiries de la famille van der Straten Waillet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Streel (de)&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1930. Titre de baron attribué en 1954 à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Struye de Swielande&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1908, adjonction du nom &#039;&#039;&amp;quot;de Swielande&amp;quot;&#039;&#039; en 1932.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Strydonck (van)&amp;lt;br&amp;gt;Strydonk de Burkel (van)&amp;lt;ref name=&amp;quot;EPN1981_Si-Su&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Deux branches portant le nom &#039;&#039;&amp;quot;van Strydonck&amp;quot;&#039;&#039; anoblies en 1962.&amp;lt;br/&amp;gt;Une troisième branche adjoignit à son nom celui de &#039;&#039;&amp;quot;de Burkel&amp;quot;&#039;&#039;, obtint concession de noblesse et du titre personnel de chevalier en 1937 et, en 1956, concession du titre de baron transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Swiatopelk-Czetwertynski&#039;&#039;&#039;&amp;lt;ref&amp;gt;&#039;&#039;&#039;Czetwertynkski (Swiatopolk-)&#039;&#039;&#039;, in &#039;&#039;Almanach de Gotha&#039;&#039;, Vol. II, Part 3, 189th Edition, London, 2013, {{pp.|272-276}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|prince&amp;lt;ref&amp;gt;{{Citation étrangère|langue=en|Members of this House bear the title of Prince (Princess) Swiatopolk (Swiatopelk) - Czetwertynski.}}, in &#039;&#039;Almanach de Gotha&#039;&#039;, Vol. II, Part 3, 189th Edition, London, 2013, {{p.|272}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Famille princière de Pologne, portant ce titre depuis 1495, titre reconnu en Pologne en 1569&amp;lt;ref&amp;gt;{{Citation étrangère|langue=en|The Czetwertynski family (...) has always kept the name Swiatopolk which was later joined with Czetwertynski, from the land of Czetwertina in Volhynia. It is one of the leading princely families of the same origin which are numerous in Russia, the only one since the Middle Ages settled in the Ruthenian provinces, incorporated into Poland. (...) &#039;&#039;&#039;The Princely dignity was recognized in Poland, in the Act of the Union of Lublin 1 July 1569&#039;&#039;&#039;. After the partition of Poland, the Czetwertynski were enrolled and received diplomas as Russian Princes from the Heraldic Chamber of the Senate in St. Petersburg (in 1843, 1858, 1860, 1875 and 1886).&#039;&#039;}}, in &#039;&#039;Almanach de Gotha&#039;&#039;, Vol. II, Part 3, 189th Edition, London, 2013, {{p.|272}}.&amp;lt;/ref&amp;gt;, reconnue en Belgique en 2007&amp;lt;ref&amp;gt;{{Citation étrangère|langue=en|Princely title recognized in Belgium in favour of Princes Alexander Vladimir and Constantin Nicolas and their descendants, 18 June 2007.}}, in &#039;&#039;Almanach de Gotha&#039;&#039;, Vol. II, Part 3, 189th Edition, London, 2013, {{p.|272}}.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== T ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;T&#039;Serclaes de Wommersom (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1981_Sa-Se&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Substitution du nom, titre et armes &#039;&#039;de Mesemacre&#039;&#039; en &#039;&#039;de T&#039;Serclaes&#039;&#039; en 1697 par autorisation du roi Charles II à la suite de l’« adoption » de Philippe de Mesemacre par sa femme, dernière du nom &#039;&#039;de T&#039;Serclaes&#039;&#039;.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron pour tous en 1838, concession du titre de comte transmissible à la primogéniture mâle en 1856, extension de ce titre de comte pour toute la descendance en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de T&#039;Serclaes de Wommersom.png|60px|alt=Armes de T&#039;Serclaes de Wommersom]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Tayart de Borms&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1982, première partie, T - U, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1982.&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;ANRB_237&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1893 et 1899, concession du titre de baron à titre personnel en 2003.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Taymans&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Taymans d&#039;Eypernon&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1923, adjonction du nom &#039;&#039;&amp;quot;d&#039;Eypernon&amp;quot;&#039;&#039; en 1929.&amp;lt;br/&amp;gt;Une seconde branche fut anoblie en 1931 et obtint concession du titre de chevalier transmissible à la primogéniture mâle en 1963.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Terlinden&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1676 par le roi Charles II.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1874, concession du titre de vicomte transmissible à la primogéniture mâle en 1921, concession du titre de baron transmissible à la primogéniture mâle en 1925 et 1927, concession du titre personnel de baron en 1968.&amp;lt;br/&amp;gt;Une seconde ligne obtint reconnaissance de noblesse en 1900 et concession du titre de baron transmissible à la primogéniture mâle en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Terwangne (de)&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron pour tous par le grand-duc de Hesse et du Rhin en 1845, substitution de leur nom &#039;&#039;&amp;quot;Terwangne&amp;quot;&#039;&#039; par celui &#039;&#039;&amp;quot;de Terwangne&amp;quot;&#039;&#039; en 1847, concession de noblesse et du titre de baron pour toute la descendance masculine en 1847.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Terwangne.png|60px|alt=File:Armoiries de la famille de Terwangne]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Theux de Meylandt et Montjardin (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier du Saint-Empire en 1703.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de chevalier pour toute la descendance mâle en 1822, membre du corps équestre de la province de Liège, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Theux de Meylandt et Montjardin.png|60px|alt=Armes de Theux de Meylandt et Montjardin]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Thibaut de Boesinghe (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Maintenue de noblesse pour autant que de besoin et concession du titre de chevalier du Saint-Empire par l&#039;empereur Charles VI en 1714 (via le canal irrégulier de la Chancellerie impériale), confirmation de noblesse avec effet rétroactif au 16 mars 1714 via le canal régulier de la Chancellerie des Pays-Bas en 1736.&amp;lt;br/&amp;gt;Adjonction du nom &#039;&#039;&amp;quot;de Boesinghe&amp;quot;&#039;&#039; en 1843, reconnaissance de noblesse en 1843, augmentation d&#039;armoiries (ajout de supports) en 1845, concession du titre de comte pontifical en 1895, baron à titre personnel en 1988.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Thibaut de Boesinghe.png|60px|alt=File:Armoiries de la famille de Thibaut de Boesinghe]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Thienpont&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Deux branches anoblies avec les titres personnels de baron et de chevalier en 1966, &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Thier Nagelmackers (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier du Saint-Empire en 1701 par l&#039;Empereur Léopold {{Ier}}.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de chevalier pour toute la descendance masculine en 1822, mention sur la {{1ère}} liste officielle des nobles, adjonction du nom &#039;&#039;« Nagelmackers »&#039;&#039; à la suite d&#039;une adoption en 1890.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Thier Nagelmackers.png|60px|alt=Armes de Thier]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Thomaz de Bossierre (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec octroi de la particule &#039;&#039;« de »&#039;&#039; en 1778 par l&#039;empereur Joseph II.&amp;lt;br/&amp;gt;Adjonction du nom &#039;&#039;&amp;quot;de Bossierre&amp;quot;&#039;&#039; en 1887, reconnaissance de noblesse en 1889.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Thysebaert (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de chevalier à titre personnel en 1712 par l&#039;empereur Charles VI via la secrétairie d&#039;État espagnole, barons en 1718, barons de l&#039;Empire en 1814 par Napoléon {{Ier}}.&amp;lt;br/&amp;gt;Reconnaissance de noblesse avec le titre personnel de baron en 1816, membre du corps équestre du Brabant, mention sur la {{1ère}} liste officielle des nobles, concession du titre de baron transmissible à la primogéniture mâle en 1888. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Thysebaert.png|60px|alt=Armes de Thysebaert]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Tibbaut&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1922, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Tillesse (de)&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte pontifical en 1884, anoblis avec le titre personnel de baron en 1993. En 1993, substitution du nom &amp;quot;de Tillesse&amp;quot; à celui de &amp;quot;Minette de Tillesse&amp;quot;&amp;lt;ref&amp;gt;Arrêté royal du 3 octobre 1990.&amp;lt;/ref&amp;gt;.   &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Timmermans&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1968.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Tornaco (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron du Saint-Empire en 1738.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron pour tous en 1816, membre du corps équestre du Luxembourg, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Tornaco.png|60px|File:Armoiries de la famille de Tornaco]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Traux de Wardin (de)&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de baron en 1803, par François II, empereur du Saint-Empire.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron pour tous en 1845.&amp;lt;br/&amp;gt;Concession du titre de comte pour Bernard de Traux de Wardin et pour tous ses descendants par le roi Albert II en 2013&amp;lt;ref&amp;gt;Source: [http://diplomatie.belgium.be/fr/Newsroom/actualites/communiques_de_presse/affaires_etrangeres/2013/07/ni_120713_faveurs_nobiliaires.jsp Faveurs nobiliaires Date: 12 juillet 2013]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Trazegnies (d&#039;Ittre) (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|marquis&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Noblesse féodale ({{s-|XIII|e}}), famille issue des &#039;&#039;de Hamal&#039;&#039; qui hérita des biens, nom et armes de la famille &#039;&#039;de Trazegnies&#039;&#039; au {{s-|XV|e}} à la suite du décès d&#039;Anne, dame héritière de Trazegnies.&amp;lt;br/&amp;gt;Concession du titre de chevalier à titre personnel par le roi Philippe II en 1598, comte de Gommegnies en 1614, concession du titre de marquis &#039;&#039;de Trazegnies&#039;&#039; par les Archiducs Albert et Isabelle en 1614, concession du titre de marquis &#039;&#039;de Trazegnies d&#039;Ittre&#039;&#039; par l&#039;impératrice Marie-Thérèse en 1777, concession du titre de comte de l&#039;Empire par Napoléon {{1er}} en 1811.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de comte pour tous en 1816, 1820 et 1822, reconnaissance de noblesse et du titre de marquis pour tous en 1816 et 1843, membre du corps équestre de Namur, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Trazegnies.png|60px|alt=Armes des marquis de Trazegnies]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Trieu de Terdonck (du)&#039;&#039;&#039;&amp;lt;ref&amp;gt;Baron de Ryckman de Betz, &#039;&#039;Armorial général de la noblesse belge&#039;&#039;, H. Dessain, éditeur à Liège, 1941, {{p.|443}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Concession de noblesse en 1781 par Joseph II, Empereur du Saint-Empire.&amp;lt;br&amp;gt;Reconnaissance de noblesse pour Charles-Augustin-Jean lors de son inscription dans l&#039;ordre équestre d&#039;Anvers en 1817, adjonction du nom &#039;&#039;&amp;quot;de Terdonck&amp;quot;&#039;&#039; en 1841 et concession du titre personnel de baron en 1960.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille du Trieu de Terdonck.png|60px|alt=blasonnement: &amp;quot;D&#039;azur à un étrier d&#039;argent lié de gueules accompagné de trois étoiles d&#039;or&amp;quot;.]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |&#039;&#039;&#039;Troostembergh (de)&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;Troostembergh de Troostembergh (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |Reconnaissance de noblesse en 1822, mention sur la {{1ère}} liste officielle des nobles, concession du titre de baron transmissible à la primogéniture mâle en 1919 et 1956, adjonction du nom &#039;&#039;&amp;quot;de Troostembergh&amp;quot;&#039;&#039;  pour la branche cadette à la suite d&#039;une adoption par un oncle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Troostembergh.png|60px|alt=Armes de Troostembergh]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== U ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Udekem d&#039;Acoz (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Udekem Gentinnes (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Udekem de Guertechin  (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Réception à l&#039;État Noble de Namur en 1784.&amp;lt;br/&amp;gt;Seigneurs d&#039;Acoz, de Villers-Potteries, membre de l&#039;état noble de Namur, reconnaissance de noblesse et concession du titre de baron transmissible à la primogéniture mâle en 1816, membre du corps équestre du Hainaut, mention sur la {{1ère}} liste officielle des nobles, modification d&#039;armoiries par voie de reconnaissance en 1876, adjonction du nom &#039;&#039;&amp;quot;d&#039;Acoz&amp;quot;&#039;&#039; en 1886, concession du titre de baron transmissible à la primogéniture mâle en 1921 et 1924, concession du titre de comte en 2000 à la suite du mariage de Mathilde d&#039;Udekem d&#039;Acoz avec le prince Philippe de Belgique.&amp;lt;br/&amp;gt;Une seconde ligne adjoignit à son nom celui de &#039;&#039;&amp;quot;de Guertechin&amp;quot;&#039;&#039; en 1888 et obtint reconnaissance de noblesse en 1891. Un frère cadet de cette ligne substitua son nom en faveur de &#039;&#039;&amp;quot;d&#039;Udekem Gentinnes&amp;quot;&#039;&#039; en 1978.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason Udekem d&#039;Acoz.png|60px|alt=Armes d&#039;Udekem (branche cadette)]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Ullens de Schooten Whettnall&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Ullens de Schooten&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1693 par le roi Charles II.&amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1816, membre du corps équestre de la province d&#039;Anvers, mention sur la {{1ère}} liste officielle des nobles, adjonction du nom &#039;&#039;&amp;quot;de Schooten&amp;quot;&#039;&#039; en 1912, adjonction du nom &#039;&#039;&amp;quot;Whettnall&amp;quot;&#039;&#039; en 1928, concession du titre de baron transmissible à la primogéniture mâle en 1969, concession du titre de comte transmissible à la primogéniture mâle en 1962. {{refnec|Extension du titre de baron à tous en 2013}}.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Ullens de Schooten.png|60px|alt=File:Armoiries de la famille Ullens de Schooten]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Ursel (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Ursel de Bousies (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_T-U&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|duc&amp;lt;br/&amp;gt;comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession en 1619 du titre personnel de chevalier en faveur de Conrad d&#039;Ursel de Grobendoncq, seigneur de Gestel, amman de la ville d&#039;Anvers, fils de Conrad &#039;&#039;&#039;Schetz&#039;&#039;&#039; qui reprit le nom et les armes d&#039;Ursel après son adoption par sa tante Barbe d&#039;Ursel en 1617&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille d&#039;Ursel&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;. Érection d&#039;Hoboken en baronnie par les Archiducs Albert et Isabelle en 1600, comte du Saint-Empire par l&#039;Empereur Ferdinand III en 1638, concession du titre de prince en 1716 par l&#039;empereur Charles VI, titre remplacé quelques jours plus tard par celui de duc transmissible à la primogéniture mâle, érection de la baronnie d&#039;Hoboken en duché en 1717, concession du titre de comte du Saint-Empire en 1810.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et des titres de duc transmissible à la primogéniture mâle et de comte pour tous les autres descendants en 1816, membre du corps équestre de la province d&#039;Anvers, mention sur la {{1ère}} liste officielle des nobles, adjonction du nom &#039;&#039;&amp;quot;de Bousies&amp;quot;&#039;&#039; en 1946 à la suite d&#039;une adoption.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries d&#039;Ursel.png|60px|alt=Armes d&#039;Ursel]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== V ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vaeren (van der)&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1982, seconde partie, V - Vin, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1982.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1968 et 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vallée Poussin (de La)&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1930, titre transmissible à la primogéniture mâle, concession du titre de baron transmissible à la primogéniture mâle en 1963.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Vaucleroy (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Maintenue de noblesse en France en 1668.&amp;lt;br/&amp;gt;Admission dans la noblesse belge en 1925.&amp;lt;br/&amp;gt;Concession du titre personnel de baron en 2002&amp;lt;ref name=&amp;quot;ANRB_232&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Vaucleroy.png|60px|alt=File:Armes de la famille de Vaucleroy]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vaxelaire&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1936 avec le titre personnel de baron, concession du titre de baron transmissible à la primogéniture mâle en 1940. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Velge&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Velge&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire en 1991 avec le titre personnel de baron à M. Jean-Charles Velge et concession de noblesse héréditaire à MM. Léon, Raymond et Maurice Velge&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot; /&amp;gt; et concession de noblesse en 1993.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vercruysse&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés chevaliers en 1967, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vercruysse de Solart&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1898, adjonction du nom &#039;&#039;&amp;quot;de Solart&amp;quot;&#039;&#039; en 1912.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Verdickt &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1997, concession du titre personnel de baronne à Mme Odette Degroux, lequel titre de baron est étendu à son époux, le chevalier Jacques Verdickt, et à tous leurs descendants&amp;lt;ref name=&amp;quot;AR 10 juillet 1997&amp;quot; /&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vergauwen&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Verhaege de Naeyer&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Adjonction du nom &#039;&#039;&amp;quot;de Naeyer&amp;quot;&#039;&#039; en 1876,  anoblis en 1886, &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Verhaegen&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1886, concession du titre de baron transmissible à la primogéniture mâle en 1917, 1923, 1936, 1939, 1953 et 1954.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Verhaegen.png|60px|alt=Armes de la famille Verhaegen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Verwilghen&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de baron transmissible à la primogéniture mâle en 1931.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Vicq de Cumptich (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de chevalier en 1607 par les Archiducs Albert et Isabelle, concession du titre de hcevalier par le roi Philippe IV en 1647, admission à l&#039;État Noble du Brabant en 1702.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et concession du titre de baron transmissible à la primogéniture mâle en 1848.&amp;lt;br/&amp;gt;Baron pour toute la descendance d&#039;Emmanuel de Vicq de Cumptich en 2003&amp;lt;ref name=&amp;quot;ANRB_237&amp;quot;/&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Vicq de Cumptich.png|60px|alt=Armes de la famille de Vicq de Cumptich]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Vilain XIIII&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de vicomte par l&#039;Impératrice Marie-Thérèse en 1758, concession du titre de comte de l&#039;Empire par Napoléon {{Ier}} en 1811.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de comte en 1816, membre du corps équestre de la Flandre orientale, inscription sur la {{1ère}} liste officielle des nobles avec la mention que le titre de vicomte est transmissible à la primogéniture mâle, concession du titre de vicomte pour tous en 1871.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Vilain XIIII.png|60px|alt=Armes de Vilain XIIII]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Villegas de Clercamp (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Villegas de Saint-Pierre Jette (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Villegas (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte transmissible à la primogéniture mâle en 1820 et 1967.&amp;lt;br/&amp;gt;Une seconde branche portant le nom &#039;&#039;de Villegas de Saint-Pierre Jette&#039;&#039; obtint confirmation du titre de comte de Saint-Pierre-Jette en 1767, reconnaissance de noblesse et du titre de comte transmissible à la primogéniture mâle en 1866, extension de ce titre de comte pour toute la descendance en 1934.&amp;lt;br/&amp;gt;Une troisième branche portant le nom &#039;&#039;de Villegas&#039;&#039; obtint reconnaissance de noblesse en 1822.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Villegas de Clercamp.png|60px|alt=Armes de Villegas de Clercamp]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Villenfagne d&#039;Ingihoul (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Villenfagne de Loën (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Villenfagne de Sorinnes (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Villenfagne de Vogelsanck (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1674 par le roi Charles II, concession du titre de baron du Saint-Empire en 1785 par l&#039;Empereur Joseph II.&amp;lt;br/&amp;gt;Seigneurs de Vogelsanck (baronnie), Sorinnes, Loën, Javelan, Beyne, Chenée, etc.&amp;lt;br/&amp;gt;Pour la branche &#039;&#039;&#039;d&#039;Ingihoul&#039;&#039;&#039;: Reconnaissance de noblesse et du titre de baron pour tous en 1816, membre du corps équestre de la province de Liège, mention sur la {{1ère}} liste officielle des nobles.&amp;lt;br/&amp;gt;Pour la branche &#039;&#039;&#039;de Sorinnes&#039;&#039;&#039;: Reconnaissance de noblesse et du titre de baron pour tous en 1823, mention sur la {{1ère}} liste officielle des nobles.&amp;lt;br/&amp;gt;Pour la branche &#039;&#039;&#039;de Loën&#039;&#039;&#039;: Reconnaissance de noblesse et du titre de baron pour tous en 1816, membre du corps équestre de la province de Liège, mention sur la {{1ère}} liste officielle des nobles.&amp;lt;br/&amp;gt;Pour la branche &#039;&#039;&#039;de Vogelsanck&#039;&#039;&#039;: Reconnaissance de noblesse et du titre de baron pour tous en 1816, membre du corps équestre de la province de Liège, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille be Villenfagne.png|60px|alt=Armes de Villenfagne]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Villers Grand Champs (de)&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Ecuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse en 1741 par l&#039;Impératrice Marie-Thérèse. Autorisation par Arrêté royal du 15 juin 1885 d&#039;accoler le nom &#039;&#039;Grand Champs&#039;&#039; à son patronyme pour Messire Edmond-Clément-Charles-Idesbalde-Achille de Villers. Reconnaissance de noblesse en 1887 par le roi Léopold II&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot; /&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Blason de la ville de Béthencourt (59) Nord-France.png|60px|Blason famille de Villers]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Vinck (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Vinck de Winnezeele (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec octroi de la particule en 1745 par l&#039;Empereur Charles VI.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et concession du titre de baron transmissible à la primogéniture mâle en 1846, extension de ce titre de baron à toute la descendance en 1871, adjonction du nom &#039;&#039;&amp;quot;de Winnezeele&amp;quot;&#039;&#039; en 1887.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Armes de Vinck.png|60px|alt=Armes de Vinck]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vinçotte&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créé barons en 1921, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vingne (de le)&amp;lt;ref name=&amp;quot;EPN1982_V-Vin&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et concession de noblesse pour autant que de besoin en 1868, concession du titre de chevalier transmissible à la primogéniture mâle et augmentation d&#039;armoiries en 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Viron (de)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1983, première partie, Vi - Wh, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1983.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et du titre de baron transmissible à la primogéniture mâle en 1822&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Cette reconnaissance de noblesse se base sur une filiation rattachant erronément Jean-Bernard Viron (1764-1834) à Odot Viron, secrétaire de Charles Quint. Source: Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, recueil LXI de l&#039;Office généalogique et héraldique de Belgique, Bruxelles, 2008, {{p.|403}}.&amp;lt;/ref&amp;gt; et 1839, mention sur la {{1ère}} liste officielle des nobles. Extension du titre de baron pour toute la descendance en 1871&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;.&amp;lt;br/&amp;gt;Concession du titre de chevalier, transmissible à tous les descendants mâles en 1843 (branche éteinte).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Viron.png|60px|alt=Armes de Viron]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Visart de Bocarmé&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre de comte en 1753.&amp;lt;br/&amp;gt;Seigneurs de Bury et de Bocarmé, reconnaissance de noblesse et du titre de comte en 1816, membre du corps équestre du Hainaut, reconnaissance de noblesse et du titre de comte transmissible à la primogéniture mâle en 1822, mention sur la {{1ère}} liste officielle des nobles, concession du titre de comte transmissible à la primogéniture mâle en 1886 et 1888.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Visart de Bocarmé.png|60px|alt=Armes de Visart de Bocarmé]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot; |Vleeschauwer van Braekel (de)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de baron transmissible à la primogéniture mâle en 1956, susbstitution du nom &#039;&#039;&amp;quot;De Vleeschauwer&amp;quot;&#039;&#039; en &#039;&#039;&amp;quot;de Vleeschauwer&amp;quot;&#039;&#039; et adjonction du nom &#039;&#039;&amp;quot;van Braekel&amp;quot;&#039;&#039; en 1960.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vlerick&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1991, concession de noblesse héréditaire et du titre personnel de baron à M. Lucien Vlerick&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot; /&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Voghel (de)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de baron en 1975, conversion de ce titre en titre transmissible à la primogéniture mâle en 1977.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Voorde (Van de)&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1998, concession du titre de baron pour lui-même et tous ses descendants à M. Aloïs Van de Voorde&amp;lt;ref&amp;gt;Arrêté royal du 5 juillet 1998 publié au Moniteur belge du 17 juillet 1998.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Voorst tot Voorst (van)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation du titre de baron pour tous en 1820.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Van Voorst tot Voorst wapen.png|60px|alt=Armes de Van Voorst tot Voorst]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vrecken (van der)&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|{{refnec|Anoblissement pontificale par Pie VII sous le titre de comte palatin en 1814. Titre transmissible à la progéniture mâle.}}&amp;lt;br&amp;gt;Concession de noblesse en 1905.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Wappen Deersheim.png|60px|alt=blasonnement:&amp;quot;D&#039;or à trois crémaillères de sable.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Vyvere (van de)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de vicomte transmissible à la primogéniture mâle en 1931.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== W ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Waepenaert (de)&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation de noblesse avec anoblissement pour autant que de besoin et de chevalerie héréditaire du Saint-Empire le 18 mars 1720.&lt;br /&gt;
Reconaissance de noblesse avec le titre de chevalier transmissible à la primogéniture en 1816 (éteint).&amp;lt;br&amp;gt; Reconnaissance de noblesse avec le titre de baron transmissible à la primogéniture en 1818 (éteint).&amp;lt;br&amp;gt; Reconaissance de noblesse avec le titre de chevalier transmissible à la primogéniture en 1978 (éteint).&amp;lt;br&amp;gt;Reconaissance de noblesse en 1978.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille de Waepenaert.png|60px|alt=Armes de Wapenaert]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Waha de Baillonville (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Possession immémoriale du titre de baron attestée par les Échevins de Liège et le Roy et Héraut d&#039;Armes J.G. Le Fort, admission à l&#039;État noble de Namur en 1679.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre de baron pour tous en 1816, membre du corps équestre du Limbourg, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Waha de Baillonville.png|60px|alt=Armes de Waha de Baillonville]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Wahis&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1901, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Walle (van de)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Walle de Ghelcke (van de)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|chevalier&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de chevalier transmissible à la primogéniture mâle en 1822, mention sur la {{1ère}} liste officielle des nobles.&amp;lt;br/&amp;gt;Une autre branche obtint concession de noblesse en 1871, adjonction du nom &#039;&#039;&amp;quot;de Ghelcke&amp;quot;&#039;&#039; par un rameau de cette branche.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille van de Walle.png|60px|alt=File:Armes de la famille van de Walle]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Walque (de)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1921 et 1982.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Walque.png|60px|alt=Armes de Walque]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Warnant&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1959, concession du titre personnel de baron en 1965 et 1970.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Wasseige (de)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1922, adjonction de la particule en 1928, 1929 et 1936.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Wasseige.png|60px|alt=Armes de Wasseige]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Wassenhove (van)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1928.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Watelet&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;EPN2001_XXX-p111_112&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse belge&#039;&#039;, Annuaire de 2001, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 2001, {{pp.|111 &amp;amp; 112}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire en 1993&amp;lt;ref group=&amp;quot;N&amp;quot;&amp;gt;Par arrêté royal du 16 juillet 1992, noblesse héréditaire à M.Pierre Watelet&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:4716-watelet-copie.png|60px|alt=Armes Watelet]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Waterschoot (Van)&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|En 1991, concession de noblesse héréditaire et du titre personnel de baron à M. John Van Waterschoot&amp;lt;ref name=&amp;quot;AR 1991-07-18&amp;quot; /&amp;gt;. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Waucquez&amp;lt;ref name=&amp;quot;CM2012&amp;quot;/&amp;gt;{{,}}&amp;lt;ref&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille Waucquez&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1991.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement:]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Wauters de Besterfeld&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Confirmation et concession de noblesse pour autant que de besoin en 1783.&amp;lt;br/&amp;gt;Ajdonction du nom &#039;&#039;&amp;quot;de Besterfeld&amp;quot;&#039;&#039; en 1856, reconnaissance de noblesse en 1857.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Wauters de Besterfeld.png|60px|alt=File:Armoiries de la famille Wauters de Besterfeld]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Wautier (de)&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;ANB1992_Wautier&amp;quot;&amp;gt;Paul Janssens &amp;amp; Luc Duerlo, &#039;&#039;Notice sur la famille de Wautier&#039;&#039;, dans l’&#039;&#039;Armorial de la noblesse belge&#039;&#039;, Bruxelles, 1992.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1823&amp;lt;ref name=&amp;quot;ANB1992_Wautier&amp;quot;/&amp;gt;.&amp;lt;br&amp;gt;Reconnaissance de noblesse et nomination comme membre du corps équestre de Luxembourg en 1827. Mention sur la {{4e|liste}} officielle des nobles&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Wautier.png|60px|alt=File:Armoiries de la famille de Wautier]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Wellesley&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;&amp;gt;Oscar Coomans de Brachène, &#039;&#039;État présent de la noblesse Belge&#039;&#039;, Annuaire de 1983, seconde partie, Wi - Zu, Collection &amp;quot;ETAT PRESENT&amp;quot; a. s. b. l., 1983.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|prince&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Baron de Mornington (pairie d&#039;Irlande) en 1746, comte de Mornington et vicomte de Wellesley (pairie d&#039;Irlande) en 1760, vicomte de Wellington de Talavera et de Wellington (Somerset) en 1809, baron Douro (pairie du Royaume-Uni) en 1809, comte de Vimeiro (Portugal) en 1811, marquis de Torres Vedras (Portugal) en 1811, comte de Wellington en 1812, duc de Ciudad Rodrigo et Grand d&#039;Espagne de {{1ère}} classe en 1812, marquis de Wellington (pairie du Royaume-Uni) en 1812, duc de Vitoria (Portugal) en 1812, duc de Wellington et marquis de Douro (Grande-Bretagne) en 1814, comte de Mornington en 1863, grand écuyer de la Maison de la Reine.&amp;lt;br/&amp;gt;Admission dans la noblesse des Pays-Bas et concession du titre de prince de Waterloo avec la qualification d&#039;Altesse Sérénissime transmissible par ordre de primogéniture masculine en 1815, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Coat of Arms of the Duke of Wellington.png|60px|alt=Coat of Arms of the Duke of Wellington]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Werve de Vorsselaar (van de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Werve de Schilde (van de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Werve d&#039;Immerseel (van de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Vi-Wh&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|comte&amp;lt;br/&amp;gt;vicomte&amp;lt;br/&amp;gt;baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre personnel de chevalier en 1514 et 1597, concession du titre de baron de Lichtaert et Rielen en 1767, concession du titre de comte de Vorsselaer en 1768.&amp;lt;br/&amp;gt;Ligne &#039;&#039;&#039;van de Werve de Vorsselaer&#039;&#039;&#039; : Reconnaissance de noblesse en 1816, membre du corps équestre de la province d&#039;Anvers, reconnaissance de noblesse et du titre de comte transmissible à la primogéniture mâle en 1877, adjonction du nom &#039;&#039;&amp;quot;de Vorsselaer&amp;quot;&#039;&#039; en 1911.&amp;lt;br/&amp;gt;Ligne &#039;&#039;&#039;van de Werve de Schilde&#039;&#039;&#039; : Reconnaissance de noblesse en 1881, adjonction du nom &#039;&#039;&amp;quot;de Schilde&amp;quot;&#039;&#039; en 1931, concession du titre de baron transmissible à la primogéniture mâle en 1933.&amp;lt;br/&amp;gt;Ligne &#039;&#039;&#039;van de Werve d&#039;Immerseel&#039;&#039;&#039; : Reconnaissance de noblesse en 1881, adjonction du nom &#039;&#039;&amp;quot;d&#039;Immerseel&amp;quot;&#039;&#039; en 1931, concession du titre de vicomte transmissible à la primogéniture mâle en 1934.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason famille Van de Werve.png|60px|alt=Armes van de Werve]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Wigny&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés barons en 1972, titre transmissible à la primogéniture mâle.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in azuur, een pijnappel vergezeld van tien sterren, rond zoomsgewijze geplaatst, alles van goud, en een schildhoofd opgenaaid van sabel, beladen met drie leeuwen van goud, geklauwd en getongd van keel.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Wilde d&#039;Estmael (de)&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;{{,}}&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1922, adjonction du nom &#039;&#039;d&#039;Estmael&#039;&#039; en 1949.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Wilde d&#039;Estmael.png|60px|alt=Armes de Wilde]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Witte (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Augmentation d&#039;armoiries en 1686 (couronne à la place du bourrelet) par le roi Charles II.&amp;lt;br/&amp;gt;1853 : reconnaissance de noblesse et réversion du titre de baron concédé à un oncle en 1823, titre transmissible à la primogéniture mâle, concession du titre de baron transmissible à la primogéniture mâle en 1893. &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes des barons de Witte.png|60px|alt=Armes des barons de Witte]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Witte  de Haelen (de)&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1858, concession du titre de baron transmissible à la primogéniture mâle en 1921, adjonction du nom &#039;&#039;&amp;quot;de Haelen&amp;quot;&#039;&#039; en 1928.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van sabel, met een keper van goud, vergezeld van drie otellen van zilver.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Wittouck&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Noblesse personnelle pour Guillaume Wittouck (1749-1829) en tant que conseiller au Conseil souverain de Brabant&amp;lt;ref&amp;gt;Léon Arendt, directeur général au ministère des Affaires étrangères et Alfred De Ridder, chef de bureau au même ministère, &#039;&#039;Législation héraldique de la Belgique, 1595-1895. Jurisprudence du conseil héraldique, 1844-1895&#039;&#039;, Bruxelles : Société belge de librairie, 1896, {{p.|400}} : {{citation|La charge de conseiller au conseil souverain de Brabant donnait la noblesse personnelle}}.&amp;lt;/ref&amp;gt;, anoblissement en 1960.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille Wittouck.png|60px|alt=File:Armes de la famille Wittouck]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Woelmont (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Admission à l&#039;État Noble de Namru en 1699, 1705 et 1733.&amp;lt;br/&amp;gt;Reconnaissance de noblesse et du titre personnel de baron en 1816, membre du corps équestre de Namur, reconnaissance du titre de baron pour tous en 1826, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Woelmont.png|60px|alt=File:Armoiries de la famille de Woelmont]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Woeste&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre personnel de comte en 1914.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in rood, een gouden breedarmig kruis, gekantonneerd van vier zilveren schuingeplaatste klophamers.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Woitrin&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse héréditaire et du titre personnel de baron en 1984.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in azuur, een portiek van zilver, een schildhoofd van hetzelfde, beladen met een open bijbel van natuurlijke kleur, begeleid van twee leliebloemen van azuur.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Wolters&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse en 1847, concession du titre personnel de baron en 1967, concession du titre de baron transmissible à la primogéniture mâle en 1971.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille Wolters.png|60px|alt=File:Armoiries de la famille Wolters]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Woot de Trixhe (de)&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;Woot de Trixhe de Jannée (de)&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession de noblesse et du titre de baron transmissible à la primogéniture mâle en 1847, concession du titre de baron transmissible à la primogéniture mâle pour une branche cadette et adjonction du nom &#039;&#039;&amp;quot;de Jannée&amp;quot;&#039;&#039; par cette même branche.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Woot de Trixhe.png|60px|alt=Armes de Woot de Trixhe]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Woronoff&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Admission dans la noblesse belge en 1968.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;in zilver, een raaf van sabel, staande op een boomstronk van natuurlijke kleur, uitgaande van de punt, het schildhoofd van keel, beladen met een recht[e] en omgekeerd[e] sabel en Mercuriusstaf, beide van goud, schuingekruist.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Wouters d&#039;Oplinter (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Wouters de Bouchout (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br /&amp;gt;chevalier&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Concession du titre héréditaire de chevalier par l&#039;Empereur François II en 1792.&amp;lt;br/&amp;gt;Seigneurs d&#039;Oplinter, Bouchout et Vroenhoven, reconnaissance de noblesse et du titre de chevalier transmissible à toute la descendance masculine avec octroi de la particule en 1820, membre de l&#039;ordre équestre du Brabant méridional, mention sur la {{1ère}} liste officielle des nobles, concession du titre de baron transmissible à la primogéniture mâle en 1933 et 1967.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de Wouters Seigneurs d&#039;Oplinter, Bouchout et Vroenhoven.png|60px|alt=Armes de Wouters]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Wykerslooth de Rooyesteyn (de)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1816, membre du corps équestre de la province d&#039;Utrecht, concession du titre de baron transmissible à la primogéniture mâle en 1817, mention sur la {{1ère}} liste officielle des nobles, extension de ce titre de baron pour toute la descendance et augmentation d&#039;armoiries en 1963.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armoiries de la famille de Wykerslooth de Rooyesteyn.png|60px|alt=File:Armoiries de la famille de Wykerslooth de Rooyesteyn]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== Y ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Ysebrant de Lendonck&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse en 1824 par le roi Guillaume {{Ier}}&amp;lt;ref&amp;gt;Paul Janssens et Luc Duerloo, &#039;&#039;Armorial de la noblesse belge du {{s mini-|XV|e}} au {{s mini-|XX|e}} siècle&#039;&#039;, Bruxelles, 1992, 4 vol. [https://www.academia.edu/307411/Wapenboek_van_de_Belgische_adel_van_de_15de_tot_de_20ste_eeuw Lire en ligne].&amp;lt;/ref&amp;gt;.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van goud, beladen met eenen klimmenden bever in deszelfs natuurlijke kleur.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Ypersele de Strihou (van)&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1888, adjonction du nom &#039;&#039;&amp;quot;de Strihou&amp;quot;&#039;&#039; en 1896, concession du titre de baron transmissible à la primogéniture mâle en 1964 et 1970.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Fichier:Van Ypersele de Strihou.png|60px|alt=Armes de la famille de Strihou]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Yve (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Yve de Bavay (d&#039;)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|marquis&amp;lt;br/&amp;gt;comte&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Famille qui remonte à Jean d&#039;Yve (1265-1323), dont le petit-fils Antoine d&#039;Yve, seigneur de Rametz près de Bavay, marié à Marie de Proissy vivait en 1325&amp;lt;ref&amp;gt;[https://books.google.fr/books?id=yIRCAAAAcAAJ&amp;amp;pg=PA2175&amp;amp;dq=%22Antoine+d&#039;Yve%22&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ved=0CCgQ6AEwAmoVChMIxbyuuYiMyQIVRNxjCh0RbQq7#v=onepage&amp;amp;q=%22Antoine%20d&#039;Yve%22&amp;amp;f=false Jean-Charles-Joseph De Vegiano, Jacques-Salomon-François-Joseph-Léon de Herckenrode, &#039;&#039;Nobiliaire des Pays-Bas et du Comté de Bourgogne: 1870&#039;&#039;, page 2175.]&amp;lt;/ref&amp;gt;. Baron par le roi Philippe IV en 1662, marquis d&#039;Yve en 1668&amp;lt;ref&amp;gt;&amp;gt;[https://books.google.fr/books?id=UHJWAAAAcAAJ&amp;amp;pg=RA1-PA319&amp;amp;dq=%22marquis+d&#039;Yve%22&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ved=0CFMQ6AEwCWoVChMIwaOFkImMyQIVUsBjCh1bBAgz#v=onepage&amp;amp;q=%22marquis%20d&#039;Yve%22&amp;amp;f=false&#039;&#039; Annuaire de la noblesse de Belgique&#039;&#039;, Volume 17, 1863, page 319.]&amp;lt;/ref&amp;gt;. &amp;lt;br/&amp;gt;Reconnaissance de noblesse en 1816, désignation comme membre du corps équestre du Hainaut avec le titre de comte, concession du titre de marquis transmissible à la primogéniture mâle et du titre de comte pour tous les autres descendants en 1822, mention sur la {{1ère}} liste officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes d&#039;Yve.png|60px|alt=Armes d&#039;Yve]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{sommaire compact}}&lt;br /&gt;
&lt;br /&gt;
=== Z ===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;20%&amp;quot;|Nom&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Titre(s)&amp;lt;ref group=&amp;quot;N&amp;quot; name=&amp;quot;titre&amp;quot;/&amp;gt;&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;58%&amp;quot;|Remarques&lt;br /&gt;
! bgcolor=&amp;quot;silver&amp;quot; ! width=&amp;quot;6%&amp;quot;|Armes&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Zeeland (van)&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|vicomte&amp;lt;br/&amp;gt;baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis avec le titre de vicomte transmissible à la primogéniture mâle en 1963, baron pour tous les autres membres en 1972.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;doorsneden van zilver en van goud, met een dwarsbalk van keel, gaande over de verdeling.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Zurstrassen&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis et créés baron en 1955, titre transmissible à la primogéniture mâle.&amp;lt;br/&amp;gt;Une seconde branche fut anoblie en 1957.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Blason à dessiner.png|60px|alt=blasonnement (nl): &amp;quot;van zilver, met drie rozen van keel, met stengels en bladeren van sinopel, een en twee geplaatst, uitgaande van een hart van keel.&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|Zuylen (van)&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&amp;lt;br/&amp;gt;écuyer&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Anoblis en 1905, concession du titre de baron transmissible à la primogéniture mâle en 1920, 1922 et 1940.&amp;lt;br/&amp;gt;Une seconde ligne obtint concession de noblesse en 1953 et augmentation d&#039;armoiries en 1970 et 1976 (couronne sur le heaume).&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille van Zuylen.png|60px|alt=File:Armes de la famille van Zuylen]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;left&amp;quot;|&#039;&#039;&#039;Zuylen van Nyevelt van den Haar (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&#039;&#039;&#039;Zuylen van Nyevelt (van)&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;EPN1983_Wi-Zu&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|baron&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Reconnaissance de noblesse et concession du titre de baron en 1816, président du corps équestre de la Flandre occidentale, inscription sur la {{1ère}} liste officielle des nobles avec mention que le titre de baron sera transmis à toute la descendance.&amp;lt;br/&amp;gt;Une seconde ligne non éteinte obtint reconnaissance de noblesse et concession du titre de baron pour tous en 1827, mention sur la {{4e|liste}} officielle des nobles.&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[File:Armes de la famille van Zuylen van Nyevelt.png|60px|alt=File:Armes de la famille van Zuylen van Nyevelt]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bibliographie ==&lt;br /&gt;
* &#039;&#039;Listes des titres de noblesse, chevalerie et autres marques d&#039;honneur accordées par les souverains des Pays-Bas, depuis 1659 jusqu&#039;à 1794&#039;&#039;, Bruxelles, 1847 [https://books.google.be/books?id=D7RXAAAAcAAJ&amp;amp;printsec=frontcover&amp;amp;hl=fr#v=onepage&amp;amp;q&amp;amp;f=false , lire en ligne].&lt;br /&gt;
* Paul Janssens, &#039;&#039;De la noblesse médiévale à la noblesse moderne, La création dans les anciens Pays-Bas d’une noblesse dynastique ({{XVe}} - début {{XVIIe}} siècle)&#039;&#039;, [https://www.bmgn-lchr.nl/index.php/bmgn/article/viewFile/URN%3ANBN%3ANL%3AUI%3A10-1-107853/6938 lire en ligne].&lt;br /&gt;
&lt;br /&gt;
== Notes et références ==&lt;br /&gt;
=== Notes ===&lt;br /&gt;
{{Références nombreuses |groupe=&amp;quot;N&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Références ===&lt;br /&gt;
{{Références nombreuses |colonnes=1 |références=&lt;br /&gt;
&amp;lt;ref name=&amp;quot;ANB_PJLD&amp;quot;&amp;gt;{{ouvrage |auteur1=Paul Janssens |auteur2=Luc Duerloo |titre=Armorial de la noblesse belge |année=1992 |lire en ligne=http://www.academia.edu/307411/Wapenboek_van_de_Belgische_adel_van_de_15de_tot_de_20ste_eeuw}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Coomans et al. 2003&amp;quot;&amp;gt;{{Ouvrage |langue= |auteur1=Oscar Coomans de Brachène |nom2=Georges de Hemptinne |nom3=Comte Humbert de Marnix de Sainte Aldegonde |titre=État présent de la noblesse belge |sous-titre=première partie |lieu=Bruxelles |éditeur=Collection &amp;quot;État présent&amp;quot; a.s.b.l. |année=2003 |pages totales=|isbn=|lire en ligne=}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;EPN1971_A-Ber&amp;quot;&amp;gt;{{Ouvrage |langue= |auteur1=Oscar Coomans de Brachène |nom2=Georges de Hemptinne |titre=État présent de la noblesse Belge |sous-titre=Annuaire de 1971, première partie, A - Bet |collection=Collection &amp;quot;État présent&amp;quot; a.s.b.l. |année=1971}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;CM2012&amp;quot;&amp;gt;&#039;&#039;Carnet Mondain 2012&#039;&#039;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;AFB2008&amp;quot;&amp;gt;Jean-François Houtart, &#039;&#039;Anciennes familles de Belgique&#039;&#039;, Recueil LXI de l&#039;Association royale office généalogique et héraldique de Belgique, Bruxelles, 2008.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;EPN1996_P-Pes&amp;quot;&amp;gt;{{Ouvrage |langue= |auteur1=Oscar Coomans de Brachène |nom2=Georges de Hemptinne |titre=État présent de la noblesse Belge |sous-titre=Annuaire de 1996, P - Pes |éditeur=Collection &amp;quot;État présent&amp;quot; a.s.b.l. |année=1996}}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Blaise_d%27Ostende-%C3%A0-Arlon&amp;diff=1014</id>
		<title>Blaise d&#039;Ostende-à-Arlon</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Blaise_d%27Ostende-%C3%A0-Arlon&amp;diff=1014"/>
		<updated>2026-09-06T19:27:13Z</updated>

		<summary type="html">&lt;p&gt;Apn : +BOA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Page en processus de suppression [https://fr.wikipedia.org/wiki/Discussion:Blaise_d&#039;Ostende-%C3%A0-Arlon/Admissibilit%C3%A9]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Blaise d&#039;Ostende-à-Arlon&#039;&#039;&#039; est un pseudonyme collectif utilisé par plusieurs généalogistes belges, auteurs de deux ouvrages généalogiques publiés en trois volumes. Leurs publications sont relatives à la noblesse belge et à certaines familles belges d&#039;apparence noble.   &lt;br /&gt;
&lt;br /&gt;
Bien que discutés, ces travaux, largement présents dans les bibliothèques spécialisées, ont exercé, aussi pour leur liberté de ton et leur pénétration analytique, une influence durable sur l&#039;approche critique de la noblesse belge ainsi que sur la littérature généalogique en général, et continuent d&#039;être cités avec discernement.&lt;br /&gt;
&lt;br /&gt;
== Les auteurs présumés et leurs travaux ==&lt;br /&gt;
&#039;&#039;&#039;Blaise d&#039;Ostende-à-Arlon&#039;&#039;&#039;, pseudonyme collectif de généalogistes belges&amp;lt;ref&amp;gt;Dans ce cas, plusieurs coauteurs signent ensemble sous un [[pseudonyme]] unique.&amp;lt;/ref&amp;gt; qui étaient, selon certaines sources&amp;lt;ref&amp;gt;Éric Meuwissen, &#039;&#039;Argenteuil, Le domaine « des » Rois&#039;&#039; {{p.|75}}. [http://www.ericmeuwissen.be/wp-content/uploads/2015/02/argenteuil-book.pdf Lire en ligne].&amp;lt;/ref&amp;gt;{{,}}&amp;lt;ref&amp;gt;Voir Van de Put, dans &#039;&#039;Le Parchemin&#039;&#039;, 1982, pages 418 et 419. Voir aussi : [http://www.antiqbook.be/boox/sir/48.shtml AntiQbook].&amp;lt;/ref&amp;gt;, Willy van Hille&amp;lt;ref&amp;gt;in [[Tablettes des Flandres]] : voir [http://genescan.free.fr/tdf/r04/thumb.html Histoire de la famille van Hille].&amp;lt;/ref&amp;gt; ([[1904]]-[[1993]]), Octave le Maire ([[1894]]- Bruxelles, 17 septembre 1970) et [[Frédéric Collon]] ([[1892]]-[[1983]]). Les ouvrages de ces généalogistes furent très remarqués lors de leur parution.&lt;br /&gt;
&lt;br /&gt;
Les études &#039;&#039;Noblesse belge d&#039;aujourd&#039;hui&#039;&#039;, parue en 1967, et &#039;&#039;Noblesse belge d&#039;apparence&#039;&#039;, parue en 1968, qui sont de sa main, et toutes publiées par les [[Cahiers nobles]], furent très diversement appréciées et également très critiquées, mais continuent d&#039;être consultées avec un intérêt soutenu.&lt;br /&gt;
&lt;br /&gt;
== Les thèses exposées dans la préface ==&lt;br /&gt;
Hors de toute polémique, les critiques juridiques fondamentales adressées dans son ouvrage en 1967 par Blaise d&#039;Ostende-à-Arlon au régime nobiliaire belge peuvent être ramenées à cinq grandes thèses. Pour lui, si la noblesse historique peut se justifier par le droit acquis et l&#039;Histoire, la noblesse créée après 1830 souffre en revanche d&#039;un déficit de fondement constitutionnel, d&#039;une grande incohérence juridique et d&#039;un arbitraire administratif excessif. &lt;br /&gt;
&lt;br /&gt;
=== 1. Une contradiction constitutionnelle originelle ===&lt;br /&gt;
Selon Blaise, l&#039;article 75 de la [[Constitution de la Belgique|Constitution]] (aujourd&#039;hui, l&#039;actuel article 113) &#039;&#039;&amp;quot;Le Roi a le droit de conférer des titres de [[Noblesse belge|noblesse]], sans jamais y attacher aucun privilège&amp;quot;&#039;&#039; est contradictoire, car pour Blaise, attribuer un titre nobiliaire constitue déjà un privilège, puisque cela place certains citoyens dans une catégorie socialement privilégiée et juridiquement protégée (notamment par la répression du port abusif de titres). La distinction entre &#039;&#039;titre&#039;&#039; et &#039;&#039;privilège&#039;&#039; lui paraît donc artificielle. Autrement dit, soit le titre n&#039;a aucune portée réelle et il est inutile, soit il procure un avantage social et il devient un privilège déguisé.&lt;br /&gt;
&lt;br /&gt;
=== 2. L&#039;illégalité présumée des titres héréditaires ===&lt;br /&gt;
C&#039;est son argument juridique le plus original. Il rappelle qu&#039;en 1848 le juriste Eugène Verhaegen soutenait que la Constitution autorisait uniquement des distinctions personnelles et non héréditaires. Selon cette thèse, transmettre la noblesse aux descendants constitue déjà un privilège prohibé par la constitution. L&#039;auteur ne tranche pas formellement mais il se montre très favorable à cette interprétation. Son raisonnement est simple : un titre viager récompense une personne alors qu&#039;un titre héréditaire avantage des descendants qui n&#039;ont rien fait pour le mériter. &lt;br /&gt;
&lt;br /&gt;
=== 3. Une incohérence fondamentale entre Révolution et reconnaissance nobiliaire ===&lt;br /&gt;
L&#039;argument revient tout au long de la préface. Blaise rappelle que les lois révolutionnaires françaises de 1795 [[Noblesse française|abolissant la noblesse]] dans les anciens [[Pays-Bas autrichiens]] n&#039;auraient jamais été expressément abrogées en Belgique. D&#039;où sa question : &#039;&#039;Comment le Roi peut-il &amp;quot;reconnaître&amp;quot; une noblesse ancienne qui, juridiquement, a été supprimée ?&#039;&#039; Selon Blaise, lorsque le Roi reconnaît aujourd&#039;hui une famille comme noble, soit il recrée une noblesse supprimée, soit il accorde en réalité une nouvelle concession sous un autre nom. Dans les deux cas, le système manque de cohérence juridique.&lt;br /&gt;
&lt;br /&gt;
=== 4. L&#039;usurpation de compétence par le Conseil héraldique ===&lt;br /&gt;
C&#039;est sans doute sa critique institutionnelle la plus sévère. Selon les textes de l&#039;époque, le Conseil héraldique, aujourd&#039;hui nommé le [[Conseil de noblesse]], devrait seulement donner un avis en certains matières, vérifier les armoiries, et intervenir après la décision royale.  Or, selon Blaise, la pratique est devenue toute autre puisque le Conseil filtre les candidatures, le Roi suit presque toujours ses avis, et le pouvoir réel de sélection serait ainsi passé du Roi au Conseil héraldique. Il parle explicitement d&#039;un organe qui a &#039;&#039;usurpé&#039;&#039; une partie du pouvoir réservé constitutionnellement au Roi. Dès lors, cette critique vise moins la noblesse elle-même que le transfert d&#039;un pouvoir discrétionnaire vers une administration non élue qui serait à la fois, pour certains, un organe administratif ayant des pouvoirs législatif, administratif et judiciaire. &lt;br /&gt;
&lt;br /&gt;
Pour Blaise, la question de la noblesse est fondamentalement une question d&#039;état civil et donc, en définitive, de compétence judiciaire, non du Conseil héraldique ou de l&#039;actuel Conseil de noblesse. Il rappelle un arrêt de la Cour d&#039;appel de Liège du 9 mai 1878 qui aurait admis que les nobles anciens n&#039;avaient pas besoin d&#039;une reconnaissance royale pour porter leurs titres et que la question relevait des tribunaux. Il cite également les débats parlementaires de 1867 dans lesquels [[Jules d&#039;Anethan]] soutenait qu&#039;en cas de refus du gouvernement, les tribunaux pouvaient reconnaître ce droit. Le juge ne créerait pas une noblesse nouvelle, il constaterait un état préexistant.&lt;br /&gt;
&lt;br /&gt;
=== 5. Une insécurité juridique et un arbitraire incompatibles avec l&#039;Etat de droit ===&lt;br /&gt;
C&#039;est finalement son reproche principal. Il estime qu&#039;il n&#039;existe pas de critères objectifs permettant de comprendre pourquoi certaines personnalités sont anoblies, pourquoi d&#039;autres sont refusées, et pourquoi certaines familles obtiennent une reconnaissance et d&#039;autres non. Il évoque pour cela les coteries, les influences, la fortune, les intentions personnelles, et des considérations politiques. Il suggère ainsi que la noblesse belge moderne fonctionne moins selon des règles de droit que selon des mécanismes de faveurs assez opaques.&lt;br /&gt;
&lt;br /&gt;
== Appréciations critiques ==&lt;br /&gt;
Ainsi que l’écrit le généalogiste [[Hervé Douxchamps]] en 1997, trente ans après la parution de l&#039;ouvrage, dans [[Le Parchemin]], organe de l&#039;[[Office généalogique et héraldique de Belgique]], dans son introduction aux &#039;&#039;« Quarante familles belges les plus anciennes subsistantes »&#039;&#039;&amp;lt;ref&amp;gt;[[Hervé Douxchamps]], &#039;&#039;Les quarante familles belges les plus anciennes subsistantes&#039;&#039;, dans &#039;&#039;[[Le Parchemin]]&#039;&#039;, 1997, page 58.&amp;lt;/ref&amp;gt;, au sujet de &#039;&#039;Noblesse belge d&#039;aujourd&#039;hui&#039;&#039;, œuvre de Blaise : &#039;&#039;Pamphlet se permettant, sous le voile de l’anonymat, des impertinences qu’un historien ne peut se permettre, mais c’est la loi du genre. À part cela, Blaise assène parfois certaines vérités dignes d’être prises en considération, tout en se montrant curieusement ignare dans d’autres cas. Semble mieux au fait des familles du Nord que de celles du Sud du pays. Bien qu’il soit de bon ton, dans les milieux généalogiques sérieux, de s’abstenir de citer ce genre de littérature, nous nous permettrons d’y recourir avec discernement pour l’une ou l’autre famille.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;auteur de la recension, resté anonyme, de l&#039;ouvrage sur la &#039;&#039;Noblesse belge d&#039;aujourd&#039;hui&#039;&#039;, dans &#039;&#039;L&#039;Intermédiaire des Généalogistes&#039;&#039; - publication du  [[Service de centralisation des études généalogiques et démographiques de Belgique|SCGD]]&amp;lt;ref&amp;gt;Le [[Service de centralisation des études généalogiques et démographiques de Belgique]], en abrégé SCGD, publie trimestriellement le bulletin &#039;&#039;L&#039;Intermédiaire des généalogistes&#039;&#039;.&amp;lt;/ref&amp;gt; - de 1968, écrit, lui, que &#039;&#039;L&#039;auteur (ou les auteurs) est anonyme, il est en effet sceptique et bien informé, parfois mal intentionné&#039;&#039; (...) &#039;&#039; La préface est un travail remarquable&#039;&#039; (...). Cette préface, particulièrement développée, se présente - même si l&#039;auteur s&#039;en défend dans son dernier volume - comme une véritable étude du droit nobiliaire belge et se distingue par plusieurs thèses aussi originales qu&#039;iconoclastes.  &lt;br /&gt;
&lt;br /&gt;
Pour la &#039;&#039;Noblesse belge d&#039;apparence&#039;&#039;, paru en 1969, le recenseur X. D. (l&#039;historien Xavier Duquesne) écrit, en appréciation finale, que (...) &#039;&#039; le livre est précieux au même titre qu&#039;un recueil de crayons généalogiques sans références&#039;&#039; (...). &#039;&#039;Au reste, une prose spirituelle, incisive et rapide, mais aussi souvent dénigrante et persiflante&#039;&#039; (...).&lt;br /&gt;
&lt;br /&gt;
M.M. (Michiel Mispelon, le rédacteur en chef de la revue), dans le &#039;&#039;Vlaamse Stam&#039;&#039;&amp;lt;ref&amp;gt;Le bulletin &#039;&#039;Vlaamse Stam&#039;&#039; est l&#039;organe périodique (trimestriel aujourd&#039;hui) de l&#039;association de généalogie flamande &#039;&#039;Vlaamse Vereniging voor Familiekunde&#039;&#039; (VVF, fondée en 1964), aujourd&#039;hui &#039;&#039;Familiekunde Vlaanderen&#039;&#039;.&amp;lt;/ref&amp;gt; de 1968, écrit notamment que &#039;&#039;(traduction)&#039;&#039; : (...) &#039;&#039;Cet ouvrage plaira à certains, car on en dit du bien ; il en décevra d&#039;autres car il met fin à de charmantes légendes familiales et met les points sur le(s) &amp;quot;i&amp;quot; avec des précisions généalogiques, ce qui n&#039;est pas toujours apprécié. Il n&#039;est en aucun cas dépourvu d&#039;humour et, dans certains cas, il risque de paraître un peu dur.&#039;&#039; (...) &#039;&#039;Que cela fasse sourire ou agace, le fait est que le contenu donne à réfléchir. Le(s) auteur(s) souligne(nt) le rôle important qu&#039;a joué notre noblesse et pose(nt) la question suivante : est-il bon qu&#039;il existe une &amp;quot;nouvelle&amp;quot; noblesse ou une classe privilégiée en nos temps démocratiques ?&#039;&#039; (...).&lt;br /&gt;
&lt;br /&gt;
L&#039;annotateur anonyme, dans le &#039;&#039;Vlaamse Stam&#039;&#039; de 1969, sur la &#039;&#039;Noblesse belge d&#039;apparence&#039;&#039; écrit &#039;&#039;(traduction)&#039;&#039; : &#039;&#039; Certaines légendes familiales sur leurs origines sont ici démolies, critiquées à juste titre, ou rectifiées. Pour ceux qui en font les frais, ce n&#039;est certainement pas agréable.&#039;&#039; (...).&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
=== Bibliographie ===&lt;br /&gt;
* XXX, &#039;&#039;Noblesse belge d&#039;aujourd&#039;hui, par Blaise d&#039;Ostende-à Arlon&#039;&#039;. Paris, dans &#039;&#039;L&#039;Intermédiaire des Généalogistes&#039;&#039;, du [[Service de centralisation des études généalogiques et démographiques de Belgique]], n° 133, 1968/1, pp. 37 et 38. &lt;br /&gt;
* X. D. (Xavier Duquesne), &#039;&#039;Noblesse belge d&#039;apparence&#039;&#039;, dans &#039;&#039;L&#039;Intermédiaire des Généalogistes&#039;&#039;, n° 141, 1969/3, p. 224. &lt;br /&gt;
* M.M. (Michiel Mispelon), &#039;&#039;Blaise d&#039;Ostende-à-Arlon, Noblesse belge d&#039;aujourd&#039;hui&#039;&#039;, dans &#039;&#039;Vlaamse Stam&#039;&#039;, {{IV}}, 1968, n° 1, pp. 9 et 10 (pages jaunes).&lt;br /&gt;
* X., &#039;&#039;Blaise d&#039;Ostende-à Arlon, Noblesse belge d&#039;apparence&#039;&#039;, dans &#039;&#039;Vlaamse Stam&#039;&#039;, {{V}}, 1969, n° 3 , p.43 (pages jaunes).&lt;br /&gt;
* &#039;&#039;Bibliographie de l&#039;histoire de Belgique&#039;&#039;, dans la &#039;&#039;Revue belge de Philologie et d&#039;Histoire&#039;&#039;, 1968, 46 - 4, pp. 1252-1346, Travaux généraux, n° 10246, Blaise d&#039;Ostende-à Arlon, (pseud.). Noblesse belge d&#039;aujourd&#039;hui. {{I}}-{{II}}. Paris. Les [[Cahiers nobles]], 1967, 2 vol.&lt;br /&gt;
* &#039;&#039;Bibliographie de l&#039;histoire de Belgique&#039;&#039;, dans la &#039;&#039;Revue belge de Philologie et d&#039;Histoire&#039;&#039;, 1969, 47 - 4, pp. 1216-1309, n° 11633, Blaise d&#039;Ostende-à-Arlon (pseud.). &#039;&#039;Noblesse belge d&#039;apparence. Noblesse belge d&#039;aujourd&#039;hui&#039;&#039;, Paris, 1968.&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
* [[Cahiers nobles]]&amp;lt;ref&amp;gt;Lancée en 1954, sous la direction de Philippe du Puy de Clinchamps, la collection des &#039;&#039;Cahiers nobles&#039;&#039; rassembla, en trente-sept cahiers et vingt titres, quatorze auteurs sur la question nobiliaire.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* [[Philippe du Puy de Clinchamps]].&lt;br /&gt;
&lt;br /&gt;
== Notes et références ==&lt;br /&gt;
{{Références}} &lt;br /&gt;
&lt;br /&gt;
{{Portail|littérature francophone|généalogie}}&lt;br /&gt;
&lt;br /&gt;
{{CLEDETRI:Ostende-à-Arlon}}&lt;br /&gt;
[[Catégorie:Pseudonyme collectif]]&lt;br /&gt;
[[Catégorie:Pamphlétaire]]&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Pages_int%C3%A9ressantes_de_Wikip%C3%A9diA_supprim%C3%A9es_ou_alt%C3%A9r%C3%A9es&amp;diff=1013</id>
		<title>Pages intéressantes de WikipédiA supprimées ou altérées</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Pages_int%C3%A9ressantes_de_Wikip%C3%A9diA_supprim%C3%A9es_ou_alt%C3%A9r%C3%A9es&amp;diff=1013"/>
		<updated>2026-09-06T19:24:38Z</updated>

		<summary type="html">&lt;p&gt;Apn : +BOA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Blaise d&#039;Ostende-à-Arlon]]&lt;br /&gt;
* [[Famille de Copis]]&lt;br /&gt;
* [[Familles contemporaines de la noblesse belge]]&lt;br /&gt;
* [[Familles éteintes de la noblesse belge]]&lt;br /&gt;
* [[Maison de Bousies]]&lt;br /&gt;
* [[Famille Desmanet]]&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1012</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1012"/>
		<updated>2026-08-01T09:10:45Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Recurring issue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point for my setup ; I don&#039;t intend to structure it better, improve it nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = TempBottom|TempTop|SystemFlowTemp|^Status$|WaterHcFlowMax|ValveStarts|SHEMaxFlowTemp|PredSourcePressurePredCounter|PredWaterflowDevThreshold|PredWaterflowSwitchingP&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the application starts, it will fetch latest csv&#039;s &amp;amp; inc file from https://ebus.github.io/de/.&lt;br /&gt;
That&#039;s not ideal, let&#039;s depend only on local content:&lt;br /&gt;
&lt;br /&gt;
On your favorite endpoint:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://ebus.github.io/en/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/memory.csv&lt;br /&gt;
mkdir -p vaillant&lt;br /&gt;
cd vaillant&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/general.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/scan.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/08.bai.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/15.700.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/bai.0010006101.inc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add important missing VRC700 Humidity metric:&lt;br /&gt;
&amp;lt;pre&amp;gt;% diff -u 15.700.csv.20260328 15.700.csv &lt;br /&gt;
--- 15.700.csv.20260328	2026-02-01 17:09:58.000000000 +0100&lt;br /&gt;
+++ 15.700.csv	2026-03-28 21:29:44.000000000 +0100&lt;br /&gt;
@@ -33,6 +33,7 @@&lt;br /&gt;
 w,,,Time,time,,,b524,020100003500,value,,HTI,,,Aktuelle Uhrzeit&lt;br /&gt;
 r,,,HydraulicScheme,Systemschema,,,b524,020000003600,ign,,IGN:4,,,,value,,UIN,,,Systemschema&lt;br /&gt;
 w,,,HydraulicScheme,Systemschema,,,b524,020100003600,value,,UIN,,,Systemschema&lt;br /&gt;
+r,,,RoomHumidity,room humidity,,,b524,060009010700,ign,,IGN:4,,,,humidity,,EXP,,%,room humidity&lt;br /&gt;
 r,,,WaterPressure,water pressure,,,b524,020000003900,ign,,IGN:4,,,,value,,EXP,,bar,Wasserdruck&lt;br /&gt;
 r,,,SolarYieldTotal,total solar yield,,,b524,020000003d00,ign,,IGN:4,,,,value,,ULG,,kWh,Solarertrag gesamt&lt;br /&gt;
 w,,,SolarYieldTotal,total solar yield,,,b524,020100003d00,value,,ULG,,kWh,Solarertrag gesamt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload the definitions in the right container config directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
scp -P 22222 *.inc root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
cd ..&lt;br /&gt;
scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure eBUSd to use this configpath:&lt;br /&gt;
&amp;lt;pre&amp;gt;commandline_options:&lt;br /&gt;
  - &amp;quot;--mqttjson&amp;quot;&lt;br /&gt;
  - &amp;quot;--scanconfig&amp;quot;&lt;br /&gt;
  - &amp;quot;--log=all:error&amp;quot;&lt;br /&gt;
  - &amp;quot;--enabledefine&amp;quot;&lt;br /&gt;
  - &amp;quot;--configpath=/config/custom/&amp;quot;&lt;br /&gt;
network_device: ens:/dev/ttyACM0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TBC, copy the live container content to the general config:&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ pwd&lt;br /&gt;
/homeassistant/ebusd-configuration&lt;br /&gt;
[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ find .&lt;br /&gt;
.&lt;br /&gt;
./custom&lt;br /&gt;
./custom/vaillant&lt;br /&gt;
./custom/vaillant/bai.0010006101.inc&lt;br /&gt;
./custom/vaillant/08.bai.csv&lt;br /&gt;
./custom/vaillant/broadcast.csv&lt;br /&gt;
./custom/vaillant/15.700.csv&lt;br /&gt;
./custom/vaillant/scan.csv&lt;br /&gt;
./custom/vaillant/general.csv&lt;br /&gt;
./custom/memory.csv&lt;br /&gt;
./custom/broadcast.csv&lt;br /&gt;
./mqtt-hassio.cfg.2026032701&lt;br /&gt;
./mqtt-hassio.cfg&lt;br /&gt;
[core-ssh ebusd-configuration]$ &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 44&lt;br /&gt;
max symbol rate: 127&lt;br /&gt;
min arbitration micros: 3&lt;br /&gt;
max arbitration micros: 15&lt;br /&gt;
min symbol latency: 4&lt;br /&gt;
max symbol latency: 7&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 718&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 152&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl find -d -r&lt;br /&gt;
700 AdaptHeatCurve = no&lt;br /&gt;
700 DisplayedOutsideTemp = 6.375&lt;br /&gt;
700 Hc1ActualFlowTempDesired = 45.6435&lt;br /&gt;
700 Hc1AutoOffMode = night&lt;br /&gt;
700 Hc1ExcessTemp = 0.0&lt;br /&gt;
700 Hc1FlowTemp = 50&lt;br /&gt;
700 Hc1HeatCurve = 1.5&lt;br /&gt;
700 Hc1HeatCurveAdaption = 0.0&lt;br /&gt;
700 Hc1MaxFlowTempDesired = 90&lt;br /&gt;
700 Hc1MinFlowTempDesired = 15&lt;br /&gt;
700 Hc1PumpStatus = 1&lt;br /&gt;
700 Hc1RoomTempSwitchOn = thermostat&lt;br /&gt;
700 Hc1Status = 1&lt;br /&gt;
700 Hc1SummerTempLimit = 21&lt;br /&gt;
700 HcStorageTempBottom =  (empty for 3115b5240602000000a000 / 080000a000ffffff7f)&lt;br /&gt;
700 HcStorageTempTop =  (empty for 3115b52406020000009f00 / 0800009f00ffffff7f)&lt;br /&gt;
700 HolidayTemp = 10&lt;br /&gt;
700 HwcFlowTemp = 0.0&lt;br /&gt;
700 HwcMaxFlowTempDesired = 80&lt;br /&gt;
700 HwcOpMode = auto&lt;br /&gt;
700 HwcSFMode = auto&lt;br /&gt;
700 HwcStorageTemp = 23&lt;br /&gt;
700 HwcStorageTempBottom =  (empty for 3115b52406020000009e00 / 0800009e00ffffff7f)&lt;br /&gt;
700 HwcStorageTempTop =  (empty for 3115b52406020000009d00 / 0800009d00ffffff7f)&lt;br /&gt;
700 HwcTempDesired = 55&lt;br /&gt;
700 HwcTimer_Friday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Monday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Saturday = 07:00;07:50;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Sunday = 07:20;08:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Thursday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Tuesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Wednesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 MaxRoomHumidity = 40&lt;br /&gt;
700 OpMode = auto&lt;br /&gt;
700 OpModeCooling = auto&lt;br /&gt;
700 OpModeEffect = alle&lt;br /&gt;
700 OpModeVentilation = auto&lt;br /&gt;
700 OutsideTempAvg = 7.60156&lt;br /&gt;
700 PrEnergySum = 27&lt;br /&gt;
700 PrEnergySumHc = 27&lt;br /&gt;
700 PrEnergySumHcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHcThisMonth = 0&lt;br /&gt;
700 PrEnergySumHwc = 0&lt;br /&gt;
700 PrEnergySumHwcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHwcThisMonth = 0&lt;br /&gt;
700 RoomHumidity = 49&lt;br /&gt;
700 SFMode = auto&lt;br /&gt;
700 SolarYieldTotal = 0&lt;br /&gt;
700 SystemFlowTemp =  (empty for 3115b52406020000004b00 / 0800004b00ffffff7f)&lt;br /&gt;
700 WaterPressure = 2.1&lt;br /&gt;
700 YieldTotal = 0&lt;br /&gt;
700 Z1ActualRoomTempDesired = 19.5&lt;br /&gt;
700 Z1DayTemp = 19.5&lt;br /&gt;
700 Z1HolidayTemp = 10&lt;br /&gt;
700 Z1NightTemp = 15&lt;br /&gt;
700 Z1OpMode = auto&lt;br /&gt;
700 Z1OpModeCooling = auto&lt;br /&gt;
700 Z1QuickVetoTemp = 21&lt;br /&gt;
700 Z1RoomTemp = 19.5&lt;br /&gt;
700 Z1SFMode = auto&lt;br /&gt;
700 Z1Timer_Friday = 06:40;17:30;17:30;22:30;-:-;-:-&lt;br /&gt;
700 Z1Timer_Monday = 06:40;07:40;16:40;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Saturday = 07:30;22:30;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Sunday = 08:00;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Thursday = 06:40;07:40;15:10;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Tuesday = 06:40;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Wednesday = 06:40;22:00;22:00;22:00;-:-;-:-&lt;br /&gt;
700 Z1ValveStatus = 1&lt;br /&gt;
bai AATemp = 197.25;62379;cutoff&lt;br /&gt;
bai AITemp =  (ERR: invalid position for 3108b509030d3300 / 00)&lt;br /&gt;
bai CounterStartattempts1 = 7&lt;br /&gt;
bai CounterStartattempts2 = 1&lt;br /&gt;
bai CounterStartAttempts3 = 1&lt;br /&gt;
bai DateTime = valid;21:50:35;28.03.2026;8.375&lt;br /&gt;
bai DeactivationsTemplimiter = 0&lt;br /&gt;
bai DisplayMode = 129&lt;br /&gt;
bai ExhaustCurve = 0&lt;br /&gt;
bai ExhaustWayBlockCounter = 0&lt;br /&gt;
bai Expertlevel_ReturnTemp = -1.81;cutoff&lt;br /&gt;
bai ExternalFlowTempDesired = 90.00&lt;br /&gt;
bai ExtFlowTempDesiredMin = 45.50&lt;br /&gt;
bai FanHours = 32&lt;br /&gt;
bai FanStarts = 267&lt;br /&gt;
bai FlowTemp = 44.31;ok&lt;br /&gt;
bai FlowTempDesired = 45.50&lt;br /&gt;
bai HcHours = 26&lt;br /&gt;
bai HcPumpMode = permanent&lt;br /&gt;
bai HcPumpStarts = 211&lt;br /&gt;
bai HcStarts = 100&lt;br /&gt;
bai HcUnderHundredStarts = 94&lt;br /&gt;
bai HoursTillService = 3010&lt;br /&gt;
bai HwcHours = 5&lt;br /&gt;
bai HwcPostrunTime = 300&lt;br /&gt;
bai HwcStarts = 0&lt;br /&gt;
bai HwcTemp = -14.94;cutoff&lt;br /&gt;
bai HwcTempDesired = 0.00&lt;br /&gt;
bai HwcTempMax = 65.00&lt;br /&gt;
bai HwcUnderHundredStarts = 74&lt;br /&gt;
bai HwcWaterflow =  (ERR: invalid position for 3108b509030d5500 / 00)&lt;br /&gt;
bai HwcWaterflowMax =  (ERR: invalid position for 3108b509030d5600 / 00)&lt;br /&gt;
bai Maintenancedata_HwcTempMax = 0.00&lt;br /&gt;
bai OutdoorstempSensor = 8.19;ok&lt;br /&gt;
bai OverflowCounter = no&lt;br /&gt;
bai PowerValue =  (ERR: invalid position for 3108b509030daa00 / 00)&lt;br /&gt;
bai PrAPSCounter = 0&lt;br /&gt;
bai PredCombustionPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMRefPWMcounter = 0&lt;br /&gt;
bai PredIgnitionPredCounter = 0;0;0&lt;br /&gt;
bai PredSourcePressurePredCounter =  (ERR: invalid position for 3108b509030d4301 / 00)&lt;br /&gt;
bai PredWaterflowDevThreshold =  (ERR: invalid position for 3108b509030d4401 / 00)&lt;br /&gt;
bai PredWaterflowSwitchingPoint =  (ERR: invalid position for 3108b509030d4501 / 00)&lt;br /&gt;
bai PredWaterpressureMaxPressure = 4000&lt;br /&gt;
bai PredWaterpressureMinPressure = 0&lt;br /&gt;
bai PredWaterpressureSwitchingPoint = 0&lt;br /&gt;
bai PrEnergyCountHc1 = 9469&lt;br /&gt;
bai PrEnergyCountHwc1 = 1922&lt;br /&gt;
bai PrEnergyCountHwc2 = 0&lt;br /&gt;
bai PrEnergyCountHwc3 = 0&lt;br /&gt;
bai PrEnergySumHc1 = 18134146&lt;br /&gt;
bai PrEnergySumHwc1 = 6876091&lt;br /&gt;
bai PrEnergySumHwc2 = 0&lt;br /&gt;
bai PrEnergySumHwc3 = 0&lt;br /&gt;
bai PumpHours = 93&lt;br /&gt;
bai ReturnTemp = -13.50;215;cutoff&lt;br /&gt;
bai ReturnTempMax = 0.00&lt;br /&gt;
bai SecondPumpMode = 2&lt;br /&gt;
bai SHEMaxFlowTemp =  (ERR: invalid position for 3108b509030dc300 / 00)&lt;br /&gt;
bai Status01 = 47.0;-;8.375;0.0;23.0;off&lt;br /&gt;
bai Status02 = auto;60;75.0;80;55.0&lt;br /&gt;
bai Status16 =  (ERR: invalid position for 3108b5040116 / 00)&lt;br /&gt;
bai Status =  (ERR: invalid position for 3108b5110103 / 00)&lt;br /&gt;
bai StorageLoadPumpHours = 10&lt;br /&gt;
bai StorageloadPumpStarts = 16&lt;br /&gt;
bai StorageTemp = 23.00;ok&lt;br /&gt;
bai StorageTempDesired = 55.00&lt;br /&gt;
bai StorageTempMax = 58.38&lt;br /&gt;
bai TempDiffBlock = 0&lt;br /&gt;
bai TempDiffFailure = 0&lt;br /&gt;
bai TempGradientFailure = 0&lt;br /&gt;
bai Templimiter = on&lt;br /&gt;
bai TemplimiterWithNTC = yes&lt;br /&gt;
bai TempMaxDiffExtTFT = 0.00&lt;br /&gt;
bai TimerInputHc = on&lt;br /&gt;
bai ValveMode = 0&lt;br /&gt;
bai ValveStarts =  (ERR: invalid position for 3108b509030d1a00 / 00)&lt;br /&gt;
bai WaterHcFlowMax =  (ERR: invalid position for 3108b509030dd000 / 00)&lt;br /&gt;
bai WaterPressure = 2.160;ok&lt;br /&gt;
bai WaterpressureBranchControlOff = off&lt;br /&gt;
bai WaterpressureMeasureCounter = 0&lt;br /&gt;
bai WaterpressureVariantSum = 0&lt;br /&gt;
bai WPPostrunTime = 5&lt;br /&gt;
bai WPPWMPower = 30&lt;br /&gt;
bai WPPWMPowerDia = 101&lt;br /&gt;
scan.08  = Vaillant;BAI00;0703;7401&lt;br /&gt;
Scan.08 Id = ;;;;;;&lt;br /&gt;
scan.15  = Vaillant;70000;0510;6403&lt;br /&gt;
Scan.15 Id = 21;17;52;0020171315;0082;026621;N7&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl read RoomHumidity&lt;br /&gt;
49&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recurring issue ==&lt;br /&gt;
&lt;br /&gt;
After a restart of HA due to a third party module upgrade, the stick may have trouble getting info from the bus except for broadcasted data.&lt;br /&gt;
&lt;br /&gt;
Typical errors seen when restarting eBusd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:16:18] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:16:18] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:16:18] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:16:42.180 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:50.588 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:56.237 [bus error] poll bai CounterStartattempts1 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:02.215 [bus error] poll bai CounterStartattempts2 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:08.226 [bus error] poll bai CounterStartAttempts3 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:14.215 [bus error] poll bai DeactivationsTemplimiter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:20.239 [bus error] poll bai DisplayMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:26.251 [bus error] poll bai ExhaustCurve failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:32.227 [bus error] poll bai ExhaustWayBlockCounter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:38.234 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.217 [bus error] poll bai ExternalFlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.261 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:50.247 [bus error] poll bai ExtFlowTempDesiredMin failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:56.251 [bus error] poll bai FanHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:02.237 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:08.245 [bus error] poll bai FlowTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:14.234 [bus error] poll bai FlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:20.224 [bus error] poll bai HcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:26.238 [bus error] poll bai HcPumpMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:32.219 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:38.232 [bus error] poll bai HcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:44.221 [bus error] poll bai HcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:50.248 [bus error] poll bai HoursTillService failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.249 [bus error] poll bai HwcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.294 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:02.224 [bus error] poll bai HwcPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:08.234 [bus error] poll bai HwcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:14.227 [bus error] poll bai HwcTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-01 07:34:02.165 [bus error] poll bai WaterPressure failed: ERR: read timeout&lt;br /&gt;
2026-05-01 20:49:26.120 [bus error] poll bai StorageTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-02 02:54:50.171 [bus error] poll bai TimerInputHc failed: ERR: read timeout&lt;br /&gt;
2026-05-03 05:48:32.184 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 09:58:26.187 [bus error] poll bai WPPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:08:38.184 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:15:32.190 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 17:58:44.169 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 02:23:50.170 [bus error] poll bai WaterpressureVariantSum failed: ERR: read timeout&lt;br /&gt;
2026-05-04 07:57:14.187 [bus error] poll bai HwcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 15:13:08.205 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-05 14:21:32.154 [bus error] poll bai PrEnergySumHwc2 failed: ERR: read timeout&lt;br /&gt;
2026-05-05 22:48:26.170 [bus error] poll 700 Z1DayTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 00:42:26.190 [bus error] poll bai PrEnergySumHwc1 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 06:12:32.140 [bus error] poll 700 OutsideTempAvg failed: ERR: read timeout&lt;br /&gt;
2026-05-06 16:10:20.184 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 18:01:44.191 [bus error] poll bai PrEnergyCountHwc3 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:05:20.184 [bus error] poll bai ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:16:38.157 [bus error] poll bai HwcTempMax failed: ERR: read timeout&lt;br /&gt;
2026-05-07 07:29:14.167 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 09:44:50.167 [bus error] poll bai HwcStarts failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:50:35] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:50:35] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:50:35] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:50:56.736 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.459 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send message part 3: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.547 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.592 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.681 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.726 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [main error] error reading message Scan.08 Id: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[08:53:49] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[08:53:49] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[08:53:49] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:debug --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 08:53:49.815 [device notice] transport opened&lt;br /&gt;
2026-05-08 08:53:49.816 [main info] registering data handlers&lt;br /&gt;
2026-05-08 08:53:49.818 [mqtt info] mosquitto version 2.0.21 (compiled with 2.0.21)&lt;br /&gt;
2026-05-08 08:53:49.821 [mqtt debug] connection requested&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] registered data handlers&lt;br /&gt;
2026-05-08 08:53:49.821 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial high speed, enhanced&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] loading configuration files from /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] reading directory /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/vaillant is dir&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/memory.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/broadcast.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] reading file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] successfully read file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] reading file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] successfully read file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] read config files, got 17 messages&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] signal acquired&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt notice] connection established&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/version &amp;quot;ebusd 26.1.26.1&amp;quot;&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:51.874 [bus notice] new master 10, master count 2&lt;br /&gt;
2026-05-08 08:53:51.905 [bus notice] new master 03, master count 3&lt;br /&gt;
2026-05-08 08:53:51.905 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:51.905 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:53.596 [network info] [00001] client connection opened 127.0.0.1&lt;br /&gt;
2026-05-08 08:53:53.597 [network info] [00001] connection closed&lt;br /&gt;
2026-05-08 08:53:54.598 [network debug] dead connection removed - 0&lt;br /&gt;
2026-05-08 08:53:59.667 [update info] received MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.667 [update notice] received unknown MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.826 [main debug] performing regular tasks&lt;br /&gt;
2026-05-08 08:53:59.826 [main notice] starting initial broadcast scan&lt;br /&gt;
2026-05-08 08:53:59.826 [bus info] send message: 31fe07fe00&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.848 [device notice] reset, supports info&lt;br /&gt;
2026-05-08 08:53:59.852 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 08:53:59.852 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:53:59.946 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.947 [device notice] extra info: firmware 1.1[6112].1[6112], jumpers 0x03&lt;br /&gt;
2026-05-08 08:54:00.039 [bus debug] arbitration lost (timed out)&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration delay 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus info] arbitration delay 13 - 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.108 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.133 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] arbitration delay 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus info] arbitration delay 13 - 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.154 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration delay 108 micros&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.199 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.200 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[09:04:29] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[09:04:30] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[09:04:30] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --latency=10 --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 09:04:40.550 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 09:04:40.763 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.807 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.852 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:40.852 [main error] initial scan failed: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.104 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.148 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.193 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.193 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A restart of HA or a reboot of RPI won&#039;t help at all.&lt;br /&gt;
To solve this the only solution I found was to fully shutdown the RPI, remove the power plug and put it back.&lt;br /&gt;
&lt;br /&gt;
=== 20260620 ===&lt;br /&gt;
&lt;br /&gt;
On 20260620, HA Core got upgraded to 2026.6.4 and again the same issue occured. A reboot of the RPI didn&#039;t help, full shutdown didn&#039;t help. ChatGPT advised :&lt;br /&gt;
# Turn off boiler/heating system power. &lt;br /&gt;
# Wait ~30 seconds.&lt;br /&gt;
# Turn power back on.&lt;br /&gt;
# Wait until VRC700 fully boots.&lt;br /&gt;
# Restart eBUSd.&lt;br /&gt;
And this worked.&lt;br /&gt;
&lt;br /&gt;
=== 20260731 ===&lt;br /&gt;
On 20260731, HA OS got upgraded to 18.2 and the same issue occured. This time no reboot of the Heating system was required:&lt;br /&gt;
# Unplug the USB stick.&lt;br /&gt;
# Wait ~30 seconds.&lt;br /&gt;
# Plug back the USB stick.&lt;br /&gt;
# Restart eBUSd.&lt;br /&gt;
And this worked.&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1011</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1011"/>
		<updated>2026-06-20T20:11:08Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Recurring issue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point for my setup ; I don&#039;t intend to structure it better, improve it nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = TempBottom|TempTop|SystemFlowTemp|^Status$|WaterHcFlowMax|ValveStarts|SHEMaxFlowTemp|PredSourcePressurePredCounter|PredWaterflowDevThreshold|PredWaterflowSwitchingP&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the application starts, it will fetch latest csv&#039;s &amp;amp; inc file from https://ebus.github.io/de/.&lt;br /&gt;
That&#039;s not ideal, let&#039;s depend only on local content:&lt;br /&gt;
&lt;br /&gt;
On your favorite endpoint:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://ebus.github.io/en/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/memory.csv&lt;br /&gt;
mkdir -p vaillant&lt;br /&gt;
cd vaillant&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/general.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/scan.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/08.bai.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/15.700.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/bai.0010006101.inc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add important missing VRC700 Humidity metric:&lt;br /&gt;
&amp;lt;pre&amp;gt;% diff -u 15.700.csv.20260328 15.700.csv &lt;br /&gt;
--- 15.700.csv.20260328	2026-02-01 17:09:58.000000000 +0100&lt;br /&gt;
+++ 15.700.csv	2026-03-28 21:29:44.000000000 +0100&lt;br /&gt;
@@ -33,6 +33,7 @@&lt;br /&gt;
 w,,,Time,time,,,b524,020100003500,value,,HTI,,,Aktuelle Uhrzeit&lt;br /&gt;
 r,,,HydraulicScheme,Systemschema,,,b524,020000003600,ign,,IGN:4,,,,value,,UIN,,,Systemschema&lt;br /&gt;
 w,,,HydraulicScheme,Systemschema,,,b524,020100003600,value,,UIN,,,Systemschema&lt;br /&gt;
+r,,,RoomHumidity,room humidity,,,b524,060009010700,ign,,IGN:4,,,,humidity,,EXP,,%,room humidity&lt;br /&gt;
 r,,,WaterPressure,water pressure,,,b524,020000003900,ign,,IGN:4,,,,value,,EXP,,bar,Wasserdruck&lt;br /&gt;
 r,,,SolarYieldTotal,total solar yield,,,b524,020000003d00,ign,,IGN:4,,,,value,,ULG,,kWh,Solarertrag gesamt&lt;br /&gt;
 w,,,SolarYieldTotal,total solar yield,,,b524,020100003d00,value,,ULG,,kWh,Solarertrag gesamt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload the definitions in the right container config directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
scp -P 22222 *.inc root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
cd ..&lt;br /&gt;
scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure eBUSd to use this configpath:&lt;br /&gt;
&amp;lt;pre&amp;gt;commandline_options:&lt;br /&gt;
  - &amp;quot;--mqttjson&amp;quot;&lt;br /&gt;
  - &amp;quot;--scanconfig&amp;quot;&lt;br /&gt;
  - &amp;quot;--log=all:error&amp;quot;&lt;br /&gt;
  - &amp;quot;--enabledefine&amp;quot;&lt;br /&gt;
  - &amp;quot;--configpath=/config/custom/&amp;quot;&lt;br /&gt;
network_device: ens:/dev/ttyACM0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TBC, copy the live container content to the general config:&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ pwd&lt;br /&gt;
/homeassistant/ebusd-configuration&lt;br /&gt;
[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ find .&lt;br /&gt;
.&lt;br /&gt;
./custom&lt;br /&gt;
./custom/vaillant&lt;br /&gt;
./custom/vaillant/bai.0010006101.inc&lt;br /&gt;
./custom/vaillant/08.bai.csv&lt;br /&gt;
./custom/vaillant/broadcast.csv&lt;br /&gt;
./custom/vaillant/15.700.csv&lt;br /&gt;
./custom/vaillant/scan.csv&lt;br /&gt;
./custom/vaillant/general.csv&lt;br /&gt;
./custom/memory.csv&lt;br /&gt;
./custom/broadcast.csv&lt;br /&gt;
./mqtt-hassio.cfg.2026032701&lt;br /&gt;
./mqtt-hassio.cfg&lt;br /&gt;
[core-ssh ebusd-configuration]$ &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 44&lt;br /&gt;
max symbol rate: 127&lt;br /&gt;
min arbitration micros: 3&lt;br /&gt;
max arbitration micros: 15&lt;br /&gt;
min symbol latency: 4&lt;br /&gt;
max symbol latency: 7&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 718&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 152&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl find -d -r&lt;br /&gt;
700 AdaptHeatCurve = no&lt;br /&gt;
700 DisplayedOutsideTemp = 6.375&lt;br /&gt;
700 Hc1ActualFlowTempDesired = 45.6435&lt;br /&gt;
700 Hc1AutoOffMode = night&lt;br /&gt;
700 Hc1ExcessTemp = 0.0&lt;br /&gt;
700 Hc1FlowTemp = 50&lt;br /&gt;
700 Hc1HeatCurve = 1.5&lt;br /&gt;
700 Hc1HeatCurveAdaption = 0.0&lt;br /&gt;
700 Hc1MaxFlowTempDesired = 90&lt;br /&gt;
700 Hc1MinFlowTempDesired = 15&lt;br /&gt;
700 Hc1PumpStatus = 1&lt;br /&gt;
700 Hc1RoomTempSwitchOn = thermostat&lt;br /&gt;
700 Hc1Status = 1&lt;br /&gt;
700 Hc1SummerTempLimit = 21&lt;br /&gt;
700 HcStorageTempBottom =  (empty for 3115b5240602000000a000 / 080000a000ffffff7f)&lt;br /&gt;
700 HcStorageTempTop =  (empty for 3115b52406020000009f00 / 0800009f00ffffff7f)&lt;br /&gt;
700 HolidayTemp = 10&lt;br /&gt;
700 HwcFlowTemp = 0.0&lt;br /&gt;
700 HwcMaxFlowTempDesired = 80&lt;br /&gt;
700 HwcOpMode = auto&lt;br /&gt;
700 HwcSFMode = auto&lt;br /&gt;
700 HwcStorageTemp = 23&lt;br /&gt;
700 HwcStorageTempBottom =  (empty for 3115b52406020000009e00 / 0800009e00ffffff7f)&lt;br /&gt;
700 HwcStorageTempTop =  (empty for 3115b52406020000009d00 / 0800009d00ffffff7f)&lt;br /&gt;
700 HwcTempDesired = 55&lt;br /&gt;
700 HwcTimer_Friday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Monday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Saturday = 07:00;07:50;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Sunday = 07:20;08:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Thursday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Tuesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Wednesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 MaxRoomHumidity = 40&lt;br /&gt;
700 OpMode = auto&lt;br /&gt;
700 OpModeCooling = auto&lt;br /&gt;
700 OpModeEffect = alle&lt;br /&gt;
700 OpModeVentilation = auto&lt;br /&gt;
700 OutsideTempAvg = 7.60156&lt;br /&gt;
700 PrEnergySum = 27&lt;br /&gt;
700 PrEnergySumHc = 27&lt;br /&gt;
700 PrEnergySumHcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHcThisMonth = 0&lt;br /&gt;
700 PrEnergySumHwc = 0&lt;br /&gt;
700 PrEnergySumHwcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHwcThisMonth = 0&lt;br /&gt;
700 RoomHumidity = 49&lt;br /&gt;
700 SFMode = auto&lt;br /&gt;
700 SolarYieldTotal = 0&lt;br /&gt;
700 SystemFlowTemp =  (empty for 3115b52406020000004b00 / 0800004b00ffffff7f)&lt;br /&gt;
700 WaterPressure = 2.1&lt;br /&gt;
700 YieldTotal = 0&lt;br /&gt;
700 Z1ActualRoomTempDesired = 19.5&lt;br /&gt;
700 Z1DayTemp = 19.5&lt;br /&gt;
700 Z1HolidayTemp = 10&lt;br /&gt;
700 Z1NightTemp = 15&lt;br /&gt;
700 Z1OpMode = auto&lt;br /&gt;
700 Z1OpModeCooling = auto&lt;br /&gt;
700 Z1QuickVetoTemp = 21&lt;br /&gt;
700 Z1RoomTemp = 19.5&lt;br /&gt;
700 Z1SFMode = auto&lt;br /&gt;
700 Z1Timer_Friday = 06:40;17:30;17:30;22:30;-:-;-:-&lt;br /&gt;
700 Z1Timer_Monday = 06:40;07:40;16:40;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Saturday = 07:30;22:30;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Sunday = 08:00;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Thursday = 06:40;07:40;15:10;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Tuesday = 06:40;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Wednesday = 06:40;22:00;22:00;22:00;-:-;-:-&lt;br /&gt;
700 Z1ValveStatus = 1&lt;br /&gt;
bai AATemp = 197.25;62379;cutoff&lt;br /&gt;
bai AITemp =  (ERR: invalid position for 3108b509030d3300 / 00)&lt;br /&gt;
bai CounterStartattempts1 = 7&lt;br /&gt;
bai CounterStartattempts2 = 1&lt;br /&gt;
bai CounterStartAttempts3 = 1&lt;br /&gt;
bai DateTime = valid;21:50:35;28.03.2026;8.375&lt;br /&gt;
bai DeactivationsTemplimiter = 0&lt;br /&gt;
bai DisplayMode = 129&lt;br /&gt;
bai ExhaustCurve = 0&lt;br /&gt;
bai ExhaustWayBlockCounter = 0&lt;br /&gt;
bai Expertlevel_ReturnTemp = -1.81;cutoff&lt;br /&gt;
bai ExternalFlowTempDesired = 90.00&lt;br /&gt;
bai ExtFlowTempDesiredMin = 45.50&lt;br /&gt;
bai FanHours = 32&lt;br /&gt;
bai FanStarts = 267&lt;br /&gt;
bai FlowTemp = 44.31;ok&lt;br /&gt;
bai FlowTempDesired = 45.50&lt;br /&gt;
bai HcHours = 26&lt;br /&gt;
bai HcPumpMode = permanent&lt;br /&gt;
bai HcPumpStarts = 211&lt;br /&gt;
bai HcStarts = 100&lt;br /&gt;
bai HcUnderHundredStarts = 94&lt;br /&gt;
bai HoursTillService = 3010&lt;br /&gt;
bai HwcHours = 5&lt;br /&gt;
bai HwcPostrunTime = 300&lt;br /&gt;
bai HwcStarts = 0&lt;br /&gt;
bai HwcTemp = -14.94;cutoff&lt;br /&gt;
bai HwcTempDesired = 0.00&lt;br /&gt;
bai HwcTempMax = 65.00&lt;br /&gt;
bai HwcUnderHundredStarts = 74&lt;br /&gt;
bai HwcWaterflow =  (ERR: invalid position for 3108b509030d5500 / 00)&lt;br /&gt;
bai HwcWaterflowMax =  (ERR: invalid position for 3108b509030d5600 / 00)&lt;br /&gt;
bai Maintenancedata_HwcTempMax = 0.00&lt;br /&gt;
bai OutdoorstempSensor = 8.19;ok&lt;br /&gt;
bai OverflowCounter = no&lt;br /&gt;
bai PowerValue =  (ERR: invalid position for 3108b509030daa00 / 00)&lt;br /&gt;
bai PrAPSCounter = 0&lt;br /&gt;
bai PredCombustionPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMRefPWMcounter = 0&lt;br /&gt;
bai PredIgnitionPredCounter = 0;0;0&lt;br /&gt;
bai PredSourcePressurePredCounter =  (ERR: invalid position for 3108b509030d4301 / 00)&lt;br /&gt;
bai PredWaterflowDevThreshold =  (ERR: invalid position for 3108b509030d4401 / 00)&lt;br /&gt;
bai PredWaterflowSwitchingPoint =  (ERR: invalid position for 3108b509030d4501 / 00)&lt;br /&gt;
bai PredWaterpressureMaxPressure = 4000&lt;br /&gt;
bai PredWaterpressureMinPressure = 0&lt;br /&gt;
bai PredWaterpressureSwitchingPoint = 0&lt;br /&gt;
bai PrEnergyCountHc1 = 9469&lt;br /&gt;
bai PrEnergyCountHwc1 = 1922&lt;br /&gt;
bai PrEnergyCountHwc2 = 0&lt;br /&gt;
bai PrEnergyCountHwc3 = 0&lt;br /&gt;
bai PrEnergySumHc1 = 18134146&lt;br /&gt;
bai PrEnergySumHwc1 = 6876091&lt;br /&gt;
bai PrEnergySumHwc2 = 0&lt;br /&gt;
bai PrEnergySumHwc3 = 0&lt;br /&gt;
bai PumpHours = 93&lt;br /&gt;
bai ReturnTemp = -13.50;215;cutoff&lt;br /&gt;
bai ReturnTempMax = 0.00&lt;br /&gt;
bai SecondPumpMode = 2&lt;br /&gt;
bai SHEMaxFlowTemp =  (ERR: invalid position for 3108b509030dc300 / 00)&lt;br /&gt;
bai Status01 = 47.0;-;8.375;0.0;23.0;off&lt;br /&gt;
bai Status02 = auto;60;75.0;80;55.0&lt;br /&gt;
bai Status16 =  (ERR: invalid position for 3108b5040116 / 00)&lt;br /&gt;
bai Status =  (ERR: invalid position for 3108b5110103 / 00)&lt;br /&gt;
bai StorageLoadPumpHours = 10&lt;br /&gt;
bai StorageloadPumpStarts = 16&lt;br /&gt;
bai StorageTemp = 23.00;ok&lt;br /&gt;
bai StorageTempDesired = 55.00&lt;br /&gt;
bai StorageTempMax = 58.38&lt;br /&gt;
bai TempDiffBlock = 0&lt;br /&gt;
bai TempDiffFailure = 0&lt;br /&gt;
bai TempGradientFailure = 0&lt;br /&gt;
bai Templimiter = on&lt;br /&gt;
bai TemplimiterWithNTC = yes&lt;br /&gt;
bai TempMaxDiffExtTFT = 0.00&lt;br /&gt;
bai TimerInputHc = on&lt;br /&gt;
bai ValveMode = 0&lt;br /&gt;
bai ValveStarts =  (ERR: invalid position for 3108b509030d1a00 / 00)&lt;br /&gt;
bai WaterHcFlowMax =  (ERR: invalid position for 3108b509030dd000 / 00)&lt;br /&gt;
bai WaterPressure = 2.160;ok&lt;br /&gt;
bai WaterpressureBranchControlOff = off&lt;br /&gt;
bai WaterpressureMeasureCounter = 0&lt;br /&gt;
bai WaterpressureVariantSum = 0&lt;br /&gt;
bai WPPostrunTime = 5&lt;br /&gt;
bai WPPWMPower = 30&lt;br /&gt;
bai WPPWMPowerDia = 101&lt;br /&gt;
scan.08  = Vaillant;BAI00;0703;7401&lt;br /&gt;
Scan.08 Id = ;;;;;;&lt;br /&gt;
scan.15  = Vaillant;70000;0510;6403&lt;br /&gt;
Scan.15 Id = 21;17;52;0020171315;0082;026621;N7&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl read RoomHumidity&lt;br /&gt;
49&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recurring issue ==&lt;br /&gt;
&lt;br /&gt;
After a restart of HA due to a third party module upgrade, the stick may have trouble getting info from the bus except for broadcasted data.&lt;br /&gt;
&lt;br /&gt;
Typical errors seen when restarting eBusd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:16:18] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:16:18] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:16:18] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:16:42.180 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:50.588 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:56.237 [bus error] poll bai CounterStartattempts1 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:02.215 [bus error] poll bai CounterStartattempts2 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:08.226 [bus error] poll bai CounterStartAttempts3 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:14.215 [bus error] poll bai DeactivationsTemplimiter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:20.239 [bus error] poll bai DisplayMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:26.251 [bus error] poll bai ExhaustCurve failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:32.227 [bus error] poll bai ExhaustWayBlockCounter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:38.234 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.217 [bus error] poll bai ExternalFlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.261 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:50.247 [bus error] poll bai ExtFlowTempDesiredMin failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:56.251 [bus error] poll bai FanHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:02.237 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:08.245 [bus error] poll bai FlowTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:14.234 [bus error] poll bai FlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:20.224 [bus error] poll bai HcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:26.238 [bus error] poll bai HcPumpMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:32.219 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:38.232 [bus error] poll bai HcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:44.221 [bus error] poll bai HcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:50.248 [bus error] poll bai HoursTillService failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.249 [bus error] poll bai HwcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.294 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:02.224 [bus error] poll bai HwcPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:08.234 [bus error] poll bai HwcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:14.227 [bus error] poll bai HwcTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-01 07:34:02.165 [bus error] poll bai WaterPressure failed: ERR: read timeout&lt;br /&gt;
2026-05-01 20:49:26.120 [bus error] poll bai StorageTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-02 02:54:50.171 [bus error] poll bai TimerInputHc failed: ERR: read timeout&lt;br /&gt;
2026-05-03 05:48:32.184 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 09:58:26.187 [bus error] poll bai WPPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:08:38.184 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:15:32.190 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 17:58:44.169 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 02:23:50.170 [bus error] poll bai WaterpressureVariantSum failed: ERR: read timeout&lt;br /&gt;
2026-05-04 07:57:14.187 [bus error] poll bai HwcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 15:13:08.205 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-05 14:21:32.154 [bus error] poll bai PrEnergySumHwc2 failed: ERR: read timeout&lt;br /&gt;
2026-05-05 22:48:26.170 [bus error] poll 700 Z1DayTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 00:42:26.190 [bus error] poll bai PrEnergySumHwc1 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 06:12:32.140 [bus error] poll 700 OutsideTempAvg failed: ERR: read timeout&lt;br /&gt;
2026-05-06 16:10:20.184 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 18:01:44.191 [bus error] poll bai PrEnergyCountHwc3 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:05:20.184 [bus error] poll bai ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:16:38.157 [bus error] poll bai HwcTempMax failed: ERR: read timeout&lt;br /&gt;
2026-05-07 07:29:14.167 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 09:44:50.167 [bus error] poll bai HwcStarts failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:50:35] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:50:35] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:50:35] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:50:56.736 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.459 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send message part 3: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.547 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.592 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.681 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.726 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [main error] error reading message Scan.08 Id: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[08:53:49] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[08:53:49] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[08:53:49] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:debug --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 08:53:49.815 [device notice] transport opened&lt;br /&gt;
2026-05-08 08:53:49.816 [main info] registering data handlers&lt;br /&gt;
2026-05-08 08:53:49.818 [mqtt info] mosquitto version 2.0.21 (compiled with 2.0.21)&lt;br /&gt;
2026-05-08 08:53:49.821 [mqtt debug] connection requested&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] registered data handlers&lt;br /&gt;
2026-05-08 08:53:49.821 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial high speed, enhanced&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] loading configuration files from /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] reading directory /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/vaillant is dir&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/memory.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/broadcast.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] reading file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] successfully read file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] reading file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] successfully read file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] read config files, got 17 messages&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] signal acquired&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt notice] connection established&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/version &amp;quot;ebusd 26.1.26.1&amp;quot;&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:51.874 [bus notice] new master 10, master count 2&lt;br /&gt;
2026-05-08 08:53:51.905 [bus notice] new master 03, master count 3&lt;br /&gt;
2026-05-08 08:53:51.905 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:51.905 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:53.596 [network info] [00001] client connection opened 127.0.0.1&lt;br /&gt;
2026-05-08 08:53:53.597 [network info] [00001] connection closed&lt;br /&gt;
2026-05-08 08:53:54.598 [network debug] dead connection removed - 0&lt;br /&gt;
2026-05-08 08:53:59.667 [update info] received MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.667 [update notice] received unknown MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.826 [main debug] performing regular tasks&lt;br /&gt;
2026-05-08 08:53:59.826 [main notice] starting initial broadcast scan&lt;br /&gt;
2026-05-08 08:53:59.826 [bus info] send message: 31fe07fe00&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.848 [device notice] reset, supports info&lt;br /&gt;
2026-05-08 08:53:59.852 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 08:53:59.852 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:53:59.946 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.947 [device notice] extra info: firmware 1.1[6112].1[6112], jumpers 0x03&lt;br /&gt;
2026-05-08 08:54:00.039 [bus debug] arbitration lost (timed out)&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration delay 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus info] arbitration delay 13 - 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.108 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.133 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] arbitration delay 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus info] arbitration delay 13 - 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.154 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration delay 108 micros&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.199 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.200 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[09:04:29] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[09:04:30] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[09:04:30] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --latency=10 --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 09:04:40.550 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 09:04:40.763 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.807 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.852 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:40.852 [main error] initial scan failed: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.104 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.148 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.193 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.193 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A restart of HA or a reboot of RPI won&#039;t help at all.&lt;br /&gt;
To solve this the only solution I found was to fully shutdown the RPI, remove the power plug and put it back.&lt;br /&gt;
&lt;br /&gt;
On 20260620, HA Core got upgrade to 2026.6.4 and again the same issue occured. A reboot of the RPI didn&#039;t help, full shutdown didn&#039;t help. ChatGPT advised :&lt;br /&gt;
# Turn off boiler/heating system power. &lt;br /&gt;
# Wait ~30 seconds.&lt;br /&gt;
# Turn power back on.&lt;br /&gt;
# Wait until VRC700 fully boots.&lt;br /&gt;
# Restart eBUSd.&lt;br /&gt;
And this worked !&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1010</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1010"/>
		<updated>2026-06-12T17:54:13Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Disclaimer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point for my setup ; I don&#039;t intend to structure it better, improve it nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = TempBottom|TempTop|SystemFlowTemp|^Status$|WaterHcFlowMax|ValveStarts|SHEMaxFlowTemp|PredSourcePressurePredCounter|PredWaterflowDevThreshold|PredWaterflowSwitchingP&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the application starts, it will fetch latest csv&#039;s &amp;amp; inc file from https://ebus.github.io/de/.&lt;br /&gt;
That&#039;s not ideal, let&#039;s depend only on local content:&lt;br /&gt;
&lt;br /&gt;
On your favorite endpoint:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://ebus.github.io/en/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/memory.csv&lt;br /&gt;
mkdir -p vaillant&lt;br /&gt;
cd vaillant&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/general.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/scan.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/08.bai.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/15.700.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/bai.0010006101.inc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add important missing VRC700 Humidity metric:&lt;br /&gt;
&amp;lt;pre&amp;gt;% diff -u 15.700.csv.20260328 15.700.csv &lt;br /&gt;
--- 15.700.csv.20260328	2026-02-01 17:09:58.000000000 +0100&lt;br /&gt;
+++ 15.700.csv	2026-03-28 21:29:44.000000000 +0100&lt;br /&gt;
@@ -33,6 +33,7 @@&lt;br /&gt;
 w,,,Time,time,,,b524,020100003500,value,,HTI,,,Aktuelle Uhrzeit&lt;br /&gt;
 r,,,HydraulicScheme,Systemschema,,,b524,020000003600,ign,,IGN:4,,,,value,,UIN,,,Systemschema&lt;br /&gt;
 w,,,HydraulicScheme,Systemschema,,,b524,020100003600,value,,UIN,,,Systemschema&lt;br /&gt;
+r,,,RoomHumidity,room humidity,,,b524,060009010700,ign,,IGN:4,,,,humidity,,EXP,,%,room humidity&lt;br /&gt;
 r,,,WaterPressure,water pressure,,,b524,020000003900,ign,,IGN:4,,,,value,,EXP,,bar,Wasserdruck&lt;br /&gt;
 r,,,SolarYieldTotal,total solar yield,,,b524,020000003d00,ign,,IGN:4,,,,value,,ULG,,kWh,Solarertrag gesamt&lt;br /&gt;
 w,,,SolarYieldTotal,total solar yield,,,b524,020100003d00,value,,ULG,,kWh,Solarertrag gesamt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload the definitions in the right container config directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
scp -P 22222 *.inc root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
cd ..&lt;br /&gt;
scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure eBUSd to use this configpath:&lt;br /&gt;
&amp;lt;pre&amp;gt;commandline_options:&lt;br /&gt;
  - &amp;quot;--mqttjson&amp;quot;&lt;br /&gt;
  - &amp;quot;--scanconfig&amp;quot;&lt;br /&gt;
  - &amp;quot;--log=all:error&amp;quot;&lt;br /&gt;
  - &amp;quot;--enabledefine&amp;quot;&lt;br /&gt;
  - &amp;quot;--configpath=/config/custom/&amp;quot;&lt;br /&gt;
network_device: ens:/dev/ttyACM0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TBC, copy the live container content to the general config:&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ pwd&lt;br /&gt;
/homeassistant/ebusd-configuration&lt;br /&gt;
[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ find .&lt;br /&gt;
.&lt;br /&gt;
./custom&lt;br /&gt;
./custom/vaillant&lt;br /&gt;
./custom/vaillant/bai.0010006101.inc&lt;br /&gt;
./custom/vaillant/08.bai.csv&lt;br /&gt;
./custom/vaillant/broadcast.csv&lt;br /&gt;
./custom/vaillant/15.700.csv&lt;br /&gt;
./custom/vaillant/scan.csv&lt;br /&gt;
./custom/vaillant/general.csv&lt;br /&gt;
./custom/memory.csv&lt;br /&gt;
./custom/broadcast.csv&lt;br /&gt;
./mqtt-hassio.cfg.2026032701&lt;br /&gt;
./mqtt-hassio.cfg&lt;br /&gt;
[core-ssh ebusd-configuration]$ &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 44&lt;br /&gt;
max symbol rate: 127&lt;br /&gt;
min arbitration micros: 3&lt;br /&gt;
max arbitration micros: 15&lt;br /&gt;
min symbol latency: 4&lt;br /&gt;
max symbol latency: 7&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 718&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 152&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl find -d -r&lt;br /&gt;
700 AdaptHeatCurve = no&lt;br /&gt;
700 DisplayedOutsideTemp = 6.375&lt;br /&gt;
700 Hc1ActualFlowTempDesired = 45.6435&lt;br /&gt;
700 Hc1AutoOffMode = night&lt;br /&gt;
700 Hc1ExcessTemp = 0.0&lt;br /&gt;
700 Hc1FlowTemp = 50&lt;br /&gt;
700 Hc1HeatCurve = 1.5&lt;br /&gt;
700 Hc1HeatCurveAdaption = 0.0&lt;br /&gt;
700 Hc1MaxFlowTempDesired = 90&lt;br /&gt;
700 Hc1MinFlowTempDesired = 15&lt;br /&gt;
700 Hc1PumpStatus = 1&lt;br /&gt;
700 Hc1RoomTempSwitchOn = thermostat&lt;br /&gt;
700 Hc1Status = 1&lt;br /&gt;
700 Hc1SummerTempLimit = 21&lt;br /&gt;
700 HcStorageTempBottom =  (empty for 3115b5240602000000a000 / 080000a000ffffff7f)&lt;br /&gt;
700 HcStorageTempTop =  (empty for 3115b52406020000009f00 / 0800009f00ffffff7f)&lt;br /&gt;
700 HolidayTemp = 10&lt;br /&gt;
700 HwcFlowTemp = 0.0&lt;br /&gt;
700 HwcMaxFlowTempDesired = 80&lt;br /&gt;
700 HwcOpMode = auto&lt;br /&gt;
700 HwcSFMode = auto&lt;br /&gt;
700 HwcStorageTemp = 23&lt;br /&gt;
700 HwcStorageTempBottom =  (empty for 3115b52406020000009e00 / 0800009e00ffffff7f)&lt;br /&gt;
700 HwcStorageTempTop =  (empty for 3115b52406020000009d00 / 0800009d00ffffff7f)&lt;br /&gt;
700 HwcTempDesired = 55&lt;br /&gt;
700 HwcTimer_Friday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Monday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Saturday = 07:00;07:50;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Sunday = 07:20;08:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Thursday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Tuesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Wednesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 MaxRoomHumidity = 40&lt;br /&gt;
700 OpMode = auto&lt;br /&gt;
700 OpModeCooling = auto&lt;br /&gt;
700 OpModeEffect = alle&lt;br /&gt;
700 OpModeVentilation = auto&lt;br /&gt;
700 OutsideTempAvg = 7.60156&lt;br /&gt;
700 PrEnergySum = 27&lt;br /&gt;
700 PrEnergySumHc = 27&lt;br /&gt;
700 PrEnergySumHcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHcThisMonth = 0&lt;br /&gt;
700 PrEnergySumHwc = 0&lt;br /&gt;
700 PrEnergySumHwcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHwcThisMonth = 0&lt;br /&gt;
700 RoomHumidity = 49&lt;br /&gt;
700 SFMode = auto&lt;br /&gt;
700 SolarYieldTotal = 0&lt;br /&gt;
700 SystemFlowTemp =  (empty for 3115b52406020000004b00 / 0800004b00ffffff7f)&lt;br /&gt;
700 WaterPressure = 2.1&lt;br /&gt;
700 YieldTotal = 0&lt;br /&gt;
700 Z1ActualRoomTempDesired = 19.5&lt;br /&gt;
700 Z1DayTemp = 19.5&lt;br /&gt;
700 Z1HolidayTemp = 10&lt;br /&gt;
700 Z1NightTemp = 15&lt;br /&gt;
700 Z1OpMode = auto&lt;br /&gt;
700 Z1OpModeCooling = auto&lt;br /&gt;
700 Z1QuickVetoTemp = 21&lt;br /&gt;
700 Z1RoomTemp = 19.5&lt;br /&gt;
700 Z1SFMode = auto&lt;br /&gt;
700 Z1Timer_Friday = 06:40;17:30;17:30;22:30;-:-;-:-&lt;br /&gt;
700 Z1Timer_Monday = 06:40;07:40;16:40;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Saturday = 07:30;22:30;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Sunday = 08:00;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Thursday = 06:40;07:40;15:10;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Tuesday = 06:40;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Wednesday = 06:40;22:00;22:00;22:00;-:-;-:-&lt;br /&gt;
700 Z1ValveStatus = 1&lt;br /&gt;
bai AATemp = 197.25;62379;cutoff&lt;br /&gt;
bai AITemp =  (ERR: invalid position for 3108b509030d3300 / 00)&lt;br /&gt;
bai CounterStartattempts1 = 7&lt;br /&gt;
bai CounterStartattempts2 = 1&lt;br /&gt;
bai CounterStartAttempts3 = 1&lt;br /&gt;
bai DateTime = valid;21:50:35;28.03.2026;8.375&lt;br /&gt;
bai DeactivationsTemplimiter = 0&lt;br /&gt;
bai DisplayMode = 129&lt;br /&gt;
bai ExhaustCurve = 0&lt;br /&gt;
bai ExhaustWayBlockCounter = 0&lt;br /&gt;
bai Expertlevel_ReturnTemp = -1.81;cutoff&lt;br /&gt;
bai ExternalFlowTempDesired = 90.00&lt;br /&gt;
bai ExtFlowTempDesiredMin = 45.50&lt;br /&gt;
bai FanHours = 32&lt;br /&gt;
bai FanStarts = 267&lt;br /&gt;
bai FlowTemp = 44.31;ok&lt;br /&gt;
bai FlowTempDesired = 45.50&lt;br /&gt;
bai HcHours = 26&lt;br /&gt;
bai HcPumpMode = permanent&lt;br /&gt;
bai HcPumpStarts = 211&lt;br /&gt;
bai HcStarts = 100&lt;br /&gt;
bai HcUnderHundredStarts = 94&lt;br /&gt;
bai HoursTillService = 3010&lt;br /&gt;
bai HwcHours = 5&lt;br /&gt;
bai HwcPostrunTime = 300&lt;br /&gt;
bai HwcStarts = 0&lt;br /&gt;
bai HwcTemp = -14.94;cutoff&lt;br /&gt;
bai HwcTempDesired = 0.00&lt;br /&gt;
bai HwcTempMax = 65.00&lt;br /&gt;
bai HwcUnderHundredStarts = 74&lt;br /&gt;
bai HwcWaterflow =  (ERR: invalid position for 3108b509030d5500 / 00)&lt;br /&gt;
bai HwcWaterflowMax =  (ERR: invalid position for 3108b509030d5600 / 00)&lt;br /&gt;
bai Maintenancedata_HwcTempMax = 0.00&lt;br /&gt;
bai OutdoorstempSensor = 8.19;ok&lt;br /&gt;
bai OverflowCounter = no&lt;br /&gt;
bai PowerValue =  (ERR: invalid position for 3108b509030daa00 / 00)&lt;br /&gt;
bai PrAPSCounter = 0&lt;br /&gt;
bai PredCombustionPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMRefPWMcounter = 0&lt;br /&gt;
bai PredIgnitionPredCounter = 0;0;0&lt;br /&gt;
bai PredSourcePressurePredCounter =  (ERR: invalid position for 3108b509030d4301 / 00)&lt;br /&gt;
bai PredWaterflowDevThreshold =  (ERR: invalid position for 3108b509030d4401 / 00)&lt;br /&gt;
bai PredWaterflowSwitchingPoint =  (ERR: invalid position for 3108b509030d4501 / 00)&lt;br /&gt;
bai PredWaterpressureMaxPressure = 4000&lt;br /&gt;
bai PredWaterpressureMinPressure = 0&lt;br /&gt;
bai PredWaterpressureSwitchingPoint = 0&lt;br /&gt;
bai PrEnergyCountHc1 = 9469&lt;br /&gt;
bai PrEnergyCountHwc1 = 1922&lt;br /&gt;
bai PrEnergyCountHwc2 = 0&lt;br /&gt;
bai PrEnergyCountHwc3 = 0&lt;br /&gt;
bai PrEnergySumHc1 = 18134146&lt;br /&gt;
bai PrEnergySumHwc1 = 6876091&lt;br /&gt;
bai PrEnergySumHwc2 = 0&lt;br /&gt;
bai PrEnergySumHwc3 = 0&lt;br /&gt;
bai PumpHours = 93&lt;br /&gt;
bai ReturnTemp = -13.50;215;cutoff&lt;br /&gt;
bai ReturnTempMax = 0.00&lt;br /&gt;
bai SecondPumpMode = 2&lt;br /&gt;
bai SHEMaxFlowTemp =  (ERR: invalid position for 3108b509030dc300 / 00)&lt;br /&gt;
bai Status01 = 47.0;-;8.375;0.0;23.0;off&lt;br /&gt;
bai Status02 = auto;60;75.0;80;55.0&lt;br /&gt;
bai Status16 =  (ERR: invalid position for 3108b5040116 / 00)&lt;br /&gt;
bai Status =  (ERR: invalid position for 3108b5110103 / 00)&lt;br /&gt;
bai StorageLoadPumpHours = 10&lt;br /&gt;
bai StorageloadPumpStarts = 16&lt;br /&gt;
bai StorageTemp = 23.00;ok&lt;br /&gt;
bai StorageTempDesired = 55.00&lt;br /&gt;
bai StorageTempMax = 58.38&lt;br /&gt;
bai TempDiffBlock = 0&lt;br /&gt;
bai TempDiffFailure = 0&lt;br /&gt;
bai TempGradientFailure = 0&lt;br /&gt;
bai Templimiter = on&lt;br /&gt;
bai TemplimiterWithNTC = yes&lt;br /&gt;
bai TempMaxDiffExtTFT = 0.00&lt;br /&gt;
bai TimerInputHc = on&lt;br /&gt;
bai ValveMode = 0&lt;br /&gt;
bai ValveStarts =  (ERR: invalid position for 3108b509030d1a00 / 00)&lt;br /&gt;
bai WaterHcFlowMax =  (ERR: invalid position for 3108b509030dd000 / 00)&lt;br /&gt;
bai WaterPressure = 2.160;ok&lt;br /&gt;
bai WaterpressureBranchControlOff = off&lt;br /&gt;
bai WaterpressureMeasureCounter = 0&lt;br /&gt;
bai WaterpressureVariantSum = 0&lt;br /&gt;
bai WPPostrunTime = 5&lt;br /&gt;
bai WPPWMPower = 30&lt;br /&gt;
bai WPPWMPowerDia = 101&lt;br /&gt;
scan.08  = Vaillant;BAI00;0703;7401&lt;br /&gt;
Scan.08 Id = ;;;;;;&lt;br /&gt;
scan.15  = Vaillant;70000;0510;6403&lt;br /&gt;
Scan.15 Id = 21;17;52;0020171315;0082;026621;N7&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl read RoomHumidity&lt;br /&gt;
49&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recurring issue ==&lt;br /&gt;
&lt;br /&gt;
After a restart of HA due to a third party module upgrade, the stick may have trouble getting info from the bus except for broadcasted data.&lt;br /&gt;
&lt;br /&gt;
Typical errors seen when restarting eBusd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:16:18] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:16:18] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:16:18] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:16:42.180 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:50.588 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:56.237 [bus error] poll bai CounterStartattempts1 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:02.215 [bus error] poll bai CounterStartattempts2 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:08.226 [bus error] poll bai CounterStartAttempts3 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:14.215 [bus error] poll bai DeactivationsTemplimiter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:20.239 [bus error] poll bai DisplayMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:26.251 [bus error] poll bai ExhaustCurve failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:32.227 [bus error] poll bai ExhaustWayBlockCounter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:38.234 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.217 [bus error] poll bai ExternalFlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.261 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:50.247 [bus error] poll bai ExtFlowTempDesiredMin failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:56.251 [bus error] poll bai FanHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:02.237 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:08.245 [bus error] poll bai FlowTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:14.234 [bus error] poll bai FlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:20.224 [bus error] poll bai HcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:26.238 [bus error] poll bai HcPumpMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:32.219 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:38.232 [bus error] poll bai HcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:44.221 [bus error] poll bai HcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:50.248 [bus error] poll bai HoursTillService failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.249 [bus error] poll bai HwcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.294 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:02.224 [bus error] poll bai HwcPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:08.234 [bus error] poll bai HwcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:14.227 [bus error] poll bai HwcTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-01 07:34:02.165 [bus error] poll bai WaterPressure failed: ERR: read timeout&lt;br /&gt;
2026-05-01 20:49:26.120 [bus error] poll bai StorageTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-02 02:54:50.171 [bus error] poll bai TimerInputHc failed: ERR: read timeout&lt;br /&gt;
2026-05-03 05:48:32.184 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 09:58:26.187 [bus error] poll bai WPPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:08:38.184 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:15:32.190 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 17:58:44.169 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 02:23:50.170 [bus error] poll bai WaterpressureVariantSum failed: ERR: read timeout&lt;br /&gt;
2026-05-04 07:57:14.187 [bus error] poll bai HwcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 15:13:08.205 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-05 14:21:32.154 [bus error] poll bai PrEnergySumHwc2 failed: ERR: read timeout&lt;br /&gt;
2026-05-05 22:48:26.170 [bus error] poll 700 Z1DayTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 00:42:26.190 [bus error] poll bai PrEnergySumHwc1 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 06:12:32.140 [bus error] poll 700 OutsideTempAvg failed: ERR: read timeout&lt;br /&gt;
2026-05-06 16:10:20.184 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 18:01:44.191 [bus error] poll bai PrEnergyCountHwc3 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:05:20.184 [bus error] poll bai ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:16:38.157 [bus error] poll bai HwcTempMax failed: ERR: read timeout&lt;br /&gt;
2026-05-07 07:29:14.167 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 09:44:50.167 [bus error] poll bai HwcStarts failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:50:35] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:50:35] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:50:35] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:50:56.736 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.459 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send message part 3: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.547 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.592 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.681 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.726 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [main error] error reading message Scan.08 Id: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[08:53:49] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[08:53:49] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[08:53:49] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:debug --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 08:53:49.815 [device notice] transport opened&lt;br /&gt;
2026-05-08 08:53:49.816 [main info] registering data handlers&lt;br /&gt;
2026-05-08 08:53:49.818 [mqtt info] mosquitto version 2.0.21 (compiled with 2.0.21)&lt;br /&gt;
2026-05-08 08:53:49.821 [mqtt debug] connection requested&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] registered data handlers&lt;br /&gt;
2026-05-08 08:53:49.821 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial high speed, enhanced&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] loading configuration files from /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] reading directory /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/vaillant is dir&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/memory.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/broadcast.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] reading file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] successfully read file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] reading file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] successfully read file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] read config files, got 17 messages&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] signal acquired&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt notice] connection established&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/version &amp;quot;ebusd 26.1.26.1&amp;quot;&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:51.874 [bus notice] new master 10, master count 2&lt;br /&gt;
2026-05-08 08:53:51.905 [bus notice] new master 03, master count 3&lt;br /&gt;
2026-05-08 08:53:51.905 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:51.905 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:53.596 [network info] [00001] client connection opened 127.0.0.1&lt;br /&gt;
2026-05-08 08:53:53.597 [network info] [00001] connection closed&lt;br /&gt;
2026-05-08 08:53:54.598 [network debug] dead connection removed - 0&lt;br /&gt;
2026-05-08 08:53:59.667 [update info] received MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.667 [update notice] received unknown MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.826 [main debug] performing regular tasks&lt;br /&gt;
2026-05-08 08:53:59.826 [main notice] starting initial broadcast scan&lt;br /&gt;
2026-05-08 08:53:59.826 [bus info] send message: 31fe07fe00&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.848 [device notice] reset, supports info&lt;br /&gt;
2026-05-08 08:53:59.852 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 08:53:59.852 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:53:59.946 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.947 [device notice] extra info: firmware 1.1[6112].1[6112], jumpers 0x03&lt;br /&gt;
2026-05-08 08:54:00.039 [bus debug] arbitration lost (timed out)&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration delay 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus info] arbitration delay 13 - 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.108 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.133 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] arbitration delay 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus info] arbitration delay 13 - 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.154 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration delay 108 micros&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.199 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.200 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[09:04:29] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[09:04:30] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[09:04:30] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --latency=10 --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 09:04:40.550 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 09:04:40.763 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.807 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.852 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:40.852 [main error] initial scan failed: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.104 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.148 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.193 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.193 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A restart of HA or a reboot of RPI won&#039;t help at all.&lt;br /&gt;
To solve this the only solution I found was to fully shutdown the RPI, remove the power plug and put it back.&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1009</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1009"/>
		<updated>2026-05-08T19:36:57Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Recurring issue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = TempBottom|TempTop|SystemFlowTemp|^Status$|WaterHcFlowMax|ValveStarts|SHEMaxFlowTemp|PredSourcePressurePredCounter|PredWaterflowDevThreshold|PredWaterflowSwitchingP&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the application starts, it will fetch latest csv&#039;s &amp;amp; inc file from https://ebus.github.io/de/.&lt;br /&gt;
That&#039;s not ideal, let&#039;s depend only on local content:&lt;br /&gt;
&lt;br /&gt;
On your favorite endpoint:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://ebus.github.io/en/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/memory.csv&lt;br /&gt;
mkdir -p vaillant&lt;br /&gt;
cd vaillant&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/general.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/scan.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/08.bai.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/15.700.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/bai.0010006101.inc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add important missing VRC700 Humidity metric:&lt;br /&gt;
&amp;lt;pre&amp;gt;% diff -u 15.700.csv.20260328 15.700.csv &lt;br /&gt;
--- 15.700.csv.20260328	2026-02-01 17:09:58.000000000 +0100&lt;br /&gt;
+++ 15.700.csv	2026-03-28 21:29:44.000000000 +0100&lt;br /&gt;
@@ -33,6 +33,7 @@&lt;br /&gt;
 w,,,Time,time,,,b524,020100003500,value,,HTI,,,Aktuelle Uhrzeit&lt;br /&gt;
 r,,,HydraulicScheme,Systemschema,,,b524,020000003600,ign,,IGN:4,,,,value,,UIN,,,Systemschema&lt;br /&gt;
 w,,,HydraulicScheme,Systemschema,,,b524,020100003600,value,,UIN,,,Systemschema&lt;br /&gt;
+r,,,RoomHumidity,room humidity,,,b524,060009010700,ign,,IGN:4,,,,humidity,,EXP,,%,room humidity&lt;br /&gt;
 r,,,WaterPressure,water pressure,,,b524,020000003900,ign,,IGN:4,,,,value,,EXP,,bar,Wasserdruck&lt;br /&gt;
 r,,,SolarYieldTotal,total solar yield,,,b524,020000003d00,ign,,IGN:4,,,,value,,ULG,,kWh,Solarertrag gesamt&lt;br /&gt;
 w,,,SolarYieldTotal,total solar yield,,,b524,020100003d00,value,,ULG,,kWh,Solarertrag gesamt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload the definitions in the right container config directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
scp -P 22222 *.inc root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
cd ..&lt;br /&gt;
scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure eBUSd to use this configpath:&lt;br /&gt;
&amp;lt;pre&amp;gt;commandline_options:&lt;br /&gt;
  - &amp;quot;--mqttjson&amp;quot;&lt;br /&gt;
  - &amp;quot;--scanconfig&amp;quot;&lt;br /&gt;
  - &amp;quot;--log=all:error&amp;quot;&lt;br /&gt;
  - &amp;quot;--enabledefine&amp;quot;&lt;br /&gt;
  - &amp;quot;--configpath=/config/custom/&amp;quot;&lt;br /&gt;
network_device: ens:/dev/ttyACM0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TBC, copy the live container content to the general config:&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ pwd&lt;br /&gt;
/homeassistant/ebusd-configuration&lt;br /&gt;
[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ find .&lt;br /&gt;
.&lt;br /&gt;
./custom&lt;br /&gt;
./custom/vaillant&lt;br /&gt;
./custom/vaillant/bai.0010006101.inc&lt;br /&gt;
./custom/vaillant/08.bai.csv&lt;br /&gt;
./custom/vaillant/broadcast.csv&lt;br /&gt;
./custom/vaillant/15.700.csv&lt;br /&gt;
./custom/vaillant/scan.csv&lt;br /&gt;
./custom/vaillant/general.csv&lt;br /&gt;
./custom/memory.csv&lt;br /&gt;
./custom/broadcast.csv&lt;br /&gt;
./mqtt-hassio.cfg.2026032701&lt;br /&gt;
./mqtt-hassio.cfg&lt;br /&gt;
[core-ssh ebusd-configuration]$ &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 44&lt;br /&gt;
max symbol rate: 127&lt;br /&gt;
min arbitration micros: 3&lt;br /&gt;
max arbitration micros: 15&lt;br /&gt;
min symbol latency: 4&lt;br /&gt;
max symbol latency: 7&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 718&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 152&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl find -d -r&lt;br /&gt;
700 AdaptHeatCurve = no&lt;br /&gt;
700 DisplayedOutsideTemp = 6.375&lt;br /&gt;
700 Hc1ActualFlowTempDesired = 45.6435&lt;br /&gt;
700 Hc1AutoOffMode = night&lt;br /&gt;
700 Hc1ExcessTemp = 0.0&lt;br /&gt;
700 Hc1FlowTemp = 50&lt;br /&gt;
700 Hc1HeatCurve = 1.5&lt;br /&gt;
700 Hc1HeatCurveAdaption = 0.0&lt;br /&gt;
700 Hc1MaxFlowTempDesired = 90&lt;br /&gt;
700 Hc1MinFlowTempDesired = 15&lt;br /&gt;
700 Hc1PumpStatus = 1&lt;br /&gt;
700 Hc1RoomTempSwitchOn = thermostat&lt;br /&gt;
700 Hc1Status = 1&lt;br /&gt;
700 Hc1SummerTempLimit = 21&lt;br /&gt;
700 HcStorageTempBottom =  (empty for 3115b5240602000000a000 / 080000a000ffffff7f)&lt;br /&gt;
700 HcStorageTempTop =  (empty for 3115b52406020000009f00 / 0800009f00ffffff7f)&lt;br /&gt;
700 HolidayTemp = 10&lt;br /&gt;
700 HwcFlowTemp = 0.0&lt;br /&gt;
700 HwcMaxFlowTempDesired = 80&lt;br /&gt;
700 HwcOpMode = auto&lt;br /&gt;
700 HwcSFMode = auto&lt;br /&gt;
700 HwcStorageTemp = 23&lt;br /&gt;
700 HwcStorageTempBottom =  (empty for 3115b52406020000009e00 / 0800009e00ffffff7f)&lt;br /&gt;
700 HwcStorageTempTop =  (empty for 3115b52406020000009d00 / 0800009d00ffffff7f)&lt;br /&gt;
700 HwcTempDesired = 55&lt;br /&gt;
700 HwcTimer_Friday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Monday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Saturday = 07:00;07:50;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Sunday = 07:20;08:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Thursday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Tuesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Wednesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 MaxRoomHumidity = 40&lt;br /&gt;
700 OpMode = auto&lt;br /&gt;
700 OpModeCooling = auto&lt;br /&gt;
700 OpModeEffect = alle&lt;br /&gt;
700 OpModeVentilation = auto&lt;br /&gt;
700 OutsideTempAvg = 7.60156&lt;br /&gt;
700 PrEnergySum = 27&lt;br /&gt;
700 PrEnergySumHc = 27&lt;br /&gt;
700 PrEnergySumHcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHcThisMonth = 0&lt;br /&gt;
700 PrEnergySumHwc = 0&lt;br /&gt;
700 PrEnergySumHwcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHwcThisMonth = 0&lt;br /&gt;
700 RoomHumidity = 49&lt;br /&gt;
700 SFMode = auto&lt;br /&gt;
700 SolarYieldTotal = 0&lt;br /&gt;
700 SystemFlowTemp =  (empty for 3115b52406020000004b00 / 0800004b00ffffff7f)&lt;br /&gt;
700 WaterPressure = 2.1&lt;br /&gt;
700 YieldTotal = 0&lt;br /&gt;
700 Z1ActualRoomTempDesired = 19.5&lt;br /&gt;
700 Z1DayTemp = 19.5&lt;br /&gt;
700 Z1HolidayTemp = 10&lt;br /&gt;
700 Z1NightTemp = 15&lt;br /&gt;
700 Z1OpMode = auto&lt;br /&gt;
700 Z1OpModeCooling = auto&lt;br /&gt;
700 Z1QuickVetoTemp = 21&lt;br /&gt;
700 Z1RoomTemp = 19.5&lt;br /&gt;
700 Z1SFMode = auto&lt;br /&gt;
700 Z1Timer_Friday = 06:40;17:30;17:30;22:30;-:-;-:-&lt;br /&gt;
700 Z1Timer_Monday = 06:40;07:40;16:40;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Saturday = 07:30;22:30;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Sunday = 08:00;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Thursday = 06:40;07:40;15:10;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Tuesday = 06:40;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Wednesday = 06:40;22:00;22:00;22:00;-:-;-:-&lt;br /&gt;
700 Z1ValveStatus = 1&lt;br /&gt;
bai AATemp = 197.25;62379;cutoff&lt;br /&gt;
bai AITemp =  (ERR: invalid position for 3108b509030d3300 / 00)&lt;br /&gt;
bai CounterStartattempts1 = 7&lt;br /&gt;
bai CounterStartattempts2 = 1&lt;br /&gt;
bai CounterStartAttempts3 = 1&lt;br /&gt;
bai DateTime = valid;21:50:35;28.03.2026;8.375&lt;br /&gt;
bai DeactivationsTemplimiter = 0&lt;br /&gt;
bai DisplayMode = 129&lt;br /&gt;
bai ExhaustCurve = 0&lt;br /&gt;
bai ExhaustWayBlockCounter = 0&lt;br /&gt;
bai Expertlevel_ReturnTemp = -1.81;cutoff&lt;br /&gt;
bai ExternalFlowTempDesired = 90.00&lt;br /&gt;
bai ExtFlowTempDesiredMin = 45.50&lt;br /&gt;
bai FanHours = 32&lt;br /&gt;
bai FanStarts = 267&lt;br /&gt;
bai FlowTemp = 44.31;ok&lt;br /&gt;
bai FlowTempDesired = 45.50&lt;br /&gt;
bai HcHours = 26&lt;br /&gt;
bai HcPumpMode = permanent&lt;br /&gt;
bai HcPumpStarts = 211&lt;br /&gt;
bai HcStarts = 100&lt;br /&gt;
bai HcUnderHundredStarts = 94&lt;br /&gt;
bai HoursTillService = 3010&lt;br /&gt;
bai HwcHours = 5&lt;br /&gt;
bai HwcPostrunTime = 300&lt;br /&gt;
bai HwcStarts = 0&lt;br /&gt;
bai HwcTemp = -14.94;cutoff&lt;br /&gt;
bai HwcTempDesired = 0.00&lt;br /&gt;
bai HwcTempMax = 65.00&lt;br /&gt;
bai HwcUnderHundredStarts = 74&lt;br /&gt;
bai HwcWaterflow =  (ERR: invalid position for 3108b509030d5500 / 00)&lt;br /&gt;
bai HwcWaterflowMax =  (ERR: invalid position for 3108b509030d5600 / 00)&lt;br /&gt;
bai Maintenancedata_HwcTempMax = 0.00&lt;br /&gt;
bai OutdoorstempSensor = 8.19;ok&lt;br /&gt;
bai OverflowCounter = no&lt;br /&gt;
bai PowerValue =  (ERR: invalid position for 3108b509030daa00 / 00)&lt;br /&gt;
bai PrAPSCounter = 0&lt;br /&gt;
bai PredCombustionPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMRefPWMcounter = 0&lt;br /&gt;
bai PredIgnitionPredCounter = 0;0;0&lt;br /&gt;
bai PredSourcePressurePredCounter =  (ERR: invalid position for 3108b509030d4301 / 00)&lt;br /&gt;
bai PredWaterflowDevThreshold =  (ERR: invalid position for 3108b509030d4401 / 00)&lt;br /&gt;
bai PredWaterflowSwitchingPoint =  (ERR: invalid position for 3108b509030d4501 / 00)&lt;br /&gt;
bai PredWaterpressureMaxPressure = 4000&lt;br /&gt;
bai PredWaterpressureMinPressure = 0&lt;br /&gt;
bai PredWaterpressureSwitchingPoint = 0&lt;br /&gt;
bai PrEnergyCountHc1 = 9469&lt;br /&gt;
bai PrEnergyCountHwc1 = 1922&lt;br /&gt;
bai PrEnergyCountHwc2 = 0&lt;br /&gt;
bai PrEnergyCountHwc3 = 0&lt;br /&gt;
bai PrEnergySumHc1 = 18134146&lt;br /&gt;
bai PrEnergySumHwc1 = 6876091&lt;br /&gt;
bai PrEnergySumHwc2 = 0&lt;br /&gt;
bai PrEnergySumHwc3 = 0&lt;br /&gt;
bai PumpHours = 93&lt;br /&gt;
bai ReturnTemp = -13.50;215;cutoff&lt;br /&gt;
bai ReturnTempMax = 0.00&lt;br /&gt;
bai SecondPumpMode = 2&lt;br /&gt;
bai SHEMaxFlowTemp =  (ERR: invalid position for 3108b509030dc300 / 00)&lt;br /&gt;
bai Status01 = 47.0;-;8.375;0.0;23.0;off&lt;br /&gt;
bai Status02 = auto;60;75.0;80;55.0&lt;br /&gt;
bai Status16 =  (ERR: invalid position for 3108b5040116 / 00)&lt;br /&gt;
bai Status =  (ERR: invalid position for 3108b5110103 / 00)&lt;br /&gt;
bai StorageLoadPumpHours = 10&lt;br /&gt;
bai StorageloadPumpStarts = 16&lt;br /&gt;
bai StorageTemp = 23.00;ok&lt;br /&gt;
bai StorageTempDesired = 55.00&lt;br /&gt;
bai StorageTempMax = 58.38&lt;br /&gt;
bai TempDiffBlock = 0&lt;br /&gt;
bai TempDiffFailure = 0&lt;br /&gt;
bai TempGradientFailure = 0&lt;br /&gt;
bai Templimiter = on&lt;br /&gt;
bai TemplimiterWithNTC = yes&lt;br /&gt;
bai TempMaxDiffExtTFT = 0.00&lt;br /&gt;
bai TimerInputHc = on&lt;br /&gt;
bai ValveMode = 0&lt;br /&gt;
bai ValveStarts =  (ERR: invalid position for 3108b509030d1a00 / 00)&lt;br /&gt;
bai WaterHcFlowMax =  (ERR: invalid position for 3108b509030dd000 / 00)&lt;br /&gt;
bai WaterPressure = 2.160;ok&lt;br /&gt;
bai WaterpressureBranchControlOff = off&lt;br /&gt;
bai WaterpressureMeasureCounter = 0&lt;br /&gt;
bai WaterpressureVariantSum = 0&lt;br /&gt;
bai WPPostrunTime = 5&lt;br /&gt;
bai WPPWMPower = 30&lt;br /&gt;
bai WPPWMPowerDia = 101&lt;br /&gt;
scan.08  = Vaillant;BAI00;0703;7401&lt;br /&gt;
Scan.08 Id = ;;;;;;&lt;br /&gt;
scan.15  = Vaillant;70000;0510;6403&lt;br /&gt;
Scan.15 Id = 21;17;52;0020171315;0082;026621;N7&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl read RoomHumidity&lt;br /&gt;
49&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recurring issue ==&lt;br /&gt;
&lt;br /&gt;
After a restart of HA due to a third party module upgrade, the stick may have trouble getting info from the bus except for broadcasted data.&lt;br /&gt;
&lt;br /&gt;
Typical errors seen when restarting eBusd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:16:18] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:16:18] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:16:18] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:16:42.180 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:50.588 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:56.237 [bus error] poll bai CounterStartattempts1 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:02.215 [bus error] poll bai CounterStartattempts2 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:08.226 [bus error] poll bai CounterStartAttempts3 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:14.215 [bus error] poll bai DeactivationsTemplimiter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:20.239 [bus error] poll bai DisplayMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:26.251 [bus error] poll bai ExhaustCurve failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:32.227 [bus error] poll bai ExhaustWayBlockCounter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:38.234 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.217 [bus error] poll bai ExternalFlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.261 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:50.247 [bus error] poll bai ExtFlowTempDesiredMin failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:56.251 [bus error] poll bai FanHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:02.237 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:08.245 [bus error] poll bai FlowTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:14.234 [bus error] poll bai FlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:20.224 [bus error] poll bai HcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:26.238 [bus error] poll bai HcPumpMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:32.219 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:38.232 [bus error] poll bai HcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:44.221 [bus error] poll bai HcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:50.248 [bus error] poll bai HoursTillService failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.249 [bus error] poll bai HwcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.294 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:02.224 [bus error] poll bai HwcPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:08.234 [bus error] poll bai HwcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:14.227 [bus error] poll bai HwcTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-01 07:34:02.165 [bus error] poll bai WaterPressure failed: ERR: read timeout&lt;br /&gt;
2026-05-01 20:49:26.120 [bus error] poll bai StorageTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-02 02:54:50.171 [bus error] poll bai TimerInputHc failed: ERR: read timeout&lt;br /&gt;
2026-05-03 05:48:32.184 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 09:58:26.187 [bus error] poll bai WPPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:08:38.184 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:15:32.190 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 17:58:44.169 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 02:23:50.170 [bus error] poll bai WaterpressureVariantSum failed: ERR: read timeout&lt;br /&gt;
2026-05-04 07:57:14.187 [bus error] poll bai HwcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 15:13:08.205 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-05 14:21:32.154 [bus error] poll bai PrEnergySumHwc2 failed: ERR: read timeout&lt;br /&gt;
2026-05-05 22:48:26.170 [bus error] poll 700 Z1DayTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 00:42:26.190 [bus error] poll bai PrEnergySumHwc1 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 06:12:32.140 [bus error] poll 700 OutsideTempAvg failed: ERR: read timeout&lt;br /&gt;
2026-05-06 16:10:20.184 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 18:01:44.191 [bus error] poll bai PrEnergyCountHwc3 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:05:20.184 [bus error] poll bai ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:16:38.157 [bus error] poll bai HwcTempMax failed: ERR: read timeout&lt;br /&gt;
2026-05-07 07:29:14.167 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 09:44:50.167 [bus error] poll bai HwcStarts failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:50:35] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:50:35] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:50:35] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:50:56.736 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.459 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send message part 3: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.547 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.592 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.681 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.726 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [main error] error reading message Scan.08 Id: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[08:53:49] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[08:53:49] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[08:53:49] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:debug --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 08:53:49.815 [device notice] transport opened&lt;br /&gt;
2026-05-08 08:53:49.816 [main info] registering data handlers&lt;br /&gt;
2026-05-08 08:53:49.818 [mqtt info] mosquitto version 2.0.21 (compiled with 2.0.21)&lt;br /&gt;
2026-05-08 08:53:49.821 [mqtt debug] connection requested&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] registered data handlers&lt;br /&gt;
2026-05-08 08:53:49.821 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial high speed, enhanced&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] loading configuration files from /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] reading directory /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/vaillant is dir&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/memory.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/broadcast.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] reading file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] successfully read file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] reading file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] successfully read file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] read config files, got 17 messages&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] signal acquired&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt notice] connection established&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/version &amp;quot;ebusd 26.1.26.1&amp;quot;&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:51.874 [bus notice] new master 10, master count 2&lt;br /&gt;
2026-05-08 08:53:51.905 [bus notice] new master 03, master count 3&lt;br /&gt;
2026-05-08 08:53:51.905 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:51.905 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:53.596 [network info] [00001] client connection opened 127.0.0.1&lt;br /&gt;
2026-05-08 08:53:53.597 [network info] [00001] connection closed&lt;br /&gt;
2026-05-08 08:53:54.598 [network debug] dead connection removed - 0&lt;br /&gt;
2026-05-08 08:53:59.667 [update info] received MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.667 [update notice] received unknown MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.826 [main debug] performing regular tasks&lt;br /&gt;
2026-05-08 08:53:59.826 [main notice] starting initial broadcast scan&lt;br /&gt;
2026-05-08 08:53:59.826 [bus info] send message: 31fe07fe00&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.848 [device notice] reset, supports info&lt;br /&gt;
2026-05-08 08:53:59.852 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 08:53:59.852 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:53:59.946 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.947 [device notice] extra info: firmware 1.1[6112].1[6112], jumpers 0x03&lt;br /&gt;
2026-05-08 08:54:00.039 [bus debug] arbitration lost (timed out)&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration delay 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus info] arbitration delay 13 - 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.108 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.133 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] arbitration delay 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus info] arbitration delay 13 - 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.154 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration delay 108 micros&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.199 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.200 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[09:04:29] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[09:04:30] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[09:04:30] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --latency=10 --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 09:04:40.550 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 09:04:40.763 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.807 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.852 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:40.852 [main error] initial scan failed: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.104 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.148 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.193 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.193 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A restart of HA or a reboot of RPI won&#039;t help at all.&lt;br /&gt;
To solve this the only solution I found was to fully shutdown the RPI, remove the power plug and put it back.&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1008</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1008"/>
		<updated>2026-05-08T19:34:33Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Climate card */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = TempBottom|TempTop|SystemFlowTemp|^Status$|WaterHcFlowMax|ValveStarts|SHEMaxFlowTemp|PredSourcePressurePredCounter|PredWaterflowDevThreshold|PredWaterflowSwitchingP&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the application starts, it will fetch latest csv&#039;s &amp;amp; inc file from https://ebus.github.io/de/.&lt;br /&gt;
That&#039;s not ideal, let&#039;s depend only on local content:&lt;br /&gt;
&lt;br /&gt;
On your favorite endpoint:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://ebus.github.io/en/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/memory.csv&lt;br /&gt;
mkdir -p vaillant&lt;br /&gt;
cd vaillant&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/general.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/scan.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/08.bai.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/15.700.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/bai.0010006101.inc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add important missing VRC700 Humidity metric:&lt;br /&gt;
&amp;lt;pre&amp;gt;% diff -u 15.700.csv.20260328 15.700.csv &lt;br /&gt;
--- 15.700.csv.20260328	2026-02-01 17:09:58.000000000 +0100&lt;br /&gt;
+++ 15.700.csv	2026-03-28 21:29:44.000000000 +0100&lt;br /&gt;
@@ -33,6 +33,7 @@&lt;br /&gt;
 w,,,Time,time,,,b524,020100003500,value,,HTI,,,Aktuelle Uhrzeit&lt;br /&gt;
 r,,,HydraulicScheme,Systemschema,,,b524,020000003600,ign,,IGN:4,,,,value,,UIN,,,Systemschema&lt;br /&gt;
 w,,,HydraulicScheme,Systemschema,,,b524,020100003600,value,,UIN,,,Systemschema&lt;br /&gt;
+r,,,RoomHumidity,room humidity,,,b524,060009010700,ign,,IGN:4,,,,humidity,,EXP,,%,room humidity&lt;br /&gt;
 r,,,WaterPressure,water pressure,,,b524,020000003900,ign,,IGN:4,,,,value,,EXP,,bar,Wasserdruck&lt;br /&gt;
 r,,,SolarYieldTotal,total solar yield,,,b524,020000003d00,ign,,IGN:4,,,,value,,ULG,,kWh,Solarertrag gesamt&lt;br /&gt;
 w,,,SolarYieldTotal,total solar yield,,,b524,020100003d00,value,,ULG,,kWh,Solarertrag gesamt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload the definitions in the right container config directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
scp -P 22222 *.inc root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
cd ..&lt;br /&gt;
scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure eBUSd to use this configpath:&lt;br /&gt;
&amp;lt;pre&amp;gt;commandline_options:&lt;br /&gt;
  - &amp;quot;--mqttjson&amp;quot;&lt;br /&gt;
  - &amp;quot;--scanconfig&amp;quot;&lt;br /&gt;
  - &amp;quot;--log=all:error&amp;quot;&lt;br /&gt;
  - &amp;quot;--enabledefine&amp;quot;&lt;br /&gt;
  - &amp;quot;--configpath=/config/custom/&amp;quot;&lt;br /&gt;
network_device: ens:/dev/ttyACM0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TBC, copy the live container content to the general config:&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ pwd&lt;br /&gt;
/homeassistant/ebusd-configuration&lt;br /&gt;
[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ find .&lt;br /&gt;
.&lt;br /&gt;
./custom&lt;br /&gt;
./custom/vaillant&lt;br /&gt;
./custom/vaillant/bai.0010006101.inc&lt;br /&gt;
./custom/vaillant/08.bai.csv&lt;br /&gt;
./custom/vaillant/broadcast.csv&lt;br /&gt;
./custom/vaillant/15.700.csv&lt;br /&gt;
./custom/vaillant/scan.csv&lt;br /&gt;
./custom/vaillant/general.csv&lt;br /&gt;
./custom/memory.csv&lt;br /&gt;
./custom/broadcast.csv&lt;br /&gt;
./mqtt-hassio.cfg.2026032701&lt;br /&gt;
./mqtt-hassio.cfg&lt;br /&gt;
[core-ssh ebusd-configuration]$ &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 44&lt;br /&gt;
max symbol rate: 127&lt;br /&gt;
min arbitration micros: 3&lt;br /&gt;
max arbitration micros: 15&lt;br /&gt;
min symbol latency: 4&lt;br /&gt;
max symbol latency: 7&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 718&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 152&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl find -d -r&lt;br /&gt;
700 AdaptHeatCurve = no&lt;br /&gt;
700 DisplayedOutsideTemp = 6.375&lt;br /&gt;
700 Hc1ActualFlowTempDesired = 45.6435&lt;br /&gt;
700 Hc1AutoOffMode = night&lt;br /&gt;
700 Hc1ExcessTemp = 0.0&lt;br /&gt;
700 Hc1FlowTemp = 50&lt;br /&gt;
700 Hc1HeatCurve = 1.5&lt;br /&gt;
700 Hc1HeatCurveAdaption = 0.0&lt;br /&gt;
700 Hc1MaxFlowTempDesired = 90&lt;br /&gt;
700 Hc1MinFlowTempDesired = 15&lt;br /&gt;
700 Hc1PumpStatus = 1&lt;br /&gt;
700 Hc1RoomTempSwitchOn = thermostat&lt;br /&gt;
700 Hc1Status = 1&lt;br /&gt;
700 Hc1SummerTempLimit = 21&lt;br /&gt;
700 HcStorageTempBottom =  (empty for 3115b5240602000000a000 / 080000a000ffffff7f)&lt;br /&gt;
700 HcStorageTempTop =  (empty for 3115b52406020000009f00 / 0800009f00ffffff7f)&lt;br /&gt;
700 HolidayTemp = 10&lt;br /&gt;
700 HwcFlowTemp = 0.0&lt;br /&gt;
700 HwcMaxFlowTempDesired = 80&lt;br /&gt;
700 HwcOpMode = auto&lt;br /&gt;
700 HwcSFMode = auto&lt;br /&gt;
700 HwcStorageTemp = 23&lt;br /&gt;
700 HwcStorageTempBottom =  (empty for 3115b52406020000009e00 / 0800009e00ffffff7f)&lt;br /&gt;
700 HwcStorageTempTop =  (empty for 3115b52406020000009d00 / 0800009d00ffffff7f)&lt;br /&gt;
700 HwcTempDesired = 55&lt;br /&gt;
700 HwcTimer_Friday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Monday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Saturday = 07:00;07:50;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Sunday = 07:20;08:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Thursday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Tuesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Wednesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 MaxRoomHumidity = 40&lt;br /&gt;
700 OpMode = auto&lt;br /&gt;
700 OpModeCooling = auto&lt;br /&gt;
700 OpModeEffect = alle&lt;br /&gt;
700 OpModeVentilation = auto&lt;br /&gt;
700 OutsideTempAvg = 7.60156&lt;br /&gt;
700 PrEnergySum = 27&lt;br /&gt;
700 PrEnergySumHc = 27&lt;br /&gt;
700 PrEnergySumHcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHcThisMonth = 0&lt;br /&gt;
700 PrEnergySumHwc = 0&lt;br /&gt;
700 PrEnergySumHwcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHwcThisMonth = 0&lt;br /&gt;
700 RoomHumidity = 49&lt;br /&gt;
700 SFMode = auto&lt;br /&gt;
700 SolarYieldTotal = 0&lt;br /&gt;
700 SystemFlowTemp =  (empty for 3115b52406020000004b00 / 0800004b00ffffff7f)&lt;br /&gt;
700 WaterPressure = 2.1&lt;br /&gt;
700 YieldTotal = 0&lt;br /&gt;
700 Z1ActualRoomTempDesired = 19.5&lt;br /&gt;
700 Z1DayTemp = 19.5&lt;br /&gt;
700 Z1HolidayTemp = 10&lt;br /&gt;
700 Z1NightTemp = 15&lt;br /&gt;
700 Z1OpMode = auto&lt;br /&gt;
700 Z1OpModeCooling = auto&lt;br /&gt;
700 Z1QuickVetoTemp = 21&lt;br /&gt;
700 Z1RoomTemp = 19.5&lt;br /&gt;
700 Z1SFMode = auto&lt;br /&gt;
700 Z1Timer_Friday = 06:40;17:30;17:30;22:30;-:-;-:-&lt;br /&gt;
700 Z1Timer_Monday = 06:40;07:40;16:40;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Saturday = 07:30;22:30;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Sunday = 08:00;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Thursday = 06:40;07:40;15:10;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Tuesday = 06:40;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Wednesday = 06:40;22:00;22:00;22:00;-:-;-:-&lt;br /&gt;
700 Z1ValveStatus = 1&lt;br /&gt;
bai AATemp = 197.25;62379;cutoff&lt;br /&gt;
bai AITemp =  (ERR: invalid position for 3108b509030d3300 / 00)&lt;br /&gt;
bai CounterStartattempts1 = 7&lt;br /&gt;
bai CounterStartattempts2 = 1&lt;br /&gt;
bai CounterStartAttempts3 = 1&lt;br /&gt;
bai DateTime = valid;21:50:35;28.03.2026;8.375&lt;br /&gt;
bai DeactivationsTemplimiter = 0&lt;br /&gt;
bai DisplayMode = 129&lt;br /&gt;
bai ExhaustCurve = 0&lt;br /&gt;
bai ExhaustWayBlockCounter = 0&lt;br /&gt;
bai Expertlevel_ReturnTemp = -1.81;cutoff&lt;br /&gt;
bai ExternalFlowTempDesired = 90.00&lt;br /&gt;
bai ExtFlowTempDesiredMin = 45.50&lt;br /&gt;
bai FanHours = 32&lt;br /&gt;
bai FanStarts = 267&lt;br /&gt;
bai FlowTemp = 44.31;ok&lt;br /&gt;
bai FlowTempDesired = 45.50&lt;br /&gt;
bai HcHours = 26&lt;br /&gt;
bai HcPumpMode = permanent&lt;br /&gt;
bai HcPumpStarts = 211&lt;br /&gt;
bai HcStarts = 100&lt;br /&gt;
bai HcUnderHundredStarts = 94&lt;br /&gt;
bai HoursTillService = 3010&lt;br /&gt;
bai HwcHours = 5&lt;br /&gt;
bai HwcPostrunTime = 300&lt;br /&gt;
bai HwcStarts = 0&lt;br /&gt;
bai HwcTemp = -14.94;cutoff&lt;br /&gt;
bai HwcTempDesired = 0.00&lt;br /&gt;
bai HwcTempMax = 65.00&lt;br /&gt;
bai HwcUnderHundredStarts = 74&lt;br /&gt;
bai HwcWaterflow =  (ERR: invalid position for 3108b509030d5500 / 00)&lt;br /&gt;
bai HwcWaterflowMax =  (ERR: invalid position for 3108b509030d5600 / 00)&lt;br /&gt;
bai Maintenancedata_HwcTempMax = 0.00&lt;br /&gt;
bai OutdoorstempSensor = 8.19;ok&lt;br /&gt;
bai OverflowCounter = no&lt;br /&gt;
bai PowerValue =  (ERR: invalid position for 3108b509030daa00 / 00)&lt;br /&gt;
bai PrAPSCounter = 0&lt;br /&gt;
bai PredCombustionPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMRefPWMcounter = 0&lt;br /&gt;
bai PredIgnitionPredCounter = 0;0;0&lt;br /&gt;
bai PredSourcePressurePredCounter =  (ERR: invalid position for 3108b509030d4301 / 00)&lt;br /&gt;
bai PredWaterflowDevThreshold =  (ERR: invalid position for 3108b509030d4401 / 00)&lt;br /&gt;
bai PredWaterflowSwitchingPoint =  (ERR: invalid position for 3108b509030d4501 / 00)&lt;br /&gt;
bai PredWaterpressureMaxPressure = 4000&lt;br /&gt;
bai PredWaterpressureMinPressure = 0&lt;br /&gt;
bai PredWaterpressureSwitchingPoint = 0&lt;br /&gt;
bai PrEnergyCountHc1 = 9469&lt;br /&gt;
bai PrEnergyCountHwc1 = 1922&lt;br /&gt;
bai PrEnergyCountHwc2 = 0&lt;br /&gt;
bai PrEnergyCountHwc3 = 0&lt;br /&gt;
bai PrEnergySumHc1 = 18134146&lt;br /&gt;
bai PrEnergySumHwc1 = 6876091&lt;br /&gt;
bai PrEnergySumHwc2 = 0&lt;br /&gt;
bai PrEnergySumHwc3 = 0&lt;br /&gt;
bai PumpHours = 93&lt;br /&gt;
bai ReturnTemp = -13.50;215;cutoff&lt;br /&gt;
bai ReturnTempMax = 0.00&lt;br /&gt;
bai SecondPumpMode = 2&lt;br /&gt;
bai SHEMaxFlowTemp =  (ERR: invalid position for 3108b509030dc300 / 00)&lt;br /&gt;
bai Status01 = 47.0;-;8.375;0.0;23.0;off&lt;br /&gt;
bai Status02 = auto;60;75.0;80;55.0&lt;br /&gt;
bai Status16 =  (ERR: invalid position for 3108b5040116 / 00)&lt;br /&gt;
bai Status =  (ERR: invalid position for 3108b5110103 / 00)&lt;br /&gt;
bai StorageLoadPumpHours = 10&lt;br /&gt;
bai StorageloadPumpStarts = 16&lt;br /&gt;
bai StorageTemp = 23.00;ok&lt;br /&gt;
bai StorageTempDesired = 55.00&lt;br /&gt;
bai StorageTempMax = 58.38&lt;br /&gt;
bai TempDiffBlock = 0&lt;br /&gt;
bai TempDiffFailure = 0&lt;br /&gt;
bai TempGradientFailure = 0&lt;br /&gt;
bai Templimiter = on&lt;br /&gt;
bai TemplimiterWithNTC = yes&lt;br /&gt;
bai TempMaxDiffExtTFT = 0.00&lt;br /&gt;
bai TimerInputHc = on&lt;br /&gt;
bai ValveMode = 0&lt;br /&gt;
bai ValveStarts =  (ERR: invalid position for 3108b509030d1a00 / 00)&lt;br /&gt;
bai WaterHcFlowMax =  (ERR: invalid position for 3108b509030dd000 / 00)&lt;br /&gt;
bai WaterPressure = 2.160;ok&lt;br /&gt;
bai WaterpressureBranchControlOff = off&lt;br /&gt;
bai WaterpressureMeasureCounter = 0&lt;br /&gt;
bai WaterpressureVariantSum = 0&lt;br /&gt;
bai WPPostrunTime = 5&lt;br /&gt;
bai WPPWMPower = 30&lt;br /&gt;
bai WPPWMPowerDia = 101&lt;br /&gt;
scan.08  = Vaillant;BAI00;0703;7401&lt;br /&gt;
Scan.08 Id = ;;;;;;&lt;br /&gt;
scan.15  = Vaillant;70000;0510;6403&lt;br /&gt;
Scan.15 Id = 21;17;52;0020171315;0082;026621;N7&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl read RoomHumidity&lt;br /&gt;
49&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recurring issue ==&lt;br /&gt;
&lt;br /&gt;
After a restart of HA due to a third party module upgrade, the stick may have trouble getting info from the bus except for broadcasted data.&lt;br /&gt;
&lt;br /&gt;
Typical errors seen when restarting eBusd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:16:18] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:16:18] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:16:18] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:16:42.180 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:50.588 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:16:56.237 [bus error] poll bai CounterStartattempts1 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:02.215 [bus error] poll bai CounterStartattempts2 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:08.226 [bus error] poll bai CounterStartAttempts3 failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:14.215 [bus error] poll bai DeactivationsTemplimiter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:20.239 [bus error] poll bai DisplayMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:26.251 [bus error] poll bai ExhaustCurve failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:32.227 [bus error] poll bai ExhaustWayBlockCounter failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:38.234 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.217 [bus error] poll bai ExternalFlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:44.261 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:50.247 [bus error] poll bai ExtFlowTempDesiredMin failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:17:56.251 [bus error] poll bai FanHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:02.237 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:08.245 [bus error] poll bai FlowTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:14.234 [bus error] poll bai FlowTempDesired failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:20.224 [bus error] poll bai HcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:26.238 [bus error] poll bai HcPumpMode failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:32.219 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:38.232 [bus error] poll bai HcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:44.221 [bus error] poll bai HcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:50.248 [bus error] poll bai HoursTillService failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.249 [bus error] poll bai HwcHours failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:18:56.294 [main error] scan config 15: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:02.224 [bus error] poll bai HwcPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:08.234 [bus error] poll bai HwcStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 23:19:14.227 [bus error] poll bai HwcTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-01 07:34:02.165 [bus error] poll bai WaterPressure failed: ERR: read timeout&lt;br /&gt;
2026-05-01 20:49:26.120 [bus error] poll bai StorageTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-02 02:54:50.171 [bus error] poll bai TimerInputHc failed: ERR: read timeout&lt;br /&gt;
2026-05-03 05:48:32.184 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 09:58:26.187 [bus error] poll bai WPPostrunTime failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:08:38.184 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-03 15:15:32.190 [bus error] poll bai AATemp failed: ERR: read timeout&lt;br /&gt;
2026-05-03 17:58:44.169 [bus error] poll bai FanStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 02:23:50.170 [bus error] poll bai WaterpressureVariantSum failed: ERR: read timeout&lt;br /&gt;
2026-05-04 07:57:14.187 [bus error] poll bai HwcUnderHundredStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-04 15:13:08.205 [bus error] poll bai WaterpressureBranchControlOff failed: ERR: read timeout&lt;br /&gt;
2026-05-05 14:21:32.154 [bus error] poll bai PrEnergySumHwc2 failed: ERR: read timeout&lt;br /&gt;
2026-05-05 22:48:26.170 [bus error] poll 700 Z1DayTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 00:42:26.190 [bus error] poll bai PrEnergySumHwc1 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 06:12:32.140 [bus error] poll 700 OutsideTempAvg failed: ERR: read timeout&lt;br /&gt;
2026-05-06 16:10:20.184 [bus error] poll bai Expertlevel_ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 18:01:44.191 [bus error] poll bai PrEnergyCountHwc3 failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:05:20.184 [bus error] poll bai ReturnTemp failed: ERR: read timeout&lt;br /&gt;
2026-05-06 22:16:38.157 [bus error] poll bai HwcTempMax failed: ERR: read timeout&lt;br /&gt;
2026-05-07 07:29:14.167 [bus error] poll bai HcPumpStarts failed: ERR: read timeout&lt;br /&gt;
2026-05-07 09:44:50.167 [bus error] poll bai HwcStarts failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[23:50:35] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[23:50:35] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[23:50:35] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-07 23:50:56.736 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.459 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [bus error] send message part 3: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.503 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.547 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.592 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.636 [main error] error reading message Scan.08 Id: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.681 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.726 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [bus error] send message part 0: ERR: read timeout&lt;br /&gt;
2026-05-07 23:50:57.770 [main error] error reading message Scan.08 Id: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[08:53:49] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[08:53:49] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[08:53:49] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:debug --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 08:53:49.815 [device notice] transport opened&lt;br /&gt;
2026-05-08 08:53:49.816 [main info] registering data handlers&lt;br /&gt;
2026-05-08 08:53:49.818 [mqtt info] mosquitto version 2.0.21 (compiled with 2.0.21)&lt;br /&gt;
2026-05-08 08:53:49.821 [mqtt debug] connection requested&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] registered data handlers&lt;br /&gt;
2026-05-08 08:53:49.821 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial high speed, enhanced&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] loading configuration files from /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] reading directory /config/custom/&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/vaillant is dir&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/memory.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main debug] file type of /config/custom/broadcast.csv is file&lt;br /&gt;
2026-05-08 08:53:49.821 [main info] reading file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] successfully read file memory.csv&lt;br /&gt;
2026-05-08 08:53:49.823 [main info] reading file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] successfully read file broadcast.csv&lt;br /&gt;
2026-05-08 08:53:49.824 [main info] read config files, got 17 messages&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-05-08 08:53:49.825 [bus notice] signal acquired&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt notice] connection established&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/version &amp;quot;ebusd 26.1.26.1&amp;quot;&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:49.827 [mqtt debug] publish ebusd/global/running true&lt;br /&gt;
2026-05-08 08:53:51.874 [bus notice] new master 10, master count 2&lt;br /&gt;
2026-05-08 08:53:51.905 [bus notice] new master 03, master count 3&lt;br /&gt;
2026-05-08 08:53:51.905 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:51.905 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:53.596 [network info] [00001] client connection opened 127.0.0.1&lt;br /&gt;
2026-05-08 08:53:53.597 [network info] [00001] connection closed&lt;br /&gt;
2026-05-08 08:53:54.598 [network debug] dead connection removed - 0&lt;br /&gt;
2026-05-08 08:53:59.667 [update info] received MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.667 [update notice] received unknown MS cmd: 1008b5110101 / 0948ff500e006a0000ff&lt;br /&gt;
2026-05-08 08:53:59.826 [main debug] performing regular tasks&lt;br /&gt;
2026-05-08 08:53:59.826 [main notice] starting initial broadcast scan&lt;br /&gt;
2026-05-08 08:53:59.826 [bus info] send message: 31fe07fe00&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.848 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.848 [device notice] reset, supports info&lt;br /&gt;
2026-05-08 08:53:59.852 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 08:53:59.852 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:53:59.946 [update info] received MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [update notice] received unknown MS cmd: 1008b510090000496effff040000 / 0101&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:53:59.946 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:53:59.947 [device notice] extra info: firmware 1.1[6112].1[6112], jumpers 0x03&lt;br /&gt;
2026-05-08 08:54:00.039 [bus debug] arbitration lost (timed out)&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] ERR: arbitration lost during ready, retry&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.040 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] arbitration delay 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus info] arbitration delay 13 - 13 micros&lt;br /&gt;
2026-05-08 08:54:00.088 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.108 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.108 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.130 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.133 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] arbitration delay 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus info] arbitration delay 13 - 124 micros&lt;br /&gt;
2026-05-08 08:54:00.134 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.154 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.154 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] start request 31&lt;br /&gt;
2026-05-08 08:54:00.175 [bus debug] arbitration start with 31&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration won&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] arbitration delay 108 micros&lt;br /&gt;
2026-05-08 08:54:00.179 [bus debug] switching from ready to send command&lt;br /&gt;
2026-05-08 08:54:00.199 [bus debug] notify request: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [bus debug] ERR: read timeout during send command, switching to skip&lt;br /&gt;
2026-05-08 08:54:00.200 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 08:54:00.200 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[09:04:29] INFO: eBUSd addon version 26.1.8&lt;br /&gt;
[09:04:30] INFO: mqtt-hassio.cfg exists in config folder and seed_mqtt_cfg is true — set seed_mqtt_cfg: false and add --mqttint=/config/mqtt-hassio.cfg and --mqttjson to commandline_options if you no longer need auto-seeding.&lt;br /&gt;
[09:04:30] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttint=/config/mqtt-hassio.cfg --device=ens:/dev/ttyACM0 --mqttjson --scanconfig --log=all:error --latency=10 --enabledefine --configpath=/config/custom/ &lt;br /&gt;
2026-05-08 09:04:40.550 [bus error] arbitration start error&lt;br /&gt;
2026-05-08 09:04:40.763 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.807 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:40.852 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:40.852 [main error] initial scan failed: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.104 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.148 [bus error] send to fe: ERR: read timeout, retry&lt;br /&gt;
2026-05-08 09:04:51.193 [bus error] send to fe: ERR: read timeout&lt;br /&gt;
2026-05-08 09:04:51.193 [main error] initial scan failed: ERR: read timeout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A restart of HA, reboot of RPI won&#039;t help at all.&lt;br /&gt;
To solve this the only solution I found was to fully shutdown the RPI, remove the power plug and put it back.&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=1007</id>
		<title>FreeBSD</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=1007"/>
		<updated>2026-04-18T18:33:53Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* PF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Named =&lt;br /&gt;
== Manually updating a Dynamic controlled zone ==&lt;br /&gt;
&#039;&#039;&amp;quot;If you have to edit the zone files of dynamic zones manually while the DNS server is running, you&#039;ll have to freeze the zones with &#039;&#039;&#039;# rndc freeze &amp;lt;myzone&amp;gt;&#039;&#039;&#039; before editing and unfreeze them with &#039;&#039;&#039;# rndc thaw &amp;lt;myzone&amp;gt;&#039;&#039;&#039; after editing. This is because named(8) has internal state information and external journal files attached to dynamic zones that have to be kept in sync with the zone files&amp;lt;ref&amp;gt;https://forums.freebsd.org/threads/dynamic-dns-with-bind-and-isc-dhcp-server.33849/&amp;lt;/ref&amp;gt;&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Rsync = &lt;br /&gt;
&lt;br /&gt;
To delete files in the target if they disappeared from the source, then add the --delete option to your command. For example:&lt;br /&gt;
&lt;br /&gt;
rsync -avh source/ dest/ --delete&amp;lt;br&amp;gt;&lt;br /&gt;
NB: -avh is for --archive --verbose --human-readable&amp;lt;ref&amp;gt;https://askubuntu.com/a/665918&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Migration of folders to a new server ==&lt;br /&gt;
&lt;br /&gt;
=== One shot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av /var/db/ports/ root@newice3:/var/db/ports/&lt;br /&gt;
rsync -av /etc/ root@newice3:/etc/oldice3/&lt;br /&gt;
rsync -av /usr/local/etc/ root@newice3:/usr/local/etc/oldice3/&lt;br /&gt;
rsync -av /etc/ssh/ssh_config /etc/ssh/sshd_config newice3:/etc/ssh/&lt;br /&gt;
rsync -av /etc/banner /etc/motd.template /etc/pki/ newice3:/etc/&lt;br /&gt;
rsync -av /etc/pki/ newice3:/etc/pki/&lt;br /&gt;
rsync -av /usr/local/lib/sasl2/smtpd.conf root@newice3:/usr/local/lib/sasl2/&lt;br /&gt;
rsync -av /var/ftp/ newice3:/var/ftp/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1 full + diff at the migration time === &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av --exclude={&#039;rc.d&#039;,&#039;oldice3&#039;,&#039;newice3&#039;,&#039;namedb&#039;,&#039;openvpn&#039;,&#039;pkg.conf&#039;,&#039;portsnap.conf&#039;} /usr/local/etc/ root@newice3:/usr/local/etc/ --delete --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.ip.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam_awstats.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /root/ root@newice3:/root/ --delete --dry-run&lt;br /&gt;
rsync -av /home/ root@newice3:/home/ --delete --dry-run&lt;br /&gt;
rsync -av /var/www/ root@newice3:/var/www/ --delete --dry-run&lt;br /&gt;
rsync -av /usr/local/www/ root@newice3:/usr/local/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/ root@newice3:/var/log/oldice3/ --delete --dry-run&lt;br /&gt;
rsync -av /var/awstats/ root@newice3:/var/awstats/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/www/ root@newice3:/var/log/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/fail2ban/ root@newice3:/var/db/fail2ban/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/mysql/ root@newice3:/var/db/mysql/ --delete --dry-run (to do when mysql server is off)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Nginx =&lt;br /&gt;
== Maxmind ==&lt;br /&gt;
Country based filtering can be performed in nginx thanks to the free Maxmind databases.&lt;br /&gt;
&lt;br /&gt;
A cron job shall be used to update these databases on a daily basis&amp;lt;ref&amp;gt;https://herrbischoff.com/2021/05/nginx-how-to-restrict-access-by-geographical-location-on-freebsd/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ZFS snapshots = &lt;br /&gt;
FreeBSD creates a snapshot at each update (freebsd-update fetch &amp;amp;&amp;amp; freebsd-update install). These snapshots are not needed anymore should your system restarts &amp;amp; runs correctly. Moreover they take loads of space on your hardrive.&lt;br /&gt;
&lt;br /&gt;
== Procedure to delete ==&lt;br /&gt;
&lt;br /&gt;
=== List &amp;amp; check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE                                Active Mountpoint Space Created&lt;br /&gt;
14.3-RELEASE-p6_2025-12-19_121434 -      -          927M  2025-12-19 12:14&lt;br /&gt;
default                           NR     /          814G  2023-12-01 23:34&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check that the active Boot Envionment is the default (NR set on default).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
NAME                                       USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
zroot/ROOT/default@2025-12-19-12:14:34-0   927M      -   812G  -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl destroy 14.3-RELEASE-p6_2025-12-19_121434&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Results ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE      Active Mountpoint Space Created&lt;br /&gt;
default NR     /          813G  2023-12-01 23:34&lt;br /&gt;
root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
no datasets available&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reboot or no reboot after a minor system upgrade ? =&lt;br /&gt;
&lt;br /&gt;
After a system upgrade performed thanks to :&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-update fetch&lt;br /&gt;
root@icecube BSD:~ # freebsd-update install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output of these two commands differs, then reboot your system:&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-version -k&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
root@icecube BSD:~ # uname -r&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PF =&lt;br /&gt;
After a reboot of FreeBSD, PF may fail to start due to tables being too big (i.e. &amp;gt; 100k entries).&amp;lt;br&amp;gt;&lt;br /&gt;
This is explained here with a quick &amp;amp; dirty non-permanent fix :&amp;lt;br&amp;gt;&lt;br /&gt;
https://forums.freebsd.org/threads/table-loading-in-pf-issues.86101/#post-577832&lt;br /&gt;
# First load the PF Options only (specific to big tables handling):&lt;br /&gt;
&amp;lt;pre&amp;gt;pfctl -Of /etc/pf.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then restart PF the usual way&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf/etc/pf.conf:98: cannot define table firehol4: Cannot allocate memory&lt;br /&gt;
pfctl: Syntax error in config file: pf rules not loaded&lt;br /&gt;
/etc/rc.d/pf: WARNING: Unable to load /etc/pf.conf.&lt;br /&gt;
.&lt;br /&gt;
root@icecube BSD:~ # sed -n &#039;98p&#039; /etc/pf.conf&lt;br /&gt;
table &amp;lt;firehol4&amp;gt; persist file &amp;quot;/etc/pf_table_firehol4&amp;quot;&lt;br /&gt;
root@icecube BSD:~ # wc -l /etc/pf_table_firehol4&lt;br /&gt;
   99856 /etc/pf_table_firehol4&lt;br /&gt;
root@icecube BSD:~ # pfctl -Of /etc/pf.conf&lt;br /&gt;
root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf.&lt;br /&gt;
root@icecube BSD:~ # &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
{{references}}&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1006</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1006"/>
		<updated>2026-03-31T20:47:33Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = TempBottom|TempTop|SystemFlowTemp|^Status$|WaterHcFlowMax|ValveStarts|SHEMaxFlowTemp|PredSourcePressurePredCounter|PredWaterflowDevThreshold|PredWaterflowSwitchingP&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the application starts, it will fetch latest csv&#039;s &amp;amp; inc file from https://ebus.github.io/de/.&lt;br /&gt;
That&#039;s not ideal, let&#039;s depend only on local content:&lt;br /&gt;
&lt;br /&gt;
On your favorite endpoint:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://ebus.github.io/en/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/memory.csv&lt;br /&gt;
mkdir -p vaillant&lt;br /&gt;
cd vaillant&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/general.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/scan.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/08.bai.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/15.700.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/bai.0010006101.inc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add important missing VRC700 Humidity metric:&lt;br /&gt;
&amp;lt;pre&amp;gt;% diff -u 15.700.csv.20260328 15.700.csv &lt;br /&gt;
--- 15.700.csv.20260328	2026-02-01 17:09:58.000000000 +0100&lt;br /&gt;
+++ 15.700.csv	2026-03-28 21:29:44.000000000 +0100&lt;br /&gt;
@@ -33,6 +33,7 @@&lt;br /&gt;
 w,,,Time,time,,,b524,020100003500,value,,HTI,,,Aktuelle Uhrzeit&lt;br /&gt;
 r,,,HydraulicScheme,Systemschema,,,b524,020000003600,ign,,IGN:4,,,,value,,UIN,,,Systemschema&lt;br /&gt;
 w,,,HydraulicScheme,Systemschema,,,b524,020100003600,value,,UIN,,,Systemschema&lt;br /&gt;
+r,,,RoomHumidity,room humidity,,,b524,060009010700,ign,,IGN:4,,,,humidity,,EXP,,%,room humidity&lt;br /&gt;
 r,,,WaterPressure,water pressure,,,b524,020000003900,ign,,IGN:4,,,,value,,EXP,,bar,Wasserdruck&lt;br /&gt;
 r,,,SolarYieldTotal,total solar yield,,,b524,020000003d00,ign,,IGN:4,,,,value,,ULG,,kWh,Solarertrag gesamt&lt;br /&gt;
 w,,,SolarYieldTotal,total solar yield,,,b524,020100003d00,value,,ULG,,kWh,Solarertrag gesamt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload the definitions in the right container config directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
scp -P 22222 *.inc root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
cd ..&lt;br /&gt;
scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure eBUSd to use this configpath:&lt;br /&gt;
&amp;lt;pre&amp;gt;commandline_options:&lt;br /&gt;
  - &amp;quot;--mqttjson&amp;quot;&lt;br /&gt;
  - &amp;quot;--scanconfig&amp;quot;&lt;br /&gt;
  - &amp;quot;--log=all:error&amp;quot;&lt;br /&gt;
  - &amp;quot;--enabledefine&amp;quot;&lt;br /&gt;
  - &amp;quot;--configpath=/config/custom/&amp;quot;&lt;br /&gt;
network_device: ens:/dev/ttyACM0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TBC, copy the live container content to the general config:&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ pwd&lt;br /&gt;
/homeassistant/ebusd-configuration&lt;br /&gt;
[core-ssh ebusd-configuration]$ cp -rpf /addon_configs/b4d7ad18_ebusd/* .&lt;br /&gt;
[core-ssh ebusd-configuration]$ find .&lt;br /&gt;
.&lt;br /&gt;
./custom&lt;br /&gt;
./custom/vaillant&lt;br /&gt;
./custom/vaillant/bai.0010006101.inc&lt;br /&gt;
./custom/vaillant/08.bai.csv&lt;br /&gt;
./custom/vaillant/broadcast.csv&lt;br /&gt;
./custom/vaillant/15.700.csv&lt;br /&gt;
./custom/vaillant/scan.csv&lt;br /&gt;
./custom/vaillant/general.csv&lt;br /&gt;
./custom/memory.csv&lt;br /&gt;
./custom/broadcast.csv&lt;br /&gt;
./mqtt-hassio.cfg.2026032701&lt;br /&gt;
./mqtt-hassio.cfg&lt;br /&gt;
[core-ssh ebusd-configuration]$ &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 44&lt;br /&gt;
max symbol rate: 127&lt;br /&gt;
min arbitration micros: 3&lt;br /&gt;
max arbitration micros: 15&lt;br /&gt;
min symbol latency: 4&lt;br /&gt;
max symbol latency: 7&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 718&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 152&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl find -d -r&lt;br /&gt;
700 AdaptHeatCurve = no&lt;br /&gt;
700 DisplayedOutsideTemp = 6.375&lt;br /&gt;
700 Hc1ActualFlowTempDesired = 45.6435&lt;br /&gt;
700 Hc1AutoOffMode = night&lt;br /&gt;
700 Hc1ExcessTemp = 0.0&lt;br /&gt;
700 Hc1FlowTemp = 50&lt;br /&gt;
700 Hc1HeatCurve = 1.5&lt;br /&gt;
700 Hc1HeatCurveAdaption = 0.0&lt;br /&gt;
700 Hc1MaxFlowTempDesired = 90&lt;br /&gt;
700 Hc1MinFlowTempDesired = 15&lt;br /&gt;
700 Hc1PumpStatus = 1&lt;br /&gt;
700 Hc1RoomTempSwitchOn = thermostat&lt;br /&gt;
700 Hc1Status = 1&lt;br /&gt;
700 Hc1SummerTempLimit = 21&lt;br /&gt;
700 HcStorageTempBottom =  (empty for 3115b5240602000000a000 / 080000a000ffffff7f)&lt;br /&gt;
700 HcStorageTempTop =  (empty for 3115b52406020000009f00 / 0800009f00ffffff7f)&lt;br /&gt;
700 HolidayTemp = 10&lt;br /&gt;
700 HwcFlowTemp = 0.0&lt;br /&gt;
700 HwcMaxFlowTempDesired = 80&lt;br /&gt;
700 HwcOpMode = auto&lt;br /&gt;
700 HwcSFMode = auto&lt;br /&gt;
700 HwcStorageTemp = 23&lt;br /&gt;
700 HwcStorageTempBottom =  (empty for 3115b52406020000009e00 / 0800009e00ffffff7f)&lt;br /&gt;
700 HwcStorageTempTop =  (empty for 3115b52406020000009d00 / 0800009d00ffffff7f)&lt;br /&gt;
700 HwcTempDesired = 55&lt;br /&gt;
700 HwcTimer_Friday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Monday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Saturday = 07:00;07:50;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Sunday = 07:20;08:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Thursday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Tuesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Wednesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 MaxRoomHumidity = 40&lt;br /&gt;
700 OpMode = auto&lt;br /&gt;
700 OpModeCooling = auto&lt;br /&gt;
700 OpModeEffect = alle&lt;br /&gt;
700 OpModeVentilation = auto&lt;br /&gt;
700 OutsideTempAvg = 7.60156&lt;br /&gt;
700 PrEnergySum = 27&lt;br /&gt;
700 PrEnergySumHc = 27&lt;br /&gt;
700 PrEnergySumHcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHcThisMonth = 0&lt;br /&gt;
700 PrEnergySumHwc = 0&lt;br /&gt;
700 PrEnergySumHwcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHwcThisMonth = 0&lt;br /&gt;
700 RoomHumidity = 49&lt;br /&gt;
700 SFMode = auto&lt;br /&gt;
700 SolarYieldTotal = 0&lt;br /&gt;
700 SystemFlowTemp =  (empty for 3115b52406020000004b00 / 0800004b00ffffff7f)&lt;br /&gt;
700 WaterPressure = 2.1&lt;br /&gt;
700 YieldTotal = 0&lt;br /&gt;
700 Z1ActualRoomTempDesired = 19.5&lt;br /&gt;
700 Z1DayTemp = 19.5&lt;br /&gt;
700 Z1HolidayTemp = 10&lt;br /&gt;
700 Z1NightTemp = 15&lt;br /&gt;
700 Z1OpMode = auto&lt;br /&gt;
700 Z1OpModeCooling = auto&lt;br /&gt;
700 Z1QuickVetoTemp = 21&lt;br /&gt;
700 Z1RoomTemp = 19.5&lt;br /&gt;
700 Z1SFMode = auto&lt;br /&gt;
700 Z1Timer_Friday = 06:40;17:30;17:30;22:30;-:-;-:-&lt;br /&gt;
700 Z1Timer_Monday = 06:40;07:40;16:40;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Saturday = 07:30;22:30;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Sunday = 08:00;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Thursday = 06:40;07:40;15:10;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Tuesday = 06:40;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Wednesday = 06:40;22:00;22:00;22:00;-:-;-:-&lt;br /&gt;
700 Z1ValveStatus = 1&lt;br /&gt;
bai AATemp = 197.25;62379;cutoff&lt;br /&gt;
bai AITemp =  (ERR: invalid position for 3108b509030d3300 / 00)&lt;br /&gt;
bai CounterStartattempts1 = 7&lt;br /&gt;
bai CounterStartattempts2 = 1&lt;br /&gt;
bai CounterStartAttempts3 = 1&lt;br /&gt;
bai DateTime = valid;21:50:35;28.03.2026;8.375&lt;br /&gt;
bai DeactivationsTemplimiter = 0&lt;br /&gt;
bai DisplayMode = 129&lt;br /&gt;
bai ExhaustCurve = 0&lt;br /&gt;
bai ExhaustWayBlockCounter = 0&lt;br /&gt;
bai Expertlevel_ReturnTemp = -1.81;cutoff&lt;br /&gt;
bai ExternalFlowTempDesired = 90.00&lt;br /&gt;
bai ExtFlowTempDesiredMin = 45.50&lt;br /&gt;
bai FanHours = 32&lt;br /&gt;
bai FanStarts = 267&lt;br /&gt;
bai FlowTemp = 44.31;ok&lt;br /&gt;
bai FlowTempDesired = 45.50&lt;br /&gt;
bai HcHours = 26&lt;br /&gt;
bai HcPumpMode = permanent&lt;br /&gt;
bai HcPumpStarts = 211&lt;br /&gt;
bai HcStarts = 100&lt;br /&gt;
bai HcUnderHundredStarts = 94&lt;br /&gt;
bai HoursTillService = 3010&lt;br /&gt;
bai HwcHours = 5&lt;br /&gt;
bai HwcPostrunTime = 300&lt;br /&gt;
bai HwcStarts = 0&lt;br /&gt;
bai HwcTemp = -14.94;cutoff&lt;br /&gt;
bai HwcTempDesired = 0.00&lt;br /&gt;
bai HwcTempMax = 65.00&lt;br /&gt;
bai HwcUnderHundredStarts = 74&lt;br /&gt;
bai HwcWaterflow =  (ERR: invalid position for 3108b509030d5500 / 00)&lt;br /&gt;
bai HwcWaterflowMax =  (ERR: invalid position for 3108b509030d5600 / 00)&lt;br /&gt;
bai Maintenancedata_HwcTempMax = 0.00&lt;br /&gt;
bai OutdoorstempSensor = 8.19;ok&lt;br /&gt;
bai OverflowCounter = no&lt;br /&gt;
bai PowerValue =  (ERR: invalid position for 3108b509030daa00 / 00)&lt;br /&gt;
bai PrAPSCounter = 0&lt;br /&gt;
bai PredCombustionPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMRefPWMcounter = 0&lt;br /&gt;
bai PredIgnitionPredCounter = 0;0;0&lt;br /&gt;
bai PredSourcePressurePredCounter =  (ERR: invalid position for 3108b509030d4301 / 00)&lt;br /&gt;
bai PredWaterflowDevThreshold =  (ERR: invalid position for 3108b509030d4401 / 00)&lt;br /&gt;
bai PredWaterflowSwitchingPoint =  (ERR: invalid position for 3108b509030d4501 / 00)&lt;br /&gt;
bai PredWaterpressureMaxPressure = 4000&lt;br /&gt;
bai PredWaterpressureMinPressure = 0&lt;br /&gt;
bai PredWaterpressureSwitchingPoint = 0&lt;br /&gt;
bai PrEnergyCountHc1 = 9469&lt;br /&gt;
bai PrEnergyCountHwc1 = 1922&lt;br /&gt;
bai PrEnergyCountHwc2 = 0&lt;br /&gt;
bai PrEnergyCountHwc3 = 0&lt;br /&gt;
bai PrEnergySumHc1 = 18134146&lt;br /&gt;
bai PrEnergySumHwc1 = 6876091&lt;br /&gt;
bai PrEnergySumHwc2 = 0&lt;br /&gt;
bai PrEnergySumHwc3 = 0&lt;br /&gt;
bai PumpHours = 93&lt;br /&gt;
bai ReturnTemp = -13.50;215;cutoff&lt;br /&gt;
bai ReturnTempMax = 0.00&lt;br /&gt;
bai SecondPumpMode = 2&lt;br /&gt;
bai SHEMaxFlowTemp =  (ERR: invalid position for 3108b509030dc300 / 00)&lt;br /&gt;
bai Status01 = 47.0;-;8.375;0.0;23.0;off&lt;br /&gt;
bai Status02 = auto;60;75.0;80;55.0&lt;br /&gt;
bai Status16 =  (ERR: invalid position for 3108b5040116 / 00)&lt;br /&gt;
bai Status =  (ERR: invalid position for 3108b5110103 / 00)&lt;br /&gt;
bai StorageLoadPumpHours = 10&lt;br /&gt;
bai StorageloadPumpStarts = 16&lt;br /&gt;
bai StorageTemp = 23.00;ok&lt;br /&gt;
bai StorageTempDesired = 55.00&lt;br /&gt;
bai StorageTempMax = 58.38&lt;br /&gt;
bai TempDiffBlock = 0&lt;br /&gt;
bai TempDiffFailure = 0&lt;br /&gt;
bai TempGradientFailure = 0&lt;br /&gt;
bai Templimiter = on&lt;br /&gt;
bai TemplimiterWithNTC = yes&lt;br /&gt;
bai TempMaxDiffExtTFT = 0.00&lt;br /&gt;
bai TimerInputHc = on&lt;br /&gt;
bai ValveMode = 0&lt;br /&gt;
bai ValveStarts =  (ERR: invalid position for 3108b509030d1a00 / 00)&lt;br /&gt;
bai WaterHcFlowMax =  (ERR: invalid position for 3108b509030dd000 / 00)&lt;br /&gt;
bai WaterPressure = 2.160;ok&lt;br /&gt;
bai WaterpressureBranchControlOff = off&lt;br /&gt;
bai WaterpressureMeasureCounter = 0&lt;br /&gt;
bai WaterpressureVariantSum = 0&lt;br /&gt;
bai WPPostrunTime = 5&lt;br /&gt;
bai WPPWMPower = 30&lt;br /&gt;
bai WPPWMPowerDia = 101&lt;br /&gt;
scan.08  = Vaillant;BAI00;0703;7401&lt;br /&gt;
Scan.08 Id = ;;;;;;&lt;br /&gt;
scan.15  = Vaillant;70000;0510;6403&lt;br /&gt;
Scan.15 Id = 21;17;52;0020171315;0082;026621;N7&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl read RoomHumidity&lt;br /&gt;
49&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1005</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1005"/>
		<updated>2026-03-28T20:56:53Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = Z1Cooling|VentilationTimer|NoiseReductionTimer|TariffTimer|Hc2|Hc3|Z2|Z3|CcTimer&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the application starts, it will fetch latest csv&#039;s &amp;amp; inc file from https://ebus.github.io/de/.&lt;br /&gt;
That&#039;s not ideal, let&#039;s depend only on local content:&lt;br /&gt;
&lt;br /&gt;
On your favorite endpoint:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://ebus.github.io/en/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/memory.csv&lt;br /&gt;
mkdir -p vaillant&lt;br /&gt;
cd vaillant&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/general.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/scan.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/08.bai.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/15.700.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/bai.0010006101.inc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add important missing VRC700 Humidity metric:&lt;br /&gt;
&amp;lt;pre&amp;gt;% diff -u 15.700.csv.20260328 15.700.csv &lt;br /&gt;
--- 15.700.csv.20260328	2026-02-01 17:09:58.000000000 +0100&lt;br /&gt;
+++ 15.700.csv	2026-03-28 21:29:44.000000000 +0100&lt;br /&gt;
@@ -33,6 +33,7 @@&lt;br /&gt;
 w,,,Time,time,,,b524,020100003500,value,,HTI,,,Aktuelle Uhrzeit&lt;br /&gt;
 r,,,HydraulicScheme,Systemschema,,,b524,020000003600,ign,,IGN:4,,,,value,,UIN,,,Systemschema&lt;br /&gt;
 w,,,HydraulicScheme,Systemschema,,,b524,020100003600,value,,UIN,,,Systemschema&lt;br /&gt;
+r,,,RoomHumidity,room humidity,,,b524,060009010700,ign,,IGN:4,,,,humidity,,EXP,,%,room humidity&lt;br /&gt;
 r,,,WaterPressure,water pressure,,,b524,020000003900,ign,,IGN:4,,,,value,,EXP,,bar,Wasserdruck&lt;br /&gt;
 r,,,SolarYieldTotal,total solar yield,,,b524,020000003d00,ign,,IGN:4,,,,value,,ULG,,kWh,Solarertrag gesamt&lt;br /&gt;
 w,,,SolarYieldTotal,total solar yield,,,b524,020100003d00,value,,ULG,,kWh,Solarertrag gesamt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload the definitions in the right container config directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
scp -P 22222 *.inc root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
cd ..&lt;br /&gt;
scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure eBUSd to use this configpath:&lt;br /&gt;
&amp;lt;pre&amp;gt;commandline_options:&lt;br /&gt;
  - &amp;quot;--mqttjson&amp;quot;&lt;br /&gt;
  - &amp;quot;--scanconfig&amp;quot;&lt;br /&gt;
  - &amp;quot;--log=all:error&amp;quot;&lt;br /&gt;
  - &amp;quot;--enabledefine&amp;quot;&lt;br /&gt;
  - &amp;quot;--configpath=/config/custom/&amp;quot;&lt;br /&gt;
network_device: ens:/dev/ttyACM0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 44&lt;br /&gt;
max symbol rate: 127&lt;br /&gt;
min arbitration micros: 3&lt;br /&gt;
max arbitration micros: 15&lt;br /&gt;
min symbol latency: 4&lt;br /&gt;
max symbol latency: 7&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 718&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 152&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl find -d -r&lt;br /&gt;
700 AdaptHeatCurve = no&lt;br /&gt;
700 DisplayedOutsideTemp = 6.375&lt;br /&gt;
700 Hc1ActualFlowTempDesired = 45.6435&lt;br /&gt;
700 Hc1AutoOffMode = night&lt;br /&gt;
700 Hc1ExcessTemp = 0.0&lt;br /&gt;
700 Hc1FlowTemp = 50&lt;br /&gt;
700 Hc1HeatCurve = 1.5&lt;br /&gt;
700 Hc1HeatCurveAdaption = 0.0&lt;br /&gt;
700 Hc1MaxFlowTempDesired = 90&lt;br /&gt;
700 Hc1MinFlowTempDesired = 15&lt;br /&gt;
700 Hc1PumpStatus = 1&lt;br /&gt;
700 Hc1RoomTempSwitchOn = thermostat&lt;br /&gt;
700 Hc1Status = 1&lt;br /&gt;
700 Hc1SummerTempLimit = 21&lt;br /&gt;
700 HcStorageTempBottom =  (empty for 3115b5240602000000a000 / 080000a000ffffff7f)&lt;br /&gt;
700 HcStorageTempTop =  (empty for 3115b52406020000009f00 / 0800009f00ffffff7f)&lt;br /&gt;
700 HolidayTemp = 10&lt;br /&gt;
700 HwcFlowTemp = 0.0&lt;br /&gt;
700 HwcMaxFlowTempDesired = 80&lt;br /&gt;
700 HwcOpMode = auto&lt;br /&gt;
700 HwcSFMode = auto&lt;br /&gt;
700 HwcStorageTemp = 23&lt;br /&gt;
700 HwcStorageTempBottom =  (empty for 3115b52406020000009e00 / 0800009e00ffffff7f)&lt;br /&gt;
700 HwcStorageTempTop =  (empty for 3115b52406020000009d00 / 0800009d00ffffff7f)&lt;br /&gt;
700 HwcTempDesired = 55&lt;br /&gt;
700 HwcTimer_Friday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Monday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Saturday = 07:00;07:50;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Sunday = 07:20;08:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Thursday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Tuesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Wednesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 MaxRoomHumidity = 40&lt;br /&gt;
700 OpMode = auto&lt;br /&gt;
700 OpModeCooling = auto&lt;br /&gt;
700 OpModeEffect = alle&lt;br /&gt;
700 OpModeVentilation = auto&lt;br /&gt;
700 OutsideTempAvg = 7.60156&lt;br /&gt;
700 PrEnergySum = 27&lt;br /&gt;
700 PrEnergySumHc = 27&lt;br /&gt;
700 PrEnergySumHcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHcThisMonth = 0&lt;br /&gt;
700 PrEnergySumHwc = 0&lt;br /&gt;
700 PrEnergySumHwcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHwcThisMonth = 0&lt;br /&gt;
700 RoomHumidity = 49&lt;br /&gt;
700 SFMode = auto&lt;br /&gt;
700 SolarYieldTotal = 0&lt;br /&gt;
700 SystemFlowTemp =  (empty for 3115b52406020000004b00 / 0800004b00ffffff7f)&lt;br /&gt;
700 WaterPressure = 2.1&lt;br /&gt;
700 YieldTotal = 0&lt;br /&gt;
700 Z1ActualRoomTempDesired = 19.5&lt;br /&gt;
700 Z1DayTemp = 19.5&lt;br /&gt;
700 Z1HolidayTemp = 10&lt;br /&gt;
700 Z1NightTemp = 15&lt;br /&gt;
700 Z1OpMode = auto&lt;br /&gt;
700 Z1OpModeCooling = auto&lt;br /&gt;
700 Z1QuickVetoTemp = 21&lt;br /&gt;
700 Z1RoomTemp = 19.5&lt;br /&gt;
700 Z1SFMode = auto&lt;br /&gt;
700 Z1Timer_Friday = 06:40;17:30;17:30;22:30;-:-;-:-&lt;br /&gt;
700 Z1Timer_Monday = 06:40;07:40;16:40;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Saturday = 07:30;22:30;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Sunday = 08:00;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Thursday = 06:40;07:40;15:10;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Tuesday = 06:40;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Wednesday = 06:40;22:00;22:00;22:00;-:-;-:-&lt;br /&gt;
700 Z1ValveStatus = 1&lt;br /&gt;
bai AATemp = 197.25;62379;cutoff&lt;br /&gt;
bai AITemp =  (ERR: invalid position for 3108b509030d3300 / 00)&lt;br /&gt;
bai CounterStartattempts1 = 7&lt;br /&gt;
bai CounterStartattempts2 = 1&lt;br /&gt;
bai CounterStartAttempts3 = 1&lt;br /&gt;
bai DateTime = valid;21:50:35;28.03.2026;8.375&lt;br /&gt;
bai DeactivationsTemplimiter = 0&lt;br /&gt;
bai DisplayMode = 129&lt;br /&gt;
bai ExhaustCurve = 0&lt;br /&gt;
bai ExhaustWayBlockCounter = 0&lt;br /&gt;
bai Expertlevel_ReturnTemp = -1.81;cutoff&lt;br /&gt;
bai ExternalFlowTempDesired = 90.00&lt;br /&gt;
bai ExtFlowTempDesiredMin = 45.50&lt;br /&gt;
bai FanHours = 32&lt;br /&gt;
bai FanStarts = 267&lt;br /&gt;
bai FlowTemp = 44.31;ok&lt;br /&gt;
bai FlowTempDesired = 45.50&lt;br /&gt;
bai HcHours = 26&lt;br /&gt;
bai HcPumpMode = permanent&lt;br /&gt;
bai HcPumpStarts = 211&lt;br /&gt;
bai HcStarts = 100&lt;br /&gt;
bai HcUnderHundredStarts = 94&lt;br /&gt;
bai HoursTillService = 3010&lt;br /&gt;
bai HwcHours = 5&lt;br /&gt;
bai HwcPostrunTime = 300&lt;br /&gt;
bai HwcStarts = 0&lt;br /&gt;
bai HwcTemp = -14.94;cutoff&lt;br /&gt;
bai HwcTempDesired = 0.00&lt;br /&gt;
bai HwcTempMax = 65.00&lt;br /&gt;
bai HwcUnderHundredStarts = 74&lt;br /&gt;
bai HwcWaterflow =  (ERR: invalid position for 3108b509030d5500 / 00)&lt;br /&gt;
bai HwcWaterflowMax =  (ERR: invalid position for 3108b509030d5600 / 00)&lt;br /&gt;
bai Maintenancedata_HwcTempMax = 0.00&lt;br /&gt;
bai OutdoorstempSensor = 8.19;ok&lt;br /&gt;
bai OverflowCounter = no&lt;br /&gt;
bai PowerValue =  (ERR: invalid position for 3108b509030daa00 / 00)&lt;br /&gt;
bai PrAPSCounter = 0&lt;br /&gt;
bai PredCombustionPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMRefPWMcounter = 0&lt;br /&gt;
bai PredIgnitionPredCounter = 0;0;0&lt;br /&gt;
bai PredSourcePressurePredCounter =  (ERR: invalid position for 3108b509030d4301 / 00)&lt;br /&gt;
bai PredWaterflowDevThreshold =  (ERR: invalid position for 3108b509030d4401 / 00)&lt;br /&gt;
bai PredWaterflowSwitchingPoint =  (ERR: invalid position for 3108b509030d4501 / 00)&lt;br /&gt;
bai PredWaterpressureMaxPressure = 4000&lt;br /&gt;
bai PredWaterpressureMinPressure = 0&lt;br /&gt;
bai PredWaterpressureSwitchingPoint = 0&lt;br /&gt;
bai PrEnergyCountHc1 = 9469&lt;br /&gt;
bai PrEnergyCountHwc1 = 1922&lt;br /&gt;
bai PrEnergyCountHwc2 = 0&lt;br /&gt;
bai PrEnergyCountHwc3 = 0&lt;br /&gt;
bai PrEnergySumHc1 = 18134146&lt;br /&gt;
bai PrEnergySumHwc1 = 6876091&lt;br /&gt;
bai PrEnergySumHwc2 = 0&lt;br /&gt;
bai PrEnergySumHwc3 = 0&lt;br /&gt;
bai PumpHours = 93&lt;br /&gt;
bai ReturnTemp = -13.50;215;cutoff&lt;br /&gt;
bai ReturnTempMax = 0.00&lt;br /&gt;
bai SecondPumpMode = 2&lt;br /&gt;
bai SHEMaxFlowTemp =  (ERR: invalid position for 3108b509030dc300 / 00)&lt;br /&gt;
bai Status01 = 47.0;-;8.375;0.0;23.0;off&lt;br /&gt;
bai Status02 = auto;60;75.0;80;55.0&lt;br /&gt;
bai Status16 =  (ERR: invalid position for 3108b5040116 / 00)&lt;br /&gt;
bai Status =  (ERR: invalid position for 3108b5110103 / 00)&lt;br /&gt;
bai StorageLoadPumpHours = 10&lt;br /&gt;
bai StorageloadPumpStarts = 16&lt;br /&gt;
bai StorageTemp = 23.00;ok&lt;br /&gt;
bai StorageTempDesired = 55.00&lt;br /&gt;
bai StorageTempMax = 58.38&lt;br /&gt;
bai TempDiffBlock = 0&lt;br /&gt;
bai TempDiffFailure = 0&lt;br /&gt;
bai TempGradientFailure = 0&lt;br /&gt;
bai Templimiter = on&lt;br /&gt;
bai TemplimiterWithNTC = yes&lt;br /&gt;
bai TempMaxDiffExtTFT = 0.00&lt;br /&gt;
bai TimerInputHc = on&lt;br /&gt;
bai ValveMode = 0&lt;br /&gt;
bai ValveStarts =  (ERR: invalid position for 3108b509030d1a00 / 00)&lt;br /&gt;
bai WaterHcFlowMax =  (ERR: invalid position for 3108b509030dd000 / 00)&lt;br /&gt;
bai WaterPressure = 2.160;ok&lt;br /&gt;
bai WaterpressureBranchControlOff = off&lt;br /&gt;
bai WaterpressureMeasureCounter = 0&lt;br /&gt;
bai WaterpressureVariantSum = 0&lt;br /&gt;
bai WPPostrunTime = 5&lt;br /&gt;
bai WPPWMPower = 30&lt;br /&gt;
bai WPPWMPowerDia = 101&lt;br /&gt;
scan.08  = Vaillant;BAI00;0703;7401&lt;br /&gt;
Scan.08 Id = ;;;;;;&lt;br /&gt;
scan.15  = Vaillant;70000;0510;6403&lt;br /&gt;
Scan.15 Id = 21;17;52;0020171315;0082;026621;N7&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl read RoomHumidity&lt;br /&gt;
49&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1004</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1004"/>
		<updated>2026-03-28T20:56:08Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = Z1Cooling|VentilationTimer|NoiseReductionTimer|TariffTimer|Hc2|Hc3|Z2|Z3|CcTimer&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the application starts, it will fetch latest csv&#039;s &amp;amp; inc file from https://ebus.github.io/de/.&lt;br /&gt;
That&#039;s not ideal, let&#039;s depend only on local content:&lt;br /&gt;
&lt;br /&gt;
On your favorite endpoint:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://ebus.github.io/en/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/memory.csv&lt;br /&gt;
mkdir -p vaillant&lt;br /&gt;
cd vaillant&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/broadcast.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/general.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/scan.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/08.bai.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/15.700.csv&lt;br /&gt;
wget https://ebus.github.io/en/vaillant/bai.0010006101.inc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add important missing VRC700 Humidity metric:&lt;br /&gt;
&amp;lt;pre&amp;gt;% diff -u 15.700.csv.20260328 15.700.csv &lt;br /&gt;
--- 15.700.csv.20260328	2026-02-01 17:09:58.000000000 +0100&lt;br /&gt;
+++ 15.700.csv	2026-03-28 21:29:44.000000000 +0100&lt;br /&gt;
@@ -33,6 +33,7 @@&lt;br /&gt;
 w,,,Time,time,,,b524,020100003500,value,,HTI,,,Aktuelle Uhrzeit&lt;br /&gt;
 r,,,HydraulicScheme,Systemschema,,,b524,020000003600,ign,,IGN:4,,,,value,,UIN,,,Systemschema&lt;br /&gt;
 w,,,HydraulicScheme,Systemschema,,,b524,020100003600,value,,UIN,,,Systemschema&lt;br /&gt;
+r,,,RoomHumidity,room humidity,,,b524,060009010700,ign,,IGN:4,,,,humidity,,EXP,,%,room humidity&lt;br /&gt;
 r,,,WaterPressure,water pressure,,,b524,020000003900,ign,,IGN:4,,,,value,,EXP,,bar,Wasserdruck&lt;br /&gt;
 r,,,SolarYieldTotal,total solar yield,,,b524,020000003d00,ign,,IGN:4,,,,value,,ULG,,kWh,Solarertrag gesamt&lt;br /&gt;
 w,,,SolarYieldTotal,total solar yield,,,b524,020100003d00,value,,ULG,,kWh,Solarertrag gesamt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload the definitions in the right container config directory:&lt;br /&gt;
&amp;lt;/pre&amp;gt;scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
scp -P 22222 *.inc root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/vaillant/&lt;br /&gt;
cd ..&lt;br /&gt;
scp -P 22222 *.csv root@192.168.1.111:/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd/custom/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure eBUSd to use this configpath:&lt;br /&gt;
&amp;lt;pre&amp;gt;commandline_options:&lt;br /&gt;
  - &amp;quot;--mqttjson&amp;quot;&lt;br /&gt;
  - &amp;quot;--scanconfig&amp;quot;&lt;br /&gt;
  - &amp;quot;--log=all:error&amp;quot;&lt;br /&gt;
  - &amp;quot;--enabledefine&amp;quot;&lt;br /&gt;
  - &amp;quot;--configpath=/config/custom/&amp;quot;&lt;br /&gt;
network_device: ens:/dev/ttyACM0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 44&lt;br /&gt;
max symbol rate: 127&lt;br /&gt;
min arbitration micros: 3&lt;br /&gt;
max arbitration micros: 15&lt;br /&gt;
min symbol latency: 4&lt;br /&gt;
max symbol latency: 7&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 718&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 152&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl find -d -r&lt;br /&gt;
700 AdaptHeatCurve = no&lt;br /&gt;
700 DisplayedOutsideTemp = 6.375&lt;br /&gt;
700 Hc1ActualFlowTempDesired = 45.6435&lt;br /&gt;
700 Hc1AutoOffMode = night&lt;br /&gt;
700 Hc1ExcessTemp = 0.0&lt;br /&gt;
700 Hc1FlowTemp = 50&lt;br /&gt;
700 Hc1HeatCurve = 1.5&lt;br /&gt;
700 Hc1HeatCurveAdaption = 0.0&lt;br /&gt;
700 Hc1MaxFlowTempDesired = 90&lt;br /&gt;
700 Hc1MinFlowTempDesired = 15&lt;br /&gt;
700 Hc1PumpStatus = 1&lt;br /&gt;
700 Hc1RoomTempSwitchOn = thermostat&lt;br /&gt;
700 Hc1Status = 1&lt;br /&gt;
700 Hc1SummerTempLimit = 21&lt;br /&gt;
700 HcStorageTempBottom =  (empty for 3115b5240602000000a000 / 080000a000ffffff7f)&lt;br /&gt;
700 HcStorageTempTop =  (empty for 3115b52406020000009f00 / 0800009f00ffffff7f)&lt;br /&gt;
700 HolidayTemp = 10&lt;br /&gt;
700 HwcFlowTemp = 0.0&lt;br /&gt;
700 HwcMaxFlowTempDesired = 80&lt;br /&gt;
700 HwcOpMode = auto&lt;br /&gt;
700 HwcSFMode = auto&lt;br /&gt;
700 HwcStorageTemp = 23&lt;br /&gt;
700 HwcStorageTempBottom =  (empty for 3115b52406020000009e00 / 0800009e00ffffff7f)&lt;br /&gt;
700 HwcStorageTempTop =  (empty for 3115b52406020000009d00 / 0800009d00ffffff7f)&lt;br /&gt;
700 HwcTempDesired = 55&lt;br /&gt;
700 HwcTimer_Friday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Monday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Saturday = 07:00;07:50;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Sunday = 07:20;08:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Thursday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Tuesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Wednesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 MaxRoomHumidity = 40&lt;br /&gt;
700 OpMode = auto&lt;br /&gt;
700 OpModeCooling = auto&lt;br /&gt;
700 OpModeEffect = alle&lt;br /&gt;
700 OpModeVentilation = auto&lt;br /&gt;
700 OutsideTempAvg = 7.60156&lt;br /&gt;
700 PrEnergySum = 27&lt;br /&gt;
700 PrEnergySumHc = 27&lt;br /&gt;
700 PrEnergySumHcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHcThisMonth = 0&lt;br /&gt;
700 PrEnergySumHwc = 0&lt;br /&gt;
700 PrEnergySumHwcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHwcThisMonth = 0&lt;br /&gt;
700 RoomHumidity = 49&lt;br /&gt;
700 SFMode = auto&lt;br /&gt;
700 SolarYieldTotal = 0&lt;br /&gt;
700 SystemFlowTemp =  (empty for 3115b52406020000004b00 / 0800004b00ffffff7f)&lt;br /&gt;
700 WaterPressure = 2.1&lt;br /&gt;
700 YieldTotal = 0&lt;br /&gt;
700 Z1ActualRoomTempDesired = 19.5&lt;br /&gt;
700 Z1DayTemp = 19.5&lt;br /&gt;
700 Z1HolidayTemp = 10&lt;br /&gt;
700 Z1NightTemp = 15&lt;br /&gt;
700 Z1OpMode = auto&lt;br /&gt;
700 Z1OpModeCooling = auto&lt;br /&gt;
700 Z1QuickVetoTemp = 21&lt;br /&gt;
700 Z1RoomTemp = 19.5&lt;br /&gt;
700 Z1SFMode = auto&lt;br /&gt;
700 Z1Timer_Friday = 06:40;17:30;17:30;22:30;-:-;-:-&lt;br /&gt;
700 Z1Timer_Monday = 06:40;07:40;16:40;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Saturday = 07:30;22:30;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Sunday = 08:00;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Thursday = 06:40;07:40;15:10;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Tuesday = 06:40;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Wednesday = 06:40;22:00;22:00;22:00;-:-;-:-&lt;br /&gt;
700 Z1ValveStatus = 1&lt;br /&gt;
bai AATemp = 197.25;62379;cutoff&lt;br /&gt;
bai AITemp =  (ERR: invalid position for 3108b509030d3300 / 00)&lt;br /&gt;
bai CounterStartattempts1 = 7&lt;br /&gt;
bai CounterStartattempts2 = 1&lt;br /&gt;
bai CounterStartAttempts3 = 1&lt;br /&gt;
bai DateTime = valid;21:50:35;28.03.2026;8.375&lt;br /&gt;
bai DeactivationsTemplimiter = 0&lt;br /&gt;
bai DisplayMode = 129&lt;br /&gt;
bai ExhaustCurve = 0&lt;br /&gt;
bai ExhaustWayBlockCounter = 0&lt;br /&gt;
bai Expertlevel_ReturnTemp = -1.81;cutoff&lt;br /&gt;
bai ExternalFlowTempDesired = 90.00&lt;br /&gt;
bai ExtFlowTempDesiredMin = 45.50&lt;br /&gt;
bai FanHours = 32&lt;br /&gt;
bai FanStarts = 267&lt;br /&gt;
bai FlowTemp = 44.31;ok&lt;br /&gt;
bai FlowTempDesired = 45.50&lt;br /&gt;
bai HcHours = 26&lt;br /&gt;
bai HcPumpMode = permanent&lt;br /&gt;
bai HcPumpStarts = 211&lt;br /&gt;
bai HcStarts = 100&lt;br /&gt;
bai HcUnderHundredStarts = 94&lt;br /&gt;
bai HoursTillService = 3010&lt;br /&gt;
bai HwcHours = 5&lt;br /&gt;
bai HwcPostrunTime = 300&lt;br /&gt;
bai HwcStarts = 0&lt;br /&gt;
bai HwcTemp = -14.94;cutoff&lt;br /&gt;
bai HwcTempDesired = 0.00&lt;br /&gt;
bai HwcTempMax = 65.00&lt;br /&gt;
bai HwcUnderHundredStarts = 74&lt;br /&gt;
bai HwcWaterflow =  (ERR: invalid position for 3108b509030d5500 / 00)&lt;br /&gt;
bai HwcWaterflowMax =  (ERR: invalid position for 3108b509030d5600 / 00)&lt;br /&gt;
bai Maintenancedata_HwcTempMax = 0.00&lt;br /&gt;
bai OutdoorstempSensor = 8.19;ok&lt;br /&gt;
bai OverflowCounter = no&lt;br /&gt;
bai PowerValue =  (ERR: invalid position for 3108b509030daa00 / 00)&lt;br /&gt;
bai PrAPSCounter = 0&lt;br /&gt;
bai PredCombustionPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMRefPWMcounter = 0&lt;br /&gt;
bai PredIgnitionPredCounter = 0;0;0&lt;br /&gt;
bai PredSourcePressurePredCounter =  (ERR: invalid position for 3108b509030d4301 / 00)&lt;br /&gt;
bai PredWaterflowDevThreshold =  (ERR: invalid position for 3108b509030d4401 / 00)&lt;br /&gt;
bai PredWaterflowSwitchingPoint =  (ERR: invalid position for 3108b509030d4501 / 00)&lt;br /&gt;
bai PredWaterpressureMaxPressure = 4000&lt;br /&gt;
bai PredWaterpressureMinPressure = 0&lt;br /&gt;
bai PredWaterpressureSwitchingPoint = 0&lt;br /&gt;
bai PrEnergyCountHc1 = 9469&lt;br /&gt;
bai PrEnergyCountHwc1 = 1922&lt;br /&gt;
bai PrEnergyCountHwc2 = 0&lt;br /&gt;
bai PrEnergyCountHwc3 = 0&lt;br /&gt;
bai PrEnergySumHc1 = 18134146&lt;br /&gt;
bai PrEnergySumHwc1 = 6876091&lt;br /&gt;
bai PrEnergySumHwc2 = 0&lt;br /&gt;
bai PrEnergySumHwc3 = 0&lt;br /&gt;
bai PumpHours = 93&lt;br /&gt;
bai ReturnTemp = -13.50;215;cutoff&lt;br /&gt;
bai ReturnTempMax = 0.00&lt;br /&gt;
bai SecondPumpMode = 2&lt;br /&gt;
bai SHEMaxFlowTemp =  (ERR: invalid position for 3108b509030dc300 / 00)&lt;br /&gt;
bai Status01 = 47.0;-;8.375;0.0;23.0;off&lt;br /&gt;
bai Status02 = auto;60;75.0;80;55.0&lt;br /&gt;
bai Status16 =  (ERR: invalid position for 3108b5040116 / 00)&lt;br /&gt;
bai Status =  (ERR: invalid position for 3108b5110103 / 00)&lt;br /&gt;
bai StorageLoadPumpHours = 10&lt;br /&gt;
bai StorageloadPumpStarts = 16&lt;br /&gt;
bai StorageTemp = 23.00;ok&lt;br /&gt;
bai StorageTempDesired = 55.00&lt;br /&gt;
bai StorageTempMax = 58.38&lt;br /&gt;
bai TempDiffBlock = 0&lt;br /&gt;
bai TempDiffFailure = 0&lt;br /&gt;
bai TempGradientFailure = 0&lt;br /&gt;
bai Templimiter = on&lt;br /&gt;
bai TemplimiterWithNTC = yes&lt;br /&gt;
bai TempMaxDiffExtTFT = 0.00&lt;br /&gt;
bai TimerInputHc = on&lt;br /&gt;
bai ValveMode = 0&lt;br /&gt;
bai ValveStarts =  (ERR: invalid position for 3108b509030d1a00 / 00)&lt;br /&gt;
bai WaterHcFlowMax =  (ERR: invalid position for 3108b509030dd000 / 00)&lt;br /&gt;
bai WaterPressure = 2.160;ok&lt;br /&gt;
bai WaterpressureBranchControlOff = off&lt;br /&gt;
bai WaterpressureMeasureCounter = 0&lt;br /&gt;
bai WaterpressureVariantSum = 0&lt;br /&gt;
bai WPPostrunTime = 5&lt;br /&gt;
bai WPPWMPower = 30&lt;br /&gt;
bai WPPWMPowerDia = 101&lt;br /&gt;
scan.08  = Vaillant;BAI00;0703;7401&lt;br /&gt;
Scan.08 Id = ;;;;;;&lt;br /&gt;
scan.15  = Vaillant;70000;0510;6403&lt;br /&gt;
Scan.15 Id = 21;17;52;0020171315;0082;026621;N7&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl read RoomHumidity&lt;br /&gt;
49&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1003</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1003"/>
		<updated>2026-03-28T20:51:37Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* WebUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = Z1Cooling|VentilationTimer|NoiseReductionTimer|TariffTimer|Hc2|Hc3|Z2|Z3|CcTimer&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 44&lt;br /&gt;
max symbol rate: 127&lt;br /&gt;
min arbitration micros: 3&lt;br /&gt;
max arbitration micros: 15&lt;br /&gt;
min symbol latency: 4&lt;br /&gt;
max symbol latency: 7&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 718&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 152&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl find -d -r&lt;br /&gt;
700 AdaptHeatCurve = no&lt;br /&gt;
700 DisplayedOutsideTemp = 6.375&lt;br /&gt;
700 Hc1ActualFlowTempDesired = 45.6435&lt;br /&gt;
700 Hc1AutoOffMode = night&lt;br /&gt;
700 Hc1ExcessTemp = 0.0&lt;br /&gt;
700 Hc1FlowTemp = 50&lt;br /&gt;
700 Hc1HeatCurve = 1.5&lt;br /&gt;
700 Hc1HeatCurveAdaption = 0.0&lt;br /&gt;
700 Hc1MaxFlowTempDesired = 90&lt;br /&gt;
700 Hc1MinFlowTempDesired = 15&lt;br /&gt;
700 Hc1PumpStatus = 1&lt;br /&gt;
700 Hc1RoomTempSwitchOn = thermostat&lt;br /&gt;
700 Hc1Status = 1&lt;br /&gt;
700 Hc1SummerTempLimit = 21&lt;br /&gt;
700 HcStorageTempBottom =  (empty for 3115b5240602000000a000 / 080000a000ffffff7f)&lt;br /&gt;
700 HcStorageTempTop =  (empty for 3115b52406020000009f00 / 0800009f00ffffff7f)&lt;br /&gt;
700 HolidayTemp = 10&lt;br /&gt;
700 HwcFlowTemp = 0.0&lt;br /&gt;
700 HwcMaxFlowTempDesired = 80&lt;br /&gt;
700 HwcOpMode = auto&lt;br /&gt;
700 HwcSFMode = auto&lt;br /&gt;
700 HwcStorageTemp = 23&lt;br /&gt;
700 HwcStorageTempBottom =  (empty for 3115b52406020000009e00 / 0800009e00ffffff7f)&lt;br /&gt;
700 HwcStorageTempTop =  (empty for 3115b52406020000009d00 / 0800009d00ffffff7f)&lt;br /&gt;
700 HwcTempDesired = 55&lt;br /&gt;
700 HwcTimer_Friday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Monday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Saturday = 07:00;07:50;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Sunday = 07:20;08:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Thursday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Tuesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 HwcTimer_Wednesday = 06:00;06:40;17:50;18:30;-:-;-:-&lt;br /&gt;
700 MaxRoomHumidity = 40&lt;br /&gt;
700 OpMode = auto&lt;br /&gt;
700 OpModeCooling = auto&lt;br /&gt;
700 OpModeEffect = alle&lt;br /&gt;
700 OpModeVentilation = auto&lt;br /&gt;
700 OutsideTempAvg = 7.60156&lt;br /&gt;
700 PrEnergySum = 27&lt;br /&gt;
700 PrEnergySumHc = 27&lt;br /&gt;
700 PrEnergySumHcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHcThisMonth = 0&lt;br /&gt;
700 PrEnergySumHwc = 0&lt;br /&gt;
700 PrEnergySumHwcLastMonth = 0&lt;br /&gt;
700 PrEnergySumHwcThisMonth = 0&lt;br /&gt;
700 RoomHumidity = 49&lt;br /&gt;
700 SFMode = auto&lt;br /&gt;
700 SolarYieldTotal = 0&lt;br /&gt;
700 SystemFlowTemp =  (empty for 3115b52406020000004b00 / 0800004b00ffffff7f)&lt;br /&gt;
700 WaterPressure = 2.1&lt;br /&gt;
700 YieldTotal = 0&lt;br /&gt;
700 Z1ActualRoomTempDesired = 19.5&lt;br /&gt;
700 Z1DayTemp = 19.5&lt;br /&gt;
700 Z1HolidayTemp = 10&lt;br /&gt;
700 Z1NightTemp = 15&lt;br /&gt;
700 Z1OpMode = auto&lt;br /&gt;
700 Z1OpModeCooling = auto&lt;br /&gt;
700 Z1QuickVetoTemp = 21&lt;br /&gt;
700 Z1RoomTemp = 19.5&lt;br /&gt;
700 Z1SFMode = auto&lt;br /&gt;
700 Z1Timer_Friday = 06:40;17:30;17:30;22:30;-:-;-:-&lt;br /&gt;
700 Z1Timer_Monday = 06:40;07:40;16:40;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Saturday = 07:30;22:30;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Sunday = 08:00;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Thursday = 06:40;07:40;15:10;22:00;-:-;-:-&lt;br /&gt;
700 Z1Timer_Tuesday = 06:40;22:00;-:-;-:-;-:-;-:-&lt;br /&gt;
700 Z1Timer_Wednesday = 06:40;22:00;22:00;22:00;-:-;-:-&lt;br /&gt;
700 Z1ValveStatus = 1&lt;br /&gt;
bai AATemp = 197.25;62379;cutoff&lt;br /&gt;
bai AITemp =  (ERR: invalid position for 3108b509030d3300 / 00)&lt;br /&gt;
bai CounterStartattempts1 = 7&lt;br /&gt;
bai CounterStartattempts2 = 1&lt;br /&gt;
bai CounterStartAttempts3 = 1&lt;br /&gt;
bai DateTime = valid;21:50:35;28.03.2026;8.375&lt;br /&gt;
bai DeactivationsTemplimiter = 0&lt;br /&gt;
bai DisplayMode = 129&lt;br /&gt;
bai ExhaustCurve = 0&lt;br /&gt;
bai ExhaustWayBlockCounter = 0&lt;br /&gt;
bai Expertlevel_ReturnTemp = -1.81;cutoff&lt;br /&gt;
bai ExternalFlowTempDesired = 90.00&lt;br /&gt;
bai ExtFlowTempDesiredMin = 45.50&lt;br /&gt;
bai FanHours = 32&lt;br /&gt;
bai FanStarts = 267&lt;br /&gt;
bai FlowTemp = 44.31;ok&lt;br /&gt;
bai FlowTempDesired = 45.50&lt;br /&gt;
bai HcHours = 26&lt;br /&gt;
bai HcPumpMode = permanent&lt;br /&gt;
bai HcPumpStarts = 211&lt;br /&gt;
bai HcStarts = 100&lt;br /&gt;
bai HcUnderHundredStarts = 94&lt;br /&gt;
bai HoursTillService = 3010&lt;br /&gt;
bai HwcHours = 5&lt;br /&gt;
bai HwcPostrunTime = 300&lt;br /&gt;
bai HwcStarts = 0&lt;br /&gt;
bai HwcTemp = -14.94;cutoff&lt;br /&gt;
bai HwcTempDesired = 0.00&lt;br /&gt;
bai HwcTempMax = 65.00&lt;br /&gt;
bai HwcUnderHundredStarts = 74&lt;br /&gt;
bai HwcWaterflow =  (ERR: invalid position for 3108b509030d5500 / 00)&lt;br /&gt;
bai HwcWaterflowMax =  (ERR: invalid position for 3108b509030d5600 / 00)&lt;br /&gt;
bai Maintenancedata_HwcTempMax = 0.00&lt;br /&gt;
bai OutdoorstempSensor = 8.19;ok&lt;br /&gt;
bai OverflowCounter = no&lt;br /&gt;
bai PowerValue =  (ERR: invalid position for 3108b509030daa00 / 00)&lt;br /&gt;
bai PrAPSCounter = 0&lt;br /&gt;
bai PredCombustionPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMPredCounter = 0;0;0&lt;br /&gt;
bai PredFanPWMRefPWMcounter = 0&lt;br /&gt;
bai PredIgnitionPredCounter = 0;0;0&lt;br /&gt;
bai PredSourcePressurePredCounter =  (ERR: invalid position for 3108b509030d4301 / 00)&lt;br /&gt;
bai PredWaterflowDevThreshold =  (ERR: invalid position for 3108b509030d4401 / 00)&lt;br /&gt;
bai PredWaterflowSwitchingPoint =  (ERR: invalid position for 3108b509030d4501 / 00)&lt;br /&gt;
bai PredWaterpressureMaxPressure = 4000&lt;br /&gt;
bai PredWaterpressureMinPressure = 0&lt;br /&gt;
bai PredWaterpressureSwitchingPoint = 0&lt;br /&gt;
bai PrEnergyCountHc1 = 9469&lt;br /&gt;
bai PrEnergyCountHwc1 = 1922&lt;br /&gt;
bai PrEnergyCountHwc2 = 0&lt;br /&gt;
bai PrEnergyCountHwc3 = 0&lt;br /&gt;
bai PrEnergySumHc1 = 18134146&lt;br /&gt;
bai PrEnergySumHwc1 = 6876091&lt;br /&gt;
bai PrEnergySumHwc2 = 0&lt;br /&gt;
bai PrEnergySumHwc3 = 0&lt;br /&gt;
bai PumpHours = 93&lt;br /&gt;
bai ReturnTemp = -13.50;215;cutoff&lt;br /&gt;
bai ReturnTempMax = 0.00&lt;br /&gt;
bai SecondPumpMode = 2&lt;br /&gt;
bai SHEMaxFlowTemp =  (ERR: invalid position for 3108b509030dc300 / 00)&lt;br /&gt;
bai Status01 = 47.0;-;8.375;0.0;23.0;off&lt;br /&gt;
bai Status02 = auto;60;75.0;80;55.0&lt;br /&gt;
bai Status16 =  (ERR: invalid position for 3108b5040116 / 00)&lt;br /&gt;
bai Status =  (ERR: invalid position for 3108b5110103 / 00)&lt;br /&gt;
bai StorageLoadPumpHours = 10&lt;br /&gt;
bai StorageloadPumpStarts = 16&lt;br /&gt;
bai StorageTemp = 23.00;ok&lt;br /&gt;
bai StorageTempDesired = 55.00&lt;br /&gt;
bai StorageTempMax = 58.38&lt;br /&gt;
bai TempDiffBlock = 0&lt;br /&gt;
bai TempDiffFailure = 0&lt;br /&gt;
bai TempGradientFailure = 0&lt;br /&gt;
bai Templimiter = on&lt;br /&gt;
bai TemplimiterWithNTC = yes&lt;br /&gt;
bai TempMaxDiffExtTFT = 0.00&lt;br /&gt;
bai TimerInputHc = on&lt;br /&gt;
bai ValveMode = 0&lt;br /&gt;
bai ValveStarts =  (ERR: invalid position for 3108b509030d1a00 / 00)&lt;br /&gt;
bai WaterHcFlowMax =  (ERR: invalid position for 3108b509030dd000 / 00)&lt;br /&gt;
bai WaterPressure = 2.160;ok&lt;br /&gt;
bai WaterpressureBranchControlOff = off&lt;br /&gt;
bai WaterpressureMeasureCounter = 0&lt;br /&gt;
bai WaterpressureVariantSum = 0&lt;br /&gt;
bai WPPostrunTime = 5&lt;br /&gt;
bai WPPWMPower = 30&lt;br /&gt;
bai WPPWMPowerDia = 101&lt;br /&gt;
scan.08  = Vaillant;BAI00;0703;7401&lt;br /&gt;
Scan.08 Id = ;;;;;;&lt;br /&gt;
scan.15  = Vaillant;70000;0510;6403&lt;br /&gt;
Scan.15 Id = 21;17;52;0020171315;0082;026621;N7&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl read RoomHumidity&lt;br /&gt;
49&lt;br /&gt;
&lt;br /&gt;
root@b4d7ad18-ebusd:/# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1002</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1002"/>
		<updated>2026-03-28T20:50:22Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* First and second start-up of the app */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = Z1Cooling|VentilationTimer|NoiseReductionTimer|TariffTimer|Hc2|Hc3|Z2|Z3|CcTimer&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1001</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1001"/>
		<updated>2026-03-28T20:50:01Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* MQTT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = Z1Cooling|VentilationTimer|NoiseReductionTimer|TariffTimer|Hc2|Hc3|Z2|Z3|CcTimer&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this entity should be created automatically when it will be published on the bus.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1000</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=1000"/>
		<updated>2026-03-27T22:45:02Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|Water&lt;br /&gt;
filter-non-name = Z1Cooling|VentilationTimer|NoiseReductionTimer|TariffTimer|Hc2|Hc3|Z2|Z3|CcTimer&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=999</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=999"/>
		<updated>2026-03-27T22:43:33Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|WaterPressure&lt;br /&gt;
filter-non-name = Z1Cooling|VentilationTimer|NoiseReductionTimer|TariffTimer|Hc2|Hc3|Z2|Z3|CcTimer&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=998</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=998"/>
		<updated>2026-03-27T21:14:26Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* MQTT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|WaterPressure&lt;br /&gt;
filter-non-name = VentilationTimer|NoiseReductionTimer|TariffTimer|Hc2|Hc3|Z2|Z3|CcTimer&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
To obtain the missing entity WaterPressure, publish this on the bus (valid for VRC700 only):&lt;br /&gt;
Topic:&lt;br /&gt;
homeassistant/sensor/ebusd_700_water_pressure/config&lt;br /&gt;
Json:&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Water Pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_topic&amp;quot;: &amp;quot;ebusd/700/WaterPressure&amp;quot;,&lt;br /&gt;
  &amp;quot;value_template&amp;quot;: &amp;quot;{{ value_json.value.value }}&amp;quot;,&lt;br /&gt;
  &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;bar&amp;quot;,&lt;br /&gt;
  &amp;quot;device_class&amp;quot;: &amp;quot;pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;state_class&amp;quot;: &amp;quot;measurement&amp;quot;,&lt;br /&gt;
  &amp;quot;unique_id&amp;quot;: &amp;quot;ebusd_700_water_pressure&amp;quot;,&lt;br /&gt;
  &amp;quot;device&amp;quot;: {&lt;br /&gt;
    &amp;quot;identifiers&amp;quot;: [&amp;quot;ebusd_700&amp;quot;],&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;ebusd 700&amp;quot;,&lt;br /&gt;
    &amp;quot;manufacturer&amp;quot;: &amp;quot;Vaillant&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=997</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=997"/>
		<updated>2026-03-27T21:09:45Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
Some filters for unneeded entities + WaterPressure which is not added by default:&lt;br /&gt;
&amp;lt;pre&amp;gt;# pwd&lt;br /&gt;
/mnt/data/supervisor/addon_configs/b4d7ad18_ebusd&lt;br /&gt;
# grep filter mqtt-hassio.cfg | grep &amp;quot;=&amp;quot; | grep -v &amp;quot;^#&amp;quot;&lt;br /&gt;
filter-seen = 5&lt;br /&gt;
filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|WaterPressure&lt;br /&gt;
filter-non-name = VentilationTimer|NoiseReductionTimer|TariffTimer|Hc2|Hc3|Z2|Z3|CcTimer&lt;br /&gt;
filter-level = ^$&lt;br /&gt;
filter-direction = r|u&lt;br /&gt;
filter-non-field = ^sensor$&lt;br /&gt;
# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=996</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=996"/>
		<updated>2026-03-22T21:16:11Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* MQTT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Hundreds of ephemeral MQTT topics are created on the fly and used to the needed entities.&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=995</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=995"/>
		<updated>2026-03-22T21:14:20Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* eBUS Adapter Stick C6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi. As stated above, I don&#039;t use WiFi for reliability reasons.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; connect to the WiFi (Opened SSID &amp;quot;EBUS&amp;quot;) then browse to the IP 192.168.4.1 and finally change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=994</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=994"/>
		<updated>2026-03-22T21:11:51Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Disclaimer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions and/or remarks, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=993</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=993"/>
		<updated>2026-03-22T21:11:34Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Disclaimer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better nor being more verbose ;-) Should you have questions, contact me by email on ha2026@pnzone.net.&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=992</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=992"/>
		<updated>2026-03-22T21:09:40Z</updated>

		<summary type="html">&lt;p&gt;Apn : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
I use this page as a very drafty &amp;quot;personal&amp;quot; notepad / memo. It&#039;s a bit messy but straight to the point and I don&#039;t intend to structure it better ;-)&lt;br /&gt;
&lt;br /&gt;
= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=991</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=991"/>
		<updated>2026-03-22T21:06:10Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Climate card */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits &amp;amp; sources ==&lt;br /&gt;
* eBUSd HA integation: https://www.home-assistant.io/integrations/ebusd&lt;br /&gt;
* eBUSd USB stick: https://adapter.ebusd.eu/v5-c6/stick.en.html&lt;br /&gt;
* Global how-to (HA, Vaillant, eBUS, thermostat &amp;amp; climate): https://fromeijn.nl/connected-vaillant-to-home-assistant/&lt;br /&gt;
* Thermostat &amp;amp; climate integration: https://github.com/john30/ebusd/discussions/764&lt;br /&gt;
* Vaillant heat curves explained : https://protonsforbreakfast.wordpress.com/2024/10/16/vaillant-heat-pump-controls-part-1-the-heat-curves/&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=990</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=990"/>
		<updated>2026-03-22T20:57:43Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Climate card */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;br /&gt;
&lt;br /&gt;
In order to see the Mode current status &amp;amp; buttons (auto, day, night, off), then edit the yaml code of the card added on the dashboard and add the features section :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type: thermostat&lt;br /&gt;
entity: climate.vrc700&lt;br /&gt;
features:&lt;br /&gt;
  - type: climate-hvac-modes&lt;br /&gt;
    hvac_modes:&lt;br /&gt;
      - auto&lt;br /&gt;
      - heat&lt;br /&gt;
      - cool&lt;br /&gt;
      - &amp;quot;off&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=989</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=989"/>
		<updated>2026-03-22T18:48:41Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Climate card */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      - name: VRC700                                                                       &lt;br /&gt;
        unique_id: vaillant_vrc700_zone1_gv34&lt;br /&gt;
&lt;br /&gt;
        max_temp: 23                                                                       &lt;br /&gt;
        min_temp: 15                                                                       &lt;br /&gt;
        precision: 0.1                                                                     &lt;br /&gt;
        temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
        modes:                                                                             &lt;br /&gt;
         - &#039;auto&#039;                                                                            &lt;br /&gt;
         - &#039;heat&#039;                                                                            &lt;br /&gt;
         - &#039;cool&#039;                                                                         &lt;br /&gt;
         - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
        mode_state_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {% set state = value_json.value.value %}&lt;br /&gt;
          {{ values[state] if state in values.keys() else &#039;off&#039; }}&lt;br /&gt;
        mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        mode_command_template: &amp;gt;-&lt;br /&gt;
          {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
          {{ values[value] if value in values.keys() else &#039;auto&#039; }}&lt;br /&gt;
        mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
        temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
        temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
        temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
        current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=988</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=988"/>
		<updated>2026-03-22T17:42:34Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Climate card */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      name: VRC700                                                                       &lt;br /&gt;
      max_temp: 23                                                                       &lt;br /&gt;
      min_temp: 15                                                                       &lt;br /&gt;
      precision: 0.1                                                                     &lt;br /&gt;
      temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
      modes:                                                                             &lt;br /&gt;
       - &#039;auto&#039;                                                                            &lt;br /&gt;
       - &#039;heat&#039;                                                                            &lt;br /&gt;
       - &#039;cool&#039;                                                                         &lt;br /&gt;
       - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
      mode_state_template: &amp;gt;-&lt;br /&gt;
        {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
        {% set state = value_json[&amp;quot;value&amp;quot;].value %}&lt;br /&gt;
        {{ values[state] if state in values.keys() }}&lt;br /&gt;
      mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      mode_command_template: &amp;gt;-&lt;br /&gt;
        {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
        {{ values[value] if value in values.keys() }}&lt;br /&gt;
      mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
      temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;&lt;br /&gt;
      temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
      temperature_command_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired/set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
      current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=987</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=987"/>
		<updated>2026-03-22T10:33:15Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Heating system control */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Climate card ==&lt;br /&gt;
In configuration.yaml, add this configuration (specific to the Vaillant VRC700):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:                                                                                    &lt;br /&gt;
  climate:                                                                               &lt;br /&gt;
      name: VRC700                                                                       &lt;br /&gt;
      max_temp: 25                                                                       &lt;br /&gt;
      min_temp: 10                                                                       &lt;br /&gt;
      precision: 0.1                                                                     &lt;br /&gt;
      temp_step: 0.5                                                                     &lt;br /&gt;
                                                                                         &lt;br /&gt;
      modes:                                                                             &lt;br /&gt;
       - &#039;auto&#039;                                                                            &lt;br /&gt;
       - &#039;heat&#039;                                                                            &lt;br /&gt;
       - &#039;cool&#039;                                                                         &lt;br /&gt;
       - &#039;off&#039;                                                                           &lt;br /&gt;
 &lt;br /&gt;
      mode_state_template: &amp;gt;-&lt;br /&gt;
        {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;day&#039;:&#039;heat&#039;, &#039;night&#039;:&#039;cool&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
        {% set state = value_json[&amp;quot;value&amp;quot;].value %}&lt;br /&gt;
        {{ values[state] if state in values.keys() }}&lt;br /&gt;
      mode_state_topic: &amp;quot;ebusd/700/Z1OpMode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      mode_command_template: &amp;gt;-&lt;br /&gt;
        {% set values = { &#039;auto&#039;:&#039;auto&#039;, &#039;heat&#039;:&#039;day&#039;, &#039;cool&#039;:&#039;night&#039;, &#039;off&#039;:&#039;off&#039;} %}&lt;br /&gt;
        {{ values[value] if value in values.keys() }}&lt;br /&gt;
      mode_command_topic: &amp;quot;ebusd/700/Z1OpMode/set&amp;quot;&lt;br /&gt;
                                                                          &lt;br /&gt;
      temperature_state_topic: &amp;quot;ebusd/700/Z1ActualRoomTempDesired&amp;quot;   &lt;br /&gt;
      temperature_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;     &lt;br /&gt;
                                                                     &lt;br /&gt;
      temperature_low_state_topic: &amp;quot;ebusd/700/Z1NightTemp&amp;quot;           &lt;br /&gt;
      temperature_low_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot; &lt;br /&gt;
                                                                     &lt;br /&gt;
      temperature_high_state_topic: &amp;quot;ebusd/700/Z1DayTemp&amp;quot;            &lt;br /&gt;
      temperature_high_state_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
                                                                  &lt;br /&gt;
      temperature_low_command_topic: &amp;quot;ebusd/700/Z1NightTemp/set&amp;quot;  &lt;br /&gt;
      temperature_high_command_topic: &amp;quot;ebusd/700/Z1DayTemp/set&amp;quot;   &lt;br /&gt;
                                                                  &lt;br /&gt;
      current_temperature_topic: &amp;quot;ebusd/700/Z1RoomTemp&amp;quot;           &lt;br /&gt;
      current_temperature_template: &amp;quot;{{ value_json.value.value }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:VRC700 HA.png]]&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Fichier:VRC700_HA.png&amp;diff=986</id>
		<title>Fichier:VRC700 HA.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Fichier:VRC700_HA.png&amp;diff=986"/>
		<updated>2026-03-22T10:32:32Z</updated>

		<summary type="html">&lt;p&gt;Apn : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=985</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=985"/>
		<updated>2026-03-21T20:38:33Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* WebUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=984</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=984"/>
		<updated>2026-03-21T20:38:21Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* WebUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@2ad9b828-ebusd:/# ebusctl info&lt;br /&gt;
root@b4d7ad18-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial high speed, enhanced, firmware 1.1[6112].1[6112]&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 23&lt;br /&gt;
max symbol rate: 118&lt;br /&gt;
min arbitration micros: 2&lt;br /&gt;
max arbitration micros: 4326&lt;br /&gt;
min symbol latency: 3&lt;br /&gt;
max symbol latency: 10&lt;br /&gt;
scan: finished&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 717&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 253&lt;br /&gt;
update: 16&lt;br /&gt;
address 03: master #11&lt;br /&gt;
address 08: slave #11, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0703;HW=7401&amp;quot;, loaded &amp;quot;vaillant/bai.0010006101.inc&amp;quot; ([Scan_id_product=&#039;&#039;]), &amp;quot;vaillant/08.bai.csv&amp;quot;&lt;br /&gt;
address 10: master #2&lt;br /&gt;
address 15: slave #2, scanned &amp;quot;MF=Vaillant;ID=70000;SW=0510;HW=6403&amp;quot;, loaded &amp;quot;vaillant/15.700.csv&amp;quot;&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=983</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=983"/>
		<updated>2026-03-21T20:36:09Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* eBUS Adapter Stick C6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
[[Fichier:EBUS C6.png]]&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@2ad9b828-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
signal: no signal&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 1&lt;br /&gt;
messages: 17&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 0&lt;br /&gt;
update: 10&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Fichier:EBUS_C6.png&amp;diff=982</id>
		<title>Fichier:EBUS C6.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Fichier:EBUS_C6.png&amp;diff=982"/>
		<updated>2026-03-21T20:35:38Z</updated>

		<summary type="html">&lt;p&gt;Apn : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=981</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=981"/>
		<updated>2026-03-21T20:34:05Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* eBUS Adapter Stick C6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The stick is configured by default on WiFi.&lt;br /&gt;
We need to connect to the WiFi, via the Opened SSID EBUS, then IP 192.168.4.1 and then change its connection type from TCP to USB Serial:&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@2ad9b828-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
signal: no signal&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 1&lt;br /&gt;
messages: 17&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 0&lt;br /&gt;
update: 10&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=980</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=980"/>
		<updated>2026-03-21T20:33:30Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* eBUSd app */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@2ad9b828-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
signal: no signal&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 1&lt;br /&gt;
messages: 17&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 0&lt;br /&gt;
update: 10&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=979</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=979"/>
		<updated>2026-03-21T09:07:39Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* WebUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@2ad9b828-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
signal: no signal&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 1&lt;br /&gt;
messages: 17&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 0&lt;br /&gt;
update: 10&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Signal should be acquired at this stage. Indeed the USB stick green&#039;s led is flashing quickly meaning it sees frames on the eBus.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; I opened a case:&lt;br /&gt;
* https://github.com/john30/ebusd/discussions/1718&lt;br /&gt;
* https://github.com/john30/ebusd-esp32/issues/161&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=978</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=978"/>
		<updated>2026-03-21T08:58:09Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* eBUSd app */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@2ad9b828-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
signal: no signal&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 1&lt;br /&gt;
messages: 17&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 0&lt;br /&gt;
update: 10&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Signal should be acquired at this stage. Indeed the USB stick green&#039;s led is flashing quickly meaning it sees frames on the eBus.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; I opened a case: https://github.com/john30/ebusd/discussions/1718&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=977</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=977"/>
		<updated>2026-03-20T15:16:59Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* WebUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@2ad9b828-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
signal: no signal&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 1&lt;br /&gt;
messages: 17&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 0&lt;br /&gt;
update: 10&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=976</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=976"/>
		<updated>2026-03-18T10:28:42Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* eBUSd app */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;br /&gt;
&lt;br /&gt;
=== WebUI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;oot@2ad9b828-ebusd:/# ebusctl info&lt;br /&gt;
version: ebusd 26.1.26.1&lt;br /&gt;
device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
signal: no signal&lt;br /&gt;
reconnects: 0&lt;br /&gt;
masters: 1&lt;br /&gt;
messages: 17&lt;br /&gt;
conditional: 0&lt;br /&gt;
poll: 0&lt;br /&gt;
update: 10&lt;br /&gt;
address 31: master #8, ebusd&lt;br /&gt;
address 36: slave #8, ebusd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=975</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=975"/>
		<updated>2026-03-18T10:18:46Z</updated>

		<summary type="html">&lt;p&gt;Apn : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
=== First and second start-up of the app ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
Two topics are created automatically under core-mosquitto\ebusd\global :&lt;br /&gt;
- running&lt;br /&gt;
- uptime&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=974</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=974"/>
		<updated>2026-03-18T10:15:31Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Heating system control */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
== Configuration ==&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
== First and second start-up of the app ==&lt;br /&gt;
&amp;lt;pre&amp;gt;[11:12:55] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:12:56] INFO: Seeding default mqtt-hassio.cfg into addon config folder.&lt;br /&gt;
[11:12:56] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:12:57.257 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:12:57.263 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:12:57.505 [bus notice] signal acquired&lt;br /&gt;
2026-03-18 11:12:57.505 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:12:58.135 [mqtt notice] connection established&lt;br /&gt;
2026-03-18 11:12:59.045 [bus error] signal lost&lt;br /&gt;
s6-rc: info: service legacy-services: stopping&lt;br /&gt;
s6-rc: info: service legacy-services successfully stopped&lt;br /&gt;
s6-rc: info: service legacy-cont-init: stopping&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully stopped&lt;br /&gt;
s6-rc: info: service fix-attrs: stopping&lt;br /&gt;
s6-rc: info: service fix-attrs successfully stopped&lt;br /&gt;
s6-rc: warning: service s6rc-oneshot-runner is marked as essential, not stopping it&lt;br /&gt;
2026-03-18 11:14:01.404 [main notice] SIGTERM received&lt;br /&gt;
2026-03-18 11:14:01.531 [device error] transport closed&lt;br /&gt;
2026-03-18 11:14:01.531 [main notice] ebusd stopped&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner: starting&lt;br /&gt;
s6-rc: info: service s6rc-oneshot-runner successfully started&lt;br /&gt;
s6-rc: info: service fix-attrs: starting&lt;br /&gt;
s6-rc: info: service fix-attrs successfully started&lt;br /&gt;
s6-rc: info: service legacy-cont-init: starting&lt;br /&gt;
s6-rc: info: service legacy-cont-init successfully started&lt;br /&gt;
s6-rc: info: service legacy-services: starting&lt;br /&gt;
s6-rc: info: service legacy-services successfully started&lt;br /&gt;
[11:14:06] INFO: eBUSd addon version 26.1.6&lt;br /&gt;
[11:14:07] INFO: ebusd --foreground --updatecheck=off --mqtthost=core-mosquitto --mqttport=1883 --mqttuser=&amp;lt;redacted&amp;gt; --mqttpass=&amp;lt;redacted&amp;gt; --mqttjson --mqttint=/config/mqtt-hassio.cfg --device=enh:/dev/ttyACM0 --mqttjson &lt;br /&gt;
2026-03-18 11:14:07.723 [device notice] transport opened&lt;br /&gt;
2026-03-18 11:14:07.727 [main notice] ebusd 26.1.26.1 started with broadcast scan on device: /dev/ttyACM0, serial speed, enhanced&lt;br /&gt;
2026-03-18 11:14:07.944 [bus notice] bus started with own address 31/36&lt;br /&gt;
2026-03-18 11:14:07.944 [device notice] reset, supports info&lt;br /&gt;
2026-03-18 11:14:07.948 [mqtt notice] connection established&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=973</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=973"/>
		<updated>2026-03-18T10:10:59Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Heating system control */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== eBUSd app ==&lt;br /&gt;
USB eBUS adapter (--device): enh:/dev/ttyACM0&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=972</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=972"/>
		<updated>2026-03-18T10:07:19Z</updated>

		<summary type="html">&lt;p&gt;Apn : +eBUS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;br /&gt;
&lt;br /&gt;
= Heating system control =&lt;br /&gt;
== eBUS Adapter Stick C6 ==&lt;br /&gt;
How is it recognized by HAOS:&lt;br /&gt;
&amp;lt;pre&amp;gt;[402858.821291] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[402858.916632] usb 1-1.3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02&lt;br /&gt;
[402858.916664] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[402858.916676] usb 1-1.3: Product: USB JTAG/serial debug unit&lt;br /&gt;
[402858.916687] usb 1-1.3: Manufacturer: Espressif&lt;br /&gt;
[402858.916695] usb 1-1.3: SerialNumber: 58:E6:C5:F6:A1:8C&lt;br /&gt;
[402858.964414] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device&lt;br /&gt;
[402858.964666] usbcore: registered new interface driver cdc_acm&lt;br /&gt;
[402858.964679] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=971</id>
		<title>FreeBSD</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=971"/>
		<updated>2026-02-09T10:33:01Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* ZFS snapshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Named =&lt;br /&gt;
== Manually updating a Dynamic controlled zone ==&lt;br /&gt;
&#039;&#039;&amp;quot;If you have to edit the zone files of dynamic zones manually while the DNS server is running, you&#039;ll have to freeze the zones with &#039;&#039;&#039;# rndc freeze &amp;lt;myzone&amp;gt;&#039;&#039;&#039; before editing and unfreeze them with &#039;&#039;&#039;# rndc thaw &amp;lt;myzone&amp;gt;&#039;&#039;&#039; after editing. This is because named(8) has internal state information and external journal files attached to dynamic zones that have to be kept in sync with the zone files&amp;lt;ref&amp;gt;https://forums.freebsd.org/threads/dynamic-dns-with-bind-and-isc-dhcp-server.33849/&amp;lt;/ref&amp;gt;&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Rsync = &lt;br /&gt;
&lt;br /&gt;
To delete files in the target if they disappeared from the source, then add the --delete option to your command. For example:&lt;br /&gt;
&lt;br /&gt;
rsync -avh source/ dest/ --delete&amp;lt;br&amp;gt;&lt;br /&gt;
NB: -avh is for --archive --verbose --human-readable&amp;lt;ref&amp;gt;https://askubuntu.com/a/665918&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Migration of folders to a new server ==&lt;br /&gt;
&lt;br /&gt;
=== One shot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av /var/db/ports/ root@newice3:/var/db/ports/&lt;br /&gt;
rsync -av /etc/ root@newice3:/etc/oldice3/&lt;br /&gt;
rsync -av /usr/local/etc/ root@newice3:/usr/local/etc/oldice3/&lt;br /&gt;
rsync -av /etc/ssh/ssh_config /etc/ssh/sshd_config newice3:/etc/ssh/&lt;br /&gt;
rsync -av /etc/banner /etc/motd.template /etc/pki/ newice3:/etc/&lt;br /&gt;
rsync -av /etc/pki/ newice3:/etc/pki/&lt;br /&gt;
rsync -av /usr/local/lib/sasl2/smtpd.conf root@newice3:/usr/local/lib/sasl2/&lt;br /&gt;
rsync -av /var/ftp/ newice3:/var/ftp/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1 full + diff at the migration time === &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av --exclude={&#039;rc.d&#039;,&#039;oldice3&#039;,&#039;newice3&#039;,&#039;namedb&#039;,&#039;openvpn&#039;,&#039;pkg.conf&#039;,&#039;portsnap.conf&#039;} /usr/local/etc/ root@newice3:/usr/local/etc/ --delete --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.ip.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam_awstats.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /root/ root@newice3:/root/ --delete --dry-run&lt;br /&gt;
rsync -av /home/ root@newice3:/home/ --delete --dry-run&lt;br /&gt;
rsync -av /var/www/ root@newice3:/var/www/ --delete --dry-run&lt;br /&gt;
rsync -av /usr/local/www/ root@newice3:/usr/local/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/ root@newice3:/var/log/oldice3/ --delete --dry-run&lt;br /&gt;
rsync -av /var/awstats/ root@newice3:/var/awstats/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/www/ root@newice3:/var/log/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/fail2ban/ root@newice3:/var/db/fail2ban/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/mysql/ root@newice3:/var/db/mysql/ --delete --dry-run (to do when mysql server is off)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Nginx =&lt;br /&gt;
== Maxmind ==&lt;br /&gt;
Country based filtering can be performed in nginx thanks to the free Maxmind databases.&lt;br /&gt;
&lt;br /&gt;
A cron job shall be used to update these databases on a daily basis&amp;lt;ref&amp;gt;https://herrbischoff.com/2021/05/nginx-how-to-restrict-access-by-geographical-location-on-freebsd/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ZFS snapshots = &lt;br /&gt;
FreeBSD creates a snapshot at each update (freebsd-update fetch &amp;amp;&amp;amp; freebsd-update install). These snapshots are not needed anymore should your system restarts &amp;amp; runs correctly. Moreover they take loads of space on your hardrive.&lt;br /&gt;
&lt;br /&gt;
== Procedure to delete ==&lt;br /&gt;
&lt;br /&gt;
=== List &amp;amp; check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE                                Active Mountpoint Space Created&lt;br /&gt;
14.3-RELEASE-p6_2025-12-19_121434 -      -          927M  2025-12-19 12:14&lt;br /&gt;
default                           NR     /          814G  2023-12-01 23:34&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check that the active Boot Envionment is the default (NR set on default).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
NAME                                       USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
zroot/ROOT/default@2025-12-19-12:14:34-0   927M      -   812G  -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl destroy 14.3-RELEASE-p6_2025-12-19_121434&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Results ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE      Active Mountpoint Space Created&lt;br /&gt;
default NR     /          813G  2023-12-01 23:34&lt;br /&gt;
root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
no datasets available&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reboot or no reboot after a minor system upgrade ? =&lt;br /&gt;
&lt;br /&gt;
After a system upgrade performed thanks to :&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-update fetch&lt;br /&gt;
root@icecube BSD:~ # freebsd-update install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output of these two commands differs, then reboot your system:&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-version -k&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
root@icecube BSD:~ # uname -r&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PF =&lt;br /&gt;
After a reboot of FreeBSD, PF may fail to start due to tables being too big (i.e. &amp;gt; 100k entries).&amp;lt;br&amp;gt;&lt;br /&gt;
This is explained here with a quick &amp;amp; dirty non-permanent fix :&amp;lt;br&amp;gt;&lt;br /&gt;
https://forums.freebsd.org/threads/table-loading-in-pf-issues.86101/#post-577832&lt;br /&gt;
# First load the PF Options only (specific to big tables handling): pfctl -Of /etc/pf.conf&lt;br /&gt;
# Then restart PF the usual way&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf/etc/pf.conf:98: cannot define table firehol4: Cannot allocate memory&lt;br /&gt;
pfctl: Syntax error in config file: pf rules not loaded&lt;br /&gt;
/etc/rc.d/pf: WARNING: Unable to load /etc/pf.conf.&lt;br /&gt;
.&lt;br /&gt;
root@icecube BSD:~ # sed -n &#039;98p&#039; /etc/pf.conf&lt;br /&gt;
table &amp;lt;firehol4&amp;gt; persist file &amp;quot;/etc/pf_table_firehol4&amp;quot;&lt;br /&gt;
root@icecube BSD:~ # wc -l /etc/pf_table_firehol4&lt;br /&gt;
   99856 /etc/pf_table_firehol4&lt;br /&gt;
root@icecube BSD:~ # pfctl -Of /etc/pf.conf&lt;br /&gt;
root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf.&lt;br /&gt;
root@icecube BSD:~ # &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
{{references}}&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=970</id>
		<title>FreeBSD</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=970"/>
		<updated>2026-02-06T09:27:32Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* PF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Named =&lt;br /&gt;
== Manually updating a Dynamic controlled zone ==&lt;br /&gt;
&#039;&#039;&amp;quot;If you have to edit the zone files of dynamic zones manually while the DNS server is running, you&#039;ll have to freeze the zones with &#039;&#039;&#039;# rndc freeze &amp;lt;myzone&amp;gt;&#039;&#039;&#039; before editing and unfreeze them with &#039;&#039;&#039;# rndc thaw &amp;lt;myzone&amp;gt;&#039;&#039;&#039; after editing. This is because named(8) has internal state information and external journal files attached to dynamic zones that have to be kept in sync with the zone files&amp;lt;ref&amp;gt;https://forums.freebsd.org/threads/dynamic-dns-with-bind-and-isc-dhcp-server.33849/&amp;lt;/ref&amp;gt;&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Rsync = &lt;br /&gt;
&lt;br /&gt;
To delete files in the target if they disappeared from the source, then add the --delete option to your command. For example:&lt;br /&gt;
&lt;br /&gt;
rsync -avh source/ dest/ --delete&amp;lt;br&amp;gt;&lt;br /&gt;
NB: -avh is for --archive --verbose --human-readable&amp;lt;ref&amp;gt;https://askubuntu.com/a/665918&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Migration of folders to a new server ==&lt;br /&gt;
&lt;br /&gt;
=== One shot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av /var/db/ports/ root@newice3:/var/db/ports/&lt;br /&gt;
rsync -av /etc/ root@newice3:/etc/oldice3/&lt;br /&gt;
rsync -av /usr/local/etc/ root@newice3:/usr/local/etc/oldice3/&lt;br /&gt;
rsync -av /etc/ssh/ssh_config /etc/ssh/sshd_config newice3:/etc/ssh/&lt;br /&gt;
rsync -av /etc/banner /etc/motd.template /etc/pki/ newice3:/etc/&lt;br /&gt;
rsync -av /etc/pki/ newice3:/etc/pki/&lt;br /&gt;
rsync -av /usr/local/lib/sasl2/smtpd.conf root@newice3:/usr/local/lib/sasl2/&lt;br /&gt;
rsync -av /var/ftp/ newice3:/var/ftp/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1 full + diff at the migration time === &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av --exclude={&#039;rc.d&#039;,&#039;oldice3&#039;,&#039;newice3&#039;,&#039;namedb&#039;,&#039;openvpn&#039;,&#039;pkg.conf&#039;,&#039;portsnap.conf&#039;} /usr/local/etc/ root@newice3:/usr/local/etc/ --delete --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.ip.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam_awstats.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /root/ root@newice3:/root/ --delete --dry-run&lt;br /&gt;
rsync -av /home/ root@newice3:/home/ --delete --dry-run&lt;br /&gt;
rsync -av /var/www/ root@newice3:/var/www/ --delete --dry-run&lt;br /&gt;
rsync -av /usr/local/www/ root@newice3:/usr/local/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/ root@newice3:/var/log/oldice3/ --delete --dry-run&lt;br /&gt;
rsync -av /var/awstats/ root@newice3:/var/awstats/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/www/ root@newice3:/var/log/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/fail2ban/ root@newice3:/var/db/fail2ban/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/mysql/ root@newice3:/var/db/mysql/ --delete --dry-run (to do when mysql server is off)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Nginx =&lt;br /&gt;
== Maxmind ==&lt;br /&gt;
Country based filtering can be performed in nginx thanks to the free Maxmind databases.&lt;br /&gt;
&lt;br /&gt;
A cron job shall be used to update these databases on a daily basis&amp;lt;ref&amp;gt;https://herrbischoff.com/2021/05/nginx-how-to-restrict-access-by-geographical-location-on-freebsd/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ZFS snapshots = &lt;br /&gt;
FreeBSD creates a snapshot at each FreeBSD update (freebsd-update fetch &amp;amp;&amp;amp; freebsd-update install). These snapshots are not needed anymore should your system restarts &amp;amp; runs correctly. Moreover they take loads of space on your hardrive.&lt;br /&gt;
&lt;br /&gt;
== Procedure to delete ==&lt;br /&gt;
&lt;br /&gt;
=== List &amp;amp; check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE                                Active Mountpoint Space Created&lt;br /&gt;
14.3-RELEASE-p6_2025-12-19_121434 -      -          927M  2025-12-19 12:14&lt;br /&gt;
default                           NR     /          814G  2023-12-01 23:34&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check that the active Boot Envionment is the default (NR set on default).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
NAME                                       USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
zroot/ROOT/default@2025-12-19-12:14:34-0   927M      -   812G  -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl destroy 14.3-RELEASE-p6_2025-12-19_121434&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Results ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE      Active Mountpoint Space Created&lt;br /&gt;
default NR     /          813G  2023-12-01 23:34&lt;br /&gt;
root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
no datasets available&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reboot or no reboot after a minor system upgrade ? =&lt;br /&gt;
&lt;br /&gt;
After a system upgrade performed thanks to :&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-update fetch&lt;br /&gt;
root@icecube BSD:~ # freebsd-update install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output of these two commands differs, then reboot your system:&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-version -k&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
root@icecube BSD:~ # uname -r&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PF =&lt;br /&gt;
After a reboot of FreeBSD, PF may fail to start due to tables being too big (i.e. &amp;gt; 100k entries).&amp;lt;br&amp;gt;&lt;br /&gt;
This is explained here with a quick &amp;amp; dirty non-permanent fix :&amp;lt;br&amp;gt;&lt;br /&gt;
https://forums.freebsd.org/threads/table-loading-in-pf-issues.86101/#post-577832&lt;br /&gt;
# First load the PF Options only (specific to big tables handling): pfctl -Of /etc/pf.conf&lt;br /&gt;
# Then restart PF the usual way&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf/etc/pf.conf:98: cannot define table firehol4: Cannot allocate memory&lt;br /&gt;
pfctl: Syntax error in config file: pf rules not loaded&lt;br /&gt;
/etc/rc.d/pf: WARNING: Unable to load /etc/pf.conf.&lt;br /&gt;
.&lt;br /&gt;
root@icecube BSD:~ # sed -n &#039;98p&#039; /etc/pf.conf&lt;br /&gt;
table &amp;lt;firehol4&amp;gt; persist file &amp;quot;/etc/pf_table_firehol4&amp;quot;&lt;br /&gt;
root@icecube BSD:~ # wc -l /etc/pf_table_firehol4&lt;br /&gt;
   99856 /etc/pf_table_firehol4&lt;br /&gt;
root@icecube BSD:~ # pfctl -Of /etc/pf.conf&lt;br /&gt;
root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf.&lt;br /&gt;
root@icecube BSD:~ # &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
{{references}}&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=969</id>
		<title>FreeBSD</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=969"/>
		<updated>2026-02-06T09:26:12Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* PF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Named =&lt;br /&gt;
== Manually updating a Dynamic controlled zone ==&lt;br /&gt;
&#039;&#039;&amp;quot;If you have to edit the zone files of dynamic zones manually while the DNS server is running, you&#039;ll have to freeze the zones with &#039;&#039;&#039;# rndc freeze &amp;lt;myzone&amp;gt;&#039;&#039;&#039; before editing and unfreeze them with &#039;&#039;&#039;# rndc thaw &amp;lt;myzone&amp;gt;&#039;&#039;&#039; after editing. This is because named(8) has internal state information and external journal files attached to dynamic zones that have to be kept in sync with the zone files&amp;lt;ref&amp;gt;https://forums.freebsd.org/threads/dynamic-dns-with-bind-and-isc-dhcp-server.33849/&amp;lt;/ref&amp;gt;&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Rsync = &lt;br /&gt;
&lt;br /&gt;
To delete files in the target if they disappeared from the source, then add the --delete option to your command. For example:&lt;br /&gt;
&lt;br /&gt;
rsync -avh source/ dest/ --delete&amp;lt;br&amp;gt;&lt;br /&gt;
NB: -avh is for --archive --verbose --human-readable&amp;lt;ref&amp;gt;https://askubuntu.com/a/665918&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Migration of folders to a new server ==&lt;br /&gt;
&lt;br /&gt;
=== One shot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av /var/db/ports/ root@newice3:/var/db/ports/&lt;br /&gt;
rsync -av /etc/ root@newice3:/etc/oldice3/&lt;br /&gt;
rsync -av /usr/local/etc/ root@newice3:/usr/local/etc/oldice3/&lt;br /&gt;
rsync -av /etc/ssh/ssh_config /etc/ssh/sshd_config newice3:/etc/ssh/&lt;br /&gt;
rsync -av /etc/banner /etc/motd.template /etc/pki/ newice3:/etc/&lt;br /&gt;
rsync -av /etc/pki/ newice3:/etc/pki/&lt;br /&gt;
rsync -av /usr/local/lib/sasl2/smtpd.conf root@newice3:/usr/local/lib/sasl2/&lt;br /&gt;
rsync -av /var/ftp/ newice3:/var/ftp/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1 full + diff at the migration time === &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av --exclude={&#039;rc.d&#039;,&#039;oldice3&#039;,&#039;newice3&#039;,&#039;namedb&#039;,&#039;openvpn&#039;,&#039;pkg.conf&#039;,&#039;portsnap.conf&#039;} /usr/local/etc/ root@newice3:/usr/local/etc/ --delete --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.ip.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam_awstats.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /root/ root@newice3:/root/ --delete --dry-run&lt;br /&gt;
rsync -av /home/ root@newice3:/home/ --delete --dry-run&lt;br /&gt;
rsync -av /var/www/ root@newice3:/var/www/ --delete --dry-run&lt;br /&gt;
rsync -av /usr/local/www/ root@newice3:/usr/local/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/ root@newice3:/var/log/oldice3/ --delete --dry-run&lt;br /&gt;
rsync -av /var/awstats/ root@newice3:/var/awstats/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/www/ root@newice3:/var/log/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/fail2ban/ root@newice3:/var/db/fail2ban/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/mysql/ root@newice3:/var/db/mysql/ --delete --dry-run (to do when mysql server is off)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Nginx =&lt;br /&gt;
== Maxmind ==&lt;br /&gt;
Country based filtering can be performed in nginx thanks to the free Maxmind databases.&lt;br /&gt;
&lt;br /&gt;
A cron job shall be used to update these databases on a daily basis&amp;lt;ref&amp;gt;https://herrbischoff.com/2021/05/nginx-how-to-restrict-access-by-geographical-location-on-freebsd/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ZFS snapshots = &lt;br /&gt;
FreeBSD creates a snapshot at each FreeBSD update (freebsd-update fetch &amp;amp;&amp;amp; freebsd-update install). These snapshots are not needed anymore should your system restarts &amp;amp; runs correctly. Moreover they take loads of space on your hardrive.&lt;br /&gt;
&lt;br /&gt;
== Procedure to delete ==&lt;br /&gt;
&lt;br /&gt;
=== List &amp;amp; check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE                                Active Mountpoint Space Created&lt;br /&gt;
14.3-RELEASE-p6_2025-12-19_121434 -      -          927M  2025-12-19 12:14&lt;br /&gt;
default                           NR     /          814G  2023-12-01 23:34&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check that the active Boot Envionment is the default (NR set on default).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
NAME                                       USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
zroot/ROOT/default@2025-12-19-12:14:34-0   927M      -   812G  -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl destroy 14.3-RELEASE-p6_2025-12-19_121434&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Results ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE      Active Mountpoint Space Created&lt;br /&gt;
default NR     /          813G  2023-12-01 23:34&lt;br /&gt;
root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
no datasets available&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reboot or no reboot after a minor system upgrade ? =&lt;br /&gt;
&lt;br /&gt;
After a system upgrade performed thanks to :&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-update fetch&lt;br /&gt;
root@icecube BSD:~ # freebsd-update install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output of these two commands differs, then reboot your system:&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-version -k&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
root@icecube BSD:~ # uname -r&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PF =&lt;br /&gt;
After a reboot of FreeBSD, PF may fail to start due to tables being too big (i.e. &amp;gt; 100k entries).&amp;lt;br&amp;gt;&lt;br /&gt;
This is explained here with a quick &amp;amp; dirty non-permanent fix :&amp;lt;br&amp;gt;&lt;br /&gt;
https://forums.freebsd.org/threads/table-loading-in-pf-issues.86101/#post-577832&lt;br /&gt;
# First load the PF Options only (specific to big tables handling): pfctl -Of /etc/pf.conf&lt;br /&gt;
# Then restart PF the usual way&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf/etc/pf.conf:98: cannot define table firehol4: Cannot allocate memory&lt;br /&gt;
pfctl: Syntax error in config file: pf rules not loaded&lt;br /&gt;
/etc/rc.d/pf: WARNING: Unable to load /etc/pf.conf.&lt;br /&gt;
.&lt;br /&gt;
root@icecube BSD:~ # sed -n &#039;98p&#039; /etc/pf.conf&lt;br /&gt;
table &amp;lt;firehol4&amp;gt; persist file &amp;quot;/etc/pf_table_firehol4&amp;quot;&lt;br /&gt;
root@icecube BSD:~ # wc -l /etc/pf_table_firehol4&lt;br /&gt;
   99856 /etc/pf_table_firehol4&lt;br /&gt;
root@icecube BSD:~ # pfctl -Of /etc/pf.conf&lt;br /&gt;
root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
{{references}}&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=968</id>
		<title>FreeBSD</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=FreeBSD&amp;diff=968"/>
		<updated>2026-02-06T09:23:52Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* PF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Named =&lt;br /&gt;
== Manually updating a Dynamic controlled zone ==&lt;br /&gt;
&#039;&#039;&amp;quot;If you have to edit the zone files of dynamic zones manually while the DNS server is running, you&#039;ll have to freeze the zones with &#039;&#039;&#039;# rndc freeze &amp;lt;myzone&amp;gt;&#039;&#039;&#039; before editing and unfreeze them with &#039;&#039;&#039;# rndc thaw &amp;lt;myzone&amp;gt;&#039;&#039;&#039; after editing. This is because named(8) has internal state information and external journal files attached to dynamic zones that have to be kept in sync with the zone files&amp;lt;ref&amp;gt;https://forums.freebsd.org/threads/dynamic-dns-with-bind-and-isc-dhcp-server.33849/&amp;lt;/ref&amp;gt;&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Rsync = &lt;br /&gt;
&lt;br /&gt;
To delete files in the target if they disappeared from the source, then add the --delete option to your command. For example:&lt;br /&gt;
&lt;br /&gt;
rsync -avh source/ dest/ --delete&amp;lt;br&amp;gt;&lt;br /&gt;
NB: -avh is for --archive --verbose --human-readable&amp;lt;ref&amp;gt;https://askubuntu.com/a/665918&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Migration of folders to a new server ==&lt;br /&gt;
&lt;br /&gt;
=== One shot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av /var/db/ports/ root@newice3:/var/db/ports/&lt;br /&gt;
rsync -av /etc/ root@newice3:/etc/oldice3/&lt;br /&gt;
rsync -av /usr/local/etc/ root@newice3:/usr/local/etc/oldice3/&lt;br /&gt;
rsync -av /etc/ssh/ssh_config /etc/ssh/sshd_config newice3:/etc/ssh/&lt;br /&gt;
rsync -av /etc/banner /etc/motd.template /etc/pki/ newice3:/etc/&lt;br /&gt;
rsync -av /etc/pki/ newice3:/etc/pki/&lt;br /&gt;
rsync -av /usr/local/lib/sasl2/smtpd.conf root@newice3:/usr/local/lib/sasl2/&lt;br /&gt;
rsync -av /var/ftp/ newice3:/var/ftp/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1 full + diff at the migration time === &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -av --exclude={&#039;rc.d&#039;,&#039;oldice3&#039;,&#039;newice3&#039;,&#039;namedb&#039;,&#039;openvpn&#039;,&#039;pkg.conf&#039;,&#039;portsnap.conf&#039;} /usr/local/etc/ root@newice3:/usr/local/etc/ --delete --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.ip.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /etc/pf.blocked.webspam_awstats.conf root@newice3:/etc/ --dry-run&lt;br /&gt;
rsync -av /root/ root@newice3:/root/ --delete --dry-run&lt;br /&gt;
rsync -av /home/ root@newice3:/home/ --delete --dry-run&lt;br /&gt;
rsync -av /var/www/ root@newice3:/var/www/ --delete --dry-run&lt;br /&gt;
rsync -av /usr/local/www/ root@newice3:/usr/local/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/ root@newice3:/var/log/oldice3/ --delete --dry-run&lt;br /&gt;
rsync -av /var/awstats/ root@newice3:/var/awstats/ --delete --dry-run&lt;br /&gt;
rsync -av /var/log/www/ root@newice3:/var/log/www/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/fail2ban/ root@newice3:/var/db/fail2ban/ --delete --dry-run&lt;br /&gt;
rsync -av /var/db/mysql/ root@newice3:/var/db/mysql/ --delete --dry-run (to do when mysql server is off)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Nginx =&lt;br /&gt;
== Maxmind ==&lt;br /&gt;
Country based filtering can be performed in nginx thanks to the free Maxmind databases.&lt;br /&gt;
&lt;br /&gt;
A cron job shall be used to update these databases on a daily basis&amp;lt;ref&amp;gt;https://herrbischoff.com/2021/05/nginx-how-to-restrict-access-by-geographical-location-on-freebsd/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ZFS snapshots = &lt;br /&gt;
FreeBSD creates a snapshot at each FreeBSD update (freebsd-update fetch &amp;amp;&amp;amp; freebsd-update install). These snapshots are not needed anymore should your system restarts &amp;amp; runs correctly. Moreover they take loads of space on your hardrive.&lt;br /&gt;
&lt;br /&gt;
== Procedure to delete ==&lt;br /&gt;
&lt;br /&gt;
=== List &amp;amp; check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE                                Active Mountpoint Space Created&lt;br /&gt;
14.3-RELEASE-p6_2025-12-19_121434 -      -          927M  2025-12-19 12:14&lt;br /&gt;
default                           NR     /          814G  2023-12-01 23:34&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check that the active Boot Envionment is the default (NR set on default).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
NAME                                       USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
zroot/ROOT/default@2025-12-19-12:14:34-0   927M      -   812G  -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl destroy 14.3-RELEASE-p6_2025-12-19_121434&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Results ===&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # bectl list&lt;br /&gt;
BE      Active Mountpoint Space Created&lt;br /&gt;
default NR     /          813G  2023-12-01 23:34&lt;br /&gt;
root@icecube BSD:~ # zfs list -t snapshot&lt;br /&gt;
no datasets available&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reboot or no reboot after a minor system upgrade ? =&lt;br /&gt;
&lt;br /&gt;
After a system upgrade performed thanks to :&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-update fetch&lt;br /&gt;
root@icecube BSD:~ # freebsd-update install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output of these two commands differs, then reboot your system:&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # freebsd-version -k&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
root@icecube BSD:~ # uname -r&lt;br /&gt;
14.3-RELEASE-p7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= PF =&lt;br /&gt;
After a reboot of FreeBSD, PF may fail to start due to tables being too big (i.e. &amp;gt; 100k entries).&amp;lt;br&amp;gt;&lt;br /&gt;
This is explained here with a quick &amp;amp; dirty non-permanent fix :&amp;lt;br&amp;gt;&lt;br /&gt;
https://forums.freebsd.org/threads/table-loading-in-pf-issues.86101/#post-577832&lt;br /&gt;
# First load the PF Options only (specific to big tables handling): pfctl -Of /etc/pf.conf&lt;br /&gt;
# Then restart PF the usual way&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf/etc/pf.conf:98: cannot define table firehol4: Cannot allocate memory&lt;br /&gt;
pfctl: Syntax error in config file: pf rules not loaded&lt;br /&gt;
/etc/rc.d/pf: WARNING: Unable to load /etc/pf.conf.&lt;br /&gt;
.&lt;br /&gt;
root@icecube BSD:~ # pfctl -Of /etc/pf.conf&lt;br /&gt;
root@icecube BSD:~ # service pf restart&lt;br /&gt;
Disabling pf.&lt;br /&gt;
Enabling pf.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
{{references}}&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
	<entry>
		<id>https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=967</id>
		<title>Home Assistant</title>
		<link rel="alternate" type="text/html" href="https://wiki.deprelledelanieppe.be/mediawiki/index.php?title=Home_Assistant&amp;diff=967"/>
		<updated>2026-01-30T22:48:54Z</updated>

		<summary type="html">&lt;p&gt;Apn : /* Cabling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Raspberry PI &amp;amp; Home Assistant OS =&lt;br /&gt;
== Custom routes issue ==&lt;br /&gt;
When installing HA natively on a RPI if static routing is needed, then the best solution is this one:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.reddit.com/r/homeassistant/comments/1mav1j6/run_nmcli_and_any_other_root_level_commands_step/&lt;br /&gt;
&lt;br /&gt;
Step-by-Step: Access Full Root Shell on HAOS via Port 22222&lt;br /&gt;
# Install the Add-on Add HassOS SSH port 22222 Configurator via the Home Assistant Add-on Store (manual repository add required).&lt;br /&gt;
# Generate SSH Keys On your hassOS terminal :ssh-keygen cat ~/.ssh/id_rsa.pub&lt;br /&gt;
# Paste Public Key into Configurator Add-on Open the add-on config panel and paste your public key (id_rsa.pub) into the configuration.&lt;br /&gt;
# Hard Reboot HAOS After saving config, power off or hard reboot the Home Assistant OS host to activate the root SSH access.&lt;br /&gt;
# SSH into HAOS Root (Port 22222) On your terminal:ssh -p 22222 root@127.0.0.1&lt;br /&gt;
# Use nmcli and Other Commands Now you can run:This is the only method to modify connections that don’t appear in the GUI.nmcli connection show nmcli connection delete &amp;lt;name&amp;gt;&lt;br /&gt;
# (Optional) Delete or Reset Network Configurations You can also:cd /etc/NetworkManager/system-connections/ rm &amp;lt;stale-profile&amp;gt;.nmconnection reboot&lt;br /&gt;
# Cleanup Once fixed: Uninstall the 22222 Configurator &amp;amp; Remove your public key if desired&lt;br /&gt;
&lt;br /&gt;
This is not documented officially in the HAOS docs and your input fills a real gap. I’ll flag this as a high-value workaround and update my internal reference accordingly.&lt;br /&gt;
&lt;br /&gt;
Let me know if you want this formatted into a sharable Markdown doc or gist.&lt;br /&gt;
Sources:&lt;br /&gt;
* https://community.home-assistant.io/t/add-on-hassos-ssh-port-22222-configurator/264109&lt;br /&gt;
* https://community.home-assistant.io/t/command-not-found-nmcli/902180&lt;br /&gt;
* https://github.com/home-assistant/operating-system/blob/0724608f/Documentation/network.md#L151-L189 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the route ===&lt;br /&gt;
Then specifically for my case:&lt;br /&gt;
&amp;lt;pre&amp;gt;apn@macbook-pro-apn ~ % ssh -p 22222 root@192.168.1.111&lt;br /&gt;
Enter passphrase for key &#039;/Users/apn/.ssh/id_ed25519&#039;: &lt;br /&gt;
Welcome to Home Assistant OS.&lt;br /&gt;
&lt;br /&gt;
Use `ha` to access the Home Assistant CLI.&lt;br /&gt;
# nmcli connection show&lt;br /&gt;
NAME             UUID                                  TYPE      DEVICE &lt;br /&gt;
Supervisor end0  b41646fb-ab0f-3c2b-955c-fe19a392b46b  ethernet  end0   &lt;br /&gt;
lo               c70e4258-1a90-4aab-b9d6-c4218edaf965  loopback  lo     &lt;br /&gt;
# nmcli connection modify &amp;quot;Supervisor end0&amp;quot; +ipv4.routes &amp;quot;192.168.2.0/24 192.168.1.101&amp;quot;&lt;br /&gt;
# nmcli connection up &amp;quot;Supervisor end0&amp;quot;&lt;br /&gt;
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)&lt;br /&gt;
# &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Garage Remote control =&lt;br /&gt;
&lt;br /&gt;
Sometimes a remote control can send multiple button/click triggers even when a button is pushed once.&lt;br /&gt;
&lt;br /&gt;
That&#039;s the case with the [https://fr.aliexpress.com/item/4001062612446.html &#039;&#039;Tuya Zigbee3.0 Remote Control With 4 Key&#039;&#039;]] that I just bought to trigger a Zigbee dry relay MHCOZY TYZG-001-RF (only used in Zigbee mode &amp;amp; cabled in NO - Normally opened). This dry relay simulates a push button to open a Garage door.&lt;br /&gt;
&lt;br /&gt;
These multiple clicks are braking the garage door opening logic which then stops opening in the middle. In order to solve this, I used what we call in IT a &#039;&#039;&#039;mutex&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Here are the scripts to make this work properly:&lt;br /&gt;
&lt;br /&gt;
== MHCOZY ZG-001 ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MHCOZY TYZG-001-RF.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Scripts&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Pulse TUZG Relay (0.5s)&lt;br /&gt;
mode: single&lt;br /&gt;
sequence:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_on&lt;br /&gt;
  - delay:&lt;br /&gt;
      milliseconds: 500&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: light.mhcozy_tyzg_001_rf&lt;br /&gt;
    action: light.turn_off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tuya Zigbee3.0 Remote Control ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tuya Remote Control.png]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;Settings &amp;gt; Devices &amp;amp; services &amp;gt; Helpers&#039;&#039;&#039; and create the following Boolean &#039;&#039;&#039;Toggle&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;Name: garage_remote_control_lock&lt;br /&gt;
Entity ID: input_boolean.garage_remote_control_lock&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure it&#039;s set to Off (click on it when created to set its state).&lt;br /&gt;
&lt;br /&gt;
Then go to &#039;&#039;&#039;Settings &amp;gt; Automations &amp;amp; scenes &amp;gt; Automations&#039;&#039;&#039; and create the following script:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control&lt;br /&gt;
description: Trigger the garage door opening/closing via the remote control with lock to prevent duplicates&lt;br /&gt;
triggers:&lt;br /&gt;
  - event_type: zha_event&lt;br /&gt;
    event_data:&lt;br /&gt;
      device_ieee: $your_device_ieee_identifier&lt;br /&gt;
      command: arm&lt;br /&gt;
    trigger: event&lt;br /&gt;
conditions:&lt;br /&gt;
  - condition: state&lt;br /&gt;
    entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    state: &amp;quot;off&amp;quot;&lt;br /&gt;
actions:&lt;br /&gt;
  - action: input_boolean.turn_on&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
  - action: script.pulse_relay_0_5s&lt;br /&gt;
    data: {}&lt;br /&gt;
  - delay:&lt;br /&gt;
      seconds: 10&lt;br /&gt;
  - action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
    target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make sure the value is at OFF at HA startup (i.e. to avoid specific bad situations when the HA crashes in the middle of the door opening automation and the toggle does not get reset), then create another automation:&lt;br /&gt;
&amp;lt;pre&amp;gt;alias: Garage remote control lock reset on startup&lt;br /&gt;
triggers:&lt;br /&gt;
  - event: start&lt;br /&gt;
    trigger: homeassistant&lt;br /&gt;
actions:&lt;br /&gt;
  - target:&lt;br /&gt;
      entity_id: input_boolean.garage_remote_control_lock&lt;br /&gt;
    action: input_boolean.turn_off&lt;br /&gt;
    data: {}&lt;br /&gt;
mode: single&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZHAQuirks for TS0601 ==&lt;br /&gt;
&lt;br /&gt;
The TS0601 by _TZE204_nklqjk62 is not recognized by HomeAssistant ZHA.&lt;br /&gt;
&lt;br /&gt;
=== Signature of the device ===&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  &amp;quot;node_descriptor&amp;quot;: {&lt;br /&gt;
    &amp;quot;logical_type&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;complex_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;user_descriptor_available&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;reserved&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;aps_flags&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;frequency_band&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;mac_capability_flags&amp;quot;: 142,&lt;br /&gt;
    &amp;quot;manufacturer_code&amp;quot;: 4417,&lt;br /&gt;
    &amp;quot;maximum_buffer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;maximum_incoming_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;server_mask&amp;quot;: 10752,&lt;br /&gt;
    &amp;quot;maximum_outgoing_transfer_size&amp;quot;: 66,&lt;br /&gt;
    &amp;quot;descriptor_capability_field&amp;quot;: 0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;endpoints&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0100&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0000&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0004&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0005&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0006&amp;quot;,&lt;br /&gt;
        &amp;quot;0xef00&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x000a&amp;quot;,&lt;br /&gt;
        &amp;quot;0x0019&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;2&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0x0104&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0402&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0500&amp;quot;&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;242&amp;quot;: {&lt;br /&gt;
      &amp;quot;profile_id&amp;quot;: &amp;quot;0xa1e0&amp;quot;,&lt;br /&gt;
      &amp;quot;device_type&amp;quot;: &amp;quot;0x0061&amp;quot;,&lt;br /&gt;
      &amp;quot;input_clusters&amp;quot;: [],&lt;br /&gt;
      &amp;quot;output_clusters&amp;quot;: [&lt;br /&gt;
        &amp;quot;0x0021&amp;quot;&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;manufacturer&amp;quot;: &amp;quot;_TZE204_nklqjk62&amp;quot;,&lt;br /&gt;
  &amp;quot;model&amp;quot;: &amp;quot;TS0601&amp;quot;,&lt;br /&gt;
  &amp;quot;class&amp;quot;: &amp;quot;ts0601_garage.TuyaGarageSwitchTO&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How-to make it work ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[core-ssh zhaquirks]$ pwd&lt;br /&gt;
/config/zhaquirks&lt;br /&gt;
[core-ssh zhaquirks]$ cat ts0601_garage.py&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Tuya based cover and blinds.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
from typing import Dict&lt;br /&gt;
&lt;br /&gt;
from zigpy.profiles import zgp, zha&lt;br /&gt;
from zigpy.quirks import CustomDevice&lt;br /&gt;
import zigpy.types as t&lt;br /&gt;
from zigpy.zcl.clusters.general import Basic, GreenPowerProxy, Groups, Ota, Scenes, Time&lt;br /&gt;
from zigpy.zcl.clusters.security import IasZone&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.const import (&lt;br /&gt;
    DEVICE_TYPE,&lt;br /&gt;
    ENDPOINTS,&lt;br /&gt;
    INPUT_CLUSTERS,&lt;br /&gt;
    MODELS_INFO,&lt;br /&gt;
    OUTPUT_CLUSTERS,&lt;br /&gt;
    PROFILE_ID,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
from zhaquirks.tuya import NoManufacturerCluster, TuyaLocalCluster&lt;br /&gt;
from zhaquirks.tuya.mcu import (&lt;br /&gt;
    DPToAttributeMapping,&lt;br /&gt;
    TuyaMCUCluster,&lt;br /&gt;
    TuyaOnOff,&lt;br /&gt;
)&lt;br /&gt;
from zhaquirks.tuya.ts0601_dimmer import TuyaOnOffNM&lt;br /&gt;
&lt;br /&gt;
ZONE_TYPE = 0x0001&lt;br /&gt;
&lt;br /&gt;
class ContactSwitchCluster(TuyaLocalCluster, IasZone):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya ContactSwitch Sensor.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}&lt;br /&gt;
&lt;br /&gt;
    def _update_attribute(self, attrid, value):&lt;br /&gt;
        self.debug(&amp;quot;_update_attribute &#039;%s&#039;: %s&amp;quot;, attrid, value)&lt;br /&gt;
        super()._update_attribute(attrid, value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageManufCluster(NoManufacturerCluster, TuyaMCUCluster):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya garage door opener.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    attributes = TuyaMCUCluster.attributes.copy()&lt;br /&gt;
    attributes.update(&lt;br /&gt;
        {&lt;br /&gt;
            # ramdom attribute IDs&lt;br /&gt;
            0xEF02: (&amp;quot;dp_2&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF04: (&amp;quot;dp_4&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF05: (&amp;quot;dp_5&amp;quot;, t.uint32_t, True),&lt;br /&gt;
            0xEF0B: (&amp;quot;dp_11&amp;quot;, t.Bool, True),&lt;br /&gt;
            0xEF0C: (&amp;quot;dp_12&amp;quot;, t.enum8, True),&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    dp_to_attribute: Dict[int, DPToAttributeMapping] = {&lt;br /&gt;
        # garage door trigger ¿on movement, on open, on closed?&lt;br /&gt;
        1: DPToAttributeMapping(&lt;br /&gt;
            TuyaOnOffNM.ep_attribute,&lt;br /&gt;
            &amp;quot;on_off&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        2: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_2&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        3: DPToAttributeMapping(&lt;br /&gt;
            ContactSwitchCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;zone_status&amp;quot;,&lt;br /&gt;
            lambda x: IasZone.ZoneStatus.Alarm_1 if x else 0,&lt;br /&gt;
            endpoint_id=2,&lt;br /&gt;
        ),&lt;br /&gt;
        4: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_4&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        5: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_5&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        11: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_11&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
        # garage door status (open, closed, ...)&lt;br /&gt;
        12: DPToAttributeMapping(&lt;br /&gt;
            TuyaMCUCluster.ep_attribute,&lt;br /&gt;
            &amp;quot;dp_12&amp;quot;,&lt;br /&gt;
        ),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    data_point_handlers = {&lt;br /&gt;
        1: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        2: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        3: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        4: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        5: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        11: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
        12: &amp;quot;_dp_2_attr_update&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TuyaGarageSwitchTO(CustomDevice):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Tuya Garage switch.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    signature = {&lt;br /&gt;
        MODELS_INFO: [&lt;br /&gt;
            (&amp;quot;_TZE200_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE200_wfxuhoea&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
            (&amp;quot;_TZE204_nklqjk62&amp;quot;, &amp;quot;TS0601&amp;quot;),&lt;br /&gt;
        ],&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=1 profile=260 device_type=0x0051&lt;br /&gt;
            # input_clusters=[0, 4, 5, 61184]&lt;br /&gt;
            # output_clusters=[10, 25]&amp;gt;&lt;br /&gt;
            1: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster.cluster_id,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            # &amp;lt;SimpleDescriptor endpoint=242 profile=41440 device_type=97&lt;br /&gt;
            # input_clusters=[]&lt;br /&gt;
            # output_clusters=[33]&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    replacement = {&lt;br /&gt;
        ENDPOINTS: {&lt;br /&gt;
            1: {&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    Basic.cluster_id,&lt;br /&gt;
                    Groups.cluster_id,&lt;br /&gt;
                    Scenes.cluster_id,&lt;br /&gt;
                    TuyaGarageManufCluster,&lt;br /&gt;
                    TuyaOnOffNM,&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
            2: {&lt;br /&gt;
                PROFILE_ID: zha.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,&lt;br /&gt;
                INPUT_CLUSTERS: [&lt;br /&gt;
                    ContactSwitchCluster&lt;br /&gt;
                ],&lt;br /&gt;
                OUTPUT_CLUSTERS: [],&lt;br /&gt;
            },&lt;br /&gt;
            242: {&lt;br /&gt;
                PROFILE_ID: zgp.PROFILE_ID,&lt;br /&gt;
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,&lt;br /&gt;
                INPUT_CLUSTERS: [],&lt;br /&gt;
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
[core-ssh zhaquirks]$ cd ..&lt;br /&gt;
[core-ssh config]$ tail -n 2 configuration.yaml &lt;br /&gt;
zha:&lt;br /&gt;
  custom_quirks_path: /config/zhaquirks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart Home Assistant and discover the device. If the device was previously wrongly discovered, just delete it and discover it again.&lt;br /&gt;
&lt;br /&gt;
=== Result ===&lt;br /&gt;
[[Fichier:TS0601.png]]&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/zigpy/zha-device-handlers/issues/2533&lt;br /&gt;
* https://community.home-assistant.io/t/tuya-ts0601-zigbee-garage-door-opener/466400/5&lt;br /&gt;
&lt;br /&gt;
== Garage door control ==&lt;br /&gt;
I finally replaced my ZigBee relay &amp;amp; sensor used to control the Garage door by a full wired logic connected to the GPIO and using the Raspberry Pi GPIO (rp_gpio) HACS add-on.&lt;br /&gt;
I&#039;m indeed usually against Wireless technology when high reliability &amp;amp; security are required.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Dry contact relay: [https://www.amazon.com.be/dp/B0F59PPVZB 5 Pack 5V Channel Relay Module, 1 Channel Relay Module with Optocoupler High or Low Level Trigger Expansion Board for Raspberry Pi Arduino Board]&lt;br /&gt;
* Breakout board: [https://www.amazon.com.be/dp/B0DM4YKVCX Geekworm G469 GPIO Terminal Block Breakout Board for Raspberry Pi 4B/3B+/3B/ Zero 2W]&lt;br /&gt;
* Jumper wire cables: [https://www.amazon.com.be/dp/B074P726ZR AZDelivery Jumper Wire Cable 3 x 40 pcs. each 20 cm M2M/ F2M/F2F, 40 Pin Male to Male, 40 Pin Female to Female, Compatible with Arduino and Raspberry Pi Breadboard including an E-Book]&lt;br /&gt;
&lt;br /&gt;
=== Cabling ===&lt;br /&gt;
[[Fichier:Gpio.jpg|300px|]]&lt;br /&gt;
* Garage door magnetic sensor: GPIO_17 (pin #11) + GND (pin #9)&lt;br /&gt;
* Relay:&lt;br /&gt;
** DCC+ =&amp;gt; 5V (pin #4)&lt;br /&gt;
** DCC- =&amp;gt; GND (pin #6)&lt;br /&gt;
** Signal (relay trigger) =&amp;gt; GPIO_4 (pin #7)&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[core-ssh config]$ tail -n 12 configuration.yaml &lt;br /&gt;
switch:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    switches:&lt;br /&gt;
      - port: 4&lt;br /&gt;
        name: &amp;quot;Garage door button - GPIO_4&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_switch_port_4&amp;quot;&lt;br /&gt;
binary_sensor:&lt;br /&gt;
  - platform: rpi_gpio&lt;br /&gt;
    sensors:&lt;br /&gt;
      - port: 17&lt;br /&gt;
        name: &amp;quot;Garage door sensor - GPIO_17&amp;quot;&lt;br /&gt;
        unique_id: &amp;quot;garage_door_sensor_port_17&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credits ===&lt;br /&gt;
* https://github.com/andrewshilliday/garage-door-controller#hardware-setup&lt;br /&gt;
* https://pinout.xyz/pinout/ground&lt;br /&gt;
* https://forum.hacf.fr/t/gpio-sur-rpi-4/73908&lt;br /&gt;
* https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-door-sensor-relay&lt;/div&gt;</summary>
		<author><name>Apn</name></author>
	</entry>
</feed>