Zur PHANTOM®-Hauptseite

Das Gateway Version 2 des drahtlosen Sensorsystems ERBESSD INSTRUMENTS® PHANTOM® sowie der kabelgebundene Monitor DEFIANT™ enthalten einen nativen OPC-UA-Server. Jeder Sensor erscheint als Objekt im Adressraum des Servers, mit seinen Live-Messwerten als OPC-UA-Variablen, die jeder Standard-Client — Ignition, Kepware, WinCC, FactoryTalk, Node-RED, UAExpert, opcua-asyncio — durchsuchen, lesen, abonnieren und bei einigen Steuerpunkten auch schreiben kann.

Aufgrund der Funktionsweise des OPC-UA-Protokolls stehen das vollständige Zeitsignal und die FFT über OPC UA nicht zur Verfügung. Nutzen Sie dafür die MQTT-Anbindung.

Sie können den OPC-UA-Server gleichzeitig mit allen anderen vom Gateway unterstützten Protokollen verwenden, darunter EI-Analytic™, EI Monitor, MQTT und Modbus.

Einige der hier beschriebenen Optionen wurden in späteren Gateway-Versionen ergänzt. Wenn Sie eine davon in Ihrer Admin-Konsole nicht finden, aktualisieren Sie das Gateway auf die neueste Firmware.

Serverfunktionen im Überblick

Punkt Was das Gateway bietet
Rolle OPC-UA-Server. Die Clients verbinden sich zum Gateway hin.
Transport OPC UA binär über TCP (opc.tcp://). HTTPS und OPC UA PubSub werden nicht angeboten.
Port 4334 (fest).
Endpunktpfad /UA/PhantomGW
Informationsmodell OPC-UA-Basis-Nodeset 1.05, abwärtskompatibel zu Clients mit 1.04 und 1.03. Keine Companion Specification (keine Profile DI, ADI, Machinery oder MTConnect).
Dienste Browse, Read, Write und Subscribe / MonitoredItems (Datenzugriff).
Sicherheitsrichtlinien None, Basic128Rsa15, Basic256Sha256, Aes128_Sha256_RsaOaep, Aes256_Sha256_RsaPss.
Nachrichten-Sicherheitsmodi None, Sign, SignAndEncrypt.
Gehärteter Modus Beschränkt den Server auf Aes128_Sha256_RsaOaep und Aes256_Sha256_RsaPss, ausschließlich mit SignAndEncrypt.
Benutzerauthentifizierung Anonym (deaktivierbar) sowie Benutzername + Passwort.
Abtastung minimumSamplingInterval von 1000 ms bei allen Variablen.
Historienzugriff Nicht unterstützt. Nutzen Sie MQTT oder EI-Analytic™ für Historien.
Zeitsignale / FFT Werden über OPC UA nicht bereitgestellt.
Methoden Keine. Aktionen werden stattdessen als schreibbare boolesche Variablen bereitgestellt.

Den OPC-Server aktivieren

Um den OPC-UA-Server zu aktivieren, schalten Sie ihn in der Admin-Konsole des Gateway 2 auf der Seite General config über das Kontrollkästchen „Enable OPC UA Server“ ein. Klicken Sie auf Speichern; das Gateway startet neu. Nach dem Neustart ist der OPC-Server bereit.

OPC-UA-Server aktivieren

Endpunkt-URL

Sobald der OPC-UA-Server aktiviert ist, erreichen Sie ihn mit jedem OPC-UA-Client über:

opc.tcp://192.168.1.2:4334/UA/PhantomGW

wobei 192.168.1.2 durch die IP-Adresse Ihres Gateways zu ersetzen ist. Verwenden Sie für die erste Verbindung den Sicherheitsmodus None und die Sicherheitsrichtlinie None.

Der Server veröffentlicht seine Endpunkte unter dem Hostnamen PhantomGW und kündigt zusätzlich diese alternativen Hostnamen an, damit ein Client, der die Endpunkt-URL nach der Erkennung umschreibt, ihn dennoch erreicht:

  • PhantomGW-<Gateway-Seriennummer>
  • die aktuelle eth0-Adresse des Gateways oder die von wlan0, wenn keine kabelgebundene Adresse vorliegt

Den Hostnamen überschreiben

Manche Clients lehnen einen Endpunkt ab, dessen Hostnamen sie nicht auflösen können. Aktivieren Sie Override OPC hostname und tragen Sie unter Host name einen DNS-Namen oder die feste IP-Adresse des Gateways ein, damit der Server diesen Namen statt PhantomGW ankündigt.

Sicherheitsprofile

Sicherheitsrichtlinien und Nachrichtenmodi

Standardmäßig bietet der Server den vollständigen Satz an, damit sich jeder Client unabhängig von seinen Fähigkeiten verbinden kann:

Sicherheitsrichtlinie Verfügbare Nachrichten-Sicherheitsmodi
None None
Basic128Rsa15 Sign, SignAndEncrypt
Basic256Sha256 Sign, SignAndEncrypt
Aes128_Sha256_RsaOaep Sign, SignAndEncrypt
Aes256_Sha256_RsaPss Sign, SignAndEncrypt

Unverschlüsselte OPC-UA-Kommunikation deaktivieren

Das Aktivieren von Disable OPC UA unencrypted communication beschränkt den Server auf die modernen Richtlinien:

Sicherheitsrichtlinie Nachrichten-Sicherheitsmodus
Aes128_Sha256_RsaOaep SignAndEncrypt
Aes256_Sha256_RsaPss SignAndEncrypt

None, Basic128Rsa15 und Basic256Sha256 entfallen, und die Modi None sowie reines Sign werden nicht mehr angeboten. Dies ist die empfohlene Einstellung für den Produktivbetrieb. Basic128Rsa15 und Basic256Sha256 gelten bei der OPC Foundation als veraltet; sie aktiviert zu lassen nützt nur älteren Clients, die die AES-Richtlinien nicht aushandeln können.

Prüfen Sie vor dem Aktivieren dieser Option, ob Ihr Client Aes128_Sha256_RsaOaep oder Aes256_Sha256_RsaPss unterstützt, sonst kann er sich danach nicht mehr verbinden.

Benutzerauthentifizierung

Im Auslieferungszustand akzeptiert der Server anonyme Sitzungen. Auf derselben OPC-Konfigurationsseite können Sie das einschränken:

Option Wirkung
Disable OPC UA Anonymous login Weist anonyme Sitzungen ab. Jeder Client muss Benutzername und Passwort vorlegen.
Add user Fügt ein Paar aus Benutzername und Passwort zur Benutzerliste des Servers hinzu. Beliebig viele möglich, jedes entfernbar.
Export only paired sensors Beschränkt den Adressraum auf gekoppelte Sensoren statt auf alle, die das Gateway sieht.

Benutzer werden je Gateway definiert. Kombinieren Sie Disable OPC UA Anonymous login mit Disable OPC UA unencrypted communication, damit Zugangsdaten niemals über einen unverschlüsselten Kanal gehen.

Adressraum

Der OPC-UA-Server ist als Baumstruktur aufgebaut. Unter dem Wurzelordner liegt ein Ordner Objects, in dem alle Seriennummern der Sensoren erscheinen. Unter jeder Seriennummer stehen je nach Sensortyp unterschiedliche Variablen.

Baumstruktur

Alle Knoten liegen im Namespace-Index 1 und verwenden String-NodeIds.

Root
└── Objects
    ├── 40217                         ← Funksensor, Browse Name = Seriennummer
    │   ├── friendlyName              (String)
    │   ├── isPaired                  (Boolean)
    │   ├── type                      (UInt16)
    │   ├── version                   (UInt16)
    │   ├── battery                   (Double)
    │   ├── batteryType               (UInt32)
    │   ├── temperature               (Double)
    │   ├── rms                       (Double[3])
    │   ├── rms_element0..2           (Double)
    │   ├── arms                      (Double[3])
    │   ├── arms_element0..2          (Double)
    │   ├── sensorActions
    │   │   ├── triggerCollection     (Boolean, schreibbar)
    │   │   └── triggerStateUpdate    (Boolean, schreibbar)
    │   └── extendedMetrics           (nur triaxiale Sensoren)
    │       ├── 0                     ← X-Achse
    │       ├── 1                     ← Y-Achse
    │       └── 2                     ← Z-Achse
    └── WiredCH1                      ← kabelgebundener Kanal des DEFIANT™
        ├── accel_rms                 (Double)
        ├── velocity_rms              (Double)
        └── …

NodeId-Schema

Jeder Knoten hat eine deterministische String-NodeId, sodass Sie ein Tag direkt adressieren können, ohne den Baum zu durchsuchen:

Knoten NodeId
Sensorobjekt ns=1;s=ph<phantomCode>
Sensorvariable ns=1;s=ph<phantomCode>-<browseName>
Array-Element ns=1;s=ph<phantomCode>-<browseName>_element<Index>
Anzeigename ns=1;s=ph<phantomCode>-friendlyName
Kopplungsstatus ns=1;s=ph<phantomCode>-isPaired
Aktionsordner ns=1;s=ph<phantomCode>-actions
Aufzeichnung auslösen ns=1;s=ph<phantomCode>-actions-triggerCollection
Statusaktualisierung auslösen ns=1;s=ph<phantomCode>-actions-triggerStateUpdate
Ordner der erweiterten Kennwerte ns=1;s=ph<phantomCode>-ext
Achse der erweiterten Kennwerte ns=1;s=ph<phantomCode>-ext-ch<Achse>
Erweiterter Kennwert ns=1;s=ph<phantomCode>-ext-ch<Achse>-<Kennwert>
Objekt eines kabelgebundenen Kanals ns=1;s=wired<n>
Variable eines kabelgebundenen Kanals ns=1;s=wired<n>-<browseName>

Für den Sensor 40217 lautet der Geschwindigkeits-RMS der Z-Achse ns=1;s=ph40217-rms_element2, und das vollständige Geschwindigkeits-RMS-Array ns=1;s=ph40217-rms.

Arrays werden doppelt veröffentlicht. Jede Array-Variable (rms, arms, tcTemperature, voltage, instCurrent, dryContactsState, …) wird sowohl als einzelner Array-Knoten als auch als je ein Skalarknoten pro Element mit dem Suffix _element0, _element1, … bereitgestellt. Nutzen Sie den Array-Knoten, wenn Ihr Client Arrays verarbeitet; nutzen Sie die _elementN-Knoten, wenn er ein Tag je Wert erwartet, wovon die meisten SPS- und SCADA-Tag-Browser ausgehen.

Zeitstempel und Abtastung

Jede Messvariable liefert einen sourceTimestamp und einen serverTimestamp, die auf den Zeitpunkt gesetzt sind, zu dem das Gateway zuletzt eine Aktualisierung dieses Sensors erhalten hat. Diesen Zeitstempel mit der aktuellen Uhrzeit zu vergleichen ist der zuverlässige Weg, einen Sensor zu erkennen, der nicht mehr sendet — der Wert selbst behält einfach seine letzte Messung.

Alle Variablen deklarieren ein minimumSamplingInterval von 1000 ms. Ein schnelleres Veröffentlichungsintervall im Abonnement liefert keine neuen Daten: Funksensoren senden in ihrem eigenen konfigurierten Intervall, typischerweise im Bereich von Sekunden bis Minuten.

Welche Sensoren erscheinen

Standardmäßig werden alle Sensoren exportiert, die das Gateway sieht, gekoppelt oder nicht. Aktivieren Sie Export only paired sensors, um den Adressraum auf gekoppelte Sensoren zu beschränken. Knoten werden im laufenden Betrieb hinzugefügt und entfernt, sobald Sensoren gekoppelt, entkoppelt, erkannt oder vergessen werden — ein Neustart des Gateways ist nicht nötig. Der boolesche Wert isPaired erlaubt es einem Client, der alles exportiert, selbst zu filtern.

Variablen

Die Variable type enthält den Sensortyp gemäß folgender Tabelle:

Sensorcode Sensortyp
3 Triaxialer Beschleunigungssensor (KX222, hoher Bereich)
5 Triaxialer Beschleunigungssensor (KX122, kleiner Bereich)
6 Triaxialer Beschleunigungssensor (KX134)
7 Triaxial universal (Schwingung + Thermoelement + Strom)
8 Triaxial PHANTOM® Gen 4, hoher Bereich
9 Triaxial PHANTOM® Gen 4, kleiner Bereich
10 Wärmebildkamera
12 Repeater
14 PHANTOM® MAX, hoher Bereich
15 PHANTOM® MAX, kleiner Bereich
20 Thermoelement
21 Thermoelement v2
22 Thermoelement v3
25 Infrarot-Temperatur
26 4-20-mA-Eingang
27 Spannungsmesser (0-10 VDC)
30 Strommodul v1
31 Trockenkontakt-Eingänge
32 Strommodul v2 (4 Kanäle)
40 Drehzahl / RPM
50 Abstand
60 Universalknoten (GP)
202 Display

Gemeinsame Variablen aller Sensoren

Variablenname OPC-UA-Datentyp Beschreibung
friendlyName String In der Konsole vergebener Name. Ersatzweise die Seriennummer des Sensors.
isPaired Boolean true, wenn der Sensor mit diesem Gateway gekoppelt ist.
type UInt16 Sensortyp gemäß der Tabelle oben.
version UInt16 Firmware-Version des Sensors.
battery Double Batteriespannung in Volt.
batteryType UInt32 Batterietyp. Siehe Batterietabelle unten.
temperature Double Interne Temperatur des Sensors in Grad Celsius.

Batterietypen:

batteryType Batterie
1 ⅙ D
2 AAA
3 CR2032
4 CR2477
5 AA
6 D

Triaxialer Beschleunigungssensor (3, 5, 6, 8 und 9)

Variablenname OPC-UA-Datentyp Beschreibung
rms Double[3] Geschwindigkeits-RMS in mm/s je Achse (X, Y, Z).
arms Double[3] Beschleunigungs-RMS in g je Achse (X, Y, Z).

PHANTOM® MAX (14 und 15)

Variablenname OPC-UA-Datentyp Beschreibung
rms Double[3] Geschwindigkeits-RMS in mm/s je Achse.
arms Double[3] Beschleunigungs-RMS in g je Achse.
magneticspeed Double Magnetisch ermittelte Drehzahl, in Hz.

Triaxial universal (7)

Variablenname OPC-UA-Datentyp Beschreibung
rms Double[3] Geschwindigkeits-RMS in mm/s je Achse.
tcTemperature Double[] Thermoelement-Temperatur je Kanal, in Grad Celsius.
instCurrent Double[] Momentanstrom je Kanal, in Ampere.
averageCurrent Double[] Mittlerer Strom im Aktualisierungszeitraum, je Kanal.
minCurrent Double[] Kleinster Strom im Aktualisierungszeitraum, je Kanal.
maxCurrent Double[] Größter Strom im Aktualisierungszeitraum, je Kanal.
accumulatedCurrent Double[] Seit dem letzten Zurücksetzen kumulierter Strom, je Kanal.
accumulatedStart UInt32 Beginn des Kumulationsfensters, in Sekunden seit 1970.
accumulatedEnd UInt32 Ende des Kumulationsfensters, in Sekunden seit 1970.

Wärmebildkamera (10)

Variablenname OPC-UA-Datentyp Beschreibung
avgImageTemperature Double Mittlere Temperatur des Bildes, in Grad Celsius.

Das Wärmebild selbst wird über OPC UA nicht veröffentlicht. Nutzen Sie MQTT.

Thermoelement-Temperatur (20, 21 und 22)

Variablenname OPC-UA-Datentyp Beschreibung
tcTemperature Double[] Temperatur jedes Thermoelement-Kanals, in Grad Celsius.

Infrarot-Temperatur (25)

Variablenname OPC-UA-Datentyp Beschreibung
ambientTemperature Double Vom Infrarotsensor gemessene Umgebungstemperatur, in Grad Celsius.
objectTemperature Double Temperatur des angepeilten Objekts, in Grad Celsius.
emissivity Double Für das Messobjekt konfigurierter Emissionsgrad.

4-20-mA-Sensor (26) und Spannungsmesser (27)

Variablenname OPC-UA-Datentyp Beschreibung
voltage Double[] Gemessene Spannung je Kanal, in Volt.

Strommodul (30 und 32)

Variablenname OPC-UA-Datentyp Beschreibung
instCurrent Double[] Momentanstrom jedes der vier Sensorkanäle, in Ampere.
averageCurrent Double[] Mittlerer Strom im Aktualisierungszeitraum je Kanal, in Ampere.
minCurrent Double[] Minimaler Strom im Aktualisierungszeitraum je Kanal, in Ampere.
maxCurrent Double[] Maximaler Strom im Aktualisierungszeitraum je Kanal, in Ampere.
accumulatedCurrent Double[] Seit dem letzten Zurücksetzen kumulierter Strom, je Kanal.
accumulatedStart UInt32 Beginn des Kumulationsfensters, in Sekunden seit 1970.
accumulatedEnd UInt32 Ende des Kumulationsfensters, in Sekunden seit 1970.
currentProbeType UInt16[] Auf jedem Kanal konfigurierter Wandlertyp.
currentOffsets Double[] Auf jeden Kanal angewandter Kalibrier-Offset.
currentMultiplier Double[] Auf jeden Kanal angewandter Kalibrierfaktor.

Trockenkontaktsensor (31)

Variablenname OPC-UA-Datentyp Beschreibung
dryContactsState Boolean[] Zustand jedes Eingangs. true bedeutet Kontakt geschlossen, false bedeutet offen.

Drehzahlsensor (RPM) (40)

Variablenname OPC-UA-Datentyp Beschreibung
rpm Double Aktuelle Drehzahl in RPM.

Abstand (50)

Variablenname OPC-UA-Datentyp Beschreibung
distance UInt16 Gemessener Abstand, in mm.

Universalknoten (60)

Variablenname OPC-UA-Datentyp Beschreibung
rms Double[] RMS-Wert je Achse. Geschwindigkeit in mm/s oder Beschleunigung in g, je nach Konfiguration.

Repeater (12)

Es werden nur type und version veröffentlicht.

Erweiterte Kennwerte (triaxiale Sensoren)

Liefert ein triaxialer Sensor ein vollständiges Zeitsignal, berechnet das Gateway daraus achsweise Statistiken und veröffentlicht sie unter extendedMetrics in Unterobjekten mit den Namen 0 (X), 1 (Y) und 2 (Z):

Kennwert Einheiten Beschreibung
vrms mm/s Aus dem Zeitsignal berechneter Geschwindigkeits-RMS (10-1000 Hz).
arms g Beschleunigungs-RMS über das gesamte Spektrum.
apeak g Beschleunigungsspitze.
acf Scheitelfaktor der Beschleunigung (apeak / arms).
highfreq g Beschleunigungs-RMS im Band 5-10 kHz.
maxfreq Hz Frequenz der höchsten Spektralspitze.
dcoffset g Gleichanteil des Signals.

Diese Knoten erscheinen, sobald zum ersten Mal ein Zeitsignal dieses Sensors erfasst wurde; ihre Zeitstempel beziehen sich auf das letzte Zeitsignal, nicht auf die letzte Statusaktualisierung.

Sensoraktionen (schreibbare Variablen)

Jedes Sensorobjekt enthält einen Ordner sensorActions mit schreibbaren booleschen Variablen. Ein Schreibvorgang stellt die entsprechende Aktion im Gateway in die Warteschlange; der zurückgelesene Wert zeigt, ob gerade eine Aktion aussteht.

Variable Verfügbar bei Wirkung beim Schreiben
triggerCollection Triaxiale, GP- und Wärmebildkamera-Sensoren Fordert beim nächsten Kontakt ein vollständiges Zeitsignal oder Wärmebild an.
triggerStateUpdate Alle Sensoren Fordert eine sofortige Statusaktualisierung an, bei Sensoren mit erzwungener Aktualisierung.

Ein true auf ns=1;s=ph40217-actions-triggerCollection löst beispielsweise eine Aufzeichnung am Sensor 40217 aus. Das entstehende Zeitsignal wird nicht über OPC UA zurückgegeben: Es wird gespeichert und je nach Konfiguration an EI-Analytic™, EI Monitor und/oder MQTT weitergeleitet.

Kabelgebundene Kanäle des DEFIANT™

Bei einem DEFIANT™ wird jeder kabelgebundene Kanal als Objekt mit dem Namen WiredCH1, WiredCH2, … angelegt, mit den für diesen Kanal berechneten Kennwerten als Double-Variablen. Der Browse Name des Objekts und seine NodeId beginnen bei 1 (WiredCH1 ist der erste Kanal, ns=1;s=wired1).

Gruppe Browse Names
Beschleunigung accel_rms, accel_truepeak, accel_peaktopeak, accel_lowfreq, accel_medfreq, accel_highfreq, accel_kurtosis, accel_skewness
Geschwindigkeit velocity_rms, velocity_truepeak, velocity_peaktopeak, velocity_lowfreq, velocity_medfreq, velocity_highfreq, velocity_kurtosis, velocity_skewness
Beschleunigungshüllkurve gE, ge_truepeak, ge_peaktopeak, ge_lowfreq, ge_medfreq, ge_highfreq, ge_kurtosis, ge_skewness
Weg displacement_rms, displacement_truepeak, displacement_peaktopeak, displacement_offset
Drehzahl rpm
Analog / diskret voltage_discrete, voltage_average, discrete_value
Phase zwischen Kanälen phase_channel_1phase_channel_16

Verbindung: praktische Beispiele

UAExpert

  1. Server → Add → Custom Discovery → Double click to add server.
  2. Geben Sie opc.tcp://192.168.1.2:4334/UA/PhantomGW ein.
  3. Klappen Sie den gefundenen Server auf und wählen Sie den Endpunkt: None / None für einen ersten Test oder Aes256_Sha256_RsaPss / Sign & Encrypt im Produktivbetrieb.
  4. Wenn Sie die anonyme Anmeldung deaktiviert haben, tragen Sie unter Authentication Settings → Username die in der Konsole angelegten Zugangsdaten ein.
  5. Bestätigen Sie das Zertifikat des Gateways, wenn Sie dazu aufgefordert werden, verbinden Sie sich und durchsuchen Sie Objects.

Python (opcua-asyncio)

import asyncio
from asyncua import Client

URL = "opc.tcp://192.168.1.2:4334/UA/PhantomGW"

async def main():
    async with Client(url=URL) as client:
        # Das vollständige Geschwindigkeits-RMS-Array lesen
        rms = await client.get_node("ns=1;s=ph40217-rms").read_value()
        print("Geschwindigkeits-RMS x/y/z (mm/s):", rms)

        # Eine einzelne Achse lesen
        rms_z = await client.get_node("ns=1;s=ph40217-rms_element2").read_value()
        print("Geschwindigkeits-RMS Z (mm/s):", rms_z)

        # Den Wert samt Quell-Zeitstempel lesen
        dv = await client.get_node("ns=1;s=ph40217-temperature").read_data_value()
        print("Temperatur:", dv.Value.Value, "um", dv.SourceTimestamp)

asyncio.run(main())

Mit aktivierter Authentifizierung und Verschlüsselung:

client = Client(url=URL)
client.set_user("scada")
client.set_password("ihr-passwort")
await client.set_security_string(
    "Aes256Sha256RsaPss,SignAndEncrypt,client-cert.der,client-key.pem"
)

Abonnieren statt pollen

Da alle Variablen ein minimales Abtastintervall von 1000 ms deklarieren, fordern Sie ein Veröffentlichungsintervall von 1000 ms oder langsamer an. Ein schnelleres Intervall wird angenommen, liefert aber keine zusätzlichen Daten.

class Handler:
    def datachange_notification(self, node, value, data):
        print(node, value, data.monitored_item.Value.SourceTimestamp)

sub = await client.create_subscription(1000, Handler())
await sub.subscribe_data_change(client.get_node("ns=1;s=ph40217-rms_element2"))

Fehlersuche

Symptom Ursache und Abhilfe
Der Client findet keinen Endpunkt Prüfen Sie, ob der Server aktiviert ist und das Gateway neu gestartet wurde; prüfen Sie, ob TCP-Port 4334 erreichbar ist.
Die Erkennung gelingt, die Verbindung schlägt fehl Der Client schreibt den Endpunkt auf einen Hostnamen um, den er nicht auflösen kann. Aktivieren Sie Override OPC hostname und tragen Sie einen auflösbaren Namen ein.
BadSecurityPolicyRejected oder kein passender Endpunkt Disable OPC UA unencrypted communication ist aktiv und Ihr Client beherrscht die AES-Richtlinien nicht. Nutzen Sie einen passenden Client oder deaktivieren Sie die Option.
BadIdentityTokenRejected Die anonyme Anmeldung ist deaktiviert. Geben Sie eines der in der Konsole definierten Benutzer-Passwort-Paare an.
Ein Sensor fehlt im Baum Export only paired sensors ist aktiv und der Sensor ist nicht gekoppelt, oder das Gateway hat ihn noch nicht gesehen. Prüfen Sie isPaired.
Die Werte ändern sich nie Das Aktualisierungsintervall des Sensors ist länger als Ihr Abfragezyklus, oder der Sensor sendet nicht mehr. Vergleichen Sie sourceTimestamp mit der aktuellen Zeit.