Synchronisierte Datenübertragen aus verschiedenen Schnittstellen
Guten Morgen zusammen,
wir führen bei uns momentan ein Projekt durch was von uns verlangt viele Datenpunkte aus der Haustechnik, Lastenmanagement, Energiemanagement und Fertigungsmaschinen abzufragen und diese in eine Datenbank zu schreiben. Hierfür werden viele Protokolle verwendet, Maschinenwerte mit OPC UA, Haustechnik mit Bacnet, Kleinsensorik mit MQTT, API Schnittstellen..
Meine Aufgabe ist es eine Momentaufnahme aller Werter zur gleichen Zeit zu machen, diese dann einem Timestamp zu-zuordnen und in eine DB zu schreiben. Mein Ansatz wäre gewesen in Node-Red alle Werte per Push/Pull abzufragen, in eine geordnete Struktur zu bringen (z.B. JSON), einen neuen Timestamp an alle Werte ran hängen und dann an die DB zu schreiben.
Meine Frage ist, geht das auch genauer? Ich habe dadurch das vorhandene Infrastruktur verwendet werden soll gezwungener maßen Sensoren die nicht aufeinander abgestimmt sind und Werte die nicht gleichmäßig aktualisiert werden. Aber alle aktuellen Werte abzurufen und dann einen neuen Timestamp drauf zu setzen fühlt sich auch ein wenig gelogen an. Was wenn z.B. die Temperaturmessung des Klimageräts 15 Sekunden her ist und die Daten von 15 Sekunden nun einen aktuellen Timestamp haben, das verfälscht natürlich den real-Wert.
Ich sehe da momentan keine andere Lösung, was denkt Ihr?
Viele Grüße
wir führen bei uns momentan ein Projekt durch was von uns verlangt viele Datenpunkte aus der Haustechnik, Lastenmanagement, Energiemanagement und Fertigungsmaschinen abzufragen und diese in eine Datenbank zu schreiben. Hierfür werden viele Protokolle verwendet, Maschinenwerte mit OPC UA, Haustechnik mit Bacnet, Kleinsensorik mit MQTT, API Schnittstellen..
Meine Aufgabe ist es eine Momentaufnahme aller Werter zur gleichen Zeit zu machen, diese dann einem Timestamp zu-zuordnen und in eine DB zu schreiben. Mein Ansatz wäre gewesen in Node-Red alle Werte per Push/Pull abzufragen, in eine geordnete Struktur zu bringen (z.B. JSON), einen neuen Timestamp an alle Werte ran hängen und dann an die DB zu schreiben.
Meine Frage ist, geht das auch genauer? Ich habe dadurch das vorhandene Infrastruktur verwendet werden soll gezwungener maßen Sensoren die nicht aufeinander abgestimmt sind und Werte die nicht gleichmäßig aktualisiert werden. Aber alle aktuellen Werte abzurufen und dann einen neuen Timestamp drauf zu setzen fühlt sich auch ein wenig gelogen an. Was wenn z.B. die Temperaturmessung des Klimageräts 15 Sekunden her ist und die Daten von 15 Sekunden nun einen aktuellen Timestamp haben, das verfälscht natürlich den real-Wert.
Ich sehe da momentan keine andere Lösung, was denkt Ihr?
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 668241
Url: https://administrator.de/contentid/668241
Ausgedruckt am: 21.11.2024 um 16:11 Uhr
12 Kommentare
Neuester Kommentar
Moin,
Du könntest zwei Werte verwenden.
Einen für den Start der gesammten Erfassung und einen für den Zeitpunkt des tatsächlichen Abrufes.
Damit kannst Du Deine Frage auf den Zeitpunkt der Auswertung verschieben.
Mit dem Zeitpunkt des Starts kannst Du verschiedene Werte einander einem "Job" zuordnen.
Mit dem Zeitpunkt der Erfassung kannst Du die tatsächlichen Werte besser abgleichen.
Im Prinzip ist das aber Leiden auf hohem Niveau. Die meisten Firmen rufen diese Werte täglich als Durchschnitt und maximal stündlich ab. Und dann es ist es egal ob Wert X 5 Minuten zu spät kommt.
Ich würde den Zeitpunkt des Starts noch in eine Extra Tabelle schreiben.
Von dort kann man einfacher einen Überblick erhalten.
Stefan
Du könntest zwei Werte verwenden.
Einen für den Start der gesammten Erfassung und einen für den Zeitpunkt des tatsächlichen Abrufes.
Damit kannst Du Deine Frage auf den Zeitpunkt der Auswertung verschieben.
Mit dem Zeitpunkt des Starts kannst Du verschiedene Werte einander einem "Job" zuordnen.
Mit dem Zeitpunkt der Erfassung kannst Du die tatsächlichen Werte besser abgleichen.
Im Prinzip ist das aber Leiden auf hohem Niveau. Die meisten Firmen rufen diese Werte täglich als Durchschnitt und maximal stündlich ab. Und dann es ist es egal ob Wert X 5 Minuten zu spät kommt.
Ich würde den Zeitpunkt des Starts noch in eine Extra Tabelle schreiben.
Von dort kann man einfacher einen Überblick erhalten.
Stefan
Hallo,
meine Vermutung geht in die gleiche Richtung.
Bevor man sich 'n Kopp macht, wie zeitgenau man mit welcher Auflösung wie oft welche Werte ein liest, sollte man erst mal klären, was man mit den Werten machen will.
Raumtemperaturen sind zB. träge; bei Durchflüssen ist meist ein Mittelwert interessant usw.
Dann kann man den Aufwand für die Erfassung festlegen: so genau wie nötig, nicht so genau wie möglich!
Und wie @em-pie schon feststellte, Energiemanagement-System gibt es viele. Warum das Rad neu erfinden?
Jürgen
meine Vermutung geht in die gleiche Richtung.
Bevor man sich 'n Kopp macht, wie zeitgenau man mit welcher Auflösung wie oft welche Werte ein liest, sollte man erst mal klären, was man mit den Werten machen will.
Raumtemperaturen sind zB. träge; bei Durchflüssen ist meist ein Mittelwert interessant usw.
Dann kann man den Aufwand für die Erfassung festlegen: so genau wie nötig, nicht so genau wie möglich!
Und wie @em-pie schon feststellte, Energiemanagement-System gibt es viele. Warum das Rad neu erfinden?
Jürgen
Willst du denn eher ein ETL-System aufbauen und Daten langfristig auswerten oder willst du Daten kurzfristig live visualisieren?
Bei Auswertungen würde man eher versuchen die Daten mit einem Zeitstempel aus dem Quell-System zu ziehen. Also einem Zeitstempel der Quelle verwenden, an dem die Daten gültig waren und nicht unbedingt einen Zeitstempel, wann die Daten synchronisiert wurden (der ist höchstens eine Zusatzinfo). Wenn das Quell-System wirklich nur ein einzelner Sensor ist und der immer nur den grade aktuellen Wert liefert, dann ist das natürlich ein und der selbe Zeitstempel.
Bei Auswertungssystemen würde ich die Daten erstmal in ihrer Ursprungsform belassen und nach erfolgreicher Kopie ggf. konvertieren. Relationale Daten finde ich da einfacher zu handhaben als JSON.
Eine synchrone Abfrage über viele Systeme für eine Live-Darstellung dürfte schwieriger sein, da habe ich auch nicht viel Erfahrung mit. Da würde ich mich eventuell nach spezieller Software umsehen wenn es da wirklich um Sekunden geht.
Bei Auswertungen würde man eher versuchen die Daten mit einem Zeitstempel aus dem Quell-System zu ziehen. Also einem Zeitstempel der Quelle verwenden, an dem die Daten gültig waren und nicht unbedingt einen Zeitstempel, wann die Daten synchronisiert wurden (der ist höchstens eine Zusatzinfo). Wenn das Quell-System wirklich nur ein einzelner Sensor ist und der immer nur den grade aktuellen Wert liefert, dann ist das natürlich ein und der selbe Zeitstempel.
Bei Auswertungssystemen würde ich die Daten erstmal in ihrer Ursprungsform belassen und nach erfolgreicher Kopie ggf. konvertieren. Relationale Daten finde ich da einfacher zu handhaben als JSON.
Eine synchrone Abfrage über viele Systeme für eine Live-Darstellung dürfte schwieriger sein, da habe ich auch nicht viel Erfahrung mit. Da würde ich mich eventuell nach spezieller Software umsehen wenn es da wirklich um Sekunden geht.
Moin.
Ob und wie die vorhandenen Sensoren zuverlässige, bzw. an den Auswertungszeitpunkt nahe liegenden Zeiten liefern ...
... gilt es also zunächst mal für jeden Sensor herauszufinden.
Also Tabellen aufstellen
- Sensoren erfassen
- Wichtigkeit einstufen
- Aktiualisierungsintervall erfassen
-- ggf. feste Uhrzeiten oder einstellbar
-- Intervall .,. [durch Hersteller] veränderbar?
-- ggf. übliche Abweichungstoleranzen
-- ggf. Abhängigkeiten zu anderen Sensoren
...
Auf Basis dieser Tabellen Korridore/Intervalle festlegen zum abfragen, die für alle [wichtigen] Sensoren am genauesten sind ...
Danach kommt das Thema Transformation der Daten ...
... kann der Sensor-Inhaber die Daten schon passend liefern oder muss umgeschrieben werden?
Dann kann man mit eigener Software
- Sensor-spezifische Pull-Requests ausführen
- Einen oder mehrere Ports für verschiedene Sensoren bereitstellen die auf Push-Meldungen warten
... und die Daten transformieren...
... ich würde immer den vom Sensor gelieferten Zeitstempel für den Messwert mit speichern.
Ich habe mal - in kleinerem Maßstab - mittels einer MS SQL-Server-Instanz zum großteils Daten aus anderen MS SQL-Instanzen und Oracle-Instanzen ausgelesen bzw. mir durch einen Trigger liefern lassen sobald neue Daten rein kamen, da diese dort schon zeitnah von den Sensoren eingeliefert/abgefragt wurden ...
... andere Sensoren eben per SW mit Push/Pull eingelesen ...
... in 2 Fällen (Temperatur/Feuchtigkeit) wurden eigenständige Sensoren verbaut und deren Daten abgefragt ...
Viel Erfolg
Ob und wie die vorhandenen Sensoren zuverlässige, bzw. an den Auswertungszeitpunkt nahe liegenden Zeiten liefern ...
... gilt es also zunächst mal für jeden Sensor herauszufinden.
Also Tabellen aufstellen
- Sensoren erfassen
- Wichtigkeit einstufen
- Aktiualisierungsintervall erfassen
-- ggf. feste Uhrzeiten oder einstellbar
-- Intervall .,. [durch Hersteller] veränderbar?
-- ggf. übliche Abweichungstoleranzen
-- ggf. Abhängigkeiten zu anderen Sensoren
...
Auf Basis dieser Tabellen Korridore/Intervalle festlegen zum abfragen, die für alle [wichtigen] Sensoren am genauesten sind ...
Danach kommt das Thema Transformation der Daten ...
... kann der Sensor-Inhaber die Daten schon passend liefern oder muss umgeschrieben werden?
Dann kann man mit eigener Software
- Sensor-spezifische Pull-Requests ausführen
- Einen oder mehrere Ports für verschiedene Sensoren bereitstellen die auf Push-Meldungen warten
... und die Daten transformieren...
... ich würde immer den vom Sensor gelieferten Zeitstempel für den Messwert mit speichern.
Ich habe mal - in kleinerem Maßstab - mittels einer MS SQL-Server-Instanz zum großteils Daten aus anderen MS SQL-Instanzen und Oracle-Instanzen ausgelesen bzw. mir durch einen Trigger liefern lassen sobald neue Daten rein kamen, da diese dort schon zeitnah von den Sensoren eingeliefert/abgefragt wurden ...
... andere Sensoren eben per SW mit Push/Pull eingelesen ...
... in 2 Fällen (Temperatur/Feuchtigkeit) wurden eigenständige Sensoren verbaut und deren Daten abgefragt ...
Viel Erfolg
Zitat von @DarkZoneSD:
Meine Aufgabe ist es eine Momentaufnahme aller Werter zur gleichen Zeit zu machen, diese dann einem Timestamp zu-zuordnen und in eine DB zu schreiben. Mein Ansatz wäre gewesen in Node-Red alle Werte per Push/Pull abzufragen, in eine geordnete Struktur zu bringen (z.B. JSON), einen neuen Timestamp an alle Werte ran hängen und dann an die DB zu schreiben.
Ich würde hierfür als Grundlage eine Datenbank verwenden, die auf Zeitreihen spezialisiert ist. Mir fallen da u. a. InfluxDB, Whisper, Prometheus oder TimescaleDB ein.