Avertizări meteo

#1
Update:
-erori rezolvate cu municipiul Bucuresti (nu era afisat)
-eroare rezolvata cu codul rosu

Dacă folosești Home Assistant și vrei să fii cu un pas înaintea vremii, atunci integrarea avertizărilor meteo de la ANM (Administrația Națională de Meteorologie) e o mișcare deșteaptă.
[Image: alerta-1.png]

Tot ce-ți trebuie este:
  • Home Assistant funcțional
  • Acces la fișierul configuration.yaml

Deschide fișierul configuration.yaml

Mergi în Home Assistant, intră în File Editor

Caută fișierul configuration.yaml

Dă scroll până găsești zona cu sensor: sau adaugă la finalul fișierului dacă nu există deja

Adaugă acest cod:

În cod se va înlocui TM cu codul județului dorit (in toate sectiunile de cod), de ex. CS MH GJ etc.

Code:
sensor:
  - platform: rest
    name: met_alerta
    resource: https://hass-forum.ro/api/meteo.php
    value_template: "OK"
    json_attributes:
      - alerts
    scan_interval: 2700

Salvează și dă un restart la Home Assistant

Mergi la Settings → System → Restart


Card

În cod se va înlocui TM cu codul județului dorit.

Code:
type: markdown
content: >
  {% set judet = 'TM' %} {% set alerts = state_attr('sensor.met_alerta',
  'alerts') %}

  {% macro bold_judet(judete, target) -%}
    {%- for j in judete %}
      {%- if j == target %}
        <strong>{{ j }}</strong>{% if not loop.last %}, {% endif %}
      {%- else %}
        {{ j }}{% if not loop.last %}, {% endif %}
      {%- endif %}
    {%- endfor %}
  {%- endmacro %}

  {% if alerts | selectattr('Judete', 'defined') | selectattr('Judete',
  'search', judet) | list | length > 0 %}
    {% for alert in alerts if judet in alert['Judete'] %}

  <div style="border: 2px solid #FF6F00; border-radius: 10px; padding: 15px;
  margin-bottom: 15px; background: #FFF8E1; box-shadow: 0 3px 6px
  rgba(0,0,0,0.1);">
    <h3 style="color: #E65100; font-size: 18px; margin-top: 0;">⚠️ Cod {{ alert['Cod'] }}</h3>
    <p><strong>? Fenomene:</strong> {{ alert['Fenomene'] }}</p>
    <p><strong>? Perioadă:</strong> {{ alert['Interval'] }}</p>
    <p><strong>? Județe afectate:</strong> {{ bold_judet(alert['Judete'], judet) }}</p>
  </div>

    {% endfor %}
  {% else %} <div style="padding: 15px; border-radius: 10px; background:
  #E0F2F1; color: #004D40;">
    ✅ Nicio alertă meteo pentru județul <strong>{{ judet }}</strong>.
  </div> {% endif %}

Automatizari

Pentru automatizari vom avea nevoie de inca un senzor in configuration.yaml:

Code:
template:
- sensor:
    - name: "Avertizare Meteo"
      unique_id: alerta_meteo_senzor
      state: >
        {% set judet = 'TM' %}
        {% set alerts = state_attr('sensor.met_alerta', 'alerts') %}
        {% set cod = namespace(val='off') %}
        {% if alerts %}
          {% for alert in alerts %}
            {% if judet in alert['Judete'] %}
            {% if 'Cod' in alert %}
                    {% set cod.val = alert['Cod'] %}
                        {% endif %}
              {% break %}
            {% endif %}
          {% endfor %}
        {% endif %}
        {{ cod.val }}
      attributes:
        judet: TM

Cod automatizare (notificari):

Code:
alias: "[Meteo] Notificare avertizare nouă"
description: "Gestionează toate notificările pentru avertizări meteo"
trigger:
  - platform: state
    entity_id: sensor.avertizare_meteo
    not_from: "unavailable"
condition: []
action:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ trigger.from_state.state == 'off' and trigger.to_state.state != 'off' }}"
        sequence:
          - service: notify.notify
            data:
              title: "⚠ Avertizare Meteo Nouă ⚠"
              message: "A apărut o nouă avertizare - COD: {{ trigger.to_state.state }}"
     
      - conditions:
          - condition: template
            value_template: "{{ trigger.from_state.state != 'off' and trigger.to_state.state == 'off' }}"
        sequence:
          - service: notify.notify
            data:
              title: "✅ Avertizări încheiate"
              message: "Toate avertizările meteo au expirat"
             
      - conditions:
          - condition: template
            value_template: "{{ trigger.from_state.state != 'off' and trigger.to_state.state != 'off' and trigger.from_state.state != trigger.to_state.state }}"
        sequence:
          - service: notify.notify
            data:
              title: "? Actualizare Avertizare Meteo"
              message: >-
                Avertizare modificată:
                {{ trigger.from_state.state }} → {{ trigger.to_state.state }}
    default: []
mode: single


[Image: WhatsApp-Image-2025-06-28-at-13.48.04_75...68x670.jpg]
(Edited 07-08-2025, 06:57 PM by Andrei.)
#2
Ideea e super utila, o aveam si eu in lucru de ceva timp, dar nu am finalizat-o.

Eu am reusit sa preiau datele direct din feed-ul lor RSS https://www.meteoromania.ro/avertizari-rss.php, citit in HA, fara un server intermediar. Ar fi excelent daca ai putea modifica integrarea sa nu mai depinda strict de serverul tau. Au si un API XML.
#3
(07-04-2025, 02:01 PM)another_andrew Wrote: Ideea e super utila, o aveam si eu in lucru de ceva timp, dar nu am finalizat-o.

Eu am reusit sa preiau datele direct din feed-ul lor RSS https://www.meteoromania.ro/avertizari-rss.php, citit in HA, fara un server intermediar. Ar fi excelent daca ai putea modifica integrarea sa nu mai depinda strict de serverul tau. Au si un API XML.
Salut. Mi-a fost mai ușor sa interpretez datele într-un api propriu. Plus ca ideea era să preiau date din mai multe locuri. Dacă ai reușit să reproduci codul cu preluare din api-ul lor direct, poți să postezi codul pentru cei care nu vor api intermediar Smile
#4
Multumesc frumos am tot cautat asa ceva acum incerc sa-l instalez poate o sa am nevoie de ajutor sunt incepator

(06-20-2025, 07:02 PM)Andrei Wrote: Update:
-erori rezolvate cu municipiul Bucuresti (nu era afisat)
-eroare rezolvata cu codul rosu

Dacă folosești Home Assistant și vrei să fii cu un pas înaintea vremii, atunci integrarea avertizărilor meteo de la ANM (Administrația Națională de Meteorologie) e o mișcare deșteaptă.
[Image: alerta-1.png]

Tot ce-ți trebuie este:
  • Home Assistant funcțional
  • Acces la fișierul configuration.yaml

Deschide fișierul configuration.yaml

Mergi în Home Assistant, intră în File Editor

Caută fișierul configuration.yaml

Dă scroll până găsești zona cu sensor: sau adaugă la finalul fișierului dacă nu există deja

Adaugă acest cod:

În cod se va înlocui TM cu codul județului dorit (in toate sectiunile de cod), de ex. CS MH GJ etc.

Code:
sensor:
  - platform: rest
    name: met_alerta
    resource: https://hass-forum.ro/api/meteo.php
    value_template: "OK"
    json_attributes:
      - alerts
    scan_interval: 2700

Salvează și dă un restart la Home Assistant

Mergi la Settings → System → Restart


Card

În cod se va înlocui TM cu codul județului dorit.

Code:
type: markdown
content: >
  {% set judet = 'TM' %} {% set alerts = state_attr('sensor.met_alerta',
  'alerts') %}

  {% macro bold_judet(judete, target) -%}
    {%- for j in judete %}
      {%- if j == target %}
        <strong>{{ j }}</strong>{% if not loop.last %}, {% endif %}
      {%- else %}
        {{ j }}{% if not loop.last %}, {% endif %}
      {%- endif %}
    {%- endfor %}
  {%- endmacro %}

  {% if alerts | selectattr('Judete', 'defined') | selectattr('Judete',
  'search', judet) | list | length > 0 %}
    {% for alert in alerts if judet in alert['Judete'] %}

  <div style="border: 2px solid #FF6F00; border-radius: 10px; padding: 15px;
  margin-bottom: 15px; background: #FFF8E1; box-shadow: 0 3px 6px
  rgba(0,0,0,0.1);">
    <h3 style="color: #E65100; font-size: 18px; margin-top: 0;">⚠️ Cod {{ alert['Cod'] }}</h3>
    <p><strong>? Fenomene:</strong> {{ alert['Fenomene'] }}</p>
    <p><strong>? Perioadă:</strong> {{ alert['Interval'] }}</p>
    <p><strong>? Județe afectate:</strong> {{ bold_judet(alert['Judete'], judet) }}</p>
  </div>

    {% endfor %}
  {% else %} <div style="padding: 15px; border-radius: 10px; background:
  #E0F2F1; color: #004D40;">
    ✅ Nicio alertă meteo pentru județul <strong>{{ judet }}</strong>.
  </div> {% endif %}

Automatizari

Pentru automatizari vom avea nevoie de inca un senzor in configuration.yaml:

Code:
template:
- sensor:
    - name: "Avertizare Meteo"
      unique_id: alerta_meteo_senzor
      state: >
        {% set judet = 'TM' %}
        {% set alerts = state_attr('sensor.met_alerta', 'alerts') %}
        {% set cod = namespace(val='off') %}
        {% if alerts %}
          {% for alert in alerts %}
            {% if judet in alert['Judete'] %}
            {% if 'Cod' in alert %}
                    {% set cod.val = alert['Cod'] %}
                        {% endif %}
              {% break %}
            {% endif %}
          {% endfor %}
        {% endif %}
        {{ cod.val }}
      attributes:
        judet: TM

Cod automatizare (notificari):

Code:
alias: "[Meteo] Notificare avertizare nouă"
description: "Gestionează toate notificările pentru avertizări meteo"
trigger:
  - platform: state
    entity_id: sensor.avertizare_meteo
    not_from: "unavailable"
condition: []
action:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ trigger.from_state.state == 'off' and trigger.to_state.state != 'off' }}"
        sequence:
          - service: notify.notify
            data:
              title: "⚠ Avertizare Meteo Nouă ⚠"
              message: "A apărut o nouă avertizare - COD: {{ trigger.to_state.state }}"
     
      - conditions:
          - condition: template
            value_template: "{{ trigger.from_state.state != 'off' and trigger.to_state.state == 'off' }}"
        sequence:
          - service: notify.notify
            data:
              title: "✅ Avertizări încheiate"
              message: "Toate avertizările meteo au expirat"
             
      - conditions:
          - condition: template
            value_template: "{{ trigger.from_state.state != 'off' and trigger.to_state.state != 'off' and trigger.from_state.state != trigger.to_state.state }}"
        sequence:
          - service: notify.notify
            data:
              title: "? Actualizare Avertizare Meteo"
              message: >-
                Avertizare modificată:
                {{ trigger.from_state.state }} → {{ trigger.to_state.state }}
    default: []
mode: single


[Image: WhatsApp-Image-2025-06-28-at-13.48.04_75...68x670.jpg]

Codul pt card unde bagi?mersi
(Edited 07-25-2025, 06:51 PM by Tibrox.)
#5
Frumos lucrat! O problemă. Eu am pus la filtru B (București). Constat că îmi adaugă Bucureștiul la listă de capul lui! (am pus original de la ANM si rezultatul din HA).

Sau: la site-ul ANM zice "COD ROȘU
Interval de valabilitate: 11 august, ora 10 – 12 august, ora 10
Fenomene vizate: val de căldură intens și persistent, caniculă, disconfort termic deosebit de accentuat, noapte tropicală
Zone afectate: județele Mehedinți și Dolj

Noi primim: Cod ROSU
Fenomene: vijelii puternice
Perioadă: 10 august, 10:00 - 12 august, 10:00
Județe afectate: B, DJ, MH


Attached Files Thumbnail(s)
       
(Edited 08-10-2025, 06:02 PM by Bud.)
#6
Salut, e frumos dar apare ciudat ?!


⚠️ Cod GALBEN

? Fenomene: intensificări ale vântului

? Perioadă: 01 January, 02:00 - 11 October, 23:00

? Județe afectate: TL, CT, GL, VN, CV, BV, MH, BT, IS, VS, SV, NT, BC


01 January ???



Recently Browsing 1 Guest(s)