Concentração de Pólen - RPA

Tendo em conta que o meu filho anda a passar bastante mal, este ano, à conta de alergias a pólen - e a elevada concentração que tem havido no ar, nos últimos meses -, há algum tempo que contemplava fazer algo para o ajudar a precaver-se quanto a isso.

Claro que ele usar máscara para andar na rua, em dias piores, será toda uma outra história.


Recordo-me de já ter pesquisado dados polínicos e do quão desiludido fiquei pela fraca partilha que realmente existe… Muitos dados históricos, de anos atrás, ou dados restritos a laboratórios universitários e instituições, parece ser a norma.

O melhor que consegui encontrar é um boletim semanal, partilhado pela Rede Portuguesa de Areobiologia (RPA).


O projecto inicia-se com a criação de um scrape, utilizando como “Resource” o url: “https://www.rpaerobiologia.com/previsao-polinica/XXX

Integrações > Scrape

Opções de localizações (trocar pelo XXX, o local pretendido):

  • vila-real
  • porto
  • coimbra
  • castelo-branco
  • lisboa
  • evora
  • faro
  • ponta-delgada
  • funchal

Preencher os dados e carregar next/seguinte.

Na nova janela escolham o nome que pretendem dar, e utilizem o css select: “div > span.block.nivel-text”.
Alterem “Device Class” para “no device class”, “State Class” para “no state class” e Unit of Measurement para “no unit of measurement”; e terminem por submeter/submit.

Irá, de seguida, surgir o sensor. Se tiverem mais sensores Scrape podem alterar o nome para algo mais fácil de encontrar. Vão a “System options” e retirem a segunda opção “Enable pooling for updates”.

scrape5

Isso irá fazer com que o sensor (e os restantes sensores scrape !Atenção!, não se atualizem - default: 600s). Para tal iremos criar uma automatização que “actualiza” os vários sensores que possamos ter ou cada sensor de forma especifica.

Confirmem depois que o sensor está a transmitir os dados correctos.

scrape4


A automatização para o sensor, actualizando-se de 15 em 15 horas - podem usar outra opção à escolha de tempo. Visto que a atualização do boletim é semanal, não fará muita diferença.

alias: Concentração de Pólen - Scrape Sensor
description: ""
trigger:
  - platform: time_pattern
    hours: /15
condition: []
action:
  - service: homeassistant.update_entity
    data: {}
    target:
      entity_id:
        - sensor.nivel_de_polen_XXX
mode: single

A partir deste ponto é à escolha de cada um, sobre o que fazer com estes dados.
Uma opção será um card, no Frontend, que varia de cor e icon conforme o state do sensor (Muito elevado, Elevado, Moderado, Baixo).

Exemplo:
card1

type: entities
entities:
  - entity: sensor.nivel_de_polen_XXX 
    name: 'Pólen :'
    style:
      hui-generic-entity-row:
        $: |
          .text-content:not(.info) {
                text-align: right;
          font-weight: 1px;
          letter-spacing: 5px;
          {% if states('sensor.nivel_de_polen_XXX') == 'Muito elevado' %}
          color: red;
          {% elif states('sensor.nivel_de_polen_XXX') == 'Elevado' %}
          color: yellow;
          {% elif states('sensor.nivel_de_polen_XXX') == 'Moderado' %}
          color: green;
          {% elif states('sensor.nivel_de_polen_XXX') == 'Baixo' %}
          color: blue;
          {% endif %}
          }
card_mod:
  style: |
    ha-card {
      ;
      height: px !important;
      border-width: 1px;
      text-align: left;
      font-weight: ;
      letter-spacing: 2px;
      {% if states('sensor.nivel_de_polen_XXX') == 'Muito elevado' %}
      --paper-item-icon-color: red;
      --card-mod-icon: mdi:signal-cellular-3;
      {% elif states('sensor.nivel_de_polen_XXX') == 'Elevado' %}
      --paper-item-icon-color: yellow;
      --card-mod-icon: mdi:signal-cellular-2;
      {% elif states('sensor.nivel_de_polen_XXX') == 'Moderado' %}
      --paper-item-icon-color: green;
      --card-mod-icon: mdi:signal-cellular-1;
      {% elif states('sensor.nivel_de_polen_XXX') == 'Baixo' %}
      --paper-item-icon-color: blue;
      --card-mod-icon: mdi:signal-cellular-outline;
      {% endif %}
    }

card2

show_name: true
show_icon: true
type: button
tap_action:
  action: more-info
entity: sensor.nivel_de_polen_XXX 
show_state: true
hold_action:
  action: none
name: Concentração de Pólen
icon_height: 50px
card_mod:
  style: |
    ha-card {
      ;
      height: px !important;
      border-width: 1px;
      {% if states('sensor.nivel_de_polen_XXX') == 'Muito elevado' %}
      --secondary-text-color: red;
      {% elif states('sensor.nivel_de_polen_XXX') == 'Elevado' %}
      --secondary-text-color: yellow;
      {% elif states('sensor.nivel_de_polen_XXX') == 'Moderado' %}
      --secondary-text-color: green;
      {% elif states('sensor.nivel_de_polen_XXX)' == 'Baixo' %}
      --secondary-text-color: blue;
      {% endif %}
    }
    .state {
      height: px;
      padding: 5px
     }
    :host {
      {% if states('sensor.nivel_de_polen_XXX') == 'Muito elevado' %}
      --paper-item-icon-color: red;
      --card-mod-icon: mdi:signal-cellular-3;
      {% elif states('sensor.nivel_de_polen_XXX') == 'Elevado' %}
      --paper-item-icon-color: yellow;
      --card-mod-icon: mdi:signal-cellular-2;
      {% elif states('sensor.nivel_de_polen_XXX') == 'Moderado' %}
      --paper-item-icon-color: green;
      --card-mod-icon: mdi:signal-cellular-1;
      {% elif states('sensor.nivel_de_polen_XXX') == 'Baixo' %}
      --paper-item-icon-color: blue;
      --card-mod-icon: mdi:signal-cellular-outline;
      {% endif %}
     }

Exemplos, conforme state:

Elevado
Moderado
Baixo

Outra opção é receber uma notificação diária/semanal, num dispositivo móvel, através de uma automatização:
Notification

alias: Concentração de Pólen - Daily Notification
description: ""
trigger:
  - platform: time
    at: "11:43:00" #alterem o tempo à escolha
condition: []
action:
  - service: notify.mobile_app_mobile_name #adicionem a entidade correcta
    data:
      title: "Concentração de Pólen:"
      message: >-
        {{ states('sensor.nivel_de_polen_XXX') + ' - ' +
        states('sensor.date_time') }}
mode: single

PS. Não se esqueçam de alterar “sensor.nivel_de_polen_XXX” para o nome do vosso sensor.

9 Curtiram

Muito obrigado pela partilha!

Muito bom projeto tenho algo do gênero mas com o mapa, deixei incompleto

Muito obrigado pela partilha.
É sempre muito bom quando apreendemos coisas novas.


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade