Datenpunkte
Datenpunkte bilden die zentrale logische Ebene von IOZER basic. Sie verbinden Hardware, Protokolle, Weboberfläche und lokale Logik über eine einheitliche Darstellung von Werten.
Ein Datenpunkt beschreibt nicht nur einen Wert, sondern auch dessen Bedeutung, Herkunft, Qualität und optionale Weitergabe an andere Schnittstellen.
Grundidee
Ohne Datenpunkte müsste eine Logik direkt mit Eingängen, Ausgängen, MQTT-Topics, Modbus-Registern oder 1-Wire-Sensoren arbeiten. Das wird schnell unübersichtlich, sobald mehrere Schnittstellen zusammenwirken.
Datenpunkte entkoppeln die Schnittstellen von der Programmlogik. Der Datenpunkt hält den aktuellen Wert und bildet die zentrale Drehscheibe für dessen Herkunft, Verarbeitung und Weitergabe.

Die Grafik zeigt die möglichen Datenflüsse:
| Verbindung | Funktion |
|---|---|
| Quelle → Datenpunkt | Eine Quelle, beispielsweise ein digitaler Eingang, 1-Wire-Sensor oder Modbus-Register, aktualisiert den Wert. |
| Datenpunkt → Ziel | Der aktuelle Wert wird an ein konfiguriertes Ziel wie einen digitalen Ausgang oder ein Modbus-Register weitergegeben. |
| Datenpunkt → Ereignis → Programmlogik | Eine Wertänderung oder Aktualisierung kann ein Ereignis in der lokalen Programmlogik auslösen. |
| Programmlogik → Wert setzen → Datenpunkt | Die Programmlogik kann den Wert eines Datenpunkts gezielt setzen. |
| Datenpunkt → Publish → MQTT | Der aktuelle Wert kann über ein MQTT-Topic veröffentlicht werden. |
| MQTT → Subscribe → Datenpunkt | Ein abonniertes MQTT-Topic kann einen neuen Wert in den Datenpunkt schreiben. |
Die Programmlogik arbeitet dadurch mit technischen Namen wie raumtemperatur, licht_flur oder energie_zaehler. Sie muss nicht wissen, ob ein Wert ursprünglich von einem Sensor, einem MQTT-Topic oder einem Modbus-Register stammt. Quelle oder Ziel können später geändert werden, ohne die fachliche Logik grundsätzlich umzubauen.
Aufbau eines Datenpunkts
Ein Datenpunkt enthält typischerweise:
| Eigenschaft | Bedeutung |
|---|---|
| ID | Eindeutige interne Nummer |
| Name | Technischer Name für Logik und Referenzen |
| Label | Lesbarer Anzeigename |
| Beschreibung | Dokumentation des Zwecks |
| Datentyp | Art des gespeicherten Werts |
| Einheit | Anzeige- und Interpretationshilfe |
| Klasse | Fachliche Einordnung |
| Qualität | Zustand des aktuellen Werts |
| Lese-Binding | Quelle, aus der der Wert gelesen wird |
| Schreib-Binding | Ziel, auf das der Wert geschrieben wird |
| MQTT-Konfiguration | Optionale Veröffentlichung oder Beschreibung per MQTT |
| Persistenz | Optionale Speicherung des letzten Werts |
Datentypen
| Typ | Verwendung |
|---|---|
| Boolean | Schaltzustände, Freigaben, Binärsignale |
| Integer | Zähler, Stufen, ganzzahlige Werte |
| Float | Messwerte wie Temperatur, Spannung oder Leistung |
| String | Texte, Zustände oder externe Meldungen |
Der Datentyp bestimmt, wie Werte gespeichert, angezeigt und in JavaScript verarbeitet werden.
Klassen
Datenpunkte können fachlich klassifiziert werden. Diese Klasse hilft bei Anzeige, Interpretation und Integration.
| Klasse | Typische Bedeutung |
|---|---|
| Sonstiges | Allgemeiner Wert |
| Temperatur | Temperaturmesswert |
| Feuchte | Luftfeuchtigkeit |
| Spannung | Elektrische Spannung |
| Strom | Elektrischer Strom |
| Leistung | Momentanleistung |
| Energie | Verbrauch oder Erzeugung |
| Zustand | Betriebs- oder Schaltzustand |
| Sollwert | Vorgabewert |
| Zähler | Zählwert |
| Text | Textinformation |
Qualität
Ein Datenpunkt besitzt neben dem Wert auch eine Qualität. Dadurch kann die Logik unterscheiden, ob ein Wert aktuell und vertrauenswürdig ist.
| Qualität | Bedeutung |
|---|---|
| Unbekannt | Noch kein verlässlicher Zustand bekannt |
| Gut | Wert ist gültig |
| Veraltet | Wert wurde länger nicht aktualisiert |
| Fehler | Beim Lesen oder Schreiben ist ein Fehler aufgetreten |
| Nicht verfügbar | Quelle oder Ziel ist nicht verfügbar |
Bindings
Bindings verbinden einen Datenpunkt mit einer realen Quelle oder einem Ziel.
| Binding | Zweck |
|---|---|
| 1-Wire | Wert von einem 1-Wire-Gerät lesen |
| Modbus | Wert aus Modbus lesen oder nach Modbus schreiben |
| MQTT | Wert aus MQTT lesen oder nach MQTT schreiben |
| Digitaler Eingang | Zustand, Tastendruck oder Zähler eines Eingangs lesen |
| Digitaler Ausgang | Ausgangszustand lesen oder schreiben |
Ein Datenpunkt kann ein Lese-Binding und ein Schreib-Binding besitzen. Dadurch sind Übersetzungen zwischen Schnittstellen möglich.
Beispiele:
- MQTT-Topic schreibt einen Datenpunkt, Datenpunkt schaltet einen Ausgang.
- Digitaler Eingang schreibt einen Datenpunkt, Datenpunkt wird per MQTT veröffentlicht.
- Modbus-Register liest einen Datenpunkt, lokale Logik verarbeitet ihn weiter.
- 1-Wire-Sensor aktualisiert einen Temperaturdatenpunkt, Weboberfläche und MQTT zeigen denselben Wert.
Lese- und Schreibpfad
Der Lesepfad aktualisiert den Wert eines Datenpunkts.
Sensor / Eingang / Protokoll -> Datenpunkt
Der Schreibpfad setzt den Wert an einem Ziel.
Datenpunkt -> Ausgang / Protokoll / Zielsystem
Wenn beide Pfade kombiniert werden, wird der Datenpunkt zu einer neutralen Vermittlungsebene zwischen Systemen.
Skalierung und Umrechnung
Für Protokoll- und Sensorwerte können Skalierung und Offset verwendet werden.
logischer Wert = Rohwert * Skalierung + Offset
Das ist hilfreich, wenn externe Systeme Werte in anderen Einheiten oder Auflösungen liefern.
Beispiele:
- Modbus liefert
235, der Datenpunkt zeigt23,5 °C. - Ein Rohwert wird von Volt in Prozent umgerechnet.
- Ein MQTT-Wert wird vor der lokalen Verarbeitung angepasst.
MQTT
Datenpunkte können über MQTT veröffentlicht oder beschrieben werden.
Für jeden Datenpunkt kann festgelegt werden:
- ob der Wert veröffentlicht wird
- ob der Wert per MQTT beschrieben werden darf
- ob Standardtopics oder eigene Topics verwendet werden
- ob Retain aktiv ist
- welches QoS verwendet wird
Damit kann ein Datenpunkt direkt in externe Systeme eingebunden werden, ohne dass die lokale Logik eigene MQTT-Behandlung schreiben muss.
Persistenz
Datenpunkte können persistent gespeichert werden. Das ist nützlich für Werte, die nach einem Neustart wieder verfügbar sein sollen.
Typische Beispiele:
- Betriebsarten
- Sollwerte
- Zählerstände
- zuletzt gesetzte Zustände
Persistenz sollte gezielt verwendet werden. Flüchtige Messwerte müssen meist nicht dauerhaft gespeichert werden.
Verwendung in der lokalen Logik
In JavaScript werden Datenpunkte über das Objekt dp verwendet.
| Funktion | Zweck |
|---|---|
dp.get |
Aktuellen Wert lesen |
dp.set |
Wert setzen |
dp.toggle |
Booleschen Wert umschalten |
dp.state |
Statusinformationen zum Datenpunkt lesen |
Beispiel:
const temperatur = dp.get("raumtemperatur");
if(temperatur > 28) {
dp.set("luefter", true);
}
Datenpunkte und Ereignisse
Datenpunkte können Ereignisse auslösen.
| Ereignis | Bedeutung |
|---|---|
| Wertänderung | Der Wert hat sich geändert |
| Wertaktualisierung | Der Wert wurde aktualisiert, auch wenn er gleich geblieben ist |
| Statusänderung | Die Qualität oder Gültigkeit hat sich geändert |
| Fehler | Beim Datenpunkt ist ein Fehler aufgetreten |
Der Unterschied zwischen Änderung und Aktualisierung ist wichtig:
- Wertänderung eignet sich für Schaltlogik.
- Wertaktualisierung eignet sich für Überwachung, Logging oder zyklische Weitergabe.
Weitere Details zur Ausführung sind unter Ereignisse beschrieben.
Gute Praxis
- Verwenden Sie sprechende technische Namen, z. B.
raumtemperatur_buero. - Nutzen Sie Labels für lesbare Anzeigenamen.
- Setzen Sie die passende Klasse und Einheit.
- Verwenden Sie Datenpunkte als Schnittstelle zwischen Logik und Hardware.
- Vermeiden Sie direkte Protokollabhängigkeiten in JavaScript, wenn ein Datenpunkt genügt.
- Nutzen Sie Persistenz nur für Werte, die nach einem Neustart relevant bleiben.
- Unterscheiden Sie bewusst zwischen Wertänderung und Wertaktualisierung.
Beispiel
Eine einfache Raumtemperaturregelung kann so aufgebaut sein:
- Ein DS18B20 liefert die Temperatur über 1-Wire.
- Der Wert wird in den Datenpunkt
raumtemperaturgeschrieben. - Ein Ereignis reagiert auf Wertänderungen dieses Datenpunkts.
- Die lokale Logik vergleicht den Wert mit einem Sollwert.
- Der Datenpunkt
heizung_freigabewird gesetzt. - Dieser Datenpunkt schaltet einen digitalen Ausgang und wird optional per MQTT veröffentlicht.
Die Logik bleibt dadurch verständlich: Sie arbeitet mit raumtemperatur und heizung_freigabe, nicht mit Busadressen, Klemmen oder MQTT-Topics.