Et voilà la personne qui me l’a dis Nouvelle intégration Vigieau - #45 par Christophe69480
@titof2375 Merci pour les liens.
Je vais chercher car je ne trouve pas ce que je souhaite.
Plus clairement par rapport à mon premier post sur le sujet:
- Actuellement s’il y a une restriction horaire par exemple entre 11h00 et 18h00, l’icon reste dans la couleur du niveau d’alerte.
- Je souhaite animer la couleur/texte en fonction de la plage horaire, 11h00 à 18h00 dans la couleur du niveau d’alerte le reste du temps en vert. J’ai bien trouvé les attributs mais ne comprend pas comment les récupérer dans le code.
Fred
pour l’animation je ne sais pas par contre je suis intersse
Bonjour, chez moi mon niveau d’alerte a changé et sur l’intégration rien n’a changé
Ci dessus une capture d’écran du site vigieau et ci dessous une capture d’écran de intégration
, Comment la mise a jour ce fait sur l’intégration ?
Autre chose voilà mes log
Logger: homeassistant.components.sensor
Source: custom_components/vigieau/init.py:220
Integration: Capteur (documentation, issues)
First occurred: 12:54:07 (1 occurrences)
Last logged: 12:54:07
Error while setting up vigieau platform for sensor
Traceback (most recent call last):
File « /usr/src/homeassistant/homeassistant/helpers/entity_platform.py », line 353, in _async_setup_platform
await asyncio.shield(task)
File « /config/custom_components/vigieau/sensor.py », line 42, in async_setup_entry
await vigieau_coordinator.async_config_entry_first_refresh()
File « /usr/src/homeassistant/homeassistant/helpers/update_coordinator.py », line 251, in async_config_entry_first_refresh
await self._async_refresh(
File « /usr/src/homeassistant/homeassistant/helpers/update_coordinator.py », line 374, in _async_refresh
self.async_update_listeners()
File « /usr/src/homeassistant/homeassistant/helpers/update_coordinator.py », line 164, in async_update_listeners
update_callback()
File « /config/custom_components/vigieau/init.py », line 220, in _handle_coordinator_update
self._attr_icon = {
^
KeyError: ‹ alerte_renforcée ›
Bonjour,
l’intégration se met à jour toutes les heures. Dans le cas précis du passage à l’alerte renforcée, la 0.3.8 corrige le problème.
Re,
J’ai réussi à bidouiller un truc pour afficher la plage horaire dans le cadre.
Je bute sur la conversion de la seconde commande du screenshot ci-dessous pour l’intégrer dans la carte.
Une idée ?
type: custom:stack-in-card
mode: vertical
keep:
box_shadow: false
margin: false
border_radius: false
background: false
outer_padding: false
cards:
- type: custom:mod-card
card_mod:
style:
.: |
:host {
--text-divider-color: rgb(68, 115, 158);
--text-divider-line-size: 1px;
}
card: null
- type: custom:mod-card
card_mod:
style: |
ha-card {
margin: -10px 0px 0px 0px;
}
card:
type: horizontal-stack
cards:
- type: custom:bar-card
entities:
- entity: sensor.alert_level
name: 'Meuse niveau :'
icon: mdi:alert-circle
height: 25px
positions:
indicator: 'off'
icon: 'off'
severity:
- text: Vigilance
color: green
- text: Alerte
color: yellow
- text: Alerte renforcée
color: orange
- text: Crise
color: red
card_mod:
style: >
bar-card-currentbar, bar-card-backgroundbar {
border-radius: 25px;
}
#states > bar-card-row > bar-card-card > bar-card-background >
bar-card-contentbar > bar-card-name {
font-size: 16px;
} ha-card {
margin-top: -2px;
background: none;
border: none;
}
- type: custom:mod-card
card_mod:
style: |
ha-card {
margin: -5px 5px 5px 5px;
}
card:
type: custom:auto-entities
card:
type: grid
columns: 5
square: true
card_param: cards
filter:
include:
- entity_id: sensor.*_restrictions
options:
type: custom:button-card
color_type: icon
aspect_ratio: 1/1
show_name: false
show_state: true
show_label: true
label: |
[[[
if (entity.attributes.friendly_name == 'Arrosage des jardins potagers') {
var hd = entity.attributes['Arrosage des jardins potagers (heureDebut)']
var hf = entity.attributes['Arrosage des jardins potagers (heureFin)']
}
else
{
if (entity.attributes.friendly_name == 'Arrosage des pelouses') {
var hd = entity.attributes['Arrosage des pelouses, massifs fleuris (y compris jardinières, balconnières et fleurs en pot) (heureDebut)']
var hf = entity.attributes['Arrosage des pelouses, massifs fleuris (y compris jardinières, balconnières et fleurs en pot) (heureFin)']
}
}
if (hd != undefined) {
return hd + ' à ' + hf
}
]]]
name: |
[[[
return entity.attributes.friendly_name
]]]
styles:
card:
- '--mdc-ripple-color': rgb(68, 115, 158)
- '--mdc-ripple-press-opacity': 0.5
- border-radius: 8px
name:
- font-size: 9px
- white-space: normal
label:
- font-size: 9px
- white-space: normal
- color: red
state:
- font-size: 9px
- white-space: normal
state:
- value: Aucune restriction
operator: '=='
color: green
styles:
card:
- box-shadow: 0px 0px 0px 2px green
state:
- color: green
- value: Interdiction sauf exception
operator: '=='
color: orange
styles:
card:
- box-shadow: 0px 0px 0px 2px orange
state:
- color: orange
- value: Interdiction
operator: '=='
color: red
styles:
card:
- box-shadow: 0px 0px 0px 2px red
state:
- color: red
- value: Interdiction sur plage horaire
operator: '=='
styles:
icon:
- color: |
[[[
return 'orange'
]]]
card:
- box-shadow: 0px 0px 0px 2px orange
state:
- color: orange
size: 50%
sort:
method: name
reverse: false
Suite à la derniere update j’ai cette erreur :
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 353, in _async_setup_platform
await asyncio.shield(task)
File "/config/custom_components/vigieau/sensor.py", line 42, in async_setup_entry
await vigieau_coordinator.async_config_entry_first_refresh()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 251, in async_config_entry_first_refresh
await self._async_refresh(
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 374, in _async_refresh
self.async_update_listeners()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 164, in async_update_listeners
update_callback()
File "/config/custom_components/vigieau/__init__.py", line 291, in _handle_coordinator_update
restriction = usage.get("niveauRestriction", usage["erreur"])
~~~~~^^^^^^^^^^
KeyError: 'erreur'
Le plus simple serait probablement que l’intégration expose un booléen pour la restriction plutot que du texte. Une fois que c’est le cas, on peut facilement exposer le status réel de l’interdiction en fonction de l’horaire.
Source: custom_components/vigieau/__init__.py:291
Integration: Capteur (documentation, issues)
First occurred: 19:15:19 (1 occurrences)
Last logged: 19:15:19
Error while setting up vigieau platform for sensor
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 353, in _async_setup_platform
await asyncio.shield(task)
File "/config/custom_components/vigieau/sensor.py", line 42, in async_setup_entry
await vigieau_coordinator.async_config_entry_first_refresh()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 251, in async_config_entry_first_refresh
await self._async_refresh(
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 374, in _async_refresh
self.async_update_listeners()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 164, in async_update_listeners
update_callback()
File "/config/custom_components/vigieau/__init__.py", line 291, in _handle_coordinator_update
restriction = usage.get("niveauRestriction", usage["erreur"])
~~~~~^^^^^^^^^^
KeyError: 'erreur'
je suis en 0.3.9

Sorry pour cette release un peu ratée. Je cherchais à gérer le problème de l’API pour les données de ma commune.
Le problème devrait être corrigé en 0.3.10.
Et en cas d’erreur de l’API (si l’api n’a pas les infos mais retourne quand même un résultat):
Je voudrais avoir votre avis sur la prochaine évolution sur laquelle je vais travailler.
Aujourd’hui les capteurs retournent la restriction avec du texte. En pratique les restrictions sont:
- Autorisé (si aucune restriction)
- Interdiction
- Interdiction sur plage horaire
- Interdiction sauf exception
Une autre façon de présenter les données serait d’utiliser des capteurs binaires « Interdit » ou « Autorisé ». Toute interdiction serait vu comme « on » pour le capteur.
Le raisonnement est le suivant:
- les exceptions, quand elles existent, sont des cas limites (1er remplissage de piscine par ex). J’imagine qu’une automatisation ne s’intéresse pas à ce genre de cas et qu’on peut donc considérer que l’usage est interdit (et garder l’exception pour un attribut)
- les restrictions horaires pourraient être exprimées de façon naturelle: le capteur est « on » pendant la plage interdite (ou autorisée, cf le sondage plus bas)
- les automatisations sont plus faciles à écrire avec des capteurs binaires.
Je voudrais avoir votre avis:
- Garder les capteurs comme aujourd’hui
- Passer aux capteurs binaires « on » signifie interdit
- Passer aux capteurs binaires « on » signifie autorisé
Bien sûr, en plus de voter, n’hésitez pas à donner un cas d’usage concret pour illustrer l’interêt d’un mode ou de l’autre.
Salut, alors pour moi un on ou un off, serait pas top, car dans les restrictions,il peut y avoir de horaires ou des recommandations, par contre si effectivement tu pouvais faire un ok quand on peut arrosé et no quand on peut pas ça serait un plus
Vote réalisé.
FYI, j’ai poussé une PR pour permettre :
- de choisir le mode de localisation (coordonnées HA, ou code postal)
- la possibilité d’ajouter plusieurs localisation.
Il y a pas mal d’autres modifs également, mais qui n’impacte pas le fonctionnement () j’espère que ça ne sera pas trop galère à merger et que tu pourras prendre en compte.
Dispo si besoin
Alors, tout d’abord, je voulais te remercire pour ton travail et cette intégration très utile.
Pour moi, le plus utile serait des états comme ceux présentés par Fred55, qui indiquent l’interdiction partielle avec plage horaire.
Je ne compte pas utiliser des capteurs binaires pour gérer des automations sur mon arrosage par exemple. Seule l’information mise à jour, mais avec toutes les informations (y compris les plages horaires) est utile pour moi.
Merci encore pour tout.
Bonjour,
J’ai finalement trouvé la fonction que je cherchais pour changer la couleur icône fonction plage horaire.
Reste cet histoire d’indexage pour trouver automatiquement ce qu’il faut animer sans le coder en dur.
@kamaradclimber oui ce serai plus simple d’intégrer la gestion plage horaire dans l’intégration.
type: custom:stack-in-card
mode: vertical
keep:
box_shadow: false
margin: false
border_radius: false
background: false
outer_padding: false
cards:
- type: custom:mod-card
card_mod:
style:
.: |
:host {
--text-divider-color: rgb(68, 115, 158);
--text-divider-line-size: 1px;
}
card: null
- type: custom:mod-card
card_mod:
style: |
ha-card {
margin: -10px 0px 0px 0px;
}
card:
type: horizontal-stack
cards:
- type: custom:bar-card
entities:
- entity: sensor.alert_level
name: Meuse niveau
icon: mdi:alert-circle
height: 25px
positions:
indicator: 'off'
icon: 'off'
severity:
- text: Vigilance
color: green
- text: Alerte
color: yellow
- text: Alerte renforcée
color: orange
- text: Crise
color: red
card_mod:
style: >
bar-card-currentbar, bar-card-backgroundbar {
border-radius: 25px;
}
#states > bar-card-row > bar-card-card > bar-card-background >
bar-card-contentbar > bar-card-name {
font-size: 16px;
color: black;
} ha-card {
margin-top: -2px;
background: none;
border: none;
}
- type: custom:mod-card
card_mod:
style: |
ha-card {
margin: -5px 5px 5px 5px;
}
card:
type: custom:auto-entities
card:
type: grid
columns: 5
square: true
card_param: cards
filter:
include:
- entity_id: sensor.*_restrictions
options:
type: custom:button-card
color_type: icon
aspect_ratio: 1/1
show_name: false
show_state: true
show_label: true
label: |
[[[
if (entity.attributes.friendly_name == 'Arrosage des jardins potagers') {
var hd = entity.attributes['Arrosage des jardins potagers (heureDebut)']
var hf = entity.attributes['Arrosage des jardins potagers (heureFin)']
}
else
{
if (entity.attributes.friendly_name == 'Arrosage des pelouses') {
var hd = entity.attributes['Arrosage des pelouses, massifs fleuris (y compris jardinières, balconnières et fleurs en pot) (heureDebut)']
var hf = entity.attributes['Arrosage des pelouses, massifs fleuris (y compris jardinières, balconnières et fleurs en pot) (heureFin)']
}
}
if (hd != undefined) {
return hd + ' à ' + hf
}
]]]
name: |
[[[
return entity.attributes.friendly_name
]]]
styles:
card:
- '--mdc-ripple-color': rgb(68, 115, 158)
- '--mdc-ripple-press-opacity': 0.5
- border-radius: 8px
name:
- font-size: 9px
- white-space: normal
label:
- font-size: 9px
- white-space: normal
- color: red
state:
- font-size: 9px
- white-space: normal
state:
- value: Aucune restriction
operator: '=='
color: green
styles:
card:
- box-shadow: 0px 0px 0px 2px green
state:
- color: green
- value: Interdiction sauf exception
operator: '=='
color: orange
styles:
card:
- box-shadow: 0px 0px 0px 2px orange
state:
- color: orange
- value: Interdiction
operator: '=='
color: red
styles:
card:
- box-shadow: 0px 0px 0px 2px red
state:
- color: red
- value: Interdiction sur plage horaire
operator: '=='
styles:
icon:
- color: |
[[[
if (entity.attributes.friendly_name == 'Arrosage des jardins potagers') {
var hd = entity.attributes['Arrosage des jardins potagers (heureDebut)']
var hf = entity.attributes['Arrosage des jardins potagers (heureFin)']
}
else
{
if (entity.attributes.friendly_name == 'Arrosage des pelouses') {
var hd = entity.attributes['Arrosage des pelouses, massifs fleuris (y compris jardinières, balconnières et fleurs en pot) (heureDebut)']
var hf = entity.attributes['Arrosage des pelouses, massifs fleuris (y compris jardinières, balconnières et fleurs en pot) (heureFin)']
}
}
if ( (new Date()).toLocaleTimeString("fr-FR") > hd) {
if ( (new Date()).toLocaleTimeString("fr-FR") < hf )
return 'orange'
}
return 'green'
]]]
card:
- box-shadow: |
[[[
if (entity.attributes.friendly_name == 'Arrosage des jardins potagers') {
var hd = entity.attributes['Arrosage des jardins potagers (heureDebut)']
var hf = entity.attributes['Arrosage des jardins potagers (heureFin)']
}
else
{
if (entity.attributes.friendly_name == 'Arrosage des pelouses') {
var hd = entity.attributes['Arrosage des pelouses, massifs fleuris (y compris jardinières, balconnières et fleurs en pot) (heureDebut)']
var hf = entity.attributes['Arrosage des pelouses, massifs fleuris (y compris jardinières, balconnières et fleurs en pot) (heureFin)']
}
}
if ( (new Date()).toLocaleTimeString("fr-FR") > hd) {
if ( (new Date()).toLocaleTimeString("fr-FR") < hf )
return '0px 0px 0px 2px orange'
}
return '0px 0px 0px 2px green'
]]]
state:
- color: orange
size: 50%
exclude:
- entity_id: sensor.*_restrictions
state: Aucune restriction
sort:
method: name
reverse: false
Merci à ceux qui ont produit le code que j’ai uniquement amélioré à mon goût.
Fred
ca devient compliqué là…
les horaires sont liés au niveau d’alerte apparement
il serait probablement plus simple de le gerer au niveau de l’alerte non ?
page 5 du document
Merci @kamaradclimber pour les logos
est-il possible dans l’intégration d’avoir cela :
Categorie: Arrosage des jardins potagers: Interdiction sur plage horaire
Debut: 11:00
Fin: 18:00
icon: mdi:watering-can
friendly_name: Arrosage des jardins potagers
Ce serait plus simple à gérer dans le code avec un item constant quelques soit le sensor.
plutôt que
Categorie: Arrosage des jardins potagers: Interdiction sur plage horaire
Arrosage des jardins potagers (heureDebut): 11:00
Arrosage des jardins potagers (heureFin): 18:00
icon: mdi:watering-can
friendly_name: Arrosage des jardins potagers
fred
Pas si simple, car un capteur est utilisé potentiellement par plusieurs restrictions et donc des horaires différents.
Je n’ai pas regardé le code de l’intégration, il me paraissait simple de tronquer le string pour garder heureDebut plutôt que Arrosage des jardins potagers (heureDebut): 11:00
Je vais essayer de trouver une solution dans le code carte.
Merci pour tes intégrations très utiles.
J’ai modifié dans init.py les ligne suivantes :
Cela semble fonctionner.
Fred