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”.
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.
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:
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 %}
}
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:
Outra opção é receber uma notificação diária/semanal, num dispositivo móvel, através de uma automatização:
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.