darkzonesd
Goto Top

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

Content-ID: 668241

Url: https://administrator.de/contentid/668241

Ausgedruckt am: 26.09.2024 um 22:09 Uhr

StefanKittel
Lösung StefanKittel 19.09.2024 um 07:59:06 Uhr
Goto Top
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
em-pie
em-pie 19.09.2024 um 08:41:12 Uhr
Goto Top
Moin,

Das klingt mir danach, dass ihr ein zentrales Energiemanagement-System braucht, welche Daten via verschiedenster Protokolle abfragen können muss.

Solche Projekte lassen sich fördern.
Such mal nach Energiemanagement System
chiefteddy
chiefteddy 19.09.2024 um 09:21:08 Uhr
Goto Top
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
ukulele-7
ukulele-7 19.09.2024 um 09:30:27 Uhr
Goto Top
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.
MirkoKR
Lösung MirkoKR 19.09.2024 aktualisiert um 09:54:55 Uhr
Goto Top
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
DarkZoneSD
DarkZoneSD 19.09.2024 um 10:34:00 Uhr
Goto Top
Zitat von @StefanKittel:
Moin,
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.
Das ist tatsächlich ein guter Ansatz das gefällt mir.

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.
Leider nein, sekündliche Abfragen sollen getätigt werden..

Macht bei vielen Werten keinen Sinn denn die Abfragerate vieler Sensoren aktualisiert nicht einmal sekündlich..

Stefan
Florian
DarkZoneSD
DarkZoneSD 19.09.2024 um 10:35:03 Uhr
Goto Top
Zitat von @em-pie:

Moin,
Moin,
Das klingt mir danach, dass ihr ein zentrales Energiemanagement-System braucht, welche Daten via verschiedenster Protokolle abfragen können muss.
Wird momentan eingeführt die Datenbank soll aber einen anderen Zweck erfüllen.
Solche Projekte lassen sich fördern.
Alles schon getan face-wink
DarkZoneSD
DarkZoneSD 19.09.2024 um 10:37:48 Uhr
Goto Top
Zitat von @chiefteddy:
Hallo,
Moin,
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.
Momentan ist es nur eine Langzeitaufnahme um später eine Trend-Analyse zu machen. Weshalb um zusammenhänge zu erkennen der Timestamp ein wichtigen Faktor spielt auch bei eher trägen Werten.

Jürgen
Grüße
DarkZoneSD
DarkZoneSD 19.09.2024 um 10:44:40 Uhr
Goto Top
Zitat von @ukulele-7:

Willst du denn eher ein ETL-System aufbauen und Daten langfristig auswerten oder willst du Daten kurzfristig live visualisieren?
Mein plan war Daten umformen sprich z.B. eine große MQTT Message auf 3 - 4 key value pairs runter zu brechen und dann in eine Datenbank schreiben mittels Node-Red. Dort soll eine langzeitaufzeichnung gespeichert werden, gleichzeitig kann die live-Visualisierung aber über Node-Red geschehen falls dies gewünscht ist in der Zukunft.
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.
Wie @StefanKittel schon gesagt hatte wäre eine extra Spalte mit Timestamp-Abfrage und Timestamp-Erfassung eine gute zwischenlösung. Damit hätte ich denke ich zumindest diesen Teil gelöst

Grüße
DarkZoneSD
DarkZoneSD 19.09.2024 um 10:47:34 Uhr
Goto Top
Zitat von @MirkoKR:
Moin.
Moin
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
...
Das ist gut das werde ich aufjedenfall machen zumindest für die vorhandene Infrastruktur, bei den neu-angeschafften Sensoren haben wir das bereits gemacht. Dann können wir auch festlegen ab welchem Schwellenwert wir neue Sensoren kaufen oder die vorhandene Infrastruktur tatsächlich verwenden könne.

Danke und Grüße
mbehrens
Lösung mbehrens 19.09.2024 um 22:55:33 Uhr
Goto Top
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.
DarkZoneSD
DarkZoneSD 20.09.2024 um 08:01:42 Uhr
Goto Top
Danke für die guten Einfälle zusammen.

Und schonmal verfrüht ein schönes Wochenende face-wink