Intégration du disjoncteur intelligent WiFi RMshebei Tuya 4P100A avec Home Assistant + Calcul solaire + Tableau de bord complet

:television: Vidéo explicative du système :


:sun: Projet de Surveillance de l'Énergie Solaire

Système complet de surveillance de l'énergie solaire utilisant :

Disjoncteur WiFi 4P100A avec mesure bidirectionnelle

Compteur intelligent dédié à la production solaire

Utility Meter de Home Assistant

Cartes personnalisées (Mushroom + Card Mod + Browser Mod)

Automatisation propre pour la réinitialisation du cycle de facturation

Le projet effectue le calcul automatique de :

Consommation

Production

Énergie injectée

Solde énergétique

Valeur estimée de la facture

Sans dépendre du décalage (offset) automatique de l'Utility Meter.

:gear: Équipements Utilisés

RMshebei Tuya Smart WiFi Disjoncteur 4P100A

Sonoff POWR2

:electric_plug: Intégrations Utilisées

:small_blue_diamond: Home Assistant

:small_blue_diamond: Browser Mod

:small_blue_diamond: Mushroom Cards

:small_blue_diamond: Card Mod

:bar_chart: Ce que le projet calcule automatiquement

:check_mark: Production solaire quotidienne
:check_mark: Production solaire mensuelle
:check_mark: Production solaire annuelle
:check_mark: Énergie injectée dans le réseau
:check_mark: Consommation totale de la résidence
:check_mark: Calcul automatique de la valeur de la facture (basé sur le coût configuré du kWh)
:check_mark: Solde mensuel en kWh
:check_mark: Bilan énergétique cumulé
:check_mark: Crédit ou débit énergétique du mois

:counterclockwise_arrows_button: Clôture du Cycle (IMPORTANT)

Ce projet n'utilise pas d'offset dans l'Utility Meter.

La clôture de la facture est réalisée via :

:check_mark: Automatisation personnalisée
:check_mark: Réinitialisation manuelle contrôlée
:check_mark: Exécution automatique au jour défini (ex : le 25 à 23h59)

Cela permet :

Un plus grand contrôle sur la période de facturation

Une indépendance par rapport au cycle fixe de l'Utility Meter

Un ajustement facile au cas où le fournisseur d'énergie modifie la date de relevé

:bullseye: Atouts du Projet

:check_mark: Système entièrement modulaire
:check_mark: N'interfère pas avec d'autres cartes utilisant les mêmes capteurs
:check_mark: Réinitialisation centralisée et organisée
:check_mark: Adaptation facile à n'importe quel tarif de kWh
:check_mark: Structure prête pour une publication sur GitHub

:file_folder: :one: sensors.yaml

:file_folder: Valeur de production, Valeur du KW et Bilan Total

##################################################
# CAPTEURS (NOUVEAU FORMAT TEMPLATE)
##################################################
template:
  - sensor:

      ##################################################
      # PRODUCTION SOLAIRE (BASE)
      ##################################################
      - name: "Production Solaire Hebdomadaire"
        unit_of_measurement: "kWh"
        state: >
          {{ states('sensor.sonoff_1000916c58_energy') | float(0) }}

      ##################################################
      # CONSOMMATION ACTUELLE DEUX PHASES
      ##################################################
      - name: "Consommation Actuelle du Réseau (kW)"
        unit_of_measurement: "kW"
        state: >
          {{
            states('sensor.breaker_potencia_da_fase_a_2') | float(0)
            +
            states('sensor.breaker_potencia_da_fase_b_2') | float(0)
          }}

      - name: "Consommation Actuelle du Réseau (W)"
        unit_of_measurement: "W"
        state: >
          {{
            (
              states('sensor.breaker_potencia_da_fase_a_2') | float(0)
              +
              states('sensor.breaker_potencia_da_fase_b_2') | float(0)
            ) * 1000
          }}

      ##################################################
      # COÛTS (base fixe 1.11)
      ##################################################
      - name: "Valeur kWh"
        unit_of_measurement: "R$/kWh"
        state: "1.11"

      - name: "Coût Consommation Mensuelle"
        unit_of_measurement: "R$"
        state: >
          {{ states('sensor.consumo_energia_mensal') | float(0) * 1.11 }}

      - name: "Coût Production Mensuelle"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.producao_solar_mensal') | float(0) * 1.11) | round(2) }}

      - name: "Coût Injecté Mensuel"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.injecao_energia_mensal') | float(0) * 1.11) | round(2) }}

      - name: "Coût Production Hebdomadaire"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.producao_solar_semanal') | float(0) * 1.11) | round(2) }}

      - name: "Coût Production Annuelle"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.producao_solar_anual') | float(0) * 1.11) | round(2) }}

      - name: "Coût Injecté Hebdomadaire"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.energia_injetada_semanal') | float(0) * 1.11) | round(2) }}

      - name: "Coût Injecté Annuel"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.energia_injetada_anual') | float(0) * 1.11) | round(2) }}

      - name: "Coût Consommation Hebdomadaire"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.breaker_energia_total_2') | float(0) * 1.11) | round(2) }}

      - name: "Coût Consommation Annuelle"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.consumo_energia_anual') | float(0) * 1.11) | round(2) }}

      - name: "Coût Puissance Actuelle"
        unit_of_measurement: "R$"
        state: >
          {{ ((states('sensor.sonoff_1000916c58_power') | float(0) / 1000) * 1.11) | round(2) }}

      - name: "Coût Énergie Injectée"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.breaker_total_production_2') | float(0) * 1.11) | round(2) }}

      - name: "Coût Énergie Consommée Totale"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.breaker_energia_total_2') | float(0) * 1.11) | round(2) }}

      - name: "Coût Consommation Aujourd'hui"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.consumo_energia_diario') | float(0) * 1.11) | round(2) }}

      - name: "Coût Énergie Jour"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.consumo_energia_diario') | float(0) * 1.11) | round(2) }}

      - name: "Coût Énergie Mois"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.consumo_energia_mensal') | float(0) * 1.11) | round(2) }}

      - name: "Valeur de la Facture Actuelle"
        unit_of_measurement: "R$"
        state: >
          {{ (states('sensor.consumo_mensal_fatura') | float(0) * 1.11) | round(2) }}

      ##################################################
      # BILANS
      ##################################################
      - name: "Bilan Énergétique Cumulé"
        unit_of_measurement: "kWh"
        state: >
          {{ (states('sensor.breaker_energia_total_2') | float(0)
           - states('sensor.breaker_total_production_2') | float(0)) | round(2) }} 
           
      - name: "Solde de la Facture (kWh)"
        unit_of_measurement: "kWh"
        state: >
          {{ (states('sensor.producao_solar_mensal') | float(0)
           - states('sensor.consumo_energia_mensal') | float(0)) | round(2) }}         

:file_folder: :two: utility_meter.yaml

consumo_energia_mensal:
  source: sensor.breaker_energia_total_2
  cycle: monthly
  offset:
    days: 20

injecao_energia_mensal:
  source: sensor.breaker_total_production_2
  cycle: monthly
  offset:
    days: 20

producao_solar_mensal:
  source: sensor.sonoff_1000916c58_energy
  cycle: monthly
  offset:
    days: 20

consumo_energia_anual:
  source: sensor.breaker_energia_total_2
  cycle: yearly

energia_injetada_anual:
  source: sensor.breaker_total_production_2
  cycle: yearly

producao_solar_anual:
  source: sensor.sonoff_1000916c58_energy
  cycle: yearly

# Maintenant c'est propre, organisé et sans duplication inutile.

:camera_with_flash: Aperçu du Tableau de Bord

Tableau de Bord Principal

:file_folder: :three: Carte avec Popup (cards/card_popup.yaml)

type: custom:mushroom-template-card
primary: >
  Production Solaire : {{ states("sensor.sonoff_1000916c58_power") | float(0) |
  round(2) }} W
secondary: >
  Jour : {{ states("sensor.sonoff_1000916c58_energy") | float(0) | round(2) }} kWh
  | Mois : {{ states("sensor.producao_solar_mensal") | float(0) | round(2) }} kWh
icon: mdi:solar-panel
icon_color: green
badge_icon: mdi:solar-power-variant-outline
badge_color: green
tap_action:
  action: fire-dom-event
  browser_mod:
    service: browser_mod.sequence
    data:
      sequence:
        - action: script.pc_click
        - action: browser_mod.popup
          data:
            content:
              type: custom:mod-card
              style: |
                ha-card {
                  background: linear-gradient(
                    rgba(0,0,0,0.65),
                    rgba(0,0,0,0.65)
                  ), url("/local/cardpainel2.jpg") center/cover no-repeat;
                  background-size: cover;
                  background-position: center;
                  border-radius: 18px;
                  padding: 16px;
                  box-shadow: 0 8px 30px rgba(0,0,0,0.4);
                }
              card:
                type: vertical-stack
                cards:
                  - type: entities
                    title: Production Solaire
                    card_mod:
                      style: |
                        ha-card {
                          background: transparent;
                          box-shadow: none;
                        }
                    entities:
                      - entity: sensor.sonoff_1000916c58_power
                        name: Puissance Actuelle
                        icon: none
                      - entity: sensor.producao_solar_mensal
                        name: Production du Mois
                        icon: none
                      - entity: sensor.producao_solar_anual
                        name: Production de l'Année
                        icon: none
                  - type: entities
                    title: Consommation de la Maison
                    card_mod:
                      style: |
                        ha-card {
                          background: transparent;
                          box-shadow: none;
                        }
                    entities:
                      - entity: sensor.consumo_atual_rede_w
                        name: Consommation Actuelle
                        icon: none
                      - entity: sensor.breaker_energia_total_2
                        name: Énergie Totale
                        icon: none
                      - entity: sensor.consumo_energia_mensal
                        name: Consommation Mensuelle
                        icon: none
                      - entity: sensor.valor_conta_mensal_real
                        name: Valeur Actuelle de la Facture
                        icon: none
                  - type: entities
                    title: Énergie Injectée
                    card_mod:
                      style: |
                        ha-card {
                          background: transparent;
                          box-shadow: none;
                        }
                    entities:
                      - entity: sensor.injecao_energia_mensal
                        name: Injecté dans le Mois
                        icon: none
                      - entity: sensor.energia_injetada_anual
                        name: Injecté dans l'Année
                        icon: none
                      - type: custom:mushroom-template-card
                        entity: sensor.saldo_mensal_kwh
                        primary: Solde de la Facture (Mensuel)
                        secondary: >
                          {% set v = states('sensor.saldo_mensal_kwh')|float %}
                          {% if v >= 0 %}
                            + {{ v | round(2) }} kWh
                          {% else %}
                            - {{ (v | abs) | round(2) }} kWh
                          {% endif %}
                        icon: mdi:circle
                        icon_color: |
                          {% if states('sensor.saldo_mensal_kwh')|float >= 0 %}
                            green
                          {% else %}
                            red
                          {% endif %}
                        layout: horizontal
                        fill_container: true

Écran 1

:file_folder: :four: Carte Simple (cards/card_simples.yaml)

type: custom:mod-card
style: |
  ha-card {
    background: linear-gradient(
      rgba(0,0,0,0.65),
      rgba(0,0,0,0.65)
    ), url("/local/cardpainel2.jpg") center/cover no-repeat;
    background-size: cover;
    background-position: center;
    border-radius: 18px;
    padding: 16px;
    box-shadow: 0 8px 30px rgba(0,0,0,0.4);
  }
card:
  type: vertical-stack
  cards:
    - type: entities
      title: Production Solaire
      card_mod:
        style: |
          ha-card {
            background: transparent;
            box-shadow: none;
          }
      entities:
        - entity: sensor.sonoff_1000916c58_power
          name: Puissance Actuelle
        - entity: sensor.producao_solar_mensal
          name: Production du Mois
        - entity: sensor.producao_solar_anual
          name: Production de l'Année
    - type: entities
      title: Consommation de la Maison
      card_mod:
        style: |
          ha-card {
            background: transparent;
            box-shadow: none;
          }
      entities:
        - entity: sensor.breaker_energia_total_2
          name: Énergie Totale
        - entity: sensor.consumo_energia_mensal
          name: Consommation Mensuelle
        - entity: sensor.valor_conta_mensal_real
          name: Valeur Actuelle de la Facture
    - type: entities
      title: Énergie Injectée
      card_mod:
        style: |
          ha-card {
            background: transparent;
            box-shadow: none;
          }
      entities:
        - entity: sensor.injecao_energia_mensal
          name: Injecté dans le Mois
        - entity: sensor.energia_injetada_anual
          name: Injecté dans l'Année
        - type: custom:mushroom-template-card
          entity: sensor.saldo_mensal_kwh
          primary: Solde de la Facture (Mensuel)
          secondary: >
            {% set v = states('sensor.saldo_mensal_kwh')|float %} {% if v >= 0
            %}
              + {{ v | round(2) }} kWh
            {% else %}
              - {{ (v | abs) | round(2) }} kWh
            {% endif %}
          icon: mdi:circle
          icon_color: |
            {% if states('sensor.saldo_mensal_kwh')|float >= 0 %}
              green
            {% else %}
              red
            {% endif %}
          layout: horizontal
          fill_container: true

:file_folder: :five: Automatisation de Réinitialisation des Cycles Énergétiques


alias: RÉINITIALISATION GÉNÉRALE TOTALE LE 25
description: Réinitialise les capteurs mensuel, hebdomadaire et quotidien avant le relevé du 26
trigger:
  - trigger: time
    at: "23:59:00"
condition:
  - condition: template
    value_template: "{{ now().day == 25 }}"
action:

  ##################################################
  # RÉINITIALISATION QUOTIDIENNE
  ##################################################
  - action: utility_meter.calibrate
    target:
      entity_id:
        - sensor.consumo_energia_diario
        - sensor.para_rede_diario
        - sensor.via_rede_diario
        - sensor.solar_diario
        - sensor.tempo_aquecedor_diario
    data:
      value: "0"

  ##################################################
  # RÉINITIALISATION HEBDOMADAIRE
  ##################################################
  - action: utility_meter.calibrate
    target:
      entity_id:
        - sensor.producao_solar_semanal
        - sensor.energia_injetada_semanal
        - sensor.consumo_energia_semanal
        - sensor.tempo_aquecedor_semanal
    data:
      value: "0"
      
  ##################################################
  # RÉINITIALISATION MENSUELLE (CARTE)
  ##################################################
  - action: utility_meter.calibrate
    target:
      entity_id:
        - sensor.consumo_energia_mensal
        - sensor.injecao_energia_mensal
        - sensor.producao_solar_mensal
    data:
      value: "0"
      
  ##################################################
  # RÉINITIALISATION DES ENTRÉES
  ##################################################
  - action: input_number.set_value
    target:
      entity_id:
        - input_number.tempo_inicial
        - input_number.tempo_final
        - input_number.tempo_total
        - input_number.consumo_boiler
        - input_number.custo_boiler
        - input_number.qtd_ligado
        - input_number.tempo_medio_aquecimento
        - input_number.producao_mensal_hoymiles
    data:
      value: 0
mode: single        

Vini©¿©ius Mendes Corporations® 27/02/2026
Système avancé de surveillance énergétique développé pour la domotique intelligente ave

Bonjour,
Pas de bonjour !
un minimum de présentation du sujet. C'est mis en vrac, ça pique aux yeux. Merci de faire un effort à la rédaction d'un sujet.

Puis c'est quoi ce template sensor, qui ne fonctionne plus depuis quelques mois. la syntaxe n'existe plus.
lire la doc :

Bonjour,

Merci pour votre retour.

Le code fonctionne bien sur mon installation Home Assistant. Le problème vient probablement du fait que le contenu a été automatiquement traduit par le forum. Mon dépôt GitHub est en portugais, et la traduction a modifié la syntaxe YAML ainsi que certains mots-clés (platform, sensor, friendly_name, etc.), ce qui donne effectivement un code invalide lorsqu'il est affiché directement dans le message.

Le code source original sur GitHub est correct et fonctionne. Je vous recommande de consulter le dépôt original (ou de désactiver la traduction automatique du code), car les blocs YAML ne devraient pas être traduits.

Je vais également modifier mon message pour préciser que le code original se trouve sur GitHub afin d'éviter toute confusion.

Merci pour votre remarque.

Non, votre code n'est plus fonctionnel depuis le core 2026.6.0 (regarder les breaking changes).
Cette syntaxe n'existe plus et a été supprimée.

sensor:
  - platform: template
    sensors:

c'est remplacé par :

template:
  - sensor:

Désolé, je n'avais même pas remarqué. Vous avez raison.

Cette publication provient d'un ancien sujet que j'avais publié sur un forum brésilien, puis je l'ai republiée ici. La syntaxe est restée dans son ancien format.

Je vais également mettre à jour le dépôt GitHub afin qu'il soit compatible avec les versions récentes de Home Assistant.

Merci de me l'avoir signalé.

Mon ami, merci de m’avoir signalé cela. Je n’avais même pas remarqué. J’ai déjà corrigé les codes sur GitHub et j’ai également mis à jour les codes avec la version 2026.

Merci beaucoup. Sinon, j’aurais continué à partager une information erronée. Tout est maintenant corrigé.

Merci encore pour ta question, elle m’a beaucoup aidé.

Votre sujet (edité) est en portugais, merci de le mettre en français. :wink:

J’ai déjà corrigé. Et ici, merci beaucoup pour l’information que tu m’as donnée. Cela m’était passé inaperçu. C’est déjà corrigé en français. Félicitations.