My Building - Contrôle des lampes

Ce chapitre décrit la supervision et le contrôle des lampes dans un bâtiment. Il présente la personnalisation de leur représentation visuelle dans le jumeau numérique ainsi que la mise en place de commandes permettant d’allumer ou d’éteindre les lampes directement depuis l’interface.

Dans cet article

    Afficher plus
    Réduire

    Dans la majorité des installations, la supervision des lampes est présente et constitue le principal vecteur de commandes envoyées depuis le logiciel vers les équipements afin de contrôler leur allumage et leur extinction.

    Dans ce tutoriel, nous allons voir comment personnaliser la représentation des lampes dans l’application en fonction de leur état, ainsi que mettre en place des boutons permettant d’envoyer des commandes aux lampes.

    Objectifs fonctionnels

    1. Coloration de la bulle d’équipement en fonction de l’état d’allumage d’une lampe
    2. Ajout d’un bouton Quick Action pour envoyer une commande d’allumage ou d’extinction d’une lampe

    Prérequis

    • Création d’un script de comportement associé à la famille Light
    • Association de la Light à une bulle d’équipement dans le jumeau numérique

    Coloration de la bulle d’équipement en fonction de l’état d’allumage d’une lampe

    Afin d’atteindre l’objectif que nous nous sommes fixés, il suffit d’implémenter la fonction Customize, déjà vue précédemment.

    La première étape consiste à récupérer l’état de la variable Light afin de déterminer si la lampe est allumée ou éteinte.

    La propriété icon des widgets permet de modifier l’icône affichée par l’équipement. Le nom de l’icône doit correspondre à une ressource image précédemment ajoutée à notre organisation.

    La propriété iconBackgroundColor permet de modifier la couleur de fond de l’icône. Il est possible de passer un nom de couleur ou directement une couleur au format hexadécimal.

    function Customize(equipment, w2d, w3d) 
    {
      let isOn = equipment.GetVariable("LIGHT").AsInt > 0;
    
      // Modification de l'icône et de la couleur de fond en fonction de l'état de la lumière
      w3d.icon = isOn ? "Icon Lamp_On" : "Icon Lamp_Off";
      w3d.iconBackgroundColor = isOn ? "yellow" : "";
    }
    
    Coloration de la bulle d’équipement lorsque la lampe est allumée.

    Ajout d’un bouton Quick action pour envoyer une commande d’allumage/extinction d’une lampe

    Afin d’ajouter un bouton permettant l’envoi de commandes, nous devons ajouter du code à la fonction Customize.

    La propriété quickAction des widgets permet d’ajouter des boutons d’interaction rapide, dont le libellé correspond au texte associé à la Quick Action.

    Dans notre cas, le texte de l’action dépend de l’état de la lampe :

    • Éteindre
    • Allumer

    Nous ajoutons ensuite la fonction ExecuteQuickAction, qui sera appelée lorsque l’utilisateur clique sur le bouton.

    Notre implémentation appelle l’endpoint /api/Scene de notre serveur en envoyant le body correspondant aux paramètres nécessaires pour allumer ou éteindre la lumière.

    Les deux promesses then et catch nous permettent d’afficher des messages lorsque l’endpoint renvoie une réponse, afin d’informer l’utilisateur de la bonne ou de la mauvaise exécution de la commande.

    Script JS :

    function Customize(equipment, w2d, w3d) 
    {
      let isOn = equipment.GetVariable("LIGHT").AsInt > 0;
    
      // Affichage du bouton QuickAction avec le bon label
      w2d.quickAction = w3d.quickAction = isOn ? "Eteindre" : "Allumer";
    
      // Modification de l'icône et de la couleur de fond en fonction de l'état de la lumière
      w3d.icon = isOn ? "Icon Lamp_On" : "Icon Lamp_Off";
      w3d.iconBackgroundColor = isOn ? "yellow" : "";
    }
    
    // Implémentation de la QuickAction pour l'allumage/exctinction des lumières
    function ExecuteQuickAction(equipment) 
    {
        let isOn = equipment.GetVariable("LIGHT").AsInt > 0;
    
        let serverUrl = "https://localhost:7003";
    
        // Construction du body à envoyer au endpoint
        let body = {
            sceneName : "Corridor Light",
            action : isOn ? "off ": "on"
        };
    
        // Envoi de la requète au endpoint server/api/Scene
        WebRequestProvider.Post(serverUrl + `/api/Scene`, JSON.stringify(body))
        .Then(response => 
        {
            // Affichage d'un toast de succès et récupération des données
            Immersive.Toaster.ToastSuccess("Commande éclairage Ok");
            Immersive.Hub.ObserveSingleUpdate();
        })
        .Catch(error => 
        {
            // Affichage d'une erreur en cas de problème
            Immersive.App.ShowPopup("Commande éclairage", "La commande n'a pas pu être effectuée");
        });
    }
    
    Bouton QuickAction pour l’allumage et l’extinction d’une lampe.