Je ne vois pas l’heure de remise à zéro.
Si le minimum est atteint oui. Chez moi ça se voit directement sur la carte:
Il a tourné 1:17:43 et on veut 02h00 min. Donc il va tourner cette nuit, jusqu’au max programmé.
Je ne vois pas l’heure de remise à zéro.
Si le minimum est atteint oui. Chez moi ça se voit directement sur la carte:
Il a tourné 1:17:43 et on veut 02h00 min. Donc il va tourner cette nuit, jusqu’au max programmé.
Bonsoir,
Mince une capture ne s’est pas jointe. La voici
Mes équipements ont démarré à 5h01 et j’ai fait une automatisation qui les éteint si l’heure est entré 5h et 5h10…
Donc pour aujourd’hui le chauffe eau a été allumé environ 1h30 donc de 01h à 3h30 il devrait logiquement tourner. Je ferai une capture demain pour montrer qu’il aura démarré à 5h après le reset
À demain !
Bonjour,
Voilà les historiques pour les 2 équipements. Je remarque que ça démarre à 5h02 alors que le reset est à 5h06
Étrange…
Bonjour à tous,
Il me semblait que ca fonctionnait pourtant… je ne comprends pas.
Je constate que l’activation de mon ballon d’eau chaude en HC (22h00) ne se fait pas (plus ??).
J’ai tenté de modifier l’heure pour la positionner une minute après mon heure courante (22h44), sans succès.
J’ai tenté de désactiver et de réactiver l’élément m’attendant à ce qu’il démarre, sans succès.
Je l’ai déclenché manuellement puis j’ai remis la configuration SO de HC à 22h00 et l’icône de nuit est apparue.
Je constate juste l’erreur, ci-dessous, dans les logs. Mon interrogation est que si SO est désactivé, est-ce que le déclenchement de nuit se fait bien ?
2025-12-05 22:54:44.334 INFO (MainThread) [custom_components.solar_optimizer.switch] Changing enabled state for ballon_d_eau_chaude to True
2025-12-05 22:54:45.431 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
2025-12-05 22:54:45.433 WARNING (MainThread) [custom_components.solar_optimizer.coordinator] Power production is not valued. Solar Optimizer will be disabled
Les logs après activation manuelle
e[32m2025-12-05 22:58:31.573 INFO (MainThread) [custom_components.solar_optimizer.switch] Turn_on Solar Optimizer switch Activee[0m
e[32m2025-12-05 22:58:31.573 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Calling service switch/turn_on for entity switch.module_ballon_eau_chaudee[0m
e[32m2025-12-05 22:58:31.574 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Sending event solar_optimizer_state_change_event with action Activate for entity switch.module_ballon_eau_chaude with requested_power 0 and current_power 0e[0m
e[32m2025-12-05 22:58:31.668 INFO (MainThread) [custom_components.solar_optimizer.sensor] Call of on_state_change at 2025-12-05 22:58:31.668128+01:00 with event <Event state_changed[L]: entity_id=switch.module_ballon_eau_chaude, old_state=<state switch.module_ballon_eau_chaude=off; friendly_name=Module ballon @ 2025-12-05T12:02:18.899017+01:00>, new_state=<state switch.module_ballon_eau_chaude=on; friendly_name=Module ballon @ 2025-12-05T22:58:31.666668+01:00>>e[0m
e[32m2025-12-05 22:58:31.670 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau chaude - Set on_time=3601e[0m
e[32m2025-12-05 22:58:31.671 INFO (MainThread) [custom_components.solar_optimizer.switch] Appel de on_state_change à 2025-12-05 22:58:31.671179 avec l'event <Event state_changed[L]: entity_id=switch.module_ballon_eau_chaude, old_state=<state switch.module_ballon_eau_chaude=off; friendly_name=Module ballon @ 2025-12-05T12:02:18.899017+01:00>, new_state=<state switch.module_ballon_eau_chaude=on; friendly_name=Module ballon @ 2025-12-05T22:58:31.666668+01:00>>e[0m
Les logs après le changement de configuration des HC
e[32m2025-12-05 23:01:32.398 INFO (MainThread) [custom_components.solar_optimizer.config_flow] Recreating entry 01JPCCHBKFS4F256W18SYQ0EW8 due to configuration change. New config is now: {'action_mode': 'action_call', 'activation_service': 'switch/turn_on', 'battery_soc_threshold': '0.0', 'check_usable_template': "{{ is_state('binary_sensor.energie_cellier_ballon_optimiseur_solaire_utilisable', 'on') }}", 'deactivation_service': 'switch/turn_off', 'device_type': 'device_type', 'duration_min': 60.0, 'duration_stop_min': 15.0, 'entity_id': 'switch.module_ballon_eau_chaude', 'max_on_time_per_day_min': "{{states('sensor.auto_cellier_optimiseurs_solaires_ballon_allume_maximum_jour')|int(180)}}", 'min_on_time_per_day_min': "{{states('sensor.auto_cellier_optimiseurs_solaires_ballon_allume_minimum_jour')|int(180)}}", 'name': "Ballon d'eau chaude", 'offpeak_time': '22:00', 'power_max': '2200'}e[0m
En regardant rapidement l’erreur est assez clair.
C’est ton capteur de production solaire qui n’a pas de valeur.
Regarde de ce côté là et ça devrait rentrer dans l’ordre
Pourtant il me semblait que ca avait déjà fonctionné lorsque la production solaire était non définie.
Il est vrai que j’ai récemment touché au template pour rajouter ceci
availability: "{{ states('sensor.solarnet_puissance_photovoltaique')|is_number }}"
Je vais modifier pour qu’il soit toujours dispo
availability: true
Avec le temps à venir ca ne va pas être long à tester ![]()
Ça ne marchera pas mieux. Il faut que tu résolves le problème de base. Pourquoi ton capteur est invalide ?
Lorsque le capteur est invalide ça va retourner 0 avec cette modification, chatgpt se trompe ?
Sinon quelle est la bonne méthode pour tester l’invalidité et retourner 0 ?
L onduleur se coupe la nuit et donc rien ne remonte dans l intégration. Ça a toujours été comme cela.
C’était bien le problème. J avais appliqué, sans réfléchir plus loin que le bout de mon nez, ce que j’ avais fait à dessein sur un autre capteur.
Le mieux est l ennemi du bien !
Bonjour
J’ai installé Solar Optimizer en version 3.6.1. Je souhaite délester dans mon chauffe eau et pour cela j’ai un contact jour nuit piloté de chez legrand. J’ai un input select pour choisir entre auto, off et on_overide. Je viens d’essayer de paramétrer un équipement j’ai une erreur expected str.
Merci de votre aide
Bonjour,
As tu essayé de mettre 0 dans le seuil de charge batterie ? J’ai l’impression que l’erreur est sur cette ligne
Bonsoir,
En faisant des essais, j’ai créé une autre erreur sur une autre ligne et j’ai compris que les retours d’erreur était sur ligne du dessus. Le problème était effectivement sur la batterie.
En mettant 0 comme suggéré, l’erreur a disparu. Cela semble fonctionner.
Cordialement
Bonsoir,
J’ai configuré SO qui semble fonctionner.
J’ai ajouté des stream card pour afficher l’état de mon chauffe eau et de ma piscine. Quand je déplie la stream card du chauffe eau, le résumé, l’historique et la puissance s’affiche. Par contre pour la stream card de ma piscine, j’ai une erreur de configuration et je n’ai que le résumé. L’historique ne s’affiche pas. La seule différence entre les deux est que pour le chauffe eau j’ai renseigné la partie puissance alors qu’elle est vide pour la piscine.
Une idée ?
Je pense que c’est juste un problème de choix dans le menu lors de la configuration de la carte :
regarde dans la doc, il est écrit : " Vous devez choisir le template managed_device pour un équipement non muni d’une modulation de puissance ou managed_device_power sinon"
https://github.com/jmcollin78/solar_optimizer/blob/main/README-fr.md
J’ai utilisé les 2 templates managed_device et managed_device_power avec le même résultat. Il faut que je mette un capteur (peu importe quoi) pour supprimer l’erreur de configuration.
J’ai copié collé le code du GitHub dans le tableau de bord en suivant la procédure décrite dans la doc.
Tu pourrais envoyer une capture de la configuration de chacune de tes deux cartes de ton tableau de bord ?
Voici les 2 configurations pour la piscine et le chauffe eau. Il y a un espace dans 2 configurations pour le champ secondary infos
Effectivement ton utilisation est bonne, après avoir regardé sur le github, il y a probablement une coquille sur le template.
Edit : en fait non, le template part du principe que ton device est équipé d’un capteur de puissance, ce qui n’est pas forcément le cas, donc il n’y a pas forcément d’erreur sur le template, c’est plutot qu’il manque une configuration, la version sans controle de puissance, mais sans mesure de puissance.
Pour te dépanner, tu peux supprimer la dernière ligne du template « streamline_templates » dans le yaml de lovelace :
- entity: '[[power_entity]]'
Recharge bien ta page avec F5 après avoir appliqué la modification
Par contre pour ton chauffe eau qui lui est équipé d’un capteur de puissance, il faudra utiliser managed_device_power
Tu pourrais te faire un template comme ceci avec les trois configs
# A mettre en début de page sur le front
streamline_templates:
managed_device_with_power_management:
default: null
card:
type: custom:expander-card
expanded: false
title-card-button-overlay: true
title-card:
type: custom:mushroom-template-card
primary: '{{ state_attr(''[[device]]'', ''device_name'') }}'
secondary: >-
[[secondary_infos]] ({{ state_attr('[[on_time_entity]]',
'on_time_hms') }} / {{ state_attr('[[on_time_entity]]',
'max_on_time_hms')}} )
icon: '[[icon]]'
badge_icon: >-
{% if is_state_attr('[[on_time_entity]]','should_be_forced_offpeak',
True) %}mdi:power-sleep{% elif
is_state_attr('[[device]]','is_enabled', True) %}mdi:check{% else
%}mdi:cancel{% endif %}
badge_color: >-
{% if is_state_attr('[[on_time_entity]]','should_be_forced_offpeak',
True) %}#003366{% elif is_state_attr('[[device]]', 'is_usable', True)
and is_state_attr('[[device]]', 'is_enabled', True) %}green {% elif
is_state_attr('[[device]]', 'is_enabled', False) %}red {% elif
is_state_attr('[[device]]','is_waiting', True) %}orange {% elif
is_state_attr('[[device]]', 'is_usable', False) or
state_attr('[[device]]', 'is_usable') is none %}#A0B0FF{% else
%}blue{% endif %}
entity: '[[device]]'
icon_color: >-
{% if is_state('[[device]]', 'on')%}orange{% else %}lightgray{% endif
%}
tap_action:
action: toggle
hold_action:
action: more-info
double_tap_action:
action: none
cards:
- type: custom:mushroom-chips-card
chips:
- type: entity
entity: '[[enable_entity]]'
double_tap_action:
action: more-info
tap_action:
action: toggle
hold_action:
action: more-info
icon_color: green
content_info: name
- type: markdown
content: >-
**Prochaine dispo** : {{ ((as_timestamp(state_attr('[[device]]',
'next_date_available')) - as_timestamp(now())) / 60) | int }}
min<br> **Prochaine dispo puissance**: {{
((as_timestamp(state_attr('[[device]]',
'next_date_available_power')) - as_timestamp(now())) / 60) | int }}
min<br> **Utilisable** : {{ state_attr('[[device]]', 'is_usable')
}}<br> **Est en attente** : {{ state_attr('[[device]]',
'is_waiting') }}<br> **Est forcé en heures creuses** : {{
state_attr('[[on_time_entity]]', 'should_be_forced_offpeak') }}<br>
**Heures creuses** : {{ state_attr('[[on_time_entity]]',
'offpeak_time') }}<br> **Puissance requise** : {{
state_attr('[[device]]', 'requested_power') }} W<br> **Puissance
courante** : {{ state_attr('[[device]]', 'current_power') }} W
title: Infos
- type: history-graph
hours: 24
entities:
- entity: '[[device]]'
- entity: '[[enable_entity]]'
- entity: '[[power_entity]]'
managed_device_without_power_display:
default: null
card:
type: custom:expander-card
expanded: false
title-card-button-overlay: true
title-card:
type: custom:mushroom-template-card
primary: '{{ state_attr(''[[device]]'', ''device_name'') }}'
secondary: >-
[[secondary_infos]] (max. {{ state_attr('[[device]]', 'power_max') }}
W - {{ state_attr('[[on_time_entity]]', 'on_time_hms')}} / {{
state_attr('[[on_time_entity]]', 'max_on_time_hms')}} )
icon: '[[icon]]'
badge_icon: >-
{% if is_state_attr('[[on_time_entity]]','should_be_forced_offpeak',
True) %}mdi:power-sleep{% elif
is_state_attr('[[device]]','is_enabled', True) %}mdi:check{% else
%}mdi:cancel{% endif %}
badge_color: >-
{% if is_state_attr('[[on_time_entity]]','should_be_forced_offpeak',
True) %}#003366{% elif is_state_attr('[[device]]', 'is_usable', True)
and is_state_attr('[[device]]', 'is_enabled', True) %}green {% elif
is_state_attr('[[device]]', 'is_enabled', False) %}red {% elif
is_state_attr('[[device]]','is_waiting', True) %}orange {% elif
is_state_attr('[[device]]', 'is_usable', False) or
state_attr('[[device]]', 'is_usable') is none %}#A0B0FF{% else
%}blue{% endif %}
entity: '[[device]]'
icon_color: >-
{% if is_state('[[device]]', 'on')%}orange{% else %}lightgray{% endif
%}
tap_action:
action: toggle
hold_action:
action: more-info
double_tap_action:
action: none
cards:
- type: custom:mushroom-chips-card
chips:
- type: entity
entity: '[[enable_entity]]'
double_tap_action:
action: more-info
tap_action:
action: toggle
hold_action:
action: more-info
icon_color: green
content_info: name
- type: markdown
content: >-
**Prochaine dispo** : {{ ((as_timestamp(state_attr('[[device]]',
'next_date_available')) - as_timestamp(now())) / 60) | int }}
min<br> **Utilisable** : {{ state_attr('[[device]]', 'is_usable')
}}<br> **Est en attente** : {{ state_attr('[[device]]',
'is_waiting') }}<br> **Est forcé en heures creuses** : {{
state_attr('[[on_time_entity]]', 'should_be_forced_offpeak') }}<br>
**Heures creuses** : {{ state_attr('[[on_time_entity]]',
'offpeak_time') }}<br> **Puissance requise** : {{
state_attr('[[device]]', 'requested_power') }} W<br>
- type: history-graph
hours: 24
entities:
- entity: '[[device]]'
- entity: '[[enable_entity]]'
managed_device_with_power_display:
default: null
card:
type: custom:expander-card
expanded: false
title-card-button-overlay: true
title-card:
type: custom:mushroom-template-card
primary: '{{ state_attr(''[[device]]'', ''device_name'') }}'
secondary: >-
[[secondary_infos]] (max. {{ state_attr('[[device]]', 'power_max') }}
W - {{ state_attr('[[on_time_entity]]', 'on_time_hms')}} / {{
state_attr('[[on_time_entity]]', 'max_on_time_hms')}} )
icon: '[[icon]]'
badge_icon: >-
{% if is_state_attr('[[on_time_entity]]','should_be_forced_offpeak',
True) %}mdi:power-sleep{% elif
is_state_attr('[[device]]','is_enabled', True) %}mdi:check{% else
%}mdi:cancel{% endif %}
badge_color: >-
{% if is_state_attr('[[on_time_entity]]','should_be_forced_offpeak',
True) %}#003366{% elif is_state_attr('[[device]]', 'is_usable', True)
and is_state_attr('[[device]]', 'is_enabled', True) %}green {% elif
is_state_attr('[[device]]', 'is_enabled', False) %}red {% elif
is_state_attr('[[device]]','is_waiting', True) %}orange {% elif
is_state_attr('[[device]]', 'is_usable', False) or
state_attr('[[device]]', 'is_usable') is none %}#A0B0FF{% else
%}blue{% endif %}
entity: '[[device]]'
icon_color: >-
{% if is_state('[[device]]', 'on')%}orange{% else %}lightgray{% endif
%}
tap_action:
action: toggle
hold_action:
action: more-info
double_tap_action:
action: none
cards:
- type: custom:mushroom-chips-card
chips:
- type: entity
entity: '[[enable_entity]]'
double_tap_action:
action: more-info
tap_action:
action: toggle
hold_action:
action: more-info
icon_color: green
content_info: name
- type: markdown
content: >-
**Prochaine dispo** : {{ ((as_timestamp(state_attr('[[device]]',
'next_date_available')) - as_timestamp(now())) / 60) | int }}
min<br> **Utilisable** : {{ state_attr('[[device]]', 'is_usable')
}}<br> **Est en attente** : {{ state_attr('[[device]]',
'is_waiting') }}<br> **Est forcé en heures creuses** : {{
state_attr('[[on_time_entity]]', 'should_be_forced_offpeak') }}<br>
**Heures creuses** : {{ state_attr('[[on_time_entity]]',
'offpeak_time') }}<br> **Puissance requise** : {{
state_attr('[[device]]', 'requested_power') }} W<br> **Puissance
courante** : {{ state_attr('[[device]]', 'current_power') }} W
- type: history-graph
hours: 24
entities:
- entity: '[[device]]'
- entity: '[[enable_entity]]'
- entity: '[[power_entity]]'
Merci !
Avec un entité en moins dans l’hystory-graph cela se passe mieux.
J’ai utilisé ton template avec les 3 options, cela fonctionne parfaitement