Integration Gardena

Bonjour à tous,
J’imagine que je ne suis certainement pas le seul dans ce cas, je viens vers vous à la recherche d’astuces. En particulier pour ceux qui sont équipés comme moi d’une tondeuse Gardena Sileno Life (750 dans mon cas) L’intégration est très sommaire et ne remonte que 3 entités.

Ce que je souhaite, c’est d’être averti quand il y a une erreur, en particulier quand il passe en « lifted » c’est à dire soulevé & tanké quelque part. Comme je ne suis pas toujours à la maison et les enfants plus souvent que moi, cela permettrait de prévenir à la maison par l’intermédiaire des enceintes connectées et des réveils connectés dans leur chambre… Parce qu’actuellement j’ai une notif sur mon phone…c’est un peu naze quoi.
Quelqu’un à une idée ?

Visiblement c’est intégré comme un aspirateur avec une entité vacuum…

C’est cette entité vacuum.franklin qui va prendre divers état et attributs en fonction de l’état de ton robot tondeuse.

Il faut donc que tu crées une automatisation avec:

  • comme déclencheur l’état « lifted » de Franklin (vérifie que c’est bien ça qui remonte quand ton robot est tanké)
  • comme conditions tu pourrais mettre des aspects temporels (pour ne pas notifier la nuit)
  • comme action tes notifications sur tes enceintes connectées.

Normalement ça se fait assez simplement, essaie avec l’UI en créant une nouvelle automatisation et si tu coinces tu appelles à l’aide…

1 « J'aime »

Merci du tuyau. C’est sûr que c’est pas intuitif. C’est bon j’ai réussi à choper le truc.

C’est top ! Fonctionne impeccable. :wink:
Thanks

Tu peux rajouter dans le champ Et Si (optionel)

Vérifier qu’on est entre 8h et 20h par exemple pour éviter une notification au milieu de la nuit…

:laughing: :sweat_smile: pas grave ça réveillera les gosses !
Non sérieusement il ne tond pas la nuit. Il arrête à 18h30.
Mais oui ça ne coûte rien de rajouter ça pour la tranquillité au cas où. :+1:

Oui mais un reboot de HA est vite arrivé, et le robot resté tanké depuis 18h30 devenu indisponible puis l’integration qui se reveille au reboot et dans toute la maison : « Franklin à un soucis, tu peux le remettre en place s’il te plait? » Tu vas être populaire !

Tu as deux façons de faire ça:

  • soit comme dit plus haut dans les conditions (Et Si) => si les conditions ne sont pas respectées, l’automatisation s’arrète immédiatement et les actions ne sont pas effectuées.
  • soit dans les actions, ajouter une condition (si alors sinon)
    tu peux ainsi mettre:
    si on est entre 9h et 20h
    alors notifications « Franklin à un soucis, tu peux le remettre en place s’il te plait? »
    sinon notification sur ton portable uniquement

C’est juste pour illustrer bien sûr, tu peux sans doute te reposer sur la logique du robot et ne pas ajouter ça… mais ça te sera utile pour tes prochaines automatisations…

Oui oui c’est modifié. Je pensais justement à ce que tu as dit, un retour d’erreur différé qui sort du continuum espace temps et là… :laughing:

1 « J'aime »

Je relance le sujet après qqes années… (bonjour le deterrage), mais j’ai maintenant un Shaun le mouton à la maison avec un gardena smart system.

Bon le truc est en cour d’installation, mais du coup je m’interroge:

Quelle intégration as tu utilisé ?
celle là :

ou celle là?:

Houlaa Désolé j’ai changé de crèmerie entre temps :grimacing: et désolé pour ton achat aussi… :grimacing: Je suis sur un Dreame A1 depuis juin 2024.

1 « J'aime »

Bon alors pour ceux qui arriveraient sur le sujet par la suite, je suis passé par cette intégration:

Le mouton remonte avec une entité lawn_mover, un sensor batterie et deux actions pour le démarrer ou le ramener à la maison:

Je me suis pelé la doc pour me faire une petite carte mushroom template hyper complète (tous les codes d’état et d’erreur sont traduits en français, le badge affiche la batterie ou les erreurs) si ça interresse du monde:

le code
features:
  - type: lawn-mower-commands
    commands:
      - start_pause
      - dock
type: custom:mushroom-template-card
primary: >-
  Shaun : {{ state_translated(entity) }} {{ states('sensor.shaun_battery_level')
  }}%
secondary: >-
  {% set s = state_attr(entity, 'state') %} {% set err = state_attr(entity,
  'error') %} {%- if s == 'PAUSED' -%}En pause capot fermé {%- elif s ==
  'PAUSED_IN_CS' -%}En pause sur la base {%- elif s == 'OK_CUTTING' -%}En train
  de tondre (auto) {%- elif s == 'OK_CUTTING_TIMER_OVERRIDDEN' -%}En train de
  tondre (hors planning) {%- elif s == 'OK_SEARCHING' -%}Recherche de la base
  {%- elif s == 'OK_LEAVING' -%}Sortie de la base {%- elif s == 'OK_CHARGING'
  -%}En charge (batterie faible) {%- elif s == 'PARKED_TIMER' -%}Garé (attend le
  planning) {%- elif s == 'PARKED_PARK_SELECTED' -%}Garé jusqu'à nouvel ordre
  {%- elif s == 'PARKED_AUTOTIMER' -%}Garé (herbe trop courte) {%- elif s ==
  'PARKED_FROST' -%}Garé (gel détecté) {%- elif s == 'PARKED_NO_LIGHT' -%}Garé
  (luminosité insuffisante) {%- elif s == 'PARKED_MOWING_COMPLETED' -%}Terminé
  (zone couverte) {%- elif s == 'PARKED_RAIN' -%}Garé (pluie détectée) {%- elif
  s == 'STOPPED_IN_GARDEN' -%}Arrêté dans le jardin {%- elif s ==
  'INITIATE_NEXT_ACTION' -%}Préparation de l'action suivante {%- elif s ==
  'SEARCHING_FOR_SATELLITES' -%}Recherche des satellites GPS {%- elif s ==
  'NONE' -%}État inconnu ou erreur {%- else -%}Inconnu{%- endif %}

  {% if err == 'NO_MESSAGE' -%}Système OK {%- elif err in ['NONE', none] -%}Pas
  de soucis {%- elif err == 'OUTSIDE_WORKING_AREA' -%}Hors zone de travail {%-
  elif err == 'NO_LOOP_SIGNAL' -%}Pas de signal boucle {%- elif err == 'TRAPPED'
  -%}Shaun est coincé ! {%- elif err == 'UPSIDE_DOWN' -%}Shaun est sur le dos !
  {%- elif err == 'LIFTED' -%}Shaun a été soulevé {%- elif err ==
  'CUTTING_SYSTEM_BLOCKED' -%}Lames bloquées {%- elif err.startswith('ALARM_')
  -%}⚠️ ALERTE : {{ err | replace('ALARM_MOWER_', '') | lower }} {%- elif
  'SENSOR_DEFECT' in err or 'PROBLEM' in err -%}Défaut capteur ({{ err }}) {%-
  else -%}Erreur : {{ err | lower | replace('_', ' ') }}{%- endif %}
icon: >-
  {% set s = state_attr(entity, 'state') %} {% if s == 'PAUSED' %}
  mdi:pause-circle {% elif s == 'PAUSED_IN_CS' %} mdi:home-pause {% elif s in
  ['OK_CUTTING', 'OK_CUTTING_TIMER_OVERRIDDEN'] %} mdi:robot-mower {% elif s ==
  'OK_SEARCHING' %} mdi:home-search {% elif s == 'OK_CHARGING' %}
  mdi:battery-charging-high {% elif s == 'PARKED_TIMER' %} mdi:clock-outline {%
  elif s == 'PARKED_AUTOTIMER' %} mdi:grass {% elif s == 'PARKED_FROST' %}
  mdi:snowflake {% elif s == 'PARKED_RAIN' %} mdi:weather-rainy {% elif s ==
  'STOPPED_IN_GARDEN' %} mdi:alert-octagon {% else %} mdi:robot-mower-outline {%
  endif %}
color: >-
  {% set s = state_attr(entity, 'state') %} {% if s in ['OK_CUTTING',
  'OK_CUTTING_TIMER_OVERRIDDEN', 'OK_LEAVING'] %} green {% elif s in
  ['OK_CHARGING', 'OK_SEARCHING', 'SEARCHING_FOR_SATELLITES'] %} blue {% elif s
  in ['PAUSED', 'PAUSED_IN_CS', 'PARKED_TIMER', 'PARKED_RAIN', 'PARKED_FROST']
  %} orange {% elif s == 'STOPPED_IN_GARDEN' %} red {% else %} grey {% endif %}
entity: lawn_mower.shaun
multiline_secondary: true
badge_icon: >-
  {% set bat = state_attr(entity, 'battery_level') | int(0) %} {% set err =
  state_attr(entity, 'error') %} {% if err not in ['NO_MESSAGE', 'NONE', none]
  %}
    mdi:alert-decagram
  {% elif bat == 100 %}
    mdi:battery
  {% elif bat <= 5 %}
    mdi:battery-outline
  {% else %}
    mdi:battery-{{ (bat / 10) | round(0, 'floor') | int }}0
  {% endif %}
badge_color: >-
  {% set bat = state_attr(entity, 'battery_level') | int(0) %} {% set err =
  state_attr(entity, 'error') %} {% if err not in ['NO_MESSAGE', 'NONE', none]
  %}
    red
  {% elif bat >= 80 %}
    green
  {% elif bat >= 50 %}
    light-green
  {% elif bat >= 25 %}
    orange
  {% else %}
    red
  {% endif %}
features_position: bottom
grid_options:
  columns: 12
  rows: auto

J’ai un état plus compact dans le dashboard principal:

code

Avec le template suivant pour un état compact qui va au delà du state du lawn_mover :

{% if state_attr('lawn_mower.shaun','state') == 'PAUSED' %} Pause
{% elif state_attr('lawn_mower.shaun','state') == 'PAUSED_IN_CS' %} Pause (base)
{% elif state_attr('lawn_mower.shaun','state') == 'OK_CUTTING' %} Tonte (auto)
{% elif state_attr('lawn_mower.shaun','state') == 'OK_CUTTING_TIMER_OVERRIDDEN' %} Tonte (manuel)
{% elif state_attr('lawn_mower.shaun','state') == 'OK_SEARCHING' %} Retour...
{% elif state_attr('lawn_mower.shaun','state') == 'OK_LEAVING' %} Sortie...
{% elif state_attr('lawn_mower.shaun','state') == 'OK_CHARGING' %} En charge
{% elif state_attr('lawn_mower.shaun','state') == 'PARKED_TIMER' %} Planifié
{% elif state_attr('lawn_mower.shaun','state') == 'PARKED_PARK_SELECTED' %} Garé
{% elif state_attr('lawn_mower.shaun','state') == 'PARKED_AUTOTIMER' %} Repos (gazon)
{% elif state_attr('lawn_mower.shaun','state') == 'PARKED_FROST' %} Gel
{% elif state_attr('lawn_mower.shaun','state') == 'PARKED_NO_LIGHT' %} Nuit
{% elif state_attr('lawn_mower.shaun','state') == 'PARKED_MOWING_COMPLETED' %} Terminé
{% elif state_attr('lawn_mower.shaun','state') == 'PARKED_RAIN' %} Pluie
{% elif state_attr('lawn_mower.shaun','state') == 'STOPPED_IN_GARDEN' %} BLOQUÉ
{% elif state_attr('lawn_mower.shaun','state') == 'INITIATE_NEXT_ACTION' %} Calcul...
{% elif state_attr('lawn_mower.shaun','state') == 'SEARCHING_FOR_SATELLITES' %} Signal GPS...
{% elif state_attr('lawn_mower.shaun','state') == 'NONE' %} Inconnu
{% else %}
Inconnu
{% endif %}
1 « J'aime »

Bien joué, mais ton robot ne fera pas plus de 2 ans tu sais. :pensive_face:

Faut espérer qu’il fasse soit moins soit plus…

Et puis ce qui est fait est fait, j’avais plutôt eu des bon retours de Gardena / Huskvarna et on l’a eu pour pas trop cher…

C’était quoi ton souci ?

Bonjour,
J’ai un Gardena city 500 depuis 2022, tout roule.
J’utilise cette intégration

J’ai des déconnexions toutes les 2h avec le websocket, qui se reconnecte tout seul et j’ai aussi une automation qui surveille et relance le service au besoin

alias: Gardena - Websocket
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.gardena_websocket_status
    to: unavailable
    enabled: false
  - trigger: state
    entity_id:
      - binary_sensor.sileno_online
    to: unavailable
    enabled: false
  - trigger: template
    value_template: "{{ states('sensor.gardena_websocket_status') == 'disconnected' }}"
    for:
      hours: 0
      minutes: 10
      seconds: 0
conditions: []
actions:
  - action: homeassistant.reload_config_entry
    metadata: {}
    data:
      entry_id: 01K54JRX9FVRWPH4EWVFFH4PP2
mode: single

1 « J'aime »