Afficher sensor nextrain méteo france

Bonsoir,

Je cherche à afficher les données du sensor nextrain de l’intégration météo france sur un petit OLED
Je ne parviens pas à trouver le code pour afficher la donnée remontée

J’ai créé mon sensor dans mon yaml esphome

  - platform: homeassistant
    name: "NextRain"
    entity_id: sensor.la_jarrie_next_rain
    id: Pluie

J’essaie ce genre de chose

          if(id(Pluie).has_state()) {
            it.printf(64, 52, id(font6), TextAlign::BASELINE_CENTER , "%s", id(Pluie).state);

J’ai toujours des erreurs quelques soient le format que je tente

/config/esphome/esp-test.yaml: In lambda function:
/config/esphome/esp-test.yaml:110:63: warning: format '%s' expects argument of type 'char*', but argument 7 has type 'double' [-Wformat=]
  110 |             it.printf(64, 52, id(font6), TextAlign::BASELINE_CENTER , "%s", id(Pluie).state);
      |                                                               ^~~~  ~~~~~~~~~~~~
      |                                                                            |
      |                                                                            double

Je sens que c’est un truc tout con mais je ne parviens pas à bien comprendre ce que je dois mettre pour retourner les infos de cette entité.
J’arrive pas à comprendre la page ESPHOME sur le display et je ne trouve pas lors de mes recherches comment faire

Si quelqu’un peut m’orienter
Merci

Bonsoir @Cyrille_Fremont

Peut-être que mes questions sur l’affichage sur un écran oled de sensor HA pourra t’inspirer, sinon je testerai de mon côté.

Bob

merci
pour ce qui est des autres sensors HA genre température ou humidité, je n’ai pas de difficultés
c’est vraiment le next rain pour lequel je ne sais pas trop comment faire
je continue de fouiller :slight_smile:

Je viens de tester en ajoutant un sensor dans mon yaml EPSHome:

  - platform: homeassistant
    id: current_next_rain
    entity_id: sensor.saint_ave_next_rain

Ajout de :

it.printf(1, 160, id(my_font18), "Rain : %.1f °C", id(current_next_rain).state);

Le °C n’as rien a faire là mais c’était pour tester rapide.

Résultat sur l’écran :
nan

Mais « Pas de pluie prévue dans l’heure », peut être faut il gérer les « attributs », « statuts ».

Bob

oula voila je sais même pas ce que c’est, faut que je potasse le sujet

le nan je l’ai aussi en effet alors qu’il faudrait un retour pas de pluie. J’arrive à le faire en utilisant isnan mais des que j’ai des données autre que pas de pluie je n’affiche pas autre chose non plus…

J’ai testé ça qui semble fonctionner mais pas de pluie attendue ici :wink:

  - platform: homeassistant
    id: current_saint_ave_next_rain
    entity_id: sensor.saint_ave_next_rain
      - id: page5
        lambda: |-
          it.rectangle(0,  0, it.get_width(), it.get_height());
          if ( isnan(id(current_saint_ave_next_rain).state) )  {
          return it.printf(1, 160, id(my_font18), my_green, "Pas de prevision de pluie");
          } else {
          return it.printf(1, 160, id(my_font18), "Pluie dans  : %.0f Min", id(current_saint_ave_next_rain).state);
          }

En modifiant l’état dans les outils de DEV, ça affiche bien.

Bob

Merci
Je vais tester, pas de pluie ici prévu non plus mais je vais attendre.
rien ne se passe quand je change l’état dans les outils de DEV mais je pense que je sais pas faire surtout :slight_smile:

En image,

Là j’ai le statut « unknow »

Je passe la valeur à 35 puis je clique sur « Définir l’état » :

Résultat sur l’écran :

Bob

1 « J'aime »

La pluie est arrivée et ça n’a pas fonctionné car c’est une date qui est envoyée, donc jamais un nombre !

Correction sur le sensor :

text_sensor:
  - platform: homeassistant
    id: current_saint_ave_next_rain
    entity_id: sensor.saint_ave_next_rain

Pour l’affichage :

          if (id(current_saint_ave_next_rain).state == "unknown")  {
          return it.printf(1, 130, id(my_font18), my_green, "Pas de prevision de pluie");
          } else {
          return it.printf(1, 130, id(my_font18), "Rain  : %.0f Min", id(current_saint_ave_next_rain).state);
          }

La valeur affichée n’est pas correcte, il faut faire un calcul je pense entre date actuelle et date prochaine pluie.
Bob

Cette écriture affiche bien la date affichée dans les outils de DEV mais il y a un truc qui m’échappe sur cette valeur ! J’ai une valeur antérieure à la date/heure actuelle !

return it.printf(1, 160, id(my_font), "Rain: %s", id(current_saint_ave_next_rain).state.c_str());

Bob

Merci, en effet ca permet d’avancer un peu
j’obtiens aussi une date et une heure qui correspond bien à la prochaine pluie en utilisant le text sensor
je continue de fouiller aussi car je pense qu’en utilisant le sensor simple et l’attribut, il doit y avoir moyen d’obtenir quelque chose.
Quoiqu’il en soit, super sympa d’étudier la question

alors la date est bonne et en revanche, l’heure est en UTC donc décalage d’une heure avec l’heure actuelle
et cela affiche bien l’heure donc de la prochaine pluie mais en UTC

Oui, annonce de pluie dans 5 minutes, affichage 19h10 et il est 20h05, la solution n’est pas loin :wink:

1 « J'aime »

Je progresse un peu
l’utilisation de attribute permet en effet de retourner l’attribut
donc en text_sensor, il m’affiche tout

text_sensor:
  - platform: homeassistant
    name: "NextRain"
    entity_id: sensor.la_jarrie_next_rain
    id: Pluie
    attribute: 1_hour_forecast
      it.printf(5, 22, id(font3), "%s", id(Pluie).state.c_str());

0 min: Temps sec
5 min: Temps sec
10 min: Temps sec 15 min: Temps sec 20 min: Temps sec 25 min: Temps sec 35 min: Temps sec 45 min: Temps sec 55 min: Temps sec

Bon sur un OLED de 0,96 on ne voit pas grand chose mais l’idée est là.
je pense que sur un sensor classique ca doit aussi pouvoir fonctionner ou en utilisant des filtres pour n’afficher que les attributs contenant pluie

Bonsoir @Cyrille_Fremont
J’ai testé pas mal de choses, tenter de récupérer chaque valeur mais sans bon résultat !

Il m’affiche :
{'0 min': 'Temps sec', '5 min': 'Temps sec', '10 min': 'Temps sec', '15 min': 'Temps sec', '20 min': 'Temps sec', '25 min': 'Temps sec', '35 min': 'Temps sec', '45 min': 'Temps sec', '55 min': 'Temps sec'}

Il faudrait pouvoir parser le retour mais je n’ai rien trouvé pour le faire avec ESPHOME.
Quelqu’un aura peut-être une idée !

Bob

Sinon puisque nous sommes là j’utilise un ILI9341 :

Je teste un peu tout avec, par contre la dernière chose, afficher un image, jpg ou png ne fonctionne pas correctement, elle est en noir et blanc !

Bob

Bon en ajoutant un type: RGB565 ou RGB24 ça marche :wink:
Bob

c’est pas mal ça, il faudra que je m’en prenne un pour faire les tests

Pour la couleur, de ce que je lis, il faut le préciser dans le type

image:
  - file: "image.jpg"
    id: my_image
    resize: 120x120
    type: RGB24

Il y a aussi RGB565`mais j’ai l’impression que c’est en définition plus faible.
Mais j’imagine que tu as essayé déjà

pas été assez rapide dans ma réponse :slight_smile:

1 « J'aime »

Tout ce qui est noté « optionnel » est parfois important finalement :slight_smile:
C’est je crois la première fois que je vois un sujet avec seulement deux intervenants :wink:

1 « J'aime »