NS Reisinformatie in Home Assistant

Door Hmmbob op maandag 13 november 2017 20:39 - Reacties (7)
Categorie: Home Assistant, Views: 2.157

Ik ben al een tijdje aan het spelen met Home Assistant om diverse automations in te stellen voor mijn dagelijkse bezigheden. Sinds versie 0.57 is er ook een sensor aanwezig om reisinformatie van de Nederlandse Spoorwegen in HA beschikbaar te krijgen, gemaakt door Menno Blom. Om mijn dagelijkse trips wat makkelijker te maken ben ik daar wat mee gaan spelen.

Component installatie
Om deze component te kunnen gebruiken binnen HA zal je deze moeten configureren. In configuration.yaml (of sensors.yaml, als je dat gebruikt):

YAML:
1
2
3
4
5
6
7
8
9
10
- platform: nederlandse_spoorwegen
  email: !secret ns_user
  password: !secret ns_password
  routes:
    - name: DenBosch-Breda
      from: Ht
      to: Bd
    - name: Breda-DenBosch
      from: Bd
      to: Ht


Om een wachtwoord te verkrijgen moet je bij de NS een API account aanmaken, waarna het wachtwoord je meteen wordt toegestuurd. Voor de routes moeten de stations-codes gebruikt worden zoals de NS die gebruikt: die zijn hier te vinden.

Na deze configuratiestappen zijn er twee sensoren beschikbaar in het startscherm van HA. Om een en ander overzichtelijker te maken heb ik ze opgenomen in een group:

YAML:
1
2
3
4
5
treinen:
  name: Treinen
  entities:
  - sensor.denboschbreda
  - sensor.bredadenbosch


Met het volgende resultaat:

https://tweakers.net/ext/f/1shxwt5TQSDq6k8S25htU8id/full.png

Automations op basis van locatie
Helaas woon ik niet dicht bij het station, dus ik moet met de bus naar mijn vertrekstation. Als ik in de buurt van het vertrekstation kom wil ik graag een melding krijgen wanneer mijn trein vanaf welk perron vertrekt. De vertrektijd wisselt nog wel eens qua tijd omdat ik op verschillende tijden op het station kom, dus mijn automation moet er rekening mee houden of ik sowieso wel in de buurt van het station ben. Binnen Home Assistant kun je dat heel eenvoudig bereiken door middel van zones en het gebruiken van een device tracker zoals Owntracks. Het instellen daarvan sla ik in deze post over, maar een zone is daarna vrij eenvoudig in je configuration.yaml (of zones.yaml) aan te maken:

YAML:
1
2
3
4
5
6
zone:
- name: stationdb
  latitude: 51.690256
  longitude: 5.294090
  radius: 700
  icon: mdi:train


In Home Assistant kun je acties triggeren als je een bepaalde zone in komt, en dat is exact wat ik gebruik om mezelf een (Pushbullet) bericht te sturen met de laatste vertrekinfo van mijn trein, in automations.yaml. Als trigger gebruik ik het event "enter" van het zone platform, maar ik breng een tijdsconditie aan om te zorgen dat dit alleen gebeurd tijdens mijn ochtendreis: ik heb 's middags geen behoefte aan deze melding want dan reis ik de andere kant op.

YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- id: Notification_trein_naar_Breda
  alias: Vertrektijd trein naar Breda
  trigger:
  - entity_id: device_tracker.hmmbob
    event: enter
    platform: zone
    zone: zone.stationdb
  condition:
  - after: 06:15:00
    before: 08:30:00
    condition: time
    weekday:
    - mon
    - tue
    - wed
    - thu
    - fri
  action:
  - data_template:
      message: Vertrektijd {{ states.sensor.denboschbreda.attributes.departure_time_actual
        }} vanaf spoor {{ states.sensor.denboschbreda.attributes.departure_platform
        }}, aankomst om {{ states.sensor.denboschbreda.attributes.arrival_time_actual
        }}. Volgende trein vertrekt om {{ states.sensor.denboschbreda.attributes.next
        }}.
      title: 'Trein naar Breda: {{ states.sensor.denboschbreda.attributes.status
        }}.'
    service: notify.pushbullet


Zoals je ziet ontvang ik dan een Pushbullet berichtje met alle informatie die ik nodig heb, inclusief het vertrekspoor* en de vertrektijd:
https://tweakers.net/ext/f/JStRwpPLa0S3RrCsYL5uqDVX/full.png
*Het verstrekspoor wordt pas vanaf HA 0.58 aangeboden in de state attributes van deze sensor, na een voorstel van mijzelf daartoe. Mocht je voor die tijd al willen experimenteren: het zijn 4 simpele toe te voegen regels in homeassistant/components/sensor/nederlandse_spoorwegen.py, zie de Github PR voor details.

Voor mijn terugreis gebruik ik een ander systeem, omdat het station dicht bij mijn werkplek ligt. Die werkplek heb ik ook als zone aangemaakt in HA, waardoor ik die ook als condition kan gebruiken voor mijn locatie. Maar omdat ik deze berichten enkel in de middag wil ontvangen als ik daadwerkelijk op het werk ben, gebruik ik als condition zowel de tijd als mijn locatie.

YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
- id: Notification_vertrek_naar_Den_Bosch
  alias: Vertrek naar Den Bosch
  trigger:
  - entity_id: sensor.bredadenbosch
    platform: state
  condition:
  - condition: and
    conditions:
    - after: '15:00:00'
      before: '16:30:00'
      condition: time
      weekday:
      - mon
      - tue
      - wed
      - thu
      - fri
    - condition: state
      entity_id: device_tracker.hmmbob
      state: work
  action:
  - data:
      message: Vertrektijd {{ states.sensor.bredadenbosch.attributes.departure_time_actual
        }} vanaf spoor {{ states.sensor.bredadenbosch.attributes.departure_platform
        }}, aankomst om {{ states.sensor.bredadenbosch.attributes.arrival_time_actual
        }} op spoor {{ states.sensor.bredadenbosch.attributes.arrival_platform }}.
        Volgende trein vertrekt om {{ states.sensor.bredadenbosch.attributes.next
        }}.
      title: 'Trein naar Den Bosch: {{ states.sensor.bredadenbosch.attributes.status
        }}.'
    service: notify.pushbullet


Door het gebruik van de state als trigger van de automation triggert hij steeds als de sensor van state (of een van de attributen) veranderd: daardoor ben ik altijd op de hoogte van eventuele vertragingen of uitval.

Reacties


Door Tweakers user jjust, dinsdag 14 november 2017 08:06

Leuke automatisering! Misschien ga ik dat ook aan Hass toevoegen.


Door Tweakers user Timple, woensdag 15 november 2017 12:21

Nice! Jammer dat ik net sinds een maandje ben overgestapt van trein naar auto...

Door Tweakers user Hmmbob, woensdag 15 november 2017 12:34

Timple schreef op woensdag 15 november 2017 @ 12:21:
Nice! Jammer dat ik net sinds een maandje ben overgestapt van trein naar auto...
Daar kun je vast met de Google Maps Travel Time sensor wat mee :)

https://home-assistant.io...ensor.google_travel_time/

Door Tweakers user AW_Bos, woensdag 15 november 2017 17:50

Is het niet leuker om een API te bouwen volgens de datastroom van het NDOV-loket.
De API van de NS zelf is erg verouderd, en niet heel accuraat. Somt toont hij gewoon treinen die gewoon uitgevallen zijn. Terwijl je met het NDOV-loket de actuele gegevens kan krijgen, en dus ook zelfs materieeltype en -nummer.

Door Tweakers user Hmmbob, woensdag 15 november 2017 19:29

AW_Bos schreef op woensdag 15 november 2017 @ 17:50:
Is het niet leuker om een API te bouwen volgens de datastroom van het NDOV-loket.
De API van de NS zelf is erg verouderd, en niet heel accuraat. Somt toont hij gewoon treinen die gewoon uitgevallen zijn. Terwijl je met het NDOV-loket de actuele gegevens kan krijgen, en dus ook zelfs materieeltype en -nummer.
Goed idee. Maar ik heb geen API gebouwd, ik gebruik het NS component van Home Assistant welke gebruik maakt van de API van de NS. Die overigens in mijn ervaring prima, tijdig en juist is. Tijdens het debuggen van mijn toevoeging over de perron-informatie heb ik ook gewoon alle ritnummers en materieel voorbij zien komen, dus wat het grote verschil is zie ik niet zo.

Maar please, proof me wrong en schrijf een NDOV module voor Home Assistant, dan ga ik daar ook mee spelen :)

Door Tweakers user Hmmbob, donderdag 16 november 2017 20:22

Timple schreef op woensdag 15 november 2017 @ 12:21:
Nice! Jammer dat ik net sinds een maandje ben overgestapt van trein naar auto...
Kwam toevallig langs dit artikel: https://seanb.co.uk/2017/...l-time-in-home-assistant/

Reactie formulier
(verplicht)
(verplicht, maar wordt niet getoond)
(optioneel)