# Scénarios

Le **serveur Web intégré**<span> permet de créer des scénario personnalisés ; aucun logiciel supplémentaire n'est nécessaire.</span>  
Créez facilement des tâches basées sur le temps, l’état des entrées et des sorties ...  
<span>Utilisez un </span>**ordinateur**<span> pour l'édition, la modification et la création de scénarios de fonctionnement.</span>  
**L'édition sur Smartphone peut entraîner des problèmes d'affichage ou une visibilité limitée des paramètres avancés.**

# Gestion des scénarios

<p class="callout warning"><span style="text-decoration: underline;">Accès réservé</span> :   
seuls les utilisateurs disposant du rôle **Installateur** et des **permissions** associées peuvent accéder à la gestion des scénarios</p>

Les scénarios sont représentés graphiquement sous forme de **blocs fonctionnels** d'entrée et de sortie **interconnectés**, illustrant le comportement du module et les relations entre les différentes conditions, actions et temporisations.

Les scénarios chargés sur le module sont accessibles depuis le menu *« Scénarios ».* Ils apparaissent dans le bandeau latéral situé à gauche de l'écran.

Vous pouvez naviguer dans la *zone de travail* pour visualiser la structure et la logique du scénario.  
Une *mini-fenêtre de visualisation*, située en bas à droite de l’écran, offre un aperçu global des blocs.  
  
La *barre d'outils latérale* affichée à la droite de l'écran permet de :  
\- agrandir la vue  
\- réduire la vue  
\- recentrer l’affichage sur la zone des blocs scénario  
\- verrouiller et déverrouiller les blocs  
\- réinitialiser l'édition de blocs

<p class="callout info">Chaque module peut contenir un maximum de **3 scénarios**  
Seuls les scénarios **chargés sur le module** sont affichés dans l'interface d'administration</p>

Depuis le menu "Scénario" il est possible de :

- **éditer** un scénario - la mention *« Scénario ouvert »* s'affiche alors
- **activer ou désactiver** un scénario
- **supprimer** un scénario
- **modifier les informations** d'un scénario (nom, description, etc.) à l'aide du bouton *« Modifier »*
- **exporter** un scénario vers un ordinateur local ou un emplacement distant
- **importer** un scénario modèle depuis le serveur ModLink distant

Pour quitter le mode édition sans enregistrer les modifications effectuées, cliquez sur *« <span style="background-color: rgb(224, 62, 45);">Abandonner</span> ».*   
Pour conserver les modifications apportées au scénario, cliquez sur *« <span style="background-color: rgb(53, 152, 219);">Sauvegarder</span> ».*

<p class="callout success">Plusieurs options de scénario sont possibles :  
  
- utiliser un **scénario préconfiguré** si son fonctionnement correspond à votre besoin  
- importer et activer un **scénario modèle** si son fonctionnement correspond à votre besoin  
- **modifier un scénario existant** pour l’adapter à votre usage  
- **créer un nouveau scénario** entièrement personnalisé</p>

# Scénarios préconfigurés

<p class="callout info">**Deux scénarios préconfigurés** sont intégrés par défaut dans chaque module.   
Ils peuvent être **utilisés immédiatement** sans création de logique ni programmation complémentaire  
  
Les **variables, les blocs de fonction ainsi que les widgets** associés à ces scénario sont également créés et disponibles automatiquement dès leur chargement  
</p>

### 1- scénario préconfiguré 1  
<span style="background-color: rgb(249, 239, 121);">Télérupteur avec ou sans temporisation</span>

<div class="qMYqUG_convSearchResultHighlightRoot" id="bkmrk-pour-s%C3%A9curiser-l%E2%80%99acc"><div class="" data-is-intersecting="true" data-turn-id-container="request-6a0f0b24-c928-83eb-9aa1-7e3c5a8b1daa-4"><section class="text-token-text-primary w-full focus:outline-none has-data-writing-block:pointer-events-none [&:has([data-writing-block])>*]:pointer-events-auto R6Vx5W_threadScrollVars scroll-mb-[calc(var(--scroll-root-safe-area-inset-bottom,0px)+var(--thread-response-height))] scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="false" data-testid="conversation-turn-44" data-turn="assistant" data-turn-id="request-6a0f0b24-c928-83eb-9aa1-7e3c5a8b1daa-4" data-turn-id-container="request-6a0f0b24-c928-83eb-9aa1-7e3c5a8b1daa-4" dir="auto"><div class="qMYqUG_convSearchResultHighlightRoot" id="bkmrk-le-fonctionnement-de"><div class="" data-is-intersecting="true" data-turn-id-container="request-6a0f0b24-c928-83eb-9aa1-7e3c5a8b1daa-4"><section class="text-token-text-primary w-full focus:outline-none has-data-writing-block:pointer-events-none [&:has([data-writing-block])>*]:pointer-events-auto R6Vx5W_threadScrollVars scroll-mb-[calc(var(--scroll-root-safe-area-inset-bottom,0px)+var(--thread-response-height))] scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="false" data-testid="conversation-turn-44" data-turn="assistant" data-turn-id="request-6a0f0b24-c928-83eb-9aa1-7e3c5a8b1daa-4" data-turn-id-container="request-6a0f0b24-c928-83eb-9aa1-7e3c5a8b1daa-4" dir="auto">#### 1.1- Fonctionnement

Le scénario associe :

- une entrée configurée en bouton poussoir,
- une sortie pilotée en mode bistable (marche / arrêt)

A chaque impulsion sur le bouton de commande, la sortie change d'état (ON <span style="font-size: 11.0pt; line-height: 150%; font-family: 'Calibri',sans-serif;">→</span> OFF puis OFF <span style="font-size: 11.0pt; line-height: 150%; font-family: 'Calibri',sans-serif;">→</span> ON).

Le fonctionnement de ce scénario permet deux usages :

- un **appui court** sur le bouton poussoir active la sortie pendant la **durée de temporisation définie (en ms)**, puis   
    celle-ci se désactive automatiquement
- un **appui long** active la sortie **sans temporisation** : la sortie reste alors activée jusqu’à une nouvelle commande

<span style="text-decoration: underline;">Applications courantes :</span>

- éclairage d'une lampe ou d'un groupe de lampes (cage d’escalier, couloir, garage ...)
- commande d’un portail ou d’une gâche électrique ;
- activation temporaire d’une pompe, d’un extracteur d’air ou d’une ventilation ;
- éclairage extérieur avec extinction automatique ;
- commande d’un équipement nécessitant un maintien permanent ponctuel.

</section></div></div></section></div></div>#### 1.2- Variables et widgets préconfigurés

Pour ce scénario, deux variables et deux widgets préconfigurés sont utilisés :

<div class="flex max-w-full flex-col gap-4 grow" id="bkmrk-un-widget-%C2%AB-bouton-t"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="b48cc1e0-39aa-4689-b858-3381efbfa126" data-message-model-slug="gpt-5-5" data-turn-start-message="true" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full light markdown-new-styling">- un widget « bouton télérupteur » pour commander la sortie
- un widget « temporisation ON/OFF » pour activer ou non la temporisation et le cas échéant définir sa durée en ms

</div></div></div></div>Les variables associées à ce scénario permettent :

<div class="flex max-w-full flex-col gap-4 grow" id="bkmrk-de-m%C3%A9moriser-l%E2%80%99%C3%A9tat-"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="b48cc1e0-39aa-4689-b858-3381efbfa126" data-message-model-slug="gpt-5-5" data-turn-start-message="true" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full light markdown-new-styling">- de mémoriser l’état du télérupteur (sortie activée ou désactivée)
- d'appliquer ou non la temporisation automatique et le cas échéant définir sa durée en ms

</div></div></div></div>### 2- Scénario préconfiguré 2

### 3- Utiliser, désactiver ou supprimer un scénario préconfiguré

Si le fonctionnement du scénario préconfiguré correspond aux besoins de votre installation, vous pouvez l'utiliser tel quel sans aucune configuration supplémentaire.

- Le scénario est activé et prêt à l’emploi
- Les variables et widgets sont déjà créés  
    *<span lang="EN-US" style="mso-ansi-language: EN-US;">→ </span>Idéal pour se familiariser avec l'univers ModLink*

 S'il ne correspond pas à vos besoins, vous pouvez soit le "désactiver", soit le "<span style="background-color: rgb(224, 62, 45);">supprimer</span>" dans le bandeau situé à gauche de l'écran.

### 4- Modifier un scénario préconfiguré

- Permet d’ajuster un scénario pour un cas particulier sans repartir de zéro (télécharger un modèle depuis le serveur distant ou local)
- L’utilisateur doit vérifier que toutes les variables sont valides et que les entrées et les sorties sont bien configurées

<div class="flex max-w-full flex-col gap-4 grow" id="bkmrk--1"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="b48cc1e0-39aa-4689-b858-3381efbfa126" data-message-model-slug="gpt-5-5" data-turn-start-message="true" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden">  
</div></div></div><div class="qMYqUG_convSearchResultHighlightRoot" id="bkmrk--2"><div class="" data-is-intersecting="true" data-turn-id-container="request-6a0f0b24-c928-83eb-9aa1-7e3c5a8b1daa-4">  
</div></div>

# Utiliser les blocs de fonction

Dans le menu “Scénario”, les blocs de fonctions apparaissent dans le bandeau latéral à gauche de l'écran, à la suite des scénarios chargés sur le module.   
Faites défiler ce bandeau vers le bas pour accéder aux différents blocs de création.

Pour construire un scénario, sélectionnez un bloc puis faites-le glisser vers l’espace de travail. Vous pouvez ensuite le déposer, l’organiser et le relier aux autres blocs afin de définir la logique souhaitée.

<p class="callout info">Les scénarios sont construits à partir de **blocs fonctionnels interconnectés.**  
Chaque bloc remplit une fonction logique précise dans le traitement des **entrées**, des **variables** et des **sorties**.</p>

### 1- Tests sur les entrées**<span style="background-color: rgb(241, 196, 15);">  
</span>**

Ces blocs sont utilisés pour **contrôler l’état ou le comportement des éléments physiques connectés aux entrées du module**. Ils permettent de traiter les différents types de signaux d'entrées provenant des capteurs ou des interrupteurs (impulsions, états logiques, variations ...) avant de déclencher une action.

#### 1.1- impulsion simple

Ce bloc permet de détecter **un appui court et unique** sur une entrée.  
Il génère une action uniquement lors de la détection d’une impulsion, sans maintien de l’état.

#### 1.2- une impulsion double

<div class="flex flex-col text-sm pb-25" id="bkmrk-ce-bloc-d%C3%A9tecte-deux"><section class="text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&:has([data-writing-block])>*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-20" data-turn="assistant" data-turn-id="request-WEB:5df38fd3-bf2f-491f-8d0a-d07fbd8b4472-9" dir="auto">Ce bloc détecte **deux appuis rapides et consécutifs** sur une entrée.   
L’action n’est déclenchée que si les deux impulsions sont reconnues dans un intervalle de temps.

</section></div>#### 1.3- une impulsion longue

Ce bloc détecte **un appui prolongé sur une entrée**.   
L’action est déclenchée uniquement lorsque l’entrée reste activée pendant une durée continue.

#### 1.4- Trois impulsions (simple / double / longue)

Ce bloc permet d’identifier **différents types d’appuis** sur une entrée : **impulsion simple, double impulsion ou appui long**. L’action associée est déclenchée en fonction du type d’appui détecté.

#### 1.5- Test analogique

Ce bloc permet de **comparer une valeur analogique à une valeur définie**.   
Il vérifie **si la valeur de test est supérieure ou égale**, ou **inférieure ou égale** à la valeur définie afin de déclencher les actions associées.

<div class="flex flex-col text-sm" id="bkmrk-les-deux-tests-%28%3E-et"><section class="text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&:has([data-writing-block])>*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-38" data-turn="assistant" data-turn-id="request-WEB:5df38fd3-bf2f-491f-8d0a-d07fbd8b4472-18" dir="auto">Les deux tests (&gt; et &lt;) sont généralement utilisés conjointement afin de définir une zone de fonctionnement (hystérésis). Cela permet d’éviter les déclenchements et arrêts répétés liés aux variations autour du seuil.

<p class="callout warning">Ce bloc de fonction ne s’applique pas à la régulation du chauffage.   
Pour cet usage, un bloc spécifique est disponible dans la section « Régulation ».</p>

</section></div>#### 1.6- Test état front. ON / OFF

Ce bloc détecte un **changement d’état** sur une entrée, en analysant les transitions ON → OFF ou OFF → ON.   
Il permet de déclencher une action uniquement lors du passage d’un état à un autre (front montant ou front descendant).

<p class="callout info">Le bloc devient VRAI uniquement au moment du changement, puis redevient FAUX  
- il ne reste pas actif  
- il déclenche une seule fois par changement</p>

#### 1.7- Test état ON / OFF

Ce bloc permet de **vérifier l’état d’une entrée**.   
Il détecte si l’entrée est en position ON ou OFF et déclenche les actions associées en fonction de l’état constaté.

<p class="callout info">Ce bloc vérifie un **état stable**</p>

#### 1.8- Test contact radar

Ce bloc permet de vérifier l’**état du contact issu d’un détecteur radar**.  
Il détecte la présence ou l’absence de détection et déclenche les actions associées en fonction de l’état du contact.  
Il faut paramétrer le **délai de défaut en minutes**.   
Par exemple, si le capteur reste ouvert pendant une durée supérieure à 30 minutes, il passe automatiquement en état d’erreur.

<details id="bkmrk-rappel-blocs-de-test"><summary>Rappel blocs de tests sur les ENTRÉES</summary>

<table border="1" id="bkmrk-tests-sur-les-entr%C3%A9e" style="border-collapse: collapse; background-color: rgb(251, 238, 184); border-color: rgb(52, 73, 94); border-width: 1px; width: 99.9748%;"><thead><tr style="border-color: rgb(52, 73, 94); background-color: rgb(241, 196, 15);"><th style="border-color: rgb(52, 73, 94); width: 18.1667%;">**<span style="color: rgb(52, 73, 94);">Bloc</span>**</th><th style="border-color: rgb(52, 73, 94); width: 44.8659%;">**<span style="color: rgb(52, 73, 94);">Type de test</span>**</th><th style="border-color: rgb(52, 73, 94); width: 36.9544%;">**<span style="color: rgb(52, 73, 94);">Utilisation</span>**</th></tr></thead><tbody><tr><td class="align-left" style="border-color: rgb(52, 73, 94); width: 18.1667%;"><span style="color: rgb(52, 73, 94);">**Impulsion simple**</span></td><td style="border-color: rgb(52, 73, 94); width: 44.8659%;"><span style="color: rgb(52, 73, 94);">Détecte une seule impulsion </span></td><td style="border-color: rgb(52, 73, 94); width: 36.9544%;"><span style="color: rgb(52, 73, 94);">Déclencher une action sur appui court</span></td></tr><tr><td class="align-left" style="border-color: rgb(52, 73, 94); width: 18.1667%;"><span style="color: rgb(52, 73, 94);">**Impulsion double**</span></td><td style="border-color: rgb(52, 73, 94); width: 44.8659%;"><span style="color: rgb(52, 73, 94);">Détecte deux impulsions successives rapprochées</span></td><td style="border-color: rgb(52, 73, 94); width: 36.9544%;"><span style="color: rgb(52, 73, 94);">Utilisé pour commandes type double-clic</span></td></tr><tr><td class="align-left" style="border-color: rgb(52, 73, 94); width: 18.1667%;"><span style="color: rgb(52, 73, 94);">**Impulsion longue**</span></td><td style="border-color: rgb(52, 73, 94); width: 44.8659%;"><span style="color: rgb(52, 73, 94);">Détecte une impulsion maintenue dans le temps</span></td><td style="border-color: rgb(52, 73, 94); width: 36.9544%;"><span style="color: rgb(52, 73, 94);">Déclencher une action sur appui long</span></td></tr><tr><td class="align-left" style="border-color: rgb(52, 73, 94); width: 18.1667%;"><span style="color: rgb(52, 73, 94);">**3 impulsions**</span></td><td style="border-color: rgb(52, 73, 94); width: 44.8659%;"><span style="color: rgb(52, 73, 94);">Détecte trois impulsions successives</span></td><td style="border-color: rgb(52, 73, 94); width: 36.9544%;"><span style="color: rgb(52, 73, 94);">Commandes spécifiques multi-clic</span></td></tr><tr><td class="align-left" style="border-color: rgb(52, 73, 94); width: 18.1667%;"><span style="color: rgb(52, 73, 94);">**Test analogique**</span></td><td style="border-color: rgb(52, 73, 94); width: 44.8659%;"><span style="color: rgb(52, 73, 94);">Compare une valeur analogique à un seuil</span></td><td style="border-color: rgb(52, 73, 94); width: 36.9544%;"><span style="color: rgb(52, 73, 94);">Lecture capteurs (température, luminosité, etc.)</span></td></tr><tr><td class="align-left" style="border-color: rgb(52, 73, 94); width: 18.1667%;"><span style="color: rgb(52, 73, 94);">**Test état front** </span>

<span style="color: rgb(52, 73, 94);">**ON / OFF**</span>

</td><td style="border-color: rgb(52, 73, 94); width: 44.8659%;"><span style="color: rgb(52, 73, 94);">Détecte un changement d’état (front montant ou descendant)</span></td><td style="border-color: rgb(52, 73, 94); width: 36.9544%;"><span style="color: rgb(52, 73, 94);">Déclenchement sur transition ON ↔ OFF</span></td></tr><tr><td class="align-left" style="border-color: rgb(52, 73, 94); width: 18.1667%;"><span style="color: rgb(52, 73, 94);">**Test état   
ON / OFF**</span></td><td style="border-color: rgb(52, 73, 94); width: 44.8659%;"><span style="color: rgb(52, 73, 94);">Vérifie l’état stable d’une entrée</span></td><td style="border-color: rgb(52, 73, 94); width: 36.9544%;"><span style="color: rgb(52, 73, 94);">Vérifier si une entrée est active ou inactive</span></td></tr><tr><td class="align-left" style="border-color: rgb(52, 73, 94); width: 18.1667%;"><span style="color: rgb(52, 73, 94);">**Test   
contact radar**</span></td><td style="border-color: rgb(52, 73, 94); width: 44.8659%;"><span style="color: rgb(52, 73, 94);">Détecte l’état ou l’activation d’un contact radar</span></td><td style="border-color: rgb(52, 73, 94); width: 36.9544%;"><span style="color: rgb(52, 73, 94);">Utilisation avec détection de présence</span></td></tr></tbody></table>

</details>
### 2- Tests sur les variables

Ces blocs de test permettent de vérifier l’état ou la valeur d’une variable utilisée dans les scénarios. Ils servent à comparer une variable à une valeur définie (égalité, supériorité, infériorité ou plage de valeurs) afin de déclencher les actions associées selon le résultat du test.

##### 2.1- Test variable simple

Ce bloc permet d’**effectuer un test sur une variable unique avec plusieurs types de conditions** :

- Test d’**égalité** (= valeur définie)
- Test **supérieur à** (&gt; valeur définie)
- Test **inférieur à** (&lt; valeur définie)

Le résultat du test est validé si la/les condition(s) configurée(s) est/sont respectée(s).

##### 2.2- Test changement de variable

<div class="flex flex-col text-sm pb-25" id="bkmrk-ce-bloc-permet-de-d%C3%A9"><section class="text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&:has([data-writing-block])>*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-50" data-turn="assistant" data-turn-id="request-WEB:5df38fd3-bf2f-491f-8d0a-d07fbd8b4472-24" dir="auto">Ce bloc permet de détecter toute **modification de la valeur d’une variable** dans un scénario. Il déclenche les actions associées dès qu’un changement est constaté, indépendamment de la nouvelle valeur.

**Exemple :**  
Dans le scénario *“Accès bâtiment”*, si la variable *“Mode sécurité”* passe de *Désactivé* à *Activé*, le bloc détecte ce changement et peut déclencher l’activation des alarmes et la fermeture des accès.

</section></div>##### 2.3- Test de variables multiples Et / Ou

Ce bloc permet d'**évaluer** **simultanément plusieurs variables dans un scénario** en fonction des opérateurs ET / OU et de déclencher les actions associées lorsque l’ensemble ou une partie des conditions est vérifiée.

- **ET** : toutes les conditions doivent être vraies
- **OU** : au moins une condition doit être vraie

**Exemple** :  
Dans un scénario, si les variables "têtes thermostatiques" sont détectées comme fermées (condition ET), alors le bloc déclenche la fermeture du circuit d'eau.

##### 2.4- Test de variables égales multiples

Ce bloc permet de tester **une variable en définissant plusieurs conditions d’égalité**.  
Pour chaque égalité, une valeur est associée à la variable.  
Le test est validé si la variable correspond à l’une des valeurs définies.

<p class="callout info">Chaque égalité correspond à une valeur possible de la variable.   
Le bloc réalise donc un test d’appartenance à une liste de valeurs définies.</p>

<details id="bkmrk-rappel-blocs-de-test-2"><summary>Rappel blocs de tests sur les VARIABLES</summary>

<table border="1" id="bkmrk-bloc-type-de-test-pr" style="width: 107.857%; height: 373.097px; border-collapse: collapse; background-color: rgb(251, 238, 184); border-color: rgb(52, 73, 94); border-width: 1px;"><thead><tr style="height: 29.7017px; background-color: rgb(241, 196, 15); border-color: rgb(52, 73, 94);"><td class="align-center" style="width: 22.8587%; border-color: rgb(52, 73, 94); height: 29.7017px;"><span style="color: rgb(52, 73, 94);">**Bloc**</span></td><td class="align-center" style="width: 13.0974%; border-color: rgb(52, 73, 94); height: 29.7017px;">**<span style="color: rgb(52, 73, 94);">Type de test</span>**</td><td class="align-center" style="width: 36.8222%; border-color: rgb(52, 73, 94); height: 29.7017px;">**<span style="color: rgb(52, 73, 94);">Principe</span>**</td><td class="align-center" style="width: 27.1823%; border-color: rgb(52, 73, 94); height: 29.7017px;">**<span style="color: rgb(52, 73, 94);">Utilisation</span>**</td></tr></thead><tbody><tr style="height: 63.3097px;"><td class="align-left" style="width: 22.8587%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">**Test variable simple**</span></td><td style="width: 13.0974%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">1 variable</span></td><td style="width: 36.8222%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">Compare une variable à une valeur avec une condition logique (=, &gt;, &lt;)</span></td><td style="width: 27.1823%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">Tester un seuil ou un état précis</span></td></tr><tr style="height: 80.1136px;"><td class="align-left" style="width: 22.8587%; border-color: rgb(52, 73, 94); height: 80.1136px;"><span style="color: rgb(52, 73, 94);">**Test changement** </span>

<span style="color: rgb(52, 73, 94);">**de variable**</span>

</td><td style="width: 13.0974%; border-color: rgb(52, 73, 94); height: 80.1136px;"><span style="color: rgb(52, 73, 94);">1 variable</span></td><td style="width: 36.8222%; border-color: rgb(52, 73, 94); height: 80.1136px;"><span style="color: rgb(52, 73, 94);">Détecte une variation d’état ou de valeur (front montant, descendant ou toute modification)</span></td><td style="width: 27.1823%; border-color: rgb(52, 73, 94); height: 80.1136px;"><span style="color: rgb(52, 73, 94);">Déclencher une action uniquement lors d’un changement</span></td></tr><tr style="height: 63.3097px;"><td class="align-left" style="width: 22.8587%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">**Test variables multiples** </span>

<span style="color: rgb(52, 73, 94);">**ET / OU**</span>

</td><td style="width: 13.0974%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">Plusieurs variables</span></td><td style="width: 36.8222%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">Combine plusieurs variables avec une logique booléenne ET / OU</span></td><td style="width: 27.1823%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">Valider une condition basée sur plusieurs états</span></td></tr><tr style="height: 63.3097px;"><td class="align-left" style="width: 22.8587%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">**Test variable égale multiple**</span></td><td style="width: 13.0974%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">1 variable</span></td><td style="width: 36.8222%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">Permet de définir plusieurs égalités possibles pour une même variable</span></td><td style="width: 27.1823%; border-color: rgb(52, 73, 94); height: 63.3097px;"><span style="color: rgb(52, 73, 94);">Vérifier si une variable correspond à un ensemble de valeurs autorisées</span></td></tr></tbody></table>

</details>### 3- Actions sur les sorties

<div class="flex flex-col text-sm pb-25" id="bkmrk-les-blocs-contact-so"><section class="text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&:has([data-writing-block])>*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-62" data-turn="assistant" data-turn-id="request-WEB:5df38fd3-bf2f-491f-8d0a-d07fbd8b4472-30" dir="auto">Les blocs contact sorties permettent de **piloter et de gérer l’état des sorties** d’un module dans un scénario. Ils permettent de commander les actionneurs (relais, éclairages, ouvrants ...) selon différents modes de fonctionnement : commande directe (ON / OFF / inversion), temporisée, cyclique ou spécifique à des équipements (BSO, ouvrants).

</section></div>##### 3.1- On / Off / Flip

Ce bloc est utilisé pour **commander directement un actionneur** dans un scénario selon la logique définie.

- **ON** : active la sortie de manière continue
- **OFF** : désactive la sortie
- **FLIP** : inverse l’état actuel de la sortie (ON devient OFF, OFF devient ON)

##### 3.2- Tous les relais (On / Off / Flip)

Ce bloc permet de **piloter simultanément l’ensemble des relais d’un module**. Il est utilisé pour appliquer une action globale sur toutes les sorties relais dans un scénario.

- **ON** : active tous les relais
- **OFF** : désactive tous les relais
- **FLIP** : inverse l’état de chaque relais (les relais actifs passent à OFF et les relais inactifs passent à ON)

<span style="color: rgb(34, 34, 34); font-family: 'Noto Sans', sans-serif; font-size: 1.4em; font-weight: 400;">3.3- Impulsion cyclique</span>

Ce bloc permet de générer une **succession d’impulsions ON/OFF** sur une sortie **selon un cycle paramétré**.   
Il est nécessaire de définir le *nombre d’impulsions* par cycle, le *nombre de cycles*, la *durée* de chaque impulsion (en ms) ainsi que le *temps entre deux cycles* (en ms).La sortie est activée de manière répétée (clignotement ou alternance)

<span style="text-decoration: underline;">Exemple</span> :  
Pour faire clignoter un voyant d’alerte, on paramètre :

<div class="flex flex-col text-sm pb-25" id="bkmrk-3-impulsions-par-cyc"><section class="text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&:has([data-writing-block])>*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-72" data-turn="assistant" data-turn-id="request-WEB:5df38fd3-bf2f-491f-8d0a-d07fbd8b4472-35" dir="auto"><div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="65ee51f2-c7ac-4e2f-9062-a5a0e80d4ac5" data-message-model-slug="gpt-5-3-mini" data-turn-start-message="true" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling">- 3 impulsions par cycle
- 2 cycles
- 500 ms d’impulsion
- 1000 ms entre les cycles

</div></div></div></div></div></div>Le voyant s’allume et s’éteint 3 fois, puis le cycle est répété une deuxième fois après une pause d’1 seconde.

</section></div>##### 3.4- On / Off après temporisation

Ce bloc permet de **commander une sortie** **avec un délai d’exécution**. Le module ne la commande pas immédiatement ;   
il attend un temps défini puis exécute l'action.  
Il est nécessaire de sélectionner la sortie concernée, de définir la fonction (ON ou OFF), puis de paramétrer le temps de temporisation en millisecondes.

<span style="text-decoration: underline;">Exemple d'applications</span> :

- lumière qui s’éteint après 2 minutes
- ventilation qui démarre après 30 secondes
- arrêt automatique différé

##### 3.5- BSO (Brise Soleil Orientable)

Ce bloc permet la **commande de stores à lamelles orientables**.  
Il est nécessaire de définir la configuration du BSO ainsi que la fonction à exécuter (ouvrir, fermer, stop, orientation ...).

<span style="text-decoration: underline;">Exemple</span> :

- ouverture des lames
- fermeture partielle
- ajustement selon soleil

##### 3.6- Ouvrants

Ces blocs permettent de **piloter des équipements motorisés** tels que des volets roulants, des stores, des fenêtres et autres ouvrants.  
Il faut définir la configuration et la fonction (ouvrir, fermer, stop ...).

<details id="bkmrk-rappel-blocs-d%27actio"><summary>Rappel blocs d'action sur les SORTIES</summary>

<table border="1" style="border-collapse: collapse; background-color: rgb(251, 238, 184); border-color: rgb(52, 73, 94); width: 99.9748%;"><tbody><tr style="background-color: rgb(241, 196, 15); border-color: rgb(52, 73, 94);"><td class="align-center" style="border-color: rgb(52, 73, 94); width: 15.3256%;">**Bloc**</td><td class="align-center" style="border-color: rgb(52, 73, 94); width: 13.4709%;">**Type d’action**</td><td class="align-center" style="border-color: rgb(52, 73, 94); width: 39.6743%;">**Principe**</td><td class="align-center" style="border-color: rgb(52, 73, 94); width: 31.5163%;">**Utilisation**</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 15.3256%;">**On / Off / Flip**</td><td style="border-color: rgb(52, 73, 94); width: 13.4709%;">Commande directe</td><td style="border-color: rgb(52, 73, 94); width: 39.6743%;">Active, désactive ou inverse l’état d’une sortie instantanément</td><td style="border-color: rgb(52, 73, 94); width: 31.5163%;">Pilotage simple d’un éclairage, relais ou équipement</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 15.3256%;">**Tous les relais (On / Off / Flip)**</td><td style="border-color: rgb(52, 73, 94); width: 13.4709%;">Commande globale</td><td style="border-color: rgb(52, 73, 94); width: 39.6743%;">Applique une action (ON, OFF ou inversion) à l’ensemble des relais d’un module</td><td style="border-color: rgb(52, 73, 94); width: 31.5163%;">Coupure générale, mise en marche globale, reset des sorties</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 15.3256%;">**Impulsion cyclique**</td><td style="border-color: rgb(52, 73, 94); width: 13.4709%;">Commande cyclique</td><td style="border-color: rgb(52, 73, 94); width: 39.6743%;">Génère une succession d’impulsions ON/OFF selon un cycle paramétré (répétition dans le temps)</td><td style="border-color: rgb(52, 73, 94); width: 31.5163%;">Signalisation lumineuse, alerte, clignotement</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 15.3256%;">**On / Off après temporisation**</td><td style="border-color: rgb(52, 73, 94); width: 13.4709%;">Commande temporisée</td><td style="border-color: rgb(52, 73, 94); width: 39.6743%;">Exécute une action ON ou OFF après un délai défini</td><td style="border-color: rgb(52, 73, 94); width: 31.5163%;">Extinction automatique, démarrage différé, temporisation d’équipement</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 15.3256%;">**BSO**</td><td style="border-color: rgb(52, 73, 94); width: 13.4709%;">Commande spécifique</td><td style="border-color: rgb(52, 73, 94); width: 39.6743%;">Pilote des brise-soleil orientables avec gestion des positions et de l’orientation</td><td style="border-color: rgb(52, 73, 94); width: 31.5163%;">Gestion de la lumière naturelle, confort thermique</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 15.3256%;">**Ouvrants**</td><td style="border-color: rgb(52, 73, 94); width: 13.4709%;">Commande spécifique</td><td style="border-color: rgb(52, 73, 94); width: 39.6743%;">Permet de contrôler des équipements motorisés (ouverture, fermeture, arrêt)</td><td style="border-color: rgb(52, 73, 94); width: 31.5163%;">Volets roulants, stores, fenêtres motorisées</td></tr></tbody></table>

</details>### 4- Actions sur les variables

Ces blocs agissent directement sur les variables existantes en leur appliquant une modification. Ces actions peuvent être conditionnelles ou exécutées à chaque passage du scénario.

Les blocs d’actions sur les variables permettent de modifier les valeurs utilisées dans un scénario.  
Ils sont indispensables pour gérer des états, effectuer des calculs simples et créer des logiques évoluées.   
Différents types d'actions sont disponibles :

##### 4.1- Actions variables

Ce bloc permet d**’affecter directement une valeur à une variable**.

<span style="text-decoration: underline;">Paramétrage</span> :

- Sélection de la variable
- Choix de la valeur à appliquer (valeur fixe ou issue d’une autre variable)

<span style="text-decoration: underline;">Utilisation</span> :

- Initialisation d’un état
- Changement de mode (ex : absence, présence)

##### 4.2- Valeur variables multiples

Ce bloc permet de **définir la valeur d’une variable en fonction de plusieurs entrées ou conditions**.

<span style="text-decoration: underline;">Paramétrage</span> :

- Définition des variables sources
- Règle de calcul ou de sélection de la valeur finale

<span style="text-decoration: underline;">Utilisation</span> :

- Gestion de modes complexes
- Agrégation de plusieurs états (ex : sécurité, confort, énergie)

##### 4.3- Incrémenter le compteur

Ce bloc **augmente la valeur d’une variable numérique**.

<span style="text-decoration: underline;">Paramétrage</span> :

- Sélection de la variable
- Valeur d’incrément (par défaut +1 ou personnalisée)

<span style="text-decoration: underline;">Utilisation</span> :

- Comptage d’événements (ouvertures, déclenchements)
- Suivi d’occurrences

##### 4.4- Décrémenter le compteur

Ce bloc **diminue la valeur d’une variable numérique**.

<span style="text-decoration: underline;">Paramétrage</span> :

- Sélection de la variable
- Valeur de décrément (par défaut -1 ou personnalisée)

<span style="text-decoration: underline;">Utilisation</span> :

- Gestion de temporisations logiques
- Décompte de cycles ou d’actions restantes

##### 4.5- Additionner deux variables

Ce bloc permet **d’additionner deux variables et de stocker le résultat** dans l'une d'elles.

<span style="text-decoration: underline;">Paramétrage</span> :

- Variable "source"
- Variable "cible"
- Le résultat viendra s'additionner dans la variable "cible"

<span style="text-decoration: underline;">Utilisation</span> :

- Calcul de totaux (ex : consommation cumulée)

<details id="bkmrk-rappel-des-blocs-d%27a"><summary>Rappel blocs d'action sur les VARIABLES</summary>

<table border="1" style="border-collapse: collapse; background-color: rgb(251, 238, 184); border-color: rgb(52, 73, 94); width: 100.041%; height: 311.083px;"><thead><tr style="height: 29.4583px; background-color: rgb(241, 196, 15); border-color: rgb(52, 73, 94);"><th style="border-color: rgb(52, 73, 94); width: 14.6927%; height: 29.4583px;">**Bloc**</th><th style="border-color: rgb(52, 73, 94); width: 13.8258%; height: 29.4583px;">**Type d’action**</th><th style="border-color: rgb(52, 73, 94); width: 34.0741%; height: 29.4583px;">**Principe**</th><th style="border-color: rgb(52, 73, 94); width: 37.5309%; height: 29.4583px;">**Utilisation**</th></tr></thead><tbody><tr style="height: 63.0417px;"><td style="border-color: rgb(52, 73, 94); width: 14.6927%; height: 63.0417px;">**Action variable**</td><td style="border-color: rgb(52, 73, 94); width: 13.8258%; height: 63.0417px;">Affectation</td><td style="border-color: rgb(52, 73, 94); width: 34.0741%; height: 63.0417px;">Attribue directement une valeur à une variable (fixe ou issue d’une autre variable)</td><td style="border-color: rgb(52, 73, 94); width: 37.5309%; height: 63.0417px;">Initialisation d’un état, changement de mode (présence / absence)</td></tr><tr style="height: 63.0417px;"><td style="border-color: rgb(52, 73, 94); width: 14.6927%; height: 63.0417px;">**Valeur variables multiples**</td><td style="border-color: rgb(52, 73, 94); width: 13.8258%; height: 63.0417px;">Calcul / sélection</td><td style="border-color: rgb(52, 73, 94); width: 34.0741%; height: 63.0417px;">Détermine la valeur d’une variable à partir de plusieurs sources ou conditions</td><td style="border-color: rgb(52, 73, 94); width: 37.5309%; height: 63.0417px;">Gestion de logiques complexes, combinaison de plusieurs états (sécurité, confort, énergie)</td></tr><tr style="height: 46.25px;"><td style="border-color: rgb(52, 73, 94); width: 14.6927%; height: 46.25px;">**Incrémenter le compteur**</td><td style="border-color: rgb(52, 73, 94); width: 13.8258%; height: 46.25px;">Calcul (addition)</td><td style="border-color: rgb(52, 73, 94); width: 34.0741%; height: 46.25px;">Augmente la valeur d’une variable numérique d’un pas défini</td><td style="border-color: rgb(52, 73, 94); width: 37.5309%; height: 46.25px;">Comptage d’événements, suivi d’occurrences</td></tr><tr style="height: 46.25px;"><td style="border-color: rgb(52, 73, 94); width: 14.6927%; height: 46.25px;">**Décrémenter le compteur**</td><td style="border-color: rgb(52, 73, 94); width: 13.8258%; height: 46.25px;">Calcul (soustraction)</td><td style="border-color: rgb(52, 73, 94); width: 34.0741%; height: 46.25px;">Diminue la valeur d’une variable numérique d’un pas défini</td><td style="border-color: rgb(52, 73, 94); width: 37.5309%; height: 46.25px;">Décompte, gestion de cycles restants, temporisations logiques</td></tr><tr style="height: 63.0417px;"><td style="border-color: rgb(52, 73, 94); width: 14.6927%; height: 63.0417px;">**Ajouter variable à variable**</td><td style="border-color: rgb(52, 73, 94); width: 13.8258%; height: 63.0417px;">Calcul (addition entre variables)</td><td style="border-color: rgb(52, 73, 94); width: 34.0741%; height: 63.0417px;">Additionne deux variables et stocke le résultat dans une variable cible</td><td style="border-color: rgb(52, 73, 94); width: 37.5309%; height: 63.0417px;">Calcul de totaux, cumul de consommations, agrégation de données</td></tr></tbody></table>

</details>### 5- Sauts

Les blocs de saut permettent de modifier le déroulement d’un scénario en **redirigeant l’exécution vers une autre étape**.  
Ils sont utilisés pour créer des boucles, des branchements ou des logiques dynamiques.

##### 5.1- Retour début

Ce bloc renvoie l’**exécution du scénario au bloc numéro 1**.

<span style="text-decoration: underline;">Utilisation</span> :

- Création de boucles simples
- Redémarrage complet du scénario

##### 5.2- Saut avec retour

Ce bloc permet de **sauter vers une autre étape du scénario tout en mémorisant le point de départ.**

<span style="text-decoration: underline;">Fonctionnement</span> :

- Effectue un saut vers une étape définie du scénario
- Mémorise automatiquement le point d’origine du saut
- Met le scénario en attente jusqu’à l’exécution d’un retour
- Le retour s’effectue via le bloc "Retour empilé"

<span style="text-decoration: underline;">Utilisation</span> :

- Exécution de sous-séquences dans un scénario
- Appel de blocs logiques réutilisables
- Organisation de scénarios complexes avec retour au flux principal

##### 5.3- Retour empilé

Ce bloc permet de **revenir au** **dernier point mémorisé par un bloc « saut avec retour »**.

<span style="text-decoration: underline;">Fonctionnement :</span>

- Récupère le dernier point de retour enregistré dans la pile
- Relance l’exécution du scénario à cet emplacement
- Efface l’entrée correspondante de la mémoire de retour

<span style="text-decoration: underline;">Utilisation :</span>

- Retour à la séquence principale après une sous-fonction
- Gestion de scénarios modulaires avec appels imbriqués
- Structuration de logiques complexes avec retours automatiques

##### 5.4- Saut aléatoire

Ce bloc permet de rediriger l’exécution du scénario **vers un bloc cible choisi de manière aléatoire** parmi une liste configurée.

<span style="text-decoration: underline;">Fonctionnement</span> :

- Sélectionne automatiquement un bloc de destination parmi plusieurs cibles définies
- Le choix est effectué de façon aléatoire à chaque exécution
- Le scénario est ensuite redirigé vers le bloc sélectionné

<span style="text-decoration: underline;">Utilisation</span> :

- Création de scénarios dynamiques et non prévisibles
- Simulation de comportements variables (présence, scénarios évolutifs)
- Diversification des séquences d’exécution

##### 5.5- GoTo ciblé

Ce bloc permet de **rediriger l’exécution du scénario vers un bloc précis**.

<span style="text-decoration: underline;"><span style="color: rgb(52, 73, 94); text-decoration: underline;">Fonctionnement</span></span> :

- Oriente l’exécution vers un bloc de destination défini par l’utilisateur
- La cible est sélectionnée lors du paramétrage du bloc
- Le scénario reprend directement à l’étape indiquée

<span style="text-decoration: underline;">Utilisation</span> :

- Création de branchements logiques dans un scénario
- Saut direct vers une étape spécifique
- Simplification de la navigation dans des scénarios complexes

<details id="bkmrk-blocs-de-sauts-%C2%A0"><summary>Rappel blocs de SAUTS</summary>

<table border="1" style="border-collapse: collapse; background-color: rgb(251, 238, 184); border-color: rgb(52, 73, 94); width: 100%;"><thead><tr style="background-color: rgb(241, 196, 15); border-color: rgb(52, 73, 94);"><th style="border-color: rgb(52, 73, 94); width: 13.2282%;">**Bloc**</th><th style="border-color: rgb(52, 73, 94); width: 15.0784%;">**Type d’action**</th><th style="border-color: rgb(52, 73, 94); width: 38.4425%;">**Principe**</th><th style="border-color: rgb(52, 73, 94); width: 33.3745%;">**Utilisation**</th></tr></thead><tbody><tr><td style="border-color: rgb(52, 73, 94); width: 13.2282%;">**Retour début**</td><td style="border-color: rgb(52, 73, 94); width: 15.0784%;">Boucle / réinitialisation</td><td style="border-color: rgb(52, 73, 94); width: 38.4425%;">Renvoie l’exécution du scénario au premier bloc</td><td style="border-color: rgb(52, 73, 94); width: 33.3745%;">Répétition continue, redémarrage du scénario</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 13.2282%;">**Saut avec retour**</td><td style="border-color: rgb(52, 73, 94); width: 15.0784%;">Saut avec mémorisation</td><td style="border-color: rgb(52, 73, 94); width: 38.4425%;">Redirige vers un bloc cible tout en mémorisant le point de départ</td><td style="border-color: rgb(52, 73, 94); width: 33.3745%;">Appel de sous-séquences avec retour au flux principal</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 13.2282%;">**Retour empilé**</td><td style="border-color: rgb(52, 73, 94); width: 15.0784%;">Retour de pile</td><td style="border-color: rgb(52, 73, 94); width: 38.4425%;">Revient au dernier point mémorisé par un “Saut avec retour”</td><td style="border-color: rgb(52, 73, 94); width: 33.3745%;">Retour automatique après exécution d’un sous-scenario</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 13.2282%;">**Saut aléatoire**</td><td style="border-color: rgb(52, 73, 94); width: 15.0784%;">Branchement aléatoire</td><td style="border-color: rgb(52, 73, 94); width: 38.4425%;">Redirige vers un bloc cible choisi aléatoirement parmi plusieurs</td><td style="border-color: rgb(52, 73, 94); width: 33.3745%;">Scénarios dynamiques, comportements variables</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 13.2282%;">**GoTo ciblé**</td><td style="border-color: rgb(52, 73, 94); width: 15.0784%;">Saut direct</td><td style="border-color: rgb(52, 73, 94); width: 38.4425%;">Redirige directement vers un bloc précis défini</td><td style="border-color: rgb(52, 73, 94); width: 33.3745%;">Branchements logiques et navigation dans le scénario</td></tr></tbody></table>

</details>### 6- Régulation

Ces blocs permettent de **piloter l’activation et l’arrêt d’un processus automatique de régulation** (chauffage, température, humidité ...).

##### 6.1- Démarrer la régulation

Ce bloc permet de **activer le processus de régulation** sur un équipement ou une zone définie.

##### 6.2- Arrêter la régulation

Ce bloc permet de **désactiver le processus de régulation en cours**.

<p class="callout success"><span role="text"><span style="text-decoration: underline;">Bonnes pratiques</span> :  
- </span>Toujours vérifier l’état de régulation avant activation  
- Éviter les démarrages/arrêts répétés rapides  
- Associer la régulation à des conditions claires (horaires, présence, consigne)  
- Documenter les scénarios utilisant ces blocs pour faciliter la maintenance</p>

<details id="bkmrk-rappel-des-blocs-de-"><summary>Rappel blocs de RÉGULATION</summary>

<table border="1" style="border-collapse: collapse; background-color: rgb(251, 238, 184); border-color: rgb(52, 73, 94); width: 99.9748%;"><thead><tr style="background-color: rgb(241, 196, 15); border-color: rgb(52, 73, 94);"><th style="border-color: rgb(52, 73, 94); width: 13.4771%;">**Bloc**</th><th style="border-color: rgb(52, 73, 94); width: 13.9703%;">**Type d’action**</th><th style="border-color: rgb(52, 73, 94); width: 37.836%;">**Principe**</th><th style="border-color: rgb(52, 73, 94); width: 34.8673%;">**Utilisation**</th></tr></thead><tbody><tr><td style="border-color: rgb(52, 73, 94); width: 13.4771%;">**Démarrer la régulation**</td><td style="border-color: rgb(52, 73, 94); width: 13.9703%;">Activation</td><td style="border-color: rgb(52, 73, 94); width: 37.836%;">Lance un processus automatique de régulation sur un équipement ou une zone définie</td><td style="border-color: rgb(52, 73, 94); width: 34.8673%;">Mise en service d’un chauffage, contrôle de température ou d’humidité</td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 13.4771%;">**Arrêter la régulation**</td><td style="border-color: rgb(52, 73, 94); width: 13.9703%;">Désactivation</td><td style="border-color: rgb(52, 73, 94); width: 37.836%;">Stoppe le processus de régulation en cours</td><td style="border-color: rgb(52, 73, 94); width: 34.8673%;">Arrêt manuel ou automatique d’un système de régulation</td></tr></tbody></table>

</details>### 7- Compteur

Les blocs de type compteur et temporisation **permettent de gérer des délais, des séquences temporelles et des mesures** d’événements dans un scénario.

##### 7.1- Pause

Ce bloc permet d’**interrompre temporairement l’exécution du scénario pendant une durée définie**.

<span style="text-decoration: underline;">Paramétrage</span> :

- Durée de la pause (en millisecondes)

<span style="text-decoration: underline;">Fonctionnement</span> :

- Le scénario est mis en attente pendant la durée spécifiée
- Reprise automatique à la fin du délai

<span style="text-decoration: underline;">Utilisation</span> :

- Temporisation entre deux actions
- Création de séquences différées

##### 7.2- Variable timer

Ce bloc **déclenche un changement de valeur après un délai**.

<span style="text-decoration: underline;">Paramétrage</span> :

- Sélection de la variable timer et du scénario
- Configuration de la valeur et du délai (en ms)

<span style="text-decoration: underline;">Utilisation</span> :

- Mesure de durée d’un événement
- Suivi d’un temps d’activation

##### 7.3- Test timer

Ce bloc permet de **tester la valeur d’un timer afin de conditionner le scénario**.

<span style="text-decoration: underline;">Paramétrage</span> :

- Sélection du timer
- Condition de test (supérieur, égal, inférieur à une valeur)

<span style="text-decoration: underline;">Fonctionnement</span> :

- Compare la valeur du timer à une consigne
- Oriente le scénario selon le résultat du test

<span style="text-decoration: underline;">Utilisation :</span>

- Déclenchement d’actions après un délai
- Surveillance de durées maximales

##### 7.4- Arrêter le timer

Ce bloc permet de **stopper l’évolution d’un timer actif**.

<span style="text-decoration: underline;">Paramétrage</span> :

- Sélection du timer

<span style="text-decoration: underline;">Fonctionnement</span> :

- Le comptage temporel est figé
- La valeur actuelle est conservée

<span style="text-decoration: underline;">Utilisation</span> :

- Fin de mesure de durée
- Arrêt conditionnel d’un chronométrage

##### 7.5- Réinitialiser le timer

Ce bloc permet de **remettre un timer à zéro**.

<span style="text-decoration: underline;">Paramétrage</span> :

- Sélection du timer

<span style="text-decoration: underline;">Fonctionnement</span> :

- La valeur du timer est réinitialisée
- Le timer revient à son état initial

<span style="text-decoration: underline;">Utilisation</span> :

- Réinitialisation de cycle
- Préparation à une nouvelle mesure

<p class="callout info"><span role="text"><span style="text-decoration: underline;">Bonnes pratiques</span> :  
- </span>Nommer clairement les timers selon leur fonction (ex : `Timer_Presence`, `Timer_Delai_Sortie`)  
- Éviter les démarrages multiples simultanés d’un même timer  
- Toujours réinitialiser les timers avant réutilisation dans un nouveau cycle  
- Combiner les timers avec des tests pour structurer les scénarios</p>

<details id="bkmrk-rappel-des-blocs-com"><summary>Rappel blocs COMPTEUR</summary>

<table border="1" style="width: 99.9748%; border-collapse: collapse; background-color: rgb(251, 238, 184); border-color: rgb(52, 73, 94);"><thead><tr style="background-color: rgb(241, 196, 15); border-color: rgb(52, 73, 94);"><th class="align-center" style="width: 12.6065%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">**Bloc**</span></th><th class="align-center" style="width: 13.9629%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">**Type d’action**</span></th><th class="align-center" style="width: 37.2047%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">**Principe**</span></th><th class="align-center" style="width: 36.2128%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">**Utilisation**</span></th></tr></thead><tbody><tr><td style="width: 12.6065%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">**Pause**</span></td><td style="width: 13.9629%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Temporisation</span></td><td style="width: 37.2047%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Interrompt l’exécution du scénario pendant une durée définie, puis reprend automatiquement</span></td><td style="width: 36.2128%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Création de délais entre actions, séquences différées</span></td></tr><tr><td style="width: 12.6065%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">**Variable Timer**</span></td><td style="width: 13.9629%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Mesure / temporisation</span></td><td style="width: 37.2047%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Déclenche ou met à jour une variable Timer après un délai, permettant de suivre une durée</span></td><td style="width: 36.2128%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Mesure d’un temps d’événement, suivi d’une durée d’activation</span></td></tr><tr><td style="width: 12.6065%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">**Test Timer**</span></td><td style="width: 13.9629%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Condition temporelle</span></td><td style="width: 37.2047%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Compare la valeur d’un Timer à une consigne (&gt;, &lt;, =) pour orienter le scénario</span></td><td style="width: 36.2128%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Déclenchement conditionnel basé sur un temps écoulé, contrôle de durée maximale</span></td></tr><tr><td style="width: 12.6065%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">**Arrêter le Timer**</span></td><td style="width: 13.9629%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Stop</span></td><td style="width: 37.2047%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Stoppe l’évolution d’un Timer tout en conservant sa valeur actuelle</span></td><td style="width: 36.2128%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Fin de chronométrage, gel d’une mesure en cours</span></td></tr><tr><td style="width: 12.6065%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">**Réinitialiser le Timer**</span></td><td style="width: 13.9629%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Remise à zéro</span></td><td style="width: 37.2047%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Remet un Timer à zéro et restaure son état initial</span></td><td style="width: 36.2128%; border-color: rgb(52, 73, 94);"><span style="color: rgb(52, 73, 94);">Redémarrage de cycle, préparation d’une nouvelle mesure</span></td></tr></tbody></table>

</details>### 8- Utilitaires

Les blocs utilitaires permettent d’enrichir la logique des scénarios avec des fonctions générales telles que le **repérage**, les **conditions temporelles** ou les **notifications**.   
Ils ne pilotent pas directement des équipements mais servent à structurer, informer ou conditionner le fonctionnement global.

##### 8.1- Début

Ce bloc marque le point d’entrée d’exécution du scénario lorsqu’il ne démarre pas directement au bloc n°1.

<span style="text-decoration: underline;">Fonctionnement</span> :

- Le bloc Début définit le point de départ de l’exécution du scénario
- Il est utilisé uniquement lorsque le scénario ne commence pas au bloc n°1
- Il permet de rediriger le démarrage vers un autre bloc du scénario
- En l’absence de ce bloc, l’exécution démarre automatiquement au bloc n°1

<span style="text-decoration: underline;">Utilisation</span> :

- Définition d’un point d’entrée différent du bloc initial
- Organisation de scénarios avec des débuts conditionnels ou déportés
- Adaptation de la logique d’exécution sans modifier l’ordre des blocs

##### 8.2- Label

Ce bloc permet de définir un **point de repère** dans un scénario et de **s’y rendre directement sans nécessiter de liaison physique entre les blocs**.

<span style="text-decoration: underline;">Fonctionnement</span> :

- Insère un marqueur dans le scénario
- Peut être utilisé comme destination par un saut ou un GoTo
- Permet de rediriger l’exécution vers un autre bloc sans connexion directe entre les blocs dans l’éditeur
- Sert uniquement de point d’ancrage logique

<span style="text-decoration: underline;">Utilisation</span> :

- Accès direct à une étape spécifique du scénario
- Organisation de scénarios complexes sans multiplier les liaisons graphiques
- Simplification des branchements et des redirections logiques

##### 8.3- Test heure

Ce bloc est inséré directement dans le scénario pour permettre un **déclenchement journalier à une heure définie**.

<span style="text-decoration: underline;">Principe</span> :

- Le scénario contient un bloc qui vérifie l’heure système
- Le déclenchement est basé directement sur une heure définie dans le bloc
- Il permet un déclenchement journalier simple et immédiat

<span style="text-decoration: underline;">Paramétrage</span> :

- Heure de déclenchement (horaire fixe journalier)

<span style="text-decoration: underline;">Utilisation</span> :

- Déclenchement automatique quotidien d’un scénario
- Lancement d’actions à heure fixe (éclairage, chauffage, automatisme)
- Mise en place de routines journalières

<p class="callout warning">**Test heure** : bloc intégré directement dans le scénario pour un déclenchement simple et journalier  
**Planification horaire** : logique basée sur des variables testées dans le scénario, offrant plus de flexibilité</p>

<span style="color: rgb(34, 34, 34); font-family: 'Noto Sans', sans-serif; font-size: 1.4em; font-weight: 400;">8.4- Test coucher / lever</span>

Ce bloc permet de **conditionner l’exécution d’un scénario en fonction des horaires de lever et de coucher du soleil.**

<span style="text-decoration: underline;">Fonctionnement</span> :

- Le système calcule automatiquement les heures de lever et de coucher du soleil selon la localisation (latitude et longitude)
- Permet de tester si le scénario s’exécute en période de jour ou de nuit
- Autorise un décalage (offset) par rapport aux horaires calculés

<span style="text-decoration: underline;">Paramétrage</span> :

- Latitude du site
- Longitude du site
- Offset du lever du soleil (en minutes)
- Offset du coucher du soleil (en minutes)

<span style="text-decoration: underline;">Principe des offsets</span> :

- L’offset permet de **décaler l’heure réelle du lever ou du coucher du soleil**
- Il peut être positif ou négatif selon le besoin d’anticipation ou de retard

<span style="text-decoration: underline;">Utilisation</span> :

- Activation de l’éclairage extérieur avant la nuit réelle
- Fermeture automatique après le coucher du soleil décalé
- Adaptation des scénarios au confort et aux conditions locales

##### 8.5- Envoyer un mail

Ce bloc permet d’**envoyer des notifications par e-mail** depuis un scénario.

<span style="text-decoration: underline;">Fonctionnement</span> :

- Le bloc déclenche l’envoi d’un message électronique vers une adresses définie
- L’envoi est effectué automatiquement lors de l’exécution du scénario

<span style="text-decoration: underline;">Paramétrage</span> :

- Adresse e-mail destinataire
- Sujet du message
- Contenu du message

<span style="color: rgb(0, 0, 0);">Utilisation</span> :

- Notifications d’événements (alarme, défaut, état système)
- Alertes techniques ou informatives
- Envoi de rapports ou messages automatiques

##### 8.6- Envoyer un SMS

Ce bloc permet d’**envoyer des notifications par SMS** depuis un scénario.

<span style="text-decoration: underline;">Fonctionnement</span> :

- Le bloc déclenche l’envoi d’un message SMS vers un ou plusieurs numéros de téléphone définis
- L’envoi est réalisé automatiquement lors de l’exécution du scénario

<span style="text-decoration: underline;">Paramétrage</span> :

- Numéro(s) de téléphone du destinataire
- Contenu du message

<span style="text-decoration: underline;">Utilisation</span> :

- Alertes immédiates (alarme, défaut technique, incident)
- Notifications critiques nécessitant une intervention rapide
- Information en temps réel sur l’état d’un système

<details id="bkmrk-blocs-utilitaires-bl"><summary>Rappel blocs UTILITAIRES</summary>

<table border="1" style="border-collapse: collapse; background-color: rgb(251, 238, 184); border-color: rgb(52, 73, 94); width: 100%;"><thead><tr style="background-color: rgb(241, 196, 15); border-color: rgb(52, 73, 94);"><th style="border-color: rgb(52, 73, 94); width: 11.9901%;">**<span style="color: rgb(52, 73, 94);">Bloc</span>**</th><th style="border-color: rgb(52, 73, 94); width: 13.8459%;">**<span style="color: rgb(52, 73, 94);">Type d’action</span>**</th><th style="border-color: rgb(52, 73, 94); width: 39.8005%;">**<span style="color: rgb(52, 73, 94);">Principe</span>**</th><th style="border-color: rgb(52, 73, 94); width: 34.3634%;">**<span style="color: rgb(52, 73, 94);">Utilisation</span>**</th></tr></thead><tbody><tr><td style="border-color: rgb(52, 73, 94); width: 11.9901%;"><span style="color: rgb(52, 73, 94);">**Début**</span></td><td style="border-color: rgb(52, 73, 94); width: 13.8459%;"><span style="color: rgb(52, 73, 94);">Point d’entrée</span></td><td style="border-color: rgb(52, 73, 94); width: 39.8005%;"><span style="color: rgb(52, 73, 94);">Définit le point de départ du scénario lorsqu’il ne commence pas au bloc n°1</span></td><td style="border-color: rgb(52, 73, 94); width: 34.3634%;"><span style="color: rgb(52, 73, 94);">Organisation du démarrage du scénario et redirection vers un bloc spécifique</span></td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 11.9901%;"><span style="color: rgb(52, 73, 94);">**Label**</span></td><td style="border-color: rgb(52, 73, 94); width: 13.8459%;"><span style="color: rgb(52, 73, 94);">Repère / saut</span></td><td style="border-color: rgb(52, 73, 94); width: 39.8005%;"><span style="color: rgb(52, 73, 94);">Définit un point de repère permettant de sauter directement vers un bloc sans liaison physique</span></td><td style="border-color: rgb(52, 73, 94); width: 34.3634%;"><span style="color: rgb(52, 73, 94);">Simplification des scénarios et accès direct à une étape donnée</span></td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 11.9901%;"><span style="color: rgb(52, 73, 94);">**Test heure**</span></td><td style="border-color: rgb(52, 73, 94); width: 13.8459%;"><span style="color: rgb(52, 73, 94);">Condition horaire</span></td><td style="border-color: rgb(52, 73, 94); width: 39.8005%;"><span style="color: rgb(52, 73, 94);">Déclenche ou conditionne un scénario à une heure définie (journalier)</span></td><td style="border-color: rgb(52, 73, 94); width: 34.3634%;"><span style="color: rgb(52, 73, 94);">Automatisation quotidienne à heure fixe</span></td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 11.9901%;"><span style="color: rgb(52, 73, 94);">**Test coucher / lever**</span></td><td style="border-color: rgb(52, 73, 94); width: 13.8459%;"><span style="color: rgb(52, 73, 94);">Condition astronomique</span></td><td style="border-color: rgb(52, 73, 94); width: 39.8005%;"><span style="color: rgb(52, 73, 94);">Compare l’exécution du scénario aux heures de lever et coucher du soleil avec offsets</span></td><td style="border-color: rgb(52, 73, 94); width: 34.3634%;"><span style="color: rgb(52, 73, 94);">Gestion jour/nuit, éclairage extérieur, scénarios liés à la luminosité</span></td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 11.9901%;"><span style="color: rgb(52, 73, 94);">**Envoyer** </span>

<span style="color: rgb(52, 73, 94);">**un mail**</span>

</td><td style="border-color: rgb(52, 73, 94); width: 13.8459%;"><span style="color: rgb(52, 73, 94);">Notification</span></td><td style="border-color: rgb(52, 73, 94); width: 39.8005%;"><span style="color: rgb(52, 73, 94);">Envoie un e-mail avec destinataire, sujet et contenu</span></td><td style="border-color: rgb(52, 73, 94); width: 34.3634%;"><span style="color: rgb(52, 73, 94);">Alertes, notifications, rapports automatiques</span></td></tr><tr><td style="border-color: rgb(52, 73, 94); width: 11.9901%;"><span style="color: rgb(52, 73, 94);">**Envoyer** </span>

<span style="color: rgb(52, 73, 94);">**un SMS**</span>

</td><td style="border-color: rgb(52, 73, 94); width: 13.8459%;"><span style="color: rgb(52, 73, 94);">Notification</span></td><td style="border-color: rgb(52, 73, 94); width: 39.8005%;"><span style="color: rgb(52, 73, 94);">Envoie un SMS vers un ou plusieurs numéros avec un message défini</span></td><td style="border-color: rgb(52, 73, 94); width: 34.3634%;"><span style="color: rgb(52, 73, 94);">Alertes urgentes et notifications en temps réel</span></td></tr></tbody></table>

</details>[![image.png](https://modlink.fr/help/uploads/images/gallery/2026-06/scaled-1680-/image.png)](https://modlink.fr/help/uploads/images/gallery/2026-06/image.png)

# Scénarios modèles

Contrairement aux scénarios préconfigurés qui sont installés par défaut sur le module et peuvent être utilisés immédiatement, les **scénarios modèles** doivent être téléchargés depuis le serveur distant ModLink.  
Une fois importés sur le module, un scénario modèle peut être utilisé tel quel ou bien modifié afin de répondre aux besoins spécifiques de l'installation.

Les scénarios modèles couvrent les **cas d'usage les plus courants** et constituent une solution rapide pour tester les entrées/sorties (I/O), les relais ou certaines fonctions du système.   
Ils intègrent déjà les variables, les widgets et la logique de fonctionnement nécessaires, ce qui permet une **mise en œuvre rapide** sans avoir à créer un scénario à partir de zéro.  
Ils représentent également un excellent support d'apprentissage pour découvrir l'environnement ModLink, comprendre la structure d'un scénario et se familiariser avec les différents blocs de fonction disponibles.

<p class="callout info"><span style="text-decoration: underline;">Objectif des scénarios modèles</span> :  
- Vérifier le bon câblage des entrées et des sorties  
- Tester le fonctionnement des relais  
- Valider la communication entre les modules  
- Faciliter la mise en service</p>

## 1. Scénarios modèles disponibles

Les scénarios préconfigurés sont fournis afin de simplifier la mise en service, les tests fonctionnels et le diagnostic des modules.  
Ils couvrent les cas d’usage standards liés aux entrées, aux relais et à la connectivité.

### 1.1- Scénario variables

<p class="callout success">**Usage :** - ???</p>

### 1.2- Scénario ouvrant

<p class="callout success">**Usage :** - ???</p>

### 1.3- Scénario Test

<p class="callout success">**Usage :** - ???</p>


### 2. Importer un scénario modèle

1. **Accéder au menu Scénario**  
    Depuis l’interface, ouvrez le menu Scénario
2. Importer un scénario  
    Cliquez sur **Importer un scénario**, puis sélectionnez **Import distant**
3. Sélectionner le type d'import  
    Choisissez import local ou import distant
4. Sélectionner le scénario à importer dans la liste des scénarios modèles disponibles
5. Choisir la destination
    
    
    - **Remplacer** : remplace un scénario existant du module
    - **Créer** : génère un nouveau scénario sans affecter les existants
6. Finaliser l’importation  
    Cliquez sur **Importer** pour charger le scénario dans votre interface

Un redémarrage du système est nécessaire afin de prendre en compte la mise à jour du scénario.

Après redémarrage :

- le scénario apparaît dans le bandeau latéral situé à gauche de l’écran,
- les variables, blocs de fonction et widgets associés sont automatiquement disponibles.

<p class="callout info">**Avantages d'un scénario modèle :** - Mise en place immédiate  
- Logique déjà validée  
- Réduction du risque d’erreur</p>

### 3- Modifier un scénario modèle

- Dupliquer un scénario modèle pour créer un scénario personnalisé
- Permet d’adapter la logique aux besoins spécifiques de l’application
- **Modifications courantes :**
    
    
    - Ajout de temporisation ou délai anti-rebond
    - Inversion logique (1 → OFF, 0 → ON)
    - Ajout de conditions supplémentaires (ex. seuils, état réseau, watchdog)

# Créer un scénario personnalisé***

<p class="callout info"><span role="text">Pour créer ou modifier des scénarios, il est **recommandé d’utiliser un ordinateur**.  
*L’édition sur téléphone peut entraîner des problèmes d’affichage ou une visibilité limitée des paramètres avancés*</span></p>

### 1- Généralités

Les scénarios personnalisés permettent d'adapter le fonctionnement du module à des besoins spécifiques qui ne sont pas couverts par les scénarios préconfigurés ou les scénarios modèles.   
Ils offrent une grande souplesse pour automatiser des actions en fonction d'événements, de mesures, d'états ou de conditions définies par l'utilisateur.

<p class="callout warning">**Prérequis** pour la **création d'un scénario** personnalisé :  
- Disposer des **droits d'accès** nécessaires  
- Définir toutes les **variables associées**  
- Insérer et connecter les **blocs fonctionnels** (test, compteurs, sorties, régulation, utilitaires ...)  
- Vérifier que le scénario forme une **boucle fonctionnelle** complète</p>

<section class="docs-section svelte-oa2hur" id="bkmrk-1.-pr%C3%A9parer-un-sc%C3%A9na">### 1. Préparer le scénario

Pour créer un scénario personnalisé, il n'est pas nécessaire de partir de zéro. Un scénario préconfiguré ou un scénario modèle importé peut servir de base de travail. Il suffit alors de modifier les paramètres, les conditions ou les actions existantes afin d'adapter le fonctionnement aux besoins spécifiques de l'installation. Cette méthode facilite la prise en main et accélère la création de nouveaux scénarios.

- Depuis l'accueil, ouvrez un scénario préconfiguré ou bien importez un scénario modèle
- Assurez-vous que les **objets nécessaires** sont déjà configurés dans la section Objet
- Vérifiez que les **variables associées** sont publiées pour le scénario

ou bien pour créer un nouveau scénario :

- choisissez le menu « **Scénarios** » dans la barre de menus située en haut de l'interface
- puis dans le bandeau de gauche, cliquez sur "**nouveau scénario**" puis sur "éditer" pour commencer

</section><section class="docs-section svelte-oa2hur" id="bkmrk-2.-construire-le-flu">#### 1.2- Construire le flux

Créez la logique de votre scénario en utilisant les blocs de fonction disponibles dans la barre latérale :

- **Glissez-déposez** les blocs pour construire votre logique
- **Reliez les blocs** en respectant les limites de connexion propres à chacun
- Utilisez des **blocs de test** pour créer des conditions et des embranchements clairs
- Ajoutez des **commentaires** dans les champs prévus afin de faciliter la maintenance et la compréhension du scénario

</section>#### 1.3- Utiliser les blocs de fonction :

##### 1.3.1- Déclencheurs

Les déclencheurs déterminent quand le scénario est exécuté.

<span style="text-decoration: underline;">Exemples</span> :

- Changement d'état d'une entrée
- Valeur d'une mesure
- Horaire ou calendrier
- Modification d'une variable

##### 1.3.2- Conditions

Les conditions permettent de vérifier qu'un ou plusieurs critères sont respectés avant l'exécution des actions.

<span style="text-decoration: underline;">Exemples</span> :

- Température supérieure à une valeur définie
- Sortie inactive
- Plage horaire spécifique

##### 1.3.3- Tests

Les tests remplacent la notion de "trigger", ils peuvent porter sur :

- les variables locales,
- les variables distantes (autres modules),
- les états des entrées
- les états des sorties

##### 1.3.4- Actions

Les actions définissent les opérations à exécuter lorsque les conditions sont remplies.

<span style="color: rgb(0, 0, 0);">Exemples</span> :

- la commande de sorties
- l'écriture de variables
- l'envoi d'email et / ou SMS
- la modification d'états utilisateurs

### <span role="text">2. Accéder au menu "scénario"</span>

#### 2.1- Sélectionner le type de bloc  


Dans la barre latérale, repérez les blocs qui correspondent aux actions que vous voulez effectuer :

##### <span role="text" style="background-color: rgb(241, 196, 15);">Insérer un bloc "Test d’entrée"</span>

Ces blocs permettent de vérifier l'état d'une entrée (par exemple un capteur, un interrupteur, un bouton ...).  
Ils agissent alors comme un filtre dans votre scénario. Tout ce qui suit ne se déclenche que si la condition définie est remplie.  
Choisissez parmi :

- un **appui** (simple, double, long…),
- un **test d’état**,
- un **test de changement d’état ...**

##### <span role="text" style="background-color: rgb(241, 196, 15);">Ajouter un bloc de condition "Test variables"</span>

Les blocs de conditions permettent de vérifier des états et de contrôler la logique du scénario avant d’exécuter une action.

**Types de blocs de test de variables :**

- **Test variable simple** : vérifie la valeur actuelle d’une variable,
- **Test changement de variable** : détecte si une variable a changé depuis la dernière lecture,
- **Test variable égale** : compare la valeur d’une variable à une valeur précise

**Pour chaque bloc de condition :**

- Sélectionnez le type de test adapté,
- Renseignez les paramètres nécessaires (variable à tester, valeur cible, etc.),
- Donnez un **nom** et un **descriptif** au bloc,
- Reliez-le aux blocs précédents via les **points de connexion (ronds rouges)**.

💡 Astuce : Les blocs de conditions peuvent avoir plusieurs sorties pour gérer différents chemins selon le résultat du test.

##### <span role="text" style="background-color: rgb(241, 196, 15);">Ajouter un bloc de sortie "Contact sortie"</span>

Les blocs de sortie définissent l’action finale ou le résultat du scénario.

**Types de sortie disponibles :**

- **On / Off / Flip** : activation, désactivation ou inversion de l’état d’un module,
- **Impulsion cyclique** : envoie des impulsions répétées selon un intervalle défini,
- **On / Off après temporisation** : déclenche une action avec délai,
- **BSO** : contrôle des brise-soleil orientables,
- **Ouvrant** : commande d’ouverture ou de fermeture d’un ouvrant (volet, porte, fenêtre)

**Pour chaque bloc de sortie :**

- Sélectionnez le type de sortie,
- Renseignez les paramètres spécifiques,
- Donnez un **nom** et un **descriptif**,
- Reliez-le aux blocs précédents via les **points de connexion (ronds rouges)**.

💡 Astuce : Plusieurs blocs de sortie peuvent être utilisés pour des actions différentes selon les conditions

##### <span role="text" style="background-color: rgb(241, 196, 15);">Ajouter des blocs d’action sur les variables</span>

Ces blocs permettent de modifier ou de suivre des variables dans votre scénario.

**Types de blocs d’action sur les variables :**

- **Action variable** : modifier la valeur d’une variable,
- **Incrémenter un compteur** : augmenter la valeur d’une variable compteur,
- **Décrémenter un compteur** : diminuer la valeur d’une variable compteur.

**Pour chaque bloc d’action :**

- Sélectionnez le type d’action,
- Renseignez la variable concernée et la valeur ou l’incrément/décrément,
- Donnez un **nom** et un **descriptif**,
- Reliez-le aux blocs précédents via les **points de connexion (ronds rouges)**.

##### <span role="text" style="background-color: rgb(241, 196, 15);">Ajouter des blocs de régulation du chauffage</span>

Ces blocs permettent de piloter et réguler le chauffage dans un scénario.

**Types de blocs de régulation :**

- **Régulation température consigne** : ajuste la température cible d’une zone,
- **Mode chauffage / arrêt** : active ou désactive le chauffage,
- **Mode confort / éco / hors gel** : sélectionne un programme prédéfini selon les besoins,
- **Pilotage via capteur** : ajuste le chauffage en fonction de la température mesurée, de l’occupation ou d’autres variables.

**Pour chaque bloc de régulation :**

- Sélectionnez le type de régulation,
- Renseignez les paramètres nécessaires (zone, consigne, capteur),
- Donnez un **nom** et un **descriptif**,
- Reliez-le aux blocs précédents via les **points de connexion (ronds rouges)**.


#### 2.2- Insérer et organiser

\- attrapez les différents blocs depuis le bandeau latéral  
\- faites-les glisser vers l’espace de travail dédié et placez-les à l’endroit souhaité

#### 2.3- Configurer les blocs

Renseignez les paramètres suivants :  
*- Nom du bloc (*  
*- Descriptif*  
*- Choix de l'entrée / sortie à tester*  
*- Module associé*  
*- Scénario*  
*- Définissez la condition : par exemple `ON`, `OFF`, ou autre état spécifique selon votre matériel*  
\- *Condition par défaut si tout est faux*

#### 2.4- Effectuer les connexions

\- reliez les blocs entre eux pour définir la logique de fonctionnement du scénario, identifier les points de connexion   
 (ronds de couleur) - chaque bloc possède des entrées et des sorties   
\- Relier les blocs entre eux  
  Cliquez sur la sortie d’un bloc et faites glisser vers l’entrée du bloc suivant.  
 Reliez la sortie du bloc aux actions à exécuter si la condition est vraie et éventuellement à une autre sortie si la  
 condition est fausse  
\- Vérifier la logique  
 Assurez-vous que le flux respecte la séquence souhaitée et que tous les blocs nécessaires sont connectés

#### 2.5- Tester le scénario

Une fois les connexions effectuées, lancez une simulation ou un test pour vérifier que le scénario fonctionne correctement (un redémarrage du module est nécessaire)

<p class="callout info">Disposez les blocs de manière **ordonnée** pour que le f**lux reste clair et lisible** *cela facilitera la compréhension et la maintenance du scénario*</p>

### <span role="text">8. Ajouter des sauts</span>

Les blocs de saut permettent de rediriger le flux du scénario vers un autre bloc, sans exécuter la séquence linéaire.

- Placez le bloc exactement à l’endroit où vous souhaitez insérer le "saut",
- Reliez-le au bloc de départ via les **ronds rouges**,
- Vérifiez que le saut ne crée pas de boucle infinie

### <span role="text">9. Construire la logique du scénario</span>

- Faites glisser les **blocs de fonctions** depuis la barre latérale gauche pour compléter votre scénario,
- Renseignez les paramètres de chaque bloc,
- Reliez tous les blocs entre eux via les **points de connexion (ronds rouges)**,
- Vérifiez que la logique est cohérente et complète

### <span role="text">10. Finaliser et tester</span>

- Vérifiez tous les paramètres et liaisons,
- Sauvegardez votre scénario pour qu’il soit actif,
- Testez-le pour vous assurer que le fonctionnement correspond à vos attentes


#### Programmation par boucles

<p class="callout success">Chaque scénario doit former une **boucle fonctionnelle complète** :  
<span style="color: rgb(22, 145, 121);">**entrée → test / logique → sortie / action → mise à jour variable d’état**</span></p>

Il est impératif de **refermer** la boucle fonctionnelle : toute commande générée par un bloc de sortie doit avoir un impact sur un état ou une variable réutilisable par un bloc d’entrée, garantissant ainsi un fonctionnement cohérent du scénario.  
Un scénario est structuré sous forme de **<span style="mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast;">boucles logiques</span>** :

1. Entrée dans une boucle
2. Tests (servant de déclencheurs)
3. Tests de conditions
4. <span style="text-indent: -18pt;">Actions</span>
5. <span style="text-indent: -18pt;">Retour  
    - </span><span style="text-indent: -18pt;">dans la même boucle  
    - d</span><span style="text-indent: -18pt;">ans une autre boucle</span>

---

<p class="callout warning">Avant de commencer un scénario, assurez-vous que :  
- les **objets nécessaires** sont correctement configurés dans la section « Objets »  
- les **variables associées** sont bien publiées et disponibles pour le scénario</p>

Pour construire un scénario, **attrapez les blocs disponibles dans le bandeau latéral**, puis **faites-les glisser vers l’espace de travail dédié** afin de les déposer et les organiser selon la logique souhaitée.

Vous pouvez ensuite les positionner et les relier entre eux pour définir le fonctionnement du scénario.

<section class="docs-section svelte-oa2hur" id="bkmrk-1.-pr%C3%A9parer-un-sc%C3%A9na-2">### 1. Préparer un scénario

- Depuis l'accueil, ouvrez un scénario existant ou créez-en un nouveau
- Assurez-vous que les **objets nécessaires** sont déjà configurés dans la section Objet
- Vérifiez que les **variables associées** sont publiées pour le scénario

</section><section class="docs-section svelte-oa2hur" id="bkmrk-2.-construire-le-flu-2">### 2. Construire le flux

Créez la logique de votre scénario en utilisant les blocs disponibles dans la barre latérale :

- **Glissez-déposez** les blocs pour construire votre logique
- **Reliez les blocs** en respectant les limites de connexion propres à chacun
- Utilisez des **blocs de test** pour créer des conditions et des embranchements clairs
- Ajoutez des **commentaires** dans les champs prévus afin de faciliter la maintenance et la compréhension du scénario

### <span role="text">3. Enregistrer et déployer</span>

Une fois le scénario configuré :

- **Sauvegardez** le scénario depuis la barre latérale afin de générer la version compilée
- **Redémarrez le module pour synchroniser** les scénarios et appliquer les modifications
- **Testez** le comportement via les widgets ou les entrées physiques reliées

<p class="callout info">**Un **redémarrage**** du module est nécessaire pour appliquer un nouveau scénario</p>

</section><section class="docs-section svelte-oa2hur" id="bkmrk-4.-bonnes-pratiques-">### 4. Bonnes pratiques

- Renommez les blocs avec des noms explicites pour accélérer les revues
- Utilisez les scénarios de test pour valider les flux avant mise en production
- Gardez un scénario de réserve pour les actions critiques afin d'éviter l'indisponibilité


---

### <span style="background-color: rgb(249, 239, 121);">3- Créer un scénario personnalisé ???</span>

- L’utilisateur définit **toutes les variables, blocs et connexions**.
- Nécessite de :
    
    
    - Définir les variables
    - Insérer et connecter les blocs fonctionnels (tests, compteurs, régulation, utilitaires, sorties)
    - Vérifier que le scénario forme une boucle complète pour garantir son fonctionnement

1. Cliquer sur "Nouveau scénario" dans le bandeau latéral à la droite de l'écran
2. 

#### 3.1- Sauvegarder un scénario

- Depuis un serveur distant  
    Bibliothèque de scénarios disponible depuis le serveur de ModLink.  
    Il faudra adapter et personnaliser les paramètres à la configuration de l'installation.
- En local depuis l'ordinateur utilisé

<p class="callout info">La **barre d’icônes de visualisation** affichée sur la droite de l'écran permet de :  
- agrandir la vue  
- réduire la vue  
- recentrer l’affichage sur la zone des blocs scénario  
- verrouiller et déverrouiller les blocs  
- réinitialiser l'édition de blocs</p>


---

</section>### <span role="text">2. Accéder au menu "scénario"</span>

Sélectionnez le menu « **Scénarios** » dans la barre de menus située en haut de l'interface.  
Dans le bandeau de gauche, cliquez sur **« Nouveau scénario »**, puis sur **« Éditer »** pour commencer.

#### 2.1- Sélectionner le type de bloc  


Dans la barre latérale, repérez les blocs qui correspondent aux actions que vous voulez effectuer :

##### <span role="text" style="background-color: rgb(241, 196, 15);">Insérer un bloc "Test d’entrée"</span>

Ces blocs permettent de vérifier l'état d'une entrée (par exemple un capteur, un interrupteur, un bouton ...).  
Ils agissent alors comme un filtre dans votre scénario. Tout ce qui suit ne se déclenche que si la condition définie est remplie.  
Choisissez parmi :

- un **appui** (simple, double, long…),
- un **test d’état**,
- un **test de changement d’état ...**

##### <span role="text" style="background-color: rgb(241, 196, 15);">Ajouter un bloc de condition "Test variables"</span>

Les blocs de conditions permettent de vérifier des états et de contrôler la logique du scénario avant d’exécuter une action.

**Types de blocs de test de variables :**

- **Test variable simple** : vérifie la valeur actuelle d’une variable,
- **Test changement de variable** : détecte si une variable a changé depuis la dernière lecture,
- **Test variable égale** : compare la valeur d’une variable à une valeur précise

**Pour chaque bloc de condition :**

- Sélectionnez le type de test adapté,
- Renseignez les paramètres nécessaires (variable à tester, valeur cible, etc.),
- Donnez un **nom** et un **descriptif** au bloc,
- Reliez-le aux blocs précédents via les **points de connexion (ronds rouges)**.

💡 Astuce : Les blocs de conditions peuvent avoir plusieurs sorties pour gérer différents chemins selon le résultat du test.

##### <span role="text" style="background-color: rgb(241, 196, 15);">Ajouter un bloc de sortie "Contact sortie"</span>

Les blocs de sortie définissent l’action finale ou le résultat du scénario.

**Types de sortie disponibles :**

- **On / Off / Flip** : activation, désactivation ou inversion de l’état d’un module,
- **Impulsion cyclique** : envoie des impulsions répétées selon un intervalle défini,
- **On / Off après temporisation** : déclenche une action avec délai,
- **BSO** : contrôle des brise-soleil orientables,
- **Ouvrant** : commande d’ouverture ou de fermeture d’un ouvrant (volet, porte, fenêtre)

**Pour chaque bloc de sortie :**

- Sélectionnez le type de sortie,
- Renseignez les paramètres spécifiques,
- Donnez un **nom** et un **descriptif**,
- Reliez-le aux blocs précédents via les **points de connexion (ronds rouges)**.

💡 Astuce : Plusieurs blocs de sortie peuvent être utilisés pour des actions différentes selon les conditions

##### <span role="text" style="background-color: rgb(241, 196, 15);">Ajouter des blocs d’action sur les variables</span>

Ces blocs permettent de modifier ou de suivre des variables dans votre scénario.

**Types de blocs d’action sur les variables :**

- **Action variable** : modifier la valeur d’une variable,
- **Incrémenter un compteur** : augmenter la valeur d’une variable compteur,
- **Décrémenter un compteur** : diminuer la valeur d’une variable compteur.

**Pour chaque bloc d’action :**

- Sélectionnez le type d’action,
- Renseignez la variable concernée et la valeur ou l’incrément/décrément,
- Donnez un **nom** et un **descriptif**,
- Reliez-le aux blocs précédents via les **points de connexion (ronds rouges)**.

##### <span role="text" style="background-color: rgb(241, 196, 15);">Ajouter des blocs de régulation du chauffage</span>

Ces blocs permettent de piloter et réguler le chauffage dans un scénario.

**Types de blocs de régulation :**

- **Régulation température consigne** : ajuste la température cible d’une zone,
- **Mode chauffage / arrêt** : active ou désactive le chauffage,
- **Mode confort / éco / hors gel** : sélectionne un programme prédéfini selon les besoins,
- **Pilotage via capteur** : ajuste le chauffage en fonction de la température mesurée, de l’occupation ou d’autres variables.

**Pour chaque bloc de régulation :**

- Sélectionnez le type de régulation,
- Renseignez les paramètres nécessaires (zone, consigne, capteur),
- Donnez un **nom** et un **descriptif**,
- Reliez-le aux blocs précédents via les **points de connexion (ronds rouges)**.


#### 2.2- Insérer et organiser

\- attrapez les différents blocs depuis le bandeau latéral  
\- faites-les glisser vers l’espace de travail dédié et placez-les à l’endroit souhaité

#### 2.3- Configurer les blocs

Renseignez les paramètres suivants :  
*- Nom du bloc (*  
*- Descriptif*  
*- Choix de l'entrée / sortie à tester*  
*- Module associé*  
*- Scénario*  
*- Définissez la condition : par exemple `ON`, `OFF`, ou autre état spécifique selon votre matériel*  
\- *Condition par défaut si tout est faux*

#### 2.4- Effectuer les connexions

\- reliez les blocs entre eux pour définir la logique de fonctionnement du scénario, identifier les points de connexion   
 (ronds de couleur) - chaque bloc possède des entrées et des sorties   
\- Relier les blocs entre eux  
  Cliquez sur la sortie d’un bloc et faites glisser vers l’entrée du bloc suivant.  
 Reliez la sortie du bloc aux actions à exécuter si la condition est vraie et éventuellement à une autre sortie si la  
 condition est fausse  
\- Vérifier la logique  
 Assurez-vous que le flux respecte la séquence souhaitée et que tous les blocs nécessaires sont connectés

#### 2.5- Tester le scénario

Une fois les connexions effectuées, lancez une simulation ou un test pour vérifier que le scénario fonctionne correctement (un redémarrage du module est nécessaire)

<p class="callout info">Disposez les blocs de manière **ordonnée** pour que le f**lux reste clair et lisible** *cela facilitera la compréhension et la maintenance du scénario*</p>

### <span role="text">8. Ajouter des sauts</span>

Les blocs de saut permettent de rediriger le flux du scénario vers un autre bloc, sans exécuter la séquence linéaire.

- Placez le bloc exactement à l’endroit où vous souhaitez insérer le "saut",
- Reliez-le au bloc de départ via les **ronds rouges**,
- Vérifiez que le saut ne crée pas de boucle infinie

### <span role="text">9. Construire la logique du scénario</span>

- Faites glisser les **blocs de fonctions** depuis la barre latérale gauche pour compléter votre scénario,
- Renseignez les paramètres de chaque bloc,
- Reliez tous les blocs entre eux via les **points de connexion (ronds rouges)**,
- Vérifiez que la logique est cohérente et complète

### <span role="text">10. Finaliser et tester</span>

- Vérifiez tous les paramètres et liaisons,
- Sauvegardez votre scénario pour qu’il soit actif,
- Testez-le pour vous assurer que le fonctionnement correspond à vos attentes

[![Scenario2.png](https://modlink.fr/help/uploads/images/gallery/2026-02/scaled-1680-/scenario2.png)](https://modlink.fr/help/uploads/images/gallery/2026-02/scenario2.png)

# Timers

Les **timers ou temporisations** permettent de gérer le temps dans les scénarios et d’automatiser des actions avec des délais, des durées ou des répétitions.

#### 1- Temporisation avant action

Permet de déclencher une action après un délai défini.  
👉 Exemple : allumer une lumière 30 secondes après la détection de mouvement.

#### 2- Temporisation cyclique (répétition)

Exécute une action à intervalles réguliers.  
👉 Exemple : envoyer une information toutes les 5 minutes.

#### 3- Durée d’état (maintien)

Maintient une sortie active pendant une durée donnée, puis revient à l’état initial.  
👉 Exemple : activer un relais pendant 10 secondes.

#### 4- Retard à l’arrêt / à l’enclenchement

- **Retard à l’enclenchement** : l’action ne démarre que si la condition reste vraie pendant un certain temps.
- **Retard à l’arrêt** : l’action reste active encore un moment après la disparition de la condition.  
    👉 Exemple : éviter les déclenchements intempestifs d’un capteur.

<p class="callout success"><span style="text-decoration: underline;">Bonnes pratiques</span> :  
- Utiliser les timers pour **stabiliser les événements** (anti-rebond, filtrage)  
- Nommer clairement les temporisations pour faciliter la maintenance  
- Adapter les durées selon l’usage réel (confort, sécurité, économie d’énergie)</p>

### Gestion des timers dans les scénarios

Les scénarios permettent l’utilisation de **10 créneaux de temporisation (timers)** maximum par scénario. Ces timers servent à exécuter des actions à intervalles réguliers ou différés.

---

#### 1. Principe général

Chaque timer est associé à une exécution automatique basée sur un intervalle de temps.  
Il permet de déclencher une **étape cible du scénario** de manière répétitive ou temporisée.

#### 2. Paramétrage d’un timer

Pour chaque timer disponible, l’installateur doit configurer les trois éléments suivants :

##### Nom du timer

Champ libre permettant d’identifier le timer dans le scénario.  
Il est recommandé d’utiliser un nom explicite lié à la fonction.

**Exemples :**

- Surveillance chauffage
- Relance éclairage
- Contrôle présence

##### Intervalle (secondes)

Définit la périodicité d’exécution du timer.

- Unité : secondes
- Valeur : entière positive
- Le timer se déclenche à chaque intervalle écoulé

**Exemples :**

- 10 → exécution toutes les 10 secondes
- 60 → exécution toutes les minutes

##### Étape cible

Correspond à l’étape du scénario exécutée lors du déclenchement du timer.

Cette étape peut être :

- une action
- un test logique
- une séquence de blocs

## 3. Fonctionnement

Une fois activé dans le scénario :

- le timer démarre automatiquement selon sa configuration
- à chaque échéance, il exécute l’étape cible définie
- plusieurs timers peuvent fonctionner simultanément dans un même scénario

<p class="callout success"><span style="text-decoration: underline;">Bonnes pratiques</span> :  
- Donner des **noms explicites** à chaque timer pour faciliter le débogage  
- Limiter les intervalles très courts afin d’éviter une surcharge de traitement  
- Bien associer chaque timer à une étape précise pour garder un scénario lisible  
- Eviter les doublons de timers pour des fonctions identiques</p>

# Scénarios modèles*** (vérif si utilisé)

<p class="callout info">Les **scénarios modèles** couvrent les cas d'usages les plus courants, ce sont des outils rapides et fiables pour tester les I/O et les relais.  
Ils permettent de tester rapidement le fonctionnement du système sans avoir à créer une logique de commande complète.  
Ces scénarios **peuvent être utilisés tels quels,** **ou bien modifiés** pour réponde à des besoins spécifiques.</p>

## 1. Scénarios modèles disponibles

Les scénarios modèles sont fournis afin de simplifier la mise en service, les tests fonctionnels et le diagnostic des modules.  
Ils couvrent les cas d’usage standards liés aux entrées, aux relais et à la connectivité.

## 1.1 Test des entrées (Inputs)

### Lecture d’entrée

- Surveillance de l’état d’une entrée digitale
- Affichage temps réel de l’état (0 / 1)
- Historisation des changements d’état

<p class="callout success">**Usage :** - Validation du câblage  
- Test capteur, bouton, contact sec</p>

## 1.2 Test des relais (Outputs)

### Commande manuelle de relais

- Activation / désactivation manuelle d’un relais
- Commande depuis l’interface

<p class="callout success">**Usage :** - Test du relais  
- Validation actionneur (lampe, moteur, contacteur)</p>

### Commande temporisée de relais

- Activation du relais pendant une durée définie
- Retour automatique à l’état OFF

<p class="callout success">**Usage :** - Test de temporisation  
- Simulation d’impulsion</p>

## 1.3 Test Entrée → Relais (I/O binding)

### Entrée digitale → relais (mode suivi)

**Scénario standard**

- Entrée = 1 → relais ON
- Entrée = 0 → relais OFF

<p class="callout success">**Usage :** - Test complet DI/DO  
- Validation bout-en-bout  
- Commissioning</p>

### Entrée digitale → relais (logique inversée)

- Entrée = 1 → relais OFF
- Entrée = 0 → relais ON

<p class="callout success">**Usage :** - Cas de sécurité  
- Adaptation logique terrain</p>

## 1.4 Scénarios conditionnels

### Seuil sur entrée analogique

- Si valeur &gt; seuil → activer relais
- Si valeur &lt; seuil → désactiver relais

<p class="callout success">**Usage :** - Alarmes  
- Régulation simple</p>

### Entrée → relais avec temporisation

- Entrée = 1
- Délai configurable
- Activation relais

<p class="callout success">**Usage :** - Anti-rebond  
- Séquencement simple</p>

## 1.5 Scénarios de connectivité et supervision

### Test de connectivité réseau

- Vérification connexion Wi-Fi / Ethernet
- Test ping ou heartbeat
- Remontée état connecté / déconnecté

<p class="callout success">**Usage :** - Diagnostic réseau  
- Validation accès plateforme</p>

### Heartbeat / watchdog

- Envoi périodique d’un message de vie
- Mise en sécurité du relais en cas de perte de communication

<p class="callout success">**Usage :** - Sécurité  
- Supervision industrielle</p>