CoversManager - Piloter vos volets automatiquement d'après le soleil

Tu aurais pas fait un downgrade de AppDaemon à un moment qui aurait pu le mettre dans un état instable ?

Début juin, j’avais effectivement rechargé la sauvegarde HA d’AppDaemon lorsque la MAJ vers la version 4.5.x de cet add-on avait cassé ControllerX. Tu penses que la restauration d’une sauvegarde peut rendre l’add-on instable ?

Ça ne m’est jamais arrivé lors d’un restore de backup mais c’est envisageable.

Bon, alors ça déconne toujours, et je dirais même que le reboot d’AppDaemon n’y a rien changé. Les azimuts sont maintenant OK, le sensor.season également, mais le comportement ne change pas. Depuis, j’ai effacé puis installé la dernière version 2.1.0 beta 3 de CoversManager en utilisant HACS, et redémarré AppDaemon à plusieurs reprises entre hier et aujourd’hui (voir les logs ici, dernier re-démarrage à 16h36 aujourd’hui).

Pour éviter des ouvertures/fermetures simultanées des volets le soir et le matin, j’ai créé 3 groupes de volets dans le fichier app.yaml :

  • CoversManager: pour les volets cover.volet_chambre_nathan et cover.volet_chambre_parentale (Le premier déconne, le 2nd fonctionne comme attendu)
  • CoversManager1: pour cover.baie_vitree_cuisine (fonctionne comme attendu)
  • CoversManager2: pour les volets cover.volet_entree, cover.volet_cuisine et cover.volet_salon (Le premier déconne, les 2 autres sont OK)
  • CoversManager3: pour cover.volet_bureau (ne fonctionne pas)

Ces groupes de configuration sont détaillés ci-dessous.

CoversManager: # configuration des chambres
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            #locker: "binary_sensor.alarm_status" # l’activation de l’alarme bloque l’état de volets
            seasons: "sensor.season"
            position:
                opened: 100
                closed: 0
                min_ratio_change: 15 # % minimum de déplacement avant d'autoriser une action
                min_time_change: 15 # durée minimale avant d'autoriser une action
#            opening:                   Pas d'ouverture automatique des volets des chambres
#                type: "prefer-lux"
#                time: "09:30:00"
            closing:
                type: "prefer-lux"
                secure_dusk: true
            adaptive:
                enable: true
                locker: "binary_sensor.adaptive_mode_locker" # lock=True si binary_sensor.locker_adaptive=true / ne rien faire jusqu'à 10h du mat.
            manual:
                allow: true     # activer la détection de commandes manuelles
                timer: 02:30:00 # combien de temps avant de laisser CoversManager reprendre la main
            temperature:
                indoor:
                    sensor: "sensor.bsb_lan_temperature_thermostat_salon"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.gw1100_temp"
                    low_temperature: 23
                    high_temperature: 27
            lux:
                sensor: "sensor.outdoor_illuminance"
                # open_lux: 40 # Pas d'ouverture automatique des volets des chambres
                close_lux: 60
        covers:
            cover.volet_chambre_nathan:
                window_heigh : 210
                window_azimuth: 285 # Ouest + 15°
                positional:
                    action: true
                    status: true
                fov:
                    left: 90
                    right: 90
            cover.volet_chambre_parentale:
                window_heigh : 210
                window_azimuth: 105 # Est + 15°
                positional:
                    action: true
                    status: true
                fov:
                    left: 90
                    right: 90

CoversManager1: # configuration de la baie vitrée
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            #locker: "binary_sensor.alarm_status" # l’activation de l’alarme bloque l’état de volets
            seasons: "sensor.season"            
            position:
                opened: 100
                closed: 60
                min_ratio_change: 15 # % minimum de déplacement avant d'autoriser une action
                min_time_change: 15 # durée minimale avant d'autoriser une action
            opening:
                type: "prefer-lux"
                time: "09:00:00"
            closing:
                type: "prefer-lux"
                secure_dusk: true
            adaptive:
                enable: true
            manual:
                allow: true     # activer la détection de commandes manuelles
                timer: 01:30:00 # combien de temps avant de laisser CoversManager reprendre la main
            temperature:
                indoor:
                    sensor: "sensor.bsb_lan_temperature_thermostat_salon"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.gw1100_temp"
                    low_temperature: 23
                    high_temperature: 27
            lux:
                sensor: "sensor.outdoor_illuminance"
                open_lux: 50 # 40 augmenté à 50 pour limiter les rebonds quand il y a une variation brutale de luminosité le soir.
                close_lux: 20
        covers:
            cover.baie_vitree_cuisine:
                window_heigh : 210
                window_azimuth: 195 # Sud + 15°
                positional:
                    action: true
                    status: true
                fov:
                    left: 60
                    right: 60

CoversManager2: # volets entrée, cuisine, salon
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            #locker: "binary_sensor.alarm_status" # l’activation de l’alarme bloque l’état de volets
            seasons: "sensor.season"
            position:
                opened: 100
                closed: 0
                min_ratio_change: 15 # % minimum de déplacement avant d'autoriser une action
                min_time_change: 15 # durée minimale avant d'autoriser une action
            opening:
                type: "prefer-lux"
                time: "09:30:00"
            closing:
                type: "prefer-lux"
                secure_dusk: true
            adaptive:
                enable: true
            manual:
                allow: true     # activer la détection de commandes manuelles
                timer: 01:30:00 # combien de temps avant de laisser CoversManager reprendre la main
            temperature:
                indoor:
                    sensor: "sensor.bsb_lan_temperature_thermostat_salon"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.gw1100_temp"
                    low_temperature: 23
                    high_temperature: 27
            lux:
                sensor: "sensor.outdoor_illuminance"
                open_lux: 70 # 60 augmenté à 70 pour limiter les rebonds quand il y a une variation brutale de luminosité le soir.
                close_lux: 35 # 40 abaissé à 35 pour limiter les rebonds quand il y a une variation brutale de luminosité le soir.
        covers:
            cover.volet_entree:
                window_heigh : 210
                window_azimuth: 285 # Ouest + 15°
                positional:
                    action: true
                    status: true
                fov:
                    left: 90
                    right: 90
            cover.volet_cuisine:
                window_heigh : 210
                window_azimuth: 105 # Est + 15°
                positional:
                    action: true
                    status: true
                fov:
                    left: 90
                    right: 90
            cover.volet_salon:
                window_heigh : 210
                window_azimuth: 195 # Sud + 15°
                positional:
                    action: true
                    status: true
                fov:
                    left: 60
                    right: 60

CoversManager3: # Volet du bureau
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            #locker: "binary_sensor.alarm_status" # l’activation de l’alarme bloque l’état de volets
            seasons: "sensor.season"
            position:
                opened: 100
                closed: 0
                min_ratio_change: 15 # % minimum de déplacement avant d'autoriser une action
                min_time_change: 15 # durée minimale avant d'autoriser une action
            opening:
                type: "prefer-lux"
                time: "09:30:00"
                locker: "input_boolean.invite_bureau" # Bloque l'ouverture du volet si IB à l'état ON
            closing:
                type: "prefer-lux"
                secure_dusk: true
            adaptive:
                enable: true
                locker: "input_boolean.invite_bureau" # Bloque l'ouverture du volet si IB à l'état ON
            manual:
                allow: true     # activer la détection de commandes manuelles
                timer: 01:30:00 # combien de temps avant de laisser CoversManager reprendre la main
            temperature:
                indoor:
                    sensor: "sensor.bsb_lan_temperature_thermostat_salon"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.gw1100_temp"
                    low_temperature: 23
                    high_temperature: 27
            lux:
                sensor: "sensor.outdoor_illuminance"
                open_lux: 80 # 60 augmenté 80 pour limiter les rebonds quand il y a une variation brutale de luminosité le soir.
                close_lux: 30 # 40 abaissé à 30 pour limiter les rebonds quand il y a une variation brutale de luminosité le soir.
        covers:
            cover.volet_bureau:
                window_heigh : 210
                window_azimuth: 285 # Ouest + 15°
                positional:
                    action: true
                    status: true
                fov:
                    left: 90
                    right: 90


  • J’ai vérifié que les azimuts de tous les volets sont maintenant correctement déclarés.
  • il n’y a pas d’erreur dans les noms de volets : les cycles d’ouverture/fermeture automatique jour/nuit fonctionnent pour tous.
  • Les volets pour lesquels le mode adaptive ne fonctionne pas sont cover.volet_entree, cover.volet_bureau et cover.volet_chambre_nathan. Ils sont tous sur la façade Est de la maison.
  • Ils sont pourtant détectés comme Adaptive mode is enabled, mais les logs montrent que CoversManager ne fait jamais les tests sur les conditions de températures pour ces volets là, et contrairement aux autres volets fonctionnels.
  • ce qui complique l’analyse du problème, c’est qu’une partie de volets problémetiques partagent la même config avec d’autres qui fonctionnent. Donc à part la déclaration des azimuts, tout le reste de la configuration est en commun.

Je sèche complètement, je n’ai aucune idée de ce qui cloche.
Je suis toujours sur AppDaemon 4.4.2. Je n’ai pas cherché à effacer/ré-installer l’add-on parce que je ne pourrais alors plus éviter la dernier version (et ses nouveaux problèmes).

Bonjour,

J’ai besoin de log en debug sur la période de temps qui va de avant le soleil sur l’azimut en entrée jusqu’à un peu après l’azimuth de sortie

J’ai mis le lien vers les logs dans le 1er paragraphe de mon post précédent. J’ai complié 2jours de log. On passe du 16/06 au 17/06 à la ligne 4727.

1 « J'aime »

Tu as bien une entité sensor.volet_entree_adaptive_position ?
Est-ce qu’elle a des changements de valeurs dans la journée ?

PS : je pense avoir compris. Pour tester tu peux changer ta fov droite de façon à ce que window azimuth + fov droite ne fasse pas plus de 360 ?
Par exemple pour entrée, met une fov droite de 75 au lieu de 90

1 « J'aime »

Oui, j’ai bien sensor.volet_entree_adaptive_position.
J’ai corrigé et mis un fov right à 74 pour que ça fasse 359 puis re-démarré AppDaemon.
Je te dirais demain si ça améliore quelque chose.

1 « J'aime »

C’était donc ça le problème. Tout fonctionne maintenant. Merci !

1 « J'aime »

Super. Je vais essayer de voir comment je peux résoudre ce souci

Bonjour,
j’essaye de faire fonctionner cette intégration mais j’ai du faire une erreur quelque part.

En effet, j’ai installé appdaemon, pydantic, et CoversManager.
J’ai crée un fichier appdaemon.yaml que j’ai placé dans /config/appdaemon/appdaemon.yaml:

appdaemon:
  app_dir: /homeassistant/appdaemon/apps
  latitude: XXXXXX
  longitude:XXXXXXX
  elevation: 11
  time_zone: Europe/Paris
  plugins:
    HASS:
      type: hass
      ha_url: http://homeassistant.local:8123

http:
  url: http://127.0.0.1:5050

admin:

api:

hadashboard:

logs:
  main_log:
    filename: /config/logs/appdaemon.log
  error_log:
    filename: /config/logs/error.log

J’ai crée un fichier apps.yaml en m’inspirant des configurations décrite sur ce sujet que j’ai placé dans /config/appdaemon/apps/apps.yaml:

CoversManager: # configuration du volet Bureau 
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            seasons: "sensor.season"
            position:
                opened: 100
                closed: 0
                min_ratio_change: 15 
                min_time_change: 15 
            adaptive:
                enable: true
                locker: "input_boolean.presence_invite_bureau"
            manual:
                allow: true
                timer: 02:30:00
            temperature:
                indoor:
                    sensor: "sensor.capteur_temperature_bureau_temperature"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.outdoor_temp"
                    low_temperature: 23
                    high_temperature: 27
        covers:
            cover.oximo_io_volet_fenetre_bureau:
                window_heigh : 210 
                window_azimuth: 85
                positional:
                    action: true
                    status: true
                fov:
                    left: 15
                    right: 90

CoversManager1: # configuration du volet Chambre 
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            seasons: "sensor.season"
            position:
                opened: 100
                closed: 0
                min_ratio_change: 15
                min_time_change: 15
            adaptive:
                enable: true
                locker: "input_boolean.presence_invite_chambre"
            manual:
                allow: true
                timer: 02:30:00
            temperature:
                indoor:
                    sensor: "sensor.capteur_temperature_chambre_temperature"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.outdoor_temp"
                    low_temperature: 23
                    high_temperature: 27
        covers:
            cover.oximo_io_volet_fenetre_chambre:
                window_heigh : 210 
                window_azimuth: 85
                positional:
                    action: true
                    status: true
                fov:
                    left: 15
                    right: 90

CoversManager2: # configuration du volet Suite Parentale
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            seasons: "sensor.season"
            position:
                opened: 100
                closed: 0
                min_ratio_change: 15 
                min_time_change: 15
            adaptive:
                enable: true
            manual:
                allow: true
                timer: 02:30:00
            temperature:
                indoor:
                    sensor: "sensor.capteur_temperature_suite_parentale_temperature"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.outdoor_temp"
                    low_temperature: 23
                    high_temperature: 27
        covers:
            cover.oximo_io_2:
                window_heigh : 210 
                window_azimuth: 266
                positional:
                    action: true
                    status: true
                fov:
                    left: 90
                    right: 90

CoversManager3: # configuration du volet Salon
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            seasons: "sensor.season"
            position:
                opened: 100
                closed: 0
                min_ratio_change: 15
                min_time_change: 15
            adaptive:
                enable: true
                locker: "binary_sensor.pf_salon_droite_contact"
            manual:
                allow: true
                timer: 02:30:00
            temperature:
                indoor:
                    sensor: "sensor.capteur_temperature_salon_temperature"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.outdoor_temp"
                    low_temperature: 23
                    high_temperature: 27
        covers:
            cover.oximo_io_volets_porte_fenetre_salon_tv:
                window_heigh : 210 
                window_azimuth: 266
                positional:
                    action: true
                    status: true
                fov:
                    left: 90
                    right: 90

CoversManager4: # configuration du volet SAM
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            seasons: "sensor.season"
            position:
                opened: 100
                closed: 0
                min_ratio_change: 15
                min_time_change: 15
            adaptive:
                enable: true
                locker: "binary_sensor.pf_sam_gauche_contact"
            manual:
                allow: true
                timer: 02:30:00
            temperature:
                indoor:
                    sensor: "sensor.capteur_temperature_salle_a_manger_temperature"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.outdoor_temp"
                    low_temperature: 23
                    high_temperature: 27
        covers:
            cover.oximo_io:
                window_heigh : 210 
                window_azimuth: 191
                positional:
                    action: true
                    status: true
                fov:
                    left: 18
                    right: 90

CoversManager5: # configuration du volet Salon
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
            seasons: "sensor.season"
            position:
                opened: 100
                closed: 0
                min_ratio_change: 15
                min_time_change: 15

            adaptive:
                enable: true
            manual:
                allow: true
                timer: 02:30:00
            temperature:
                indoor:
                    sensor: "sensor.capteur_temperature_salon_temperature"
                    setpoint: 23
                    seasons:
                        spring:
                            setpoint: 23
                        summer:
                            setpoint: 23
                        autumn:
                            setpoint: 23
                        winter:
                            setpoint: 23
                outdoor:
                    sensor: "sensor.outdoor_temp"
                    low_temperature: 23
                    high_temperature: 27
        covers:
            cover.oximo_io_volet_porte_fenetre_cuisine:
                window_heigh : 210 
                window_azimuth: 266
                positional:
                    action: true
                    status: true
                fov:
                    left: 90
                    right: 90

J’ai lancé AppDaemon et le journal indique ceci:

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service base-addon-banner: starting
-----------------------------------------------------------
 Add-on: AppDaemon
 Python Apps and Dashboard using AppDaemon 4.x for Home Assistant
-----------------------------------------------------------
 Add-on version: 0.17.6
 You are running the latest version of this add-on.
 System: Home Assistant OS 15.2  (amd64 / qemux86-64)
 Home Assistant Core: 2025.6.3
 Home Assistant Supervisor: 2025.06.2
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service base-addon-banner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service base-addon-log-level: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service base-addon-log-level successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-appdaemon: starting
Looking in indexes: https://pypi.org/simple, https://wheels.home-assistant.io/musllinux-index/
Requirement already satisfied: pydantic in /usr/lib/python3.12/site-packages (2.10.6)
Requirement already satisfied: annotated-types>=0.6.0 in /usr/lib/python3.12/site-packages (from pydantic) (0.7.0)
Requirement already satisfied: pydantic-core==2.27.2 in /usr/lib/python3.12/site-packages (from pydantic) (2.27.2)
Requirement already satisfied: typing-extensions>=4.12.2 in /usr/lib/python3.12/site-packages (from pydantic) (4.14.0)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
s6-rc: info: service init-appdaemon successfully started
s6-rc: info: service appdaemon: starting
s6-rc: info: service appdaemon successfully started
s6-rc: info: service legacy-services: starting
[11:50:48] INFO: Starting AppDaemon...
s6-rc: info: service legacy-services successfully started
2025-06-30 11:50:51.254752 INFO AppDaemon: ------------------------------------------------------------
2025-06-30 11:50:51.255078 INFO AppDaemon: AppDaemon Version 4.5.11 starting
2025-06-30 11:50:51.255156 INFO AppDaemon: ------------------------------------------------------------
2025-06-30 11:50:51.255220 INFO AppDaemon: Python version is 3.12.11
2025-06-30 11:50:51.255468 INFO AppDaemon: Configuration read from: /config/appdaemon.yaml
2025-06-30 11:50:51.255588 INFO AppDaemon: Added log: AppDaemon
2025-06-30 11:50:51.255655 INFO AppDaemon: Added log: Error
2025-06-30 11:50:51.255703 INFO AppDaemon: Added log: Access
2025-06-30 11:50:51.255750 INFO AppDaemon: Added log: Diag
2025-06-30 11:50:51.256289 INFO AppDaemon: Using /config/apps as app_dir
2025-06-30 11:50:51.257126 INFO AppDaemon: Loading Plugin HASS using class HassPlugin from module appdaemon.plugins.hass.hassplugin
2025-06-30 11:50:51.257330 INFO HASS: HASS Plugin initialization complete
2025-06-30 11:50:51.262351 INFO AppDaemon: Initializing HTTP
2025-06-30 11:50:51.262669 INFO AppDaemon: Using 'ws' for event stream
2025-06-30 11:50:51.262987 INFO AppDaemon: HTTP Listening on port 5050
2025-06-30 11:50:51.265416 INFO AppDaemon: Starting API
2025-06-30 11:50:51.267170 INFO AppDaemon: Starting Admin Interface
2025-06-30 11:50:51.267469 INFO AppDaemon: Starting Dashboards
2025-06-30 11:50:51.274325 INFO AppDaemon: Starting Apps with 1 workers and 1 pins
2025-06-30 11:50:51.275949 INFO HASS: Connected to Home Assistant 2025.6.3 with aiohttp websocket
2025-06-30 11:50:51.276458 INFO AppDaemon: Running on port 5050
2025-06-30 11:50:51.276573 INFO AppDaemon: Waiting for plugins to be ready
2025-06-30 11:50:51.276957 INFO HASS: Authenticated to Home Assistant 2025.6.3
2025-06-30 11:50:51.279038 INFO HASS: Waiting for Home Assistant to start
2025-06-30 11:50:51.280712 INFO AppDaemon: All plugins ready
2025-06-30 11:50:51.281408 INFO AppDaemon: Scheduler running in realtime
2025-06-30 11:50:51.295386 INFO AppDaemon: New app config: hello_world
2025-06-30 11:50:51.301478 INFO HASS: Completed initialization in 32.043ms
2025-06-30 11:50:51.302627 INFO AppDaemon: Starting apps: {'hello_world'}
2025-06-30 11:50:51.304059 INFO AppDaemon: Calling initialize() for hello_world
2025-06-30 11:50:51.328855 INFO hello_world: Hello from AppDaemon
2025-06-30 11:50:51.329358 INFO hello_world: You are now ready to run Apps!
2025-06-30 11:50:51.329884 INFO AppDaemon: App initialization complete
2025-06-30 11:50:51.302627 INFO AppDaemon: Starting apps: {'hello_world'}
2025-06-30 11:50:51.304059 INFO AppDaemon: Calling initialize() for hello_world
2025-06-30 11:50:51.328855 INFO hello_world: Hello from AppDaemon
2025-06-30 11:50:51.329358 INFO hello_world: You are now ready to run Apps!
2025-06-30 11:50:51.329884 INFO AppDaemon: App initialization complete
2025-06-30 11:50:51.329884 INFO AppDaemon: App initialization complete

Et … rien ne se passe.
J’imagine que j’ai mal placé un fichier de configuration ou raté une étape mais malgré avoir lu plusieurs fois la documentation je n’arrive pas à trouver mon erreur.

En vous remerciant par avance de l’aide que vous pourrez m’apporter,
Bonne journée

Bonjour,

Le fichier appdaemon.yaml ne doit pas être dans /config de HA mais de l’addon AppDaemon.
Donc dans /addon_configs/a0d7b954_appdaemon. Il existe deja un fichier normalement.

Une fois corrigé, tu risques d’avoir des erreurs car dans ton apps.yaml tu déclares un log CoversManager que tu n’as pas déclaré dans appdaemon.yaml, tu devrais avoir quelque chose comme ca :

CoversManager:
    name: CoversManager
    filename: /config/logs/CoversManager.log

Avec ces corrections et un redémarrage de l’addon ca devrait être ok.

Bonjour,
Merci pour cette réponse.

Citation[quote=« mguyard, post:73, topic:42673 »]
Le fichier appdaemon.yaml ne doit pas être dans /config de HA mais de l’addon AppDaemon.
Donc dans /addon_configs/a0d7b954_appdaemon. Il existe deja un fichier normalement.
[/quote]

Le problème c’est que je n’ai pas ce fichier. Mon arborescence dans Visual Code Server est la suivante:

Dois-je créer ce dossier et y basculer certains fichier ?

Tu es dans /config de HA.
Le addon_config est au même niveau d’arborescence que /config.

Il suffit de demander à vscode d’ouvrir le dossier /addon_configs/a0d7b954_appdaemon

Du coup j’ai corrigé le fichier appdaemon.yaml comme ceci:

appdaemon:
  app_dir: /homeassistant/appdaemon/apps
  latitude: XXX
  longitude: XXX
  elevation: 11
  time_zone: Europe/Paris
  plugins:
    HASS:
      type: hass
      ha_url: http://homeassistant.local:8123

http:
  url: http://127.0.0.1:5050

admin:

api:

hadashboard:

logs:
  main_log:
    filename: /config/logs/appdaemon.log
  error_log:
    filename: /config/logs/error.log
CoversManager:
    name: CoversManager
    filename: /config/logs/CoversManager.log

Concernant le dossier /addon_configs/a0d7b954_appdaemon, je n’arrive pas à le trouver.
J’ai bien un fichier addons_config dans /config mais c’est tout.

Voici l’arborescence au complet:

Je ne dois vraiment pas chercher au bon endroit.

Je te confirme tu ne cherche pas au bon endroit :joy:
Il faut remonter d’un niveau par rapport à ce que tu montres. Tu ne peux le faire qu’en faisant dans vscode File > Open et mettre le dossier que je t’ai indiqué

Effectivement,
désolé de t’avoir fait répété, je n’avais pas compris la procédure et je pensais que tout apparaissait dans /config.
J’ai bien trouvé le fichier existant que j’ai modifié avec les paramètres que j’avais rentré dans le précédent mal placé.
J’ai redémarré AppDaemon mais il ne se lance pas.

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service base-addon-banner: starting
-----------------------------------------------------------
 Add-on: AppDaemon
 Python Apps and Dashboard using AppDaemon 4.x for Home Assistant
-----------------------------------------------------------
 Add-on version: 0.17.6
 You are running the latest version of this add-on.
 System: Home Assistant OS 15.2  (amd64 / qemux86-64)
 Home Assistant Core: 2025.6.3
 Home Assistant Supervisor: 2025.06.2
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service base-addon-banner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service base-addon-log-level: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service base-addon-log-level successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-appdaemon: starting
Looking in indexes: https://pypi.org/simple, https://wheels.home-assistant.io/musllinux-index/
Requirement already satisfied: pydantic in /usr/lib/python3.12/site-packages (2.10.6)
Requirement already satisfied: annotated-types>=0.6.0 in /usr/lib/python3.12/site-packages (from pydantic) (0.7.0)
Requirement already satisfied: pydantic-core==2.27.2 in /usr/lib/python3.12/site-packages (from pydantic) (2.27.2)
Requirement already satisfied: typing-extensions>=4.12.2 in /usr/lib/python3.12/site-packages (from pydantic) (4.14.0)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
s6-rc: info: service init-appdaemon successfully started
s6-rc: info: service appdaemon: starting
s6-rc: info: service appdaemon successfully started
s6-rc: info: service legacy-services: starting
[15:14:57] INFO: Starting AppDaemon...
s6-rc: info: service legacy-services successfully started
s6-rc: info: service legacy-services: stopping
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service appdaemon: stopping
[15:14:59] INFO: Service AppDaemon exited with code 256 (by signal 15)
s6-rc: info: service appdaemon successfully stopped
s6-rc: info: service init-appdaemon: stopping
s6-rc: info: service init-appdaemon successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service base-addon-log-level: stopping
s6-rc: info: service base-addon-log-level successfully stopped
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service base-addon-banner: stopping
s6-rc: info: service base-addon-banner successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service legacy-services: starting
[15:14:49] INFO: Starting AppDaemon...
s6-rc: info: service legacy-services successfully started
Traceback (most recent call last):
  File "/usr/bin/appdaemon", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/usr/lib/python3.12/site-packages/appdaemon/__main__.py", line 408, in main
    admain.main()
  File "/usr/lib/python3.12/site-packages/appdaemon/__main__.py", line 345, in main
    self.logging = Logging(log_cfg, args.debug)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/appdaemon/utils.py", line 1039, in __call__
    cls._instances[cls] = super().__call__(*args, **kwargs)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/appdaemon/logging.py", line 311, in __init__
    handler = RotatingFileHandler(
              ^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/logging/handlers.py", line 155, in __init__
    BaseRotatingHandler.__init__(self, filename, mode, encoding=encoding,
  File "/usr/lib/python3.12/logging/handlers.py", line 58, in __init__
    logging.FileHandler.__init__(self, filename, mode=mode,
  File "/usr/lib/python3.12/logging/__init__.py", line 1231, in __init__
    StreamHandler.__init__(self, self._open())
                                 ^^^^^^^^^^^^
  File "/usr/lib/python3.12/logging/__init__.py", line 1263, in _open
    return open_func(self.baseFilename, self.mode,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/config/logs/appdaemon.log'
[15:14:52] INFO: Service AppDaemon exited with code 1 (by signal 0)
s6-rc: info: service legacy-services: stopping
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service appdaemon: stopping
s6-rc: info: service appdaemon successfully stopped
s6-rc: info: service init-appdaemon: stopping
s6-rc: info: service init-appdaemon successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service base-addon-log-level: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service base-addon-log-level successfully stopped
s6-rc: info: service base-addon-banner: stopping
s6-rc: info: service base-addon-banner successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped

J’avais créer un dossier logs placé dans /config
L’erreur viendrait du fichier appdaemon.log qui n’existerai pas ou serait mal placé
Dois-je le créer manuellement ou celui-ci est censé se créer tout seul?

Encore merci pour ta patience

Pour AppDaemon, /config c’est son propre dossier de config.
Donc c’est en fait le /addon_config/xx_appdaemon

Donc au même endroit que ton AppDaemon.yaml tu dois avoir un dossier logs avec le fichier AppDaemon.log.

Il me semble qu’il est créé tout seul

Bonjour,
j’ai réussi a le démarrer mais j’ai toujours des erreurs.
J’ai tenté de simplifier au maximum mon fichier de configuration mais cela ne fonctionne toujours pas.
Le fichier de configuration apps.yaml:

CoversManager:
    module: covers_manager
    class: CoversManager
    use_dictionary_unpacking: true
    log: CoversManager
    log_level: DEBUG
    config:
        common:
          locker: "binary_sensor.presence_invite_bureau" 
          adaptive:
              enable: true
          temperature:
            indoor:
              sensor: "sensor.capteur_temperature_bureau_temperature"
              setpoint: 23
        outdoor:
              sensor: "sensor.outdoor_temp"
              high_temperature: 28
        covers:
          cover.oximo_io_volet_fenetre_bureau:
            window_heigh : 210 
            window_azimuth: 85
            positional:
              action: true
              status: true
            fov:
              left: 15
              right: 90

Le journal d’AppDaemon:

-----------------------------------------------------------
 Add-on: AppDaemon
 Python Apps and Dashboard using AppDaemon 4.x for Home Assistant
-----------------------------------------------------------
 Add-on version: 0.17.6
 You are running the latest version of this add-on.
 System: Home Assistant OS 15.2  (amd64 / qemux86-64)
 Home Assistant Core: 2025.6.3
 Home Assistant Supervisor: 2025.06.2
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service base-addon-banner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service base-addon-log-level: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service base-addon-log-level successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-appdaemon: starting
Looking in indexes: https://pypi.org/simple, https://wheels.home-assistant.io/musllinux-index/
Requirement already satisfied: pydantic in /usr/lib/python3.12/site-packages (2.10.6)
Requirement already satisfied: annotated-types>=0.6.0 in /usr/lib/python3.12/site-packages (from pydantic) (0.7.0)
Requirement already satisfied: pydantic-core==2.27.2 in /usr/lib/python3.12/site-packages (from pydantic) (2.27.2)
Requirement already satisfied: typing-extensions>=4.12.2 in /usr/lib/python3.12/site-packages (from pydantic) (4.14.0)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
s6-rc: info: service init-appdaemon successfully started
s6-rc: info: service appdaemon: starting
s6-rc: info: service appdaemon successfully started
s6-rc: info: service legacy-services: starting
[16:22:54] INFO: Starting AppDaemon...
s6-rc: info: service legacy-services successfully started

Le fichier AppDaemon.log:

2025-07-01 16:22:57.308732 INFO AppDaemon: ------------------------------------------------------------
2025-07-01 16:22:57.309158 INFO AppDaemon: AppDaemon Version 4.5.11 starting
2025-07-01 16:22:57.309296 INFO AppDaemon: ------------------------------------------------------------
2025-07-01 16:22:57.309417 INFO AppDaemon: Python version is 3.12.11
2025-07-01 16:22:57.309697 INFO AppDaemon: Configuration read from: /config/appdaemon.yaml
2025-07-01 16:22:57.309876 INFO AppDaemon: Added log: AppDaemon
2025-07-01 16:22:57.310006 INFO AppDaemon: Added log: Error
2025-07-01 16:22:57.310144 INFO AppDaemon: Added log: Access
2025-07-01 16:22:57.310254 INFO AppDaemon: Added log: Diag
2025-07-01 16:22:57.310361 INFO AppDaemon: Added log: CoversManager
2025-07-01 16:22:57.310934 INFO AppDaemon: Using /homeassistant/appdaemon/apps as app_dir
2025-07-01 16:22:57.311781 INFO AppDaemon: Loading Plugin HASS using class HassPlugin from module appdaemon.plugins.hass.hassplugin
2025-07-01 16:22:57.312007 INFO HASS: HASS Plugin initialization complete
2025-07-01 16:22:57.314847 INFO AppDaemon: Initializing HTTP
2025-07-01 16:22:57.315074 INFO AppDaemon: Using 'ws' for event stream
2025-07-01 16:22:57.315330 INFO AppDaemon: HTTP Listening on port 5050
2025-07-01 16:22:57.316692 INFO AppDaemon: Starting API
2025-07-01 16:22:57.317848 INFO AppDaemon: Starting Admin Interface
2025-07-01 16:22:57.318064 INFO AppDaemon: Starting Dashboards
2025-07-01 16:22:57.327168 INFO AppDaemon: Starting Apps with 1 workers and 1 pins
2025-07-01 16:22:57.328503 INFO AppDaemon: Running on port 5050
2025-07-01 16:22:57.328718 INFO AppDaemon: Waiting for plugins to be ready
2025-07-01 16:22:57.329879 INFO HASS: Connected to Home Assistant 2025.6.3 with aiohttp websocket
2025-07-01 16:22:57.330657 INFO HASS: Authenticated to Home Assistant 2025.6.3
2025-07-01 16:22:57.331390 INFO HASS: Waiting for Home Assistant to start
2025-07-01 16:22:57.334820 INFO AppDaemon: All plugins ready
2025-07-01 16:22:57.341801 INFO AppDaemon: Scheduler running in realtime
2025-07-01 16:22:57.349127 INFO HASS: Completed initialization in 29.915ms
2025-07-01 16:22:57.382655 INFO AppDaemon: New app config: CoversManager
2025-07-01 16:22:57.460891 INFO AppDaemon: Starting apps: {'CoversManager'}
2025-07-01 16:22:57.462458 INFO AppDaemon: Calling initialize() for CoversManager
2025-07-01 16:22:57.463758 WARNING AppDaemon: App 'CoversManager' failed to start
2025-07-01 16:22:57.471530 INFO AppDaemon: App initialization complete

et enfin le fichier appDaemon_error.log:


2025-07-01 16:22:57.464262 ERROR Error: =====  Failed to start 'CoversManager'  ===================================
2025-07-01 16:22:57.464532 ERROR Error: AppStartFailure: App 'CoversManager' failed to start
2025-07-01 16:22:57.465353 ERROR Error:   InitializationFail: initialize() method failed for app 'CoversManager'
2025-07-01 16:22:57.465916 ERROR Error:     AttributeError: 'NoneType' object has no attribute 'sensor'
2025-07-01 16:22:57.467315 ERROR Error:       File "/usr/lib/python3.12/site-packages/appdaemon/app_management.py", line 409, in start_app
2025-07-01 16:22:57.467609 ERROR Error:         await self.initialize_app(app_name)
2025-07-01 16:22:57.467828 ERROR Error:       File "/usr/lib/python3.12/site-packages/appdaemon/app_management.py", line 290, in initialize_app
2025-07-01 16:22:57.468045 ERROR Error:         await utils.run_in_executor(self, init_func)
2025-07-01 16:22:57.468245 ERROR Error:       File "/usr/lib/python3.12/site-packages/appdaemon/utils.py", line 561, in run_in_executor
2025-07-01 16:22:57.468444 ERROR Error:         return await future
2025-07-01 16:22:57.468651 ERROR Error:                ^^^^^^^^^^^^
2025-07-01 16:22:57.468866 ERROR Error:       File "/usr/lib/python3.12/concurrent/futures/thread.py", line 59, in run
2025-07-01 16:22:57.469066 ERROR Error:         result = self.fn(*self.args, **self.kwargs)
2025-07-01 16:22:57.469232 ERROR Error:                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-07-01 16:22:57.469501 ERROR Error:       File "/homeassistant/appdaemon/apps/appdaemon-coversmanager/apps/CoversManager/covers_manager.py", line 21, in initialize
2025-07-01 16:22:57.469695 ERROR Error:         config = ConfigValidator.Config(**self.args["config"])
2025-07-01 16:22:57.469879 ERROR Error:                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-07-01 16:22:57.470080 ERROR Error:       File "/usr/lib/python3.12/site-packages/pydantic/main.py", line 214, in __init__
2025-07-01 16:22:57.470215 ERROR Error:         validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
2025-07-01 16:22:57.470432 ERROR Error:                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-07-01 16:22:57.470693 ERROR Error:       File "/homeassistant/appdaemon/apps/appdaemon-coversmanager/apps/CoversManager/CoversManagerLibs/config_validator.py", line 276, in checks
2025-07-01 16:22:57.470852 ERROR Error:         if self.common.lux.sensor is None and (
2025-07-01 16:22:57.471070 ERROR Error:            ^^^^^^^^^^^^^^^^^^^^^^
2025-07-01 16:22:57.471240 ERROR Error: ===========================================================================

Merci d’avance pour l’aide qui pourrait m’être apporté,

Le common opening et closing type est par défaut à Lux.
Mais tu n’as pas configuré le lux sensor.

Si tu veux pas utilisé lux, il faut changer le type pour Time.