Présentation + [Mon Dashboard] BBE

Je me rend compte que je n’ai jamais documenté vraiment cette petite feature de mon dashboard:

Il s’agit d’un coin de mon dashboard où je publie des petits messages façon log.

Du style: lessive à vider / extinction auto des lumières / alerte, etc…

Un espèce de doublon purement dashboard des autres notifications (alexa ou smartphone).

Ceci est basé sur des input_text: perso j’en ai 6 (donc maxi 6 lignes de log…):

Je m’appuie ensuite sur deux scripts:

  • Un pour publier un message:
script ECAM-publish
alias: ECAM-publish
description: Décale 5->6, 4->5, 3->4,  2->3 et 1->2 et met le nouveau message en 1
icon: mdi:alert-outline
sequence:
  - action: input_text.set_value
    metadata: {}
    data:
      value: "{{states('input_text.ecam5')}}"
    target:
      entity_id: input_text.ecam6
  - action: input_text.set_value
    metadata: {}
    data:
      value: "{{states('input_text.ecam4')}}"
    target:
      entity_id: input_text.ecam5
  - action: input_text.set_value
    metadata: {}
    data:
      value: "{{states('input_text.ecam3')}}"
    target:
      entity_id: input_text.ecam4
  - action: input_text.set_value
    metadata: {}
    data:
      value: "{{states('input_text.ecam2')}}"
    target:
      entity_id: input_text.ecam3
  - action: input_text.set_value
    metadata: {}
    data:
      value: "{{states('input_text.ecam1')}}"
    target:
      entity_id: input_text.ecam2
  - action: input_text.set_value
    metadata: {}
    data:
      value: "{{message}} - {{ now().hour }}:{{ now().minute }}"
    target:
      entity_id: input_text.ecam1
fields:
  message:
    selector:
      text: null
    required: true
    description: message a stocker
    default: pas de message

On peut bien sur le tester avec les outils de dev:

  • l’autre pour tout effacer:
script ecam-clear-all
alias: ecam-clear-all
description: écrit "pas de message" dans tous les input text ECAM
icon: mdi:alert-outline
sequence:
  - action: input_text.set_value
    metadata: {}
    data:
      value: pas de message
    target:
      entity_id:
        - input_text.ecam1
        - input_text.ecam2
        - input_text.ecam3
        - input_text.ecam4
        - input_text.ecam5
        - input_text.ecam6

J’ai ensuite une petite section de dashboard affichant le contenu des input_text de façon conditionnelle suivant la présence ou non de message pertinent, ainsi que le bouton permettant d’effacer les messages s’il y en a :

YAML de la section
type: grid
cards:
  - type: heading
    heading: Effacer les messages
    heading_style: subtitle
    tap_action:
      action: perform-action
      perform_action: script.ecam_clear_all
      target: {}
    visibility:
      - condition: state
        entity: input_text.ecam1
        state_not: pas de message
  - type: heading
    heading: Pas de messages
    heading_style: subtitle
    visibility:
      - condition: state
        entity: input_text.ecam1
        state: pas de message
  - type: heading
    heading_style: subtitle
    badges:
      - type: entity
        show_state: true
        show_icon: false
        entity: input_text.ecam1
        visibility:
          - condition: state
            entity: input_text.ecam1
            state_not: pas de message
  - type: heading
    icon: ""
    heading_style: subtitle
    badges:
      - type: entity
        show_state: true
        show_icon: false
        entity: input_text.ecam2
        visibility:
          - condition: state
            entity: input_text.ecam2
            state_not: pas de message
  - type: heading
    icon: ""
    heading_style: subtitle
    badges:
      - type: entity
        show_state: true
        show_icon: false
        entity: input_text.ecam3
        visibility:
          - condition: state
            entity: input_text.ecam3
            state_not: pas de message
  - type: heading
    icon: ""
    heading_style: subtitle
    badges:
      - type: entity
        show_state: true
        show_icon: false
        entity: input_text.ecam4
        visibility:
          - condition: state
            entity: input_text.ecam4
            state_not: pas de message
  - type: heading
    icon: ""
    heading_style: subtitle
    badges:
      - type: entity
        show_state: true
        show_icon: false
        entity: input_text.ecam5
        visibility:
          - condition: state
            entity: input_text.ecam5
            state_not: pas de message
  - type: heading
    icon: ""
    heading_style: subtitle
    badges:
      - type: entity
        show_state: true
        show_icon: false
        entity: input_text.ecam6
        visibility:
          - condition: state
            entity: input_text.ecam6
            state_not: pas de message

Un clic sur « effacer les messages » lance le script d’effacement et donne l’affichage suivant:

Il suffit d’appeler le premier script dans les automatisations pour avoir une nouvelle ligne de log dans le dashboard (en parallèle d’une notification smartphone par exemple, ou a la place suivant ce qu’on veut).
Si une ligne est déjà écrite, tout se décale vers le bas (et éventuellement la dernière ligne est perdue)

Exemple avec l'automatisation de fin de lave vaisselle :

Pas de notification Alexa ou smartphone pour le fin du lave vaisselle, souvent lancé de nuit…

alias: MACHINES - vaisselle terminé
description: désactive le booléen vaisselle en cours et notifie un ECAM
triggers:
  - type: power
    device_id: 9ea0390c2f2d68e24e2fc2e47c2c2dd6
    entity_id: 901649d7e5160c61d3b2e1c37d1a2fe8
    domain: sensor
    below: 5
    for:
      hours: 0
      minutes: 30
      seconds: 0
    trigger: device
conditions:
  - condition: state
    entity_id: input_boolean.vaisselle_en_cours
    state: "on"
actions:
  - data: {}
    target:
      entity_id:
        - input_boolean.vaisselle_en_cours
    action: input_boolean.turn_off
  - action: script.ecam_publish
    data:
      message: Fin lave Vaisselle
mode: single

On aura alors l’affichage suivant:

C’est bien sûr perfectible:

  • j’aurai pu mettre une boucle dans mon script de publication
  • je n’arrive pas à extraire proprement l’heure (cf 16:04 au dessus qui s’affiche 16:4) [edit: solution donnée 2 posts au dessous par @Tochy pour les intéressés]

Mais ça fait le job pour des log perso de certaines actions qu’on veut pouvoir monitorer sans pour autant avoir une notification sur smartphone…

Pour du debug, il est tout à fait possible de passer un argument à écrire dans le script…

Bonus: dans l’interface des automatisations, j’ajoute des tags « ecam » / « alexa-media » / « notification » pour pouvoir filtrer quelles automatisations utilisent quel moyen de notif:

2 « J'aime »