Carte pour Thermostat Netatmo

Parfait !
je suis certain que cela servira à d’autres utilisateurs Netatmo. :+1:

Bonjour à tous,

Merci Fabien_Jouet, cela m’a été très utile.

Voici le résultat :

Juste un petit détails mais serait-il possible d’intégrer dans la carte Thermostat la possibilité de choisir le type de planning?

1 « J'aime »

Salut,

L’API ne permet pas de changer de planning,mais seulement d’afficher le planning en cours. Peut être que cela sera possible dans une future évolution de l’intégration.

Salut,

Merci pour ton retour telenaze.

thermostat_background_2

salut tu peux ajouter sa en plus

  - type: state-icon
    entity: select.netatmo_maison
    title: Planning
    icon: mdi:calendar
    style:
      top: 85%
      left: 25%
      '--paper-item-icon-color': rgb(68,68,68)

j’ai testé et le changement de planning est bien pris en compte

En fait cela ne permet pas de changer de planning, mais juste de voir le planning en cours.
@ Fabien_Jouet Tu confirmes ?

Le changement s’effectue chez moi @telenaze, mais celà semble capricieux

Je suis surpris parce-qu’un state-icon ne fait que remonter un état.
Comment tu fait pour envoyer la commande de changement au thermostat ?

Merci @Fabien_Jouet .

@telenaze, je te confirme pouvoir faire le changement de planning via la carte. Dans l’application Netatmo, il y a bien changement de planning mais le retour sur HA ne se fait pas correctement. J’ai pourtant attendu 1 h, mais pour HA, il n’y a jamais eu changement de planning.

Je dois passer à coté de quelque chose.
Voici comment je fais, mais comment on valide le changement de planning ?
Carte Netatmo Planning

Je viens de rebooter hassio et maintenant cela fonctionne :grinning:
Donc il faut juste changer de planning et fermer la fenêtre.

Un super travail :index_pointing_at_the_viewer: :clap: :clap: :clap:

Par contre je fais un piètre utilisateur :frowning:

J’ai une carte qui semble correct
image

Mais quand je clique sur + ou - il se passe un temps énorme voir cela ne change pas du tout la consigne même sur la carte thermostat classique
image

J’ai rechargé et relancer HA et la mise à jour du thermostat se réalise plus vite avec la second carte !

Je sais pas si cela vous fait la même chose chez vous ?

Sinon j’ai un second problème qui se situe sur les 3 boutons du bas.
Quand je clique dessus il ne veut pas du tout lancer le service !

Je ne vois pas pourquoi pour le coup, je dois louper un truc mais quoi !
Merci de votre aide

Voici le script

Le code des scripts
netatmo_mode_absent:
  alias: netatmo_mode_absent
  sequence:
  - service: climate.set_preset_mode
    target:
# Remplacer "netatmo_entree"  par le nom de votre thermostat
      entity_id: climate.netatmo_smart_thermostat
    data:
      preset_mode: away
  - service: python_script.set_state
    data_template:
      entity_id: sensor.netatmo_preset_mode
      state: away
  mode: single
  
netatmo_mode_hors_gel:
  alias: netatmo_mode_hors_gel
  sequence:
  - service: climate.set_preset_mode
    target:
# Remplacer "netatmo_entree"  par le nom de votre thermostat
      entity_id: climate.netatmo_smart_thermostat
    data:
      preset_mode: Frost Guard
  - service: python_script.set_state
    data_template:
      entity_id: sensor.netatmo_preset_mode
      state: Frost Guard
  mode: single
  
netatmo_mode_schedule:
  alias: netatmo_mode_schedule
  sequence:
  - service: climate.set_preset_mode
    target:
# Remplacer "netatmo_entree"  par le nom de votre thermostat
      entity_id: climate.netatmo_smart_thermostat
    data:
      preset_mode: Schedule
  - service: python_script.set_state
    data_template:
      entity_id: sensor.netatmo_preset_mode
      state: Schedule
  mode: single

Les sensors

Le code des sensors


- platform: template
  netatmo_temperature_courante:
    friendly_name: Température Maison
    device_class: temperature
    value_template: "{{ state_attr('climate.netatmo_smart_thermostat', 'current_temperature') }}"
      
- platform: template
  netatmo_temperature_consigne:
    friendly_name: température consigne Maison
    device_class: temperature
    value_template: "{{ state_attr('climate.netatmo_smart_thermostat', 'temperature') }}"

- platform: template
  netatmo_niveau_batterie:
    friendly_name: Niveau Batterie Maison
    device_class: battery
    unit_of_measurement: "%"
    value_template: "{{ state_attr('climate.netatmo_smart_thermostat', 'battery_level') }}"

- platform: template
  netatmo_hvac_action:
    friendly_name: Hvac action Maison
    value_template: "{{ state_attr('climate.netatmo_smart_thermostat', 'hvac_action') }}"

- platform: template
  netatmo_hvac_modes:
    friendly_name: Hvac modes Maison
    value_template: "{{ state_attr('climate.netatmo_smart_thermostat', 'hvac_modes') }}"

- platform: template
  netatmo_preset_mode:
    friendly_name: Preset mode Maison
    value_template: "{{ state_attr('climate.netatmo_smart_thermostat', 'preset_mode') }}"


Script Python
inputEntity = data.get('entity_id')
if inputEntity is None:
    logger.warning("===== entity_id is required if you want to set something.")
else:    
    inputStateObject = hass.states.get(inputEntity)
    inputState = inputStateObject.state
    inputAttributesObject = inputStateObject.attributes.copy()

    for item in data:
        newAttribute = data.get(item)
        logger.debug("===== item = {0}; value = {1}".format(item,newAttribute))
        if item == 'entity_id':
            continue            # already handled
        elif item == 'state':
            inputState = newAttribute
        else:
            inputAttributesObject[item] = newAttribute
        
    hass.states.set(inputEntity, inputState, inputAttributesObject)

Salut jerome6994 merci pour les encouragements.
De ce que je vois ton Python script ne reflète pas celui que j’ai mis.
As tu bien recopié le texte sans aucun changement dans le fichier « set_state.py » ?
Je te mets ci-dessous le texte nettoyé de tous les lignes commentées.

Python script
inputEntity = data.get('entity_id')
if inputEntity is None:
    logger.warning("===== entity_id is required if you want to set something.")
else:    
    inputStateObject = hass.states.get(inputEntity)
    inputState = inputStateObject.state
    inputAttributesObject = inputStateObject.attributes.copy()

    for item in data:
        newAttribute = data.get(item)
        logger.debug("===== item = {0}; value = {1}".format(item,newAttribute))
        if item == 'entity_id':
            continue            # already handled
        elif item == 'state':
            inputState = newAttribute
        else:
            inputAttributesObject[item] = newAttribute
        
    hass.states.set(inputEntity, inputState, inputAttributesObject)
    

Bonsoir @telenaze

Merci pour ton retour rapide

J’ai repris mon message car l’intégration du script Python était pas très bien joli en mise en forme et j’avais pas fait attention.

Bref j’ai regardé et il semble que j’avais bien la même chose mais pas sécurité j’ai repris à nouveau ton code.
Nous sommes d’accord il y a rien à changer dedans même pas entity_id

Je n’ai pas mis le code de la carte au cas où :
mon code corrigé sur ma carte

mon code corrigé sur la carte
type: picture-elements
image: /local/devices/Netatmo_background_409x762_2.png
elements:
  - type: image
    entity: climate.netatmo_smart_thermostat
    image: /local/devices/fioul.png
    title: null
    tap_action:
      action: none
    style:
      top: 10%
      left: 90%
      width: 10%
  - type: image
    entity: climate.netatmo_smart_thermostat
    title: Up Consigne
    tap_action:
      action: call-service
      service: Script.netatmo_increment_consigne
    hold_action:
      action: more-info
    image: /local/devices/Netatmo_up.png
    style:
      top: 52.6%
      left: 76.5%
      width: 6%
  - type: image
    entity: climate.netatmo_smart_thermostat
    title: Down Consigne
    tap_action:
      action: call-service
      service: Script.netatmo_decrement_consigne
    hold_action:
      action: more-info
    image: /local/devices/Netatmo_down.png
    style:
      top: 52.6%
      left: 56.5%
      width: 6%
  - type: image
    entity: sensor.netatmo_hvac_action
    title: Témoin Chauffe
    tap_action:
      action: none
    image: /local/devices/Netatmo_chauffe.png
    style:
      top: 58%
      left: 25.5%
      width: 7%
    state_filter:
      heating: brightness(100%) saturate(1)
      idle: opacity(0%)
  - type: image
    entity: sensor.netatmo_preset_mode
    title: Temoin Manual
    tap_action:
      action: none
    image: /local/devices/Netatmo_manual.png
    style:
      top: 30%
      left: 39%
      width: 9%
    state_filter:
      manual: brightness(100%) saturate(1)
      Schedule: opacity(0%)
      away: opacity(0%)
      Frost Guard: opacity(0%)
  - type: image
    entity: sensor.netatmo_preset_mode
    title: Mode de fonctionnement
    tap_action:
      action: none
    image: /local/devices/Absent.png
    style:
      top: 29.8%
      left: 38.6%
      width: 11%
    state_filter:
      away: brightness(100%) saturate(1)
      Schedule: opacity(0%)
      manual: opacity(0%)
      Frost Guard: opacity(0%)
  - type: image
    entity: sensor.netatmo_preset_mode
    title: Mode de fonctionnement
    tap_action:
      action: none
    image: /local/devices/Hors Gel.png
    style:
      top: 29.8%
      left: 38.6%
      width: 11%
    state_filter:
      Frost Guard: brightness(100%) saturate(1)
      Schedule: opacity(0%)
      manual: opacity(0%)
      away: opacity(0%)
  - type: image
    entity: sensor.netatmo_preset_mode
    title: Mode de fonctionnement
    tap_action:
      action: none
    image: /local/devices/Automatique.png
    style:
      top: 29.9%
      left: 39%
      width: 11%
    state_filter:
      Schedule: brightness(100%) saturate(1)
      away: opacity(0%)
      manual: opacity(0%)
      Frost Guard: opacity(0%)
  - type: state-label
    entity: sensor.netatmo_temperature_courante
    unit_of_measurement: .
    title: Température Actuelle
    tap_action:
      action: null
    style:
      top: 48%
      left: 25.5%
      font-size: 1.6em
      color: black
      font-weight: 600
  - type: state-label
    entity: sensor.netatmo_temperature_consigne
    title: Température de consigne
    tap_action:
      action: null
    style:
      top: 25%
      left: 25.5%
      font-size: 1em
      color: white
      font-weight: 600
  - type: state-label
    entity: climate.chambre_parents
    attribute: friendly_name
    style:
      top: 25%
      left: 66%
      font-size: 1.4em
      color: black
      font-weight: 400
  - type: state-label
    entity: sensor.chambre_parents_battery_percent
    title: '% Batterie'
    tap_action:
      action: none
    style:
      top: 79%
      left: 8.3%
      font-size: 0.7em
      color: grey
      font-weight: 600
  - type: state-icon
    entity: sensor.chambre_parents_battery_percent
    title: Niveau Batterie
    icon: mdi:battery-high
    tap_action:
      action: more-info
    style:
      top: 86%
      left: 8%
      '--paper-item-icon-color': grey
  - type: image
    entity: climate.netatmo_smart_thermostat
    title: null
    tap_action:
      action: none
    image: /local/devices/bouton_fond-300x98.png
    style:
      top: 83.2%
      left: 71%
      width: 58%
  - type: image
    entity: climate.netatmo_smart_thermostat
    title: Passer en Mode Absent
    tap_action:
      action: call-service
      service: Script.netatmo_mode_absent
    image: /local/devices/Absent.png
    style:
      top: 83%
      left: 53%
      width: 12%
  - type: image
    entity: climate.netatmo_smart_thermostat
    title: Passer en Mode Hors Gel
    tap_action:
      action: call-service
      service: Script.netatmo_mode_hors_gel
    image: /local/devices/Hors Gel.png
    style:
      top: 83.2%
      left: 79.5%
      width: 14.5%
  - type: image
    entity: climate.netatmo_smart_thermostat
    title: Passer en Mode Automatique
    tap_action:
      action: call-service
      service: Script.netatmo_mode_schedule
    image: /local/devices/Automatique.png
    style:
      top: 83.2%
      left: 67%
      width: 10%

oui tu ne change absolument rien.
Avant de mettre en cause de code de la carte sur l’appel d’un scripts il faut tester les scripts.
Donc teste les scripts des trois modes en les exécutant directement depuis "configuration/Scripts et si tu as toujours un message d’erreur, c’est que tu as commis une erreur sur python script.

Pour préciser, par exemple le script « netatmo_mode_absent » appelle deux services.
le 1er,

  - service: climate.set_preset_mode
    target:
      entity_id: climate.netatmo_entree
    data:
      preset_mode: away

qui demande au thermostat de passer en mode away (absent).

le deuxième,

  - service: python_script.set_state
    data_template:
      entity_id: sensor.netatmo_preset_mode
      state: away

qui modifie l’état du sensor « netatmo_preset_mode » en away (absent).
Donc si tu veux tester chaque service individuellement il te suffit de supprimer les lignes de code du 1er ou du 2eme service.

@telenaze

J’ai repris de zéro et bien pris les évolutions de script, bien changé l’ID et le tour est joué cela fonctionne.
Il y a une latence certaine quand on sélectionne un mode sur le retour affichage de la temlpérarture consigne mais ça fonctionne.

Je tente de mettre un bouton off pour le passage en été, le fonctionnement semblait un peu étrange, mais comme pas instantané et que je ne suis pas toujours patient à refaire pour voir :slight_smile:

Merci pour tout encore une fois

Bonjour

Pour dire que cela fonctionne maintenant.

J’ai repris le sujet de 0 et j’avais du faire une erreur mais je ne sais pas trop où ni comment (enfin si en voulant aller trop vite certainement)

Je bloque maintenant sur le on/off du thermostat par contre je n’arrive pas à le mettre en place.

Est-ce que quelqu’un à fait la manip ?

De ce que j’ai pu constaté, il faut mettre une température inférieur à 7° pour passer en off et pour redémarré il faut obligatoirement remonter la température à partir du thermostat.
Le mieux ne serait-il pas de mettre absent plutôt que off ?

Alors l’été je mets toujours OFF par habitude comme ceci cela ne démarre jamais.
Bon ensuite je coupe aussi la chaudière :slight_smile:

J’ai fait un script OFF et j’ai fait le même avec ON

Script Off
netatmo_mode_off:
  alias: netatmo_mode_off
  sequence:
  - service: climate.turn_off
    target:
      entity_id: climate.maison
  - service: python_script.set_state
    data_template:
      entity_id: climate.maison
  mode: single
  icon: phu:wiser-heating-ctl-off

Maintenant ce que je ne sais pas encore faire sur HA c’est associer ces deux scripts à un bouton ON/OFF comme j’ai commencer à mettre sur le thermostat mais qui m’oblige à faire un bouton supplémentaire alors que j’aimerai qu’i soit l’un sur l’autre en somme

Sinon voilà j’ai tout implémenté et cela fonctionne c’est top merci pour vos travaux.
Je vais certainement réduite un peu la taille des cartes en hauteur

1 « J'aime »

Superbe travail qui améliore encore la cartounettte ! :wink:
Je vois qu’il existe un sensor :binary_sensor.netatmo_chauffage_on
Tu pourrait peut être l’utiliser pour mettre une condition dans ton script.
Sinon il faut utiliser hvac_modes: auto, heat, off