Monitoring consomation d'une installation triphasée

Bonjour,

qui a une installation tri (3P+N) et aurait testé ce genre de device:

Zemismart-Compteur d’énergie Zigbee triphasé

et pourrais me faire un retour d’expérience ?

Si vous avez d’autre device équivalent ça m’interesse aussi :wink:

Merci

Salut

Je ne connais pas le produit que tu cites mais par contre j’ai ce produit là: Smart Powermeter qui marche nickel (aussi bien avec du tri que du mono, je l’utilise pour la consommation de ma cuisine) :slight_smile:

Vincèn

1 « J'aime »

ho mais c’est super interessant ce truc, si je résume ce que j’ai lu (corrige moi si je trompe):

  • c’est un device wifi qu’on peut integrer dans HA via ESPHOme

  • on peut mettre jsuqu’a 6 pince amperemétrique soit monitorer 6 circuit Mono ou 2 Tri

  • on peut mettre en option un boitier montable sur rail DIN

  • On peut y mettre un écran LCD 2,9 " mais ça reste optionel (tu l’as mis toi ?)

  • Le device est livré avec deux composants (un bornier et un régulateur) a souder sois-même

  • Le device est livré sans firmware, il faut le flasher soit-même.

Coté HA est ce que je vois 6 indicateur indépendant pour je peux par exemple les grouper par 3 pour 2 apprareil tri ?

Tout à fait :slight_smile:

Exact. Dans ma config je monitore un circuit triphasé et 3 circuits monophasés :wink: Le résultat dans l’intégration ESPHome:

exactement je te conseille de le prendre car cela est quand même plus propre et sécurisé dans une armoire électrique. Voilà ce que ça donne chez moi dans le tableau de la cuisine:

Non un écran eink que tu peux voir sur la photo :wink:

Oui effectivement mais facile à souder ou trouver quelqu’un pour te le faire si tu es pas sûr :wink:

Me rappelle plus mais facile à flasher car tu as l’usb sur la carte donc tu branches à l’ordi et roule :slight_smile: Si tu pars là-dessus je pourrais te passer mon sketch esphome !
Pour info la carte permet d’utiliser aussi bien les CT qui retourne un ampérage que ceux qui retournent une tension. Il suffit de faire/enlever un pont sur la carte pour chaque entrée de CT :wink:

Bonjour,

Il existe également le Shelly 3EM (Pro) dans le même genre

1 « J'aime »

top, je vois que tu as un totaliseur « Cuisine daily power » est-ce que c’est automatique ou tu peux faire des custom par exemple un dédié à ton circuit tri ?

Mon but c’est de monitorer (si possible via la liste d’appareils du panneau Energie) les appareils gros consomateur et notament ceux qui sont en tri:

  • plaque induction (biphasée)
  • cumulus (triphasée)
  • PAC (triphasée) mais je voir si je peut gérer cela avec l’integration melcloud

oui il n’y a pas photo

Je vois pas vraiment l’intéret de cet écran, vue que les infos remonte dans HA, si ce n’est pour un controle local

ha c’est gentil ça, merci

pour de la mesure de consomation en KWh les CT qui retournent un ampérage doivent etre ok, si on part du principe que la tention est quasi constante ?

Merci pour l’info :slight_smile:

tu fais ce que tu veux, c’est en fonction de ton codage dans le sketch ESPHome et/ou ensuite des totaux/calculs que tu fais dans HA :sunglasses:

oui le seul intérêt est pour tester plus facilement au début mais c’est clair qu’une fois posé cela ne sert plus à rien sauf si tu as ton td au mileu du salon :crazy_face:

[quote=« vincen, post:4, topic:52316 »]

Oui cela ne change pas grand chose à la précision à ma connaissance que tu utilises la version qui sort un courant ou une tension de mesure :wink:

Sinon, il existe aussi l’Emporia vue2 (et le 3 maintenant), qui lui aussi gère le triphasé mais qui a beaucoup plus de pinces ampérimétrique : 19 ( du coup, il faut de la place dans le tableau électrique , … )

le vue2 est wifi only (le 3 a une option rj45 mais le wifi toujours disponible), par défaut c’est dans le cloud avec une intégration home assistant mais il est possible de le flasher pour le transformer en un esphome

Lien vers emporia pour plus d’info :
https://shop.emporiaenergy.com/products/emporia-vue-3?srsltid=AfmBOoruNRXYaVW1FQwoldc5Dq-9Ed2tEUjdqPj_veXCZNZj24xDAyDL

Lien vers la doc pour le transformer en esphome :

Merci c’est plus le même budget mais super interessant aussi

Effectivement, c’est pas le même prix, mais pas le même usage non plus , …

Et c’est pas plus chère si on regarde le rapport nombre de pince/prix

Un autre truc à prendre en considération c’est la configuration de l’install elecrique, pour ma part j’ai un tableau principale et 3 tableaux divisionnaire, qui sont dans des endroit différent de la maison, du si je veux monitorer des chose dans les 3 c’est peut etre mieux 3 plus petit devices.

Dans tout les cas ça reste interessant d’avoir plusieurs pistes techniques :wink:

J’ai fait une simulation d’achat Emporia V3 vs Smart Powermeter

Pour avoir un produit équivalent j’ai mis 3 Powermeter full (écran + boitier + 6 pinces)

L’Emporia est un peu plus cher de base et comme il vient des USA il y’a du port et de frais de douane en plus. Powermeter vient lui d’Autriche donc l’expédition pique moins

voila ce que cela donne:

Pour ma part j’ai besoin de 12 pinces, donc je pense plutôt m’orienté sur des Smart Powermeter

Tu peut trouver l’emporia sur Amazon pour moins de 200€ ( Emporia Gen 3 Smart Home Energy Monitor with 16 50A Circuit Level Sensors | Home Energy Automation and Control | Real Time Electricity Monitor/Meter | Solar/Net Metering - Amazon.com )

Euh non il vient de chine, c’est Elecrow qui le vend (assembleur chinois) :wink:

j’avais vu mais quand je l’ai ajouter au panier, c’estait marqué, livraison impossible en france

oups autant pour moi alors

Dommage, il reviendra sûrement disponible bientôt.

Je l’ai pris sur amazon pour moins de 200€ (et il avait était livré depuis l’UK)

1 « J'aime »

@imhotep57 Voici le sketch ESPHome pour le Powermeter :wink: Une fois tout installé dans ton TD, pour le calibrage il te faudra ajuster les valeurs des calibrate_linear !

substitutions:
  device_name: "powermeter-cuisine"
  friendly_name: "Smart Powermeter Cuisine"
  Probe_1_name: "Four / Plaque 1"
  Probe_2_name: "Four / Plaque 2"
  Probe_3_name: "Four / Plaque 3"
  Probe_4_name: "Lave-Vaisselle"
  Probe_5_name: "Prises"
  Probe_6_name: "Frigo"

esphome:
  name: "${device_name}"

esp32:
  board: esp32-s2-saola-1
  framework:
    type: arduino

logger:

api:
  reboot_timeout: 120min

ota:
  platform: esphome

captive_portal:

web_server:

improv_serial:

wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_password
  ap:
    ssid: "${device_name}"

time:
  - platform: homeassistant
    id: esptime

globals:
  - id: total_energy
    type: float
    restore_value: yes
    initial_value: '0.0'

sensor: 
  - platform: wifi_signal
    name: "${friendly_name}"
    update_interval: 60s
  - platform: uptime
    name: "${friendly_name}"
    filters:
      - lambda: return x / 60.0 /60.0 /24;
    unit_of_measurement: d     
  - platform: adc
    pin: GPIO1
    id: Input_1
    attenuation: 12db
    update_interval: 1s
  - platform: adc
    pin: GPIO2
    id: Input_2
    attenuation: 12db
    update_interval: 1s
  - platform: adc
    pin: GPIO3
    id: Input_3
    attenuation: 12db
    update_interval: 1s
  - platform: adc
    pin: GPIO4
    id: Input_4
    attenuation: 12db
    update_interval: 1s
  - platform: adc
    pin: GPIO5
    id: Input_5
    attenuation: 12db
    update_interval: 1s
  - platform: adc
    pin: GPIO6
    id: Input_6
    attenuation: 12db
    update_interval: 1s
  - platform: ct_clamp
    sensor: Input_1
    id: Probe_1
    name: "${Probe_1_name}"
    sample_duration: 200ms
    update_interval: 5s
    filters:
      - calibrate_linear:
          - 0 -> 0
          - 0.06 -> 5.5
          - 0.15 -> 14.4
  - platform: ct_clamp
    sensor: Input_2
    name: "${Probe_2_name}"
    id: Probe_2
    sample_duration: 200ms
    update_interval: 5s
    filters:
      - calibrate_linear:
          - 0 -> 0
          - 0.06 -> 5.5
          - 0.15 -> 14.4
  - platform: ct_clamp
    sensor: Input_3
    name: "${Probe_3_name}"
    id: Probe_3
    sample_duration: 200ms
    update_interval: 5s
    filters:
      - calibrate_linear:
          - 0 -> 0
          - 0.06 -> 5.5
          - 0.15 -> 14.4
  - platform: ct_clamp
    sensor: Input_4
    name: "${Probe_4_name}"
    id: Probe_4
    sample_duration: 200ms
    update_interval: 5s
    filters:
      - calibrate_linear:
          - 0 -> 0
          - 0.06 -> 5.5
          - 0.15 -> 14.4
  - platform: ct_clamp
    sensor: Input_5
    name: "${Probe_5_name}"
    id: Probe_5
    sample_duration: 200ms
    update_interval: 5s
    filters:
      - calibrate_linear:
          - 0 -> 0
          - 0.06 -> 5.5
          - 0.15 -> 14.4
  - platform: ct_clamp
    sensor: Input_6
    name: "${Probe_6_name}"
    id: Probe_6
    sample_duration: 200ms
    update_interval: 5s
    filters:
      - calibrate_linear:
          - 0 -> 0
          - 0.06 -> 5.5
          - 0.15 -> 14.4
  - platform: total_daily_energy
    name: Cuisine Daily Power
    power_id: current_power
    id: daily_power
  - platform: template
    id: current_power
    name: Cuisine Measured Power
    lambda: return (id(Probe_1).state + id(Probe_2).state + id(Probe_3).state + id(Probe_4).state+ id(Probe_5).state+ id(Probe_6).state) * 230.0 / 1000; #Power = Current * Voltage 
    unit_of_measurement: 'kW'
    update_interval: 5s
  - platform: homeassistant
    id: cost
    entity_id: sensor.smart_powermeter_total_daily_power_cost

font:
  - file: "gfonts://Audiowide"
    id: font_header
    size: 15
  - file: "gfonts://Audiowide"
    id: font_gauge
    size: 15
  - file: "gfonts://Audiowide"
    id: font_text
    size: 15
  - file: 'gfonts://Material+Symbols+Outlined'
    id: font_icon
    size: 18
    glyphs:
      - "\U0000f0b0" # wifi-strength-0
      - "\U0000ebe4" # wifi-strength-1
      - "\U0000ebd6" # wifi-strength-2
      - "\U0000ebe1" # wifi-strength-3
      - "\U0000e1d8" # wifi-strength-4

spi:
  clk_pin: GPIO12
  mosi_pin: GPIO11  # Works on the e-paper

image:
  - file: https://smart-powermeter.readthedocs.io/en/v2r2/_images/Gauge.png
    id: gauge
  - file: https://smart-powermeter.readthedocs.io/en/v2r2/_images/Gauge_1.png
    id: gauge_1 
  - file: mdi:home-lightning-bolt
    id: power
    resize: 18x18
  - file: mdi:cash-multiple
    id: cash
    resize: 18x18
  - file: mdi:currency-eur
    id: euro
    resize: 18x18
  - file: mdi:lightning-bolt
    id: bolt
    resize: 22x22

display:
  - platform: waveshare_epaper
    cs_pin: GPIO10
    dc_pin: GPIO13
    busy_pin: GPIO14
    reset_pin: GPIO15
    model: 2.90inv2    
    rotation: 270
    update_interval: 1min
    full_update_every: 1
    pages:
      - id: page1
        lambda: |-
          #define H_LEFT_MARGIN 4
          #define H_RIGHT_MARGIN 280
          #define H_CENTER 128 
          #define V_WEATHER 0
          #define V_CLOCK 1
          #define V_WIFI 30
          #define V_VOLTAGE 60
          #define V_BATTERY  90

          // WiFi quality
          // it.image(0, 0, id(background));

          // Time
          int x_head = 260;
          int y_head = 2;
          it.strftime(x_head, y_head, id(font_header), TextAlign::TOP_RIGHT, 
          "%H:%M", id(esptime).now());     

          // WiFi quality
          //if(id('Smart Powermeter Cuisine').has_state ()) {
          //  if (id('Smart Powermeter Cuisine').state >= -50) {
          //      // Excellent # mdi-wifi-strength-4 
          //      it.printf(x_head, y_head, id(font_icon), TextAlign::TOP_LEFT, "\U0000e1d8");
          //  } else if (id('Smart Powermeter Cuisine').state  >= -60) {
          //      //Good # mdi-wifi-strength-3 
          //      it.printf(x_head, y_head, id(font_icon), TextAlign::TOP_LEFT, "\U0000ebe1");
          //  } else if (id('Smart Powermeter Cuisine').state  >= -67) {
          //      //Fair # mdi-wifi-strength-2 
          //      it.printf(x_head, y_head, id(font_icon), TextAlign::TOP_LEFT, "\U0000ebd6");
          //  } else if (id('Smart Powermeter Cuisine').state  >= -70) {
          //      //Weak # mdi-wifi-strength-1 
          //      it.printf(x_head, y_head, id(font_icon), TextAlign::TOP_LEFT, "\U0000ebe4");
          //  } else {
          //      //Unlikely working mdi-wifi-strength-0
          //      it.printf(x_head, y_head, id(font_icon), TextAlign::TOP_LEFT, "\U0000f0b0");
          //  }
          //}

          // Gauges
          // General parameters
          float pi = 3.141592653589793;
          float alpha = 4.71238898038469; // Defined as the gauge angle in radians (270deg)
          float beta = 2*pi - alpha;
          int radius = 25;              // Radius of the gauge in pixels
          int thick = 7;                // Size of the marker 
          
          // Probe 1
          int min_range = 0; 
          int max_range = 10;
          int xc = 40;
          int yc = 33;

          it.image(xc-radius, yc-radius, id(gauge));
          
          float measured = id(Probe_1).state;
          
          if (measured < min_range) {
            measured = min_range;
          } 
          if (measured > max_range) {
            measured = max_range;
          } 
          
          float val = (measured - min_range) / abs(max_range - min_range) * alpha;        
          int x0 = static_cast<int>(xc + radius * cos(pi / 2 + beta / 2 + val));
          int y0 = static_cast<int>(yc + radius * sin(pi / 2 + beta / 2 + val));
          int x1 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val + 0.1));
          int y1 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val + 0.1));
          int x2 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val - 0.1));
          int y2 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val - 0.1));
          it.line(x0, y0, x1, y1);
          it.line(x1, y1, x2, y2);
          it.line(x2, y2, x0, y0);
          
          it.printf(xc, yc, id(font_gauge), TextAlign::CENTER, 
          "1");  
          it.printf(xc, yc + radius*0.75, id(font_gauge), TextAlign::TOP_CENTER, 
          "%.1fA", measured);  
          
          // Probe 2
          min_range = 0; 
          max_range = 10;
          xc = 100;
          yc = 33;

          it.image(xc-radius, yc-radius, id(gauge));

          measured = id(Probe_2).state;
          
          if (measured < min_range) {
            measured = min_range;
          } 
          if (measured > max_range) {
            measured = max_range;
          } 
          
          val = (measured - min_range) / abs(max_range - min_range) * alpha;        
          x0 = static_cast<int>(xc + radius * cos(pi / 2 + beta / 2 + val));
          y0 = static_cast<int>(yc + radius * sin(pi / 2 + beta / 2 + val));
          x1 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val + 0.1));
          y1 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val + 0.1));
          x2 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val - 0.1));
          y2 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val - 0.1));
          it.line(x0, y0, x1, y1);
          it.line(x1, y1, x2, y2);
          it.line(x2, y2, x0, y0);
          
          it.printf(xc, yc, id(font_gauge), TextAlign::CENTER, 
          "2");  
          it.printf(xc, yc  + radius*0.75, id(font_gauge), TextAlign::TOP_CENTER, 
          "%.1fA", measured);  
          
          // Probe 3
          min_range = 0; 
          max_range = 10;
          xc = 160;
          yc = 33;

          it.image(xc-radius, yc-radius, id(gauge));

          measured = id(Probe_3).state;
          
          if (measured < min_range) {
            measured = min_range;
          } 
          if (measured > max_range) {
            measured = max_range;
          } 
          
          val = (measured - min_range) / abs(max_range - min_range) * alpha;        
          x0 = static_cast<int>(xc + radius * cos(pi / 2 + beta / 2 + val));
          y0 = static_cast<int>(yc + radius * sin(pi / 2 + beta / 2 + val));
          x1 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val + 0.1));
          y1 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val + 0.1));
          x2 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val - 0.1));
          y2 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val - 0.1));
          it.line(x0, y0, x1, y1);
          it.line(x1, y1, x2, y2);
          it.line(x2, y2, x0, y0);
          
          it.printf(xc, yc, id(font_gauge), TextAlign::CENTER, 
          "3");  
          it.printf(xc, yc  + radius*0.75, id(font_gauge), TextAlign::TOP_CENTER, 
          "%.1fA", measured);  

          // Probe 4
          min_range = 0; 
          max_range = 10;
          xc = 40;
          yc = 95;

          it.image(xc-radius, yc-radius, id(gauge));

          measured = id(Probe_4).state;

          if (measured < min_range) {
            measured = min_range;
          } 
          if (measured > max_range) {
            measured = max_range;
          } 
          
          val = (measured - min_range) / abs(max_range - min_range) * alpha;        
          x0 = static_cast<int>(xc + radius * cos(pi / 2 + beta / 2 + val));
          y0 = static_cast<int>(yc + radius * sin(pi / 2 + beta / 2 + val));
          x1 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val + 0.1));
          y1 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val + 0.1));
          x2 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val - 0.1));
          y2 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val - 0.1));
          it.line(x0, y0, x1, y1);
          it.line(x1, y1, x2, y2);
          it.line(x2, y2, x0, y0);
          
          it.printf(xc, yc, id(font_gauge), TextAlign::CENTER, 
          "4");  
          it.printf(xc, yc  + radius*0.75, id(font_gauge), TextAlign::TOP_CENTER, 
          "%.1fA", measured);  

          // Probe 5
          min_range = 0; 
          max_range = 10;
          xc = 100;
          yc = 95;

          it.image(xc-radius, yc-radius, id(gauge));

          measured = id(Probe_5).state;

          if (measured < min_range) {
            measured = min_range;
          } 
          if (measured > max_range) {
            measured = max_range;
          } 
          
          val = (measured - min_range) / abs(max_range - min_range) * alpha;        
          x0 = static_cast<int>(xc + radius * cos(pi / 2 + beta / 2 + val));
          y0 = static_cast<int>(yc + radius * sin(pi / 2 + beta / 2 + val));
          x1 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val + 0.1));
          y1 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val + 0.1));
          x2 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val - 0.1));
          y2 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val - 0.1));
          it.line(x0, y0, x1, y1);
          it.line(x1, y1, x2, y2);
          it.line(x2, y2, x0, y0);
          
          it.printf(xc, yc, id(font_gauge), TextAlign::CENTER, 
          "5");  
          it.printf(xc, yc  + radius*0.75, id(font_gauge), TextAlign::TOP_CENTER, 
          "%.1fA", measured);  

          // Probe 6
          min_range = 0; 
          max_range = 10;
          xc = 160;
          yc = 95;

          it.image(xc-radius, yc-radius, id(gauge));

          measured = id(Probe_6).state;

          if (measured < min_range) {
            measured = min_range;
          } 
          if (measured > max_range) {
            measured = max_range;
          } 
          
          val = (measured - min_range) / abs(max_range - min_range) * alpha;        
          x0 = static_cast<int>(xc + radius * cos(pi / 2 + beta / 2 + val));
          y0 = static_cast<int>(yc + radius * sin(pi / 2 + beta / 2 + val));
          x1 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val + 0.1));
          y1 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val + 0.1));
          x2 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val - 0.1));
          y2 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val - 0.1));
          it.line(x0, y0, x1, y1);
          it.line(x1, y1, x2, y2);
          it.line(x2, y2, x0, y0);
          
          it.printf(xc, yc, id(font_gauge), TextAlign::CENTER, 
          "6");  
          it.printf(xc, yc  + radius*0.75, id(font_gauge), TextAlign::TOP_CENTER, 
          "%.1fA", measured);  

          // Total parameters
          // Power gauge
          alpha = pi; // Defined as the gauge angle in radians (270deg)
          beta = 2*pi - alpha;
          radius = 40;              // Radius of the gauge in pixels
          thick = 7;    

          min_range = 0; 
          max_range = 5;
          xc = 245;
          yc = 65;

          it.image(xc-radius, yc-radius, id(gauge_1));
          
          measured = id(current_power).state;
          
          if (measured < min_range) {
            measured = min_range;
          } 
          if (measured > max_range) {
            measured = max_range;
          } 
          
          val = (measured - min_range) / abs(max_range - min_range) * alpha;        
          x0 = static_cast<int>(xc + radius * cos(pi / 2 + beta / 2 + val));
          y0 = static_cast<int>(yc + radius * sin(pi / 2 + beta / 2 + val));
          x1 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val + 0.1));
          y1 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val + 0.1));
          x2 = static_cast<int>(xc + (radius+thick) * cos(pi / 2 + beta / 2 + val - 0.1));
          y2 = static_cast<int>(yc + (radius+thick) * sin(pi / 2 + beta / 2 + val - 0.1));
          it.line(x0, y0, x1, y1);
          it.line(x1, y1, x2, y2);
          it.line(x2, y2, x0, y0);
          
          it.image(xc-11, yc-22, id(bolt));   

          it.printf(xc, yc + radius/2, id(font_gauge), TextAlign::BOTTOM_CENTER, 
          "%.1fkW", measured);  
          // it.printf(xc, yc + radius/2, id(font_gauge), TextAlign::TOP_CENTER, 
          // "kW");  

          // Derivated parameters:
          measured = id(daily_power).state;
          it.printf(290, 85, id(font_gauge), TextAlign::TOP_RIGHT, 
          "%.0fkWh", measured);  
          it.image(200, 85, id(power));    

          measured = id(cost).state;
          it.image(200, 105, id(cash));          
          
          it.printf(275, 105, id(font_gauge), TextAlign::TOP_RIGHT, 
          "%.2f", measured);  
          it.image(275, 105, id(euro));
1 « J'aime »

Bonjour,
Je suis dans le même cas plusieurs tableau et appareil en tri a mesurer dans chaque tableau
pour ma part j’en ai un pour monitorer ma chaudière électrique, qui fonctionne très bien et une remonté d’info complète Voltage, Amp , W etc
J’ai également un shelly 3em version simple pour le chauffe eau lui aussi en triphasé et le shellypro3em qui lui mesure la conso general et l’installation PV.