Créer un retour d'état depuis la dernière commande du journal de l'appareil

Bonjour,

Afin de pouvoir faire des configurations d’icones et de couleur de cartes sur mon Dashboard, je souhaite créer une valeur d’état de mon appareil qui est une porte de garage via la dernière commande visible dans le journal.

Mon problème

Comme faire ?
J’ai essayé différent configuration d’entrées (Template de Capteur Binaire et d’autre) depuis l’interface, mais sans succès et je ne suis vraiment pas alaise avec le code YAML

De ce que j’ai lu, c’est un élément réalisable, mais pour ma part je n’ai pas trouvé sur le forum et sur d’autre page comment il fallait faire
Voici mon équipement et son journal


Pouvez-vous m’aider ?

Je vous remercie par avance

Ma configuration


[center]## System Information

version core-2024.4.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.2
os_name Linux
os_version 6.6.25-haos
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1403
Downloaded Repositories 39
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 12.2
update_channel stable
supervisor_version supervisor-2024.04.0
agent_version 1.6.0
docker_version 25.0.5
disk_total 20.0 GB
disk_used 11.0 GB
healthy true
supported true
board generic-aarch64
supervisor_api ok
version_api ok
installed_addons Samba share (12.3.1), Advanced SSH & Web Terminal (17.2.0), tydom2mqtt (3.4.3), File editor (5.8.0), Fusion (2024.4.0), Mosquitto broker (6.4.0), SwitchBot-Mqtt (1.0.10), Samba Backup (5.2.0)
Dashboards
dashboards 5
resources 25
views 9
mode storage
Recorder
oldest_recorder_run 22 avril 2024 à 20:44
current_recorder_run 27 avril 2024 à 12:56
estimated_db_size 719.35 MiB
database_engine sqlite
database_version 3.44.2
Solcast PV Forecast
can_reach_server ok
used_requests 13
rooftop_site_count 1
[/center] ___

Salut,

Je pense que tu ne donnes pas assez d’infos.
Cette entité cover, elle vient d’où?
C’est une antité template que tu as ajouté toi dans le fichier de configuration?
Ou alors c’ets autre chose qui la fournit?

Si c’est un template cover ajouté manuellement dans la config, tu peux essayer l’option « optimistic » qui donne automatiquement l’état au cover en fonction de la dernière commande passée… en revanche ce n’est pas top si tu as un autre contrôle pour ce garage, car là il n’y aura pas de retour d’état, donc ce sera toujours un état théorique.

image

Salut,
Cette entité a était créée par l’intégration Overkiz en récupérant les informations de mon Kit de Connectivité Somfy.
Elle pilote un moteur de porte de garage Somfy en RTS et donc sans remonté d’état.

Ce n’est donc pas un ajout manuel

AH ok, dsl effectivement je n’avais pas fait gaffe au logo overkiz sur le screenshot.

Pas certian que ça marche, mais il est peut-être possible de faire ça avec un customize, pour ajouter le optimistic, je ne sais pas du tout si c’est couvert, mais ça se tente…

Si tu n’as pas encore de customize to peux ajouter ça dans ton fichier de config :

  customize:
    # Add an entry for each entity that you want to overwrite.
    cover.garage:
      optimistic: true

je viens de l’ajuter dans mon configuration.yaml

Mais si ça fonctionne, où est-ce que je peux le constater ?

PS sur mes cartes ou ù j’ai l’état de cette entité, celle-ci reste en inconnu malgré les action sur les commandes

A y regardé de plus prêt, j’ai l’état des commandes qui s’affiche sur mes cartes, le problème est que l’entité ne garde pas la dernière commande en tant qu’état final
Voici ce que j’ai
2024-04-27_20h04_01

Salut,
avec un input text, peu être.

Ou stocker les changements d’état dans un fichier texte…

Salut,

Ok, mais comment faudrait il faire ?

Dans les outils de dev, ça devrait être listé dans les attributs.

Je pense que overkiz renvoit un état inconnu par après :confused:

je ferais un input_text, dans entrée ( paramètres / appareils et services , onglet entrée ).

un script pour ouvrir

alias: Portail ouvert
sequence:
  - service: switch.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: switch.0x50325ffffe304677
  - service: input_text.set_value
    metadata: {}
    data:
      value: Ouvert
    target:
      entity_id: input_text.poubelle_verte_statut

un script pour fermer

alias: Portail fermer
sequence:
  - service: switch.turn_off
    metadata: {}
    data: {}
    target:
      entity_id: switch.0x50325ffffe304677
  - service: input_text.set_value
    metadata: {}
    data:
      value: Fermer
    target:
      entity_id: input_text.poubelle_verte_statut

Plus cas utiliser les tap actions pour appler les scripts sur une carte qui les supportes ( button, entities card … ). Et utliser l’entité input_text a la place de ton entité portail dans la carte.

exemple

tap_action:
  action: call-service
  service: script.portail.ouvert

double_tap_action:
  action: call-service
  service: script.portail.ouvert

hold_action:
  action: call-service
  service: script.portail.fermer

Salut
Merci pour ces détails, j’ai compris le fonctionnement.
Par contre, il y a un truc que je n’arrive pas, c’est affiché l’état issu de l’input texte sur ma carte
Voici mon bout de code

name: Garage
icon: mdi:garage-open
type: custom:button-card
color: auto
size: 100%
styles:
  card:
    - height: 200px
    - width: 200px
tap_action:
  action: call-service
  service: script.portail_fermer
hold_action:
  action: call-service
  service: script.portail_ouvert

Faut ajouter entity:

name: Garage
entity: # ton entité input text
icon: mdi:garage-open
type: custom:button-card
color: auto
size: 100%
styles:
  card:
    - height: 200px
    - width: 200px
tap_action:
  action: call-service
  service: script.portail_fermer
hold_action:
  action: call-service
  service: script.portail_ouvert

Merci ça fonctionne

Bon j’aurais préféré un solution globale plus simple via le journal, mais c’est un alternative qui reste pas si compliqué au final
plus qu’à configurer pour varier l’icône et la couleur en fonction de l’état
Encore merci

Et merci @AlexHass pour ta proposition que j’aurais préféré mais qui n’a pas fonctionné

1 « J'aime »

bon premier test dans un button-card pas très réussi car ma carte est toute blanche
par contre j’ai supprimé les erreurs que j’avais

type: custom:button-card
aspect_ratio: 9/3
custom_fields:
  cardGarage:
    card:
      type: custom:button-card
      entity: input_text.etat_porte_garage
      name: Garage
      icon: mdi:garage
      show_label: true
      label: |
        [[[
          if (states['input_text.etat_porte_garage'].state == 'Fermer')
            return '<font color= "green"><b>Fermé</font>';
          else if (states['input_text.etat_porte_garage'].state == 'Ouvert')
            return '<font color= "red"><b>Ouvert</font>';
        ]]]
      aspect_ratio: 1/1
      styles:
        name:
          - font-size: 0.9em
          - justify-self: middle
          - align-self: end
          - color: rgba(255,255,255,0.6)
        card:
          - background-color: rgba(64,64,64,0.8)
          - box-shadow: 4px 4px 4px 0px rgba(32,32,32,0.5)
          - border: 2px rgba(211,211,211,1.0) outset
        icon:
          - border-radius: 50%
          - border: none
          - box-shadow: 0px 0px 5px 5px rgba(0,128,0,0.5)
          - box-shadow: |
              [[[
                if (states['input_text.etat_porte_garage'].state == 'Fermer')
                  return '0px 0px 5px 5px rgba(0,128,0,0.5)';
                else if (states['input_text.etat_porte_garage'].state == 'Ouvert')
                  return '0px 0px 5px 5px rgba(255,0,0,0.5)';
              ]]]
          - background-color: |
              [[[
                if (states['input_text.etat_porte_garage'].state == 'Fermer')
                  return 'rgba(0,128,0,0.5)';
                else if (states['input_text.etat_porte_garagee'].state == 'Ouvert')
                  return 'rgba(255,0,0,0.5)';
              ]]]
          - width: 60px
          - height: 60px
          - color: |
              [[[
                if (states['input_text.etat_porte_garage'].state == 'Ouvert')
                  return 'rgba(0,255,0,1.0)';
                else if (states['input_text.etat_porte_garage'].state == 'Fermer')
                  return 'rgba(255,0,0,1.05)';
              ]]]
      tap_action:
        action: call-service
        service: script.portail_fermer
      hold_action:
        action: call-service
        service: script.portail_ouvert

La tu a utiliser un custom_filed, encore un code de @Cleya, il manque le poition du custom_field.

voici un carte button-card simple sans custom_field. j’utilise state au lieu de faire des templates dans styles.

      type: custom:button-card
      entity: input_text.etat_porte_garage
      name: Garage
      icon: mdi:garage
      show_state: true
      state:
        - value: 'Ouvert'
          styles:
            state: 
              - color: red
            icon:
              - color: red
              - background: rgba(255,0,0,0.5)
              - box-shadow: 0px 0px 5px 5px rgba(255,0,0,0.5
        - value: 'Fermer'
          styles:
            state: 
              - color: green
            icon:
              - color: green
              - background: rgba(0,128,0,0.5)
              - box-shadow: 0px 0px 5px 5px rgba(0,128,0,0.5)
              
      aspect_ratio: 1/1
      styles:
        name:
          - font-size: 0.9em
          - justify-self: middle
          - align-self: end
          - color: rgba(255,255,255,0.6)
        card:
          - background-color: rgba(64,64,64,0.8)
          - box-shadow: 4px 4px 4px 0px rgba(32,32,32,0.5)
          - border: 2px rgba(211,211,211,1.0) outset
        icon:
          - border-radius: 50%
          - border: none
          - width: 60px
          - height: 60px
      tap_action:
        action: call-service
        service: script.portail_fermer
      hold_action:
        action: call-service
        service: script.portail_ouvert

C’est le problème des copies partielles de code :joy:

Merci
Par contre, y a t’il une possibilité de réduire la taille de la carte pour avoir une taille similaire à celles du dessus

Même en intégralité ça ne fonctionne pas

Si, si mes codes fonctionnent, ils sont vérifiés avant d’être postés.
Pour régler la taille des cartes, il faut préciser le « width » en pixel ou en pourcentage

Je m’en doutes, mais fonctionne que l’utilisateur pour lequel il a été fait

Merci