NL Alert in Home Assistant

Pagina: 1
Acties:

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 22:34

Toppe

Oké ✅

Topicstarter
Afbeeldingslocatie: https://crisisprodwe.azureedge.net/media/58070/nl-alert_header-incl-logo-payoff_940.png

NL Alert / Crisis.nl Home Assistant Intergratie

Hij werkt op basis van de multiscrape intergratie.

Afbeeldingslocatie: https://tweakers.net/i/8TfLjdVFRJ-XzmW-v3_1rd33jWc=/x800/filters:strip_exif()/f/image/GhxMDmPAyrgG0zfXADhqD4ky.png?f=fotoalbum_large

Afbeeldingslocatie: https://tweakers.net/camo/6780cf38a96a3c1d5e05472e4a4334e180e517b1/?url=https%3A%2F%2Fi.ibb.co%2FQDydwvx%2Ftest.png

Er zit nog één probleem in: Je moet handmatig kaart ophalen.

Code voor de multiscrape sensor
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
32
33
34
35
36
37
38
multiscrape:
  - name: HA scraper
    resource: https://crisis.nl/nl-alert/nl-alerts/
    scan_interval: 60
    sensor:
      - unique_id: nl_alert_state
        name: NL-Alert
        select: "#content > div:nth-child(4) > a > h3"
        value_template: '{{ "Actief" if  "ACTIEF" in value else "Geen actieve NL Alerts" }}'
        attributes:
          - name: Melding
            select: "#content > div:nth-child(4) > a > p"
          - name: Datum & Tijd
            select: "#content > div:nth-child(4) > a > h3"
            value_template: >
              {{ value.split('ACTIEF')[-1].strip() if 'ACTIEF' in value else value.strip() }}
          - name: Meer informatie
            select: "#content > div:nth-child(4) > a"
            attribute: href
          - name: Systeem test
            select: "#content > div:nth-child(4) > a > p"
            value_template: >
              '{{ "True" if "TESTBERICHT" in value else "False" }}'

  - name: NL
    button:
      unique_id: refresh_map
      name: Kaart laden
    resource_template: http://www.crisis.nl{{ state_attr('sensor.nl_alert_state', 'meer_informatie') }}
    scan_interval: 3600
    sensor:
      - unique_id: nl_alert_kaart
        name: Kaart
        value_template: "Kaart"
        attributes:
          - name: URL
            select: "#main > div.wrapper > div.googlemaps > img"
            attribute: src


Simpele automatisering waarmee de kaart wordt opgehaald als er een nieuwe NL-Alert is
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
alias: Kaart ophalen bij NL Alert
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.nl_alert_state
  - platform: homeassistant
    event: start
condition: []
action:
  - service: button.press
    data: {}
    target:
      entity_id: button.refresh_map
mode: single


Voor het ophalen van de status:

Daarna kan je gewoon een automatisering maken op basis van de status:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.nl_alert_in_de_regio
    to: "on"
condition: []
action:
  - service: switch.turn_off
    data: {}
    target:
      entity_id: switch.athom_smart_plug_v2
mode: single




Simpele melding + kaart:
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
type: conditional
conditions:
  - entity: sensor.nl_alert_state
    state: Actief
card:
  type: markdown
  content: >-
    <ha-alert alert-type="error"><b>{{ state_attr('sensor.nl_alert_state',
    'datum_tijd') }}</b>

    {{ state_attr('sensor.nl_alert_state', 'melding') }}

    </ha-alert>

    ![]({{ state_attr('sensor.nl_alert_kaart', 'url') }})
    [Meer Informatie](https://www.crisis.nl{{ state_attr('sensor.nl_alert_state', 'meer_informatie') }})


Sensor die aan/uit gaat afhankelijk of er een NL Alert in jou regio is:
YAML:
1
2
3
4
5
6
7
8
9
10
  - binary_sensor:
      - name: "NL-Alert in de regio"
        state: >-
          {% set woonplaats = 'Amsterdam' %}
          {% set checklist = [ woonplaats | lower, 'testbericht' ] | join('|') %}
          {% set message = state_attr('sensor.nl_alert_state', 'melding') | lower %}
          {{
            message is search(checklist)
            and not message is search('ingetrokken|afgemeld|einde berichtgeving')
          }}


Knoppen onder de melding om zelf een automatisering aan te zetten:
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
32
33
34
35
36
37
38
type: conditional
conditions:
  - entity: sensor.nl_alert_state
    state: Actief
card:
  type: vertical-stack
  cards:
    - type: markdown
      content: >-
        <ha-alert alert-type="error"><b>{{ state_attr('sensor.nl_alert_state',
        'datum_tijd') }}</b>

        {{ state_attr('sensor.nl_alert_state', 'melding') }}

        </ha-alert>

        ![]({{ state_attr('sensor.nl_alert_kaart', 'url') }})

        [Meer Informatie](https://www.crisis.nl{{
        state_attr('sensor.nl_alert_state', 'meer_informatie') }})
    - type: horizontal-stack
      cards:
        - show_name: false
          show_icon: true
          type: button
          tap_action:
            action: toggle
          entity: automation.automation_42
          icon: mdi:air-purifier
          icon_height: 25px
        - show_name: false
          show_icon: true
          type: button
          tap_action:
            action: toggle
          entity: automation.automation_42
          icon: mdi:air-purifier-off
          icon_height: 25px


Als je wil weten of het een 'echte' melding is dan kan je onderstaande als conditie toevoegen:
code:
1
{{ state_attr('sensor.nl_alert_state', 'systeem_test') }}

To-Do:

In de afbeelding URL wordt een string mee gegeven, via onderstaande uitleg van @CodeCaster (dank!) kan je de GPS coordinaten binnen halen, zou tof zijn als hier mensen zijn met kennis van Python een mooie tool kunnen maken om de GPS locaties hier uit te trekken en deze naar Home Assistant te pushen.

Ook is het daarna nog zoeken of, en hoe, we die op een kaart kunnen krijgen om te kijken of je ingestelde locatie daarin valt.

De "enc"-parameter is in het encoded polyline-algoritme. Dus:
  1. Pak de enc-parameter van de querystring
  2. UrlDecode deze
  3. Decodeer de Polyline
Tada:

Afbeeldingslocatie: https://tweakers.net/i/dHgbCMg3euReVUTCQX3rPlNS5xc=/800x/filters:strip_exif()/f/image/KOACqs7AKJWqQtUKsHPtJLsl.png?f=fotoalbum_large

De URL die je toont, heeft de volgende structuur:
code:
1
https://maps.googleapis.com/maps/api/staticmap?language=X&size=Y&scale=Z&path=PATH&key=K&signature=S


Dus dan pak je uit die querystring de path-parameter, en daarin staat (UrlEncoded):
code:
1
fillcolor:0xFF000033%7Ccolor:0xFFFFFF00%7Cenc:sbn%7DHg%7BnZjMnAjMrDbLrIzJjMrIzOvGjRrDnUjCbVf@jWg@~WkCnUsDnUwGjRsInP%7BJvLcLrIkMfEkMz@_N%7B@wLgEwLsI%7BJwL_IoPwGkRgEoUwBoUg@_Xf@kWvBcVfEoUvGkR~H%7BOzJkMvLsIvLsD~MoA


Dat is een omschrijving van wat er op de kaart moet worden getekend (het "path"). Deze decodeer je (UrlDecode), en daarna splitsen op "|" (was %7C encoded):
code:
1
2
3
fillcolor:0xFF000033
color:0xFFFFFF00
enc:sbn}Hg{nZjMnAjMrDbLrIzJjMrIzOvGjRrDnUjCbVf@jWg@~WkCnUsDnUwGjRsInP{JvLcLrIkMfEkMz@_N{@wLgEwLsI{JwL_IoPwGkRgEoUwBoUg@_Xf@kWvBcVfEoUvGkR~H{OzJkMvLsIvLsD~MoA

En wat volgt na "enc:" voer je aan een Polyline-decoder. Hoe je dat laatste in Python doet, weet ik niet, maar daar bestaan vast libraries voor!

Edit: https://pypi.org/project/polyline/

NL-Alert, NLalert, NL, Alert, crisis, crisis.nl

[ Voor 122% gewijzigd door Toppe op 05-12-2022 13:45 ]

🏁 F1HUB.APP | De essentie van Formule 1. Geen ruis, geen advertenties, alleen pure data en statistieken. Real-time racing insights.


  • Rouwette
  • Registratie: Maart 2007
  • Nu online

Rouwette

Rouwette.com

Toppe schreef op maandag 5 december 2022 @ 13:22:
Ben wel even benieuwd wie hem nou geïnstalleerd heeft en waarbij hij ook werd geactiveerd met het test bericht. Ik tag dus even de mensen die mijn originele post hebben geliked

@Bongoarnhem @RBNMK @maxxie85 @GrasshopperNL @Hmmbob @jj85 @CodeCaster @kepler
Afbeeldingslocatie: https://i.ibb.co/QDydwvx/test.png
De kaart is nu verborgen, dit bericht ook.

https://www.rouwette.com/


  • jj85
  • Registratie: Januari 2002
  • Laatst online: 22:17
Toppe schreef op maandag 5 december 2022 @ 13:22:
Ben wel even benieuwd wie hem nou geïnstalleerd heeft en waarbij hij ook werd geactiveerd met het test bericht. Ik tag dus even de mensen die mijn originele post hebben geliked

@Bongoarnhem @RBNMK @maxxie85 @GrasshopperNL @Hmmbob @jj85 @CodeCaster @kepler
Afbeeldingslocatie: https://tweakers.net/i/wjCmsq3LioItlpooH0FJ-NOmF1M=/800x/filters:strip_exif()/f/image/Un6HOtPbM1HPCjUlUs82rTZ7.png?f=fotoalbum_large

Geen kaart inderdaad. Url direct in de browser gaf een mooie kaart. Maar HA toonde deze niet (gaf volgens mij een 403 error in de console)

  • Rouwette
  • Registratie: Maart 2007
  • Nu online

Rouwette

Rouwette.com

Toppe schreef op maandag 5 december 2022 @ 13:49:
[...]


Waarschijnlijk als je sensor.nl_alert_kaart bewerkt bij ontwikkelaarshulpmiddelen en de url veranderd naar onderstaande dat je wel netjes een kaart krijgt:
code:
1
https://maps.googleapis.com/maps/api/staticmap?language=nl&size=620x620&scale=1&path=fillcolor:0xFF000033%7Ccolor:0xFFFFFF00%7Cenc:cjlcIsheh@wBzaAkRbV%7BT?oKwQkHwe@rSsg@vG%7BEbQkRjR??ja@&key=AIzaSyAwEl846obuABF7OKu2_v5KhP9cXki60P0&signature=NTXWj34QM5VbDQayecCZvthqW74=
Afbeeldingslocatie: https://i.ibb.co/BCcPRnw/test.png
:Y

https://www.rouwette.com/

Pagina: 1