Dashboard météo all inclusive V2 (maj 02/08/23)

Hello,
Merci, j’ai réussi à reproduire quelque chose :

template:
  - trigger:
      - platform: time_pattern
        hours: /1
    action:
      - service: weather.get_forecast
        data:
          type: hourly
        target:
          entity_id: weather.fouquieres_les_lens
        response_variable: hourly
    sensor:
      - name: "Weather Forecast Hourly"
        unique_id: weather_forecast_hourly
        state: "{{ now().isoformat() }}"
        attributes:
          forecast: "{{ hourly.forecast }}"

Par contre, il doit me manquer une info en haut de la carte :

Une question, comme je suis aussi perdu dans le découpage des fichiers yaml, si je veux déplacer la partie citée en haut dans sensors.yaml ou template.yaml, comment je dois modifier la syntaxe ? est-ce qu’il y a un tuto quelque part concernant la syntaxe ?

Dans sensors.yaml, je vais essayer ça :

- platform: template
  trigger:
    - platform: time_pattern
      hours: /1
  action:
    - service: weather.get_forecast
      data:
        type: hourly
      target:
        entity_id: weather.fouquieres_les_lens
      response_variable: hourly
  sensor:
    - name: "Weather Forecast Hourly"
      unique_id: weather_forecast_hourly
      state: "{{ now().isoformat() }}"
      attributes:
        forecast: "{{ hourly.forecast }}"

Merci.

C’est un template, on le met dans template.yaml et ajoute template: !include template.yaml dans ton configuration.yaml.
tu créer un fichier template.yaml dans /config/.
faut enelever le template: au début du code et met le reste.

- trigger:
    - platform: time_pattern
      hours: /1
  action:
    - service: weather.get_forecast
      data:
        type: hourly
      target:
        entity_id: weather.fouquieres_les_lens
      response_variable: hourly
  sensor:
    - name: "Weather Forecast Hourly"
      unique_id: weather_forecast_hourly
      state: "{{ now().isoformat() }}"
      attributes:
        forecast: "{{ hourly.forecast }}"

j’utilise pas ce template, je saurais te dire.
Peu être que @vingerha en saura plus.

Je ne sais pas ce que tu manque mais ici la mienne, j; ai ajoute ‹ swipe › pour aussi swiper les jours …sur mobile très utile.

type: custom:stack-in-card
mode: vertical
style: |
  ha-card {
     border-width: 0px !important;
     background: none
  }
cards:
  - type: horizontal-stack
    cards:
      - type: vertical-stack
        cards:
          - type: custom:card-templater
            card:
              type: custom:compass-card
              card_mod:
                style: |
                  ha-card {--ha-card-border-width: 0; 
                  background: none }
              indicator_sensors:
                - sensor_template: |
                    {% if states('sun.sun') == "below_horizon" %}
                        sensor.moon_api
                      {% else %}
                        sun.sun
                      {% endif %}
                  attribute_template: |
                    {% if states('sun.sun') == "below_horizon" %}
                      moon_azimuth
                      {% else %}
                        azimuth
                      {% endif %}                  
                  indicator:
                    type: circle
                    color_template: |
                      {% if states('sun.sun') == "below_horizon" %}
                        black
                      {% else %}
                        orange
                      {% endif %}
                    show: true
                  state_abbreviation:
                    show: false
              value_sensors:
                - sensor_template: |
                    {% if states('sun.sun') == "below_horizon" %}
                        sensor.moon_api
                      {% else %}
                        sun.sun
                      {% endif %}
                  attribute_template: |
                    {% if states('sun.sun') == "below_horizon" %}
                      moon_altitude
                      {% else %}
                        elevation
                      {% endif %}                   
                  decimals: 1
                  state_value:
                    show: true
                    color: white
              compass:
                circle:
                  background_image_template: |
                    {% if states('sun.sun') == "below_horizon" %}
                      /local/pictures/moon_phases/{{states.sensor.moon_phase.state}}.png
                    {% else %}
                      /local/pictures/house_abcd.jpg
                    {% endif %}
                  background_opacity: 0.7
                north:
                  show: true
                east:
                  show: true
                west:
                  show: true
                south:
                  show: true
            entities:
              - entity: sensor.moon_phase
              - entity: sun.sun
      - type: custom:horizon-card
        name: Sun
        card_mod:
          style: |
            .sun-card-footer .sun-card-text-subtitle {
                font-size: 1rem !important;
                color: var(--primary-text-color) !important;
            }
            .sun-card-header .sun-card-text-subtitle {
                font-size: 1rem  !important;
                color: var(--primary-text-color) !important;
            }
            .sun-card-header .sun-card-text-time {
                font-size: 1.1rem  !important;
                color: var(--primary-text-color) !important;
            }
            .sun-card-footer .sun-card-text-time {
                font-size: 1.1rem  !important;
                color: var(--primary-text-color) !important;
            }
            ha-card {
              border-width: 0px !important;
              background: none }
            }
  - type: custom:mod-card
    card:
      style: |
        ha-card {
           border-width: 0px !important;
           background: none
        }
      type: custom:meteofrance-weather-card
      entity: weather.abcd
      number_of_forecasts: '7'
      name: abcd
      details: true
      one_hour_forecast: true
      alert_forecast: true
      forecast: false
      hourlyforecast: false
      current: true
      static_icons: true
  - type: custom:text-divider-row
    text: Swipe for next 7 days
    align: center
  - type: custom:swipe-card
    reset_after: 10
    parameters:
      autoHeight: false
      initialSlide: 0
      centeredSlides: true
      loop: false
      followfinger: true
    cards:
      - type: custom:meteofrance-weather-card
        entity: weather.abcd
        number_of_forecasts: '14'
        current: false
        details: false
        alert_forecast: false
        animated_icons: true
        wind_forecast_icons: false
        forecast: true
        one_hour_forecast: false
        card_mod:
          style: |
            ha-card {--ha-card-border-width: 0; 
            background: none }          
            ha-card > ul > li:nth-child(7) {
              border-right: 0px !important;
            }       
            ha-card > ul > li:nth-child(8) {
              display: none;
            }       
            ha-card > ul > li:nth-child(9) {
              display: none;
            }
            ha-card > ul > li:nth-child(10) {
              display: none;
            }
            ha-card > ul > li:nth-child(11) {
              display: none;
            }
            ha-card > ul > li:nth-child(12) {
              display: none;
            }
            ha-card > ul > li:nth-child(13) {
              display: none;
            }
            ha-card > ul > li:nth-child(14) {
              display: none;
            }
      - type: custom:meteofrance-weather-card
        entity: weather.abcd
        number_of_forecasts: '14'
        current: false
        details: false
        alert_forecast: false
        animated_icons: true
        wind_forecast_icons: false
        forecast: true
        one_hour_forecast: false
        card_mod:
          style: |
            ha-card > ul > li:nth-child(1) {
              display: none;
            }       
            ha-card > ul > li:nth-child(2) {
              display: none;
            }       
            ha-card > ul > li:nth-child(3) {
              display: none;
            }
            ha-card > ul > li:nth-child(4) {
              display: none;
            }
            ha-card > ul > li:nth-child(5) {
              display: none;
            }
            ha-card > ul > li:nth-child(6) {
              display: none;
            }    
            ha-card > ul > li:nth-child(7) {
              display: none;
            }    
            ha-card {
             border-width: 0px !important;
             background: none
            }
  - type: custom:meteofrance-weather-card
    entity: sensor.weather_forecast_hourly
    number_of_forecasts: '14'
    current: false
    details: false
    alert_forecast: false
    animated_icons: true
    wind_forecast_icons: false
    forecast: true
    one_hour_forecast: false
    card_mod:
      style: |
        ha-card > ul > li:nth-child(7) {
          border-right: 0px !important;
        }       
        ha-card > ul > li:nth-child(8) {
          display: none;
        }       
        ha-card > ul > li:nth-child(9) {
          display: none;
        }
        ha-card > ul > li:nth-child(10) {
          display: none;
        }
        ha-card > ul > li:nth-child(11) {
          display: none;
        }
        ha-card > ul > li:nth-child(12) {
          display: none;
        }
        ha-card > ul > li:nth-child(13) {
          display: none;
        }
        ha-card > ul > li:nth-child(14) {
          display: none;
        }
        ha-card {
             border-width: 0px !important;
             background: none
            }
  - type: custom:meteofrance-weather-card
    entity: sensor.weather_forecast_hourly
    number_of_forecasts: '14'
    current: false
    details: false
    alert_forecast: false
    animated_icons: true
    wind_forecast_icons: false
    forecast: true
    one_hour_forecast: false
    card_mod:
      style: |
        ha-card > ul > li:nth-child(1) {
          display: none;
        }
        ha-card > ul > li:nth-child(2) {
          display: none;
        }
        ha-card > ul > li:nth-child(3) {
          display: none;
        }
        ha-card > ul > li:nth-child(4) {
          display: none;
        }
        ha-card > ul > li:nth-child(5) {
          display: none;
        }
        ha-card > ul > li:nth-child(6) {
          display: none;
        }
        ha-card > ul > li:nth-child(7) {
          display: none;
        }
        ha-card {
             border-width: 0px !important;
             background: none
            }

bonjour,
tu pourrais me dire qu’elle carte tu utilise pour ça ? et si possible partager le code ?
merci

Bonjour, toutes les cartes utilisées sont décrites plus haut et tous les codes sont partagés

1 « J'aime »

Je n’avais pas encore testé la carte windrose-card que nous présentait @MichelJ et bien c’est chose faite avec mon anémomètre Netatmo…
Voici le github pour rappel :

image

le code de la carte :

type: custom:windrose-card
title: Direction rafales vent (24h)
data_period:
  hours_to_show: 24
max_width: 300
windspeed_bar_location: bottom
windspeed_bar_full: true
wind_direction_entity:
  entity: sensor.anemometre_angle
windspeed_entities:
  - entity: sensor.anemometre_wind_strength
    name: moyenne
    use_statistics: false
    render_relative_scale: false
  - entity: sensor.anemometre_gust_strength
    name: rafale
wind_direction_unit: degrees
input_speed_unit: kph
output_speed_unit: kph
direction_compensation: 0
cardinal_direction_letters: NESW
matching_strategy: direction-first
direction_speed_time_diff: 1
speed_range_beaufort: false
speed_range_step: 10
speed_range_max: 100
center_calm_percentage: false
colors:
  rose_lines: rgb(0,255,0)
  rose_direction_letters: white
  rose_percentages: yellow
  bar_border: hsl(200, 100%, 60%)
  bar_unit_name: white
  bar_name: yellow
  bar_unit_values: white
  bar_percentages: orange

4 « J'aime »

Salut,

Petit commentaire, vous pouvez spécifier les point cardinaux en français avec le paramètre suivant:

cardinal_direction_letters: NESO

1 « J'aime »

merci je remarque que dans le code decrit ils utilisent une carte glance avec le nom de l’entité en haut et la valeur en bas toi tu as tout en bas
c’est pour cela que je me posé la question de la carte que tu avais employé car visiblement ce n’est pas la même ?
merci

Bonjour,
le code avec le nom et état en bas ce trouve dans la V2.

voici le code:

          - type: custom:mod-card
            card_mod:
              style:
                .: |
                  :host {
                    --text-divider-color: rgb(68, 115, 158);
                    --text-divider-line-size: 1px;
                  }
                  ha-card {
                    top: -30px;
                  }
            card:
              type: custom:text-divider-row
              text: CYCLES
              align: left
          - type: grid
            columns: 3
            square: false
            cards:
              - type: custom:button-card
                entity: sensor.lune
                show_state: true
                show_icon: false
                show_entity_picture: true
                aspect_ratio: 1.5/1
                size: 23%
                styles:
                  card:
                    - '--mdc-ripple-color': rgb(68, 115, 158)
                    - '--mdc-ripple-press-opacity': 0.5
                    - border-radius: 8px
                  state:
                    - font-size: 13px
                card_mod:
                  style: |
                    ha-card {
                      margin-top: -45px
                    } 
              - type: custom:button-card
                entity: sun.sun
                name: Soleil
                show_state: true
                show_icon: false
                show_entity_picture: true
                aspect_ratio: 1.5/1
                size: 36%
                state_display: |
                  [[[ 
                    if (entity.state === 'below_horizon') return "Sous l'horizon";
                    else return "Au-dessus de l'horizon";
                  ]]]
                styles:
                  card:
                    - '--mdc-ripple-color': rgb(68, 115, 158)
                    - '--mdc-ripple-press-opacity': 0.5
                    - border-radius: 8px
                  state:
                    - font-size: 13px
                card_mod:
                  style: |
                    ha-card {
                      margin-top: -45px
                    }             
              - type: custom:button-card
                entity: sensor.season
                name: Saison
                show_state: true
                show_icon: false
                show_entity_picture: true
                aspect_ratio: 1.5/1
                size: 28%
                state_display: |
                  [[[ 
                    if (entity.state === 'summer') return 'été';
                    if (entity.state === 'winter') return 'Hiver';
                    if (entity.state === 'autumn') return 'Automne';
                    else return 'Printemps';
                  ]]]
                styles:
                  card:
                    - '--mdc-ripple-color': rgb(68, 115, 158)
                    - '--mdc-ripple-press-opacity': 0.5
                    - border-radius: 8px
                  state:
                    - font-size: 13px
                card_mod:
                  style: |
                    ha-card {
                      margin-top: -45px
                    }             
2 « J'aime »

Ah d’accord merci beaucoup et désolé du coup :slight_smile: :sweat_smile:

Bonjour,

La carte popup-card n’apparaît plus
Avez vous des infos ?

Bonjour,
aucun soucis de mon coté.
Il te manque browser_mod, vu le message.

Bah alors je ne sais pas … petit bug pendant 10min,
Tout fonctionnait encore hier.

J’ai redémarré HA et ça fonctionne :sweat_smile:

Bonjour WarC0zes,
Tout d’abord bravo pour ce dashboard extrèmement qualitatif. Cela fait plusieur jour que je suis en train d’essayer de recréer le même. Avec mes erreures cela me permets d’apprendre mais aussi de comprendre comme est construit un dashboard comme le tien. J’aime beaucoup la carte des vigilances que tu as ajouté.
J’ai suivie le liens du commentaire que tu as ajouté sur comment la mettre en place. Est ce que cela fonctionne toujours ?
Je n’arrives pas du tout a la faire fonctionner, et je me demande si je ne loupe pas quelque chose ?
J’ai l’impression que je système d’api de météo france a changé non ? Dois-je enregistré un clé quelque chose de l’api pour récupéré les images de la carte et les alerte ?

Merci pour ton aide
Et encore bravo pour ton travail bluffant

Bonjour,
Les alertes météo france fonctionnent toujours avec l’api. Depuis les alertes météo france ont été réparer par l’intégration MF. L’utilisation de l’api MF servait parce que les alertes météo ne fonctionner plus depuis juin, mais c’est fixer. Donc maintenant utiliser l’api sert juste a récupérer la cartes des alertes météo pour aujourd’hui et demain.

Si tu utilise l’api, tu as besoin d’une clé token publique que tu créer avec ton compte de l’api.
Ce token est utiliser dans le command_line.

- sensor:
    name: Météo France alertes 11
    unique_id: meteo_france_alertes_11
    scan_interval: 10800
    command: >
      curl -X GET "https://public-api.meteofrance.fr/public/DPVigilance/v1/cartevigilance/encours" -H "accept: */*" -H "apikey: keyapi" | jq '{details: {"domain_max_color_id_today": .product.periods[0].timelaps.domain_ids[1].max_color_id,"domain_max_color_id_tomorrow": .product.periods[1].timelaps.domain_ids[1].max_color_id, "update_time": .product.update_time}, "today": .product.periods[0].timelaps.domain_ids[1].phenomenon_items | sort_by(.phenomenon_id), "tomorrow": .product.periods[1].timelaps.domain_ids[1].phenomenon_items | sort_by(.phenomenon_id)}'
    value_template: "{{ value_json.details.domain_max_color_id_today }}"
    json_attributes:
      - details
      - today
      - tomorrow

faut mettre ton token a la place de keyapi dans le commnd_line "apikey: keyapi"

Oh merci beaucoup cela fonctionne !Si j’ai bien compris le token fini par expiré et l’année prochaine il va falloir le changer ?

J’en profite pour poser une autre question. J’ai modifié ton iteme pollen avec un sensor de qualité d’air que j’ai chez moi. Le sensor donne l’informations si la qualité de l’air est bonne, moyenne etc…

J’aimerais changer l’icon mdi:alert-decagram-outline par une image présente dans mon /local/images/, et j’aimerais que cette image change en fonction de la qualité d’air.

Comment puis-je faire ?

template:
  - sensor:
    - name: Comment est la qualité de l'air ?
      icon: mdi:alert-decagram-outline
      state: > 
        {% if states("sensor.pm10_moyenne_sur_24h") |float <= 20 and states("sensor.pm2_5_moyenne_sur_24h") |float <= 10 %}
          Bonne
        {% elif states("sensor.pm10_moyenne_sur_24h") |float <= 40 and states("sensor.pm2_5_moyenne_sur_24h") |float <= 20 %}
          Moyenne
        {% elif states("sensor.pm10_moyenne_sur_24h") |float <= 50 and states("sensor.pm2_5_moyenne_sur_24h") |float <= 25 %}
          Dégradée
        {% elif states("sensor.pm10_moyenne_sur_24h") |float <= 100 and states("sensor.pm2_5_moyenne_sur_24h") |float <= 50 %}
          Mauvaise
        {% elif states("sensor.pm10_moyenne_sur_24h") |float <= 150 and states("sensor.pm2_5_moyenne_sur_24h") |float <= 75 %}
          Trés Mauvaise
        {% elif states("sensor.pm10_moyenne_sur_24h") |float > 150 and states("sensor.pm2_5_moyenne_sur_24h") |float > 75 %}
          Extrêmement Mauvaise
        {% endif %}


AirQualIndex_bon
AirQualIndex_dégradé
AirQualIndex_étrêmementmauvais
AirQualIndex_mauvais

en général un token ce renouvelle pas. A moins que ca soit préciser sur l’api de MF.

Pour ca, je t’invite plutot a ouvrir une nouveau sujet, pour pas polluer ce post.

Il faut configurer quelque chose de special pour vigieau car moi maintenant, l’indicateur reste au rouge sur ma vu!?

Rien a configurer et ca change bien de couleur chez moi.
vigiueu card

Compare ton code , avec le mien:

  - type: custom:text-divider-row
    text: SÉCHERESSE
    align: left
  - type: custom:mod-card
    card_mod:
      style: |
        ha-card {
          margin: -17px -5px 0px -5px;
        }  
    card:
      type: horizontal-stack
      cards:
        - type: custom:button-card
          entity: sensor.alert_level
          name: 'Vigieau xxxxx:'
          layout: icon_name_state2nd
          color_type: icon
          show_name: true
          show_state: true
          state:
            - value: Vigilance
              operator: '=='
              color: green
              icon: mdi:water-check
              styles:
                state:
                  - color: green
            - value: Alerte
              operator: '=='
              color: yellow
              icon: mdi:water-alert
              styles:
                state:
                  - color: yellow
            - value: Alerte renforcée
              operator: '=='
              color: orange
              icon: mdi:water-remove
              styles:
                state:
                  - color: orange
            - value: Crise
              operator: '=='
              color: red
              icon: mdi:water-off
              styles:
                state:
                  - color: red
          size: 60%
          styles:
            card:
              - '--mdc-ripple-color': rgb(68, 115, 158)
              - '--mdc-ripple-press-opacity': 0.5
            name:
              - font-size: 15px
            state:
              - font-weight: bold
              - font-size: 15px
          card_mod:
            style: |
              ha-card {
                background: none;
                border: none;
              }              
        - type: custom:bar-card
          entities:
            - entity: sensor.alert_level
              name: Niveau
              icon: mdi:alert-circle
              height: 47px
              color: red
              positions:
                indicator: 'off'
                icon: 'off'
              severity:
                - text: Vigilance
                  color: green
                - text: Alerte
                  color: yellow
                - text: Alerte renforcée
                  color: orange
                - text: Crise
                  color: red
          card_mod:
            style: >
              bar-card-currentbar, bar-card-backgroundbar {
                border-radius: 25px;
              }

              #states > bar-card-row > bar-card-card > bar-card-background >
              bar-card-contentbar > bar-card-name {
                font-size: 16px;
                color: white;
              }  ha-card {
                margin-top: -2px;
                background: none;
                border: none;
              } bar-card-value {
                color: black;
                font-weight: bold;
              }
  - type: conditional
    conditions:
      - entity: sensor.alert_level
        state_not: Vigilance
    card:
      type: custom:mod-card
      card_mod:
        style: |
          ha-card {
            margin: 5px 5px 5px 5px;
          }
      card:
        type: custom:auto-entities
        card:
          type: grid
          columns: 5
          square: false
        card_param: cards
        filter:
          include:
            - entity_id: sensor.*_restrictions
              options:
                type: custom:button-card
                color_type: icon
                aspect_ratio: 1/1
                show_name: true
                show_state: true
                name: |
                  [[[
                    return entity.attributes.friendly_name
                  ]]]
                styles:
                  card:
                    - '--mdc-ripple-color': rgb(68, 115, 158)
                    - '--mdc-ripple-press-opacity': 0.5
                    - border-radius: 8px
                  name:
                    - font-size: 12px
                    - justify-self: start
                    - white-space: normal
                  state:
                    - font-weight: bold
                    - font-size: 10px
                    - white-space: normal
                state:
                  - value: Aucune restriction
                    operator: '=='
                    color: green
                    styles:
                      card:
                        - box-shadow: 0px 0px 0px 2px green
                      state:
                        - color: green
                  - value: Interdiction sauf exception
                    operator: '=='
                    color: orange
                    styles:
                      card:
                        - box-shadow: 0px 0px 0px 2px orange
                      state:
                        - color: orange
                  - value: Interdiction
                    operator: '=='
                    color: red
                    styles:
                      card:
                        - box-shadow: 0px 0px 0px 2px red
                      state:
                        - color: red
                  - value: Interdiction sur plage horaire
                    operator: '=='
                    color: orange
                    styles:
                      card:
                        - box-shadow: 0px 0px 0px 2px orange
                      state:
                        - color: orange
                  - value: Réduction de prélèvement
                    operator: '=='
                    color: orange
                    styles:
                      card:
                        - box-shadow: 0px 0px 0px 2px orange
                      state:
                        - color: orange
                size: 40%
          exclude:
            - entity_id: sensor.*_restrictions
              state: Aucune restriction
        sort:
          method: name
          reverse: false