Blog

End-to-End Azure Digital Twins für intelligente Gebäude

Matthijs van der Veer

Aktualisiert Oktober 16, 2025
5 Minuten

Ein digitaler Zwilling eines Gebäudes, ein einziger Punkt der Wahrheit für alles, was in unserem Arbeitsbereich passiert, in Echtzeit! Wir planen, Azure Digital Twins zu nutzen, um einen vollständigen Überblick über unser Büro zu erhalten. Obwohl wir über die Fähigkeiten und die Erfahrung verfügen, um sofort loszulegen, haben wir uns an unserem Innovationstag etwas Zeit genommen, um einige Herausforderungen zu meistern und unsere Plattform zu etwas zu machen, das Sie nirgendwo anders finden werden. Als wir eine kurze Bestandsaufnahme all der Dinge machten, die wir in unserem digitalen Zwilling modellieren wollten, brauchten wir eine Möglichkeit, jede Nachricht auf dynamische Weise in jede Zwillingsaktualisierung zu übersetzen. Andernfalls müssten Sie dafür separaten Code schreiben:

  • Zimmer
  • Telefonzellen
  • Auto-Ladegeräte
  • Unser Farmbot
  • Der Bierkühlschrank (natürlich)

Dieser Beitrag beschreibt, was wir nach einem Tag herausgefunden haben. Er befasst sich mit einigen der häufigsten Probleme, auf die wir beim Aufbau von Zwillingen mit ADT gestoßen sind.

Zuordnung der Gerätetelemetrie zu einem Zwilling

Es gibt viele Möglichkeiten, Gerätetelemetrie einem Zwilling in Azure Digital Twins zuzuordnen. Nehmen wir als Beispiel die Zwillinge eines Zimmers, an das zwei Sensortypen angeschlossen sind:

Ein einfaches Zweibettzimmer

In diesem Beispiel haben Sie einen Raum, an den zwei verschiedene Sensoren angeschlossen sind. Das ist ideal, wenn Sie zwei verschiedene Sensoren/Geräte haben, die getrennt voneinander Telemetrie melden. Sehen Sie sich das Beispiel unten an:

Eins-zu-eins-Telemetrie zum Zwilling

Das Wolkensymbol steht für eine Lösung, die eine einzelne eingehende Nachricht einem einzelnen Zwilling zuordnet. Dies ist sehr einfach zu bewerkstelligen. Es ist auch das Szenario, das in den meisten Tutorials beschrieben wird. Was aber, wenn eine einzige Nachricht zu mehreren Aktualisierungen führt? Sehen Sie sich das folgende Beispiel an:

Telemetrie aufteilen

Jetzt haben wir ein Gerät, das sowohl Temperatur- als auch CO2-Werte melden kann. Wir müssen diese Werte aufteilen, um mehrere Zwillinge zu aktualisieren. Das ist keine große Sache, aber was wir erreichen wollten, war eine einzige Lösung, die beide Szenarien unterstützen kann. Wir wollten in der Lage sein, eine Nachricht in eine einzelne Zwillingsaktualisierung umzuwandeln, oder in mehrere, ohne dass wir für jedes neue Gerät, das wir in Zukunft einbinden wollen, Code schreiben müssen.

Wir verwenden Azure Stream Analytics, um eingehende Gerätenachrichten abzugleichen und sie einer Referenzdatei zuzuordnen, um dies zu erreichen. Eine eingehende Nachricht wird über ihre Geräte-ID mit der Referenzdatei verknüpft, die eine ähnliche Struktur wie diese aufweist:

deviceIdEigenschafttwinIdtwinPath
co2Sensorkörper.daten.co2raum1-co2/lastValue
Temperatursensorbody.data.temperatureRaum1-Temperatur/lastValue
Luftqualitätssensorkörper.daten.co2raum2-co2/lastValue
LuftqualitätssensorKörper.Daten.TemperaturRaum2-Temperatur/lastValue

Mit dieser Referenzdatei ist es möglich, mit beiden oben beschriebenen Situationen umzugehen. Damit sollte es möglich sein, mit allen Arten von Telemetrie von Geräten verschiedener Hersteller umzugehen.

Die Abfrage, die wir dann über die eingehenden Daten laufen lassen, sieht wie folgt aus. Wir haben sie ein wenig optimiert, indem wir ein Taumelfenster hinzugefügt haben, um die Änderungen zusammenzufassen.

with transformed as
(
    select 
        iotHub.EventEnqueuedUtcTime as receivedAt,
        GetRecordPropertyValue (iotHub, referenceData.property) as value,
        referenceData.type as valueType,
        referenceData.twinPath as path,
        referenceData.twinId as twinId
    from iotHub
    join referenceData on iotHub.IoTHub.ConnectionDeviceId = referenceData.deviceId
)

select
    transformed.twinId,
    collect(transformed) AS changes
into patches
from transformed
group by transformed.twinId, TumblingWindow(second, 5)

Die Ausgabe dieser Abfrage ist eine twinId und alle Änderungen (Patches), die vorgenommen werden müssen, um diesen Twin zu aktualisieren. Dies bringt uns zu unserer zweiten Aufgabe des Tages.

Zentralisierung der Azure Digital Twins Updates

Es gibt Service-Limits für Azure Digital Twins. Das, was uns besonders interessiert, ist das API-Raten-Limit. Sie können bis zu 1000 Patch-Anfragen pro Sekunde durchführen, bevor ADT Sie höflich auffordert, sich zurückzuziehen. Sie denken vielleicht nicht, dass Sie dieses Limit erreichen werden, aber an einem besonders arbeitsreichen Tag mit einer sehr detaillierten Connected-Building-Definition könnte es einfach passieren. Wenn Sie mehrere Anwendungen haben, die auf ADT schreiben, wird es schwierig, mit diesem Limit umzugehen, wenn Sie es erreichen. Aus diesem Grund haben wir das Schreiben von Updates in ADT zentralisiert. Wir haben uns entschieden, eine einzige Azure-Funktion zu schreiben, die auf den Event Hub hört, den der obige Stream Analytics Job als Ausgabe verwendet.

Zentralisierte Patches

Dieser Ansatz hat noch einige andere Vorteile. Um Ihren Zwilling wiederherzustellen, können Sie diese Funktion neu starten, um Ereignisse ab dem Zeitpunkt vor einigen Tagen wiederzugeben (je nach Ihren Aufbewahrungseinstellungen). Oder Sie können die Azure-Funktion einfach anhalten, wenn Sie einen Schnappschuss Ihres ADT-Diagramms machen möchten. Diese Themen verdienen einen eigenen Blogbeitrag (und möglicherweise einen eigenen Innovationstag).

Speichern von historischen Daten

Azure Digital Twins befasst sich nicht mit historischen Werten. Es tut uns leid, wenn Sie auf der Suche nach "Azure Digital Twins Historische Daten" auf diesem Blogbeitrag gelandet sind! Glücklicherweise gibt es leistungsstarke Tools, um Einblicke in historische Daten zu erhalten. Time Series Insights visualisiert schon seit einiger Zeit Zeitreihendaten von ADT, aber wir wollten eine andere Möglichkeit erkunden. Jetzt, da wir eine Funktion Azure Digital Twin haben, die regelmäßig Updates erhält, wollten wir die Möglichkeit erkunden, den Azure Data Explorer zu verwenden, um mehr Einblicke in das Geschehen zu erhalten.

Die Ergebnisse waren gut und wir werden die Verwendung des Data Explorer Plugin für ADT in Zukunft weiter erforschen. Die Geschichte unseres gesamten Innovationstages können Sie in dieser einen Grafik nachlesen:

Visualisierung der Temperatur

All das wäre nicht möglich gewesen ohne , , , und . Bas hat außerdem einen hervorragenden Bericht über seine Reise mit dem .Net NanoFramework und der ESP32-Entwicklung geschrieben. Besonderen Dank an Bas, der alles, was wir gebaut haben, auf seine Richtigkeit hin überprüft hat!

Verfasst von

Matthijs van der Veer

Matthijs is a consultant at Xebia, with a strong focus on Generative AI. He loves helping people achieve more in the cloud.

Contact

Let’s discuss how we can support your journey.