{"id":2703,"date":"2023-07-18T11:15:18","date_gmt":"2023-07-18T09:15:18","guid":{"rendered":"https:\/\/domo.rem81.com\/?p=2703"},"modified":"2026-03-24T09:19:47","modified_gmt":"2026-03-24T08:19:47","slug":"pv-routeur-solaire","status":"publish","type":"post","link":"https:\/\/domo.rem81.com\/index.php\/2023\/07\/18\/pv-routeur-solaire\/","title":{"rendered":"HA-Routeur Solaire ESP Home"},"content":{"rendered":"\n\n\n\n<h1 class=\"wp-block-heading\">Intro<\/h1>\n\n\n\n<p>Dans un <a href=\"https:\/\/domo.rem81.com\/index.php\/2023\/04\/14\/ha-routeur-solaire\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2023\/04\/14\/ha-routeur-solaire\/\">article pr\u00e9c\u00e9dent<\/a>, je d\u00e9crivais une premi\u00e8re version de routeur PV mont\u00e9 sur la base d&rsquo;une mesure de puissance tiers, dans mon cas, d\u00e9livr\u00e9e par mon onduleur Victron, et un pilotage de Triac via esp8266 d\u00e9localis\u00e9.<\/p>\n\n\n\n<p>Dans cette version je vous propose un montage d\u00e9velopp\u00e9 sous ESP Home donc compl\u00e8tement int\u00e9gr\u00e9 \u00e0 HA.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Mise \u00e0 Jour:<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>10\/03\/2025- V1.3.0: Modification fomat  ESP<\/li>\n\n\n\n<li>09\/08\/2024- V1.2.2: Modification des coefficients multiplicateurs des Facteurs de puissance (fptore et fppince)<\/li>\n\n\n\n<li>09\/04\/2024- V1.2.1: Ajout hysteresis dans le calcul de la temp\u00e9rature triac<\/li>\n\n\n\n<li>26\/03\/2024 &#8211; V1.2.0: Ajout calcul relais de suproduction<\/li>\n\n\n\n<li>25\/03\/2024 &#8211; V1.1.0: Nettoyage du code: Suppression Switch val routeur et Pmin<\/li>\n\n\n\n<li>01\/08\/2023 &#8211; V1.0.0: Remplacement de de \u00ab\u00a0restore_value\u00a0\u00bb par \u00ab\u00a0restore_mode\u00a0\u00bb dans les \u00ab\u00a0switch\u00a0\u00bb suite \u00e0 rupture dans la version 2023-07 ESPHOME.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Liste des courses:<\/h1>\n\n\n\n<p>Dans cette version vous aurez besoin \u00e0 minima:<\/p>\n\n\n\n<p>nota: les liens sont donn\u00e9s \u00e0 titre d&rsquo;exemple, je n&rsquo;ai aucune relation commerciale avec ces vendeurs<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Un ESP32<\/strong><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"409\" height=\"288\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-5-1.png\" alt=\"\" class=\"wp-image-2720\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-5-1.png 409w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-5-1-300x211.png 300w\" sizes=\"auto, (max-width: 409px) 100vw, 409px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un module de mesure de puissance communiquant <a data-type=\"URL\" data-id=\"https:\/\/fr.aliexpress.com\/item\/1005005396796284.html?spm=a2g0o.order_list.order_list_main.71.21ef5e5bT8MKC9&amp;gatewayAdapt=glo2fra\" href=\"https:\/\/fr.aliexpress.com\/item\/1005005396796284.html?spm=a2g0o.order_list.order_list_main.71.21ef5e5bT8MKC9&amp;gatewayAdapt=glo2fra\" target=\"_blank\" rel=\"noreferrer noopener\">Modbus JSY-MK-194T<\/a><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"446\" height=\"274\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-4.png\" alt=\"\" class=\"wp-image-2718\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-4.png 446w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-4-300x184.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-4-348x215.png 348w\" sizes=\"auto, (max-width: 446px) 100vw, 446px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Un triac <a href=\"https:\/\/fr.aliexpress.com\/item\/32802025086.html?spm=a2g0o.order_list.order_list_main.17.21ef5e5bT8MKC9&amp;gatewayAdapt=glo2fra\" target=\"_blank\" rel=\"noreferrer noopener\">RobotDyn 24A<\/a> <\/strong><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"457\" height=\"457\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-3.png\" alt=\"\" class=\"wp-image-2716\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-3.png 457w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-3-300x300.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-3-150x150.png 150w\" sizes=\"auto, (max-width: 457px) 100vw, 457px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Un <a href=\"https:\/\/fr.aliexpress.com\/item\/1005001555130897.html?spm=a2g0o.productlist.main.1.66434a96CqEcCj&amp;algo_pvid=d676f207-17a7-4336-ad2e-a8e7711f6811&amp;algo_exp_id=d676f207-17a7-4336-ad2e-a8e7711f6811-0&amp;pdp_npi=4%40dis%21EUR%212.48%212.48%21%21%212.63%212.63%21%402103868817109291310846482ef25f%2112000030165881214%21sea%21FR%21833459399%21&amp;curPageLogUid=zAvICfNiCA6M&amp;utparam-url=scene%3Asearch%7Cquery_from%3A\" target=\"_blank\" rel=\"noopener\" title=\"\">dissipateur thermique<\/a> <\/strong><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"507\" height=\"349\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-6-1.png\" alt=\"\" class=\"wp-image-2722\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-6-1.png 507w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-6-1-300x207.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/05\/image-6-1-135x93.png 135w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Une sonde de temp\u00e9rature Dallas&nbsp;<a href=\"https:\/\/www.amazon.fr\/AZDelivery-temp%C3%A9rature-num%C3%A9rique-Inoxydable-Raspberry\/dp\/B07KNQJ3D7\/ref=sr_1_4?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;crid=17KFL3RYWI30H&amp;keywords=ds18b20&amp;qid=1669044567&amp;qu=eyJxc2MiOiI1LjIwIiwicXNhIjoiNC41MiIsInFzcCI6IjQuNTIifQ%3D%3D&amp;s=industrial&amp;sprefix=ds18b20%2Cindustrial%2C90&amp;sr=1-4\" target=\"_blank\" rel=\"noreferrer noopener\">ds18b20.<\/a><\/strong><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"407\" height=\"407\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/01\/image-7.png\" alt=\"\" class=\"wp-image-2488\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/01\/image-7.png 407w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/01\/image-7-300x300.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/01\/image-7-150x150.png 150w\" sizes=\"auto, (max-width: 407px) 100vw, 407px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>En option, et je vous le conseille, prenez un afficheur comme <a href=\"https:\/\/www.amazon.fr\/WayinTop-Daffichage-R%C3%A9tro%C3%A9clairage-Adaptateur-Dinterface\/dp\/B07TTNBBSC\/ref=sr_1_2?crid=3ONTNOAFD9TPJ&amp;dib=eyJ2IjoiMSJ9.LwXsTf_z3PlHz8WTtaO8m57Lwr5-Nw-WCoNYS3tY8jMvbnko4DHGBVo1DHL_clXHNFke79XErJpuP8SjiP4rBuJXdue6Jy-1ZtWzIAqC5obDee1LXk5brmpOMAogFOyFvTaBfXLH9rWgsiVd26bnjutyXOFtGUduR2a7ABrqXj9hkF1oqrSBVlM_Fjs8m3NFkoondxBpFHr5-rbR6ASh0lWBSQ0eZFKJfUt82EpMw33BcBBOCmisv3BBlkl-r7Gv5AQlM_CGBGIJ2JTSK4LUwLfCFsGHjqFG0J5OJCoLXjE.iWTuAV7xClN00MhJszeo2tNOTpsaFje-y50mEOPNkWo&amp;dib_tag=se&amp;keywords=afficheur%2B4%2Blignes&amp;qid=1710929353&amp;s=industrial&amp;sprefix=afficheur%2B4%2Bl%2Cindustrial%2C84&amp;sr=1-2&amp;th=1\" target=\"_blank\" rel=\"noopener\" title=\"\">celui-ci:<\/a><\/strong><\/li>\n<\/ul>\n\n\n\n<p>Vous pouvez choisir d&rsquo;autres mod\u00e8les, mais il vous faudra modifier le code.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"352\" height=\"218\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image.png\" alt=\"\" class=\"wp-image-2893\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image.png 352w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-300x186.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-348x215.png 348w\" sizes=\"auto, (max-width: 352px) 100vw, 352px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Un relais de d\u00e9lestage de surproduction:<\/strong>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/fr.aliexpress.com\/item\/1005005296791112.html\" target=\"_blank\" rel=\"noopener\" title=\"\">Un SSR<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"933\" height=\"1000\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-8.png\" alt=\"\" class=\"wp-image-3009\" style=\"width:335px;height:auto\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-8.png 933w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-8-280x300.png 280w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-8-768x823.png 768w\" sizes=\"auto, (max-width: 933px) 100vw, 933px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ou un relais Tout ou Rien 5V:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"550\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-9.png\" alt=\"\" class=\"wp-image-3012\" style=\"width:247px;height:auto\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-9.png 600w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-9-300x275.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Vous pouvez aussi acheter ce type de platine comprenant l&rsquo;alimentation 220, le relais: voir <a href=\"https:\/\/domo.rem81.com\/index.php\/2023\/01\/09\/ha-platine-relais-esp8266\/\" target=\"_blank\" rel=\"noopener\" title=\"\">mon article sur \u00e0 ce sujet<\/a><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-10-1024x1024.png\" alt=\"\" class=\"wp-image-3015\" style=\"width:396px;height:auto\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-10-1024x1024.png 1024w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-10-300x300.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-10-150x150.png 150w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-10-768x768.png 768w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-10.png 1100w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Principe de fonctionnement<\/h1>\n\n\n\n<p>La pince du module JSY est connect\u00e9e en t\u00eate de votre tableau \u00e9lectrique principal en sortie de Linky, il mesure en permanence plusieurs grandeurs \u00e9lectriques, mais les deux qui nous int\u00e9ressent principalement sont la mesure de puissance et le sens du courant dans la pince. L&rsquo;ESP interroge en permanence (toutes les 750ms) le module via un port UART sous le protocole Modbus.<\/p>\n\n\n\n<p>Avec ces deux grandeurs, l&rsquo;ESP calcule le niveau de charge du triac sur une \u00e9chelle de 0 \u00e0 100%.<\/p>\n\n\n\n<p><strong>Par convention , la puissance inject\u00e9e sur le r\u00e9seau est n\u00e9gative et la puissance soutir\u00e9e est positive.<\/strong><\/p>\n\n\n\n<p>Donc plus la puissance est n\u00e9gative plus on ouvre le triac, on tend vers les 100%. L&rsquo;algorithme retenu est plut\u00f4t simple: S= S+P*Coeff\/1000 avec S la sortie triac, P, la puissance mesur\u00e9e et Coeff un coefficient de r\u00e9activit\u00e9.<\/p>\n\n\n\n<p>Toute les secondes, un script calcul la sortie S du en incr\u00e9mentant ou d\u00e9cr\u00e9mentant une variables selon le signe de la puissance mesur\u00e9e. Le coefficient \u00ab\u00a0Coeff\u00a0\u00bb rend l&rsquo;algorithme plus ou moins r\u00e9actif, il faut trouver le bon compromis pour une plus grande r\u00e9activit\u00e9 sans entrer dans un syst\u00e8me oscillatoire.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">La Partie Mat\u00e9rielle<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Sch\u00e9ma Electronique:<\/h2>\n\n\n\n<p>Dans le sch\u00e9ma \u00e9lectronique qui suit vous retrouverez le c\u00e2blage des diff\u00e9rents \u00e9l\u00e9ments, vous y trouverez \u00e9galement des \u00e9l\u00e9ments non programm\u00e9s comme le Triac 2 et le relais, c&rsquo;est en pr\u00e9vision d&rsquo;extension logicielle.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"950\" height=\"554\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/image-1-1.png\" alt=\"\" class=\"wp-image-2761\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/image-1-1.png 950w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/image-1-1-300x175.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/image-1-1-768x448.png 768w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Modification du refroidissement du triac<\/h2>\n\n\n\n<p>Si vous souhaitez exploiter pleinement les capacit\u00e9s de votre triac 24A vous devez remplacer le refroidisseur en aluminium d&rsquo;origine par un refroidisseur plus important.<\/p>\n\n\n\n<p>La modification est clairement expliquez par le <a rel=\"noreferrer noopener\" href=\"https:\/\/sites.google.com\/view\/le-professolaire\/routeur-professolaire\" target=\"_blank\">prof&rsquo;solaire<\/a> dans cette<a rel=\"noreferrer noopener\" href=\"https:\/\/www.youtube.com\/watch?v=9NCN-5LjdzM&amp;t=9s\" target=\"_blank\"> video.<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">La partie logicielle:<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Capteur JSY-MK-194T<\/h2>\n\n\n\n<p>Ce module communique en modbus via un port serie. Il permet de remonter de nombreuses grandeurs physiques \u00e9lectriques via un tore d\u00e9port\u00e9, avec lequel je mesure la puissance soutir\u00e9e ou inject\u00e9e sur le r\u00e9seau, plac\u00e9 directement en sortie Linky, et un tore soud\u00e9 sur la carte, avec lequel je mesure la puissance soutir\u00e9e par l&rsquo;ECS (Ballon Eau Chaude Sanitaire).<\/p>\n\n\n\n<p>Sur chaque Tore, vous pouvez lire, la puissance, l&rsquo;intensit\u00e9, la tension, la fr\u00e9quence, l&rsquo;\u00e9nergie.<\/p>\n\n\n\n<p>Vous remarquez que la trame Modbus lit la totalit\u00e9 des grandeurs physiques du JSY (14 registres), cela optimise le temps de lecture en n&rsquo;envoyant qu&rsquo;une seule trame Modbus, le fait de supprimer des registres, segmenterai les trames et augmenterai le temps de r\u00e9ponse,cela \u00e9tant, je n&rsquo;affiche pas toutes les grandeurs mais libre \u00e0 vous de les visualiser.<\/p>\n\n\n\n<p>J&rsquo;interroge le module toutes les 750 ms, ce qui donne une r\u00e9activit\u00e9 du syst\u00e8me plut\u00f4t satisfaisante, en dessous, je rencontre des erreurs de lecture.<\/p>\n\n\n\n<p>Vous trouverez ci apr\u00e8s le descriptif des trames modbus du capteur:  <\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/JSY-MK-194T.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 JSY-MK-194T.\"><\/object><a id=\"wp-block-file--media-db47431f-9c35-4f2f-a60f-e61430b7be5f\" href=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/JSY-MK-194T.pdf\">JSY-MK-194T<\/a><a href=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/JSY-MK-194T.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-db47431f-9c35-4f2f-a60f-e61430b7be5f\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>Afin que le capteur JSY soit plus r\u00e9actif, il faut augmenter sa vitesse de communication \u00e0 38400 bauds qui par d\u00e9faut est \u00e0 4800 bauds.<\/p>\n\n\n\n<p>La manipulation est tr\u00e8s bien d\u00e9crite sur le site du <a rel=\"noreferrer noopener\" href=\"https:\/\/sites.google.com\/view\/le-professolaire\/routeur-professolaire\" data-type=\"URL\" data-id=\"https:\/\/sites.google.com\/view\/le-professolaire\/routeur-professolaire\" target=\"_blank\">prof&rsquo;Solair<\/a>.  Perso, j&rsquo;ai utilis\u00e9 le logiciel Windows et ce <a rel=\"noreferrer noopener\" href=\"https:\/\/fr.aliexpress.com\/item\/4000492274243.html?spm=a2g0o.productlist.main.37.2c471f73qEqhg6&amp;algo_pvid=1ffed911-0c73-4df5-9920-ce93791a9524&amp;algo_exp_id=1ffed911-0c73-4df5-9920-ce93791a9524-18&amp;pdp_ext_f=%7B%22sku_id%22%3A%2210000002208891354%22%7D&amp;pdp_npi=2%40dis%21EUR%211.91%211.68%21%21%21%21%21%402100b76616732599821855166d06ba%2110000002208891354%21sea&amp;curPageLogUid=800oAxGbCbzg\" data-type=\"URL\" data-id=\"https:\/\/fr.aliexpress.com\/item\/4000492274243.html?spm=a2g0o.productlist.main.37.2c471f73qEqhg6&amp;algo_pvid=1ffed911-0c73-4df5-9920-ce93791a9524&amp;algo_exp_id=1ffed911-0c73-4df5-9920-ce93791a9524-18&amp;pdp_ext_f=%7B%22sku_id%22%3A%2210000002208891354%22%7D&amp;pdp_npi=2%40dis%21EUR%211.91%211.68%21%21%21%21%21%402100b76616732599821855166d06ba%2110000002208891354%21sea&amp;curPageLogUid=800oAxGbCbzg\" target=\"_blank\">convertisseur USB&lt;-&gt;Port s\u00e9rie<\/a>.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Codage ESP<\/h2>\n\n\n\n<p>Vous trouverez ci apr\u00e8s le code de l&rsquo;ESP, c&rsquo;est en service depuis quelques mois avec des r\u00e9sultats tr\u00e8s satisfaisants.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>substitutions:\n  device_name: \"esp176-esp32-routeur-1r\"\n  friendly_name: esp176\n  adress_ip: \"192.168.0.176\"\n  time_timezone: \"Europe\/Paris\"\n  \nesphome:\n  name: ${device_name}\n  project:\n    name: \"rem81.esp176-esp32-routeur\"\n    version: \"1.3.0\"\n  on_boot:\n    priority: 800\n    # Force mode auto et tempok au demarrage\n    then: \n      - switch.turn_on: modeauto\n      - binary_sensor.template.publish:\n          id: temperatureok\n          state: ON\nesp32:\n  board: esp32dev\n  framework:\n    type: arduino\n    \nwifi:\n  networks:\n    - ssid: !secret wifi\n      password: !secret mdpwifi\n  reboot_timeout: 5min\n\n  manual_ip:\n    static_ip: ${adress_ip}\n    gateway: 192.168.0.254\n    subnet: 255.255.255.0\n    \n# Utilisez la LED bleue de l'appareil comme LED d'\u00e9tat, qui clignotera s'il y a des avertissements (lent) ou des erreurs (rapide)\nstatus_led:\n  pin:\n    number: GPIO32 # \n    inverted: true\n\n# Enable logging\nlogger:\n  baud_rate: 0\n  level: info\n\n#    modbus.component: INFO\n# Enable Home Assistant API\napi:\n\nota:\n  platform: esphome\nweb_server:\n  port: 80\n  version: 3\n\n# Protocole I2C\ni2c:\n  sda: GPIO21 \n  scl: GPIO22\n  scan: True\n  id: bus_a\n\n# Protocole du JSK\nuart:\n  id: mod_bus\n  tx_pin: 17\n  rx_pin: 16\n  baud_rate: 38400\n  stop_bits: 1\n#  debug:\n#    direction: BOTH\n#    dummy_receiver: false\n#    after:\n#      timeout: 150ms\n#    sequence:\n#      - lambda: |-\n#          UARTDebug::log_string(direction, bytes);\n\nmodbus:\n#flow_control_pin: 5\n  #send_wait_time: 200ms\n  id: modbus1\n\nmodbus_controller:\n  - id: jsymk\n    ## the Modbus device addr\n    address: 0x1\n    modbus_id: modbus1\n    update_interval: 0.75s\n    command_throttle: 50ms\n    # setup_priority: -10\n\n# Mosquitto Proxmox\nmqtt:\n  broker: 192.168.0.204\n  username: !secret mqtt_pve_name\n  password: !secret mqtt_pve_pw\n  #internal_mqtt_default: internal\n\nglobals:\n   - id: increment\n     type: float\n     restore_value: no\n     initial_value: '0'\n\n   - id: striac\n     type: float\n     restore_value: yes\n\n\n#&nbsp;Sonde Temperature Dallas\none_wire:\n  - platform: gpio  \n    pin: GPIO27 #\n\n# Informations supplementaires sur le WIFI\n#text_sensor:\n#  - platform: wifi_info\n#    ip_address:\n#      name: ${friendly_name}_ESP IP Address\n#    ssid:\n#      name: ${friendly_name}_ESP Connected SSID\n#    bssid:\n#      name: ${friendly_name}_ESP Connected BSSID\n#    mac_address:\n#      name: ${friendly_name}_ESP Mac Wifi Address\n#    scan_results:\n#      name: ${friendly_name}_ESP Latest Scan Results\n\n\nbinary_sensor:\n  #Etat de la connection\n    - platform: status\n      name: \"${friendly_name}_Status\"\n  \n    - platform: template\n      name: \"${friendly_name} Temp Ok\"\n      id: temperatureok\n  \n    - platform: template\n      name: \"${friendly_name} Seuil Prod Ok\"\n      id: seuil_prod_ok\n\n    - platform: template\n      name: \"${friendly_name} Seuil SOC Ok\"\n      id: seuil_soc_ok\n  \n# Input Number\nnumber:\n  # Seuil MMax sortie triac\n  - platform: template\n    name: \"${friendly_name} P Max\"\n    id: pmax\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 50\n    max_value: 100\n    unit_of_measurement: \"%\"\n    step: 1\n\n# Seuil MAX temperature\n  - platform: template\n    name: \"${friendly_name} T Max\"\n    id: tmax\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 0\n    max_value: 75\n    unit_of_measurement: \"C\u00b0\"\n    step: 0.1\n\n# Coeff R\u00e9activit\u00e9\n  - platform: template\n    name: \"${friendly_name} Coeff R\"\n    id: coeff_r\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 0\n    max_value: 1000\n    unit_of_measurement: \"\"\n    step: 0.1\n# Coeff R\u00e9activit\u00e9 Puissance Batteries\n  - platform: template\n    name: \"${friendly_name} Coeff R bat\"\n    id: coeff_rbat\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 0\n    max_value: 1000\n    unit_of_measurement: \"\"\n    step: 0.1    \n# seuil Puissance batteries \n  - platform: template\n    name: \"${friendly_name} Seuil Pu Batteries\"\n    id: seuil_pubatt\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: -2500\n    max_value: 0\n    unit_of_measurement: \"W\"\n    step: 1\n# seuil SOC validation routeur\n  - platform: template\n    name: \"${friendly_name} Seuil SOC\"\n    id: seuil_soc\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 0\n    max_value: 100\n    unit_of_measurement: \"%\"\n    step: 1\n\n# Consigne sur Puissance Batteries\n  - platform: template\n    name: \"${friendly_name} Consigne Pu Batteries\"\n    id: cons_pubatt\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: -2500\n    max_value: 2500\n    unit_of_measurement: \"W\"\n    step: 1\n# Consigne sur Puissance Heure Creuses\n  - platform: template\n    name: \"${friendly_name} Consigne Pu Heure Creuse\"\n    id: cons_puhc\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 0\n    max_value: 8000\n    unit_of_measurement: \"W\"\n    step: 1\n# seuil Production validation routeur \n  - platform: template\n    name: \"${friendly_name} Seuil Production Val Routeur\"\n    id: seuil_prod\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 500\n    max_value: 3000\n    unit_of_measurement: \"W\"\n    step: 1\n\n  - platform: template\n    name: \"${friendly_name} Seuil Surproduction\"\n    id: seuilsurprod\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: -2000\n    max_value: 2000\n    unit_of_measurement: \"w\"\n    step: 1\n\nsensor:  \n\n# tension de l'alimentation\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: Tension\n    #name: \"${friendly_name} Tension JSYMK\"\n    address: 0x0048\n    unit_of_measurement: \"V\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# Intensit\u00e9 traversant le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: Itore\n    name: \"${friendly_name} I_ECS JSYMK\"\n    address: 0x0049\n    unit_of_measurement: \"A\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n    state_class: measurement\n\n# Puissance traversant le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: puecs\n    name: \"${friendly_name} P_ECS JSYMK\"\n    address: 0x004A\n    unit_of_measurement: \"W\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n    state_class: measurement\n\n# Energie lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: energietore\n    name: \"${friendly_name} Energie ECS JSYMK\"\n    address: 0x004B\n    unit_of_measurement: \"kWh\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n    state_class: total\n\n# Energie lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: fptore\n    #name: \"${friendly_name} FP Tore JSYMK\"\n    address: 0x004C\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# Energie NEG lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: energietoren\n    name: \"${friendly_name} Energie ECS Neg JSYMK\"\n    address: 0x004D\n    unit_of_measurement: \"kWh\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001     \n    register_count: 1\n    response_size: 4 \n    state_class: total\n    \n# Sens du courant dans la pince\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: senspince\n    #name: \"${friendly_name} Sens_Pince JSYMK\"\n    address: 0x004E\n    register_type: holding\n    value_type: U_DWORD\n    bitmask: 0X00010000\n    filters:\n      - multiply: 1\n    register_count: 1\n    response_size: 4\n# Sens du courant dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: senstor\n    #name: \"${friendly_name} Sens_Tore JSYMK\"\n    address: 0x004E\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 0\n    bitmask: 0X01000000\n    filters:\n      - multiply: 1\n    register_count: 1\n    response_size: 4\n\n# Fr\u00e9quence de l'alimentation  \n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: frequence\n    #name: \"${friendly_name} Frequence JSYMK\"\n    address: 0x004F\n    unit_of_measurement: \"hz\"    \n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.01\n    register_count: 1\n    response_size: 4\n\n# tension de l'alimentation\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: Tension2\n    #name: \"${friendly_name} U_Reseau JSYMK\"\n    address: 0x0050\n    unit_of_measurement: \"V\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n    \n# Intensit\u00e9 lue dans la pince\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: Ireseau\n    #name: \"${friendly_name} I_Reseau JSYMK\"\n    address: 0x0051\n    unit_of_measurement: \"A\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# puissance lue dans la pince\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: pureseau\n    #name: \"${friendly_name} P_Reseau JSYMK\"\n    address: 0x0052\n    unit_of_measurement: \"W\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4 \n    on_value:\n      then:\n        - lambda: |-\n            if ( id(senspince).state == 1 ) {\n              id(pureseau1).publish_state( id(pureseau).state *-1);\n            } else {\n              id(pureseau1).publish_state( id(pureseau).state );\n            }\n    \n# Energie lue dans la pince\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: energiepince\n    #name: \"${friendly_name} Energie Reseau JSYMK\"\n    address: 0x0053\n    unit_of_measurement: \"kWh\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# Energie lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: fppince\n    #name: \"${friendly_name} FP Pince JSYMK\"\n    address: 0x0054\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# Energie NEG lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: energienegpince\n    #name: \"${friendly_name} Energie ECS Neg JSYMK\"\n    address: 0x0055\n    unit_of_measurement: \"kWh\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001     \n    register_count: 1\n    response_size: 4 \n    \n  # Informations WI_FI\n  - platform: wifi_signal # Affiche le signal WiFi strength\/RSSI en dB\n    name: \"${friendly_name} WiFi Signal dB\"\n    update_interval: 60s\n\n  ############### TEMPLATE  ######################\"\n  # Affichage dans HA et sur l'afficheur\n  - platform: template\n    name: \"${friendly_name} Pu Reseau\"\n    id: pureseau1\n    unit_of_measurement: \"W\"\n    state_class: \"measurement\"  \n\n  - platform: template\n    name: \"${friendly_name} Increment\"\n    id: afincrement\n    unit_of_measurement: \"\"\n    accuracy_decimals: 2\n    state_class: \"measurement\"\n\n  - platform: template\n    name: \"${friendly_name} Sortie Triac\"\n    id: afstriac\n    unit_of_measurement: \"%\"\n    state_class: \"measurement\"  \n    accuracy_decimals: 2\n\n  # Les MQTT sont d\u00e9clar\u00e9s dans le Node Red du Cerbo GX\n  # \n\n  - platform: mqtt_subscribe\n    name: \"${friendly_name} Pu batterie\"\n    id: pu_batteries\n    topic: mp2\/batteries\/puissance\n    unit_of_measurement: \"W\"\n    state_class: \"measurement\"  \n    accuracy_decimals: 2\n        \n  - platform: mqtt_subscribe\n    name: \"${friendly_name} Pu Produite\"\n    id: pu_prod\n    topic: mp2\/multiplus2\/prod_totale\n    unit_of_measurement: \"W\"\n    state_class: \"measurement\"  \n    accuracy_decimals: 2\n\n  - platform: mqtt_subscribe\n    name: \"${friendly_name} Soc\"\n    id: soc\n    topic: mp2\/batteries\/soc\n    unit_of_measurement: \"%\"\n    state_class: \"measurement\"  \n    accuracy_decimals: 2\n\n  - platform: mqtt_subscribe\n    name: \"${friendly_name} Etat Bus VE\"\n    id: etatbus_ve\n    topic: mp2\/multiplus2\/etatbusve\n    accuracy_decimals: 0\n\n  # lecture sensor Home Assistant\n  - platform: homeassistant\n    name: \"${friendly_name} Status Bus VE\"\n    entity_id: sensor.mp2_status_bus_ve\n    id: statusbusve\n\n  - platform: homeassistant\n    name: \"${friendly_name} Tarif Num\"\n    entity_id: sensor.linky_n_tarif\n    id: hc\n\n  # Sonde Temperature radiateur\n  - platform: dallas_temp\n    address: 0xeb012112e461b128\n    name: \"${friendly_name} Temp triac\"\n    id: temp_triac\n    update_interval: 60s\n    filters:\n      - filter_out: NAN\n\ntext_sensor:\n  - platform: template\n    name: \"${friendly_name} Mode Regulation\"\n    id: moderegul\n\nswitch:\n  - platform: gpio\n    name: \"${friendly_name} Relais\"\n    pin: GPIO5\n    id: relais\n\n  - platform: template\n    name: \"${friendly_name} Mode Auto\"    \n    id: modeauto\n    optimistic: true\n    restore_mode: always_on\n    on_turn_off:\n      - light.turn_off: gradateur\n\n  - platform: template\n    name: \"${friendly_name} Valid Routeur\"    \n    id: validrouteur\n    optimistic: true\n    restore_mode: always_on\n\n  - platform: restart\n    name: \"${friendly_name} Restart\"\n\noutput:\n  #LEDS --------------------------------------\n  - id: led_jaune\n    platform: gpio\n    pin: GPIO26 #GPIO32\n\n  - id: led_rouge\n    platform: gpio\n    pin: GPIO25\n  # Pilotage du Dimmer ------------------------\n  - platform: ac_dimmer\n    id: ecs\n    gate_pin: GPIO33\n    method: leading\n    zero_cross_pin:\n      number: GPIO34 \n      mode:\n        input: true\n      inverted: yes\n    min_power: 5%\n\nlight:\n  - platform: monochromatic\n    name: \"${friendly_name} STriac\"\n    output: ecs\n    id: gradateur\n    default_transition_length: 50ms\n\n  # Affichage\ndisplay:\n  - platform: lcd_pcf8574\n    dimensions: 20x4\n    address: 0x27\n    update_interval: 2s\n    lambda: |-\n      it.printf(0,0,\"Pr=%0.0fW\",id(pureseau1).state);\n      it.printf(10,0,\"Pe=%0.0fW \",id(puecs).state);\n      it.printf(0,1,\"Tr=%0.1f%%\",id(striac));\n      it.printf(10,1,\"Val:%s\", id(validrouteur).state ? \"OK\" : \"NOK\");\n      it.printf(0,2,\"Tp=%0.1fc\", id(temp_triac).state);\n      it.printf(10,2,\"Etat=%s\", id(temperatureok).state ? \"OK\" : \"NOK\");\n      it.printf(0,3,\"Mode=%s\", id(modeauto).state ? \"Auto\" : \"Manu\");\n      it.printf(10,3,\"Inc=%0.1f \",id(increment));    \n\ninterval:\n  - interval: 1s\n    then:\n      - script.execute: calcul_injection_mode_hp\n\n  - interval: 2s\n    then:\n      - script.execute: etat_production \n\n# Script activation relais si l'injection est inf\u00e9rieur au seuil surprod pendant xsec\n  - interval: 2s\n    then:\n      - script.execute: calcul_relais_surprod\n\n# ------------------------  Scripts\nscript:\n\n  ########################################################################\"\"\n  # Calcul puissance injection mode HP\n  - id: calcul_injection_mode_hp\n    mode: single\n    then:\n      # Validation du seuil de production\n      - if:\n          condition:\n            lambda: 'return id(pu_prod).state &gt; id(seuil_prod).state;'\n        # Si Production &gt; au seuil alors OK\n          then:\n            - binary_sensor.template.publish:\n                id: seuil_prod_ok\n                state: ON\n        # Sinon\n          else:\n            - binary_sensor.template.publish:\n                id: seuil_prod_ok\n                state: OFF      \n      # validation du seuil soc\n      - if:\n          condition:\n            lambda: 'return id(soc).state &gt;= id(seuil_soc).state;'\n        # Si SOC &gt; au seuil alors OK\n          then:\n            - binary_sensor.template.publish:\n                id: seuil_soc_ok\n                state: ON\n        # Sinon\n          else:\n            if:\n              condition:\n                lambda: 'return id(soc).state &lt; (id(seuil_soc).state-2);'\n              then:\n                - binary_sensor.template.publish:\n                    id: seuil_soc_ok\n                    state: OFF\n      # Validation du seuil de temperature triac\n      - if:\n          condition:\n            lambda: 'return id(temp_triac).state &lt; (id(tmax).state-2);'\n        # Si Temp Triac inferieur au seuil-2\u00b0 alors OK\n          then:\n            - binary_sensor.template.publish:\n                id: temperatureok\n                state: ON\n        # D\u00e9validation du seuil de temp\u00e9rature\n      - if:\n          condition:\n            lambda: 'return id(temp_triac).state &gt;= id(tmax).state;'\n        # Si Temp Triac sup\u00e9rieur ou \u00e9gale au seuil alors NOK\n          then:\n            - binary_sensor.template.publish:\n                id: temperatureok\n                state: OFF\n                              \n      # Si Bus Ve en Bulk on regule autour d'une consigne de puissance de charge Batteries de maniere \u00e0 laisser de la puissance \u00e0 router vers l'ECS\n      #   Sinon\n      # Si on regule autour du zero grid et d'un seuil puissance batteries\n      # \n      # La r\u00e9gule consiste \u00e0 incrementer ou decrementer la sortie triac \n      - lambda: |-\n          if (id(etatbus_ve).state == 3){\n            id(increment) = (id(pu_batteries).state-id(cons_pubatt).state)*id(coeff_rbat).state\/1000;\n            id(moderegul).publish_state( \"Sur Pu batteries Bulk\");\n          } else {\n            if (id(pu_batteries).state &gt;= id(seuil_pubatt).state){\n              id(increment) = id(pureseau1).state*id(coeff_r).state\/1000*-1;\n              id(moderegul).publish_state( \"Sur Pu reseau\");\n            } else { \n              id(increment) = id(pu_batteries).state*id(coeff_rbat).state\/1000;\n              id(moderegul).publish_state( \"Sur Pu batteries Non Bulk\");\n            } \n          }  \n          \n          if (!isnan(id(striac))) {\n            id(striac) = id(striac)+id(increment);\n          }else{\n            id(striac)=0;\n            }\n\n          if (id(striac) &lt;= 0){\n            id(striac) = 0;\n          } else if(id(striac)&gt;=id(pmax).state){\n            id(striac) = id(pmax).state;\n          }        \n      - logger.log:\n          format: \"Log S Triac %f - Increment %f\"\n          args: &#091; 'id(striac)', 'id(increment)' ]\n          level: \"info\"\n\n      \n      # Si Prod &gt; seuil et mode auto et temp OK alors on active le triac et Sortie Triac superieur au mini\n      - if: \n          condition:\n            and:\n              - switch.is_on: validrouteur\n              - switch.is_on: modeauto\n              - binary_sensor.is_on: seuil_prod_ok\n              - binary_sensor.is_on: temperatureok\n              - lambda: 'return id(soc).state &gt;= id(seuil_soc).state;'              \n\n          then:\n              - light.turn_on:\n                  id: gradateur\n                  brightness: !lambda |-\n                    return id(striac)\/100 ;\n              - logger.log:\n                  format: \"Log Auto OK STriac %f - Increment %f\"\n                  args: &#091; 'id(striac)', 'id(increment)' ]\n                  level: \"info\"         \n\n      # Si mode routeur devalid\u00e9 ou temp NOK alors on d\u00e9sactive le triac \n      - if: \n          condition:\n            and:\n              - switch.is_on: modeauto\n              - or:\n                - switch.is_off: validrouteur\n                - binary_sensor.is_off: temperatureok                    \n                - binary_sensor.is_off: seuil_prod_ok\n                - lambda: 'return id(soc).state &lt; id(seuil_soc).state;'                    \n          then:\n            - lambda: |-\n                id(striac) = 0;\n                id(increment) = 0;\n            - light.turn_off: gradateur\n            - logger.log:\n                format: \"Log Auto NOk STriac %f - Increment %f\"\n                args: &#091; 'id(striac)', 'id(increment)' ]\n                level: \"info\"                         \n\n\n      # Si mode routeur manu\n      - if: \n          condition:\n            and:\n              - switch.is_off: modeauto\n          then:\n            - lambda: |-\n                id(striac) = 0;\n                id(increment) = 0;\n            - logger.log:\n                format: \"Log Manu STriac %f - Increment %f\"\n                args: &#091; 'id(striac)', 'id(increment)' ]\n                level: \"info\"                         \n    # Affichage STriac et Increment\n      - lambda: |-\n            id(afstriac).publish_state( id(striac) );\n            id(afincrement).publish_state( id(increment) );\n\n      - logger.log:\n          format: \"Log Fin STriac %f - Increment %f\"\n          args: &#091; 'id(striac)', 'id(increment)' ]\n          level: \"info\"\n\n ########################################################################\"\"\n    # ------------  Pilotage led\n  - id: etat_production\n    mode: single\n    then:\n      - if: \n          condition:\n            sensor.in_range:\n              id: pureseau1\n              below: -50\n          then:\n            - output.turn_on: led_rouge\n          else:\n            - output.turn_off: led_rouge\n            \n      - if: \n          condition:\n            switch.is_on: validrouteur\n          then:\n            - output.turn_on: led_jaune\n          else:\n            - output.turn_off: led_jaune\n \n ########################################################################\"\"\n  - id: calcul_relais_surprod\n    mode: single\n    then:\n     # Si sortie triac &gt; pmax-5%, ce qui signifie que le triac est au max sans effet, pendant plus de 10s\n     # alors on active le relais\n     # si triac &lt;= 0 alors on desactive le relais\n      - if: \n          condition:\n            - lambda: 'return id(striac)&gt;=id(pmax).state-5;'\n          then:\n            - delay: 10s\n            - switch.turn_on: relais\n            - logger.log: \"Relais Activ\u00e9\"\n      - if: \n          condition:\n            - lambda: 'return id(striac) &lt;= 0;'\n          then:\n            - switch.turn_off: relais\n            - logger.log: \"Relais D\u00e9sactiv\u00e9\"\n      <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>substitutions:\n  device_name: \"esp176-esp32-routeur-1r\"\n  friendly_name: esp176\n  adress_ip: \"192.168.0.176\"\n  time_timezone: \"Europe\/Paris\"\n  \nesphome:\n  name: ${device_name}\n  project:\n    name: \"rem81.esp176-esp32-routeur\"\n    version: \"1.0.0\"\n  on_boot:\n    priority: 800\n    # Force mode auto et tempok au demarrage\n    then: \n      - switch.turn_on: modeauto\n      - binary_sensor.template.publish:\n          id: temperatureok\n          state: ON\nesp32:\n  board: esp32dev\n  framework:\n    type: arduino\n\nwifi:\n  networks:\n    - ssid: !secret wifi\n      password: !secret mdpwifi\n  reboot_timeout: 5min\n\n  manual_ip:\n    static_ip: ${adress_ip}\n    gateway: 192.168.0.254\n    subnet: 255.255.255.0\n\n# Enable logging\nlogger:\n  baud_rate: 0\n  level: DEBUG\n  # level: INFO\n\napi:\n\nota:\n\nweb_server:\n  port: 80\n\n# Protocole afficheur\ni2c:\n  sda: GPIO21 \n  scl: GPIO22\n  scan: True\n  id: bus_a\n\n# Protocole du JSK\nuart:\n  id: mod_bus\n  tx_pin: 17\n  rx_pin: 16\n  baud_rate: 38400\n  stop_bits: 1\n#  debug:\n#    direction: BOTH\n#    dummy_receiver: false\n#    after:\n#      timeout: 150ms\n#    sequence:\n#      - lambda: |-\n#          UARTDebug::log_string(direction, bytes);\n\nmodbus:\n#flow_control_pin: 5\n  #send_wait_time: 200ms\n  id: modbus1\n\nmodbus_controller:\n  - id: jsymk\n    ## the Modbus device addr\n    address: 0x1\n    modbus_id: modbus1\n    update_interval: 0.75s\n    command_throttle: 50ms\n    \n    # setup_priority: -10\n\nglobals:\n   - id: increment\n     type: float\n     restore_value: no\n     initial_value: '0'\n   - id: striac\n     type: float\n     restore_value: yes\n\n#&nbsp;Sonde Temperature Dallas\ndallas:\n  - pin: GPIO27 #\n    update_interval: 60s\n\n# Informations supplementaires sur le WIFI\n#text_sensor:\n#  - platform: wifi_info\n#    ip_address:\n#      name: ${friendly_name}_ESP IP Address\n#    ssid:\n#      name: ${friendly_name}_ESP Connected SSID\n#    bssid:\n#      name: ${friendly_name}_ESP Connected BSSID\n#    mac_address:\n#      name: ${friendly_name}_ESP Mac Wifi Address\n#    scan_results:\n#      name: ${friendly_name}_ESP Latest Scan Results\n\n\nbinary_sensor:\n#Etat de la connection\n  - platform: status\n    name: \"${friendly_name}_Status\"\n\n# Temperature triac OK\n  - platform: template\n    name: \"${friendly_name} Temp Ok\"\n    id: temperatureok\n\n# Validation du routeur \u00e0 d\u00e9clarer dans HA\n  - platform: homeassistant\n    name: \"Validation Routeur\"\n    entity_id: \"input_boolean.inter_validation_routeur\"\n    publish_initial_state: true\n    id: val_routeur    \n\n# Input Number\nnumber:\n  # Seuil Max sortie triac\n  - platform: template\n    name: \"${friendly_name} P Max\"\n    id: pmax\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 50\n    max_value: 100\n    unit_of_measurement: \"%\"\n    step: 1\n\n# Seuil MAX temperature\n  - platform: template\n    name: \"${friendly_name} T Max\"\n    id: tmax\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 0\n    max_value: 75\n    unit_of_measurement: \"C\u00b0\"\n    step: 0.1\n\n# Coeff R\u00e9activit\u00e9\n  - platform: template\n    name: \"${friendly_name} Coeff R\"\n    id: coeff_r\n    optimistic: true\n    restore_value: true\n    mode: box\n    min_value: 0\n    max_value: 10\n    unit_of_measurement: \"\"\n    step: 0.1\n\n\nsensor:  \n\n# tension de l'alimentation\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: Tension\n    #name: \"${friendly_name} Tension JSYMK\"\n    address: 0x0048\n    unit_of_measurement: \"V\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# Intensit\u00e9 traversant le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: Itore\n    name: \"${friendly_name} I_ECS JSYMK\"\n    address: 0x0049\n    unit_of_measurement: \"A\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# Puissance traversant le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: puecs\n    name: \"${friendly_name} P_ECS JSYMK\"\n    address: 0x004A\n    unit_of_measurement: \"W\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# Energie lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: energietore\n    name: \"${friendly_name} Energie ECS JSYMK\"\n    address: 0x004B\n    unit_of_measurement: \"kWh\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# FP lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: fptore\n    #name: \"${friendly_name} FP Tore JSYMK\"\n    address: 0x004C\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.001\n    register_count: 1\n    response_size: 4\n\n# Energie NEG lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: energietoren\n    name: \"${friendly_name} Energie ECS Neg JSYMK\"\n    address: 0x004D\n    unit_of_measurement: \"kWh\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001     \n    register_count: 1\n    response_size: 4 \n# Sens du courant dans la pince\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: senspince\n    #name: \"${friendly_name} Sens_Pince JSYMK\"\n    address: 0x004E\n    register_type: holding\n    value_type: U_DWORD\n    bitmask: 0X00010000\n    filters:\n      - multiply: 1\n    register_count: 1\n    response_size: 4\n# Sens du courant dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: senstor\n    #name: \"${friendly_name} Sens_Tore JSYMK\"\n    address: 0x004E\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 0\n    bitmask: 0X01000000\n    filters:\n      - multiply: 1\n    register_count: 1\n    response_size: 4\n\n# Fr\u00e9quence de l'alimentation  \n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: frequence\n    #name: \"${friendly_name} Frequence JSYMK\"\n    address: 0x004F\n    unit_of_measurement: \"hz\"    \n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.01\n    register_count: 1\n    response_size: 4\n\n# tension de l'alimentation\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: Tension2\n    #name: \"${friendly_name} U_Reseau JSYMK\"\n    address: 0x0050\n    unit_of_measurement: \"V\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n    \n# Intensit\u00e9 lue dans la pince\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: Ireseau\n    #name: \"${friendly_name} I_Reseau JSYMK\"\n    address: 0x0051\n    unit_of_measurement: \"A\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# puissance lue dans la pince\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: pureseau\n    #name: \"${friendly_name} P_Reseau JSYMK\"\n    address: 0x0052\n    unit_of_measurement: \"W\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4 \n    on_value:\n      then:\n        - lambda: |-\n            if ( id(senspince).state == 1 ) {\n              id(pureseau1).publish_state( id(pureseau).state *-1);\n            } else {\n              id(pureseau1).publish_state( id(pureseau).state );\n            }\n\n    \n# Energie lue dans la pince\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: energiepince\n    #name: \"${friendly_name} Energie Reseau JSYMK\"\n    address: 0x0053\n    unit_of_measurement: \"kWh\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001\n    register_count: 1\n    response_size: 4\n\n# Energie lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: fppince\n    #name: \"${friendly_name} FP Pince JSYMK\"\n    address: 0x0054\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.001\n    register_count: 1\n    response_size: 4\n\n# Energie NEG lue dans le tore\n  - platform: modbus_controller\n    modbus_controller_id: jsymk\n    id: energienegpince\n    #name: \"${friendly_name} Energie ECS Neg JSYMK\"\n    address: 0x0055\n    unit_of_measurement: \"kWh\"\n    register_type: holding\n    value_type: U_DWORD\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.0001     \n    register_count: 1\n    response_size: 4 \n    \n# Informations WI_FI\n  - platform: wifi_signal # Affiche le signal WiFi strength\/RSSI en dB\n    name: \"${friendly_name} WiFi Signal dB\"\n    id: wifi_signal_db\n    update_interval: 60s\n    entity_category: \"diagnostic\"\n\n  - platform: copy # Affiche le signal WiFi strength en %\n    source_id: wifi_signal_db\n    name: \"${friendly_name} WiFi Signal Percent\"\n    filters:\n      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);\n    unit_of_measurement: \"Signal %\"\n    entity_category: \"diagnostic\"\n\n############### TEMPLATE  ######################\"\n# Affichage dans HA et sur l'afficheur\n  - platform: template\n    name: \"${friendly_name} Pu Reseau\"\n    id: pureseau1\n    unit_of_measurement: \"W\"\n    state_class: \"measurement\"  \n \n  - platform: template\n    name: \"${friendly_name} Increment\"\n    id: afincrement\n    unit_of_measurement: \"\"\n    accuracy_decimals: 2\n    state_class: \"measurement\"\n\n  - platform: template\n    name: \"${friendly_name} Sortie Triac\"\n    id: afstriac\n    unit_of_measurement: \"%\"\n    state_class: \"measurement\"  \n    accuracy_decimals: 2\n\n# Sonde Temperature radiateur\n  - platform: dallas\n    address: 0xeb012112e461b128\n    name: \"${friendly_name} Temp triac\"\n    id: temp_triac\n    filters:\n      - filter_out: NAN\n\n \nswitch:\n  - platform: gpio\n    name: \"${friendly_name} Relais\"\n    pin: GPIO5\n    id: relais\n\n  - platform: template\n    name: \"${friendly_name} Mode Auto\"    \n    id: modeauto\n    optimistic: true\n    restore_mode: always_on\n\n  - platform: restart\n    name: \"${friendly_name} Restart\"\n\noutput:\n#LEDS --------------------------------------\n  - id: led_conso\n    platform: gpio\n    pin: GPIO32\n    \n  - id: led_injec\n    platform: gpio\n    pin: GPIO25\n# Pilotage du Dimmer ------------------------\n  - platform: ac_dimmer\n    id: ecs\n    gate_pin: GPIO33\n    method: leading\n    zero_cross_pin:\n      number: GPIO34 \n      mode:\n        input: true\n      inverted: yes\n    min_power: 5%\n\nlight:\n  - platform: monochromatic\n    name: \"${friendly_name}+STriac\"\n    output: ecs\n    id: gradateur\n    default_transition_length: 50ms\n\n# Affichage\ndisplay:\n  - platform: lcd_pcf8574\n    dimensions: 20x4\n    address: 0x27\n    update_interval: 2s\n    lambda: |-\n      it.printf(0,0,\"Pr=%0.0fW\",id(pureseau1).state);\n      it.printf(10,0,\"Pe=%0.0fW \",id(puecs).state);\n      it.printf(0,1,\"Tr=%0.1f%%\",id(striac));\n      it.printf(10,1,\"Val:%s\", id(val_routeur).state ? \"OK\" : \"NOK\");\n      it.printf(0,2,\"Tp=%0.1fc\", id(temp_triac).state);\n      it.printf(10,2,\"Etat=%s\", id(temperatureok).state ? \"OK\" : \"NOK\");\n      it.printf(0,3,\"Mode=%s\", id(modeauto).state ? \"Auto\" : \"Manu\");\n      it.printf(10,3,\"Inc=%0.1f \",id(increment)); \n\ninterval:\n  - interval: 1s\n    then:\n      - script.execute: calcul_injection\n\n  - interval: 2s\n    then:\n      - script.execute: etat_production \n\n# Script activation relais si le triac est au max pendant x sec\n  - interval: 60s\n    then:\n      - script.execute: calcul_relais_surprod      \n\n# ------------------------  Scripts\nscript:\n# \n# ------------------------ Calcul puissance injection \n  - id: calcul_injection\n    mode: single\n    then:\n\n      - if:\n          condition:\n            lambda: 'return id(temp_triac).state &lt; (id(tmax).state-2);'\n        # Si Temp Triac inferieur au seuil-2\u00b0 alors OK\n          then:\n            - binary_sensor.template.publish:\n                id: temperatureok\n                state: ON\n        # D\u00e9validation du seuil de temp\u00e9rature\n      - if:\n          condition:\n            lambda: 'return id(temp_triac).state &gt;= id(tmax).state;'\n        # Si Temp Triac sup\u00e9rieur ou \u00e9gale au seuil alors NOK\n          then:\n            - binary_sensor.template.publish:\n                id: temperatureok\n                state: OFF\n      # Validation du seuil de temperature triac\n      - lambda: |-\n         id(increment) = id(pureseau1).state*id(coeff_r).state\/1000*-1;\n \n      - lambda: |-\n         id(striac) = id(striac)+id(increment);            \n               \n          if (!isnan(id(striac))) {\n            id(striac) = id(striac)+id(increment);\n          }else{\n            id(striac)=0;\n            }\n\n          if (id(striac) &lt;= 0){\n            id(striac) = 0;\n          } else if(id(striac)&gt;=id(pmax).state){\n            id(striac) = id(pmax).state;\n          }        \n      - logger.log:\n          format: \"Log S Triac %f - Increment %f\"\n          args: &#091; 'id(striac)', 'id(increment)' ]\n          level: \"info\"\n      \n\n      # Si Routeur Valid\u00e9 et mode auto et temperature ok alors on active le triac\n      - if: \n          condition:\n            and:\n              - binary_sensor.is_on: val_routeur\n              - switch.is_on: modeauto\n              - binary_sensor.is_on: temperatureok\n        \n\n          then:\n              - light.turn_on:\n                  id: gradateur\n                  brightness: !lambda |-\n                    return id(striac)\/100 ;\n              - logger.log:\n                  format: \"Log Auto OK STriac %f - Increment %f\"\n                  args: &#091; 'id(striac)', 'id(increment)' ]\n                  level: \"info\"         \n\n      # Si mode routeur devalid\u00e9 ou temp NOK alors on d\u00e9sactive le triac \n      - if: \n          condition:\n            and:\n              - switch.is_on: modeauto\n              - or:\n                - binary_sensor.is_off: val_routeur\n                - binary_sensor.is_off: temperatureok                    \n                   \n          then:\n            - lambda: |-\n                id(striac) = 0;\n                id(increment) = 0;\n            - light.turn_off: gradateur\n            - logger.log:\n                format: \"Log Auto NOk STriac %f - Increment %f\"\n                args: &#091; 'id(striac)', 'id(increment)' ]\n                level: \"info\"                         \n\n\n      # Si mode routeur manu\n      - if: \n          condition:\n            and:\n              - switch.is_off: modeauto\n          then:\n            - lambda: |-\n                id(striac) = 0;\n                id(increment) = 0;\n            - logger.log:\n                format: \"Log Manu STriac %f - Increment %f\"\n                args: &#091; 'id(striac)', 'id(increment)' ]\n                level: \"info\"                         \n    # Affichage STriac et Increment\n      - lambda: |-\n            id(afstriac).publish_state( id(striac) );\n            id(afincrement).publish_state( id(increment) );\n\n      - logger.log:\n          format: \"Log Fin STriac %f - Increment %f\"\n          args: &#091; 'id(striac)', 'id(increment)' ]\n          level: \"info\"\n\n# -------------------------------------------  Pilotage led\n  - id: etat_production\n    mode: single\n    then:\n     - if: \n         condition:\n           sensor.in_range:\n              id: pureseau1\n              below: 50\n              above: -50\n         then:\n           - output.turn_on: led_conso\n           - output.turn_on: led_injec\n                \n     - if: \n         condition:\n           sensor.in_range:\n             id: pureseau1\n             above: 50\n         then:\n           - output.turn_off: led_injec\n           - output.turn_on: led_conso\n\n     - if: \n         condition:\n           sensor.in_range:\n             id: pureseau1\n             below: -50\n         then:\n          - output.turn_off: led_conso\n          - output.turn_on: led_injec\n\n# Calcul du relais de surproduction\n  - id: calcul_relais_surprod\n    mode: single\n    then:\n     # Si sortie triac &gt; pmax-5%, ce qui signifie que le triac est au max sans effet, pendant plus de 30s\n     # alors on active le relais\n     # si triac &lt;= 0 alors on desactive le relais\n      - if: \n          condition:\n            - lambda: 'return id(striac)&gt;=id(pmax).state-5;'\n          then:\n            - delay: 30s\n            - switch.turn_on: relais\n            - logger.log: \"Relais Activ\u00e9\"\n      - if: \n          condition:\n            - lambda: 'return id(striac)&lt;=0;'\n          then:\n            - switch.turn_off: relais\n            - logger.log: \"Relais D\u00e9sactiv\u00e9\"\n      \n    \n    <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Param\u00e8tres:<\/h2>\n\n\n\n<p>Vous pouvez r\u00e9gler:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La puissance maximum que peut d\u00e9livrer le triac. Je l&rsquo;ai limit\u00e9 \u00e0 80% ce qui correspond \u00e0 2000 W dans mon cas (Ballon ECS de 300l). Pour l&rsquo;estimer au mieux, passer en mode MANUEL et augmenter progressivement la sortie triac tout en visualisant l&rsquo;intensit\u00e9 absorb\u00e9e par l&rsquo;ECS, perso je me limite \u00e0 10\/11A. Au del\u00e0 le triac monte trop en temp\u00e9rature.<\/li>\n\n\n\n<li>le coefficient R (r\u00e9activit\u00e9): Voir explication dans \u00ab\u00a0Principe de Fonctionnement\u00a0\u00bb.<\/li>\n\n\n\n<li>la temp\u00e9rature maximum du refroidisseur du triac:\n<ul class=\"wp-block-list\">\n<li>Si sup\u00e9rieure \u00e0 ce seuil, d\u00e9-valide la sortie triac.<\/li>\n\n\n\n<li>Si inf\u00e9rieure \u00e0 ce seuil-2 degr\u00e9s, valide la sortie triac.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Vous pouvez piloter:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>L&rsquo;interrupteur de validation du routeur: D\u00e9clar\u00e9 et programm\u00e9 dans HA<\/li>\n\n\n\n<li>D\u00e9finir le seuil PMAX pour ne pas trop solliciter le TRIAC<\/li>\n\n\n\n<li>D\u00e9finir le coefficient R (R\u00e9activit\u00e9)<\/li>\n\n\n\n<li>D\u00e9finir la Temp\u00e9rature MAX du triac<\/li>\n\n\n\n<li>Le relais de d\u00e9lestage<\/li>\n\n\n\n<li>Un mode Manuel\/Auto: Manuel vous donne la possibilit\u00e9 de piloter la sortie triac.<\/li>\n\n\n\n<li>Le triac.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"428\" height=\"457\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-7.png\" alt=\"\" class=\"wp-image-3002\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-7.png 428w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-7-281x300.png 281w\" sizes=\"auto, (max-width: 428px) 100vw, 428px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Grandeurs physiques:<\/h2>\n\n\n\n<p>Vous retrouverez:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dans mon cas j&rsquo;affiche la temp\u00e9rature de l&rsquo;ECS, mesur\u00e9e avec un autre ESP,  voir<a href=\"https:\/\/domo.rem81.com\/index.php\/2022\/11\/25\/ha-gestion-eau-chaude-sanitaire\/\" target=\"_blank\" rel=\"noopener\" title=\"\"> cet article<\/a>. <\/li>\n\n\n\n<li>La puissance soutir\u00e9e ou inject\u00e9e sur le r\u00e9seau.<\/li>\n\n\n\n<li>La puissance et l&rsquo;intensit\u00e9 de l&rsquo;ECS.<\/li>\n\n\n\n<li>La valeur de l\u2019incr\u00e9ment.<\/li>\n\n\n\n<li>La sortie Triac.<\/li>\n\n\n\n<li>L\u2019\u00e9nergie soutir\u00e9e par l&rsquo;ECS sur le r\u00e9seau.<\/li>\n\n\n\n<li>L&rsquo;\u00e9nergie \u00e9conomis\u00e9e par le routeur par jour et totale. L&rsquo;\u00e9nergie par jour est calcul\u00e9e dans une entr\u00e9e HA: voir mon article <strong><a href=\"https:\/\/domo.rem81.com\/2022\/06\/06\/ha-compteur-de-service-utility-meter\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/domo.rem81.com\/2022\/06\/06\/ha-compteur-de-service-utility-meter\/<\/a><\/strong>.<\/li>\n\n\n\n<li>L&rsquo;\u00e9tat du binary-sensor: temp\u00e9rature Ok.<\/li>\n\n\n\n<li>La temp\u00e9rature du triac.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"418\" height=\"582\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/image-3-1.png\" alt=\"\" class=\"wp-image-2767\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/image-3-1.png 418w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2023\/07\/image-3-1-215x300.png 215w\" sizes=\"auto, (max-width: 418px) 100vw, 418px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Automatisation:<\/h2>\n\n\n\n<p>Le fonctionnement routeur est valid\u00e9 par un input_number d\u00e9clar\u00e9 dans HA.    <\/p>\n\n\n\n<p>La validation du routeur d\u00e9pend de votre configuration: Si votre installation solaire ne comporte pas de batteries, vous pouvez vous inspirer de cet article <a href=\"https:\/\/domo.rem81.com\/2022\/11\/25\/ha-gestion-eau-chaude-sanitaire\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/domo.rem81.com\/2022\/11\/25\/ha-gestion-eau-chaude-sanitaire\/<\/a>. Depuis cet article, mon installation PV a \u00e9volu\u00e9e avec l&rsquo;ajout de batteries de stockage,  depuis leur mise en service je valide le routeur lorsque les batteries sont charg\u00e9es.<\/p>\n\n\n\n<p>Plus simplement, vous pouvez le valider entre le lev\u00e9 et le couch\u00e9 du soleil.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Relais Delestage:<\/h2>\n\n\n\n<p>Dans mon programme, j&rsquo;utilise le GPIO5 mais d&rsquo;autres GPIO sont disponibles pour cet usage, <a href=\"https:\/\/www.upesy.fr\/blogs\/tutorials\/esp32-pinout-reference-gpio-pins-ultimate-guide\" target=\"_blank\" rel=\"noopener\" title=\"\">cet article<\/a> les d\u00e9crits parfaitement.<\/p>\n\n\n\n<p>Toutes les minutes, on teste si le triac est au maximum pendant plus de 30s alors on active le relais de d\u00e9lestage sinon on le d\u00e9sactive<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Affichage Local:<\/h2>\n\n\n\n<p>Localement j&rsquo;affiche:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pr: Puissance sur le r\u00e9seau (sortie Linky)<\/li>\n\n\n\n<li>Pe: Puissance Absorb\u00e9e par le ballon ECS<\/li>\n\n\n\n<li>Tr: Valeur pilotage triac<\/li>\n\n\n\n<li>Val: Routeur Valid\u00e9e<\/li>\n\n\n\n<li>Tp: Temp\u00e9rature triac<\/li>\n\n\n\n<li>Etat: OK si Temp\u00e9rature Triac inf\u00e9rieur au seuil sinon NOK<\/li>\n\n\n\n<li>Mode: Automatique ou Manuel<\/li>\n\n\n\n<li>Inc: Valeur de l&rsquo;incrementCapture d\u2019\u00e9cran du 2024-03-26 11-28-57<\/li>\n\n\n\n<li>LED Rouge et Jaune allum\u00e9es: Puissance R\u00e9seau entre -50 et 50 W<\/li>\n\n\n\n<li>LED Rouge allum\u00e9e et Jaune \u00e9teinte: On rejette plus de 50 W sur le r\u00e9seau<\/li>\n\n\n\n<li>LED Rouge \u00e9teinte et Jaune allum\u00e9e: On soutire plus de 50 W sur le r\u00e9seau<\/li>\n\n\n\n<li>LED Verte allum\u00e9e: Coffret sous tension<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9sultats:<\/h2>\n\n\n\n<p>La courbe ci dessous (extraite de Graphana) illustre l&rsquo;efficacit\u00e9 et la r\u00e9activit\u00e9 du routeur. Ce jour l\u00e0, \u00e0 partir de 15:45 l&rsquo;ECS ne chauffe plus, il a atteint ses 70\u00b0C, conclusion: on injecter sur le r\u00e9seau.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"846\" height=\"300\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-1.png\" alt=\"\" class=\"wp-image-2913\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-1.png 846w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-1-300x106.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-1-768x272.png 768w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><\/figure>\n\n\n\n<p>Le graphique suivant illustre les \u00e9conomies r\u00e9alis\u00e9es en kWh, les jours \u00e0 0 sont d\u00fb \u00e0 un faible ensoleillement, dans mon cas je privil\u00e9gie la charge des batteries avant de router vers l&rsquo;ECS.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"848\" height=\"295\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-5.png\" alt=\"\" class=\"wp-image-2975\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-5.png 848w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-5-300x104.png 300w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2024\/03\/image-5-768x267.png 768w\" sizes=\"auto, (max-width: 848px) 100vw, 848px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Liens vers des routeurs \u00e0 monter soi-m\u00eame:<\/h1>\n\n\n\n<p>Bien entendu cette liste est non exhaustive, si vous avez d&rsquo;autres liens, n&rsquo;h\u00e9siter pas \u00e0 me les transmettre, je les ajouterai.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.hacf.fr\/realisation-routeur-solaire\/\" data-type=\"link\" data-id=\"https:\/\/www.hacf.fr\/realisation-routeur-solaire\/\" target=\"_blank\" rel=\"noreferrer noopener\">Routeur ESPHome Complet<\/a><\/li>\n\n\n\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/sites.google.com\/view\/le-professolaire\/routeur-professolaire\" data-type=\"URL\" data-id=\"https:\/\/sites.google.com\/view\/le-professolaire\/routeur-professolaire\" target=\"_blank\">Le Prof&rsquo;Solaire<\/a>. <\/li>\n\n\n\n<li><a href=\"https:\/\/ptiwatt.kyna.eu\/post\/2022\/07\/09\/Construction-d-un-Power-Router-pas-%C3%A0-pas\" data-type=\"URL\" data-id=\"https:\/\/ptiwatt.kyna.eu\/post\/2022\/07\/09\/Construction-d-un-Power-Router-pas-%C3%A0-pas\" target=\"_blank\" rel=\"noreferrer noopener\">Association P&rsquo;TIWATT<\/a><\/li>\n\n\n\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/pvrouteur.apper-solaire.org\/\" data-type=\"URL\" data-id=\"https:\/\/pvrouteur.apper-solaire.org\/\" target=\"_blank\">Le Routeur\/Dimmer de Cyril<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/bidouilleurs\/routeur_solaire\" data-type=\"URL\" data-id=\"https:\/\/github.com\/bidouilleurs\/routeur_solaire\" target=\"_blank\" rel=\"noreferrer noopener\">Les bidouilleurs Solaire<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/pvrouteur.free.fr\/\" data-type=\"URL\" data-id=\"http:\/\/pvrouteur.free.fr\/\" target=\"_blank\" rel=\"noreferrer noopener\">pvrouteur pour les nuls<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/f1atb.fr\/fr\/realisation-dun-routeur-photovoltaique-multi-sources-multi-modes-et-modulaire\/\" target=\"_blank\" rel=\"noopener\" title=\"\">F1ATB<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/Jetblack31\/MaxPV\" data-type=\"URL\" data-id=\"https:\/\/github.com\/Jetblack31\/MaxPV\" target=\"_blank\" rel=\"noreferrer noopener\">MaxPv<\/a><\/li>\n\n\n\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/mk2pvrouter.co.uk\/shop.html\" data-type=\"URL\" data-id=\"https:\/\/mk2pvrouter.co.uk\/shop.html\" target=\"_blank\">Mk2PVrouter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/xavierberger.github.io\/Solar-Router-for-ESPHome\/\">https:\/\/xavierberger.github.io\/Solar-Router-for-ESPHome\/<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/yasolr.carbou.me\/\">https:\/\/yasolr.carbou.me\/<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Un routeur solaire de plus! Celui ci est compl\u00e9ment int\u00e9gr\u00e9 \u00e0 Home Assistant, et en plus il co\u00fbte pas trop cher. N\u2019h\u00e9sitez par me faire part de vos remarques.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro Dans un article pr\u00e9c\u00e9dent, je d\u00e9crivais une premi\u00e8re version de routeur PV mont\u00e9 sur la base d&rsquo;une mesure de puissance tiers, dans mon cas, d\u00e9livr\u00e9e par mon onduleur Victron, &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,6],"tags":[15,17,83],"class_list":["post-2703","post","type-post","status-publish","format-standard","hentry","category-homeassistant","category-photovoltaique","tag-esp32","tag-esphome","tag-routeur-solaire"],"_links":{"self":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/2703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/comments?post=2703"}],"version-history":[{"count":60,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/2703\/revisions"}],"predecessor-version":[{"id":4016,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/2703\/revisions\/4016"}],"wp:attachment":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/media?parent=2703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/categories?post=2703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/tags?post=2703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}