Affichage de données d'un script python

Mon problème

Bonjour,

Je souhaite créer un Dashboard pour afficher les horaires des prochains passages de bus de ma ville.
J’ai créé un script python qui récupère les données liées à un arrêt :

import requests
import pandas as pd

r = requests.get('http://qr.t2c.fr/qrcode?_stop_id=3377704015495353')
table = pd.read_html(r.content, encoding=r.encoding)

print(table[0].to_json(orient='records',force_ascii=False))

qui me retourne du json :

[
   {
      "Ligne":4,
      "Destination":"1er Mai",
      "Départ":"4'",
      "Info":null
   },
   {
      "Ligne":4,
      "Destination":"Trémonteix Charcot",
      "Départ":"15:39",
      "Info":null
   },
   {
      "Ligne":4,
      "Destination":"1er Mai",
      "Départ":"15:49",
      "Info":null
   }
]

Je pensais créer un « sensor » (désolé je débute je n’ai pas forcément la bonne terminologie) par arrêt (en passant son URL en paramètre par exemple) et utiliser plusieurs cartes markdown (une par arrêt aussi) pour afficher les données par exemple :

Et ajouter un bouton pour lancer le script et rafraîchir les données afin de ne pas écrouler le site de requêtes (un seul bouton pour l’ensemble des « sensors »)

J’ai donc plusieurs questions :

  1. Comment « importer » les données retournées par mon script dans HA ?
  2. Comment afficher ces données joliment sachant que le nombre de lignes (du tableau) peut varier en fonction de l’arrêt (je suis ouvert à la discussion quant à l’utilisation d’autres cartes) ?
  3. Comment ajouter un bouton d’actualisation pour relancer mon script (même si j’ai déjà ma petite idée sur ce point, tout avis et bon à prendre) ?

Cordialement,

Ma configuration


System Information

version core-2023.7.1
installation_type Home Assistant Core
dev false
hassio false
docker false
user homeassistant
virtualenv true
python_version 3.11.0rc1
os_name Linux
os_version 6.2.0-36-generic
arch x86_64
timezone Europe/Paris
config_dir /home/homeassistant/.homeassistant
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.33.0
Stage running
Available Repositories 1331
Downloaded Repositories 8
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Dashboards
dashboards 1
resources 3
views 5
mode storage
Recorder
oldest_recorder_run 1 novembre 2023 à 16:42
current_recorder_run 5 novembre 2023 à 05:01
estimated_db_size 31.70 MiB
database_engine sqlite
database_version 3.37.2
___

En Pyscript tu peux écrire des variables et des services qui sont visibles depuis HA et peuvent donc être insérés de façon classiques dans les automations, boutons ou menu.

Voici un exemple en Pyscript:

# Create sensor
sensor_name = "sensor.velotaf_friday_morning"
state = "Orange"
attr_daytime = "Morning"
attr_icon = "mdi:weather-rainy"
attributes = {'icon': attr_icon, 'datetime': val_timestamp[0], 'weekday': day_idx, 'daytime': attr_daytime, 'temp': attr_temp, 'wind_speed': attr_wind_speed, 'wind_compass': attr_wind_compass, 'rain': attr_rain }
hass.states.set(sensor_name, state, attributes)

et voici le sensor créé:

Bonjour,

Merci pour vos propositions je vais voir si je peux améliorer ce que j’ai fait avec.

De mon côté j’ai bidouillé qu’un truc qui fonctionne plutôt pas trop mal donc je partage si ça peut servir à d’autres :

Je suis parti sur des command_line sensors ; un par arrêt :

command_line:
  - sensor:
      name: "Chapelle de l'agneau R"
      command: "python3 /home/homeassistant/.homeassistant/scripts/t2c_qr_scrapper.py 3377704015495353 4"
      json_attributes:
        - tab
      scan_interval: 86400
      value_template: "OK"
      unique_id: "chagr"

J’ai mis un scan_interval d’une journée pour pas polluer le site de requêtes puisque de toutes façon j’ai créé un bouton pour actualiser manuellement les sensors via un script :

alias: Refresh Bus
sequence:
  - service: homeassistant.update_entity
    data: {}
    target:
      entity_id:
        - sensor.chapelle_de_l_agneau_r
        - sensor.delille_montlosier_a
        - sensor.delille_montlosier_b
        - sensor.delille_salford_a
        - sensor.delille_salford_r
mode: single
icon: mdi:refresh

Et le bouton :

show_name: true
show_icon: false
type: button
name: Actualiser
icon_height: 30px
show_state: false
tap_action:
  action: toggle
entity: script.refresh_bus

Ensuite j’affiche les donnée (json) avec la card flex-table-card ce qui me donne un dashboard comme ça :

Je passe le sujet en résolu.