Mein Gebäude – Temperatur- und Luftfeuchtigkeitssensoren
- Tutorial
Tutorial
Dieses Kapitel präsentiert einen konkreten Anwendungsfall für die Gruppierung physikalischer Sensoren und Verbesserung der Temperaturdaten im digitalen Zwilling. Es zeigt, wie Scripting es ermöglicht, das Display zu vereinheitlichen und die Werte zu formatieren und die Überwachung durch kalkulierte Mängel zu stärken.
In unserem Anwendungsfall werden die Temperatur- und Luftfeuchtigkeitssensoren als zwei Sensoren eingesetzt physische Aspekte am Boden. Aus Sicht des Endnutzers jedoch, Diese beiden Maßnahmen sind eng miteinander verbunden und müssen einheitlich konsultiert werden.
Deshalb haben wir uns entschieden, diese beiden Sensoren in einem einzigen Gerät zu gruppieren Immersive, benannt "Zimmer", um ein Stück kohärent darzustellen, um ein Werk kohärent darzustellen im digitalen Zwilling.
Für die Darstellung des Temperatursensors im digitalen Zwilling, Das zentrale Element ist der gemessene Wert. Das Hauptziel ist es, hervorzuheben Diese Schlüsselinformation, indem sie direkt in der Ausrüstungsblase angezeigt werden, und bietet somit sofortiges und intuitives Lesen.
Zusätzlich werden die angezeigten Werte mit ihrer Einheit formatiert, um Verbesserung der Lesbarkeit und des Verständnisses der Daten durch den Nutzer.
Schließlich wird zur Stärkung der Aufsicht ein berechneter Defekt hinzugefügt. Dies löst einen Alarm aus, wenn die Temperatur übersteigt eine vordefinierte Schwelle, die so eine schnelle Erkennung abnormaler Situationen gewährleistet.
Funktionale Ziele
- Bringen Sie zwei physikalische Sensoren (Temperatur und Luftfeuchtigkeit) im selben Immersive "Room"-Gerät zusammen
- Zeigen Sie die Temperaturmessung direkt in der Geräteblase an
- Formatter-Werte, um die Maßeinheit einzuschließen
- Erzeugen Sie einen Alarm, wenn die Temperatur einen festgelegten Schwellenwert überschreitet
Voraussetzungen
- Erstellung eines familienbezogenen Verhaltensskripts
Room - Räume im digitalen Zwilling kombinieren.
Darstellung der Temperaturmessung in der Geräteblase
Durch JS-Skripte können wir die sichtbaren Informationen modifizieren, die sichtbar sind
im Symbol, das mit der Ausrüstung im Zwilling verbunden ist (Widget3D),
Dazu fügen Sie einfach die Customize Zu unserem Skript.
Die Immobilie, an der wir interessiert sind, ist die Immobilie text der Widget3D
wie im folgenden Diagramm gezeigt.

Die Funktion Customize wird aufgerufen, wenn eine Variable geändert wird
und dass die Benutzeroberfläche aktualisiert werden muss.
Der Zugang zur Temperaturmessung erfolgt direkt vom Objekt aus equipment.
Dazu ruft man einfach die referenzierte Temperaturvariable ab
nach dem Kenner TEMP in der Beschreibung unserer Familie.
Hier wird die Variablenreferenz verwendet, aber der Name der
Température kann auch verwendet werden.

JS-Skript:
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";
}
Sobald das Skript angewendet und die Anwendung neu gestartet ist, kannst du die Änderungen sehen.

Für weitere Details zur Anpassung der Benutzeroberfläche eines Geräts, Die vollständige Dokumentation ist verfügbar: Hier und Hier. (Link zum Tutorial: Anpassung von Widget2D und Anpassung von Widget3D).
Formwerte zu Anzeigeeinheiten
Messungen aus dem Feld stellen manchmal physikalische Größen dar, die mit einer Messeinheit verbunden sind. (Temperatur °C oder °C, Geschwindigkeit, Energie ...).
Diese Messungen haben oft viele Dezimalstellen, die für den Nutzer nicht immer relevant sind.
Daher wird empfohlen, die Anzeige auf eine einzige Dezimalstelle zu beschränken, um die Informationen klarer zu machen.

Wie im obigen Beispiel gezeigt:
- Die Rohwerte (links) sind schwer zu lesen.
- Nach der Formatierung (rechts) werden die Werte auf eine Dezimalstelle abgerundet und von ihrer Einheit begleitet, was das Lesen erleichtert.
Zwei ergänzende Methoden werden vorgestellt, um dies zu erreichen:
- Die vorgelagerte Konfiguration der Maßeinheiten, direkt in der Excel-Datei.
Dieser Ansatz ermöglicht es, die Anzeige der Daten zu standardisieren, sobald sie integriert sind.
- Formatierung über das Behavior-Skript, das mehr Flexibilität bietet
und ermöglicht es, die Anzeige dynamisch anzupassen (Einheit, Anzahl der Dezimalstellen). Nach Bedarf.
Beide Ansätze führen zu einer klaren, konsistenten und verständlichen Darstellung für den Endnutzer, während die Genauigkeit der Rohdaten im Hintergrund erhalten bleibt.
Konfigurieren Sie die Einheit eines Maßes aus Excel
Beim Konfigurieren der Messkanäle eines Geräts aus der Excel-Datei, Es ist möglich, die für jeden Kanal zugeordnete Maßeinheit anzugeben.
- Wenn keine Einheiten angegeben sind, werden die Werte wie in Immersive angezeigt.
(Beispiel links)
- Wenn eine Einheit konfiguriert ist, fügt Immersive diese Einheit automatisch neben den Wert hinzu
und begrenzt die Anzeige auf eine einzige Dezimalstelle für bessere Lesbarkeit. (Beispiel rechts)
In unserem Fall konfigurieren wir die Einheiten Celsius und Pourcent
In der Spalte Einheit für die Temperatur- und Feuchtigkeitskanäle.

Die vollständige Liste kompatibler Einheiten ist in der Einstellungen der Excel-Datei.

Formatierung der Darstellung einer Variablen aus Scripting
In manchen Fällen ist es notwendig, die Art und Weise, wie eine Variable ihren Wert darstellt, feiner zu verändern.
Um dies zu ermöglichen, ist es notwendig, eine neue JS-Skriptmethode zu implementieren
Zum Verhalten unserer Ausrüstung: GetFormattedData
Beispiel:
// 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 "";
}
Das Ergebnis unseres Skripts ist wie folgt:

Erzeugung eines Alarms im Falle von Überschreitung einer Temperaturschwelle
Im Rest unseres Szenarios wollen wir den Nutzer warnen, wenn eine Temperatur einen bestimmten Schwellenwert überschreitet, damit er schnell reagieren kann. Dazu definieren wir einen Alarm, der direkt in der Schnittstelle hervorgehoben wird.
Das Erstellen und Aufheben von Warnungen erfolgt in zwei Schritten.
- Implementierung der Funktion
SetupEquipmentum die Warnung zu erstellen. - Implementierung der Funktion
OnEquipmentChangedzur Berechnung des Alarms.
Alarmmeldung erstellen: Temperatur zu hoch
Um eine neue Warnung auf einem Gerät aufzunehmen, wird ein Aufruf an die Funktion verwendet CreateStaticFault wenn die Ausrüstung initialisiert wird. Damit kannst du einen Kanal in der Kategorie "Defekt" der Ausrüstung erstellen.
JS-Skript:
function SetupEquipment(equipment)
{
// Création d'un nouveau défaut
equipment.CreateStaticFault('Température trop élevée');
}
Alarmberechnung: Temperatur zu hoch
Der Schwellenüberschreitungsalarm muss berechnet werden, sobald der Temperatursensor eine Aktualisierung seiner Werte erhält, daher fügen wir die Berechnung in die Funktion hinzu OnEquipmentChanged die dieser Aufgabe gewidmet ist.
Nachdem wir die 2 Variablen (Messung und Alarm) auf unserer Ausrüstung abgerufen haben, müssen wir nur noch die Geschäftsregel zur Fehlerauslösung implementieren und unsere Warnung aktualisieren. Hier lösen wir den Fehler "Temperatur zu hoch" aus, wenn unsere Temperaturmessung einen Wert vom Server erhalten hat (IsConnected), und wenn sein numerischer Wert (AsFloat) ist größer als 40.
JS-Skript:
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;
}
Nach der Anwendung werden Teile mit einer Temperatur über dem konfigurierten Schwellenwert angezeigt, wobei der Temperaturdefekt zu hoch ist.

In unserem Fall wird die Erzeugung der Warnungen von der Anwendung berechnet. Es kann jedoch sinnvoll sein, diese Berechnung direkt an den Connector zu deportieren, insbesondere um den Alarm mit zeitlichen Informationen zu bereichern oder wenn Historisierungsbedarf erforderlich ist.
Im letzteren Fall wird die Warnung auf Connector-Ebene als klassische Variable verknüpft und nicht mehr über eine Deklaration im Skript definiert.
Das Beispiel des Garagentors zeigt, wie das funktioniert.