Command_line

j’essaie d’intégrer le statut de lecture airplay de mes airport express dans un sensor

voila le contenu de mon fichier command_line.yaml

## command_line.yaml
- sensor:
    name: "airplay"
    command: 'curl -s -X GET 10.10.30.194:7000/info | plistutil | grep "<key>statusFlags</key>" -A1 | grep -Eo "[0-9]{1,4}"'
    value_template: "{{ value | int }}"
    scan_interval: 2

- sensor:
    name: "ip forward"
    command: 'cat /proc/sys/net/ipv4/ip_forward'
    value_template: "{{ value | int }}"
    scan_interval: 2

le ip forward fonctionne bien, mais pas le airplay. quand je copie la commande curl… dans le terminal, j’obtiens bien 1028 ou 3076 quand je stream de la musique. pare contre le sensor renvoie unknown.

Ma configuration


[center]## System Information

version core-2024.1.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.6
os_name Linux
os_version 6.1.70-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4921
Installed Version 1.33.0
Stage running
Available Repositories 1432
Downloaded Repositories 11
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 11.3
update_channel stable
supervisor_version supervisor-2023.12.0
agent_version 1.6.0
docker_version 24.0.7
disk_total 30.8 GB
disk_used 5.5 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons Z-Wave JS (0.4.3), Terminal & SSH (9.8.1), Studio Code Server (5.14.2)
Dashboards
dashboards 6
resources 4
views 18
mode storage
Recorder
oldest_recorder_run 28 décembre 2023 à 06:27
current_recorder_run 7 janvier 2024 à 17:24
estimated_db_size 75.53 MiB
database_engine sqlite
database_version 3.41.2
[/center]

Salut,

Le status « unknown » c’est appliqué quand l’état n’est pas connu, généralement quand il n’y a jamais eu d’état… ce n’est pas une valeur de retour de la commande.
Si la commande passe pas correctement, tu devrais je pense avoir une trace dans le journal de HA (paramètres/système>journaux).
Quand tu dis que dans le terminal ça passe. Tu as fait ça dans le terminal de HA ?

oui jai fais ca dans le terminal de HA, et il me renvoi le chiffre

J’ai verifie dans le journal et jai bien une erreur :

Command failed (with return code 1): curl -s -X GET 10.10.30.194:7000/info | plistutil | grep "<key>statusFlags</key>" -A1 | grep -Eo "[0-9]{1,4}"

je ne comprends pas que la commande passe dans le terminal mais pas dans le sensor

Le terminal de HAOS ? Ou dans le container HA ?
Pas sûr que la comme plisutil existe dans le container HA.
En tout cas, dans mon cas, avec HA Container, je n’ai pas plisutil.

je suis sur une VM avec HAOS, le terminal qui se situe dans le menu de gauche.

plistutil est ajoute avec

apk add libplist-util

ja’i lu que dans un docker, c’est plus complique

Sauf erreur de ma part, ça c’est l’accès à l’OS pas au container HA.

Pas vraiment plus compliqué, mais, à chaque montée de version, ça va dégager et il faudra recommencer.

Il vaudrait mieux faire un scrape. Un exemple vient d’être publié pour le loto. Ca doit être faisable d’aller farfouiller dans le HTML retourné par le curl.

Effectivement, les commandes ne sont pas exécutées dans le même environnement.
Chaque Modue Complémentaire est son propre container.
Et même si tu arrivais à ajouter plisutil à l’intérieur du container, que tu sois en HAOS ou HA Container, ce serait perdu à chaque version…

Dans la doc de command_line y’a ça dans la partie execution:

Comme le propose @golfvert la scraping est une solution.

Salut

Sinon tu dois pouvoir utiliser RESTful - Home Assistant.

Ca dépend vraiment du contenu retourné si c’est du HTML ou du XML, je ne sais pas s’il y a un parser aussi simple à utiliser que pour le JSON

A priori, c’est du XML. Et j’ai réussi à extraire du XML avec restful.
Il y a même une exemple dans la doc:
image

Salut @chocorem

T’as essayé d’installer l’intégration « Apple-TV » ?

Je sais que dit comme ça, ça ne parait pas évident, mais cette intégration est basée sur le module python « pyatv ».

Ce module (voir la doc) semble être capable de « causer » avec les « airport-express ».

En mode dev / barbu il est au moins capable de les voir :

image

Sur le github de HA il y’a des issues « fixed » à son propos :

Dans la doc de l’intégration apple-tv, les réfs au « homepod » sont pas nombreuses. Mais ça fonctionne :

Je ne sais pas si il faut absolument une apple-tv pour cela, et encore moins si ça pourrait t’aider. Mais tu peux toujours tenter le coup, et voir si ton « airport-express » est détecté :wink:

Bon après des investigations et surtout du à un manque de connaissances du fonctionnement de HA, je suis arrivé à identifier et résoudre le problème.

je n’avais pas compris que même sous HAOS, il y avait des environnements différents.

plistutils n’était donc pas disponible dans l’environnement HA, il y a bien une méthode qui existe qui permet de l’installer via le startup a chaque démarrage du système.

je suis parti sur cette solution ou un utilisateur a crée un conteneur qui gère tout ça
https://github.com/orrpan/airport-express-status/tree/feature/homeassistantOSaddon

cela me permet d’avoir un sensor et d’activer les amplis relies a mes airports express. Par contre la gestion du return status est basique et ce statut est different selon qu’on stream via un airport express, un ampli, des sonos, etc … et aussi selon le type de medias ( musique ou video)

donc dans certains cas, cela ne fonctionne pas très bien, mais cela m’a permis de découvrir un peu plus le fonctionnement du système.

je vais investiguer un peu plus l’intégration de plistutils pour pouvoir gérer les returns status a ma guise