Créer un script qui allume les munières entre la tombée du jour et 23h

Mon problème

je debute avec Home Assistant et j’ai du mal a faire un script pour allumer des lumieres entre la tombée du jour et 23h. L’idée est de simuler une presence lorsque l’on est en vacances

Apres pas mal de recherches, ce script me semblait avoir une bonne tête mais visiblement quelquechose m’echappe car je n’arrive pas a le faire accepter par home assistant en mode YAML

alias: Lumieres vacances
sequence: []
mode: single
icon: mdi:lightbulb
sequence:
  - condition: and
    conditions:
      - condition: sun
        after: sunset
      - condition: time
        after: 'sunset'
        before: '23:00:00'
    - type: turn_on
      device_id: 3a69a64026c23d8bfc94e503b7ee63e2
      entity_id: switch.sonoff_10002c0d9c
      domain: switch
    - type: turn_on
      device_id: c17e2abf63f31279b4934f15c37b922f
      entity_id: switch.sonoff_10003edfd7
      domain: switch
  - condition: time
    after: '23:00:00'
  - type: turn_off
    device_id: 3a69a64026c23d8bfc94e503b7ee63e2
    entity_id: switch.sonoff_10002c0d9c
    domain: switch
  - type: turn_off
    device_id: c17e2abf63f31279b4934f15c37b922f
    entity_id: switch.sonoff_10003edfd7
    domain: switch
mode: single
icon: mdi:shield-lock

Salut…
Tu veux dire automatisation et pas script, non ?

Avec une automatisation, tu pourrais avoir ce genre de code

alias: Allumer
description: ""
trigger:
  - platform: sun
    event: sunset
    offset: "+2:00:00"
condition: []
action:
    - type: turn_on
      device_id: 3a69a64026c23d8bfc94e503b7ee63e2
      entity_id: switch.sonoff_10002c0d9c
      domain: switch

Et tu en fais une deuxième pour éteindre

alias: Allumer
description: ""
trigger:
  - platform: sun
    event: sunset
    offset: "+4:00:00"
condition: []
action:
    - type: turn_off
      device_id: 3a69a64026c23d8bfc94e503b7ee63e2
      entity_id: switch.sonoff_10002c0d9c
      domain: switch
1 « J'aime »

Bonjour,

J’ai fait un truc similaire chez moi. J’ai une automatisation pour allumer :

alias: Lampe salon random on After sunset
description: ""
trigger:
  - platform: sun
    event: sunset
    offset: "-01:00:00"
condition: []
action:
  - delay: "{{ range(0, 20*60+1)|random }}"
  - type: turn_on
    device_id: 401cd39f914a0d131b004ece079c9154
    entity_id: switch.tz3000_wamqdr3f_ts011f_switch
    domain: switch
mode: single

En gros, une heure avant le coucher de soleil, je déclenche mon automatisation et j’applique un délai aléatoire de 0~20 minutes avant d’allumer la lampe.

Ensuite, j’ai une autre automatisation dans le même genre pour éteindre :

alias: Lampe salon random off
description: ""
trigger:
  - platform: time
    at: "22:50:00"
condition: []
action:
  - delay: "{{ range(0, 20*60+1)|random }}"
  - type: turn_off
    device_id: 401cd39f914a0d131b004ece079c9154
    entity_id: switch.tz3000_wamqdr3f_ts011f_switch
    domain: switch
mode: single

Là, pareil. Je déclenche à 22h50, et j’applique un délai random de 0~20 minutes avant d’éteindre.

A adapter, bien sûr. mais ça permet de ne jamais allumer et éteindre exactement à la même heure.

Merci, je vais regarder!

Pour être précis, je ne veux pas que cette automatisation tourne 365j par an, seulement quand je le decide, cad en vacances. C’est faisable j’imagine, mais le comment n’est pas encore tres clair pour moi :sweat_smile:

Une automatisation peut être activée ou désactivée.
Soit par une autre automatisation, soit par un script, ou encore dans une scene.
Par exemple, j’ai une scène que j’utilise pour rendre inactives mes automatisations de chauffage en été:

scene:  

#############################################################
####  Scene pour passer les automations chauffage à off  ####
#############################################################
  - name: automation_chauff_off
    entities:
      automation.chauffage_presences_family:
        state: 'off'
      automation.reglage_chauffage_pour_nuit:
        state: 'off'
      automation.reglage_chauffage_pour_le_matin:
        state: 'off'
      automation.set_chauff_present_eco:
        state: 'off'
      automation.reglage_chauffage_confort:
        state: 'off'

Cette scène est appelée dans une automatisation par le service scene.turn_on

  - service: scene.turn_on
    data: {}
    target:
      entity_id: scene.automation_chauff_off
2 « J'aime »

Hello,

Tu peux trouver des blueprint ou des extensions hacs qui répondent à ta demande.

Exemple :

2 « J'aime »

Merci!

je regarde tout ca demain

1 « J'aime »

Pour gérer les éclairages je me sert de ces deux scripts AppDaemon et ça simplifie au max !

j’aimerais « coder moi meme » pour comprendre HA au lieu d’utiliser des module HACS pour le moment :sweat_smile:

un bête script dans ce style marcherait?
je le declenche par appui sur un bouton quand le pars
je le stop a mon retour (mais je ne sais pas encore comment^^)

alias: simulateur presence vacances
sequence:
  - wait_template: "{{ is_state('sun.sun', 'below_horizon') }}"
  - type: turn_on
    device_id: c17e2abf63f31279b4934f15c37b922f
    entity_id: switch.sonoff_10003edfd7
    domain: switch
  - wait_template: "{{ now().hour >= 23 }}"
  - type: turn_off
    device_id: c17e2abf63f31279b4934f15c37b922f
    entity_id: switch.sonoff_10003edfd7
    domain: switch
mode: single

si ca ne marche pas, quel est la faute de raisonnement?
Pas moyen d’arreter un script qui tourne? autre raison?

Sinon l’idée c’est quoi?
un truc dans ce style?

  • bouton1 quand je pars en vacances: automatisation1 turn on
  • bouton2 quand je reviens de vacances: automatisation2 turn off
  • automatisation: allume 1 lampe du couché du soleil a 23h

Salut

Techniquement ça doit marcher mais par exemple l’hiver ton script attends pendant plusieurs heures … à rien faire. ça sert à rien de monopoliser des ressources (un thread, même s’il ne fait rien)
Perso pour faire ça 2 automatisations toutes connes :

  • 1 à la tombée de la nuit
  • 1 à 23h

Si tu veux t’amuser à gérer ton bouton (chui là /pas là), tu ajoutes un condition (bouton = on) dans les 2 automatisations ou bien tu actives/désactives les automatisations.
C’est à mon avis bien mieux que de faire ça par un script

fait

alias: lumieres_vacances_on
description: ""
trigger:
  - platform: time
    at: sensor.sun_next_setting
condition: []
action:
  - type: turn_on
    device_id: 3a69a64026c23d8bfc94e503b7ee63e2
    entity_id: switch.sonoff_10002c0d9c
    domain: switch
  - type: turn_on
    device_id: c17e2abf63f31279b4934f15c37b922f
    entity_id: switch.sonoff_10003edfd7
    domain: switch
mode: single

et

alias: lumiere_vacances_off
description: ""
trigger:
  - platform: time
    at: "23:00:00"
condition: []
action:
  - type: turn_off
    device_id: 3a69a64026c23d8bfc94e503b7ee63e2
    entity_id: switch.sonoff_10002c0d9c
    domain: switch
  - type: turn_off
    device_id: c17e2abf63f31279b4934f15c37b922f
    entity_id: switch.sonoff_10003edfd7
    domain: switch
mode: single

la, je suis largué…
mon bouton n’a pas d’etat, ou je ne vois pas ou le prendre (il n’est pas en toggle car il appelle un script qui fait plein d’autres trucs commer armer l’alarme etc

  - type: button
    tap_action:
      action: call-service
      service: script.vacances
      target: {}
    hold_action:
      action: none
    icon: mdi:shield-lock
    name: bouton_vacances

je n’ai pas trouvé… donc j’ai tenté chatGPT et il a raison? (ca me parait bizarre)

Pour activer une automatisation sur l’appui d’un bouton et la désactiver sur l’appui d’un autre bouton dans Home Assistant, vous pouvez utiliser deux entités « input_boolean » et une automatisation qui surveille l’état de ces entités.

je suis un peu perdu en lisant ca :sweat_smile:
c’est ce qui m’avait fait partir sur un script et pas une automatisation

Les boutons d’une card c’est bien mais ça n’a pas toutes les fonctions des entités de HA…
switch/input_boolean ça permet de conserver un état. Et cette entité sert pour tout le reste (déclenchement d’automatisation/condition/carte etc)
Esthétiquement si tu veux changer le look de l’entité pour mettre un bouton (un peu plus customizable), ça marche aussi . Le bouton appele le service (toggle par ex) sur l’entité

pfff c’est chaud quand on débute :see_no_evil:

donc j’ai ajouté ça dans mon configuration.yaml

input_boolean:
  en_vacances:
    name: En Vacances
    initial: off

ensuite dans mon script appelé par le bouton que je presse quand je pars

alias: vacances
sequence:
  - service: input_boolean.turn_on
    entity_id: input_boolean.en_vacances

et dans mon script appelé par le bouton que je presse quand je reviens

alias: retour
sequence:
  - service: input_boolean.turn_off
    entity_id: input_boolean.en_vacances

j’ai 2 automatisations

alias: lumieres_vacances_on
description: ""
trigger:
  - platform: time
    at: sensor.sun_next_setting
condition:
  - condition: state
    entity_id: input_boolean.en_vacances
    state: "on"
action:
  - type: turn_on
    device_id: 3a69a64026c23d8bfc94e503b7ee63e2
    entity_id: switch.sonoff_10002c0d9c
    domain: switch
mode: single

et

alias: lumiere_vacances_off
description: ""
trigger:
  - platform: time
    at: "23:00:00"
condition:
  - condition: state
    entity_id: input_boolean.en_vacances
    state: "on"
action:
  - type: turn_off
    device_id: 3a69a64026c23d8bfc94e503b7ee63e2
    entity_id: switch.sonoff_10002c0d9c
    domain: switch
mode: single

ca vous parait correct et devrait marcher?

Je suis HS, je regarderais ca demain

Comme ça à première vue que ça semble correct.
Plus simple quand même au lieu des 2 scripts passe par le ‹ tap_action › qui serait un ‹ call_service › de type ‹ toogle › sur ton ‹ input_boolean ›
Comme ça à chaque clique ça inverse

type: button
name: Mode vacances
show_state: false
tap_action:
  action: call-service
  service: input_boolean.toggle
  data:
    entity_id: input_boolean.en_vacances