J'ai un soucis avec le soleil

Bonjour,

Description de la situation :

  • le matériel :
    – Sur une multiprise classique, j’ai la tv, la chaine hifi, le magnétoscope.
    – A proximité, j’ai un éclairage d’ambiance non branché sur la multiprise

  • utilisation :
    – quand je vais me coucher ou que je quitte le domicile je « switch off » cette multiprise
    – quand je me lève ou que je rentre au domicile je « switch on » cette multiprise
    – s’il fait nuit et que je regarde la tv, j’allume l’éclairage durant cette période

  • précisions :
    – si j’écoute de la musique je ne suis pas forcément être dans la pièce, donc pas de lumière
    – si j’enregistre la tv avec le magnétoscope, je ne « switchoff » pas la multiprise

Il y a une prise intelligente (on / off / mesure du courant) sur la tv et sur la lumière.

Ce que j’essaye de faire :

  • si je regarde la tv :
    – de jour, pas de lumière
    – de nuit, lumière
    – allumage ou extinction automatique de la lumière si je regarde la TV et que la nuit arrive ou s’en va.

Mon problème :
Je découvre Home Assistant et j’essaye les automatismes.

Quand on passe du visuel à yaml, le nom des prises est remplacé par une chaine alphanumérique.
Par exemple avec l’éditeur visuel, j’ai quelque chose comme :

  • switch.smart_plug_telev_socket_1 pour la télé
  • switch.smart_plug_lamp_socket_1 pour la lampe
    et quand j’ouvre avec yaml ça devient :
  • entity_id: cb78264eac9eijklm2bedb2cddc2a65 pour la télé
  • entity_id: ddb16eabcdef9d021a13b3154e6d2a pour la lampe

Quand on programme dans yaml, il y a plusieurs structures d’écriture ensemble pour faire la même chose. Un peu comme du code séquentielle et POO.

Avec le soleil, il y a de nombreuses infos, lever ou coucher du jour, lever ou coucher du soleil, etc.

Je me base sur la puissance consommée pour savoir si la télé et la lampe sont allumées.

Ce que je suis arrivé à faire progressivement :

  • Si manuellement sur la prise, j’éteins la télé et que la lampe consomme, j’éteins automatiquement la lampe.
  • Si manuellement sur la prise j’allume la télé et que la lampe ne consomme pas, j"allume automatiquement la lampe.

Ca fait 2 automatismes distinctifs.

J’ai voulu simplifier avec le changement de consommation de la télé,
mais je n’ai pas réussi à intégrer la condition
– si la consommation de la lampe != 0.0 W
– alors éteindre
– sinon allumer.

Après j’aurais intégré un test sur la consommation de la télé, pour considérer si elle est en veille ou pas.

Pour que la différence nuit/jour soit prise en compte j’ai utilisé l’évènement sun prochain coucher et sun prochain lever.
Mais ça ne fonctionne qu’au changement d’état.

  • Si la télé est déjà allumée avant que le soleil se couche, la lampe s"allume.
  • Si j’allume la télé après le coucher du soleil, la lampe ne s’allume pas.
  • Si la télé est déjà allumée avant que le soleil se lève, la lampe s’éteint.

Dans mes recherches, j’ai trouvé la position du soleil par rapport à l’horizon.
C’est cette dernière qui a ma préférence, car avec une valeur négative il fait nuit et une valeur positive il fait jour.
Là encore, je n’arrive pas à structurer l’automatisme.
Sur le papier ça fonctionne, et aussi en C avec arduino, un bouton poussoir (pour basculer de jour à nuit) et 2 leds, ça fonctionne aussi.

J’ai lu YAML Ain’t Markup Language (YAML™) revision 1.2.2 , mais il n’y a aucune explication sur les if else and or que l’on retrouve dans des exemples yaml utilisés avec Home Assistant.

Je ne sais que mettre dans le trigger (j’ai envisagé le changement de seconde) et pas encore comment faire une condition sur la position du soleil, la consommation de la télé et de la lampe.

Pour finir :

  • quelle valeur traiter pour la télé quand j’éteins manuellement le multiprise pour éteindre les appareils en veille (télé, hifi, magnétoscope) alors que la prise télé ne communiquera pas ?
  • combien de temps faut-il attendre pour avoir une valeur de la prise télé quand j’allume manuellement le multiprise ?
  • que se passera-t-il lors d’une coupure de courant :
    – en journée,
    – la nuit,
    – commençant le jour et finissant la nuit,
    – commençant la nuit et finissant le jour

Il me semble que tout est là.

Merci du temps passer à me lire et à celui employé à me proposer des explications, les liens ou tuto, des solutions.

Je ne demande pas une solution toute faite, mais à m’aider à comprendre comment le faire bien.

Salut

Met nous peut etre ce que tu as déjà essayé afin de te guidé dans les possible erreur

Bonsoir Bart40140 et merci de votre réponse.

J’étais en train de compléter mon premier message quand vous m’avez répondu.
Il se peut qu’il y ait des éléments de réponse.

Bonsoir,

Voici 4 automatisations que je viens de terminer, non sans mal (alignement des espaces, structure, etc.) :

  • en manuel
alias: télé_lampe_allumer
description: allumer la lampe quand j'allume télé
trigger:
  - type: current
    platform: device
    device_id: prise_télé
    domain: sensor
    above: 10
condition:
  - condition: sun
    after: sunset
    after_offset: "+01:00:00"
    before: sunrise
    before_offset: "-01:00:00"
action:
  - type: turn_on
    device_id: prise_lampe
    domain: switch
mode: single

J’ai ajouté des # pour simplifier, comme l’a suggéré Pulpy-Luke dans le message suivant.

alias: télé_lampe_éteindre
description: éteindre la lampe quand j'éteins télé
trigger:
  - type: current
    platform: device
    device_id: prise_télé
    domain: sensor
    below: 10
condition: []
#condition:
#  - condition: sun
#    after: sunset
#    after_offset: "+01:00:00"
#    before: sunrise
#    before_offset: "-01:00:00"
action:
  - type: turn_off
    device_id: prise_lampe
    domain: switch
mode: single
  • en automatique :
alias: télé_lampe_jour-nuit
description: allume la lampe si la télé est allumé quand le soleil se couche
trigger:
  - platform: sun
    event: sunset
    offset: "+1:0:0"
condition:
  - type: is_current
    condition: device
    device_id: prise_télé
    domain: sensor
    above: 10
action:
  - type: turn_on
    device_id: prise_lampe
    domain: switch
mode: single
alias: télé_lampe_nuit-jour
description: éteint la lampe si la télé est allumé quand le soleil se lève
trigger:
  - platform: sun
    event: sunrise
    offset: "-1:0:0"
condition:
  - type: is_current
    condition: device
    device_id: prise_télé
    domain: sensor
    above: 10
  - condition: device
    type: is_on
    device_id: prise_lampe
    domain: light
action:
  - type: turn_off
    device_id: prise_lampe
    domain: switch
mode: single

Le mode manuel, quand il fait nuit :

  • si j’appuie sur le bouton de la prise (ou que je mette la télé en veille), fonctionne et pour les 2 changements, j’ai un délai d’environ 30 secondes avant que la lampe réagisse.
  • si je coupe l’alimentation au niveau de la multiprise, la lampe ne s’éteint pas (je n’ai pas attendu plus de 30 minutes).

Je n’ai pas encore testé le mode manuel quand il fait jour.

Pour le mode automatique, je n’ai pas encore testé en « live ».

Quand je suis dans Paramètres / Automatisations et que je clique sur Exécuter peu importe les conditions, seule l’action est exécutée.

Est-ce qu’il manque quelque chose dans mes automatismes ?
Pourquoi n’ai-je pas les réactions attendues ?

Salut,

Remplace les device_id et entity_id par les noms réels …
Les 2 ça fait doublons et en plus c’est pas lisible.

Là comme ça ça semble cohérent, partage les traces

Là par contre, je vois pas bien l’intérêt de vérifier les conditions solaires.
Si tu éteins la TV, tu eteins la lampe, et puis c’est tout. Si la lampe est allumée, et s’eteindra, si elle est déjà éteinte, ça ne fera rien. Il faut rester simple
Et du coup ça fait doublon avec

Là aussi des traces pour y voir plus clair, ça serai plus facile

Bonsoir Pulpy-Luke,

Qu’est-ce qu’une trace ?

J’ai saisi les prises par leur nom dans l’éditeur graphique, et j’ai recopié les automatismes depuis l’éditeur yaml.
Dans le code du précédent post, je vais modifier les id alphanumériques par un nom explicite.

Je teste le soleil et la télé pour : allumage ou extinction automatique de la lumière si je regarde la TV et que la nuit arrive ou s’en va :

  • il fait jour :
    – je ne regarde pas la télé : lampe éteinte
    – je regarde la télé : lampe éteinte
  • passage du jour à la nuit :
    – je ne regarde pas la télé : lampe éteinte
    – je regarde déjà la télé : lampe s’allume
  • il fait nuit :
    – je ne regarde pas la télé : lampe éteinte
    – je regarde la télé : lampe allumée
  • passage de la nuit au jour :
    – je ne regarde pas la télé : lampe éteinte
    – je regarde déjà la télé : lampe s’éteint

Donc si je regarde la télé et qu’il fait nuit : lampe est allumée.

Dans mon esprit, tester une condition utilise moins de ressource que de faire inutilement une action.
Il est vrai que (il y a très longtemps) j’ai appris à programmer en optimisant.
Par exemple, la condition « if » est celle qui sera vrai le plus souvent, afin de trouver tout de suite les instructions et ne pas faire le saut jusqu’au « else ».
J’ai quand même mis en commentaire le test inutile pour éteindre la lampe quand j’éteins la télé.

Salut

Regarde en haut à droite de tes automatisations : historique d’execution

Comme ça je comprends que le déclencheur c’est le soleil… Pour moi c’est pas suffisant…
Par exemple :

  • il fait déjà nuit, tu allumes la TV, que doit-il se passer ?
  • idem, il fait nuit, tu éteins la TV, que doit-il se passer ?
  • on bascule en nuit, la TV n’est pas allumé, la lampe est allumée, que doit-il se passer ?

Pour moi, tu devrais avoir 4 automatisations avec les déclencheurs suivants:

  • Déclencheur: Nuit vers jour. Condition: SI TV allumée. Action: éteindre la lampe
  • Déclencheur: Jour vers Nuit. Condition: SI TV allumée. Action:allumer la lampe
  • Déclencheur: TV off vers On. Condition: SI Nuit. Action:allumer la lampe
  • Déclencheur: TV on vers Off. Action: éteindre la lampe

Oui dans la majorité des cas, c’est vrai sauf que là, ton test pour savoir si la lampe est allumé n’est pas un simple test. Très synthétiquement, il appelle la lampe, attends la réponse, et te retourne l’info. Donc c’est aussi long complexe, que donner l’ordre à la lampe de changer d’état.

Tout à fait d’accord aussi (c’est même une partie de mon boulot ce genre de truc). Mais bon, avant de commencer cette optimisation fine, il faut d’abord avoir un truc à la fois fonctionnel et lisible. Essayer d’'optimiser en phase de création, c’est faire des raccourci qui sont souvent mauvais.

Bonjour Pulpy-Luke,

Merci pour le temps à me répondre.

Il va me falloir lire, s’il existe, Home Assistant pour Les NULS !
Les vidéos YouTube me saoulent, pas moyen de mettre un marque-page pour y revenir rapidement.

Chez moi j’ai fait une « maquette » sur une multiprise à 5 prises.
J’y ai branché 2 prises intelligentes, que j’ai nommées : prise_télé, prise_soleil, et un smart switch nomée prise_spot.
Chacun commande une lampe.

En appuyant sur le bouton prise_soleil ou prise_télé, ça sera plus rapide que d’attendre le coucher/lever de soleil et me déplacer du bureau au salon pour voir si le spot s’allume ou pour éteindre ou allumer la télé.
Manuellement pour la télé et le soleil.
Automatiquement pour le spot.

Le résultat des tests prochainement…

Salut,

ça c’est valable pour tout le monde, pas possible de comprendre du 1er coup un truc avec autant de fonctions

Tu peux faire plus simple :
Dans les outils de dev, si tu selectionne l’entité sun.sun, tu peux y définir un état


Et donc forcer le jour et le nuit.
ça marche pour tout :wink:

Bonsoir,

Au final, il me faut (pour l’instant) 4 automatismes :

  1. quand la télé est allumée en journée et que vient la nuit → allumer la lampe
    • trigger : sunset
    • condition : télé courant
    • action : allume la lampe
  2. quand la télé est allumée la nuit et que vient le jour → éteindre la lampe
    • trigger : sunrise
    • condition : télé courant
    • action : éteint la lampe
  3. quand il fait nuit et que j’allume la télé → allumer la lampe
    • trigger : télé courant
    • condition : sunset
    • action : allume la lampe
  4. quand j’éteins la télé → éteindre la lampe
    • trigger : télé courant
    • condition : aucune (merci Pulpy-Luke)
    • action : éteint la lampe
  5. ou plus, voir plus loin …

J’ai choisi la consommation de la télé au statut on/off car quand la prise télé passe sur on, la télé est en veille et je dois l’allumer avec la télécommande.

Pour le 1. et 2., serait-il possible d’optimiser en une seule procédure car il me semble avoir vu un truc du genre trigger : sun before sunset and sun after sunrise aucune condition et action: if else endif

Donc pour l’instant j’en suis là et bien content.
Même si je suis un peu déçu : il y a 5 secondes d’attente quand c’est le soleil qui commande et 30 à 40 quand c’est la prise télé, je préfèrerais que ce soit l’inverse.
Mais quand même, tout ce temps passé pour ça !

Dans le salon, il y a une multiprise classique, sur laquelle sont aussi branchés le magnétoscope et la chaine hifi.
Dans une démarche écologique, je l’éteins manuellement.
Et là rien ne va plus quand je rallume cette multiprise.
En effet, il faut un certain temps (que je n’ai pas encore mesuré), pour que la prise de la télé soit opérationnelle et envoie des data cohérentes avant que je puisse allumer la télé et que la lampe soit gérée.
J’ai cru voir qu’il y a un état inconnu et un autre indéfini, je pense qu’il va me falloir regarder ça pour la prise télé et mettre un while quelque part !

Puisque j’ai réglé les automatismes avec le soleil, sur ma maquette, je vais utiliser cette prise que je vais mettre entre la prise télé et la multiprise de la maquette. Elle représentera le bouton de la multiprise du salon.

C’est tout pour le moment.

Bien évidemment, tous commentaires, toutes remarques et suggestions pour m’aider à avancer sont les bienvenues.

EDIT : en fait, je vais ouvrir un autre sujet, car ce n’est plus lié au soleil…

Pour optimiser il faut voir les vraies automatisations (copie en yaml)… En pseudo code, là c’est pas faisable

ça c’est fortement dépendant de plein de choses :

  • de la fréquence de rafraichissement des valeurs … typiquement la prise n’envoie pas une valeur toutes les secondes…
  • de la fréquence de recalcul des entités par HA (toutes les minutes au plus long si pas d’évènement lié )

Pas compris comment ça marche. Une multiprise classique, c’est pas connecté.
Toujours est-il que si tu coupes l’alim de la prise connectée, forcement il faut le temps que ça démarre, que ça se reconnecte etc… Dépendant du matériel et de la techno

Hello

Je n’ai pas de soucis avec le soleil car j’habite en Bretagne :grin:

Plaisanterie mise à part, si tu as une télé connectée , il serait peut être plus intéressant de voir si il existe une intégration pour celle-ci et utiliser son état remonté dans HA plutôt que ta prise connectée.

@+

Salut,
tout a fait, mais quand la télé mets du temps a actualiser l’entité c’est un peu chiant.
Ma Philips peut mettre 20-30s a changer d’état contre 3s avec une prise connecté :upside_down_face:

Bonjour Pulpy-Luke

Pour optimiser il faut voir les vraies automatisations (copie en yaml)… En pseudo code, là c’est pas faisable

Voici un premier extrait pour exemple :

trigger:
  - 
condition:
  - condition: sun
    before: sunset
    after: sunrise
action:

Il faut que je retrouve la suite (if then else endif pour action: ) dans le forum pour m’en inspirer.

ça c’est fortement dépendant de plein de choses :

  • de la fréquence de rafraichissement des valeurs … typiquement la prise n’envoie pas une valeur toutes les secondes…
  • de la fréquence de recalcul des entités par HA (toutes les minutes au plus long si pas d’évènement lié )

Toujours est-il que si tu coupes l’alim de la prise connectée, forcement il faut le temps que ça démarre, que ça se reconnecte etc… Dépendant du matériel et de la techno

Voilà un sujet de résolu avant que je ne l’ouvre !

Mon matériel est une box tv x96mini+ [X96 min+ : ai-je bien installer Home Assistant sur cette box TV Android? - #9 par lente_reflexion]

Bonjour Krull56

Je n’ai pas de soucis avec le soleil car j’habite en Bretagne :grin:

Fort heureusement, la Bretagne est assez loin du cercle polaire, pour avoir des jours et des nuits.

Plaisanterie mise à part, si tu as une télé connectée , il serait peut être plus intéressant de voir si il existe une intégration pour celle-ci et utiliser son état remonté dans HA plutôt que ta prise connectée.

Ma télé n’a pas la technologie pour être connectée. Tout juste un port usb pour une clé de 8Go maxi.
Si elle l’était, je l’aurais signalé dans le descriptif.

Pareil pour le spot, l’ampoule n’est pas connectée, elle est blanche tout simplement.
Si plus tard, je la remplace par une connectée, ça ne devrait pas être difficile à modifier et jouer sur l’intensité lumineuse.
Mais vu le prix d’achat et l’économie réalisée, l’amortissement est sur plusieurs décennies (si elle ne claque pas avant) et statistiquement, dans 15 ans, je ne serai plus de ce monde.

Salut,

Ce que j’évoque c’est le code de tes 4 automatisations…
La partie théorique de HA c’est pas un vrai souci. Remarque à part, je ne vois pas ce que before/after apporte de plus par rapport à d’autres façon habituelle de coder

Merci Pulpy-Luke pour ton implication.

[mode parano : on]
De nos jours, bons nombres d’entreprises, d’administrations, de particuliers, se font pirater.
A part un virus ou un ransomware, le particulier ne sait pas si son ordi héberge à son insu des données sensibles ou fonctionne comme vpn.
D’autres se contentent de diffuser sur le net, toutes les cameras disponibles (jouets, ordinateurs, télévision, surveillance, interphone, etc.).
Aussi je ne veux partager les id où les noms de mes appareils.
[mode parano : off]

Les 4 automatismes n’ont rien de différent que ce que j’ai déjà indiqué :

  • le soleil en trigger pour déclencher au lever et coucher du soleil avec un test sur la consommation de la télé pour interagir avec la lampe
  • la consommation de la télé avec un test sur le soleil pour savoir s’il fait nuit ou jour pour interagir avec la lampe

Au lieu d’avoir 4 automatismes, je pense qu’il est possible d’en avoir qu’un avec 2 trigger et des conditions dans action.
J’ai lu/vu quelques choses qui y ressembleraient, il me faut retrouver ça sur le forum…
De mémoire il y aurait des id créés dans trigger et un choice dans action, mais c’est confus dans ma tête.

Ce qui me manque, c’est la théorie.
On abordera la syntaxe quand j’aurai déjà essayé de faire quelque chose.

[mode prétentieux : on]
« Il vaut mieux apprendre à pécher que recevoir du poisson (ou pire, le voler) ! »
Je sais pêcher, avec un asticot sur l’hameçon au bout d’un fil au bord de l’étang.
Là, je découvre la pêche en mer, le principe est le même, c’est le contexte qu’il me faut appréhender.
Si ça mord et que je reste bredouille, on étudiera la façon de faire.
[mode prétentieux : off]

En attendant, bonne fin de semaine et

Alors partages ton code en anonymisant les id de tes appareils alors…
Il sera impossible de t’aider sur la structure de ton code si tu ne postes pas ton code…

Et ici tu auras toujours une personne bienveillante pour te signaler que dans ton code/capture d’écran tu as laissé une info sensible en clair (nom, adresse, login, id, etc…) pour te proposer de l’effacer ou de la masquer.

Raison de plus pour partager ton code. Ceux qui « savent pêcher en mer » te montrerons pourquoi ta technique ne marche pas, comment l’améliorer, la faire marcher. Ce sera mieux que d’utiliser un montage clef en main dont tu ne comprendrais pas le principe…

[Edit] Joyeuses Pâques aussi.

1 « J'aime »

Salut,

J’ai pas grand chose à ajouter sur le mode parano de plus que @BBE … Mais j’ai quand même pas l’impression que : switch.tv_salon ce soit une info critique à partager … Et puis bon, en tant que modo, j’ai quand même déjà pas mal de trucs accessibles

Par contre, raisonner sur un exemple que l’on interprète des deux cotés (toi et les membres du forul) et qui est encore soumis à ta réécrire, ça me parait bien compliqué

Par ailleurs comme dit ultérieurement, l’optimisation c’est après la phase de validation… Et 2 automatisations au lieu de 4 c’est pas ce que j’appelle de l’optimisation. Et je ne suis convaincu (mais pas tout !) que ça soit plus simple à comprendre/maintenir au début.

1 « J'aime »

Bonjour BBE,

Mon code actuel fonctionne, comme indiqué + haut.

alias: "télé éteint lampe"
description: éteindre la lampe quand j'éteins la télé
trigger:
  - type: current
    platform: device
    device_id: latélé
    domain: sensor
    below: 10
condition: []
action:
  - type: turn_off
    device_id: lalampe
    domain: switch
mode: single

alias: "télé allume lampe"
description: s'il fait nuit allumer le spot quand j'allume écran
trigger:
  - type: current
    platform: device
    device_id: latélé
    domain: sensor
    above: 10
condition:
  - condition: sun
    after: sunset
    before: sunrise
action:
  - type: turn_on
    device_id: lalampe
    domain: switch
mode: single

alias:  "soleil éteint télé"
description: "si je regarde la télé éteint la lampe quand le jour se lève"
trigger:
  - platform: sun
    event: sunset
condition: []
  - type: is_current
    condition: device
    device_id: latélé
    domain: sensor
    above: 10
action:
  - type: turn_on
    device_id: lalampe
    domain: switch
mode: single

alias:  "soleil allume télé"
description: "si je regarde la télé allume la lampe quand la nuit arrive"
trigger:
  - platform: sun
    event: sunrise
condition: []
  - type: is_current
    condition: device
    device_id: latélé
    domain: sensor
    below: 10
action:
  - type: turn_on
    device_id: lalampe
    domain: switch
mode: single

Maintenant, je cherche à aller plus loin en m’inspirant de ce que j’ai pu lire, mais il faut que je retrouve ces exemples et les « codes » proposés dans le forum, que je les assimile et les applique.
Il n’est pas questions de montages clé en main.