<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Entwicklung – Sigalou Hausautomation</title>
	<atom:link href="https://www.sigalou-domotique.fr/de/tag/developpement/feed" rel="self" type="application/rss+xml" />
	<link href="">https://www.sigalou-domotique.fr/de</link>
	<description>Cybersecurity, Home Assistant, 365...</description>
	<lastbuilddate>Sun, 26 Apr 2026 09:48:55 +0000</lastbuilddate>
	<language>von</language>
	<sy:updateperiod>
	hourly	</sy:updateperiod>
	<sy:updatefrequency>
	1	</sy:updatefrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://www.sigalou-domotique.fr/wp-content/uploads/2026/04/cropped-sigalou-carre-32x32.png</url>
	<title>Entwicklung – Sigalou Hausautomation</title>
	<link href="">https://www.sigalou-domotique.fr/de</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Speichern der Wallbox-Ladevorgänge eines Elektrofahrzeugs</title>
		<link href="">https://www.sigalou-domotique.fr/de/sauvegarder-les-sessions-de-charge-wallbox-dun-vehicule-electrique</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Sat, 28 Oct 2023 08:57:18 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Véhicule électrique]]></category>
		<category><![CDATA[Wallbox]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=5493</guid>

					<description><![CDATA[Je regarde les données récupérées de l&#8217;intégration Wallbox Ici un petit récap des données qui vont me permettre d&#8217;enregistrer les données de la dernière session de charge dans sensor.wallbox_charges. J&#8217;ai déjà décrit toutes les entités de l&#8217;intégration Wallbox sur ce Retex : J&#8217;intègre la Wallbox à Home Assistant Le déclencheur Je vais donc utiliser sensor.wallbox_portal_status_description [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3>Je regarde les données récupérées de l&rsquo;intégration Wallbox</h3>
<p>Ici un petit récap des données qui vont me permettre d&rsquo;enregistrer les données de la dernière session de charge dans sensor.wallbox_charges.</p>
<p>J&rsquo;ai déjà décrit toutes les entités de l&rsquo;intégration Wallbox sur ce Retex :</p>
<ul>
<li><a href="https://www.sigalou-domotique.fr/jintegre-la-wallbox-a-home-assistant" target="_blank" rel="noopener">J&rsquo;intègre la Wallbox à Home Assistant</a></li>
</ul>
<p><span id="more-5493"></span></p>
<h4>Le déclencheur</h4>
<p>Je vais donc utiliser <a href="https://www.sigalou-domotique.fr/jintegre-la-wallbox-a-home-assistant#Je_decortique_lentite_Wallbox_Portal_Status_Description" target="_blank" rel="noopener">sensor.wallbox_portal_status_description</a> comme déclencheur de l&rsquo;enregistrement de la dernière session de charge.</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/status.png"><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-5194" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/status.png" alt="" width="449" height="150" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/status.png 449w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/status-300x100.png 300w" sizes="(max-width: 449px) 100vw, 449px" /></a></p>
<p>Je vais donc utiliser le changement d&rsquo;état de « Charging » à autre chose pour déclencher l&rsquo;enregistrement.</p>
<h4>Les données</h4>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox8.png"><img decoding="async" class="alignnone size-full wp-image-5514" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox8.png" alt="" width="438" height="210" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox8.png 438w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox8-300x144.png 300w" sizes="(max-width: 438px) 100vw, 438px" /></a></p>
<ul>
<li><a href="https://www.sigalou-domotique.fr/jintegre-la-wallbox-a-home-assistant#Je_decortique_lentite_Wallbox_Portal_Added_Energy" target="_blank" rel="noopener">Wallbox Portal Added Energy</a> (sensor.wallbox_portal_added_energy) va me donner le nombre de kWh ajoutés à la batterie de la voiture durant la dernière charge</li>
<li><a href="https://www.sigalou-domotique.fr/jintegre-la-wallbox-a-home-assistant#Je_decortique_lentite_Wallbox_Portal_Added_Range" target="_blank" rel="noopener">Wallbox Portal Added Range</a> (sensor.wallbox_portal_added_range) va me donner une estimation du  nombre de km ajoutés pouvant être réalisés grâce à la dernière charge.</li>
<li><a href="https://www.sigalou-domotique.fr/jintegre-la-wallbox-a-home-assistant#Je_decortique_les_entites_Wallbox_Portal_Max_Available_Power_et_Wallbox_Portal_Max_Charging_Current" target="_blank" rel="noopener">Wallbox Portal Energy Price</a> (sensor.wallbox_portal_energy_price) va me donner le prix du kWh, je l&rsquo;utiliserai pour calculer le coût de la charge</li>
</ul>
<h3>J&rsquo;ajoute l&rsquo;intégration qui va stocker les données de charge</h3>
<p>J&rsquo;ai trouvé l&rsquo;intégration <a href="https://github.com/enkama/hass-variables" target="_blank" rel="noopener">hass-variables</a>, absolument géniale. Merci à <a href="https://github.com/enkama" target="_blank" rel="noopener">Ankama</a> et à <a href="https://github.com/Snuffy2" target="_blank" rel="noopener">Snuffy2</a> pour ce travail et ce suivi.</p>
<p>Elle permet de créer un sensor qui ne soit relié à rien (pas un template). Ce sensor garde ses valeurs même à la relance de HA. Exactement ce dont j&rsquo;avais besoin sans utiliser de mode de sauvegarde externe des données (json, autre base de données&#8230;).</p>
<p><a href="https://my.home-assistant.io/redirect/hacs_repository/?owner=Wibias&amp;repository=hass-variables" target="_blank" rel="noopener"><img decoding="async" class="alignnone size-full wp-image-5498" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/config_flow_start.svg" alt="" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox4.png"><img decoding="async" class="alignnone size-full wp-image-5506" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox4.png" alt="" width="292" height="116" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox5.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5507" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox5.png" alt="" width="369" height="210" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox5.png 369w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox5-300x171.png 300w" sizes="auto, (max-width: 369px) 100vw, 369px" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox6.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5508" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox6.png" alt="" width="368" height="668" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox6.png 368w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox6-165x300.png 165w" sizes="auto, (max-width: 368px) 100vw, 368px" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox7.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5509" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox7.png" alt="" width="549" height="220" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox7.png 549w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox7-300x120.png 300w" sizes="auto, (max-width: 549px) 100vw, 549px" /></a></p>
<p>Le nouveau sensor s&rsquo;appelle : sensor.wallbox_charges</p>
<h3>J&rsquo;ajoute un sensor détectant le début de la charge</h3>
<p>En effet, l&rsquo;intégration ne me donne pas l&rsquo;heure et la date de début de la dernière charge. Pour en calculer la durée, je trouve intéressant de disposer de cette information. Je vais donc la créer.</p>
<p>Je me base sur l&rsquo;entité sensor.wallbox_portal_added_range et je vais aller chercher l&rsquo;heure/date du début de charge (donc sa valeur minimale sur les 5 dernières heures)</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox9.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5515" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox9.png" alt="" width="501" height="336" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox9.png 501w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox9-300x201.png 300w" sizes="auto, (max-width: 501px) 100vw, 501px" /></a></p>
<p>Dans mon fichiers sensors.yaml, j&rsquo;ajoute cette entité :</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">- platform: statistics
  name: "Wallbox Portal Added Range Min"
  entity_id: sensor.wallbox_portal_added_range
  state_characteristic: datetime_value_min
  max_age:
    hours: 5  </pre>
<p>Cela va me créer l&rsquo;entité : sensor.wallbox_portal_added_range_min</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox10.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5519" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox10.png" alt="" width="503" height="260" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox10.png 503w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox10-300x155.png 300w" sizes="auto, (max-width: 503px) 100vw, 503px" /></a></p>
<p>Je vais utiliser cette entité pour enregistrer le début de charge et pour calculer la durée de charge.</p>



<h3>J&rsquo;ajoute l&rsquo;automatisation qui va enregistrer les données</h3>
<p>Elle est assez complexe, j&rsquo;imagine qu&rsquo;elle est simplifiable, je vais l&rsquo;expliquer étape par étape</p>
<p>Voici tout d&rsquo;abord le code complet</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">alias: Enregistre une session de charge
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.wallbox_portal_status_description
    from: Charging
    to: null
    alias: Quand la charge se termine
condition: []
action:
  - alias: &gt;-
      Initialiser la première conso, à ne lancer qu'une fois (en désactivant les
      autres actions)  puis désactiver
    service: variable.update_sensor
    data:
      replace_attributes: true
      value: INIT
      attributes:
        sessionscharge: null
    target:
      entity_id: sensor.wallbox_charges
    enabled: false
  - service: variable.update_sensor
    data:
      replace_attributes: true
      value: &gt;-
        {{ as_timestamp(states('sensor.wallbox_portal_added_range_min')) | int
        |     timestamp_custom('%d/%m/%Y %H:%M:%S', true)}}      
      attributes:
        sessionscharge: &gt;
          {% set sessioncharge = {'consommation': 2.14, 'coût': 0.43, 'durée':
          '00:27', 'début': '19/09/2023 20:36', 'fin': '21:03', 'km': 17,
          'saved_at': 1695150359} %}{{ sessioncharge }},{% set sessioncharge =
          {'consommation': 23.29, 'coût': 4.66, 'durée': '04:19', 'début':
          '21/09/2023 21:06', 'fin': '01:25', 'km': 192, 'saved_at': 1695323159}
          %}{{ sessioncharge }},{% set sessioncharge = {'consommation': 7.68,
          'coût': 1.54, 'durée': '01:23', 'début': '22/09/2023 08:45', 'fin':
          '10:08', 'km': 63, 'saved_at': 1695409559} %}{{ sessioncharge }},{%
          set sessioncharge = {'consommation': 23.8, 'coût': 4.76, 'durée':
          '04:26', 'début': '23/09/2023 16:57', 'fin': '21:23', 'km': 196,
          'saved_at': 1695495959} %}{{ sessioncharge }},{% set sessioncharge =
          {'consommation': 23.64, 'coût': 4.73, 'durée': '04:05', 'début':
          '26/09/2023 20:59', 'fin': '01:04', 'km': 195, 'saved_at': 1695755159}
          %}{{ sessioncharge }},{% set sessioncharge = {'consommation': 24.04,
          'coût': 4.81, 'durée': '05:17', 'début': '28/09/2023 21:21', 'fin':
          '02:38', 'km': 198, 'saved_at': 1695927959} %}{{ sessioncharge }},{%
          set sessioncharge = {'consommation': 17.3, 'coût': 3.46, 'durée':
          '03:51', 'début': '30/09/2023 21:31', 'fin': '01:22', 'km': 143,
          'saved_at': 1696100759} %}{{ sessioncharge }},{% set sessioncharge =
          {'consommation': 22.18, 'coût': 4.44, 'durée': '04:25', 'début':
          '03/10/2023 20:43', 'fin': '01:08', 'km': 183, 'saved_at': 1696359959}
          %}{{ sessioncharge }},{% set sessioncharge = {'consommation': 23.86,
          'coût': 4.77, 'durée': '05:26', 'début': '05/10/2023 21:03', 'fin':
          '02:29', 'km': 197, 'saved_at': 1696532759} %}{{ sessioncharge }},{%
          set sessioncharge = {'consommation': 23.43, 'coût': 4.69, 'durée':
          '05:07', 'début': '07/10/2023 20:34', 'fin': '01:41', 'km': 193,
          'saved_at': 1696705559} %}{{ sessioncharge }},{% set sessioncharge =
          {'consommation': 23.32, 'coût': 4.66, 'durée': '04:40', 'début':
          '10/10/2023 20:57', 'fin': '04:40', 'km': 192, 'saved_at': 1696964759}
          %}{{ sessioncharge }},{% set sessioncharge = {'consommation': 25.19,
          'coût': 5.04, 'durée': '04:39', 'début': '12/10/2023 19:53', 'fin':
          '00:32', 'km': 208, 'saved_at': 1697137559} %}{{ sessioncharge }},{%
          set sessioncharge = {'consommation': 8.61, 'coût': 1.72, 'durée':
          '01:32', 'début': '13/10/2023 21:05', 'fin': '22:37', 'km': 71,
          'saved_at': 1697223959} %}{{ sessioncharge }},{% set sessioncharge =
          {'consommation': 27.76, 'coût': 5.55, 'durée': '04:46', 'début':
          '16/10/2023 02:11', 'fin': '06:57', 'km': 231, 'saved_at': 1697474976}
          %}{{ sessioncharge }},{% set sessioncharge = {'consommation': 24.18,
          'coût': 4.84, 'durée': '04:12', 'début': '18/10/2023 02:11', 'fin':
          '06:23', 'km': 201, 'saved_at': 1697657509} %}{{ sessioncharge }},{%
          set sessioncharge = {'consommation': 20.17, 'coût': 4.03, 'durée':
          '03:38', 'début': '19/10/2023 02:11', 'fin': '05:50', 'km': 168,
          'saved_at': 1697688628} %}{{ sessioncharge }},{% set sessioncharge =
          {'consommation': 23.08, 'coût': 4.62, 'durée': '04:13', 'début':
          '21/10/2023 02:12', 'fin': '06:25', 'km': 192, 'saved_at': 1697867735}
          %}{{ sessioncharge }},{% set sessioncharge = {'consommation': 12.19,
          'coût': 2.44, 'durée': '03:21', 'début': '22/10/2023 02:13', 'fin':
          '05:34', 'km': 101, 'saved_at': 1697946854} %}{{ sessioncharge }}
    target:
      entity_id: sensor.wallbox_charges
    enabled: false
    alias: &gt;-
      Initialiser les premières conso, à ne lancer qu'une fois  (en désactivant
      les autres actions) puis désactiver
  - service: variable.update_sensor
    data:
      replace_attributes: true
      value: &gt;-
        {{ as_timestamp(states('sensor.wallbox_portal_added_range_min')) | int
        |     timestamp_custom('%d/%m/%Y %H:%M:%S', true)}}      
      attributes:
        sessionscharge: &gt;-
          {% set diff_seconds = now().timestamp() -
          states.sensor.wallbox_portal_added_range_min.state | as_timestamp %}
          {% set hours = (diff_seconds / 3600) | int %} {% set minutes =
          ((diff_seconds % 3600) / 60) | int %} {% set sessioncharge =  { 
          'consommation': states('sensor.wallbox_portal_added_energy') | float |
          round(2),  'coût': (states('sensor.wallbox_portal_energy_price') |
          float * states('sensor.wallbox_portal_added_energy') | float |
          round(2)) | round(2), 'durée': '%02d:%02d' | format(hours, minutes) , 
          'début': as_timestamp(states('sensor.wallbox_portal_added_range_min'))
          | int |
            timestamp_custom('%d/%m/%Y %H:%M', true), 
          'fin':  now().strftime('%H:%M') ,  'km':
          states('sensor.wallbox_portal_added_range') | int,  'saved_at':
          now().timestamp() | int }  %}

          {% if state_attr('sensor.wallbox_charges', 'sessionscharge') is not
          none %}
            {{ state_attr('sensor.wallbox_charges', 'sessionscharge') }}, {{ sessioncharge }}
          {% else %}
            {{ sessioncharge }}, {{ sessioncharge }}
          {% endif %}
    target:
      entity_id: sensor.wallbox_charges
    enabled: true
    alias: Enregistre la session de charge qui vient de se terminer
mode: single
</pre>
<p>&nbsp;</p>



<h4>Explication partie par partie</h4>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox11.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5524" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox11.png" alt="" width="983" height="487" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox11.png 983w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox11-600x297.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox11-300x149.png 300w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox11-768x380.png 768w" sizes="auto, (max-width: 983px) 100vw, 983px" /></a></p>
<ul>
<li>Le déclencheur : c&rsquo;est quand la charge est terminée</li>
<li>L&rsquo;action 1 (désactivée par défaut) n&rsquo;est a activer qu&rsquo;une fois en pensant à désactiver les 2 autres actions, c&rsquo;est pour initialiser à « null » une fois l&rsquo;entité qui enregistre les données.</li>
<li>L&rsquo;action 2 (désactivée par défaut) n&rsquo;est à activer qu&rsquo;une fois en pensant à désactiver les 2 autres actions, c&rsquo;est pour initialiser quelques données antérieures. En effet, je ne voulais pas perdre les données de charge depuis l&rsquo;achat de la voiture, donc je les ai stockées là. </li>
<li>L&rsquo;action 3 (à activer par défaut) est l&rsquo;action qui calcule et enregistre les données de charge.</li>
</ul>
<h4>Explication du code du déclencheur </h4>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/ChatGPT_logo.svg-1.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5529" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/ChatGPT_logo.svg-1.png" alt="" width="20" height="20" /></a></p>
<blockquote>
<p>Ce déclencheur est basé sur la plateforme « state » de Home Assistant. Il surveille l&rsquo;état d&rsquo;une entité spécifique, en l&rsquo;occurrence, « sensor.wallbox_portal_status_description ». Plus précisément, il est configuré pour réagir lorsqu&rsquo;un changement d&rsquo;état de cette entité se produit. Les détails de la configuration sont les suivants :</p>
<p>&#8211; `entity_id`: Il spécifie l&rsquo;entité dont l&rsquo;état est surveillé. Dans ce cas, il s&rsquo;agit de « sensor.wallbox_portal_status_description ». Plusieurs entités peuvent être surveillées en fournissant une liste d&rsquo;entités sous la forme d&rsquo;une liste. Cependant, dans cet exemple, une seule entité est surveillée.</p>
<p>&#8211; `from: Charging`: Cela signifie que le déclencheur réagit lorsque l&rsquo;état précédent de « sensor.wallbox_portal_status_description » était « Charging ». Il s&rsquo;agit d&rsquo;une condition pour déclencher l&rsquo;automatisation. Le déclencheur ne réagit que si l&rsquo;état précédent était « Charging ».</p>
<p>&#8211; `to: null`: Cela signifie que le déclencheur réagit lorsque l&rsquo;état actuel de « sensor.wallbox_portal_status_description » est passé de « Charging » à n&rsquo;importe quel autre état, y compris « null ». Il s&rsquo;agit de la nouvelle condition pour déclencher l&rsquo;automatisation. Le déclencheur réagit lorsque l&rsquo;état change de « Charging » à tout autre état.</p>
<p>&#8211; `alias: Quand la charge se termine`: C&rsquo;est un alias pour le déclencheur, un nom qui vous permet de le reconnaître plus facilement. Dans ce cas, il indique simplement que l&rsquo;automatisation sera déclenchée lorsque la charge se termine.</p>
<p>En résumé, cet automatisation est déclenchée chaque fois que l&rsquo;état de « sensor.wallbox_portal_status_description » change de « Charging » à tout autre état, ce qui signifie qu&rsquo;elle est conçue pour réagir lorsque la charge de la voiture électrique se termine.</p>
</blockquote>
<h4>Explication de l&rsquo;action 1 </h4>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/ChatGPT_logo.svg-1.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5529" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/ChatGPT_logo.svg-1.png" alt="" width="20" height="20" /></a></p>
<blockquote>
<p>Cette action est destinée à initialiser la première consommation (charge) pour un capteur appelé « sensor.wallbox_charges » en utilisant le service « variable.update_sensor » de Home Assistant. Voici une explication détaillée de chaque composant de l&rsquo;action :</p>
<p>&#8211; `alias`: C&rsquo;est simplement un nom ou une description de l&rsquo;action pour la rendre plus compréhensible. Dans ce cas, il indique que cette action est destinée à l&rsquo;initialisation de la première consommation et qu&rsquo;elle ne doit être exécutée qu&rsquo;une fois. Il suggère également de désactiver d&rsquo;autres actions après son exécution.</p>
<p>&#8211; `service: variable.update_sensor`: Cette ligne spécifie le service à utiliser pour effectuer l&rsquo;action. Le service « variable.update_sensor » est utilisé pour mettre à jour ou initialiser les attributs d&rsquo;une entité (dans ce cas, « sensor.wallbox_charges »).</p>
<p>&#8211; `data`: Cette section contient les données à envoyer avec le service. Dans ce cas :<br />&#8211; `replace_attributes: true`: Cela indique que les attributs de l&rsquo;entité existante doivent être remplacés par les nouvelles données. Si « replace_attributes » est à « true », les attributs existants de « sensor.wallbox_charges » seront remplacés par les nouvelles données.</p>
<p>&#8211; `value: INIT`: Cela indique la valeur à attribuer à l&rsquo;attribut « sessionscharge » de « sensor.wallbox_charges ». Dans ce cas, la valeur « INIT » est attribuée.</p>
<p>&#8211; `attributes: sessionscharge: null`: Cette ligne indique que l&rsquo;attribut « sessionscharge » de « sensor.wallbox_charges » doit être initialisé à « null ».</p>
<p>&#8211; `target`: Il spécifie l&rsquo;entité cible, c&rsquo;est-à-dire l&rsquo;entité dont les attributs sont mis à jour. Dans ce cas, l&rsquo;entité cible est « sensor.wallbox_charges ».</p>
<p>&#8211; `enabled: true`: Cela indique que cette action est activée et peut être exécutée.</p>
<p>En résumé, cette action sert à initialiser l&rsquo;attribut « sessionscharge » de l&rsquo;entité « sensor.wallbox_charges » avec la valeur « null » en utilisant le service « variable.update_sensor ». Elle est destinée à être exécutée une seule fois pour effectuer cette initialisation, après quoi, il est recommandé de désactiver cette action. Cela pourrait être utile pour démarrer avec des valeurs initiales spécifiques dans vos automatisations ou entités.</p>
</blockquote>
<h4>Explication de l&rsquo;action 2</h4>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/ChatGPT_logo.svg-1.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5529" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/ChatGPT_logo.svg-1.png" alt="" width="20" height="20" /></a></p>
<blockquote>
<p>Cette action vise à initialiser l&rsquo;attribut « sessionscharge » d&rsquo;une entité appelée « sensor.wallbox_charges » avec une série de données de sessions de charge préexistantes. Voici une explication détaillée de chaque élément de l&rsquo;action :</p>
<p>&#8211; `service: variable.update_sensor`: Il s&rsquo;agit du service utilisé pour mettre à jour ou initialiser les attributs d&rsquo;une entité dans Home Assistant.</p>
<p>&#8211; `data`: Cette section contient les données à envoyer avec le service. Dans ce cas :<br />&#8211; `replace_attributes: true` : Cela indique que les attributs existants de l&rsquo;entité « sensor.wallbox_charges » seront remplacés par les nouvelles données.</p>
<p>&#8211; `value`: Cette partie est utilisée pour définir la valeur de l&rsquo;attribut « sessionscharge » de l&rsquo;entité « sensor.wallbox_charges ». La valeur est générée dynamiquement à l&rsquo;aide de modèles Jinja2. Il utilise l&rsquo;horodatage de la première session de charge (c&rsquo;est-à-dire « sensor.wallbox_portal_added_range_min ») pour obtenir une date et une heure, puis le formate dans le style « jour/mois/année heure:minute:seconde ». Cela signifie que la valeur « sessionscharge » sera initialisée avec la date et l&rsquo;heure de la première session de charge.</p>
<p>&#8211; `attributes`: C&rsquo;est là que les données de chaque session de charge sont définies. Chaque session de charge est définie dans un format spécifique en utilisant des modèles Jinja2. Ces sessions de charge sont séparées par des virgules.</p>
<p>&#8211; `target`: Il spécifie l&rsquo;entité cible, c&rsquo;est-à-dire l&rsquo;entité dont les attributs sont mis à jour. Dans ce cas, l&rsquo;entité cible est « sensor.wallbox_charges ».</p>
<p>&#8211; `enabled: true`: Cela indique que cette action est activée et peut être exécutée.</p>
<p>Le but de cette action est d&rsquo;initialiser l&rsquo;attribut « sessionscharge » de « sensor.wallbox_charges » avec des données simulées de sessions de charge. Cela peut être utile pour tester ou démarrer avec des données de charge fictives. Une fois l&rsquo;initialisation effectuée, il est recommandé de désactiver cette action, comme indiqué dans l&rsquo;alias, car elle n&rsquo;a pas besoin d&rsquo;être répétée.</p>
</blockquote>
<h4>Explication de l&rsquo;action 3 &#8211; Principale action</h4>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/ChatGPT_logo.svg-1.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5529" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/ChatGPT_logo.svg-1.png" alt="" width="20" height="20" /></a></p>
<blockquote>
<p>Cette action vise à mettre à jour l&rsquo;attribut « sessionscharge » de l&rsquo;entité « sensor.wallbox_charges » avec les données de la session de charge qui vient de se terminer. Voici une explication détaillée de chaque élément de l&rsquo;action :</p>
<p>&#8211; `service: variable.update_sensor`: Il s&rsquo;agit du service utilisé pour mettre à jour ou initialiser les attributs d&rsquo;une entité dans Home Assistant.</p>
<p>&#8211; `data`: Cette section contient les données à envoyer avec le service. Dans ce cas :<br />&#8211; `replace_attributes: true`: Cela indique que les attributs existants de l&rsquo;entité « sensor.wallbox_charges » seront remplacés par les nouvelles données.</p>
<p>&#8211; `value`: Cette partie est utilisée pour définir la valeur de l&rsquo;attribut « sessionscharge » de l&rsquo;entité « sensor.wallbox_charges ». La valeur est générée dynamiquement à l&rsquo;aide de modèles Jinja2. Elle comprend :<br />&#8211; La conversion de l&rsquo;horodatage de « sensor.wallbox_portal_added_range_min » en un format de date et d&rsquo;heure spécifique à l&rsquo;aide de la fonction `timestamp_custom`.</p>
<p>&#8211; `attributes`: C&rsquo;est là que les données de la session de charge sont définies. Ces données sont calculées à partir de diverses entités, notamment « sensor.wallbox_portal_added_energy », « sensor.wallbox_portal_energy_price », « sensor.wallbox_portal_added_range_min », « sensor.wallbox_portal_added_range », et l&rsquo;horodatage actuel (obtenu via `now()`). Les données incluent la consommation, le coût, la durée, le début, la fin, les kilomètres et l&rsquo;horodatage de la session de charge.</p>
<p>&#8211; La durée est calculée en soustrayant l&rsquo;horodatage de début de la session de charge de l&rsquo;horodatage actuel (exprimé en secondes). Ensuite, ces secondes sont converties en heures et minutes.</p>
<p>&#8211; Dans la section `{% if &#8230; %}`, le code vérifie si l&rsquo;attribut « sessionscharge » de l&rsquo;entité « sensor.wallbox_charges » est déjà défini. Si c&rsquo;est le cas, les données existantes sont conservées. Sinon, les nouvelles données de session de charge sont ajoutées.</p>
<p>&#8211; `target`: Il spécifie l&rsquo;entité cible, c&rsquo;est-à-dire l&rsquo;entité dont les attributs sont mis à jour. Dans ce cas, l&rsquo;entité cible est « sensor.wallbox_charges ».</p>
<p>&#8211; `enabled: true`: Cela indique que cette action est activée et peut être exécutée.</p>
<p>L&rsquo;objectif de cette action est d&rsquo;enregistrer les données de chaque session de charge qui vient de se terminer dans l&rsquo;attribut « sessionscharge » de l&rsquo;entité « sensor.wallbox_charges ». Cela permet de garder une trace de chaque session de charge effectuée.</p>
</blockquote>
<p> </p>



<h3>Résultat</h3>
<p>Ainsi à chaque fin de charge, un nouvel enregistrement est ajouté à l&rsquo;entité sensor.wallbox_charges.</p>
<p>Voici son contenu :</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox12.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5542" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox12.png" alt="" width="784" height="548" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox12.png 784w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox12-600x419.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox12-300x210.png 300w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox12-768x537.png 768w" sizes="auto, (max-width: 784px) 100vw, 784px" /></a>&nbsp;</p>
<h3>Ajout d&rsquo;une carte qui affiche toutes les sessions de charge</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox13.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5543" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox13.png" alt="" width="453" height="487" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox13.png 453w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox13-279x300.png 279w" sizes="auto, (max-width: 453px) 100vw, 453px" /></a></p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">&lt;div&gt;Sessions de charge&lt;/div&gt; 
Dernière mise à jour : {{ state_attr('sensor.sessions_de_charge','updated_at')}} &lt;br&gt;&lt;br&gt;
{% set items = state_attr('sensor.wallbox_charges', 'sessionscharge') %}
&lt;table width='100%'&gt;
&lt;tbody&gt;
{% for i in range(0, items | count, 1) %}
&lt;tr&gt;
&lt;td&gt;{{ items[i].début }} à {{ items[i].fin }} ({{ items[i].durée }})&lt;/td&gt;
&lt;td&gt;{{ items[i].consommation }} kWh&lt;/td&gt;
&lt;td&gt;+{{ items[i].km }} km&lt;/td&gt;
&lt;td&gt;{{ items[i].coût }} €&lt;/td&gt;
&lt;/tr&gt;

{% endfor %}
&lt;/tbody&gt;
&lt;/table&gt;</pre>



<h3>Ajout d&rsquo;une carte qui affiche un récapitulatif par année, mois, semaine</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox14.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5547" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox14.png" alt="" width="457" height="416" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox14.png 457w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/wallbox14-300x273.png 300w" sizes="auto, (max-width: 457px) 100vw, 457px" /></a></p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">type: markdown
content: &gt;-
  &lt;div&gt;&lt;h1&gt;Sessions de charge&lt;/div&gt;  {%- set default_language = 'fr' %} Dernière
  mise à jour : {{ state_attr('sensor.wallbox_charges','updated_at')}} &lt;br&gt;&lt;br&gt;


  {% set items = state_attr('sensor.wallbox_charges', 'sessionscharge') %}

  {% set septjours = now() - timedelta(days=7) %}

  {% set power_semaine = namespace(value=0) %}

  {% set cout_semaine = namespace(value=0) %}

  {% set unmois = now() - timedelta(days=30) %}

  {% set power_mois = namespace(value=0) %}

  {% set cout_mois = namespace(value=0) %}

  {% set uneannee = now() - timedelta(days=365) %}

  {% set power_annee = namespace(value=0) %}

  {% set cout_annee = namespace(value=0) %}


  {% for i in range(0, items | count, 1) %}
    {% if items[i].saved_at | int &gt;= as_timestamp(uneannee) %}
    {% set power_annee.value = power_annee.value + items[i].consommation %}
    {% set cout_annee.value = cout_annee.value + items[i].coût %}
      {% if items[i].saved_at | int &gt;= as_timestamp(unmois) %}  
        {% set power_mois.value = power_mois.value + items[i].consommation %}
        {% set cout_mois.value = cout_mois.value + items[i].coût %}
        {% if items[i].saved_at | int &gt;= as_timestamp(septjours) %}
          {% set power_semaine.value = power_semaine.value + items[i].consommation %}
          {% set cout_semaine.value = cout_semaine.value + items[i].coût %}        
        {% endif %}
      {% endif %}
    {% endif %}
  {% endfor %}

  &lt;/ha-alert&gt; &lt;ha-alert alert-type="info" title="Dernier mois : {{
  power_mois.value | int }} kWh - {{ cout_mois.value | float | round(2) }}
  &amp;euro;"&gt;&lt;/ha-alert&gt; &lt;ha-alert alert-type="info" title="Dernière année : {{
  power_annee.value | int }} kWh - {{ cout_annee.value | float | round(2) }}
  &amp;euro;"&gt;&lt;/ha-alert&gt;


  &lt;br&gt; 


  {% set items = state_attr('sensor.wallbox_charges', 'sessionscharge') %}

  {% set septjours = now() - timedelta(days=7) %}

  &lt;table width='100%'&gt; &lt;tbody&gt;  {% for i in range(0, items | count, 1) %}  {% if
  items[i].saved_at | int &gt;= as_timestamp(septjours) %} {% set datetime_obj =
  strptime(items[i].début, '%d/%m/%Y %H:%M') %}

  &lt;tr&gt; &lt;td&gt;&lt;h5&gt;{{items[i].début }} à {{ items[i].fin }} ({{ items[i].durée
  }})&lt;/td&gt; &lt;td&gt;{{
    items[i].consommation }} kWh&lt;/td&gt; &lt;td&gt;+{{ items[i].km }} km&lt;/td&gt; &lt;td&gt;{{
    items[i].coût }} €&lt;/td&gt; &lt;/tr&gt; {% endif %} {% endfor %} &lt;/tbody&gt; &lt;/table&gt;
    &lt;ha-alert alert-type="success" title="Dernière semaine : {{
      power_semaine.value | int}} kWh - {{ cout_semaine.value | float | round(2)
      }}&amp;euro;"&gt;    
style:
  .: |
    ha-card {
      margin: 0px 0px 0px 0px;
      box-shadow: none;
     }
  ha-markdown:
    $: |
      h5 {
        font-size: 15px !important;
        font-weight: normal !important;
        padding: 0px 0px 0px 8px !important;
        border-left: 3px solid #429f46;
        }
</pre>
<p>&nbsp;</p>



<h2>Bonus : Enregistrer les données dans un fichier CSV</h2>
<p>Pour une utilisation future (et pour ne pas perdre les données en cas de pépin), j&rsquo;ai décidé d&rsquo;enregistrer chaque session de charge sans un fichier CSV. A chaque session, une ligne est ajoutée.</p>
<p>Voici comment j&rsquo;ai réalisé cela.</p>
<h3>J&rsquo;ajoute un sensor « file » qui correspond au fichier CSV</h3>
<p>J&rsquo;utilise un fichier <strong>notify.yaml</strong> qui se trouve dans le dossier de configuration.yaml qui est déclaré dans ce fichier grâce à la commande <strong>notify: !include notify.yaml</strong></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/notify.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5624" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/notify.png" alt="" width="396" height="74" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/notify.png 396w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/notify-300x56.png 300w" sizes="auto, (max-width: 396px) 100vw, 396px" /></a></p>
<p>Je déclare ce nouveau sensor avec ce code :</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">- name: sessions_de_charge_CSV
  platform: file
  filename: /config/www/csv/sessions_de_charge.csv
  timestamp: false</pre>
<p>Ainsi, quand je voudrais écrire dans le fichier, il me suffira d&rsquo;exécuter le service <strong>notify.sessions_de_charge_CSV</strong></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/notify2.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5625" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/notify2.png" alt="" width="395" height="121" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/notify2.png 395w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/notify2-300x92.png 300w" sizes="auto, (max-width: 395px) 100vw, 395px" /></a></p>
<h3>J&rsquo;ajoute une action</h3>
<p>J&rsquo;ajoute une action dans l&rsquo;automatisation présentée précédemment qui va écrire une ligne à chaque enregistrement d&rsquo;une session de charge</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">service: notify.sessions_de_charge_CSV
data:
  data: {}
  message: &gt;-
    {% set diff_seconds = now().timestamp() -
    states.sensor.wallbox_portal_added_range_min.state | as_timestamp %} {% set
    hours = (diff_seconds / 3600) | int %} {% set minutes = ((diff_seconds %
    3600) / 60) | int %} {% set sessioncharge_string = "" +
    states('sensor.wallbox_portal_added_energy') | round(2) | replace('.', ',')|
    string + "; " + (states('sensor.wallbox_portal_energy_price') | float *
    states('sensor.wallbox_portal_added_energy') | float | round(2)) | round(2)
    | replace('.', ',')| string + "; " + '%02d:%02d' | format(hours, minutes) |
    string + "; " +
    as_timestamp(states('sensor.wallbox_portal_added_range_min')) | int |
    timestamp_custom('%d/%m/%Y', true) | string + "; " +
    as_timestamp(states('sensor.wallbox_portal_added_range_min')) | int |
    timestamp_custom('%H:%M', true) | string + "; " + now().strftime('%H:%M') |
    string + "; " + states('sensor.wallbox_portal_added_range') | int | string +
    "; " + now().timestamp() | int| string %} {{ sessioncharge_string }}
enabled: true
alias: Ajouter une ligne dans le fichier sessions_de_charge.CSV
</pre>
<p> </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Verwenden eines Python-Skripts zum Speichern von Daten in HA</title>
		<link href="">https://www.sigalou-domotique.fr/de/utiliser-un-script-python-pour-enregistrer-des-donnees-dans-ha</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Sat, 21 Oct 2023 13:56:49 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Développement]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=5248</guid>

					<description><![CDATA[Je préviens tout de suite, ce Retex n&#8217;est qu&#8217;à vocation pédagogique, je le rédige pour partager une méthodologie, à savoir que j&#8217;ai réalisé cette fonctionnalité différemment depuis, donc je n&#8217;ai pas ce process en prod. L&#8217;intégration pour exécuter le script Python Pour une raison que je n&#8217;ai jamais compris, les fonctionnalités scripts python intégrées à [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Je préviens tout de suite, ce Retex n&rsquo;est qu&rsquo;à vocation pédagogique, je le rédige pour partager une méthodologie, à savoir que j&rsquo;ai réalisé cette fonctionnalité différemment depuis, donc je n&rsquo;ai pas ce process en prod.<span id="more-5248"></span></p>
<h3>L&rsquo;intégration pour exécuter le script Python</h3>
<p>Pour une raison que je n&rsquo;ai jamais compris, les fonctionnalités scripts python intégrées à HA sont archi-mini, aucun import n&rsquo;est possible, je dois donc utiliser une intégration appelée <a href="https://github.com/custom-components/pyscript" target="_blank" rel="noopener">pyscript</a>.</p>
<p><a href="https://hacs-pyscript.readthedocs.io/en/latest/" target="_blank" rel="noopener">La doc est ici.</a></p>
<p>Je passe les détails pour l&rsquo;installer, c&rsquo;est très simple avec HACS et tout est dans la doc.</p>
<p>Dans configuration.yaml, j&rsquo;ai bien ces lignes :</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">pyscript:
  allow_all_imports: true
  hass_is_global: true</pre>
<h3>Je récupère un jeton</h3>
<p>J&rsquo;ouvre l&rsquo;interface utilisateur de Home Assistant.</p>
<p>Dans le coin inférieur gauche, je clique sur mon nom d&rsquo;utilisateur (ou l&rsquo;icône du profil).</p>
<p>Je clique sur « Profil ».</p>
<p>Je fais défiler vers le bas jusqu&rsquo;à la section « Jetons d&rsquo;accès longue durée ». </p>
<p>Je clique sur « Créer un jeton » pour générer un nouveau jeton.</p>
<p>Je donne un nom à mon jeton pour m&rsquo;y retrouver plus facilement.</p>
<p>Une fois le jeton créé, je vois son contenu. Je copie la valeur du jeton, c&rsquo;est-à-dire la série de caractères alphanumériques, et je la colle dans ma configuration (paragraphe suivant)</p>
<h3>Déclaration de la plateforme qui fait le lien entre Python et le sensor</h3>
<p>Dans configuration.yaml, j&rsquo;ajoute ces lignes :</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">rest_command:
  send_data_to_api:
    url: 'http://homeassistant.local:8123/api/states/sensor.wallbox_charges'
    method: 'post'
    content_type: 'application/json'
    headers:
      Authorization: 'Bearer TOKEN'  # Remplacer TOKEN par le token cf paragraphe précédent
    payload: '{{ data | tojson }}'  </pre>
<p>Il s&rsquo;agit de la porte d&rsquo;entrée qui sera approvisionné par le script Python (plus bas) et qui enverra les informations dans le sensor sensor.wallbox_charges.</p>
<h3>Mon script Python</h3>
<p>Je place le fichier wallbox_charges.py dans le dossier /config/pyscript</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">import datetime
import pytz
@service
def wallbox_charges(lastdata=None, action=None, prix="123", km="123", dateDebut="01/01/2000 12:00:00", valeur="123"):
    fuseau_horaire_paris = pytz.timezone("Europe/Paris")

    maintenant_timestamp = int(datetime.datetime.now().timestamp())
    maintenant_heure_paris = datetime.datetime.fromtimestamp(maintenant_timestamp, fuseau_horaire_paris)
    maintenant_formatee = maintenant_heure_paris.strftime("%d/%m/%Y %H:%M:%S")

    maintenantMoins20min = datetime.datetime.now() - datetime.timedelta(minutes=20)
    maintenantMoins20min_formatee = maintenantMoins20min.strftime("%H:%M")
    
    
    dateDebutRecue = datetime.datetime.strptime(dateDebut, '%d/%m/%Y %H:%M:%S').replace(tzinfo=fuseau_horaire_paris)
    debut_timestamp_formatee = dateDebutRecue.strftime("%d/%m/%Y %H:%M:%S")
    debut_timestamp_formatee_SansSecondes = dateDebutRecue.strftime("%d/%m/%Y %H:%M")
    
     # Transformez les chaînes en objets datetime
    maintenant_dt = datetime.datetime.strptime(maintenant_formatee, "%d/%m/%Y %H:%M:%S")
    debut_dt = datetime.datetime.strptime(debut_timestamp_formatee, "%d/%m/%Y %H:%M:%S")

    # Calculez la différence entre les objets datetime
    tempsDeCharge = maintenant_dt - debut_dt - datetime.timedelta(minutes=20)

    # Formatez la durée en heures, minutes et secondes
    heures, reste = divmod(tempsDeCharge.seconds, 3600)
    minutes, secondes = divmod(reste, 60)

    # Affichez la durée au format HH:MM:SS
    tempsDeCharge_formatee = f"{heures:02}:{minutes:02}"


    # Écrivez un message d'information dans le journal
    #log.info(action)




    if action == "enregistrer":
        valeuraajouter =  [{
                          "saved_at": maintenant_timestamp,
                          "début": debut_timestamp_formatee_SansSecondes,
                          "fin": maintenantMoins20min_formatee,
                          "durée": tempsDeCharge_formatee,
                          "consommation": valeur,
                          "km": km,
                          "coût": round(valeur * prix, 2)
                        }]
        if lastdata is not None:
            valeuraajouter = lastdata + valeuraajouter
        data =  {
                    "state": debut_timestamp_formatee_SansSecondes,  
                    "attributes": {
                      "updated_at": maintenant_dt.strftime("%d/%m/%Y %H:%M:%S"),
                      "sessionscharge": 
                      valeuraajouter
                    }
                }

    if action == "init":
        data =  {
                "state": "on",
                    "attributes": {
                      "updated_at": "14/10/2023 16:42:39",
                      "sessionscharge": [
                        {
                          "consommation": 2.14,
                          "coût": 0.43,
                          "durée": "00:27",
                          "début": "19/09/2023 20:36",
                          "fin": "21:03",
                          "km": 17,
                          "saved_at": 1695150359
                        },
                        {
                          "consommation": 23.29,
                          "coût": 4.66,
                          "durée": "04:19",
                          "début": "21/09/2023 21:06",
                          "fin": "01:25",
                          "km": 192,
                          "saved_at": 1695323159
                        },
                        {
                          "consommation": 7.68,
                          "coût": 1.54,
                          "durée": "01:23",
                          "début": "22/09/2023 08:45",
                          "fin": "10:08",
                          "km": 63,
                          "saved_at": 1695409559
                        },
                        {
                          "consommation": 23.80,
                          "coût": 4.76,
                          "durée": "04:26",
                          "début": "23/09/2023 16:57",
                          "fin": "21:23",
                          "km": 196,
                          "saved_at": 1695495959
                        }
                       ]
                    }
                }   



    # Appelez le service REST pour envoyer les données
    service_data = {
        "token": "xxxxxx",  # Remplacer par le token
        "data": data
    }

    if action == "enregistrer" or action == "init":
        # Appelez le service REST de manière asynchrone
        await hass.services.async_call('rest_command', 'send_data_to_api', service_data)
        
    # Écrivez un message d'erreur dans le journal
    #log.error("Fin script")</pre>
<h3>Ajouter deux automatisations</h3>
<p>Une pour initialiser le sensor, l&rsquo;autre pour ajouter une donnée</p>
<h4>Initialiser les données</h4>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">alias: Initialise les sessions de charge
description: ""
trigger: []
condition: []
action:
  - service: pyscript.wallbox_charges
    data:
      action: init
mode: single
</pre>
<h4>Enregistrer les données</h4>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">alias: Enregistre une session de charge
description: &gt;-
  Cette automatisation se déclenche lorsque le capteur n'a pas changé de valeur
  depuis 20 minutes et n'est pas à 0
trigger:
  - platform: state
    entity_id:
      - sensor.wallbox_portal_added_range
    for:
      hours: 0
      minutes: 20
      seconds: 0
    enabled: true
condition:
  - condition: numeric_state
    entity_id: sensor.wallbox_portal_added_energy
    above: 0
  - condition: not
    conditions:
      - condition: state
        entity_id: sensor.wallbox_charges
        state: &gt;-
          {{ as_timestamp(states('sensor.wallbox_portal_added_range_min')) | int
          |     timestamp_custom('%d/%m/%Y %H:%M:%S', true)}}
    enabled: false
action:
  - service: pyscript.wallbox_charges
    data:
      action: enregistrer
      valeur: "{{states('sensor.wallbox_portal_added_energy')}}"
      prix: "{{states('sensor.wallbox_portal_energy_price')}}"
      km: "{{states('sensor.wallbox_portal_added_range')}}"
      lastdata: "{{state_attr('sensor.wallbox_charges', 'sessionscharge')}}"
      dateDebut: &gt;-
        {{ as_timestamp(states('sensor.wallbox_portal_added_range_min')) | int |
        timestamp_custom('%d/%m/%Y %H:%M:%S', true)}}
  - service: variable.update_sensor
    data:
      replace_attributes: false
      value: &gt;-
        {{ as_timestamp(states('sensor.wallbox_portal_added_range_min')) | int
        |     timestamp_custom('%d/%m/%Y %H:%M:%S', true)}}
    target:
      entity_id: sensor.wallbox_charges
    enabled: false
mode: single</pre>
<p>Pour avoir la valeur minimal de la charge, j&rsquo;utilise statistic pour avoir la valeur min</p>
<p>Ce sensor est déclaré dans sensors.yaml</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">- platform: statistics
  name: "Wallbox Portal Added Range Min"
  entity_id: sensor.wallbox_portal_added_range
  state_characteristic: datetime_value_min
  max_age:
    hours: 10  
   </pre>
<h3>Résultat du stockage des infos</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5258" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge.png" alt="" width="729" height="546" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge.png 729w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge-600x449.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge-300x225.png 300w" sizes="auto, (max-width: 729px) 100vw, 729px" /></a></p>
<h3>Carte d&rsquo;affichage de toutes les sessions</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge2.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5261" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge2.png" alt="" width="388" height="375" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge2.png 388w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge2-300x290.png 300w" sizes="auto, (max-width: 388px) 100vw, 388px" /></a></p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">&lt;div&gt;Sessions de charge&lt;/div&gt; 
Dernière mise à jour : {{ state_attr('sensor.wallbox_charges','updated_at')}} &lt;br&gt;&lt;br&gt;
{% set items = state_attr('sensor.wallbox_charges', 'sessionscharge') %}
&lt;table width='100%'&gt;
&lt;tbody&gt;
{% for i in range(0, items | count, 1) %}
&lt;tr&gt;
&lt;td&gt;{{ items[i].début }} à {{ items[i].fin }} ({{ items[i].durée }})&lt;/td&gt;
&lt;td&gt;{{ items[i].consommation }} kWh&lt;/td&gt;
&lt;td&gt;+{{ items[i].km }} km&lt;/td&gt;
&lt;td&gt;{{ items[i].coût }} €&lt;/td&gt;
&lt;/tr&gt;

{% endfor %}
&lt;/tbody&gt;
&lt;/table&gt;</pre>
<p>Carte d&rsquo;affichage avec des totaux par année, mois, semaine</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge3.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5262" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge3.png" alt="" width="383" height="415" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge3.png 383w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/charge3-277x300.png 277w" sizes="auto, (max-width: 383px) 100vw, 383px" /></a></p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">type: markdown
content: &gt;-
  &lt;div&gt;&lt;h1&gt;Sessions de charge&lt;/div&gt;  {%- set default_language = 'fr' %} Dernière
  mise à jour : {{ state_attr('sensor.wallbox_charges','updated_at')}} &lt;br&gt;&lt;br&gt;


  {% set items = state_attr('sensor.wallbox_charges', 'sessionscharge') %}

  {% set septjours = now() - timedelta(days=7) %}

  {% set power_semaine = namespace(value=0) %}

  {% set cout_semaine = namespace(value=0) %}

  {% set unmois = now() - timedelta(days=30) %}

  {% set power_mois = namespace(value=0) %}

  {% set cout_mois = namespace(value=0) %}

  {% set uneannee = now() - timedelta(days=365) %}

  {% set power_annee = namespace(value=0) %}

  {% set cout_annee = namespace(value=0) %}


  {% for i in range(0, items | count, 1) %}
    {% if items[i].saved_at | int &gt;= as_timestamp(uneannee) %}
    {% set power_annee.value = power_annee.value + items[i].consommation %}
    {% set cout_annee.value = cout_annee.value + items[i].coût %}
      {% if items[i].saved_at | int &gt;= as_timestamp(unmois) %}  
        {% set power_mois.value = power_mois.value + items[i].consommation %}
        {% set cout_mois.value = cout_mois.value + items[i].coût %}
        {% if items[i].saved_at | int &gt;= as_timestamp(septjours) %}
          {% set power_semaine.value = power_semaine.value + items[i].consommation %}
          {% set cout_semaine.value = cout_semaine.value + items[i].coût %}        
        {% endif %}
      {% endif %}
    {% endif %}
  {% endfor %}

  &lt;/ha-alert&gt; &lt;ha-alert alert-type="info" title="Dernier mois : {{
  power_mois.value | int }} kWh - {{ cout_mois.value | float | round(2) }}
  &amp;euro;"&gt;&lt;/ha-alert&gt; &lt;ha-alert alert-type="info" title="Dernière année : {{
  power_annee.value | int }} kWh - {{ cout_annee.value | float | round(2) }}
  &amp;euro;"&gt;&lt;/ha-alert&gt;


  &lt;br&gt; 


  {% set items = state_attr('sensor.wallbox_charges', 'sessionscharge') %}

  {% set septjours = now() - timedelta(days=7) %}

  &lt;table width='100%'&gt; &lt;tbody&gt;  {% for i in range(0, items | count, 1) %}  {% if
  items[i].saved_at | int &gt;= as_timestamp(septjours) %} {% set datetime_obj =
  strptime(items[i].début, '%d/%m/%Y %H:%M') %}

  &lt;tr&gt; &lt;td&gt;&lt;h5&gt;{{items[i].début }} à {{ items[i].fin }} ({{ items[i].durée
  }})&lt;/td&gt; &lt;td&gt;{{
    items[i].consommation }} kWh&lt;/td&gt; &lt;td&gt;+{{ items[i].km }} km&lt;/td&gt; &lt;td&gt;{{
    items[i].coût }} €&lt;/td&gt; &lt;/tr&gt; {% endif %} {% endfor %} &lt;/tbody&gt; &lt;/table&gt;
    &lt;ha-alert alert-type="success" title="Dernière semaine : {{
      power_semaine.value | int}} kWh - {{ cout_semaine.value | float | round(2)
      }}&amp;euro;"&gt;    
style:
  .: |
    ha-card {
      margin: 0px 0px 0px 0px;
      box-shadow: none;
     }
  ha-markdown:
    $: |
      h5 {
        font-size: 15px !important;
        font-weight: normal !important;
        padding: 0px 0px 0px 8px !important;
        border-left: 3px solid #429f46;
        }
</pre>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>J&#8217;ajoute un gif animé transparent à mon Dashboard HA</title>
		<link href="">https://www.sigalou-domotique.fr/de/jajoute-un-gif-anime-transparent-a-mon-dashboard-ha</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Sat, 07 Oct 2023 14:04:07 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Développement]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=5170</guid>

					<description><![CDATA[Mon objectif Mon objectif est de réaliser une animation via un gif animé. Je pourrai changer de gif en fonction de l&#8217;état d&#8217;une entité. Je vais dessiner les deux boules (une rouge une bleue) Un petit coup de Photoshop ou autre et voici le fichier de base Je vais créer l&#8217;animation dans Canva Ma version [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3>Mon objectif</h3>
<p>Mon objectif est de réaliser une animation via un gif animé.</p>
<p>Je pourrai changer de gif en fonction de l&rsquo;état d&rsquo;une entité.</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/jusaucompteur.gif"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5171" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/jusaucompteur.gif" alt="" width="467" height="459" /></a><span id="more-5170"></span></p>
<h3>Je vais dessiner les deux boules (une rouge une bleue)</h3>
<p>Un petit coup de Photoshop ou autre et voici le fichier de base</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/2boules.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5175" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/2boules.png" alt="" width="36" height="16" /></a></p>
<h3>Je vais créer l&rsquo;animation dans Canva</h3>
<p>Ma version de photoshop étant ancienne, je n&rsquo;ai pas la fonctionnalité montage à la maison, j&rsquo;utilise Canva (en ligne).</p>
<p>Pour éviter une marque blanche au détourage, je mets le fond de mon écran HA en fond, le résultat est :</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/resultatCanva.gif"><img loading="lazy" decoding="async" class="alignnone  wp-image-5176" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/resultatCanva.gif" alt="" width="102" height="255" /></a></p>
<h3>Je vais basculer sur un fond transparent</h3>
<p>Je n&rsquo;ai pas trouvé comment faire cela avec Canva, j&rsquo;utilise un outil en  ligne</p>
<ul>
<li><a href="https://onlinegiftools.com/remove-gif-background" target="_blank" rel="noopener">https://onlinegiftools.com/remove-gif-background</a></li>
</ul>
<p>Le résultat donne </p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/anime8.gif"><img loading="lazy" decoding="async" class="alignnone  wp-image-5177" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/anime8.gif" alt="" width="105" height="263" /></a></p>
<h3>Je fais deux autres animations</h3>
<p>Pour avoir trois états, je génère deux autres fichiers, un plus rapide et un plus lent, donc trois fichiers au total :</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 33.3333%;"><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/rapide-1.gif"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5182" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/rapide-1.gif" alt="" width="400" height="1000" /></a></td>
<td style="width: 33.3333%;"><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/moyenne.gif"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5183" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/moyenne.gif" alt="" width="400" height="1000" /></a></td>
<td style="width: 33.3333%;"><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/lente.gif"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5184" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/10/lente.gif" alt="" width="400" height="1000" /></a></td>
</tr>
</tbody>
</table>
<h3>J&rsquo;ajoute un template qui va correspondre à la puissance consommée </h3>
<p>Dans mon fichier templates.yaml, j&rsquo;ajoute</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">- name: Consommation_vitesse
  unique_id: sensor.consommation_vitesse
  state: &gt;-
          {% if (states('sensor.linky_puissance_apparente')|float) &lt; 400 %}
            lente
          {% elif (states('sensor.linky_puissance_apparente')|float) &gt;4000 %}
            rapide
          {% else %}
            moyenne
          {% endif %} </pre>
<p>Sur le dashboard, j&rsquo;ajoute une carte qui va afficher un des 3 gif animés, cela en fonction de la valeur de sensor.consommation_vitesse.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">- type: image
  entity: sensor.consommation_vitesse
  tap_action:
    action: none
  style:
    width: 7%
    top: 91.6%
    left: 26.7%
  state_image:
    lente: /local/maison/Conso/lente.gif
    moyenne: /local/maison/Conso/moyenne.gif
    rapide: /local/maison/Conso/rapide.gif</pre>
<p> </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ich integriere den Power Boost EM112 von Carlo Gavazzi über den RS485-Port (Modbus) in den Home Assistant</title>
		<link href="">https://www.sigalou-domotique.fr/de/jintegre-le-power-boost-em112-de-chez-carlo-gavazzi-dans-home-assistant-via-le-port-rd485-modbus</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Sat, 30 Sep 2023 07:50:07 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Wallbox]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=5097</guid>

					<description><![CDATA[Information importante A noter que l&#8217;intégration décrite ci-dessous ne peut fonctionner que si la clé USB/RS485 est le seul équipement du bus RS485 connectée au EM112. En effet (et grâce à l&#8217;aide d&#8217;Eric G.) J&#8217;ai compris qu&#8217;il ne pouvait y avoir qu&#8217;un seul équipement maitre sur le bus. Or le maitre est celui qui interroge [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3>Information importante</h3>
<blockquote>
<p>A noter que l&rsquo;intégration décrite ci-dessous ne peut fonctionner que si la clé USB/RS485 est le seul équipement du bus RS485 connectée au EM112. En effet (et grâce à l&rsquo;aide d&rsquo;Eric G.) J&rsquo;ai compris qu&rsquo;il ne pouvait y avoir qu&rsquo;<strong>un seul équipement maitre sur le bus</strong>. Or le maitre est celui qui interroge et l&rsquo;esclave celui qui répond. l&rsquo;EM112 est donc esclave.</p>
<p>Mon idée première était de sniffer les trames de dialogues entre l&rsquo;EM112 et ma Wallbox, la Wallbox étant maitre, je ne peux faire cela. Pour la beauté de l&rsquo;exercice, j&rsquo;ai testé avec deux maitres, cela fonctionne on retrouve des valeurs mais de temps en temps, quand les deux maitres posent une question ensemble, on se retrouve avec une erreur.</p>
<p><strong>Si quelqu&rsquo;un peut m&rsquo;orienter vers une manière de « snifer » le bus 485 pour intercepter les informations que le EM112 envoie à une Wallbox par exemple, je suis preneur car à ce stade, je ne peux avoir une Wallbox et une Clé RS485/USB en parallèle (deux maitres).</strong></p>
</blockquote>
<p><span id="more-5097"></span></p>
<h3>&nbsp;Matériel utilisé et drivers</h3>
<p>L&rsquo;équipement le plus cher de tout mon tableau (1.33€ sur <a href="https://s.click.aliexpress.com/e/_Dmm7Ncx" target="_blank" rel="noopener">Ali</a> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" />), celle-ci fonctionne, visiblement il y a des fausses clés, j&rsquo;ai peut-être eu de la chance mais ce vendeur est sérieux.</p>
<ul>
<li><a href="https://s.click.aliexpress.com/e/_Dmm7Ncx" target="_blank" rel="noopener">Clé USB/RS485</a></li>
</ul>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5133" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485.png" alt="" width="272" height="236"></a></p>
<p>Evidemment dès réception, je l&rsquo;ai ouverte pour trouver une référence, c&rsquo;est une <strong>YYH-256</strong></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-3.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5134" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-3.png" alt="" width="468" height="140" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-3.png 468w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-3-300x90.png 300w" sizes="auto, (max-width: 468px) 100vw, 468px" /></a> <a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-2.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5135" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-2.png" alt="" width="421" height="300" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-2.png 421w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-2-300x214.png 300w" sizes="auto, (max-width: 421px) 100vw, 421px" /></a></p>
<p>En cherchant sur les forum, on retrouve que c&rsquo;est (probablement) un fork de <strong>CH341</strong> les drivers de ce dernier sont même utilisés.</p>
<p>A noter que mes recherches de drivers ont été inutiles puisque la clé est nativement reconnue sur le RaspberryPi4/HAOS que j&rsquo;utilise.</p>
<p>Je poste ici ce schéma qui donne les circuits utilisés, à noter que le quartz a disparu, ce n&rsquo;est pas un oubli à la soudure, c&rsquo;est une évolution de la clé (un composant gagné, c&rsquo;est un composant gagné).</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/images.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5136" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/images.jpg" alt="" width="343" height="147" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/images.jpg 343w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/images-300x129.jpg 300w" sizes="auto, (max-width: 343px) 100vw, 343px" /></a></p>
<p>&nbsp;</p>



<h3>Je relie la clé USB au port RS485</h3>
<p>La clé a deux connecteurs D+ et D-, il suffit de les connecter sur les broches B+(4) et A-(5) du EM112</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-8.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5150" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-8.png" alt="" width="333" height="238" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-8.png 333w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-8-300x214.png 300w" sizes="auto, (max-width: 333px) 100vw, 333px" /></a></p>
<h3>Je connecte la clé sur le port USB du Raspi4</h3>
<p>Je teste immédiatement la commande  <strong>lsusb</strong> sur la ligne de commande et je constate que quand la nouvelle clé est branchée, j&rsquo;ai une ligne de plus, c&rsquo;est plutôt bon signe.</p>
<p>Je passe les soucis de ports /dev/ttyUSB0 et /dev/ttyUSB1 qui changent à chaque démarrage, j&rsquo;ai solutionné et documenté la solution sur :</p>
<ul>
<li><a href="https://www.sigalou-domotique.fr/fixer-les-ports-usb-d-un-raspberry" target="_blank" rel="noopener">Fixer les ports USB d&rsquo;un Raspberry</a></li>
</ul>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2019/09/b7b14ba75628093cb044d04b31c57196d5303e5d.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5125" src="https://www.sigalou-domotique.fr/wp-content/uploads/2019/09/b7b14ba75628093cb044d04b31c57196d5303e5d.png" alt="" width="1073" height="71" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2019/09/b7b14ba75628093cb044d04b31c57196d5303e5d.png 1073w, https://www.sigalou-domotique.fr/wp-content/uploads/2019/09/b7b14ba75628093cb044d04b31c57196d5303e5d-600x40.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2019/09/b7b14ba75628093cb044d04b31c57196d5303e5d-300x20.png 300w, https://www.sigalou-domotique.fr/wp-content/uploads/2019/09/b7b14ba75628093cb044d04b31c57196d5303e5d-1024x68.png 1024w, https://www.sigalou-domotique.fr/wp-content/uploads/2019/09/b7b14ba75628093cb044d04b31c57196d5303e5d-768x51.png 768w" sizes="auto, (max-width: 1073px) 100vw, 1073px" /></a></p>
<p>Je note que j&rsquo;utiliserai le port <span class="enlighter-text">/dev/serial/by-id/usb-1a86_USB2.</span><span class="enlighter-n1">0</span><span class="enlighter-text">-Ser_-if00-port0 pour me connecter à cette clé.</span></p>
<h3>Je configure l&rsquo;intégration Modbus qui est nativement dans HA</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/modbus.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5137" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/modbus.png" alt="" width="476" height="156" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/modbus.png 476w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/modbus-300x98.png 300w" sizes="auto, (max-width: 476px) 100vw, 476px" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-4.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5138" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-4.png" alt="" width="315" height="53" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-4.png 315w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-4-300x50.png 300w" sizes="auto, (max-width: 315px) 100vw, 315px" /></a></p>
<p>Dans mon fichier configuration, j&rsquo;ajoute la ligne modbus: !include modbus.yaml</p>
<p>Et dans modbus.yaml, je déclare la clé</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-5.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5139" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-5.png" alt="" width="533" height="246" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-5.png 533w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-5-300x138.png 300w" sizes="auto, (max-width: 533px) 100vw, 533px" /></a></p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">- name: modbus_hub
  type: serial
  #port: /dev/ttyUSB1
  port: /dev/serial/by-id/usb-1a86_USB2.0-Ser_-if00-port0
  baudrate: 9600
  bytesize: 8
  method: rtu
  parity: N
  stopbits: 1  
  retries: 5
  close_comm_on_error: false
  delay : 5
  timeout : 2
  message_wait_milliseconds : 1000</pre>
<h3>Je déclare chaque sensor </h3>
<p>A partir de là, je me plonge dans la <a href="https://gavazzi.se/app/uploads/2020/11/em111_em112_m1_cp.pdf" target="_blank" rel="noopener">documentation de Gavazzi</a> et je vais chercher les lignes qui m&rsquo;intéressent :</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-6.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5142" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-6.png" alt="" width="677" height="145" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-6.png 677w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-6-600x129.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-6-300x64.png 300w" sizes="auto, (max-width: 677px) 100vw, 677px" /></a></p>
<p>Pour avoir l&rsquo;adresse de chaque sensor, je converti les adresses en hexa en décimal puis je déclare les 4 sensors dans modbus.yaml :</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">sensors:
  - name: EM112_W
    unit_of_measurement: W
    state_class: measurement
    device_class: energy
    slave: 1
    address: 4
    data_type: int32
    input_type: input
    precision: 0 
    scale: 0.1
    scan_interval: 10
    lazy_error_count : 999
    swap : word
    
  - name: EM112_A
    unit_of_measurement: A
    state_class: measurement
    device_class: current
    slave: 1
    address: 2
    data_type: int32
    input_type: input
    precision: 0
    scale: 0.001
    scan_interval: 10
    lazy_error_count : 999
    swap : word
    
  - name: EM112_VA
    unit_of_measurement: VA
    state_class: measurement
    device_class: energy
    slave: 1
    address: 6
    data_type: int32
    input_type: input
    precision: 0 
    scale: 0.1
    scan_interval: 10
    lazy_error_count : 999
    swap : word
    
  - name: EM112_kwh
    unit_of_measurement: kwh
    state_class: total_increasing
    device_class: energy
    slave: 1
    address: 16
    data_type: int32
    input_type: input
    precision: 0 
    scale: 0.1
    scan_interval: 10
    lazy_error_count : 999
    swap : word</pre>
<h3>Je vérifie le résultat</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-7.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5145" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-7.png" alt="" width="725" height="304" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-7.png 725w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-7-600x252.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/rs485-7-300x126.png 300w" sizes="auto, (max-width: 725px) 100vw, 725px" /></a></p>
<p>Parfait ! Il ne reste plus qu&rsquo;à jouer à faire une jolie carte&#8230;</p>
<h3>Rappel</h3>
<p>Ne pas mettre en production en parallèle d&rsquo;une Wallbox</p>
<p><strong>Si quelqu&rsquo;un peut m&rsquo;orienter vers une manière de « snifer » le bus 485 pour intercepter les informations que le EM112 envoie à une Wallbox par exemple, je suis preneur car à ce stade, je ne peux avoir une Wallbox et une Clé RS485/USB en parallèle (deux maitres).</strong></p>
<h3>Bibliographie, Références</h3>
<ul>
<li><a href="https://www.home-assistant.io/integrations/modbus/" target="_blank" rel="noopener">https://www.home-assistant.io/integrations/modbus/</a></li>
<li><a href="https://gavazzi.se/app/uploads/2020/11/em111_em112_m1_cp.pdf" target="_blank" rel="noopener">https://gavazzi.se/app/uploads/2020/11/em111_em112_m1_cp.pdf</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ich erstelle einen virtuellen On/Off-Switch (persistent)</title>
		<link href="">https://www.sigalou-domotique.fr/de/je-cree-un-switch-on-off-virtuel-persistant-home-assistant</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Sat, 23 Sep 2023 08:16:09 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Switch]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=5041</guid>

					<description><![CDATA[Pour pouvoir indiquer à mes automatisations ou scripts si j&#8217;autorisais ou pas l&#8217;arrosage automatique, je voulais créer un switch « virtuel », qui n&#8217;a de lien avec aucune entité (donc pas un template) et qui conserve son état à la relance de Home Assistant (persistant). Je crée un input_boolean Option 1 : Par configuration.yaml Dans mon fichier [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Pour pouvoir indiquer à mes automatisations ou scripts si j&rsquo;autorisais ou pas l&rsquo;arrosage automatique, je voulais créer un switch « virtuel », qui n&rsquo;a de lien avec aucune entité (donc pas un template) et qui conserve son état à la relance de Home Assistant (persistant).</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/switchvirtuel.gif"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5042" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/switchvirtuel.gif" alt="" width="376" height="34" /></a><span id="more-5041"></span></p>
<h3>Je crée un input_boolean</h3>
<h4>Option 1 : Par configuration.yaml</h4>
<p>Dans mon fichier configuration_yaml, je vais ajouter mon interrupteur virtuel</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">input_boolean:
  arrosage_automatique:
    #input_boolean.arrosage_automatique
    name: Arrosage autorisé
    icon: mdi:sprinkler-variant</pre>
<h4>Option 2 : Par l&rsquo;interface graphique</h4>
<p>Je vais dans Paramètres / Appareils et services / Entrées / Créer une entrée / Interrupteur </p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/arrosageautorise4.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5051" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/arrosageautorise4.png" alt="" width="408" height="255" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/arrosageautorise4.png 408w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/arrosageautorise4-300x188.png 300w" sizes="auto, (max-width: 408px) 100vw, 408px" /></a></p>
<h3>Je vais personnaliser son icone</h3>
<p>Cela se réalise dans le fichier customize.yaml qu&rsquo;on doit déclarer dans le fichier configuration.yaml</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/customize.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5129" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/customize.png" alt="" width="245" height="123" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/customize2.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5130" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/customize2.png" alt="" width="465" height="208" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/customize2.png 465w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/customize2-300x134.png 300w" sizes="auto, (max-width: 465px) 100vw, 465px" /></a></p>
<p>Dans ce fichier customize.yaml que j&rsquo;ajoute ces lignes</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">input_boolean.arrosage_automatique:
  templates:
    icon: &gt;
      return (state === 'on') ? 'mdi:sprinkler-variant' : 'mdi:water-off';
    icon_color: &gt;
      return (state === 'on') ? 'green' : 'rgb(54, 95, 140)';</pre>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Der Power Boost EM112 von Carlo Gavazzi</title>
		<link href="">https://www.sigalou-domotique.fr/de/je-decouvre-le-power-boost-em112-de-chez-carlo-gavazzi</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Getötet, 12 Sep 2023 11:51:33 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Wallbox]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=5016</guid>

					<description><![CDATA[Voici la bête : Il faut un peu peur avec ses 10 connecteurs à vis et son grand écran plein de chiffres. Pour faire quoi un EM112 ? Je me lance dans l&#8217;acquisition d&#8217;un véhicule électrique, donc d&#8217;une Wallbox et pour éviter que le chargement de la voiture ne fasse sauter le disjoncteur quand le [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Voici la bête :</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/em112.png"><img loading="lazy" decoding="async" class="alignnone  wp-image-5017" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/em112.png" alt="" width="187" height="199" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/em112.png 453w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/em112-283x300.png 283w" sizes="auto, (max-width: 187px) 100vw, 187px" /></a></p>
<p>Il faut un peu peur avec ses 10 connecteurs à vis et son grand écran plein de chiffres.</p>
<p><span id="more-5016"></span></p>
<h3>Pour faire quoi un EM112 ?</h3>
<p>Je me lance dans l&rsquo;acquisition d&rsquo;un véhicule électrique, donc d&rsquo;une Wallbox et pour éviter que le chargement de la voiture ne fasse sauter le disjoncteur quand le chauffage, le chauffeau et la machine à lavée sont en route, Wallbox conseille de placer en tête de réseau électrique (expliqué plus loin) un module de ce type. Il vérifie la consommation de l&rsquo;ensemble de la maison et informe (via 3 câbles de données) la Wallbox ce qu&rsquo;il lui reste à utiliser.</p>
<h3>Attention, plusieurs versions</h3>
<p>J&rsquo;ai bien étudié le sujet avant de le commander car Carlo Gavazzi est un plaisantin, il nous a regroupé sous le même nom : EM112 plusieurs appareils aux applications et modes de dialogues bien différents.</p>
<p>Dans la <a href="https://support.wallbox.com/fr/knowledge-base/comment-activer-et-utiliser-eco-smart/" target="_blank" rel="noopener">documentation de Wallbox</a>, j&rsquo;ai lu que si on voulait utiliser le dispositif Eco-Smart qui permet d&rsquo;utiliser des panneaux solaires, toutes les versions de EM112 ne sont pas compatibles.</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/em1122.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5018" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/em1122.png" alt="" width="645" height="440" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/em1122.png 645w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/em1122-600x409.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/em1122-300x205.png 300w" sizes="auto, (max-width: 645px) 100vw, 645px" /></a></p>
<p>Dans le mode d&#8217;emploi de l&rsquo;EM112, on voit toutes les versions et options qui existent :</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/image-1.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5019" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/image-1.png" alt="" width="698" height="305" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/image-1.png 698w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/image-1-600x262.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/image-1-300x131.png 300w" sizes="auto, (max-width: 698px) 100vw, 698px" /></a></p>
<p>J&rsquo;avais le secret espoir que la Wallbox Pulsar utilise bien le protocole Mdbus (sur port RS485) pour pouvoir un jour m&rsquo;y interfacer, c&rsquo;est bien cela. La version que j&rsquo;ai reçue est bien en « S1 ».</p>
<h3>Je commande un PowerBoost EM112</h3>
<p>Dans la multitude de sites et de références, j&rsquo;ai peur de faire une bétise. J&rsquo;élimine donc tous les sites qui vendent un EM112 sans indication de la compatibilité avec la Wallbox Pulsar.</p>
<ul>
<li>A ma grande surprise, je vois sur <a href="https://www.norauto.fr/p/compteur-energetique-monophase-power-boost-em-112-pour-wallbox-2535035.html" target="_blank" rel="noopener">le site de Norauto</a> en propose une version au prix de 110€ au jour où j&rsquo;ecris ce Retex. Elle est bien mentionné « pour Wallbox », j&rsquo;imagine que c&rsquo;est la bonne référence mais ni l&rsquo;image ni la description ne donne la référence du produit vendu, j&rsquo;hésite donc.</li>
<li><a href="https://www.carplug.com/wallbox-power-boost-monophase-module-de-gestion-de-charge-dynamique-em112" target="_blank" rel="noopener">Le site Carplug</a> en vend un également, mentionné pour Wallbox également à 108€. Le site que je ne connais pas semble spécialisé et bien fourni. Un schéma et des vidéos illustrent le fonctionnement, bon boulot. C&rsquo;est un site Belge, j&rsquo;invite les amis belges à s&rsquo;y interesser.</li>
<li>Enfin, comme toujours, je regarde si <a href="https://amzn.to/3ZbKuo0" target="_blank" rel="noopener">Amazon</a> n&rsquo;a pas par hasard ce que je cherche. Et bien si, c&rsquo;est encore mieux, c&rsquo;est la marque Wallbox directement, impossible donc de se tromper de référence. 110€. Certain de pouvoir le renvoyer si ce n&rsquo;est pas le bon ou s&rsquo;il ne fonctionne pas, je passe commande.</li>
</ul>
<p>&nbsp;</p>
<p><iframe style="width: 120px; height: 240px;" src="//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=FR&amp;source=ss&amp;ref=as_ss_li_til&amp;ad_type=product_link&amp;tracking_id=sigalou-21&amp;language=fr_FR&amp;marketplace=amazon&amp;region=FR&amp;placement=B0BF1D136K&amp;asins=B0BF1D136K&amp;linkId=b04afbb8d7e7d605469e6ec8a66651cc&amp;show_border=true&amp;link_opens_in_new_window=true" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin"></iframe></p>
<h3>J&rsquo;ai reçu mon Power Boost EM112</h3>
<p>Commandé dimanche, j&rsquo;ai le colis dans ma boite mardi.</p>
<p>Il s&rsquo;agit de la version <strong>EM112-DIN.AV0.1.X.SI.PFB</strong> donc parfait.</p>
<p>Le packaging est bien de la marque Wallbox, le module est un Carlo Gavazzi.</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/20230912_122701_resized.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5020" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/20230912_122701_resized.jpg" alt="" width="1392" height="967" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/20230912_122701_resized.jpg 1392w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/20230912_122701_resized-600x417.jpg 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/20230912_122701_resized-300x208.jpg 300w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/20230912_122701_resized-1024x711.jpg 1024w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/20230912_122701_resized-768x534.jpg 768w" sizes="auto, (max-width: 1392px) 100vw, 1392px" /></a></p>
<h3>Je place le PowerBoost dans mon installation électrique</h3>
<p>Voici le schéma de la doc, le PowerBoost doit être capable de mesurer la <strong>totalité</strong> de la consommation électrique de l&rsquo;installation.</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power2.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5087" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power2.png" alt="" width="532" height="623" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power2.png 532w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power2-256x300.png 256w" sizes="auto, (max-width: 532px) 100vw, 532px" /></a></p>
<h3>Je raccorde le PowerBoost à la Wallbox</h3>
<p>Enfantin et très bien expliqué dans la doc, le bus RS485 (ModBus) est composé de 2 bornes de données D+ et D- ainsi qu&rsquo;une borne de masse GND.</p>
<p>On connecte donc la borne 3 et la borne 5 du PowerBoost puis via un câble de 3 fils minimum, on va se connecter à la Wallbox.</p>
<p>Pour ceux qui ont des perturbations ou beaucoup de longueur, j&rsquo;ai appris grâce à Dimitri qu&rsquo;il existait des câbles Modbus pour ce type de lien, à chercher donc&#8230;</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/58936c264b766ecd3c6f74978b519a8ee1d2cb52.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5082" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/58936c264b766ecd3c6f74978b519a8ee1d2cb52.png" alt="" width="427" height="203" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/58936c264b766ecd3c6f74978b519a8ee1d2cb52.png 427w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/58936c264b766ecd3c6f74978b519a8ee1d2cb52-300x143.png 300w" sizes="auto, (max-width: 427px) 100vw, 427px" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power3.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5089" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power3.png" alt="" width="353" height="215" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power3.png 353w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power3-300x183.png 300w" sizes="auto, (max-width: 353px) 100vw, 353px" /></a></p>
<h3>J&rsquo;active la résistance de terminaison sur la Wallbox</h3>
<p>Ne pas oublier de fermer le bus en déplaçant le petit switch sur la Wallbox</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/powerboost.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5083" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/powerboost.png" alt="" width="217" height="213" /></a></p>
<h3>Je vérifie que la communication entre l&rsquo;EM112 et la Wallbox est active</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5085" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power.png" alt="" width="448" height="575" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power.png 448w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power-234x300.png 234w" sizes="auto, (max-width: 448px) 100vw, 448px" /></a></p>
<h3>J&rsquo;active le PowerBoost dans l&rsquo;application Wallbox</h3>
<p>Pour que le PowerBoost soit pris en compte et pilote bien la Wallbox, il faut le déclarer dans l&rsquo;application Wallbox.</p>
<p>Je fais bien la mise à jour de l&rsquo;application si elle m&rsquo;est proposée.</p>
<p>Ensuite, je vais dans Upgrades</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power4.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5093" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power4.png" alt="" width="192" height="366" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power4.png 192w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power4-157x300.png 157w" sizes="auto, (max-width: 192px) 100vw, 192px" /></a></p>
<p>Puis sur Power Boost</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power5.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5094" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power5.png" alt="" width="185" height="365" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power5.png 185w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power5-152x300.png 152w" sizes="auto, (max-width: 185px) 100vw, 185px" /></a></p>
<p>Activer le Power Boost et spécifier la puissance max (32A chez moi)</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power6.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5095" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power6.png" alt="" width="179" height="365" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power6.png 179w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/power6-147x300.png 147w" sizes="auto, (max-width: 179px) 100vw, 179px" /></a></p>
<p>La prochaine étape sera donc :</p>
<ul>
<li><a href="https://www.sigalou-domotique.fr/jintegre-le-power-boost-em112-de-chez-carlo-gavazzi-dans-home-assistant-via-le-port-rd485-modbus" target="_blank" rel="noopener">J&rsquo;intègre le Power Boost EM112 de chez Carlo Gavazzi dans Home Assistant via le port RD485 (Modbus)</a></li>
</ul>
<p>&nbsp;</p>



<h3>Bibliographie, références</h3>
<ul>
<li><a href="https://support.wallbox.com/wp-content/uploads/2022/07/FR_EMS_Guide_dinstallation_Francais.pdf" target="_blank" rel="noopener">https://support.wallbox.com/wp-content/uploads/2022/07/FR_EMS_Guide_dinstallation_Francais.pdf</a></li>
<li><a href="https://forums.automobile-propre.com/topic/presentation-notre-wallbox-copper-sb-25379/" target="_blank" rel="noopener">https://forums.automobile-propre.com/topic/presentation-notre-wallbox-copper-sb-25379/</a></li>
<li><a href="https://youtu.be/qeQpva-dja0" target="_blank" rel="noopener">https://youtu.be/qeQpva-dja0</a></li>
<li><a href="https://youtu.be/ejBzP3bqMBQ" target="_blank" rel="noopener">https://youtu.be/ejBzP3bqMBQ</a></li>
<li><a href="https://www.gavazzionline.com/pdf/EM112DS.pdf" target="_blank" rel="noopener">https://www.gavazzionline.com/pdf/EM112DS.pdf</a></li>
<li><a href="https://www.youtube.com/watch?v=HTVpM1ZAtAA" target="_blank" rel="noopener">https://www.youtube.com/watch?v=HTVpM1ZAtAA</a></li>
<li><a href="https://www.youtube.com/watch?v=UMen8NHo-QU" target="_blank" rel="noopener">https://www.youtube.com/watch?v=UMen8NHo-QU</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>J&#8217;active Pronote, rentrée Septembre 2023</title>
		<link href="">https://www.sigalou-domotique.fr/de/jactive-pronote-rentree-septembre-2023</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Tue, 05 Sep 2023 16:51:34 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Pronote]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=4956</guid>

					<description><![CDATA[J&#8217;avais supprimé en juillet dernier l&#8217;intégration Pronote, je repars donc tout neuf pour réactiver tout cela pour la rentrée de septembre. Attention, pour cette rentrée, il est nécessaire d&#8217;installer la dernière modification de delphiki (passage en pronotepy 2.12.1), sinon l&#8217;authentification ne fonctionne plus. J&#8217;ajoute le dépôt Pronote J&#8217;installe l&#8217;intégration Avant toute chose, j&#8217;installe l&#8217;intégration: Je [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>J&rsquo;avais supprimé en juillet dernier l&rsquo;intégration Pronote, je repars donc tout neuf pour réactiver tout cela pour la rentrée de septembre.</p>
<p>Attention, pour cette rentrée, il est nécessaire d&rsquo;installer la dernière modification de <a href="https://forum.hacf.fr/u/delphiki" target="_blank" rel="noopener">delphiki</a> (passage en pronotepy 2.12.1), <strong>sinon l&rsquo;authentification ne fonctionne plus</strong>. <span id="more-4956"></span></p>
<h3>J&rsquo;ajoute le dépôt Pronote</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote3.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4966" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote3.png" alt="" width="542" height="250" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote3.png 542w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote3-300x138.png 300w" sizes="auto, (max-width: 542px) 100vw, 542px" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote4.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4967" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote4.png" alt="" width="180" height="64" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote5.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4969" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote5.png" alt="" width="616" height="109" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote5.png 616w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote5-600x106.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote5-300x53.png 300w" sizes="auto, (max-width: 616px) 100vw, 616px" /></a></p>
<h3>J&rsquo;installe l&rsquo;intégration</h3>
<p>Avant toute chose, j&rsquo;installe l&rsquo;intégration:</p>
<p><a href="https://my.home-assistant.io/redirect/brand/?brand=pronote" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4962" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/add_integration.png" alt="" width="207" height="30" /></a></p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote1.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4964" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote1.png" alt="" width="609" height="220" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote1.png 609w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote1-600x217.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote1-300x108.png 300w" sizes="auto, (max-width: 609px) 100vw, 609px" /></a></p>
<h3>Je m&rsquo;identifie</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4965" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2.png" alt="" width="410" height="582" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2.png 410w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2-211x300.png 211w" sizes="auto, (max-width: 410px) 100vw, 410px" /></a></p>
<p>Ma fille est sur Atrium (Académie Aix-Marseille), c&rsquo;est les identifiants Atrium qu&rsquo;il faut donc utiliser.</p>
<p>J&rsquo;utilise le compte Parent avec le lien https://xxxxxxxg.index-education.net/pronote/ sans oublier de sélectionner Atrium dans l&rsquo;ENT.</p>
<h3>Ma page Home Assistant réalisée l&rsquo;année scolaire dernière refonctionne</h3>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2023.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4973" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2023.png" alt="" width="1291" height="763" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2023.png 1291w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2023-600x355.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2023-300x177.png 300w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2023-1024x605.png 1024w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/pronote2023-768x454.png 768w" sizes="auto, (max-width: 1291px) 100vw, 1291px" /></a></p>
<p>Pour les détails de sa réalisation, il faut se référer à ce Retex :</p>
<ul>
<li><a href="https://www.sigalou-domotique.fr/travail-sur-les-cartes-ha-de-pronote" target="_blank" rel="noopener">Je travaille sur les cartes HA de Pronote</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ich steuere die Pilotkabelrelais meiner Heizung mit input_select von Home Assistant</title>
		<link href="">https://www.sigalou-domotique.fr/de/je-pilote-les-relais-du-fil-pilote-de-mon-chauffage-avec-des-input_select-de-home-assistant</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Fri, 01 Sep 2023 17:51:17 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Chauffage]]></category>
		<category><![CDATA[Développement]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=4917</guid>

					<description><![CDATA[&#160; Comme je l&#8217;ai expliqué dans : Commander son chauffage avec un Sonoff 4CH Pro R2 en multi-zones Je pilote mon chauffage sur deux zones grâce à des fils pilotes. Dans le cadre de la bascule de Jeedom vers Home Assistant, il faut donc que j&#8217;arrive à piloter ces relais avec Home Assistant. Pour l&#8217;instant [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>&nbsp;</p>
<p><span style="color: initial; font-size: revert;">Comme je l&rsquo;ai expliqué dans :</span></p>
<ul>
<li><a href="https://www.sigalou-domotique.fr/commander-chauffage-fil-pilote-avec-sonoff-4ch-pro-r2-multi-zones" target="_blank" rel="noopener">Commander son chauffage avec un Sonoff 4CH Pro R2 en multi-zones</a></li>
</ul>
<p>Je pilote mon chauffage sur deux zones grâce à des fils pilotes. Dans le cadre de la bascule de Jeedom vers Home Assistant, il faut donc que j&rsquo;arrive à piloter ces relais avec Home Assistant.</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2018/03/filpiloteprincipe.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-40" src="https://www.sigalou-domotique.fr/wp-content/uploads/2018/03/filpiloteprincipe.jpg" alt="filpiloteprincipe" width="294" height="248" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2018/03/filpiloteprincipe.jpg 597w, https://www.sigalou-domotique.fr/wp-content/uploads/2018/03/filpiloteprincipe-300x253.jpg 300w" sizes="auto, (max-width: 294px) 100vw, 294px" /></a><span id="more-4917"></span></p>
<p>Pour l&rsquo;instant le Sonoff 4CH Pro est piloté par ESP Easy, je le basculerai bientôt sur ESP Home, mais pour l&rsquo;instant, ESP Easy permet de s&rsquo;interfacer avec Jeedom ET Home Assistant via MQTT.</p>
<p>Pour la configuration, je me réfère à ce Retex :</p>
<ul>
<li><a href="https://www.sigalou-domotique.fr/migration-jeedom-vers-home-assistant-le-lien-des-esp-sous-esp-easy-vers-ha" target="_blank" rel="noopener">Migration Jeedom vers Home Assistant, le lien des ESP sous ESP-Easy vers HA</a></li>
</ul>
<h3>Je pilote des relais via MQTT</h3>
<p>Comme expliqué dans le <a href="https://www.sigalou-domotique.fr/migration-jeedom-vers-home-assistant-le-lien-des-esp-sous-esp-easy-vers-ha" target="_blank" rel="noopener">Retex ci dessus</a>, il est nécessaire de configurer les entités qui vont permettre de récupérer les relais dans Home Assistant, cela se réalise dans le fichier mqtt.yaml</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">- name: "Relais 1 Chauffage"
  unique_id: switch.chauffage.relais1
  command_topic: "Chauffage/gpio/12"
  state_topic: "Chauffage/Relais1/Relais1"
  payload_on: "1"
  payload_off: "0"
  retain: true
  device_class: outlet
  device:
      name: "Chauffage"
      identifiers: "chauffage" 
      
      
- name: "Relais 2 Chauffage"
  unique_id: switch.chauffage.relais2
  command_topic: "Chauffage/gpio/5"
  state_topic: "Chauffage/Relais2/Relais2"
  payload_on: "1"
  payload_off: "0"
  retain: true
  device_class: outlet
  device:
      name: "Chauffage"
      identifiers: "chauffage" 
      
      
- name: "Relais 3 Chauffage"
  unique_id: switch.chauffage.relais3
  command_topic: "Chauffage/gpio/4"
  state_topic: "Chauffage/Relais3/Relais3"
  payload_on: "1"
  payload_off: "0"
  retain: true
  device_class: outlet
  device:
      name: "Chauffage"
      identifiers: "chauffage" 
      
      
- name: "Relais 4 Chauffage"
  unique_id: switch.chauffage.relais4
  command_topic: "Chauffage/gpio/15"
  state_topic: "Chauffage/Relais4/Relais4"
  payload_on: "1"
  payload_off: "0"
  retain: true
  device_class: outlet
  device:
      name: "Chauffage"
      identifiers: "chauffage" 
</pre>
<p>Dans HA, ces 4 entités sont facilement récupérées </p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage1.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4924" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage1.png" alt="" width="508" height="231" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage1.png 508w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage1-300x136.png 300w" sizes="auto, (max-width: 508px) 100vw, 508px" /></a></p>
<h3>Je crée des input_select</h3>
<p>C&rsquo;est dans le fichier configuration.yaml que je déclare les deux entités des zones en leur permettant d&rsquo;avoir 4 états possibles.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">input_select:
  chauffage_etage_mode:
    name: Chauffage Zone Etage - Mode
    options:
      - "Confort"
      - "Eco"
      - "Hors Gel"
      - "Off"
    icon: mdi:help-circle-outline
    
  chauffage_rdc_mode:
    name: Chauffage Zone Rez de chaussée - Mode
    options:
      - "Confort"
      - "Eco"
      - "Hors Gel"
      - "Off"
    icon: mdi:help-circle-outline</pre>
<p>Cela m&rsquo;ajoute les deux entités :</p>
<ul>
<li>input_select.chauffage_rdc_mode</li>
<li>input_select.chauffage_etage_mode</li>
</ul>
<h3>Je personnalise des input_select</h3>
<p>Je tente toujours de rendre agréable visuellement les tuiles du dasboard, pour cela, mettre de la couleur et mettre des beaux icones qui correspondent aux états semble indispensable.</p>
<p>La personnalisation se réalise en ajoutant ces lignes dans customize.yaml</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">input_select.chauffage_etage_mode:
  templates:
    icon: &gt;
      if (state == 'Confort') return 'mdi:fire';
      if (state == 'Eco') return 'mdi:leaf';
      if (state == 'Hors Gel') return 'mdi:snowflake-thermometer';
      if (state == 'Off') return 'mdi:power';
      return 'mdi:help-circle-outline';  
    icon_color: &gt;
      if (state == 'Confort') return 'yellow';
      if (state == 'Eco') return 'green';
      if (state == 'Hors Gel') return '#2196f3';
      if (state == 'Off') return 'red';      
      
input_select.chauffage_rdc_mode:
  templates:
    icon: &gt;
      if (state == 'Confort') return 'mdi:fire';
      if (state == 'Eco') return 'mdi:leaf';
      if (state == 'Hors Gel') return 'mdi:snowflake-thermometer';
      if (state == 'Off') return 'mdi:power';
      return 'mdi:help-circle-outline';  
    icon_color: &gt;
      if (state == 'Confort') return 'yellow';
      if (state == 'Eco') return 'green';
      if (state == 'Hors Gel') return '#2196f3';
      if (state == 'Off') return 'red';    </pre>
<h3>Je pilote les relais depuis les input_select</h3>
<p>La correspondance entre les Zones (Etage et Rez de Chaussée) doit se faire dans Home Assistant, le choix des relais pour commander le mode des zones doit être transparent pour l&rsquo;utilisateur.</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage2.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4927" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage2.png" alt="" width="728" height="281" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage2.png 728w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage2-600x232.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage2-300x116.png 300w" sizes="auto, (max-width: 728px) 100vw, 728px" /></a></p>
<p>Pour cela, une automatisation va être déclenchée par un changement d&rsquo;état de input_select.chauffage_rdc_mode et une autre par input_select.chauffage_etage_mode.</p>
<p>Cette automatisation va modifier l&rsquo;état des relais afin d&rsquo;envoyer l&rsquo;ordre qui correspond au codage du fil pilote. Cela est expliqué <a href="https://www.sigalou-domotique.fr/commander-chauffage-fil-pilote-avec-sonoff-4ch-pro-r2-multi-zones#scenarii" target="_blank" rel="noopener">ici</a>.</p>
<h4>Automatisation Pilotage Chauffage Rez de Chaussée</h4>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">alias: Pilotage Chauffage Rez de Chaussée
description: ""
trigger:
  - platform: state
    entity_id:
      - input_select.chauffage_rdc_mode
condition: []
action:
  - if:
      - condition: state
        entity_id: input_select.chauffage_rdc_mode
        state: Confort
    then:
      - service: switch.turn_off
        data: {}
        entity_id:
          - switch.chauffage_relais_3_chauffage
          - switch.chauffage_relais_4_chauffage
      - stop: ""
  - if:
      - condition: state
        entity_id: input_select.chauffage_rdc_mode
        state: Eco
    then:
      - service: switch.turn_on
        data: {}
        entity_id:
          - switch.chauffage_relais_3_chauffage
          - switch.chauffage_relais_4_chauffage
      - stop: ""
  - if:
      - condition: state
        entity_id: input_select.chauffage_rdc_mode
        state: Hors Gel
    then:
      - service: switch.turn_off
        data: {}
        entity_id:
          - switch.chauffage_relais_4_chauffage
      - service: switch.turn_on
        data: {}
        entity_id:
          - switch.chauffage_relais_3_chauffage
      - stop: ""
  - if:
      - condition: state
        entity_id: input_select.chauffage_rdc_mode
        state: "Off"
    then:
      - service: switch.turn_off
        data: {}
        entity_id:
          - switch.chauffage_relais_3_chauffage
      - service: switch.turn_on
        data: {}
        entity_id:
          - switch.chauffage_relais_4_chauffage
      - stop: ""
mode: single
</pre>
<h4>Automatisation Pilotage Chauffage Etage</h4>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">alias: Pilotage Chauffage Etage
description: ""
trigger:
  - platform: state
    entity_id:
      - input_select.chauffage_etage_mode
condition: []
action:
  - if:
      - condition: state
        entity_id: input_select.chauffage_etage_mode
        state: Confort
    then:
      - service: switch.turn_off
        data: {}
        entity_id:
          - switch.chauffage_relais_2_chauffage
          - switch.chauffage_relais_1_chauffage
      - stop: ""
  - if:
      - condition: state
        entity_id: input_select.chauffage_etage_mode
        state: Eco
    then:
      - service: switch.turn_on
        data: {}
        entity_id:
          - switch.chauffage_relais_2_chauffage
          - switch.chauffage_relais_1_chauffage
      - stop: ""
  - if:
      - condition: state
        entity_id: input_select.chauffage_etage_mode
        state: Hors Gel
    then:
      - service: switch.turn_off
        data: {}
        entity_id:
          - switch.chauffage_relais_2_chauffage
      - service: switch.turn_on
        data: {}
        entity_id:
          - switch.chauffage_relais_1_chauffage
      - stop: ""
  - if:
      - condition: state
        entity_id: input_select.chauffage_etage_mode
        state: "Off"
    then:
      - service: switch.turn_off
        data: {}
        entity_id:
          - switch.chauffage_relais_1_chauffage
      - service: switch.turn_on
        data: {}
        entity_id:
          - switch.chauffage_relais_2_chauffage
      - stop: ""
mode: single</pre>
<h3>Je réalise une jolie carte pour le dashboard</h3>
<p>Voici le résultat de ce que je souhaite comme carte :</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage3.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4930" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage3.png" alt="" width="506" height="270" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage3.png 506w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage3-300x160.png 300w" sizes="auto, (max-width: 506px) 100vw, 506px" /></a></p>
<p>A ce stade, je ne sais pas si je garderai la liste déroulante ou les boutons / sélecteurs, les deux fonctionnent.</p>
<h4>Code de la carte pour la zone Rez de chaussée </h4>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">type: custom:stack-in-card
mode: vertical
cards:
  - type: custom:auto-entities
    show_empty: false
    card:
      type: custom:mushroom-chips-card
      view_layout:
        grid-area: chips
      alignment: center
    card_param: chips
    filter:
      template: &gt;
        {% set ns =
        namespace(select=[],entity="input_select.chauffage_rdc_mode") %} {% for
        opt in state_attr(ns.entity, 'options') %}
          {% set icon = iif(opt== 'Confort', 'mdi:fire', icon) %}
          {% set icon_color_select = iif(opt== 'Confort', 'yellow', icon_color_select) %}
          {% set icon = iif(opt== 'Off', 'mdi:power', icon) %}
          {% set icon_color_select = iif(opt== 'Off', 'red', icon_color_select) %}
          {% set icon = iif(opt== 'Eco', 'mdi:leaf', icon) %}
          {% set icon_color_select = iif(opt== 'Eco', 'green', icon_color_select) %}
          {% set icon = iif(opt== 'Hors Gel', 'mdi:snowflake-thermometer', icon) %}
          {% set icon_color_select = iif(opt== 'Hors Gel', 'blue', icon_color_select) %}
                {% set ns.select = ns.select + [
            {
              "type": "template",
              "icon": icon,
              "entity": ns.entity,

              "icon_color": '{{ iif(is_state("' ~ ns.entity ~ '", "' ~ opt ~ '"), "' ~ icon_color_select ~ '", "disabled") }}',
              "tap_action": {
                "action": "call-service",
                "service": "input_select.select_option",
                "service_data": {
                  "entity_id": ns.entity,
                  "option": opt
                }
              },
              "card_mod": {
                "style": 'ha-card {
                
                    {% if is_state( "' ~ ns.entity ~ '" , "' ~ opt ~ '" ) %}
                      --chip-background: rgba(var(--rgb-grey), 0.1);
                    {% else %}
                      --chip-background: rgba(var(--mush-rgb-state-entity), 0.3);
                    {% endif %}
                    
                  }'
              }
            }
          ] %}
        {% endfor %} {{ ns.select }}
  - type: entities
    entities:
      - entity: input_select.chauffage_rdc_mode
</pre>
<h4>Code de la carte pour la zone de l&rsquo;Etage</h4>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">type: custom:stack-in-card
mode: vertical
cards:
  - type: custom:auto-entities
    show_empty: false
    card:
      type: custom:mushroom-chips-card
      view_layout:
        grid-area: chips
      alignment: center
    card_param: chips
    filter:
      template: &gt;
        {% set ns =
        namespace(select=[],entity="input_select.chauffage_etage_mode") %} {%
        for opt in state_attr(ns.entity, 'options') %}
          {% set icon = iif(opt== 'Confort', 'mdi:fire', icon) %}
          {% set icon_color_select = iif(opt== 'Confort', 'yellow', icon_color_select) %}
          {% set icon = iif(opt== 'Off', 'mdi:power', icon) %}
          {% set icon_color_select = iif(opt== 'Off', 'red', icon_color_select) %}
          {% set icon = iif(opt== 'Eco', 'mdi:leaf', icon) %}
          {% set icon_color_select = iif(opt== 'Eco', 'green', icon_color_select) %}
          {% set icon = iif(opt== 'Hors Gel', 'mdi:snowflake-thermometer', icon) %}
          {% set icon_color_select = iif(opt== 'Hors Gel', 'blue', icon_color_select) %}
                {% set ns.select = ns.select + [
            {
              "type": "template",
              "icon": icon,
              "entity": ns.entity,

              "icon_color": '{{ iif(is_state("' ~ ns.entity ~ '", "' ~ opt ~ '"), "' ~ icon_color_select ~ '", "disabled") }}',
              "tap_action": {
                "action": "call-service",
                "service": "input_select.select_option",
                "service_data": {
                  "entity_id": ns.entity,
                  "option": opt
                }
              },
              "card_mod": {
                "style": 'ha-card {
                
                    {% if is_state( "' ~ ns.entity ~ '" , "' ~ opt ~ '" ) %}
                      --chip-background: rgba(var(--rgb-grey), 0.1);
                    {% else %}
                      --chip-background: rgba(var(--mush-rgb-state-entity), 0.3);
                    {% endif %}
                    
                  }'
              }
            }
          ] %}
        {% endfor %} {{ ns.select }}
  - type: entities
    entities:
      - entity: input_select.chauffage_etage_mode
</pre>
<h3>Conclusion</h3>
<p>Je termine ici une étape importante de l&rsquo;intégration de mon chauffage à Home Assistant. Je vais maintenant m&rsquo;attaquer au pilotage de ce chauffage en fonction des personnes présentes ou pas, des heures, des jours et des périodes d&rsquo;absence (vacances&#8230;)</p>
<p><a href="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage.gif"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4918" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/09/chauffage.gif" alt="" width="502" height="244" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ich würde gerne wissen, ob wir Tag oder Nacht sind</title>
		<link href="">https://www.sigalou-domotique.fr/de/je-voudrais-savoir-si-nous-sommes-le-jour-ou-la-nuit</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Tue, 30 May 2023 10:45:22 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Développement]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=4411</guid>

					<description><![CDATA[Objectif Mon objectif originel était de vouloir allumer les lumières extérieures quand le portail s&#8217;ouvre mais uniquement la nuit ! Essais J&#8217;ai testé plusieurs intégrations : Sun WorkDay dont je parle dans le Retex Ecole demain ? Times of the Day Je créé un binary_sensor Il fait nuit Evidemment, ce binary_sensor prend deux valeurs : [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3>Objectif</h3>
<p>Mon objectif originel était de vouloir allumer les lumières extérieures quand le portail s&rsquo;ouvre mais <strong>uniquement</strong> la nuit !<span id="more-4411"></span></p>
<h3>Essais</h3>
<p>J&rsquo;ai testé plusieurs intégrations :</p>
<ul>
<li><a href="https://www.home-assistant.io/integrations/sun/" target="_blank" rel="noopener">Sun</a></li>
<li><a href="https://www.home-assistant.io/integrations/workday/" target="_blank" rel="noopener">WorkDay</a> dont je parle dans le Retex <a href="https://www.sigalou-domotique.fr/ecole-demain" target="_blank" rel="noopener">Ecole demain ?</a></li>
<li><a href="https://www.home-assistant.io/integrations/tod/" target="_blank" rel="noopener">Times of the Day</a></li>
</ul>
<h3>Je créé un binary_sensor <strong>Il fait nuit</strong></h3>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4418" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit.png" alt="" width="1051" height="104" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit.png 1051w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit-600x59.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit-300x30.png 300w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit-1024x101.png 1024w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit-768x76.png 768w" sizes="auto, (max-width: 1051px) 100vw, 1051px" /></p>
<p>Evidemment, ce binary_sensor prend deux valeurs :</p>
<ul>
<li>on : quand il fait nuit</li>
<li>off : quand il fait jour</li>
</ul>
<p>Les plus puristes (qui cherchent les difficultés) pourront se faire plaisir et se créer un second binary_sensor pour le « il fait jour ». <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Code simplissime de ce binary_sensor, à créer dans binary_sensor.yaml en pensant à bien l&rsquo;avoir déclaré dans configuration.yaml :</p>
<pre class="EnlighterJSRAW" data-enlighter-language="yaml">- platform: tod
  name: "Il fait nuit"
  unique_id: binary_sensor.nuit
  after: sunset
  after_offset: "-00:10"
  before: sunrise
  before_offset: "+00:10"</pre>
<p>after_offset et before_offset à 10min, ce n&rsquo;est pas par souci de perfection, c&rsquo;est pour me souvenir la syntaxe de ce paramètre si je veux l&rsquo;ajuster dans l&rsquo;avenir.</p>
<ul>
<li>Merci @ἶჰმ#6938 pour le coup de main.</li>
</ul>
<h3>Utilisation de ce binary_sensor dans une condition</h3>
<p>Mon objectif est de n&rsquo;allumer les lumières extérieures quand le portail s&rsquo;ouvre QUE quand il faut nuit, voici donc la condition ajoutée :</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4423" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit2.png" alt="" width="1083" height="125" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit2.png 1083w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit2-600x69.png 600w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit2-300x35.png 300w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit2-1024x118.png 1024w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/ilfaitnuit2-768x89.png 768w" sizes="auto, (max-width: 1083px) 100vw, 1083px" /></p>
<p>Je ne mets pas la condition sur la fermeture, en effet si d&rsquo;aventure il fait jour entre l&rsquo;ouverture et la fermeture, les lumières resteraient allumées.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ich setze meine HA-Datenbank auf Diät</title>
		<link href="">https://www.sigalou-domotique.fr/de/je-mets-ma-base-de-donnees-ha-au-regime</link>
		
		<dc:creator><![CDATA[Sigalou]]></dc:creator>
		<pubdate>Thu, 25 May 2023 11:42:43 +0000</pubdate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Home Assistant]]></category>
		<category><![CDATA[Retex]]></category>
		<category><![CDATA[Développement]]></category>
		<guid ispermalink="false">https://www.sigalou-domotique.fr/?p=4275</guid>

					<description><![CDATA[Comme évoqué dans le retex  Je vérifie la taille de ma base de données il est surprenant de voir la vitesse à laquelle la base de données se remplie. Dans ce retex, je vais tenter d&#8217;identifier les entités qui s&#8217;enregistrent le plus, vérifier si leur enregistrement est utile et configurer recorder de HA pour limiter [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Comme évoqué dans le retex </p>
<ul>
<li><a href="https://www.sigalou-domotique.fr/verifier-la-taille-de-sa-base-de-donnees" target="_blank" rel="noopener">Je vérifie la taille de ma base de données</a></li>
</ul>
<p>il est surprenant de voir la vitesse à laquelle la base de données se remplie.</p>
<p>Dans ce retex, je vais tenter d&rsquo;identifier les entités qui s&rsquo;enregistrent le plus, vérifier si leur enregistrement est utile et configurer recorder de HA pour limiter la taille de la base.<span id="more-4275"></span></p>
<h3>J&rsquo;identifie les entités qui ont le plus d&rsquo;enregistrements</h3>
<p>Je vais me connecter en ligne de commande SSH et je vais interroger la base de données</p>
<pre class="EnlighterJSRAW" data-enlighter-language="sql">cd ~/config</pre>
<pre class="EnlighterJSRAW" data-enlighter-language="sql">sqlite3 home-assistant_v2.db
.header on
.mode column
.width 50, 10, 
SELECT states_meta.entity_id, COUNT(*) AS count FROM states JOIN states_meta ON states.metadata_id = states_meta.metadata_id GROUP BY states_meta.entity_id ORDER BY count DESC LIMIT 20;</pre>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4279" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/bd1.png" alt="" width="533" height="158" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/bd1.png 533w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/bd1-300x89.png 300w" sizes="auto, (max-width: 533px) 100vw, 533px" /></p>
<p>Cette commande affiche les 20 entités qui ont le plus d&rsquo;enregistrements (donc les plus consommatrices de taille de base de données).</p>
<p>En changeant LIMIT 20 en LIMIT 200 j&rsquo;ai les 200 entités qui ont le plus d&rsquo;enregistrements </p>
<h3>Je configure recorder</h3>
<ul>
<li><a href="https://www.home-assistant.io/integrations/recorder/" target="_blank" rel="noopener">Documentation</a></li>
</ul>
<p>J&rsquo;ai créé un fichier <a href="https://github.com/sigalou/home-assistant-config-fr/blob/main/recorder.yaml" target="_blank" rel="noopener">recorder.yaml</a> sans oublier de le spécifier dans <a href="https://github.com/sigalou/home-assistant-config-fr/blob/main/configuration.yaml" target="_blank" rel="noopener">configuration.yaml</a></p>
<p>Ce fichier permet d&rsquo;inclure ou d&rsquo;exclure tout ce que je veux enregistrer (ou pas)</p>
<p>Evoluant en permanence, je ne mets pas ici de copie du code, mais le fichier est consultable sur le <a href="https://github.com/sigalou/home-assistant-config-fr" target="_blank" rel="noopener">GitHub</a>.</p>
<p>En sélectionnant ainsi ce que je souhaite enregistrer, je peux maitriser la taille de la base de données.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4089" src="https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/sql3.png" alt="" width="381" height="148" srcset="https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/sql3.png 381w, https://www.sigalou-domotique.fr/wp-content/uploads/2023/05/sql3-300x117.png 300w" sizes="auto, (max-width: 381px) 100vw, 381px" /></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>