[Home Assistant, MSunPV et Batterie DIY] Le Matériel
- Ixio_Jo
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 22
- Remerciements reçus 14
Suite aux échanges sur le post dédié à Home Assistant , sujet qui m'a énormément inspiré et aidé, je vais présenter un petit peu mon installation ainsi que les développements que j'ai fait pour exploiter une petite batterie.
En Juillet/Aout 2023 j'ai donc installé 6 panneaux Trina 425Wc (2 en ombrière au dessus de ma baie vitrée au SSO azimut réglable de 30 à 60° et 4 fixés sur mon pignon à l'ESE à 60°) sur MO Hoymiles (800VA et 1600VA) puis en novembre 2023 un kit Beem 420Wc Hoymiles 400VA obtenu par la suite pour une misère grâce à une subvention de la métropole et un cash back. J'ai décrit en long en large et en travers sur forum-photovoltaique.fr/ , si vous voulez d'autres détails
J'ai fait le montage le plus simple pour moi et mes moyens, et pour la pose sur le toit en plus de devoir monter de 2 étages entiers, il y avait le problème de la charpente légère en fermettes très espacé (90cm) et peu épaisse. Peut être que j'en rajouterai un jour sur le toit au moins en renforçant avec des chevrons la où je dois visser les supports... peut être pas.
Avec le kit de panneau, j'avais pris une passerelle DTUpro qui m'a énormément déçu. Cloud uniquement, relevé toutes les 15min, plante tout le temps, pas trop intégrable sous HA... 200€ gaché, je me suis très vite procuré un OpenDTU et la c'était exactement ce que je voulais, données quasi en temps réel, intégrable sous HA très facilement !
Avant même l'achat, je savais que sans routeur j'aurai beaucoup de surplus. Ayant commencé à domotiser la maison sous Home Assistant et ayant un relais connecté pour le chauffe eau, j'avais tenté de le passer à 700W (Utilisation d'une des 3 résistances seulement) et de le déclencher dès que j'atteignais 400W de surplus... En vain, le soleil de Normandie étant très variable, ça tombait tout le temps à coté et le relais passait son temps à basculer.
Vu que Home Assistant me plaisait de plus en plus, il était indispensable pour moi d'avoir un routeur communiquant. En parcourant les forums pour voir les différents produits existant je suis tomber sur le MsunPV qui remplissait tous les critères :
- vendu tout fait (au moment je me sentais pas de le monter moi même)
- SSR qui va bien vendu avec
- Communiquant
- Autonome (si ma domotique qui à l'époque n'était pas stable lache, ça marche quand même)
Mon seul regret c'est qu'il n'était pas directement intégré dans HA ni de MQTT, et je me suis beaucoup tapé la tête avec le Tuto de Tochy, même si au final, je m'en suis sorti vite.
J'ai aussi dû modifié mon chauffe eau pour découpler l'électronique, j'ai rajouté dessous un petit coffret électrique, avec 2 disjoncteurs (pour la sécurité et que si quelqu'un autre que moi intervient dessus, qu'il se pose la question...) et un relais NO. Je ne voulais pas dégradé la carte électronique du chauffe eau acquis l'année précédente juste couper des fils ça m'allait... surtout que j'avais déjà coupé les fils pour réduire à 700W
J'ai par la suite rajouté une sonde de température (DS18b20) puis une mesure de débit + sonde de température en sortie, le tout monté sur un ESP8266 sous ESPHome.
Le chauffe eau n'est pas dans la même pièce que le MsunPV donc pas pu mettre la sonde dessus. Je gère donc mes routines nocturne de chauffe par HA, après une mise à jour du vieux portable que j'utilisais (SSD+ 8Go mémoire + installation de Promox au lieu de Ubuntu/Virtual Box), HA est devenu extrêmement rapide et fiable
Donc voila j'étais content, je consommais plus de 80% de toute la modeste production et c'est ridicule mais ça m'obsédait de trouver une solution pas trop cher pour récupérer ces 20% manquant...
Forcément, je ne voulais pas lacher les MO Hoymiles, avec l'openDTU, j'avais tout ce que je voulais, donc non pas de MPPT, je voulais de l'AC coupling. En plus j'étais difficile, j'avais 2 batteries de trottinettes Xiaomi parfaitement fonctionnelles (les batteries !) en 36V sous la main. Je voulais me faire la main dessus même si la capacité de chacune était très modeste (380Wh)...et c'est la que mes errements ont commencés. Je devrais peut-être en parler pour expliquer ce qu'on NE DOIT PAS faire malgré que j'ai toujours maintenu un niveau de sécurité sur ce que j'ai fait (disjoncteur, fusible et BMS), j'ai eu des petits incidents, qui heureusement ne m'ont couté que un peu de matériel. Il faut bien être conscient qu'une batterie 36 ou 48V, ça ne va pas vous électrocuter, par contre ça génère des courants forts qui nécessitent beaucoup de prudence, de réflexion dans le choix des composants et des cables et surtout une bonne compréhension sur le fonctionnement des BMS. J'en parlerai peut être dans la discussion plus tard.
Je rajoute que dans tout ce qui va suivre, si vous le reproduisez, c'est à vos risques et périls, je ne tiens pas à vous encourager à le faire. Surtout si vous ne savez pas ce que vous faites et que vous n'êtes pas conscient des risques pris, ne faites rien.
Donc après plusieurs mois d'essais voila ma solution actuelle :
- Une batterie LFP 16s 48V 50Ah, controlé par BMS JK 60A 0.4A de balance active. Un fusible de 30A à la sortie, il faudrait que je rajoute un sectionneur
- Un chargeur 1000W 48V ( monté à 56V) controlé par un MCP41010 à la place du potentiomètre de courant
- Un onduleur réseau Soyosource GTN 1200 lim 48V (hélas non homologué en France bien qu'il soit protégé comme la réglementation l'exige)
- Un controleur de batterie basé sur un INA226 (gros gadget qui mime le fonctionnement d'un BMV Victron et qui marche pas mal du temps)
- Un disjoncteur DC 25A entre la batterie d'un coté et le chargeur et onduleur de l'autre (qui me sert de sectionneur pour le moment)
La plupart des éléments commandables sont géré par ESPHome. Je me suis beaucoup aidé de code trouvé sur GitHub, en particulier la page de Syssi qui a quasiment intégré dans ESPHome tout ce qui existe dans le matériel pour batterie.
Je vais détailler un peu les éléments dans les postes suivants (limite d'images)
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Ixio_Jo
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 22
- Remerciements reçus 14
12 cellules achetées en Juin 2024 sur AliExpress (oui j'étais encore de l'optique du 36V avec mes batteries de trottinette), livrées en Septembre, qualité pas top (un peu gonfflé, courbe de charge/décharge pas équivalentes entre les cellules), je ne recommande pas pour à peine plus cher sur nkon la qualité est garantie.
J'ai complété par 4 cellules même si les premières était pas top, pas le choix que de prendre les mêmes pour faire du 48V. Pourquoi 48V ? à cause de l'onduleur, j'en reparle plus tard. Commandées en novembre 2024 livrées en Janvier.
Prix total des 16: 340€. On verra combien de temps ça tient, je surveille. Si ca lâche je prendrai de la meilleure qualité, mais je suis pas inquiet pour la sécurité, les LFP ne posant pas trop de problèmes.
JKBMS 60A : super BMS avec équilibreur actifs 0.4A intégrés, totalement contrôlable en Bluetooth ou via un port serie ~30€. Totalement intégrable sur HA avec ESPHome via github.com/syssi/esphome-jk-bmscette intégration
La Batterie est dans une caisse en contreplaqué de récupération, faite par mes soins et compressée (un peu, j'ai pas de clef dynamométrique chez moi et le bois se déforme) par 5 tiges M8 isolé par du tuyau. Les cellules sont isolées les unes des autres par des PCBs. Je peux rajouter une photos mais ça n'a que peu d'interêt vous en trouverez des dizaines de mieux faites que la mienne sur Internet.
J'ai mis un fusible 30A en sortie, je compte pas injecter ou tirer plus de 20A dessus.
Chargeur
Ma principale préoccupation que j'ai eu quand j'ai commencé le projet, était de comment on peut contrôler l'intensité de charge. Après avoir regardé quelques vidéos, ma première idée a été d'utiliser un convertisseur DC-DC boost branché sur le 12V d'une vieille alimentation PC.
C'était pas cher, 13€ le boost 1200W, et en plus il possède 3 potentiomètres :
- 1 pour s'arrêter quand la tension d'entrée est trop faible
- 1 pour contrôler la tension de sortie
- 1 pour contrôler le courant de sortie
La charge d'une batterie se limitant par le courant, il faut donc contrôler ce potentiomètre de 0-10kOhm. En cherchant un peu, j'ai repéré que le MCP41010 est un potentiomètre contrôlable par un port SPI. A l'époque un custom permettait de le gérer directement sous ESPHome. Aujourd'hui les customs ne sont plus géré sous ESPHome, donc je propose ce GitHub où avec ChatGPT j'ai développé un external component.
Il suffit de remplacer le potentiomètre par les PIN 567 du MCP. Sur l'ESP8266, j'avais aussi rajouté un contacteur pour allumer ou éteindre l'alimentation de PC via un des câbles (celui qui permet d'allumer le PC au final)
Et voila on a une alimentation "Smart" ! Mais vraiment une mauvaise alimentation, j'avais 70% de rendement à la charge et seulement 250W de puissance de charge max.
Pour faire mieux, j'ai regardé si à tout hasard, on ne pouvait pas trouver des alimentations CC avec le même genre de potentiomètre que le convertisseur Boost et bingo, j'ai trouvé ça :
Bien plus puissant, meilleure rendement (~90%), juste le potentiomètre CC est de 5kOhm. J'ai juste rajouté une 10kOhm en parallèle du MCP41010, après plusieurs tests, je n'ai branché que 2 des pins du MCP en parallèle de la 10kOhm, sur l'autre partie j'ai mis quelques kOhm en fixe, ça me permet de descendre plus bas en courant.
J'ai aussi mis un relais sur la partie AC de l'alimentation qui est commandé par un petit relais DC commandé par une sortie de l'ESP. Ca permet de "débrancher" l'alimentation quand je ne m'en sert pas
Maintenant on a un smart chargeur sous ESPHome contrôlable par Home Assistant en fonction du surplus ! Et bien que ça ressemble à une usine à gaz, il réagit très vite, quelques secondes tout au plus, il est aussi rapide (ou lent selon le point de vue) et la récupération des infos du MSunPV
Voila, j'ai écrit 2 gros bouts, j'attaque demain si j'ai le temps le reste du matériel et ensuite j'explique comment je gère ça sous HA
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- patrick
-
- Absent
- Administrateur
-
- Messages : 3409
- Remerciements reçus 531
J'ai fait un peu la même installation que toi: ard-tek.com/index.php/forum/support-tech...tterie?start=0#22380
Je ne me suis pas embêté comme toi à gérer les MO (5 Hoymiles 800W) et le chargeur, tout est commandé en tout ou rien par le MSunPV.
Conso pour février 10kWh et ça devrait encore descendre => 1kWh pour la première semaine de mars !

Seul truc pénible pour l'instant c'est l'alimentation/chargeur qui fait un bruit d'enfer.

Pour info, je limite la tension des batteries à 55V en sortie du chargeur soit 3.44V par cellule avec le BMS qui commence l'équilibrage à 3.4V => de 1 à 3mV de différence entre les cellules.
Malgré ces tensions plutôt faibles on voit bien que la courbe de tension augmente très rapidement au dessus de 54.5V, signe que les cellules sont bien chargées à bloc.
Connexion ou Créer un compte pour participer à la conversation.
- Defaliz
- Hors Ligne
- Membre platinium
-
- Messages : 413
- Remerciements reçus 22
Je vais étudier ça de très près...
Connexion ou Créer un compte pour participer à la conversation.
- patmtp35
- Hors Ligne
- Membre premium
-
- Messages : 111
- Remerciements reçus 8
voila ce qu'il manquait a mon install pouvoir piloter alim via esp, afin de ne pas faire de bêtises peux tu nous faire un petit shema du branchement avec l'alim ali ?
merci d'avance
Patrick
Connexion ou Créer un compte pour participer à la conversation.
- Ixio_Jo
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 22
- Remerciements reçus 14
Chargeur (suite)
Donc voici le schéma "paint" du branchement du MCP41010 sur l'ESP8266 et sur l'alimentation. Il faut au préalable démonter la carte et déssouder le potentiomètre qui limite l'intensité. Sur mon alimentation c'était celui près du bord, mais il faudra vérifier au cas par cas.
Il faut aussi vérifier le calibre du potentiomètre. Dans mon cas, c'était un 5KOhm max donc le MCP41010 (0=>10kOhm, 256 niveaux) était le plus approprié. En mettant en parallèle une résistance de 10kOhm comme dans le schéma, on peut exploiter toute la dynamique du MCP, mais la puissance ne sera pas linéaire avec la valeur. Pour ma part, je viens de revoir ce que j'ai fait, je ne l'ai pas mise, mais j'utilise que la moitié de la dynamique (120 niveaux), mais c'est c'est pas vraiment linéaire non plus :
J'ai pas revérifié sur mon montage si les PIN 5/6 ou 6/7 du MCP à relier à l'alimentation, j'ai relu la DATASHEET, ça doit etre ce que j'ai mis sur le schéma mais je peux me tromper. Dans ce cas la puissance sera MAX pour le MCP à 0. Il faudra soit changer les PIN (se brancher sur 5-6) soit modifier le code de l'ESP.
Normalement la PIN 5 du MCP devrait être reliée à l'alimentation mais j'ai constaté que ainsi (avec 1kOhm fixe)ça me permettait de descendre plus bas en puissance. Plus pratique pour réguler, mais les contre sont : perte de rendement à basse puissance, chute de la tension de sortie (j'ai du remonter avec le potentiomètre interne), et je suspecte une perte de linéarité. C'est à vérifier et à adapter en fonction de ce que vous voyez. Pour ma part, en plus bas j'ai 50W de consommation AC pour 33W DC avec le MCP à 0 (66% de rendement). Je me limite au niveau 120 sur le MCP, ce qui me fait 935W AC pour 820W DC (87% de rendement).
Voila ma dernière calibration pour s'en rendre compte, faite sur la puissance AC consommé (le but c'est quand même de charger avec le surplus)
Attention, il existe au moins 2 formats pour la puce, la taille standard et la taille micro, qui est impossible à monter sans un PCB. J'ai du me résoudre à acheter en plus un PCB d'adaptation
Le code ESPHome comme indiqué dans le message précédent, je le propose sur ce GIT . Et j'ai mis quelques boutons
Le bouton charge, c'est pour alimenter ou pas le charge avec un relais électromécanique commandé par un petit relais statique 3.3V piloté sur une sortie de l'esp :
substitutions:
switch1_pin: GPIO04
switch:
- platform: gpio
pin:
number: ${switch1_pin}
inverted: false
name: Charge
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- patmtp35
- Hors Ligne
- Membre premium
-
- Messages : 111
- Remerciements reçus 8

Je commande le matos

Connexion ou Créer un compte pour participer à la conversation.
- Ixio_Jo
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 22
- Remerciements reçus 14
Pas beaucoup communiqué depuis, mais juste pour préciser que j'ai cramé l'alimentation 1000W qui servait de chargeur. Visiblement c'est les MOSFETs de hachage du 230V qui ont laché ce qui a provoqué la destruction des NTCs juste avant, et peut être d'autres éléments plus loin dans le circuit, j'ai essayé de réparer en changeant les NTCs et les MOSFETs, mais ça a plus empiré les choses, donc j'arrête avec cette alimentation.
J'arrive pas à mettre la suite du message, le forum fait des trucs bizarres donc je découpe en plusieurs bouts
c'est donc les apostrophes, j'ai tout enlevé, désolé si c est pas agréable à lire
Pour l origine du défaut, peut-être les réglages que j ai fait (mais pour moi c est les éléments plus loin dans le circuit qui aurait dû lâcher, ce qui n est pas le cas vu le sursaut de vie que j ai eu sur l alimentation après changement des MOSFETs), le trop grand nombre d extinction/redémarrage ( et là c est effectivement les NTCs puis les MOSFETs qui prennent, mais j avais déjà limité la possibilité de démarrage après un arrêt, et là, l alimentation a lâché pendant un fonctionnement à courant constant ), les variations fréquentes de courant de sortie?
J avais aussi modifié le boitier pour remplacer le ventilateur très bruyant d origine, j ai peut-être perturbé le refroidissement de certains composants.
En tout cas, je suis bien triste et frustré, je me doutais bien que à 40€ les 1000W, ça ne durerait pas la vie, mais là ça faisait que 9 mois...
Bien entendu que je compte remplacer cette alimentation, et si possible ne pas reproduire le problème... J avais donc le choix entre reprendre une alimentation de même techno mais plus puissante tout en travaillant dans la même gamme de courant (afin de moins stresser les composants, et d avoir un meilleur refroidissement), ou trouver une autre techno dans la même gamme de prix. Par-dessus, être plus prudent sur les variations de courant et les extinctions/redémarrage.
J avais déjà repéré sur DIYsolarforum des personnes réalisant des chargeurs pour batterie ("chargeverter") à partir d alimentation pour baie télécom. C est des alims montées en grappe qui se changent à chaud, et qui délivre 3kW à 48V, on trouve la Huawei R4850G2 et l Emerson R48-3000e3. Visiblement, on peut en trouver beaucoup d occasion sur Aliexpress (j imagine que vu l application, elles sont automatiquement changées à intervalle régulier même si elles sont parfaitement fonctionnelles) pour moins de 100€ avec le transport. C est vraiment donné pour du matériel professionnel, même d occasion. Le rendement annoncé est de 96% à 50% de charge et reste au-dessus des 94% entre 20% et 100% de charge (voir là
On peut trouver des modèles reprogrammés pour sortir une tension adaptée à la charge des batteries LiFePO4 et vendu avec une carte pour connecter le secteur et les bornes CC. Après une petite recherche, j ai trouvé un petit développement en ESPHome pour contrôler le CANBUS de l alimentation Emerson et avoir accès au courant max et des infos des capteurs interne. J ai donc jeté mon dévolu dessus, et j ai commandé ce modèle là
Je viens de commander avec un adaptateur CANBUS en SPI (MCP2515), je vous dirais ce que ça donne par la suite.
Connexion ou Créer un compte pour participer à la conversation.
- Ixio_Jo
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 22
- Remerciements reçus 14
Elle était fourni avec une carte se connectant à son port arrière permettant d'y brancher l'alimentation AC (L N T), la sortie DC (+ -) ainsi que le port CAN (CanH, CanL).
Celle-ci est contrôlé par un petit ESP8266 sous ESPHome via un MCP2515 pour la communication en CANbus, avec le montage suivant
(faut que je vérifie le sens du MISO/MOSI du port SPI et le sens du CanH et CanL, j'ai un doute). J'ai référencé le le montage sur la borne - de l'alimentation.
J'utilise un code ESPHome github.com/leodesigner/esphome-emerson-vertiv-r48 avec quelques modif sur le YAML et j'ai fait quelques essais sur le code du pilote, d'où mon propre dossier GitHub.
esphome:
name: test-controle-emerson
friendly_name: Test Controle Emerson
on_boot:
priority: -100
then:
- number.set:
id: set_output_voltage
value: 56.6
- number.set:
id: set_output_max_current
value: 10
- number.set:
id: set_input_current
value: 6
- switch.turn_on:
id: ac_sw
- switch.turn_on:
id: dc_sw
external_components:
- source:
type: git
url: http://github.com/IxioJo/esphome-emerson-vertiv-r48
ref: main
refresh: 0s
esp8266:
board: esp01_1m
# Enable logging
logger:
level: DEBUG
# Enable Home Assistant API
api:
encryption:
key: xxx
ota:
- platform: esphome
password: xxxx
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Test-Controle-Emerson"
password: xxx
captive_portal:
spi:
id: McpSpi
clk_pin: GPIO14
mosi_pin: GPIO13
miso_pin: GPIO12
canbus:
- platform: mcp2515
id: can
spi_id: McpSpi
use_extended_id: true
cs_pin: GPIO15
can_id: 0x0607FF83
bit_rate: 125kbps
mode: NORMAL
data_rate: 10Mhz
emerson_r48:
canbus_id: can
update_interval: 1s
sensor:
- platform: emerson_r48
output_voltage:
name: Output voltage
id: DC_Voltage
output_current:
name: Output current
id: DC_Current
output_temp:
name: Temperature
input_voltage:
name: AC Voltage
max_output_current:
name: DC max current
unit_of_measurement: '%'
- platform: template
name: outPower
id: outpower
unit_of_measurement: W
device_class: power
update_interval: 6s
accuracy_decimals: 2
lambda: |-
if(id(DC_Current).state>0) { return ( id(DC_Current).state * id(DC_Voltage).state ); }
else {return 0;}
number:
- platform: emerson_r48
output_voltage:
name: Set output voltage
id: set_output_voltage
max_output_current:
name: Max output current
unit_of_measurement: '%'
id: set_output_max_current
max_input_current:
name: Max input current
id: set_input_current
button:
- platform: emerson_r48
set_offline_values:
name: Set offline values
- platform: restart
name: "Restart ESP"
switch:
- platform: emerson_r48
ac_sw:
name: "AC switch Turn OFF"
restore_mode: ALWAYS_ON
id: ac_sw
dc_sw:
name: "DC switch Turn OFF"
restore_mode: ALWAYS_ON
id: dc_sw
fan_sw:
name: "FAN switch MAX"
led_sw:
name: "LED switch"
Au niveau du montage, j'ai fait 3 supports à l'impression 3D pour le fixé au tableau avec l'onduleur et le tableau DC pour séparer les différents éléments sur des disjoncteurs indépendants (onduleur 25A, chargeur 40A, batterie 40A), c'est un peu overkill mais bon. Il y a en plus un fusible de 30A dans la batterie DIY en plus du disjoncteur et du BMS JK. Si jamais un court circuit n'est pas coupé malgré tout ça, je ne comprends pas.
A gauche, il y a une carte avec l'Esp32 S3 qui contrôle tout le monde... sauf le chargeur qui est pour le moment sur le petit ESP8266 en attendant que je mette à jour la carte. La carte est alimenté directement par la batterie via un convertisseur DC-DC 5V isolé (pour ne pas créer un chemin supplémentaire si un disjoncteur descend), de plus faut que je rajoute un fusible dessus.
Après les tests j'ai pu constaté un très bon fonctionnement de l'alimentation, elle est très réactive, très précise et son rendement très élevé (95% à 15A 55V). On peut contrôler un relais coté AC un autre coté DC mais aussi la tension de sortie à 0.1V près, le courant de sortie de 10% à 121% de 50A par pas de 0.1% soit 0.05A (dans les faits je limite à 30%). Le 10% de courant mini vient des spécifications, le fonctionnement n'est pas garanti en baissant plus le courant. J'ai modifié le code pour pouvoir descendre plus bas, je me limite à 5% mais jusqu'à 1% ça semble possible au prix d'un rendement beaucoup moins bon.
Un point d'attention particulier est que l'alimentation reprend ses réglages de base si aucune info n'a été envoyé au CanBus pendant 30sec, donc attention de modifier les réglages de base avec le bouton Set offline values en particulier la tension DC et le courant AC max. Autre inconvénient, elle fait un peu de bruit mais moins que mon alimentation précédente. Les capteurs sont limités à 5 (Vac in, Vdc, I Dc, % I Dc max et la température). J'aurai aimé, I ac in, Pin, Pout, rendement.
J'ai tenté de voir si ces infos n'était pas récupérable en modifiant le code .CPP pour interroger d'autres variables, mais en l'absence de documentation complète, c'est très hasardeux et j'ai failli briquer l'alimentation en limitant en dur le courant de sortie à 1% malgré que j'utilisais que les supposé instructions d'interrogation de capteur, donc j'ai arrêté les essais, finalement, ça fonctionne bien.
EDIT : Après vérification chez moi, la connexion du SPI me parait bonne, par contre il fallait croisé le CAN, j'ai changer l'image en conséquent
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Ixio_Jo
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 22
- Remerciements reçus 14
Donc j'avertie tout de suite, c'est une usine à gaz, un peu honte de mettre le code ici. Le principe c'était d'utiliser uniquement la mesure du MsunPV sous Home Assistant et c'est uniquement la domotique qui régule autant la charge de la batterie que la décharge dans l'onduleur. Du fait des retards entre la mesure du routeur, sa mise en ligne sur "status.xlm", la récupération par HA, le traitement de l'info, la commande sur l'ESP et le temps de réaction du chargeur ou de l'onduleur, pour être stable, il ne faut pas être trop rapide dans les changements.
L'ensemble des commandes est effectué par des automatismes de HA en fonction de l'état dans lequel est la batterie :
J'ai donc décidé de créer plusieurs états pour le système, afin que la domotique sache les actions à effectuer :
Les états sont donc :
- Off : dans cet état l'onduleur et le charges sont en veille, le chauffe-eau est en auto, on ne régule rien
- Charge : Onduleur en veille, Chargeur activé, on régule le courant d'entrée en fonction de la puissance injectée dans le chauffe eau ou de la consommation réseau, le chauffe eau est en auto
- Discharge : Onduleur activé, Chargeur en veille, on régule la puissance de sortie en fonction de la consommation, le chauffe eau est OFF, (le MsunPV est réglé pour injecté que jusqu'à 100W dans le réseau)
- Nightcharge : analogue à Off, utiliser pour forcer une charge au passage en heure creuse
- DeepSleep: Analogue à Off, mais ne va pas essayer de passer en Charge ou Discharge si les conditions le permettent
- BatterySaving: Analogue à charge, bascule dans ce mode si le niveau de charge de batterie devient critique (niveau de charge <8% ou tension mini d'une cellule <3V) jusqu'à un retour à des conditions plus sécurisées
Pour les automatismes de changement d'état voici ce que j'ai proposé (le code est dans des balises "spoiler" pour que ça soit plus digeste) :
alias: Déclenchement Charge Batterie
description: ""
triggers:
- entity_id:
- sensor.water_heater_power
for:
hours: 0
minutes: 0
seconds: 15
above: 500
trigger: numeric_state
- entity_id:
- sensor.msunpv_powreso
below: -150
for:
hours: 0
minutes: 0
seconds: 15
trigger: numeric_state
- trigger: numeric_state
entity_id:
- sensor.compteur_eau_chaude_temperature_ballon
above: 45
- entity_id:
- sensor.water_heater_power
for:
hours: 0
minutes: 0
seconds: 5
above: 1500
trigger: numeric_state
conditions:
- condition: or
conditions:
- condition: state
entity_id: input_select.battery_state
state: "Off"
- condition: state
entity_id: input_select.battery_state
state: Discharge
- condition: state
entity_id: input_select.battery_state
state: DeepSleep
- condition: state
entity_id: input_select.battery_state
state: BatterySaving
enabled: true
- condition: state
entity_id: input_select.battery_force_mode
state: "Off"
enabled: true
- condition: numeric_state
entity_id: sensor.esp_batterie_jk_bms_55ah_calcul_batterie_restante
below: 99
- condition: or
conditions:
- condition: state
entity_id: input_select.msunpv_bal_selec
state: Auto
- condition: state
entity_id: input_select.msunpv_bal_selec
state: "Off"
- condition: state
entity_id: input_boolean.batterie_winter_mode
state: "off"
- condition: or
conditions:
- condition: numeric_state
entity_id: sensor.compteur_eau_chaude_temperature_ballon
above: 45
- condition: numeric_state
entity_id: sensor.water_heater_power
above: 1500
- condition: numeric_state
entity_id: sensor.msunpv_powreso
below: -300
- condition: numeric_state
entity_id: sensor.msunpv_powpv
above: 300
actions:
- metadata: {}
data:
option: Charge
target:
entity_id: input_select.battery_state
action: input_select.select_option
- action: input_number.set_value
metadata: {}
data:
value: 5
target:
entity_id: input_number.emerson_control_current_ratio
- action: number.set_value
metadata: {}
data:
value: "5"
target:
entity_id: number.test_controle_emerson_max_input_current
# sur cet alimentation il faut eteindre le AC Switch et le DC Switch pour allumer l'alimentation
- type: turn_off
device_id: f32275bfbaf5d8419742bbf7d5081786
entity_id: 730633a00ffa65b235428ae9294ee9af
domain: switch
- type: turn_off
device_id: f32275bfbaf5d8419742bbf7d5081786
entity_id: 0fa08a132f2105a020be8ed53f2128ee
domain: switch
## Ici en fonction de la charge restante je diminue la tension de charge pour permettre à la batterie de s'équilibrer en chargeant plus lentement, j'ai un automatisme qui gérer cela en temps réel ensuite
- if:
- condition: numeric_state
entity_id: sensor.esp_batterie_jk_bms_55ah_calcul_batterie_restante
below: 95
then:
- device_id: f32275bfbaf5d8419742bbf7d5081786
domain: number
entity_id: 827c6fd2b9a3a3e51f1c3b6621564a95
type: set_value
value: 56.0
else:
- device_id: f32275bfbaf5d8419742bbf7d5081786
domain: number
entity_id: 827c6fd2b9a3a3e51f1c3b6621564a95
type: set_value
value: 55
- type: turn_on
device_id: c52ab49636a685a4c3db41025e52e243
entity_id: e264b02d60ab48a65f39b5c862720fe5
domain: switch
- data: {}
enabled: true
action: script.msunpv_script_autobal
# j'indique si je charge en solaire ou la nuit
- if:
- condition: time
after: "06:00:00"
before: "22:00:00"
then:
- target:
entity_id: select.compteur_charge_batterie
data:
option: Solaire
action: select.select_option
else:
- target:
entity_id: select.compteur_charge_batterie
data:
option: Nuit
action: select.select_option
# j'active l'équilibreur de la batterie uniquement quand je charge
- type: turn_on
device_id: c52ab49636a685a4c3db41025e52e243
entity_id: 5d736b0db5b58d90660b86306f99c19d
domain: switch
mode: single
alias: Déclenchement décharge batterie
description: ""
triggers:
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 0
seconds: 30
above: 25
trigger: numeric_state
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 0
seconds: 20
above: 100
trigger: numeric_state
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 0
seconds: 10
above: 400
enabled: true
trigger: numeric_state
- entity_id:
- input_select.battery_state
to: Discharge
from: Charge
enabled: true
trigger: state
for:
hours: 0
minutes: 5
seconds: 0
- at: "06:00:10"
trigger: time
enabled: true
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 1
seconds: 0
above: 0
trigger: numeric_state
conditions:
- condition: state
entity_id: input_select.battery_force_mode
state: "Off"
- condition: time
after: "06:00:00"
before: "22:00:00"
- condition: numeric_state
entity_id: sensor.esp_batterie_jk_bms_55ah_calcul_batterie_restante
above: 20
- condition: or
conditions:
- condition: state
entity_id: input_select.battery_state
state: "Off"
- condition: state
entity_id: input_select.battery_state
state: Charge
for:
hours: 0
minutes: 0
seconds: 10
- condition: state
entity_id: input_select.battery_state
state: DeepSleep
- condition: or
conditions:
- condition: state
entity_id: input_boolean.batterie_winter_mode
state: "off"
- condition: state
entity_id: sensor.rte_tempo_couleur_actuelle
state: Rouge
enabled: true
- condition: or
conditions:
- condition: state
entity_id: input_select.msunpv_bal_selec
state: Auto
- condition: state
entity_id: input_select.msunpv_bal_selec
state: "Off"
- condition: numeric_state
entity_id: sensor.msunpv_powreso
above: 25
actions:
# ici on eteint le chargeur et on remet son courant de sortie à 10%
- type: turn_on
device_id: f32275bfbaf5d8419742bbf7d5081786
entity_id: 0fa08a132f2105a020be8ed53f2128ee
domain: switch
- device_id: f32275bfbaf5d8419742bbf7d5081786
domain: number
entity_id: a68f0233766db26b7bdb32108657caf3
type: set_value
value: 10
- metadata: {}
data:
option: Discharge
target:
entity_id: input_select.battery_state
action: input_select.select_option
# ici on active l'onduleur et on met sa puissance de sortie à 0
- device_id: c52ab49636a685a4c3db41025e52e243
domain: number
entity_id: f9ae1678666a13817a75973e3d6dee61
type: set_value
value: 0
- type: turn_off
device_id: c52ab49636a685a4c3db41025e52e243
entity_id: e264b02d60ab48a65f39b5c862720fe5
domain: switch
- data: {}
enabled: true
action: script.msunpv_script_baloff
mode: single
alias: Arrêt Charge Batterie
description: ""
triggers:
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 0
seconds: 20
above: 50
trigger: numeric_state
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 0
seconds: 15
above: 200
trigger: numeric_state
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 0
seconds: 5
above: 500
trigger: numeric_state
- type: power
device_id: 4161c27bf0add3b5c708fe5bc1406bb2
entity_id: bdffdc24a681919bfa7405b1f2052c32
domain: sensor
trigger: device
below: 10
for:
hours: 0
minutes: 15
seconds: 0
conditions:
- condition: state
entity_id: input_select.battery_force_mode
state: "Off"
- condition: state
entity_id: input_select.battery_state
state: Charge
actions:
- data: {}
enabled: true
action: script.msunpv_script_autobal
- metadata: {}
data:
option: "Off"
target:
entity_id: input_select.battery_state
action: input_select.select_option
- type: turn_off
device_id: c52ab49636a685a4c3db41025e52e243
entity_id: 5d736b0db5b58d90660b86306f99c19d
domain: switch
- type: turn_on
device_id: f32275bfbaf5d8419742bbf7d5081786
entity_id: 0fa08a132f2105a020be8ed53f2128ee
domain: switch
mode: single
alias: Arrêt décharge batterie
description: ""
triggers:
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 0
seconds: 10
below: -200
trigger: numeric_state
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 0
seconds: 20
below: -20
enabled: true
trigger: numeric_state
- entity_id:
- sensor.msunpv_powreso
for:
hours: 0
minutes: 0
seconds: 5
below: -90
enabled: true
trigger: numeric_state
- entity_id:
- sensor.water_heater_power
for:
hours: 0
minutes: 0
seconds: 20
above: 200
trigger: numeric_state
- entity_id:
- sensor.water_heater_power
for:
hours: 0
minutes: 1
seconds: 0
above: 50
trigger: numeric_state
- trigger: state
entity_id:
- binary_sensor.esp_batterie_jk_bms_55ah_discharging
from: null
to: "off"
- trigger: numeric_state
entity_id:
- number.esp_batterie_onduleur_soyosource_manual_power_demand
for:
hours: 0
minutes: 0
seconds: 5
above: 1
conditions:
- condition: state
entity_id: input_select.battery_force_mode
state: "Off"
- condition: state
entity_id: input_select.battery_state
state: Discharge
for:
hours: 0
minutes: 0
seconds: 5
- condition: numeric_state
entity_id: number.esp_batterie_onduleur_soyosource_manual_power_demand
below: 1
actions:
- type: turn_on
device_id: c52ab49636a685a4c3db41025e52e243
entity_id: e264b02d60ab48a65f39b5c862720fe5
domain: switch
- metadata: {}
data:
option: "Off"
target:
entity_id: input_select.battery_state
action: input_select.select_option
- device_id: c52ab49636a685a4c3db41025e52e243
domain: number
entity_id: f9ae1678666a13817a75973e3d6dee61
type: set_value
value: 0
- if:
- condition: state
entity_id: input_select.msunpv_bal_selec
state: "Off"
then:
- data: {}
enabled: true
action: script.msunpv_script_autobal
mode: single
alias: Forçage Arrêt Décharge Batterie
description: ""
mode: single
triggers:
- entity_id:
- input_select.battery_state
from: Discharge
to: "Off"
trigger: state
conditions:
- condition: state
entity_id: input_select.battery_force_mode
state: "On"
actions:
- metadata: {}
data:
skip_condition: true
target:
entity_id: automation.arret_batterie
action: automation.trigger
alias: Forçage Arrêt Décharge Batterie
description: ""
mode: single
triggers:
- entity_id:
- input_select.battery_state
from: Discharge
to: "Off"
trigger: state
conditions:
- condition: state
entity_id: input_select.battery_force_mode
state: "On"
actions:
- metadata: {}
data:
skip_condition: true
target:
entity_id: automation.arret_batterie
action: automation.trigger
alias: Forçage arrêt Charge Batterie
description: ""
mode: single
triggers:
- entity_id:
- input_select.battery_state
from: Charge
to: "Off"
trigger: state
conditions:
- condition: state
entity_id: input_select.battery_force_mode
state: "On"
actions:
- metadata: {}
data:
skip_condition: true
target:
entity_id: automation.arret_charge_batterie
action: automation.trigger
alias: Forçage decharge Batterie
description: ""
mode: single
triggers:
- entity_id:
- input_select.battery_state
from: null
to: Discharge
trigger: state
conditions:
- condition: state
entity_id: input_select.battery_force_mode
state: "On"
actions:
- metadata: {}
data:
skip_condition: true
target:
entity_id: automation.declenchement_decharge_batterie
action: automation.trigger
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Ixio_Jo
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 22
- Remerciements reçus 14
alias: Smart Charge
description: ""
triggers:
- entity_id:
- sensor.msunpv_powreso
trigger: state
conditions:
- condition: state
entity_id: input_boolean.battery_smart_charging
state: "on"
- condition: state
entity_id: input_select.battery_state
state: Charge
for:
hours: 0
minutes: 0
seconds: 5
enabled: true
actions:
- if:
- condition: numeric_state
entity_id: sensor.msunpv_powreso
above: 10
then:
- metadata: {}
data: {}
target:
entity_id: input_boolean.battery_smart_charging
action: input_boolean.turn_off
enabled: false
- action: input_number.set_value
metadata: {}
data:
value: |-
{{ min(
max(
-max(
min(states('sensor.msunpv_powreso')|float(0)|round(2) / states('sensor.test_controle_emerson_output_voltage')|float(0)|round(2) /2.0 ,3)
,0.1)| float(0)|round(2)
+states('input_number.emerson_control_current_ratio')|float(0)|round(2) ,5)
,30)
}}
target:
entity_id: input_number.emerson_control_current_ratio
- target:
entity_id:
- input_boolean.battery_smart_charging
data: {}
action: input_boolean.turn_on
enabled: false
else:
- if:
- condition: numeric_state
entity_id: sensor.msunpv_powreso
below: -10
then:
- metadata: {}
data: {}
target:
entity_id: input_boolean.battery_smart_charging
action: input_boolean.turn_off
enabled: false
- action: input_number.set_value
metadata: {}
data:
value: |-
{{min(
max(
max(
min(-1*states('sensor.msunpv_powreso')|float(0)|round(2) / states('sensor.test_controle_emerson_output_voltage')|float(0)|round(2) /2.0 ,3)
,0.1)| float(0)|round(2)
+states('input_number.emerson_control_current_ratio')|float(0)|round(2) ,5)
,30)
}}
target:
entity_id: input_number.emerson_control_current_ratio
- target:
entity_id:
- input_boolean.battery_smart_charging
data: {}
action: input_boolean.turn_on
enabled: false
else:
- if:
- condition: numeric_state
entity_id: sensor.msunpv_outbal
below: 14
- condition: state
entity_id: input_boolean.eau_chaude
state: "off"
enabled: false
then:
- metadata: {}
data: {}
target:
entity_id: input_boolean.battery_smart_charging
action: input_boolean.turn_off
enabled: false
- action: input_number.set_value
metadata: {}
data:
value: |-
{{ min(
max(
-max(
min( ( (100 - states('sensor.msunpv_outbal')|float*6.87 ) ) / states('sensor.test_controle_emerson_output_voltage')|float(0)|round(2) /2.0 ,3)
,0.1)| float(0)|round(2)
+ states('input_number.emerson_control_current_ratio')|float(0)|round(2) ,5)
,30) }}
target:
entity_id: input_number.emerson_control_current_ratio
- target:
entity_id:
- input_boolean.battery_smart_charging
data: {}
action: input_boolean.turn_on
enabled: false
else:
- if:
- condition: numeric_state
entity_id: sensor.msunpv_outbal
above: 22
then:
- metadata: {}
data: {}
target:
entity_id: input_boolean.battery_smart_charging
action: input_boolean.turn_off
enabled: false
- action: input_number.set_value
metadata: {}
data:
value: |-
{{
min(
max(
max(
min( ( ( states('sensor.msunpv_outbal')|float*6.87 )-150 ) / states('sensor.test_controle_emerson_output_voltage')|float(0)|round(2) /2.0 ,3)
,0.1)| float(0)|round(2)
+ states('input_number.emerson_control_current_ratio')|float(0)|round(2) ,5)
,30)
}}
target:
entity_id: input_number.emerson_control_current_ratio
- target:
entity_id:
- input_boolean.battery_smart_charging
data: {}
action: input_boolean.turn_on
enabled: false
- action: number.set_value
metadata: {}
data:
value: |-
{{
states('input_number.emerson_control_current_ratio')|float(0)|round(2)
}}
target:
entity_id: number.test_controle_emerson_max_output_current
mode: single
alias: PID_Computation
description: ""
triggers:
- trigger: state
entity_id:
- sensor.pid_erreur
conditions:
- condition: state
entity_id: input_select.battery_state
state: Discharge
enabled: true
- condition: state
entity_id: input_boolean.battery_smart_dps
state: "on"
enabled: true
actions:
- action: input_number.set_value
metadata: {}
data:
value: >-
{{
states('input_number.pid_proportionnal_coef')|float(1)*states('sensor.pid_erreur')|float(1)*-1
+
states('input_number.pid_derivative_coef')|float(1)*states('sensor.pid_error_derivative')|float(1)*-1
+
states('input_number.pid_integral_coef')|float(1)*states('sensor.somme_capteur_10s')|float(1)*states('input_number.msunpv_update_interval')|float(1)
*-1 }}
target:
entity_id: input_number.pid_value
enabled: true
- action: number.set_value
metadata: {}
data:
value: >-
{{ max( min
(states('number.esp_batterie_onduleur_soyosource_manual_power_demand') |
float(3) + states('input_number.pid_value')|float(3), 900),0) }}
target:
entity_id: number.esp_batterie_onduleur_soyosource_manual_power_demand
enabled: true
mode: single
Pour la décharge, la il faut être précis, pas envi d'injecter sur le réseau la nuit, donc j'ai mis en place un régulateur PID. Le but c'est de tendre vers une erreur nulle en limitant les rebonds. L'erreur calculée via un template, si j'injecte un peu dans le chauffe eau, je retranche la valeur, sauf si le chauffe eau est chaud :
{%set heaterpower = states('sensor.msunpv_outbal')|float(3) %}
{{(states('input_number.pid_target_power')|float(3)-
states('sensor.msunpv_powreso')|float(3)+6.87*heaterpower|float(3) ) if( states('input_boolean.eau_chaude')=='off') else (states('input_number.pid_target_power')|float(3)-
states('sensor.msunpv_powreso')|float(3))}}
import json
import datetime
@time_trigger("cron(* * * * *)") # Exécution chaque seconde
def calcul_integrale():
entity_id = "sensor.msunpv_powreso"
# Définir le timestamp de début (10 secondes en arrière)
start_time = (datetime.datetime.now() - datetime.timedelta(seconds=10)).isoformat()
# Construire l'URL de l'API Home Assistant
url = f"http://localhost:8123/api/history/period/{start_time}?filter_entity_id={entity_id}"
# Récupérer l'historique via l'API REST
headers = {
"Authorization": "Bearer CLEFXXXXXX",
"Content-Type": "application/json"
}
response = task.executor(requests.get, url, headers=headers)
if response.status_code == 200:
history_data = json.loads(response.text)
# Extraire les valeurs des 10 dernières secondes
values = []
if history_data and isinstance(history_data, list) and len(history_data) > 0:
for entry in history_data[0]: # Premier élément = liste des états du capteur
try:
values.append(float(entry["state"]))
except ValueError:
pass # Ignorer les erreurs de conversion
if values:
somme = sum(values)
log.info(f"Somme des 10 dernières valeurs de {entity_id} : {somme}")
# Stocker la somme comme capteur temporaire
state.set("sensor.somme_msunpv_powreso_10", somme)
else:
log.error(f"Erreur API Home Assistant : {response.status_code} - {response.text}")
Je pense qu'il faudrait utilisé une extension qui gère directement le PID, mais bon, au moment j'ai pas trouvé.
J'ai atteint une certaine stabilité en utilisant les coefs suivant : P = 0.2, D = 0.25, I=0.005. Je pense qu'on peut mieux faire, mais la je suis satisfait, pour 2.2kWh injecté sur une journée/nuit, j'ai en général moins de 50Wh injecté sur le réseau en régulant à 0W
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Ixio_Jo
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 22
- Remerciements reçus 14
En fin de charge, la tension des cellules s'envolent rapidement, si elles ne sont pas toute parfaitement identiques, ni équilibrées correctement , certaines vont atteindre la tension max(3.65V), alors que d'autres vont rester dans la zone de charge (3.4V). Comme beaucoup, j'ai donc acheté un JKBMS équipé d'un équilibreur actif, en gros il transfert le courant des cellules ayant la plus haute tension, vers celle ayant la plus basse tension. Ce qu'il faut savoir, c'est que ce genre d'équilibreur actif est séquentiel, il décharge une cellule vers une capa, puis, charge un autre cellule depuis cette capa. Donc le courant moyen est au final de la moitié de celui annoncé, (0.4A pour le mien, donc 0.2A) pour seulement 1 cellule (donc la puissance moyenne transférée est de 0.2*3.6 = 0.72W). La conclusion, c'est long !!
C'est en général suffisant, mais pour aider le système, j'effectue une fin de charge en ralentissant lorsqu'une cellule atteint les 3.5V. Sachant que mon équilibreur est programmer pour ne commencer à travailler que au dessus de 3.44V, quand les cellules atteignent la zone où elles sont quasiment pleine, plus tôt c'est pas forcément utile surtout si les cellules n'ont pas des courbes de charge 100% identique, ce qui est mon cas :
Voici la courbe de charge réalisée ce matin, on est parti d'une batterie autour de 30% le matin, qu'on a commencé à charger avant que le LL et le LV nécessite un peu de courant. Pendant toutes ces phases, les cellules se suivent pas trop mal, mais en fin de charge vers 12.h15, on voit que certaines décrochent plus vite que d'autres. Dès qu'une cellule dépasse les 3.5V je diminue la tension du charge de 0.1V (sur ~56V) autant de fois que nécessaire pour repasser sous les 3.5V. Quand la tension max de chacune des cellules passe sous les 3.48V, je remonte de 0.1V. A la fin j'arrive bien à toute les cellules à 3.5V et je considère la batterie pleine. J'éteins le chargeur peu après (quand le courant d'entrée reste suffisamment faible assez longtemps) et je ne le redéclenche que si je passe sous les 99%.
Après cela on voit que lentement le cellules tendent vers leurs tensions de repos, mais pareil pas toute à la même vitesse, et la je préfère ne plus équilibrer, parce que ces cellules qui descendent plus vite ne sont pas forcément celles qui vont atteindre la tension min de sécurité (2.5V à 3V) le plus rapidement. Je n'effectue qui l'équilibrage par le haut.
alias: Smart Battery Chargeur Extrème fin de charge
description: ""
triggers:
- entity_id:
- sensor.esp_batterie_jk_bms_55ah_max_cell_voltage
trigger: state
conditions:
- condition: state
entity_id: input_boolean.battery_smart_charging
state: "on"
- condition: or
conditions:
- condition: state
entity_id: input_select.battery_state
state: Charge
- condition: state
state: NightCharge
entity_id: input_select.battery_state
actions:
- if:
- condition: numeric_state
entity_id: sensor.esp_batterie_jk_bms_55ah_max_cell_voltage
above: 3.5
- condition: numeric_state
entity_id: sensor.test_controle_emerson_output_voltage
above: 55
then:
- action: number.set_value
metadata: {}
data:
value: |-
{{
states('number.test_controle_emerson_set_output_voltage')|float-0.1
}}
target:
entity_id: number.test_controle_emerson_set_output_voltage
else:
- if:
- condition: numeric_state
entity_id: sensor.esp_batterie_jk_bms_55ah_max_cell_voltage
below: 3.48
- condition: numeric_state
entity_id: number.test_controle_emerson_set_output_voltage
below: 55.7
then:
- action: number.set_value
metadata: {}
data:
value: |-
{{
states('number.test_controle_emerson_set_output_voltage')|float+0.1
}}
target:
entity_id: number.test_controle_emerson_set_output_voltage
else:
- if:
- condition: numeric_state
entity_id: sensor.esp_batterie_jk_bms_55ah_delta_cell_voltage
below: 0.01
- condition: numeric_state
entity_id: number.test_controle_emerson_set_output_voltage
below: 55.7
then:
- action: number.set_value
metadata: {}
data:
value: |-
{{
states('number.test_controle_emerson_set_output_voltage')|float+0.1
}}
target:
entity_id: number.test_controle_emerson_set_output_voltage
- if:
- condition: state
state: NightCharge
entity_id: input_select.battery_state
enabled: false
then:
- action: number.set_value
metadata: {}
data:
value: >-
{{ max(
states('input_number.battery_digipot_max_value')|int ,
0) }}
target:
entity_id: number.esp_batterie_digipot_level
mode: single
alias: Mise en veille chargeur
description: ""
triggers:
- trigger: state
entity_id:
- input_select.battery_state
for:
hours: 0
minutes: 5
seconds: 0
enabled: true
to: "Off"
- trigger: state
entity_id:
- input_select.battery_state
for:
hours: 0
minutes: 5
seconds: 0
enabled: true
to: Discharge
conditions:
- condition: not
conditions:
- condition: state
entity_id: input_select.battery_state
state: Charge
- condition: state
entity_id: input_select.battery_force_mode
state: "On"
- condition: state
entity_id: switch.test_controle_emerson_ac_switch_turn_off
state: "off"
actions:
- type: turn_on
device_id: f32275bfbaf5d8419742bbf7d5081786
entity_id: 730633a00ffa65b235428ae9294ee9af
domain: switch
mode: single
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- patmtp35
- Hors Ligne
- Membre premium
-
- Messages : 111
- Remerciements reçus 8

Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
MSun-PV
-
Vos installations
- [Home Assistant, MSunPV et Batterie DIY] Le Matériel