# Mini-tuto Sun-Position Nore-red Mqtt pour piloter les volets en fonction de la position du soleil et des mois

**URL:** <https://community.gladysassistant.com/t/mini-tuto-sun-position-nore-red-mqtt-pour-piloter-les-volets-en-fonction-de-la-position-du-soleil-et-des-mois/8028>\
**Category:** Tutoriels\
**Tags:** mqtt, node-red\
**Created:** [Mars 19, 2023, 5:23 UTC](https://community.gladysassistant.com/t/mini-tuto-sun-position-nore-red-mqtt-pour-piloter-les-volets-en-fonction-de-la-position-du-soleil-et-des-mois/8028 "2023-03-19T17:23:21Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![cce66](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/c/8797f3/32.png) [@cce66](https://community.gladysassistant.com/u/cce66)\
**Post date:** [Mars 19, 2023, 5:23 UTC](https://community.gladysassistant.com/t/mini-tuto-sun-position-nore-red-mqtt-pour-piloter-les-volets-en-fonction-de-la-position-du-soleil-et-des-mois/8028/1 "2023-03-19T17:23:21Z")

</div>

Bonjour,

Voici un flow node-red pour injecter la position du soleil dans Gladys via Node-red (azimuth et altitude)

```auto
[
    {
        "id": "dbd46647b51191ed",
        "type": "tab",
        "label": "Sun-Position",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "a0d0e562.7ad1d8",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "debug 1",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 720,
        "y": 180,
        "wires": []
    },
    {
        "id": "9cc2d51.4ac0828",
        "type": "change",
        "z": "dbd46647b51191ed",
        "name": "azimuth",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.azimuth",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "gladys/master/device/mqtt:soleil/feature/mqtt:azimuth/state",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 720,
        "y": 240,
        "wires": [
            [
                "0a17f9d94c9dae35",
                "ddf8b5e66052a4dc"
            ]
        ]
    },
    {
        "id": "28e91.9d63d16f6",
        "type": "change",
        "z": "dbd46647b51191ed",
        "name": "altitude",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.altitude",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "gladys/master/device/mqtt:soleil/feature/mqtt:altitude/state",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 720,
        "y": 320,
        "wires": [
            [
                "ae57174554627c71",
                "58367a9aedab25dc"
            ]
        ]
    },
    {
        "id": "e921e01a.a0fa3",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "debug 4",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 720,
        "y": 380,
        "wires": []
    },
    {
        "id": "e866e950.a7f798",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "debug 3",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "true",
        "targetType": "full",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 1140,
        "y": 180,
        "wires": []
    },
    {
        "id": "5b085e1b.4ec8a",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "debug 6",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "true",
        "targetType": "full",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 1140,
        "y": 380,
        "wires": []
    },
    {
        "id": "56265aeb.99f034",
        "type": "sun-position",
        "z": "dbd46647b51191ed",
        "name": "",
        "positionConfig": "2831ba70.55a636",
        "rules": [
            {
                "valueLow": "0",
                "valueLowType": "num",
                "valueHigh": "360",
                "valueHighType": "num"
            }
        ],
        "onlyOnChange": "true",
        "topic": "",
        "outputs": 2,
        "start": "sunsetStart",
        "startType": "pdsTime",
        "startOffset": 0,
        "startOffsetType": "num",
        "startOffsetMultiplier": 60000,
        "end": "sunriseEnd",
        "endType": "pdsTime",
        "endOffset": 0,
        "endOffsetType": "num",
        "endOffsetMultiplier": 60000,
        "x": 470,
        "y": 280,
        "wires": [
            [
                "a0d0e562.7ad1d8",
                "9cc2d51.4ac0828",
                "28e91.9d63d16f6"
            ],
            [
                "e921e01a.a0fa3"
            ]
        ]
    },
    {
        "id": "8eee70dd77c1369c",
        "type": "mqtt out",
        "z": "dbd46647b51191ed",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "3c3eb52d.9fb296",
        "x": 1130,
        "y": 280,
        "wires": []
    },
    {
        "id": "0a17f9d94c9dae35",
        "type": "function",
        "z": "dbd46647b51191ed",
        "name": "arrondi entier",
        "func": "msg.payload = Math.round(msg.payload)\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 940,
        "y": 240,
        "wires": [
            [
                "8eee70dd77c1369c",
                "e866e950.a7f798"
            ]
        ]
    },
    {
        "id": "ddf8b5e66052a4dc",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "debug 2",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 920,
        "y": 180,
        "wires": []
    },
    {
        "id": "ae57174554627c71",
        "type": "function",
        "z": "dbd46647b51191ed",
        "name": "arrondi entier",
        "func": "msg.payload = Math.round(msg.payload)\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 940,
        "y": 320,
        "wires": [
            [
                "5b085e1b.4ec8a",
                "8eee70dd77c1369c"
            ]
        ]
    },
    {
        "id": "58367a9aedab25dc",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "debug 5",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 920,
        "y": 380,
        "wires": []
    },
    {
        "id": "664b1852987e09be",
        "type": "time-inject",
        "z": "dbd46647b51191ed",
        "name": "Période et Intervalle d'injection .",
        "nameInt": "¹sunrise start - sunset end = timestamp ↻10min",
        "positionConfig": "2831ba70.55a636",
        "props": [
            {
                "p": "",
                "pt": "msgPayload",
                "v": "",
                "vt": "date",
                "o": "",
                "oT": "none",
                "oM": "60000",
                "f": 0,
                "fS": 0,
                "fT": "UNIX timestamp (ms)",
                "fI": "0",
                "next": true,
                "days": "*",
                "months": "*",
                "onlyOddDays": false,
                "onlyEvenDays": false,
                "onlyOddWeeks": false,
                "onlyEvenWeeks": false
            },
            {
                "p": "",
                "pt": "msgTopic",
                "v": "",
                "vt": "str",
                "o": "",
                "oT": "none",
                "oM": "60000",
                "f": 0,
                "fS": 0,
                "fT": "UNIX timestamp (ms)",
                "fI": "0",
                "next": false,
                "days": "*",
                "months": "*",
                "onlyOddDays": false,
                "onlyEvenDays": false,
                "onlyOddWeeks": false,
                "onlyEvenWeeks": false
            }
        ],
        "injectTypeSelect": "interval-time",
        "intervalCount": "10",
        "intervalCountType": "num",
        "intervalCountMultiplier": 60000,
        "cron": "",
        "cronType": "cronexpr",
        "time": "sunriseStart",
        "timeType": "pdsTime",
        "offset": 0,
        "offsetType": "none",
        "offsetMultiplier": 60000,
        "timeEnd": "sunsetEnd",
        "timeEndType": "pdsTime",
        "timeEndOffset": 0,
        "timeEndOffsetType": "none",
        "timeEndOffsetMultiplier": 60000,
        "timeDays": "*",
        "timeOnlyOddDays": false,
        "timeOnlyEvenDays": false,
        "timeOnlyOddWeeks": false,
        "timeOnlyEvenWeeks": false,
        "timeMonths": "*",
        "timedatestart": "",
        "timedateend": "",
        "property": "",
        "propertyType": "none",
        "propertyCompare": "true",
        "propertyThreshold": "",
        "propertyThresholdType": "num",
        "timeAlt": "",
        "timeAltType": "entered",
        "timeAltDays": "*",
        "timeAltOnlyOddDays": false,
        "timeAltOnlyEvenDays": false,
        "timeAltOnlyOddWeeks": false,
        "timeAltOnlyEvenWeeks": false,
        "timeAltMonths": "*",
        "timeAltOffset": 0,
        "timeAltOffsetType": "none",
        "timeAltOffsetMultiplier": 60000,
        "once": true,
        "onceDelay": 0.1,
        "recalcTime": 2,
        "x": 220,
        "y": 280,
        "wires": [
            [
                "56265aeb.99f034"
            ]
        ]
    },
    {
        "id": "2831ba70.55a636",
        "type": "position-config",
        "name": "Maison",
        "isValide": "true",
        "angleType": "deg",
        "timeZoneOffset": "99",
        "timeZoneDST": "0",
        "stateTimeFormat": "3",
        "stateDateFormat": "12",
        "contextStore": ""
    },
    {
        "id": "3c3eb52d.9fb296",
        "type": "mqtt-broker",
        "name": "MQTT Broker",
        "broker": "localhost",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "compatmode": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]

```

Cela donnera un flow qui ressemble à cela

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/1/13348ebccd98e94eb6ff6208357f91732f1f5459.png)

ensuite dans Gladys créez un device comme suit

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/e/e015d1b07528451f444a535e8efee0f175140748.png)

et une scène comme suit

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/fdb9ff2a5a93e5f1252f680531cebdd67abfbced.png)

Voila il est maintenant possible de créer un événement en fonction de la position du soleil dans Gladys comme par exemple ouvrir ou fermer les volets selon leur orientation pour chauffer ou rafraichir la pièce

Il faudra personnaliser votre localisation GPS ici

![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/8/83f40edc56eda0d8f2076f0bd3f3c40cc22406fd.png)

![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/7/76b4052f2078e34052900d5c1aa8c63a66017eb0.png)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/2/20681120caa2a116750da7217eb3a0df8765b1d9.jpeg)

Il faut également avoir installé via «&nbsp;Manage palette&nbsp;»

![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/a/a465541559ffcc973fe9ccdda029ca3e265e3b14.png)

le module «&nbsp;node-red-contrib-sun-position&nbsp;» via l’onglet «&nbsp;install&nbsp;»

![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/e/e0bc5f95793c7ab92c9cc05e27dac3b31521608a.png)

La fréquence d’injection mqtt est défini dans le node «&nbsp;inject enhanced&nbsp;» ici 10mn (et qui définit l’intervalle entre le lever et le coucher de soleil !)

![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/f991b0dd225efe24b8ecbb2095c608f3ee4e89a2.png)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/f8bfa5dacd315e3fb54b8f8dc04445a83a7ee1ba.png)

Voila, j’espère que cela dépannera certains, c’est vrai que le couple Gladys Node-red solutionne bien des manques en attendant que les dévs adéquats soient implémentés ! 😉  
Bien sur en attendant que cette fonctionnalité soit de base dans Gladys ! 🤪

---

<div class="post-metadata">

**Author:** ![guim31](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/guim31/32/4840_2.png) [@guim31](https://community.gladysassistant.com/u/guim31)\
**Post date:** [Mars 20, 2023, 8:42 UTC](https://community.gladysassistant.com/t/mini-tuto-sun-position-nore-red-mqtt-pour-piloter-les-volets-en-fonction-de-la-position-du-soleil-et-des-mois/8028/2 "2023-03-20T08:42:21Z")

</div>

Trop bien !!! Merci beaucoup @cce66 😉  
Parfait pour mes volets roulants !!!

---

<div class="post-metadata">

**Author:** ![cce66](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/c/8797f3/32.png) [@cce66](https://community.gladysassistant.com/u/cce66)\
**Post date:** [Mars 20, 2023, 9:55 UTC](https://community.gladysassistant.com/t/mini-tuto-sun-position-nore-red-mqtt-pour-piloter-les-volets-en-fonction-de-la-position-du-soleil-et-des-mois/8028/3 "2023-03-20T09:55:30Z")

</div>

salut @guim31,

J’ai modifié le flow et utilisé le «&nbsp;inject enhanced&nbsp;» qui marche (le «&nbsp;trigger&nbsp;» non) et qui a l’avantage de pouvoir être paramétré entre le lever et le coucher de soleil !  
Je vais voir pour créer dans node-red des nodes supplémentaire pour paramétrer la sortie MQTT en fonction de paramétrage de volets (orientation) et pourquoi pas d’ordre montée descente des éléments Volet dans Gladys !  
Cela devrait donner

Si azimuth compris entre valeur volet X min AZ et valeur volet X max AZ alors  
Si altitude compris entre val min AL volet X et val max AL volet X alors  
Si Mois Hiver = vrai alors  
Envoi MQTT Ouvre volet X à 100%  
Si Mois Eté = vrai alors  
Envoi MQTT Ferme Volet X à 100%  
Sinon  
Envoi MQTT ouvre Volet X à 50%

Cela devrait couvrir complétement le manque et permettre de faire des économies d’énergies conséquentes

Après je créerais un autre mini-tuto mais pour coupler Gladys Node-red MQTT et mes modules volets X-4VR couplé à mon IPX800 V5 GCE  
[https://www.gce-electronics.com/fr/carte-relais-ethernet-module-rail-din/1097-ipx800-v4-extension-4-volets-roulants-x-4vr-3760309690094.html](https://www.gce-electronics.com/fr/carte-relais-ethernet-module-rail-din/1097-ipx800-v4-extension-4-volets-roulants-x-4vr-3760309690094.html)

> **[Cartes et modules relais - IPX800 V5 - GCE Electronics](https://www.gce-electronics.com/fr/accueil/1799-automate-ethernet-ipx800-v5.html)**
>
> Contrôlez vos appareils électriques et produits connectés depuis internet. Programmer des scénarios complexes. Associez une box domotique

Mais j’ai un peu plus de boulot car les appel mqtt ont du être modifié car le mini-tuto que j’avais fait marches plus (en tout cas chez moi :! 🙂 )

> [@Mini Tuto - Interaction Gladys - IPX800V5 via node-red](https://community.gladysassistant.com/t/mini-tuto-interaction-gladys-ipx800v5-via-node-red/6917):
>
> Le but de ce tuto est de montrer comment piloter des relais de la plate-forme domotique IPX800V5 de GCE avec Gladys Allez dans l’onglet « Système » [image] Cliquez sur « MQTT » [image] Paramétrez comme suit, avec pour « Serveur: " l’ip du broker mosquito (IP du raspberry ou du Nuc sur lequel est installé Gladys, en « Client ID » le nom que vous voudrez (j’ai mis ici IPX800V5 c’est important pour les paramétrage des Topic dans Node-red) [image] Ensuite on va dans l’onglet « Liens » [image…

---

<div class="post-metadata">

**Author:** ![cce66](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/c/8797f3/32.png) [@cce66](https://community.gladysassistant.com/u/cce66)\
**Post date:** [Mars 23, 2023, 2:45 UTC](https://community.gladysassistant.com/t/mini-tuto-sun-position-nore-red-mqtt-pour-piloter-les-volets-en-fonction-de-la-position-du-soleil-et-des-mois/8028/4 "2023-03-23T14:45:46Z")

</div>

Voici le flow modifié pour controler les volets mqtt dans gladys selon la position du soleil et les mois via node-red 😊  
Le flow a importer dans node-red et à adapter (identifiant mqtt et position geographique comme vu plus haut dans les messages)

```auto
[
    {
        "id": "dbd46647b51191ed",
        "type": "tab",
        "label": "Sun-Position",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "a0d0e562.7ad1d8",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "debug 1",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 580,
        "y": 240,
        "wires": []
    },
    {
        "id": "9cc2d51.4ac0828",
        "type": "change",
        "z": "dbd46647b51191ed",
        "name": "azimuth",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.azimuth",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 580,
        "y": 300,
        "wires": [
            [
                "0a17f9d94c9dae35",
                "ddf8b5e66052a4dc"
            ]
        ]
    },
    {
        "id": "28e91.9d63d16f6",
        "type": "change",
        "z": "dbd46647b51191ed",
        "name": "altitude .",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.altitude",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 580,
        "y": 520,
        "wires": [
            [
                "ae57174554627c71",
                "5b085e1b.4ec8a"
            ]
        ]
    },
    {
        "id": "e921e01a.a0fa3",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "payload",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 1520,
        "y": 440,
        "wires": []
    },
    {
        "id": "e866e950.a7f798",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "payload",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "msg",
        "x": 1080,
        "y": 220,
        "wires": []
    },
    {
        "id": "5b085e1b.4ec8a",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "payload",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "true",
        "targetType": "full",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 760,
        "y": 580,
        "wires": []
    },
    {
        "id": "56265aeb.99f034",
        "type": "sun-position",
        "z": "dbd46647b51191ed",
        "name": "",
        "positionConfig": "2831ba70.55a636",
        "rules": [
            {
                "valueLow": "0",
                "valueLowType": "num",
                "valueHigh": "360",
                "valueHighType": "num"
            }
        ],
        "onlyOnChange": "true",
        "topic": "",
        "outputs": 2,
        "start": "sunsetStart",
        "startType": "pdsTime",
        "startOffset": 0,
        "startOffsetType": "num",
        "startOffsetMultiplier": 60000,
        "end": "sunriseEnd",
        "endType": "pdsTime",
        "endOffset": 0,
        "endOffsetType": "num",
        "endOffsetMultiplier": 60000,
        "x": 370,
        "y": 400,
        "wires": [
            [
                "a0d0e562.7ad1d8",
                "9cc2d51.4ac0828",
                "28e91.9d63d16f6"
            ],
            [
                "58367a9aedab25dc"
            ]
        ]
    },
    {
        "id": "8eee70dd77c1369c",
        "type": "mqtt out",
        "z": "dbd46647b51191ed",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "3c3eb52d.9fb296",
        "x": 1330,
        "y": 400,
        "wires": []
    },
    {
        "id": "0a17f9d94c9dae35",
        "type": "function",
        "z": "dbd46647b51191ed",
        "name": "azimuth arrondi entier",
        "func": "/* Affecte à la variable varAzimuth la valeur arrondie de Azimuth de sun-position */\nlet varflowAzimuth = Math.round(msg.payload);\n\n/* Affecte à la variable globale varContextAzimuth la valeur de varAzimuth */\nflow.set(\"varFlowAzimuth\", varflowAzimuth);\n\n/* affecte le topic et payload de msg*/\nmsg.topic = \"gladys/master/device/mqtt:soleil/feature/mqtt:azimuth/state\";\nmsg.payload = varflowAzimuth;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 800,
        "y": 300,
        "wires": [
            [
                "e866e950.a7f798",
                "b81561e463751087",
                "d1588b32167b06a7",
                "c4f9d7b9c239cb40",
                "d2c0c56b22042616"
            ]
        ]
    },
    {
        "id": "ddf8b5e66052a4dc",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "payload",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "true",
        "targetType": "full",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 760,
        "y": 240,
        "wires": []
    },
    {
        "id": "ae57174554627c71",
        "type": "function",
        "z": "dbd46647b51191ed",
        "name": "altitude arrondi entier",
        "func": "/* Affecte à la variable varAltitude la valeur arrondie de Altitude de sun-position */\nlet varFlowAltitude = Math.round(msg.payload);\n\n/* Affecte à la variable globale varContextAltitude la valeur de varAltitude */\nflow.set(\"varFlowAltitude\", varFlowAltitude);\n\n/* affecte le topic et payload de msg*/\nmsg.topic = \"gladys/master/device/mqtt:soleil/feature/mqtt:altitude/state\";\nmsg.payload = varFlowAltitude;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 800,
        "y": 520,
        "wires": [
            [
                "7999acaff2c5f870",
                "b81561e463751087",
                "d1588b32167b06a7",
                "c4f9d7b9c239cb40",
                "8ea45d375a4adde2"
            ]
        ]
    },
    {
        "id": "58367a9aedab25dc",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "debug 5",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 580,
        "y": 580,
        "wires": []
    },
    {
        "id": "664b1852987e09be",
        "type": "time-inject",
        "z": "dbd46647b51191ed",
        "name": "Période et Intervalle d'injection .",
        "nameInt": "¹sunrise start - sunset end = timestamp ↻10min",
        "positionConfig": "2831ba70.55a636",
        "props": [
            {
                "p": "",
                "pt": "msgPayload",
                "v": "",
                "vt": "date",
                "o": "",
                "oT": "none",
                "oM": "60000",
                "f": 0,
                "fS": 0,
                "fT": "UNIX timestamp (ms)",
                "fI": "0",
                "next": true,
                "days": "*",
                "months": "*",
                "onlyOddDays": false,
                "onlyEvenDays": false,
                "onlyOddWeeks": false,
                "onlyEvenWeeks": false
            },
            {
                "p": "",
                "pt": "msgTopic",
                "v": "",
                "vt": "str",
                "o": "",
                "oT": "none",
                "oM": "60000",
                "f": 0,
                "fS": 0,
                "fT": "UNIX timestamp (ms)",
                "fI": "0",
                "next": false,
                "days": "*",
                "months": "*",
                "onlyOddDays": false,
                "onlyEvenDays": false,
                "onlyOddWeeks": false,
                "onlyEvenWeeks": false
            }
        ],
        "injectTypeSelect": "interval-time",
        "intervalCount": "10",
        "intervalCountType": "num",
        "intervalCountMultiplier": 60000,
        "cron": "",
        "cronType": "cronexpr",
        "time": "sunriseStart",
        "timeType": "pdsTime",
        "offset": 0,
        "offsetType": "none",
        "offsetMultiplier": 60000,
        "timeEnd": "sunsetEnd",
        "timeEndType": "pdsTime",
        "timeEndOffset": 0,
        "timeEndOffsetType": "none",
        "timeEndOffsetMultiplier": 60000,
        "timeDays": "*",
        "timeOnlyOddDays": false,
        "timeOnlyEvenDays": false,
        "timeOnlyOddWeeks": false,
        "timeOnlyEvenWeeks": false,
        "timeMonths": "*",
        "timedatestart": "",
        "timedateend": "",
        "property": "",
        "propertyType": "none",
        "propertyCompare": "true",
        "propertyThreshold": "",
        "propertyThresholdType": "num",
        "timeAlt": "",
        "timeAltType": "entered",
        "timeAltDays": "*",
        "timeAltOnlyOddDays": false,
        "timeAltOnlyEvenDays": false,
        "timeAltOnlyOddWeeks": false,
        "timeAltOnlyEvenWeeks": false,
        "timeAltMonths": "*",
        "timeAltOffset": 0,
        "timeAltOffsetType": "none",
        "timeAltOffsetMultiplier": 60000,
        "once": true,
        "onceDelay": 0.1,
        "recalcTime": 2,
        "x": 160,
        "y": 400,
        "wires": [
            [
                "56265aeb.99f034"
            ]
        ]
    },
    {
        "id": "b81561e463751087",
        "type": "function",
        "z": "dbd46647b51191ed",
        "name": "volet 1 - ouvre Az 55 à 230 / Alt 20 a 90",
        "func": "let varAltitude = flow.get(\"varFlowAltitude\");\nlet varAzimuth = flow.get(\"varFlowAzimuth\");\n\n/* definit la position du volet */\nlet varAzimuthMinVoletOuvre = 55;\nlet varAzimuthMaxVoletOuvre = 230;\nlet varAltitudeMinVoletOuvre = 20;\nlet varAltitudeMaxVoletOuvre = 90;\n\n/* affecte le topic au mqtt du volet crée et defini dans gladys */\nmsg.topic = \"gladys/master/device/mqtt:volet1/feature/mqtt:volet1/state\";\n\n\n/* Récupère le numéro du mois */\nvar dateGlobale = new Date();\nvar noMois = dateGlobale.getUTCMonth() + 1;\n\nmsg.payload = \"0\";\nif (varAzimuth > varAzimuthMinVoletOuvre && varAzimuth < varAzimuthMaxVoletOuvre) {\n if (varAltitude > varAltitudeMinVoletOuvre && varAltitude < varAltitudeMaxVoletOuvre) {\n /* ouvre ou ferme le volet selon la saison et l'orientation du volet (nord, sud etc) */\n if (noMois > 4 && noMois < 10) {\n /* ici d'avril a octobre le volet est ouvert à 100% */\n msg.payload = \"100\";\n } else {\n /* ici de novembre a mars le volet est ouvert à 0% */\n msg.payload = \"0\";\n }\n }\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1190,
        "y": 300,
        "wires": [
            [
                "8eee70dd77c1369c",
                "e921e01a.a0fa3",
                "98dff73cf45fc459"
            ]
        ]
    },
    {
        "id": "d1588b32167b06a7",
        "type": "function",
        "z": "dbd46647b51191ed",
        "name": "volet 2 - ouvre Az 75 à 180 / Alt 20 a 90",
        "func": "let varAltitude = flow.get(\"varFlowAltitude\");\nlet varAzimuth = flow.get(\"varFlowAzimuth\");\n\nlet varAzimuthMinVoletOuvre = 75;\nlet varAzimuthMaxVoletOuvre = 180;\nlet varAltitudeMinVoletOuvre = 20;\nlet varAltitudeMaxVoletOuvre = 90;\n\nmsg.topic = \"gladys/master/device/mqtt:volet2/feature/mqtt:volet2/state\";\n\n/* Récupère le numéro du mois */\nvar dateGlobale = new Date();\nvar noMois = dateGlobale.getUTCMonth() + 1;\n\nmsg.payload = \"0\";\nif (varAzimuth > varAzimuthMinVoletOuvre && varAzimuth < varAzimuthMaxVoletOuvre) {\n if (varAltitude > varAltitudeMinVoletOuvre && varAltitude < varAltitudeMaxVoletOuvre) {\n /* ouvre ou ferme le volet selon la saison et l'orientation du volet (nord, sud etc) */\n if (noMois > 4 && noMois < 10) {\n /* ici d'avril a octobre le volet est ouvert à 100% */\n msg.payload = \"100\";\n } else {\n /* ici de novembre a mars le volet est ouvert à 0% */\n msg.payload = \"0\";\n }\n }\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1190,
        "y": 520,
        "wires": [
            [
                "8eee70dd77c1369c",
                "e921e01a.a0fa3",
                "98dff73cf45fc459"
            ]
        ]
    },
    {
        "id": "7999acaff2c5f870",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "payload",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "msg",
        "x": 1080,
        "y": 640,
        "wires": []
    },
    {
        "id": "c4f9d7b9c239cb40",
        "type": "mqtt out",
        "z": "dbd46647b51191ed",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "3c3eb52d.9fb296",
        "x": 890,
        "y": 400,
        "wires": []
    },
    {
        "id": "d2c0c56b22042616",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "topic",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "topic",
        "targetType": "msg",
        "statusVal": "topic",
        "statusType": "msg",
        "x": 1070,
        "y": 160,
        "wires": []
    },
    {
        "id": "8ea45d375a4adde2",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "topic",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "topic",
        "targetType": "msg",
        "statusVal": "topic",
        "statusType": "msg",
        "x": 1070,
        "y": 580,
        "wires": []
    },
    {
        "id": "98dff73cf45fc459",
        "type": "debug",
        "z": "dbd46647b51191ed",
        "name": "topic",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "topic",
        "targetType": "msg",
        "statusVal": "topic",
        "statusType": "msg",
        "x": 1510,
        "y": 360,
        "wires": []
    },
    {
        "id": "2831ba70.55a636",
        "type": "position-config",
        "name": "Maison",
        "isValide": "true",
        "angleType": "deg",
        "timeZoneOffset": "99",
        "timeZoneDST": "0",
        "stateTimeFormat": "3",
        "stateDateFormat": "12",
        "contextStore": ""
    },
    {
        "id": "3c3eb52d.9fb296",
        "type": "mqtt-broker",
        "name": "MQTT Broker Gladys",
        "broker": "192.168.0.125",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "compatmode": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]

```

le résultat graphique du flow

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/e/ef1b0b26a59e9a3be33a2455194aff8726f8f1c1.png)

la création des objets volets dans mqtt

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/7/71bc1679a1c83d6ee24c31f54b333953000cd40d.png)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/c/c4b1ca02ebd5015c7dfa9a5bb6090b37a2e8a84e.png)

et la visu de la position des volets dans un dashboard volets qui affiche aussi les valeurs azimuth et altitude (réutilisable dans les scénarios de gladys)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/f809f3a6cda763d683f24b9336801c9d9d28f101.png)

le paramétrage des volets se fait dans le code (ou dans les scénarios de gladys !)

![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/8/889e77fbc30f618d500dfd608d541fff8f420037.png)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/7/7f89e98cf795cb14c41dc98a4e12b5196f40f8cc.png)

Voila il reste plus qu’à adapter a vos configs ! 😉
