Intégration pour le pilotage du système d'arrosage automatique Netro

Bonjour,

Ce message juste pour partager avec vous l’existence d’une intégration toute récente disponible depuis HACS (le store de la communauté Home Assistant) et qui permet de piloter un système d’arrosage automatique basé sur le système Netro.

Si vous êtes équipés de ce système et fan de Home Assistant, je vous invite à jeter un oeil ici.

@+,
kcofoni

Salut,

Merci pour l’info.

As-tu pu faire des automatisations pour ton système d’arrosage?

Salut,

Merci pour ton message.

Pour le moment j’ai surtout passé du temps sur le développement du plugin en essayant d’offrir quelques ouvertures en vue de l’automatisation : activation/désactivation, arrêt/démarrage de l’arrosage, refresh, interface météo…

J’ai essayé également de trouver une solution à la limitation du nombre de requêtes par jour et par matériel tout en offrant une bonne fréquence de rafraichissement aux moments de la journée où tout se passe :wink: (les facteurs de ralentissement paramétrable si tu as pu voir)

Et puis j’ai tenté de me construire un tableau de bord assez synthétique et qui mette en évidence des éléments qui me paraissent essentiels comme :

  • les derniers arrosage effectués
  • les arrosages à venir
  • le taux d’humidité, l’ensoleillement et la température au sol
  • une petite interface pour lancer l’arrosage manuellement

Pour revenir sur l’automatisation, j’ai tendance à faire confiance à la planification automatique de Netro qui se veut assez élaborée vue le nombre (théorique !?) de facteurs pris en compte (mesures hydro/temp/lumière), nature du sol, nature de la végétation, efficacité des arroseurs, météo, … même si j’ai quand même des trucs bizarres de temps en temps…

Dès que j’ai 5mn je vais utiliser le service météo que j’ai ajouté à l’intégration pour injecter 2/3x par jour les données de météo france qui sont nettement meilleures que celles obtenues pas les fournisseurs de météo proposés par Netro. Ca fait vraiment toute la différence sur la pertinence de la planification automatique.

Et pour toi, quel est ton approche du sujet (automatisation, pilotage, …) ? Es tu satisfait par l’intégration ? As tu des idées d’amélioration ?

A bientôt pour partager encore peu plus sur tous ces sujets…

kcofoni

Salut,

Déjà, je voulais te dire bravo pour l’intégration. Je n’avais pas compris que tu en étais l’auteur :pensive:

Cela fais 2 ans que j’utilise le système Netro et j’attendais avec impatience une intégration pour HA. Je viens juste de découvrir l’intégration.

Je cherchais a automatiser l’arrosage avec HA car je suis un peu déçu des relevées météo de Netro.

L’année dernière, pendant 3 semaines l’arroseur n’a rien arrosé car la météo disait qu’il pleuvait alors que l’on avait un beau soleil. Et après l’arroseur à arroser le jardin alors qu’il pleuvait.

Moi je suis un grand faignant donc j’essais d’automatiser un maximum de choses pour ne pas devoirs y penser.

J’essaye de tester le transfert des prévision météo France mais je n’y arrive pas. peux-tu préciser comment créer le script?
Merci

Je vais le faire dans les jours qui viennent et je vais ensuite le partager sur GitHub - kcofoni/ha-netro-watering: Netro Smart Garden integration for Home Assistant. Si tu mets le repo dans tes favoris, tu seras automatiquement alerté. Je vais ensuite partager mes cartes et mes templates…

Quoiqu’il en soit la difficulté je pense c’est d’obtenir des données de qualité, à première vue je trouve qu’on ne s’y retrouve pas si facilement sur l’intégration de météo france. Si l’utilisation de l’intégration n’est pas satisfaisante j’irai chercher les infos directement depuis l’API météo France.

A suivre…

En attendant tu peux utiliser le service « Netro Watering:Report weather » à partir de http://homeassistant.local:8123/developer-tools/service (tu corriges cette url pour qu’elle pointe sur ton serveur home assistant).

service: netro_watering.report_weather
data:
  config_entry_id: 2dc0828a3d5491ee773f434506dfbe5b
  date: "2023-06-10"
  condition: cloudy
  rain: 1.6
  rain_prob: 50
  temp: 28.2
  t_min: 23.4
  t_max: 29.1
  wind_speed: 1.1
  humidity: 56
  pressure: 1010.2

Tu verras c’est assez intéressant de voir les effets sur Netro de l’application de ce service avec des données pertinentes de météo, ça change toute la planif !

Merci

Je viens de tester, l’arroseur c’est remis à jour avec les nouvelles données. il a revu toute la planification en fonction des nouvelles données. Actuellement, le données doivent être saisie à la main et injecter. Si cela pouvais ce automatiquement ça serais super.
Beau travail

Hello @Apollon16 , tu as du voir passé un post que j’ai fait en fin d’aprem avec le script de synchro Netro - Meteo France (Update Netro with Météo France weather data · kcofoni/ha-netro-watering · Discussion #9 · GitHub). J’ai été un peu évasif sur la façon de mettre en œuvre donc n’hésite pas si tu as besoin de plus d’info. La peinture est encore fraîche (j’ai fait ça sur un coin de table dimanche après-midi après la finale de Rolland Garros :wink:)

kcofoni

Salut,
J’ai reçu ton post. je viens d’essayer le script et l’automatisation mais j’ai une erreur de script.

Logger: homeassistant.components.script.netro_synchro_meteo_france
Source: helpers/script.py:410
Integration: Script (documentation, issues)
First occurred: 21:55:46 (1 occurrences)
Last logged: 21:55:46

Netro Synchro Météo France: Error executing script. Invalid data for call_service at pos 1: required key not provided @ data['humidity']

Je ne comprend pas d’où vient l’erreur.

alias: Netro Synchro Météo France
mode: single
icon: mdi:weather-sunny
variables:
  weather_id: weather.villebon_sur_yvette
  today_rain_prob_entity: sensor.villebon_sur_yvette_rain_chance
  today_temperature_entity: sensor.villebon_sur_yvette_temperature_2
  today_wind_speed_entity: sensor.villebon_sur_yvette_wind_speed
  today_pressure_entity: sensor.villebon_sur_yvette_pressure_2
sequence:
  - alias: report today weather in detail
    service: netro_watering.report_weather
    data:
      config_entry_id: "{{ config_entry_controller }}"
      date: >
        {{ as_timestamp(state_attr(weather_id,'forecast')[0].datetime, now()) |
        timestamp_custom("%Y-%m-%d") }}
      condition: >
        {% set mapped_conditions = {'clear-night': 'clear', 'cloudy': 'cloudy',
        'exceptional': 'clear', 'fog': 'cloudy', 'hail': 'rain', 'lightning':
        'clear', 'lightning-rainy': 'rain', 'partlycloudy': 'cloudy', 'pouring':
        'rain', 'rainy': 'rain', 'snowy': 'snow', 'snowy-rainy': 'snow',
        'sunny': 'clear', 'windy': 'wind', 'windy-variant': 'wind'} %}

        {% set current_condition =
        state_attr(weather_id,'forecast')[0].condition %}

        {{ mapped_conditions[current_condition] }}
      rain: |
        {{ state_attr(weather_id,'forecast')[0].precipitation }}
      t_min: |
        {{ state_attr(weather_id,'forecast')[0].templow }}
      t_max: |
        {{ state_attr(weather_id,'forecast')[0].temperature }}
      rain_prob: |
        {{ states(today_rain_prob_entity) }}
      temp: |
        {{ states(today_temperature_entity) }}
      wind_speed: |
        {{ (states(today_wind_speed_entity) | float / 3.6) | round(1) }}
      pressure: |
        {{ states(today_pressure_entity) }}
  - alias: report the next n days weather forecast
    repeat:
      count: "{{ number_of_days_forecast }}"
      sequence:
        - service: netro_watering.report_weather
          data:
            config_entry_id: "{{ config_entry_controller }}"
            date: >
              {{
              as_timestamp(state_attr(weather_id,'forecast')[repeat.index].datetime,
              now()) | timestamp_custom("%Y-%m-%d") }}
            condition: >
              {% set mapped_conditions = {'clear-night': 'clear', 'cloudy':
              'cloudy', 'exceptional': 'clear', 'fog': 'cloudy', 'hail': 'rain',
              'lightning': 'clear', 'lightning-rainy': 'rain', 'partlycloudy':
              'cloudy', 'pouring': 'rain', 'rainy': 'rain', 'snowy': 'snow',
              'snowy-rainy': 'snow', 'sunny': 'clear', 'windy': 'wind',
              'windy-variant': 'wind'} %}

              {% set current_condition =
              state_attr(weather_id,'forecast')[repeat.index].condition %}

              {{ mapped_conditions[current_condition] }}
            rain: >
              {{ state_attr(weather_id,'forecast')[repeat.index].precipitation
              }}
            t_min: |
              {{ state_attr(weather_id,'forecast')[repeat.index].templow }}
            t_max: |
              {{ state_attr(weather_id,'forecast')[repeat.index].temperature }}

Oui je viens de mettre à jour le post. Il y a un bug que j’ai corrigé mais pas encore livré.
En fait il faut faire une modif dans le fichier __init__.py présent dans le répertoire de l’intégration comme montré ici : bug fixed : humidity is optional within report weather service · kcofoni/ha-core@7372964 · GitHub

Si tu ne te sens pas de la faire à la main (assez simple tout de même avec un changement ligne 130 et 401 remplacé par 401-402-403.

Je t’avais dis que c’etait pas tout à fait sec. J’ai voulu partager avec toi ce soir parce que je sais que tu attends cette fonctionnalité mais je suis peut etre allé un peu vite quand même :wink:

Bonne soirée !

Dès que ce sera bon pour toi mets ton log en info sur l’intégration, tu verras exactement les données de météo fournies à Netro: la météo du jour puis les prévisions pour demain et après-demain. Tu peux paramétrer le nombre de jours de forecast grâce au paramètre number_of_days_forecast depuis l’automatisation.

T’inquiète pas. c’est gentil de ta part d’avoir partagé.
Comme je ne suis pas un programmeur, je pensais que cela venait de mes modifications.
Je viens de faire les modifications que tu m’as conseillé mais cela ne fonctionne toujours pas.
J’ai deux erreurs :
La première viens de l’ID météo France, je n’ai pas du prendre la bonne. je la trouve où?
La deuxième je te joint le rapport :

Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/netro_watering/__init__.py:382
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 23:19:07 (2 occurrences)
Last logged: 23:21:12

[548116746704] Config entry id does not exist:
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 205, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1910, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1950, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/usr/src/homeassistant/homeassistant/components/script/__init__.py", line 488, in _service_handler
    await self.async_turn_on(variables=service.data, context=service.context)
  File "/usr/src/homeassistant/homeassistant/components/script/__init__.py", line 447, in async_turn_on
    await coro
  File "/usr/src/homeassistant/homeassistant/components/script/__init__.py", line 477, in _async_run
    return await self.script.async_run(script_vars, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1533, in async_run
    await asyncio.shield(run.async_run())
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 410, in async_run
    await self._async_step(log_exceptions=False)
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 454, in _async_step
    self._handle_exception(
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 477, in _handle_exception
    raise exception
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 452, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 685, in _async_call_service_step
    await service_task
  File "/usr/src/homeassistant/homeassistant/core.py", line 1910, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1950, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/config/custom_components/netro_watering/__init__.py", line 382, in report_weather
    raise HomeAssistantError(f"Config entry id does not exist: {entry_id}")
homeassistant.exceptions.HomeAssistantError: Config entry id does not exist: 

Tu comprendras peut être mieux que moi ce que cela veux dire.

Il faut bien renseigner la ligne suivante de l’automation:

config_entry_controller: 2c149e757d07ad1411abe98d546490a2

Tu retrouveras cet identifiant en retournant sur l’interface qui t’a permis de tester le service. Sélectionne le contrôleur dans le premier paramètre en mode GUI et repasse en mode YAML et l’identifiant t’apparaîtra.

Au passage, je trouve que la carte Météo France est carrément sympa. Ca vaut vraiment le coup de l’installer à partir de HACS : elle fait apparaître toutes les infos qui sont transmises par le script à Netro donc au passage tu peux vérifier que c’est bien en ligne au moins dans les premiers temps pour se rassurer.

@Apollon16 En espérant que tu vas rapidement aboutir pour profiter de tout cela.A ta dispo si je peux t’aider… Pour ton info j’ai fait deux/trois modifs pour améliorer le truc, dispo dans la discussion github dédiée.

Bonsoir,

Depuis ce matin mon arroseur Netro ne se connecter plus au réseau. Ce soir, j’ai du le réinitialiser pour le reconnecter et depuis, le report météo ne se fait plus. Ha me dit que tout à bien été transférés mais sur l’application rien ne change. Météo France m’annonce un ciel clair avec un beau soleil et l’application Netro m’annonce toujours pluvieux.
Je pense que je vais tout réinitialiser : HA et l’application Netro. :pensive:


Capture d’écran 2023-06-13 211033

c’est quel appareil celui-ci?

condition:
  - condition: device
    type: is_on
    device_id: bdcb5b8eda38d985a3f4c602959ec86a
    entity_id: switch.watering_controller_enable_disable
    domain: switch

C’est peut être a cause de lui que rien ne se transfert.

Globalement la manip est la suivante :

  1. créer un script vide et copier/coller la premier morceau de code fourni dans github
  2. créer une automation et copier/coller la deuxième partie de code
  3. retourner sur le script et renseigner le bloc des variables :
  weather_entity: weather.royan --> entité correspondant à ta ville et créée avec Météo France
  rain_prob_entity: sensor.royan_rain_chance --> entité de Météo France
  temperature_entity: sensor.royan_temperature --> idem
  wind_speed_entity: sensor.royan_wind_speed --> idem
  pressure_entity: sensor.royan_pressure --> idem

Aller dans la liste des entités si t’es pas sur : paramètres->appareils et services->entités

  1. retourner sur l’automatisation en mode UI
    4.1 Ouvrir la condition et sélectionner le contrôleur (pour moi c’est Pontaillac) ainsi que la condition Activer/Désactiver est activé. Si ton contrôleur est désactivé ça sert à rien de mettre à jour la météo…

4.2 Ouvrir la première action et renseigner le config entry controller avec l’id du contrôleur obtenu au préalable en faisant comme si tu voulais appeler le service Report weather à partir des outils développeurs et passer du mode UI au mode YAML (mon dernier post d’hier soir sur ce fil)

  1. Tu lances l’automatisation pour tester et tu vas jeter un oeil aux traces dans le script et l’automatisation. Un oeil également sur le log (home-assistant.log)

2023-06-13 20:00:00.180 INFO (MainThread) [custom_components.netro_watering] Running custom service report_weather : {'controller': 'Pontaillac', 'date': '2023-06-13', 'condition': 1, 'rain': 14.4, 'rain_prob': 50, 'temp': 23.7, 't_min': 17.8, 't_max': 25.9, 't_dew': None, 'wind_speed': 1.9, 'humidity': None, 'pressure': 1009.4}
2023-06-13 20:00:00.889 INFO (MainThread) [custom_components.netro_watering] Running custom service report_weather : {'controller': 'Pontaillac', 'date': '2023-06-14', 'condition': 0, 'rain': 0.0, 'rain_prob': None, 'temp': None, 't_min': 16.8, 't_max': 26.4, 't_dew': None, 'wind_speed': None, 'humidity': None, 'pressure': None}
2023-06-13 20:00:01.569 INFO (MainThread) [custom_components.netro_watering] Running custom service report_weather : {'controller': 'Pontaillac', 'date': '2023-06-15', 'condition': 1, 'rain': 0.0, 'rain_prob': None, 'temp': None, 't_min': 16.7, 't_max': 22.9, 't_dew': None, 'wind_speed': None, 'humidity': None, 'pressure': None}

On retrouve bien les données de la log sur l’app Netro :

Est-ce que ça te parait plus clair ? Dis moi !

kcofoni

Merci pour ce petit tuto. Je l’ai suivi à la lettre.
Je pense que tout fonctionnait mais je ne regardait pas au bon endroit.
Le report se fait sur la partie que j’ai entouré sur l’image?

Je regardait le gros cartouche.

C’est bon. On a passer minuit tout c’est synchronisé.

Salut kcofoni,

Je viens de comprendre le problème, mon matériel est sur batterie donc mon arroseur se mets régulièrement en mode veille pour économiser la batterie.

J’ai dû faire une automatisation pour activer le contrôleur avant la synchro de météo France.

Pourquoi quand j’active le contrôleur, l’appareil m’annonce être en offline? voir image.