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
Merci
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
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)
Vincèn
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
Exact. Dans ma config je monitore un circuit triphasé et 3 circuits monophasés 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
Oui effectivement mais facile à souder ou trouver quelqu’un pour te le faire si tu es pas sûr
Me rappelle plus mais facile à flasher car tu as l’usb sur la carte donc tu branches à l’ordi et roule 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
Bonjour,
Il existe également le Shelly 3EM (Pro) dans le même genre
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:
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
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
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
[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
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
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)
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)
@imhotep57 Voici le sketch ESPHome pour le Powermeter 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));
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.