Intégration Train Traveler (SNCF)

Hello,

C’est assez curieux d’avoir eu ce retour depuis l’API en effet. Normalement l’API retourne forcément un délai lorsque le type d’incident est un « delay ».
Peux-tu me dire si tu as déjà constaté ce champ rempli avec autre chose que la valeur « NaN » ? Aussi peux-tu vérifier si c’est bien la bonne entité (sensor) qui est configurée pour la carte ?

On pourrait en effet ajouter un contrôle pour être sûr de ne remonter l’info que lorsque celle-ci existe, mais dans le cas présent j’ai un peu peur que ce soit un effet de bord et donc qu’on ne revoit plus jamais l’entité alimentée.

Bonjour,
Non pas d’autre valeur que NaNm

Bonjour,
Je reconfirme… Dès qu’il y a un retard je n’ai que le message NaNm…
Merci+++

Hello,

Peux-tu vérifier que c’est bien la bonne entité qui est configurée dans la carte pour le « Delay » ?

Je reste assez persuadé que ça vient d’un problème de configuration plutôt que de l’API, mais dans le doute si tu me donnes la ligne sur laquelle tu as rencontré le problème, je vais investiguer les données pour voir si effectivement elles sont présentes ou non dans le retour de l’API.

A+

Bonjour,

type: custom:flex-table-card
title: Amiens - Paris
strict: true
sort_by:
  - Depart+
columns:
  - data: journeys
    modify: |
      const departure = new Date(x.departure_time);
      const today = new Date();
      if (departure.toDateString() === today.toDateString()) {
        departure.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'});
      } else {
          departure.toLocaleDateString() +' '+ departure.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'});
      }
    name: Départ
  - data: journeys
    modify: |
      const arrival = new Date(x.arrival_time);
      const today = new Date();
      if (arrival.toDateString() === today.toDateString()) {
        arrival.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'});
      } else {
          arrival.toLocaleDateString() +' '+ arrival.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'});
      }
    name: Arrivée
  - data: journeys
    modify: |
      if (parseInt(x.delay) >= 3600 ) 
        '<div style="color:#E70B0B;">' + Math.trunc(x.delay /3600) + 'h' + Math.trunc((x.delay %3600)/60) + 'm</div>'
      else if (parseInt(x.delay) >= 60 ) 
        '<div style="color:#E70B0B;">' + Math.trunc(x.retard /60) + 'm'+ '</div>'
      else if (parseInt(x.delay) >= 1 ) 
        '<div style="color:#E70B0B;">' + x.delay + 's</div>' 
      else '<div style="color:#139523;">Aucun retard</div>'
    name: Retard
entities:
  include: sensor.train_traveler_ami_par_journeys

Dernière partie je pense
Merci+++

Ah … Je n’avais pas compris que tu utilisais cette carte là.

En effet, c’est un problème de la carte : x.retard est à remplacer par x.delay dans le deuxième else if.

J’édite le post où il y a l’erreur, tu pourras le copier / coller

Oups…
Merci+++
Modifications faites et cela fonctionne !

2 « J'aime »

Bonjour,

Vous savez combien de temps il faut pour recevoir le token après inscription ? je me suis inscrit mardi soir et j’ai toujours pas reçu mon token…

Hello,

Normalement c’est assez immédiat, en tout cas pour moi je l’ai reçu quelques minutes après ma demande.
J’imagine que tu as dû vérifier tes spams, peut-être une erreur sur l’adresse mail à l’inscription ?

Bonjour à tous !

Super Boulot, cela fait un moment que je cherchais une integration qui soit encore supportée !

En revanche petite info, il est impossible de s’inscrire sur le portail SNCF pour obtenir une clé d’API jusqu’au 15/09/24 :confused:

Salut @Matth

Petit warning que je viens de voir dans les logs HA

2024-09-02 09:05:50.838 WARNING (MainThread) [homeassistant.util.loop] Detected blocking call to open with args ('/usr/local/lib/python3.12/site-packages/pytz/zoneinfo/Africa/Abidjan', 'rb') inside the event loop by custom integration 'train_traveler' at custom_components/train_traveler/coordinator.py, line 83: self._timezone = pytz.timezone("Europe/Paris") (offender: /usr/local/lib/python3.12/site-packages/pytz/__init__.py, line 108: return open(filename, 'rb')), please create a bug report at https://github.com/Matthyeux/train-traveler/issues
For developers, please see https://developers.home-assistant.io/docs/asyncio_blocking_operations/#open
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/usr/src/homeassistant/homeassistant/__main__.py", line 223, in <module>
sys.exit(main())
File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main
exit_code = runner.run(runtime_conf)
File "/usr/src/homeassistant/homeassistant/runner.py", line 190, in run
return loop.run_until_complete(setup_and_run_hass(runtime_config))
File "/usr/local/lib/python3.12/asyncio/base_events.py", line 674, in run_until_complete
self.run_forever()
File "/usr/local/lib/python3.12/asyncio/base_events.py", line 641, in run_forever
self._run_once()
File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1990, in _run_once
handle._run()
File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run
self._context.run(self._callback, *self._args)
File "/usr/src/homeassistant/homeassistant/setup.py", line 165, in async_setup_component
result = await _async_setup_component(hass, domain, config)
File "/usr/src/homeassistant/homeassistant/setup.py", line 461, in _async_setup_component
await asyncio.gather(
File "/usr/src/homeassistant/homeassistant/setup.py", line 463, in <genexpr>
create_eager_task(
File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task
return Task(coro, loop=loop, name=name, eager_start=True)
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 752, in async_setup_locked
await self.async_setup(hass, integration=integration)
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 604, in async_setup
result = await component.async_setup_entry(hass, self)
File "/config/custom_components/train_traveler/__init__.py", line 31, in async_setup_entry
next_journey_coordinator = JourneyCoordinator(connection, hass, entry)
File "/config/custom_components/train_traveler/coordinator.py", line 83, in __init__
self._timezone = pytz.timezone("Europe/Paris")

Hello,

Je n’ai pas réussi à reproduire cette erreur. L’as-tu vu réapparaître depuis ?

Salut,

Merci pour ton retour.
Je confirme, présent encore il y a qq minutes

2024-09-09 20:23:31.869 WARNING (MainThread) [homeassistant.components.rest.util] REST result could not be parsed as JSON
2024-09-09 20:23:31.870 ERROR (MainThread) [homeassistant.helpers.template] Template variable error: 'value_json' is undefined when rendering '{{ ( (value_json.rss.channel.item.title).split(':') )[1] | trim | upper }}'
2024-09-09 20:23:31.873 ERROR (MainThread) [homeassistant.helpers.template] Template variable error: 'value_json' is undefined when rendering '{% set t = value_json.rss.channel.item.description %} {% set t = t.split('HL')[1].split('</p>')[1].split('Abonnez vous')[0] %} {{ t | striptags }}'
2024-09-09 20:23:32.116 WARNING (MainThread) [custom_components.sonoff] Can't login in auto mode: ClientConnectorError(ConnectionKey(host='cn-apia.coolkit.cn', port=443, is_ssl=True, ssl=True, proxy=None, proxy_auth=None, proxy_headers_hash=7026598446045276493), ConnectionRefusedError(111, "Multiple exceptions: [Errno 111] Connect call failed ('0.0.0.0', 443), [Errno 111] Connect call failed ('::', 443, 0, 0)"))
2024-09-09 20:23:32.659 WARNING (MainThread) [homeassistant.util.loop] Detected blocking call to open with args ('/usr/local/lib/python3.12/site-packages/pytz/zoneinfo/Africa/Abidjan', 'rb') inside the event loop by custom integration 'train_traveler' at custom_components/train_traveler/coordinator.py, line 83: self._timezone = pytz.timezone("Europe/Paris") (offender: /usr/local/lib/python3.12/site-packages/pytz/__init__.py, line 108: return open(filename, 'rb')), please create a bug report at https://github.com/Matthyeux/train-traveler/issues
For developers, please see https://developers.home-assistant.io/docs/asyncio_blocking_operations/#open
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/src/homeassistant/homeassistant/__main__.py", line 223, in <module>
    sys.exit(main())
  File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main
    exit_code = runner.run(runtime_conf)
  File "/usr/src/homeassistant/homeassistant/runner.py", line 189, in run
    return loop.run_until_complete(setup_and_run_hass(runtime_config))
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 674, in run_until_complete
    self.run_forever()
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 641, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1990, in _run_once
    handle._run()
  File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/src/homeassistant/homeassistant/setup.py", line 165, in async_setup_component
    result = await _async_setup_component(hass, domain, config)
  File "/usr/src/homeassistant/homeassistant/setup.py", line 461, in _async_setup_component
    await asyncio.gather(
  File "/usr/src/homeassistant/homeassistant/setup.py", line 463, in <genexpr>
    create_eager_task(
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 45, in create_eager_task
    return Task(coro, loop=loop, name=name, eager_start=True)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 752, in async_setup_locked
    await self.async_setup(hass, integration=integration)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 604, in async_setup
    result = await component.async_setup_entry(hass, self)
  File "/config/custom_components/train_traveler/__init__.py", line 31, in async_setup_entry
    next_journey_coordinator = JourneyCoordinator(connection, hass, entry)
  File "/config/custom_components/train_traveler/coordinator.py", line 83, in __init__
    self._timezone = pytz.timezone("Europe/Paris")

Bonjour,
Elle est très bien cette intégration.
Sinon, une question : comment ajuster le délai de « polling » une fois que c’est configuré ?
Cordialement.

Bravo cela me semble très utile dans certaines situations, pourquoi ne pas proposer de l’integré dans des ecole ou autre :slight_smile:

Hello,

Merci pour vos retours, je n’ai pas eu beaucoup de temps ces dernières semaines pour faire évoluer l’intégration.

@Pulpy-Luke : Il semblerait que ce soit une régression introduite dans l’une des dernières versions de HA. J’ai probablement un fix, il faut que je teste avant de publier.

Cette fonctionnalité n’est malheureusement pas disponible pour le moment, il faut recréer l’appareil. Cependant tu peux le faire en remettant les mêmes informations à la création afin de garder le même nom d’entités et ne pas devoir recréer toutes tes cartes / automatisations.

Je note toutefois l’évolution à ajouter :wink:

Merci !
Je n’avais pas pensé à un cas d’application dans une école, mais pourquoi pas même si je ne suis pas sûr que l’installation et l’entretien d’une configuration HA soit facilement réalisable en ces temps.

Je vais tenter de trouver un peu de temps ces prochains jours pour mettre en oeuvre les différents fix et évolutions qui sont dans le pipe !

2 « J'aime »

Tu peux monter une image sur Raspberry PI et l’installer prêt a l’emploie directement, les couts n’étant pas dextrement élevé selon moi

Bonjour et merci pour cette intégration car sur mon vieux Samsung S7 je n’ai plus l’application SNCF qui fonctionne !
J’aimerais me faire une notif lorsque mon train a un retard ou au moins lorsque il n’est pas indiqué « aucun retard ».
J’imagine qu’il faut créer une constante qui stocke le retour et tester ce retour ? Je ne m’y connais pas assez pour continuer…
Merci d’avance.

alias: SNCF
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.train_traveler_sai_sau_journeys
    attribute: journeys
  - trigger: template
    value_template: |2-
       const departure = new Date(x.departure_time);
            const today = new Date();
            if (departure.toDateString() === today.toDateString()) {
              departure.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'});
            } else {
                departure.toLocaleDateString() +' '+ departure.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'});
            }
conditions: []
actions:
  - action: notify.notify
    metadata: {}
    data:
      message: Retard
      title: Retard départ Saintes
mode: single

Bonjour,
J’ai essayé de demander un clé d’api le week-end dernier mais je n’ai eu aucun retour…
Vous avez des infos sur le sujet ?

Bonjour,
Moi j’en ai eu une hier en 5mn par mail.