Ce que j’ai caché est sous une forme « bizarre » du style :
"user" - "type de lecteur" : "contenu en cours de lecture"
Pour que ce soit l’attribut user il aurait fallu qu’il soit sous une forme équivalent à ce que tu vois pour l’icône par exemple.
Bon si tu veux vraiment te baser sur ce sensor, tu peux y arriver avec :
{% if is_state("sensor.plex_sirius", "0") %}
N/A
{% else %}
{% set user = states.sensor.plex_sirius.attributes | first %}
{{ user.split('-')[0] | trim }}
{% endif %}
Mais ce n’est pas très flexible et si tu as plusieurs utilisateurs en cours de lecture en même temps tu n’en verras qu’un s’afficher.
A l’inverse si tu veux lister tous les utilisateurs en te basant sur les entités « multiplayer », tu peux utiliser ça :
{% set player = states.media_player
| selectattr('state', 'in', ['playing', 'paused'])
| map(attribute='entity_id')
| select('search', 'plex')
| join(', ')
%}
{% if player|length > 1 %}
{% set lst = player.split(', ') %}
{% for player in lst -%}
{% set user = state_attr(player, 'username') %}
{{ user }}
{%- endfor %}
{% endif %}
Merci @Herbs, effectivement, cela fonctionne mieux avec le bout de code fourni. Par contre, cela ne retourne que l’utilisateur qui lit le média. On ne peut pas avoir aussi le titre joué, temps restant…?
Tu peux faire un peu ce que tu veux en jouant avec la template.
Mais faut savoir qu’en fonction du type de contenu les attributs ne sont pas forcement les mêmes.
Exemple sur le titre :
Pour les fims le titre correspond à l’attribut media_title
Pour les séries ce sera media_series_title
Pour mon dachsboard « mobile » j’ai une carte markdown (pour condenser le visuel) qui affiche :
Pour les films et séries :
user > device > contenu
Pour la musique lu avec l’app « plexamp » :
user listen music with plexamp
Bref je peux te filer le code la template complète (elle est récente et peut-être pas hyper opti) pour exemple :
ma template
{% set player = states.media_player
| selectattr('state', 'in', ['playing', 'paused'])
| map(attribute='entity_id')
| select('search', 'plex')
| join(', ')
%}
{% if player|length > 1 %}
{% set lst = player.split(', ') %}
{% for player in lst %}
{% set name = state_attr(player, 'friendly_name') %}
{% set mtitle = state_attr(player, 'media_title') %}
{% set stitle = state_attr(player, 'media_series_title') %}
{% set user = state_attr(player, 'username') %}
{% if "plexamp" not in player %}
{% if stitle == None %}
<ha-icon icon="mdi:plex"></ha-icon> {{ user }} > {{ name }} > {{ mtitle }} ...
{% elif stitle is defined %}
<ha-icon icon="mdi:plex"></ha-icon> {{ user }} > {{ name }} > {{ stitle}} ...
{% endif %}
{% elif "plexamp" in player %}
<ha-icon icon="mdi:plex"></ha-icon> {{ user }} listen music with Plexamp ...
{% endif %}
{% endfor %}
{% else %}
<ha-icon icon="mdi:plex"></ha-icon> Nothing is playing...
{% endif %}
Et si tu sais dire exactement ce que tu veux et que tu donnes un peu plus de détail (utilsation de plexamp ou pas, devices utilisés, etc…) on peut essayer de faire un truc qui colle plus à ton usage
[EDIT] Bon à savoir, tu as ce genre d’intégration dans HACS :
Qui peuvent aussi faire ce que tu veux, en plus « beau » etc …
Comme je disais ma template, c’est juste pour le mobile et afin d’avoir les infos sans fioritures
Dans l’idéal, je souhaiterais envoyer l’utilisateur, le titre, le temps restant, heure de fin et le support lorsqu’un média est lancé via Telegram.
Mais aussi afficher les informations sur le dashboard (qui n’est qu’au début).
J’utilise effectivement PlexAmp sur mobile pour la musique, mais aussi les lecteurs webs, et client android (TV) et sur OSMC. Je possède aussi deux servers Plex.
Ça va demander un peu de réflexion et de mise au point.
Exemple si ton trigger c’est passage de l’état « idle » à « playing », alors si tu écoutes de la musique tu seras notifié à chaque début de « morceau ». Tout ça car ton player va faire :
La notification ne sera que sur le dashboard donc pas de soucis. Pour télégram c’est moi qui lui pose la question, donc pas de soucis non plus de spam puisque je lui demanderais que lorsque j’en aurai besoin.
Via telegram, cela fonctionne correctement
J’ai trouvé effectivement les valeurs souhaitées via les outils de dev.
J’ai aussi pu travailler sur le format des variables.
Du coup, ma commande télégram fonctionne bien.
Le code en question
{% set player = states.media_player | selectattr('state', 'in', ['playing', 'paused']) | map(attribute='entity_id') | select('search', 'plex') | join(', ') %} {% if player|length > 1 %} {% set lst = player.split(', ') %} {% for player in lst %} {% set name = state_attr(player, 'friendly_name') %} {% set mtitle = state_attr(player, 'media_title') %} {% set stitle = state_attr(player, 'media_series_title') %} {% set format = state_attr(player, 'media_content_type') %} {% set user = state_attr(player, 'username') %} {% set library = state_attr(player, 'media_library_title') %} {% set media_duration = state_attr(player, 'media_duration') %} {% set media_position = state_attr(player, 'media_position') %} {% set artiste = state_attr(player, 'media_artist') %} {% set album_name = state_attr(player, 'media_album_name') %} {% set duree = state_attr(player, 'media_duration') %} {% set p = state_attr(player, 'media_position') %} {% set tempsrestant = duree|float-p|float %} {% set formatjoue = format|string %} {% if "plexamp" not in player %} {% if "movie" in formatjoue %} {{ user }} regarde: {{ mtitle }} sur {{ name }}. Le film dure: {{ duree | timestamp_custom("%H:%M:%S", 0) }}h, et il reste: {{ tempsrestant | timestamp_custom("%H:%M:%S", 0) }}h. {% elif "tvshows" in formatjoue %} {{ user }} regarde: {{ stitle }} sur {{ name }}. La série dure: {{ duree | timestamp_custom("%H:%M:%S", 0) }}h, et il reste: {{ tempsrestant | timestamp_custom("%H:%M:%S", 0) }}h. {% elif "music" in formatjoue %} {{ user }} écoute: {{ mtitle}} de {{ artiste }} sur l'album {{ album_name }}. {% endif %} {% elif "plexamp" in player %} {{ user }} listen music with Plexamp {% endif %} {% endfor %} {% else %} Nothing is playing. {% endif %}
Il m’affiche donc différentes informations (utilisateur, titre, support, durée et temps restant) en fonction du format joué (movie, tvshows, music).
À voir pour intégrer ces informations dans le dashboard avec Minimalistic media card. Et l’ETA.
Du coup j’ai repris qq idées de ta version pour faire évoluer la mienne
Nouveau code
{% set player = states.media_player
| selectattr('state', 'in', ['playing', 'paused'])
| map(attribute='entity_id')
| select('search', 'plex')
| join(', ') %}
{% if player|length > 1 %}
{% set lst = player.split(', ') %}
{% for player in lst -%}
{%- set artist = state_attr(player, 'media_album_artist') %}
{%- set mtitle = state_attr(player, 'media_title') %}
{%- set smtitle = mtitle.split(' (') %}
{%- set stitle = state_attr(player, 'media_series_title') %}
{%- set device = state_attr(player, 'friendly_name') %}
{%- set type = state_attr(player, 'media_content_type') %}
{%- set user = state_attr(player, 'username') %}
{% if "plexamp" not in player %}
{%- if type == 'movie' -%}
<ha-icon icon="mdi:plex"></ha-icon> {{ user }} watch "{{ smtitle[0] }}" on {{ device }} ...
{%- elif type == 'tvshow' -%}
<ha-icon icon="mdi:plex"></ha-icon> {{ user }} watch "{{ stitle }}" on {{ device }} ...
{%- elif type == 'music' -%}
<ha-icon icon="mdi:plex"></ha-icon> {{ user }} listen "{{ artist }}" on {{ device }} ...
{% endif %}
{%- elif "plexamp" in player -%}
<ha-icon icon="mdi:plex"></ha-icon> {{ user }} listen "{{ artist }}" with plexamp ...
{% endif %}
{%- endfor %}
{% else %}
Nothing is playing.
{% endif %}
Ce qui donne :
Bref je pense tu peux marquer le sujet comme résolu