Bonjour,
À l’intention des nouveaux utilisateurs de Home Assistant, ainsi que de ceux qui effectuent la transition de Jeedom à Home Assistant et pour tous les autres…
Je vais faire une copie de mon fichiers yaml sur ce topic.
Tout d’abord, je tiens à préciser que je ne suis pas programmeur, mais plutôt un bricoleur. J’ai puisé de nombreuses informations sur ce forum, ainsi que sur celui de Jeedom et le forum Construire. Il convient également de noter que Zenisun n’existe plus en raison d’une décision judiciaire ayant entraîné sa liquidation.
Il est nécessaire d’attribuer une adresse IP fixe depuis la box, ce qui dépend de la box ainsi que du fournisseur.
Merci à:MikeBZH44,bart40140,CrottyFr,golfvert,Chris73 et d’un autre forum à Aior et WInd06
Si vous avez un problème de maintenance avec votre pergola, vous pourrez glaner des informations pour la réparer vous même sur le site forum construire https://www.forumconstruire.com/groupes/468913_zenisun.php ou https://www.forumconstruire.com/construire/topic-425853-pergola-bioclimatique-domotique.php ou https://www.forumconstruire.com/recits/recit-40583.php
Ma pergola fonctionne avec une automatition qui vérifie la position du soleil par rapport à ma résidence ainsi que les données de ma station météorologique Netatmo concernant la température et les précipitations. Si vous souhaitez recevoir ce fichier au format YAML, n’hésitez pas à me le faire savoir.
Tout d’abord, avant de me rendre au travail, je vous prie de trouver ci-joint mon fichier YAML. Il est impératif que vous remplaciez, à côté de chaque ligne, l’adresse IP par la vôtre, en veillant à modifier uniquement la partie 192.168.0.100 ; le reste doit demeurer inchangé.
Exemple "http://192.168.0.100/zns.cgi?cmd=d&p=os"
par "http://192.168.1.25/zns.cgi?cmd=d&p=os"
Quelques coquilles se cachent dans mes codes des slider. Impossible pour le moment d’éteindre correctement les lumières ou de fermer complètement le lames. La seule solution est d’utiliser un bouton off à part.
Pour aller plus vite, je vous propose d’inclure un fichier packages dans votre configuration.yaml.
Prérequis, matériels nécessaires & utilisés :
- Studio Code Server (via HACS) ou File Editor d’installé.
homeassistant:
packages: !include_dir_named packages
Vous avez un super tuto de McFly ici → tuto Organisation du fichier configuration.yaml
Ensuite, dans config, vous devez créer le fichier pergola.yaml et y copier-coller le fichier ci-dessous, sans oublier de mettre votre adresse IP à la place de la mienne.
##############################
### sensor: ###
################################
sensor:
- platform: rest
name: "Pergola"
scan_interval: 15
resource: http://192.168.0.100/zns.cgi?cmd=d&p=os
json_attributes_path: "$.root"
value_template: "OK"
json_attributes:
- "gpo6" # white dimmer
- "s_elev" # Elevation
- "s_azi" # Azimut
- "s_prj" # Projection
- "user" # mode (pluie, hiver, suivi,
- "Mot0" # Moteur
- "date" # Moteur
- "sun_delay" # Actualisation
- "VDC2" # Voltage VDC2
- "orient" # orientation
- "lon" # Longitude
- "lat" # Latitude
- platform: rest
resource: "http://192.168.0.100/zns.cgi?cmd=d&p=os"
name: "light_sensor_pergola_white"
unique_id: "binary_sensor.light_pergola_white"
scan_interval: 5
value_template: "{{ value_json['root']['gpo6'].split(';')[0] }}"
- platform: rest
resource: "http://192.168.0.100/zns.cgi?cmd=d&p=os"
name: "sensor_pergola_position des lames_mot0"
unique_id: "binary_sensor.sensor_pergola_position des lames_mot0"
scan_interval: 5
value_template: "{{ value_json['root']['Mot0'].split(';')[0] }}"
- platform: rest
resource: "http://192.168.0.100/zns.cgi?cmd=d&p=ios"
name: "sensor_pergola_temp inter"
unique_id: "binary_sensor.sensor_pergola_temp inter"
scan_interval: 600
timeout: 10
value_template: >-
{{ ((value_json['root']['Temp'].split(';')[0] | float) / 10) | round(1) | string | replace('.', ',') }} °C
- platform: rest
resource: "http://192.168.0.100/zns.cgi?cmd=d&p=ios"
name: "sensor_pergola_mode"
unique_id: "binary_sensor.sensor_pergola_mode"
scan_interval: 10
value_template: "{{ value_json['root']['user'].split(';')[0] }}"
- platform: rest
resource: "http://192.168.0.100/zns.cgi?cmd=d&p=ios"
name: "sensor_pergola_conso"
unique_id: "binary_sensor.sensor_pergola_conso"
scan_interval: 600
value_template: >-
{{ ((value_json['root']['VDC2'].split(';')[0] | float) / 1000) | round(2) | string | replace('.', ',') }} V
- platform: template
sensors:
pergola_mode_display:
unique_id: "pergola_mode_display" # Identifiant unique pour ce capteur
friendly_name: "Affichage Mode Pergola"
value_template: >-
{% set mode = states('sensor.sensor_pergola_mode') | int %}
{% if mode == 4 %}
Ombrage Mini (4)
{% elif mode == 8 %}
Mode Hivernage (8)
{% elif mode == 1 %}
Fermeture si Pluie (1)
{% elif mode == 2 %}
Suivi Solaire (2)
{% else %}
Mode inconnu
{% endif %}
################################
### binary_sensor: ###
################################
binary_sensor:
- platform: template
sensors:
pergola_sechage_ok:
friendly_name: "Pas de pluie depuis 30 minutes"
unique_id: "Pas de pluie depuis 30 minutes"
value_template: >-
{% set last_changed = states.sensor.pluviometre_precipitation.last_changed %}
{% set time_diff = (as_timestamp(now()) - as_timestamp(last_changed)) if last_changed else 99999 %}
{% set pluie_meteo = states('weather.salaunes') in ['rainy', 'pouring'] %}
{% set pluie_pluvio = states('sensor.pluviometre_precipitation') | float(0) >= 0.1 %}
{% set temps_ecoule = time_diff <= 1800 if last_changed else false %}
{# Il ne pleut pas si: #}
{# 1. Pas de pluie détectée par la météo ET #}
{# 2. Pas de pluie détectée par le pluviomètre depuis 30 min #}
{{ not pluie_meteo and not (pluie_pluvio and temps_ecoule) }}
################################
### cover: ###
################################
cover:
- platform: template
covers:
pergola_motor:
friendly_name: "Pergola: lames"
#value_template: "{{ states.sensor.pergola_motor.state|int > 0 }}"
position_template: "{{ states.sensor.pergola_motor.state|int }}"
open_cover:
action: rest_command.pergola_set_motorlevel_open
close_cover:
action: rest_command.pergola_set_motorlevel_close
set_cover_position:
action: rest_command.pergola_set_motorlevel
data:
position: "{{position}}"
device_class: shutter
icon_template: >-
{% if states('sensor.pergola_motor')|float > 0 %}
hass:electric-switch
{% else %}
mdi:electric-switch-closed
{% endif %}
################################
### rest_command: ###
################################
rest_command:
pergola_set_brightnesslevel:
url: http://192.168.0.100/zns.cgi?cmd=l&o=64&p={{ brightness }}
method: GET
payload: ""
content_type: "text/plain"
pergola_set_motorlevel:
url: http://192.168.0.100/zns.cgi?cmd=m&m=1&p={{ position }}
method: GET
payload: ""
content_type: "text/plain"
pergola_set_user:
url: http://192.168.0.100/zns.cgi?cmd=u&p=3&v={{ user_value }}
method: GET
payload: ""
content_type: "text/plain"
################################
### group ###
################################
group:
pergola_modes:
name: "Modes Pergola"
entities:
- switch.pergola_switch_rain
- switch.pergola_switch_suntracking
- switch.pergola_switch_shade
- switch.pergola_switch_winter
input_number:
pergola_light_brightness:
name: Luminosité
min: 0
max: 255
step: 1
mode: slider
icon: mdi:lightbulb
pergola_motor_position:
name: "Pergola Motor Position"
min: 0
max: 500
step: 1
initial: 0
mode: box
pergola_blades_angle:
name: Inclinaison lames
min: 0
max: 500 # ou 255 selon ton API
step: 1
mode: slider
icon: mdi:blinds
Toujours à corriger (27_04_2025) :
*scanner le wifi également avec cette commande
http://192.168.xxx.xxx/zns.cgi?cmd=s&p=s
Et on récupère la liste des réseaux avec cette commande
http://zenisun.local/zns.cgi?cmd=s&p=g
A vous de l’améliorer, moi par exemple il est comme ceci
La partie concernant les switch:
J’ai simplié au maximum pour éviter les problèmes. Toute la partie commande se trouve maintenant Lovelace directement dans la carte avec des `tap_action’
type: grid
cards:
- type: tile
entity: automation.auto_pergola_lames
features_position: inline
vertical: false
grid_options:
columns: full
features:
- type: toggle
- features:
- type: cover-open-close
type: tile
entity: cover.pergola_petit_volet
features_position: inline
vertical: false
name: PETIT VOLET
- features:
- type: cover-open-close
type: tile
entity: cover.pergola_grand_volet
features_position: inline
vertical: false
name: GRAND VOLET
- type: heading
heading: Lumières
heading_style: title
badges:
- type: entity
show_state: true
show_icon: true
entity: sensor.light_sensor_pergola_white
icon: mdi:flash-triangle-outline
- features:
- style: slider
type: numeric-input
type: tile
entity: input_number.pergola_light_brightness
name: Lumière
features_position: inline
vertical: false
- type: vertical-stack
cards:
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
name: "ON"
icon: mdi:lightbulb
tap_action:
action: call-service
service: rest_command.pergola_set_brightnesslevel
service_data:
brightness: 130
- type: button
name: "OFF"
icon: mdi:lightbulb-off
tap_action:
action: call-service
service: rest_command.pergola_set_brightnesslevel
service_data:
brightness: 0
- type: horizontal-stack
cards:
- type: button
name: 25%
tap_action:
action: call-service
service: rest_command.pergola_set_brightnesslevel
service_data:
brightness: 75
- type: button
name: 50%
tap_action:
action: call-service
service: rest_command.pergola_set_brightnesslevel
service_data:
brightness: 130
- type: button
name: 75%
tap_action:
action: call-service
service: rest_command.pergola_set_brightnesslevel
service_data:
brightness: 190
- type: button
name: 100%
tap_action:
action: call-service
service: rest_command.pergola_set_brightnesslevel
service_data:
brightness: 255
- type: heading
heading: Lames
heading_style: title
badges:
- type: entity
entity: sensor.sensor_pergola_position_des_lames_mot0
- features:
- style: slider
type: numeric-input
type: tile
entity: input_number.pergola_blades_angle
name: Positioon des lames
features_position: inline
vertical: false
- type: vertical-stack
cards:
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
name: Ouvrir
icon: mdi:arrow-up-bold
tap_action:
action: call-service
service: rest_command.pergola_set_motorlevel
service_data:
position: 500
- type: button
name: Fermer
icon: mdi:arrow-down-bold
tap_action:
action: call-service
service: rest_command.pergola_set_motorlevel
service_data:
position: 0
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
name: 25%
tap_action:
action: call-service
service: rest_command.pergola_set_motorlevel
service_data:
position: 190
- type: button
name: 50%
tap_action:
action: call-service
service: rest_command.pergola_set_motorlevel
service_data:
position: 300
- type: button
name: 75%
tap_action:
action: call-service
service: rest_command.pergola_set_motorlevel
service_data:
position: 400
- type: button
name: 100%
tap_action:
action: call-service
service: rest_command.pergola_set_motorlevel
service_data:
position: 500
- type: heading
heading: Pergola mode
heading_style: title
badges:
- type: entity
show_state: true
show_icon: true
entity: sensor.pergola_mode_display
icon: mdi:arrow-decision
- type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
name: Rain
icon: mdi:weather-rainy
tap_action:
action: call-service
service: rest_command.pergola_set_user
service_data:
user_value: 1
show_state: false
- type: button
name: Sun
icon: mdi:sun-angle
tap_action:
action: call-service
service: rest_command.pergola_set_user
service_data:
user_value: 2
show_state: false
- type: button
name: Shade
icon: mdi:weather-partly-cloudy
tap_action:
action: call-service
service: rest_command.pergola_set_user
service_data:
user_value: 4
show_state: false
- type: button
name: Winter
icon: mdi:snowflake
tap_action:
action: call-service
service: rest_command.pergola_set_user
service_data:
user_value: 8
show_state: false
- type: button
name: "OFF"
icon: mdi:power
tap_action:
action: call-service
service: rest_command.pergola_set_user
service_data:
user_value: 0
show_state: false
- type: heading
heading: Volets
heading_style: title
badges: []
Et enfin on vas créer la carte:
type: vertical-stack
cards:
- type: entities
entities:
- entity: input_number.pergola_light_brightness
name: Luminosité
- type: entities
entities:
- entity: input_number.pergola_blades_angle
name: Position lames
Et enfin pour les lames, on ajoute ceci dans le yaml:
pergola_blades_angle:
name: Inclinaison lames
min: 0
max: 255 # ou 255 selon ton API
step: 1
mode: slider
icon: mdi:blinds
et sa carte
type: vertical-stack
cards:
- type: entities
entities:
- entity: input_number.pergola_light_brightness
name: Luminosité
- type: entities
entities:
- entity: input_number.pergola_blades_angle
name: Position lames
et enfin l’automation qui va avec:
alias: AUTO - Pergola - Régler position lames
description: Envoie la position des lames à la pergola
triggers:
- entity_id:
- input_number.pergola_blades_angle
trigger: state
conditions: []
actions:
- data:
position: "{{ trigger.to_state.state | int }}"
action: rest_command.pergola_set_motorlevel
mode: single
Voilà une pergola qui fonctionne
Modification de l’automation pour s’adapter à la nouvelle configuration yaml du 13/08/2025