Berechnungen ohne Blockly: Aliase
Nicht selten kann man sich viel Programmiererei sparen, wenn man stattdessen Aliase verwendet.
Damit werden vorhandene Datenpunkte quasi "gespiegelt" und unterhalb von alias.0 im Objektbaum angelegt.
Die Struktur denkt man sich - wie auch in 0_userdata.0 - selbst aus.
Der entscheidende Punkt um sich ein Blockly zu sparen: Man kann im Alias auch eine "Konvertierungsfunktion" angeben. Mit dieser wird dann der ursprüngliche Wert (meist von einem Adapter geliefert) mehr oder weniger umgewandelt.
Alias anlegen
Hier führen zwei Wege zum Ziel:
Anlegen "von Hand"
Hier wird - wie auch in 0_userdata.0 - der DP (und vorher ggf. die Ordnerstruktur) im Objektbaum angelegt.
a065dbcd-b9f7-400e-bec8-8b09c05dcc6d-grafik.png
Noch viel einfacher geht's, indem man mit der echten Maustaste auf den "Original"-DP klickt und dort "Alias erstellen" wählt.
0aec3593-9b84-48fc-a76c-67c01a83c505-grafik.png
Im weiteren Verlauf wird Methode 2) beschrieben. Methode 1) funktioniert prinzipiell analog.
06dae673-95a8-4bf3-82da-37554088ad0a-grafik.png
In "ID" wird die Objekt-ID unterhalb von alias.0 festgelegt. Hier kann (durch Punkte getrennt) auch eine sinnvolle Struktur und eine passende ID für den DP vergeben werden. Die resultierende ID wird dann ober gezeigt. In "Beschreibung" kann ein erklärender Text vergeben werden. In "Typ" wird der Typ (Zahl, Zeichenkette, Logikwert usw.) des Ziel-DP festgelegt.Der muss nicht zwingend mit dem Typ des Original DP übereinstimmen und hängt von der Konvertierung ab. "Einheit" gibt eine Bezeichnung für die Einheit (m², °C, km/h) mit, die im Objektbaum mit angezeigt wird.
Die Einheit wird nur im Baum angezeigt und ist nicht Teil des Wertes! In der "Konvertierung" kann bei Bedarf der Eingangswert (mehr oder weniger umfangreich) umgerechnet werden.
Dabei steckt in der Variablen val immer der Eingangswert aus dem Original-DP.
Konvertierungsfunktionen
In der Konvertierung können übliche Berechnungen per JavaScript vorgenommen werden.
Das ist der Punkt, an dem man sich nicht selten ein komplettes Blockly sparen kann.
Hier mal eine (unvollständige) Liste mit oft verwendeten Konvertierungen:
Wert aus JSON extrahierenJSON.parse(val).energy.power
JSON.parse(val).months[12].name Impulse in m³ umrechnen (Gas- oder Wasserzähler)
val * 0.01 Windgeschwindigkeit von m/s in km/h umrechnen
val * 60 * 60 / 1000 oder auch val * 3.6 Gleitkommazahlen mit fester Anzahl Nachkommastellen
Math.trunc(val * 100) / 100 (2 Stellen) Byte in Gigabyte
val / 1024 / 1024 / 1024 °C in °F
val * 9 / 5 + 32
Auf die gleiche Art können bei beschreibbaren Datenpunkten die umgewandelten Werte wieder in die Form verwandelt werden, die der Adapter erwartet. val repräsentiert hier den zuvor umgerechneten Wert, der im Alias steckt.
Beispiele:
val / 60 / 60 * 1000 oder val / 3.6 Knoten in km/h
val * 1.852 °F in °C
(val - 32) * 5 / 9
Es macht in der Regel keinen Sinn, nur die Schreibkonvertierung zu verwenden. Wenn beim Schreiben konvertiert wird, sollte der Wert vorher auch beim Lesen konvertiert werden.
.. to be continued