Il mio edificio - Sensori di temperatura e umidità
- Tutorial
Tutorial
Questo capitolo presenta un caso d'uso concreto per raggruppare sensori fisici e il miglioramento dei dati di temperatura nel gemello digitale. Illustra come lo scripting renda possibile unificare il display, formattare i valori e rafforzare la supervisione tramite difetti calcolati.
Nel nostro caso d'uso, i sensori di temperatura e umidità sono impiegati come due sensori aspetti fisici sul terreno. Tuttavia, dal punto di vista dell'utente finale, Queste due misure sono strettamente legate e devono essere consultate in modo unificato.
Per questo abbiamo scelto di raggruppare questi due sensori all'interno di un unico apparecchiatura. Immersiva, chiamata "Stanza", per rappresentare un pezzo in modo coerente nel gemello digitale.
Per la rappresentazione del sensore di temperatura nel gemello digitale, L'elemento centrale è il valore misurato. L'obiettivo principale è mettere in evidenza queste informazioni chiave vengono visualizzate direttamente nella bolla dell'equipaggiamento, offrendo così una lettura immediata e intuitiva.
Inoltre, i valori visualizzati saranno formattati con la loro unità per migliorare la leggibilità e la comprensione dei dati da parte dell'utente.
Infine, per rafforzare la supervisione, verrà aggiunto un difetto calcolato. Questo attiverà un allarme quando la temperatura supera una soglia predefinita, garantendo così una rapida rilevazione di situazioni anomale.
Obiettivi funzionali
- Unisci due sensori fisici (temperatura e umidità) all'interno della stessa apparecchiatura "Immersive Room"
- Visualizza la misurazione della temperatura direttamente nella bolla dell'apparecchiatura
- I valori del formatore includendo l'unità di misura
- Genera un allarme quando la temperatura supera una soglia stabilita
Prerequisiti
- Creare uno script comportamentale legato alla famiglia
Room - Combinando le stanze nel gemello digitale.
Visualizzazione della misurazione della temperatura nella bolla dell'equipaggiamento
Attraverso lo scripting JS, possiamo modificare le informazioni visibili
nell'icona associata all'attrezzatura nel twin (Widget3D),
Per farlo, basta aggiungere il Customize al nostro copione.
La proprietà che ci interessa è la stessa proprietà text del Widget3D
come mostrato nel diagramma seguente.

La funzione Customize viene chiamata quando una variabile viene modificata
e che l'interfaccia deve essere aggiornata.
L'accesso alla misurazione della temperatura avviene direttamente dall'oggetto equipment.
Per farlo, basta recuperare la variabile di temperatura che è indicata
per l'identificatore TEMP nella descrizione della nostra famiglia.
Qui viene usato il riferimento variabile, ma il nome del
Température può essere anche utilizzato.

Script JS:
function Customize(equipment, widget2d, widget3d)
{
// Récupération de la variable TEMP de l'équipement
// Astuce : Une variable peut être récupérée via son nom (Température) ou sa référence (TEMP)
let temperatureVar = equipment.GetVariable("TEMP");
// Modification du texte par la valeur de la température (1 décimale) ajout et de l’unité
widget3d.text = temperatureVar.AsFloat.toFixed(1) + "°C";
}
Una volta applicato lo script e l'applicazione riavviata, puoi vedere i cambiamenti.

Per maggiori dettagli sulla personalizzazione dell'interfaccia associata a un apparecchiatura, La documentazione completa è disponibile: Ecco e Ecco. (link al tutorial: Personalizzazione Widget2D e Personalizzazione Widget3D).
Valori del modulo per visualizzare le unità
Le misurazioni dal campo a volte rappresentano quantità fisiche associate a un'unità di misura (Temperatura °C o °C, Velocità, Energia ...).
Queste misurazioni spesso hanno molti decimali, che non sono sempre rilevanti per l'utente.
Si raccomanda quindi di limitare il display a un singolo decimale per rendere le informazioni più chiare.

Come mostrato nell'esempio sopra:
- I valori grezzi (a sinistra) sono difficili da leggere.
- Dopo la formattazione (a destra), i valori vengono arrotondati a un decimale e accompagnati dalla loro unità, il che rende più facile la lettura.
Saranno presentati due metodi complementari per raggiungere questo obiettivo:
- La configurazione a monte delle unità di misura, direttamente nel file Excel.
Questo approccio rende possibile standardizzare la visualizzazione dei dati non appena vengono integrati.
- Formattazione tramite lo script Behavior, che offre maggiore flessibilità
e permette di adattare dinamicamente il display (unità, numero di decimali) Se necessario.
Entrambi gli approcci portano a una visualizzazione chiara, coerente e comprensibile per l'utente finale, mantenendo però l'accuratezza dei dati grezzi in background.
Configura l'unità di misura da Excel
Quando si configurano i canali di misura di un apparecchiature dal file Excel, È possibile specificare l'unità di misura associata a ciascun canale.
- Se non sono specificate unità, i valori vengono visualizzati così come in Immersive.
(esempio a sinistra)
- Se un'unità è configurata, Immersive aggiunge automaticamente quell'unità accanto al valore
e limita la visualizzazione a un singolo decimale per maggiore leggibilità. (esempio a destra)
Nel nostro caso, configuriamo le unità Celsius e Pourcent
nella colonna Unità per i canali Temperatura e Umidità.

L'elenco completo delle unità compatibili è disponibile nel Impostazioni del file Excel.

Formattazione della visualizzazione di una variabile da Scripting
In alcuni casi, è necessario modificare in modo più dettagliato il modo in cui una variabile ne mostra il valore.
Per poter fare ciò, è necessario implementare un nuovo metodo di scripting JS
Nel comportamento delle nostre attrezzature: GetFormattedData
Esempio:
// Fonction de formatage des variables
function GetFormattedData(equipment, variable)
{
// Formatage spécifique selon la variable
// Filtre par nom : variable.Name => "Temperature", "Humidity"
// Filtre par référence : variable.NameKey => "TEMP", "HYGRO"
switch (variable.NameKey)
{
case "TEMP" : return variable.AsFloat.toFixed(1) + " °C (formattage js)";
case "HYGRO" : return variable.AsFloat.toFixed(1) + " % (formattage js)";
}
// Dans les autres cas on retourne une chaîne vide, le formattage est geré par défaut.
return "";
}
Il risultato del nostro copione è il seguente:

Generazione di un allarme nel caso in cui una soglia di temperatura venga superata
Nel resto del nostro scenario, vogliamo avvisare l'utente quando una temperatura supera una certa soglia affinché possa reagire rapidamente. Per farlo, definiremo un Avviso che sarà evidenziato direttamente nell'interfaccia.
La creazione e la revoca degli allerti avviene in due fasi.
- Implementazione della funzione
SetupEquipmentper creare l'allarme. - Implementazione della funzione
OnEquipmentChangedper il calcolo dell'allarme.
Creazione dell'allarme: Temperatura troppo alta
Per registrare un nuovo allarme su un apparecchiatura, viene utilizzata una chiamata alla funzione CreateStaticFault quando l'apparecchiatura si avvia. Ti permette di creare un canale nella categoria "Difetto" dell'apparecchiatura.
Script JS:
function SetupEquipment(equipment)
{
// Création d'un nouveau défaut
equipment.CreateStaticFault('Température trop élevée');
}
Calcolo di allerta: Temperatura troppo alta
L'allarme di superamento della soglia deve essere calcolato non appena il sensore di temperatura riceve un aggiornamento dei suoi valori, quindi aggiungiamo il calcolo nella funzione OnEquipmentChanged che è dedicata a questo compito.
Dopo aver recuperato le 2 variabili (misurazione e allarme) sulle nostre apparecchiature, dobbiamo solo implementare la business rule per generare il guasto e aggiornare l'avviso. Qui attiviamo il difetto "Temperatura troppo alta" se la nostra misurazione della temperatura ha ricevuto un valore dal server (IsConnected), e se il suo valore numerico (AsFloat) è superiore a 40.
Script JS:
function OnEquipmentChanged(equipment)
{
// Récupération de la variable de température et d'alarme.
var temperatureVar = equipment.GetVariable("TEMP");
var temperatureTooHighVar = equipment.GetVariable("Température trop élevée");
// L'alarme doit être déclenchée :
// * si la température est connectée
// * et si la valeur mesurée au dessus de 40°C.
let isAboveThreshold = temperatureVar.IsConnected
&& temperatureVar.AsFloat > 40;
// On affecte la valeur calculée (de type boolean) à la variable d'alarme.
temperatureTooHighvariable.AsBool = isAboveThreshold;
}
Una volta applicate, le parti con una temperatura superiore al valore soglia configurato vengono visualizzate con il difetto di temperatura troppo elevato.

Nel nostro caso, la generazione degli avvisi viene calcolata dall'applicazione. Tuttavia, può essere rilevante trasferire questo calcolo direttamente al Connettore, in particolare per arricchire l'allarme con informazioni temporali o quando sono necessarie necessità di storicizzazione.
Nel secondo caso, quando l'avviso viene dichiarato a livello di Connettore, viene quindi collegato come variabile classica e non più definito tramite una dichiarazione nello script.
L'esempio della porta del garage illustra come funziona.