NS Reisinformatie in Home Assistant

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

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.