Python Skripte schreiben
Mit der Einführung von Eliona Version 12.2 wurden wichtige Änderungen vorgenommen, die es erforderlich machen, Skripte anzupassen, um das neue API-Design zu nutzen.
Skript-Definition
Wenn ein neues Skript im Eliona-System erstellt wird, wird automatisch ein Funktionsheader generiert. Dieser Header enthält zwei Parameter:
id
: Die eindeutige ID des Skripts.eliona
: Ein Objekt, über das der Benutzer mit dem Eliona-System interagieren kann.
Der Funktionsheader sieht wie folgt aus:
# you may add imports only inside the function
# don't change or delete the function definition
def UserFunction(id, eliona):
# add your code here
Importieren von Modulen
Alle notwendigen Module müssen innerhalb der Funktion importiert werden. Es ist wichtig, dass Module nur innerhalb der Funktion importiert und keine globalen Importe verwendet werden.
Beispiel:
def UserFunction(id, eliona):
import random
# Weitere Codezeilen folgen
Methoden des Eliona-Objekts
Das eliona
-Objekt stellt eine Reihe von Methoden zur Verfügung, die es Benutzern ermöglichen, mit dem Eliona-System zu interagieren. Hier sind die wichtigsten Methoden zusammen mit ihren Parametern und Beschreibungen:
GetHeap
gai: str
, subtype: str
, attribute: str
Ruft den aktuellen Wert eines Attributs oder das gesamte Daten-JSON eines Assets aus dem Heap ab.
SetHeap
gai: str
, subtype: str
, data: dict
, source: str
Sendet Daten an den Calculator, um sie zu verarbeiten und im Heap zu speichern.
GetAssetIDByGAI
gai: str
Gibt die numerische Asset-ID für die angegebene GAI zurück.
GetAll
`ids: list[int
str],
subtype: str`
SQLQuery
query: str
Führt eine beliebige SQL-Abfrage aus und gibt die Ergebnisse als Liste von Tupeln zurück.
MakeSource
id: int
Erzeugt einen Quell-String für Heap-Operationen auf Basis der Function-ID.
OpenFile
name: str
, mode: str
Öffnet eine Datei im Eliona-Arbeitsverzeichnis (analog zu Python’s open()
).
AddAssetTag
gai: str
, tag: str
Fügt einem Asset ein Tag hinzu (falls nicht schon vorhanden).
RemoveAssetTag
gai: str
, tag: str
Entfernt ein Tag von einem Asset (falls vorhanden).
GetTrendRecords
asset_id: int
, subtype: str
, attr: str
, begin: datetime
Ruft historische Messwerte als Liste von TrendRecord(ts, value)
ab dem angegebenen Zeitpunkt ab.
WriteTrendRecords
asset_id: int
, subtype: str
, attr: str
, `recs: TrendRecord
Schreibt einen oder mehrere TrendRecord
-Datensätze ins System.
GetAggregate
agg: Aggregate
, asset_id: int
, subtype: str
, attr: str
,raster: str
, start: datetime
,end: datetime = now()
Berechnet aggregierte Werte (Avg, Sum, Cusum) in festem Raster über einen Zeitraum.
GetLastAggregate
agg: Aggregate
, asset_id: int
, subtype: str
, attr: str
, raster: str
Liefert das aktuellste kumulierte Aggregate im gewählten Raster (inkl. last_ts
).
Beispielskripte
GetHeap
Beschreibung: Ruft den aktuellen Wert eines Attributs oder das gesamte JSON eines Assets aus dem Heap ab.
Parameter:
gai: str
(erforderlich) – GAI des Assets, z. B."K86_WP01"
subtype: str
(erforderlich) – Daten-Subtyp, z. B."input"
attribute: str
(erforderlich) – Attributname, z. B."Aussentemperatur"
Code-Beispiel:
value = eliona.GetHeap("K86_WP01", "input", "Aussentemperatur")
Beispiel-Output:
23.5
SetHeap
Beschreibung: Sendet ein Wörterbuch von Werten an den Calculator, um sie zu verarbeiten und im Heap zu speichern.
Parameter:
gai: str
(erforderlich)subtype: str
(erforderlich)data: dict
(erforderlich) – z. B.{"Aussentemperatur": 23.5}
source: str
(erforderlich) – typischerweiseeliona.MakeSource(id)
Code-Beispiel:
data = {"Aussentemperatur": 23.5}
source = eliona.MakeSource(id)
eliona.SetHeap("K86_WP01", "input", data, source)
GetAssetIDByGAI
Beschreibung: Gibt die numerische Asset-ID für die angegebene GAI zurück.
Parameter:
gai: str
(erforderlich)
Code-Beispiel:
asset_id = eliona.GetAssetIDByGAI("K86_WP01")
GetAll
Beschreibung: Ruft alle Datenpunkte eines bestimmten Subtyps für eine Liste von Assets ab und gibt diese als Dictionary zurück (GAI → Daten).
Parameter:
ids: list[int|str]
(erforderlich) – z. B.["K86_WP01", 1073]
subtype: str
(erforderlich)
Code-Beispiel:
all_data = eliona.GetAll(["K86_WP01"], "input")
SQLQuery
Beschreibung: Führt eine beliebige SQL-Abfrage aus und gibt die Ergebnisse als Liste von Tupeln zurück.
Parameter:
query: str
(erforderlich)
Code-Beispiel:
res = eliona.SQLQuery(
"SELECT data->>'Aussentemperatur' "
"FROM public.heap "
"WHERE gai='K86_WP01' AND subtype='input' "
"ORDER BY timestamp DESC LIMIT 1;"
)
Beispiel-Output:
[('23.5',)]
MakeSource
Beschreibung:
Erzeugt einen Quell-String (z. B. "ssr:123"
) für Heap-Operationen basierend auf der Function-ID.
Parameter:
id: int
(erforderlich)
Code-Beispiel:
pythonKopierenBearbeitensrc = eliona.MakeSource(id)
OpenFile
Beschreibung:
Öffnet eine Datei im Eliona-Arbeitsverzeichnis (analog zu Python’s open()
).
Parameter:
name: str
(erforderlich) – Dateiname, z. B."log.txt"
mode: str
(erforderlich) – z. B."w"
,"r"
Code-Beispiel:
pythonKopierenBearbeitenf = eliona.OpenFile("aussentemp_log.txt", "w")
f.write("Temperatur: 23.5\n")
f.close()
AddAssetTag
Beschreibung: Fügt einem Asset ein Tag hinzu, wenn es noch nicht zugewiesen ist.
Parameter:
gai: str
(erforderlich)tag: str
(erforderlich)
Code-Beispiel:
eliona.AddAssetTag("K86_WP01", "has-aussentemp")
RemoveAssetTag
Beschreibung: Entfernt ein Tag von einem Asset, falls vorhanden.
Parameter:
gai: str
(erforderlich)tag: str
(erforderlich)
Code-Beispiel:
eliona.RemoveAssetTag("K86_WP01", "has-aussentemp")
GetTrendRecords
Beschreibung:
Lädt eine Liste historischer Messwerte (TrendRecord(ts, value)
) ab dem angegebenen Start-Zeitpunkt.
Parameter:
asset_id: int
(erforderlich)subtype: str
(erforderlich)attr: str
(erforderlich)begin: datetime
(erforderlich)
Code-Beispiel:
from datetime import datetime, timedelta
aid = eliona.GetAssetIDByGAI("K86_WP01")
begin = datetime.now() - timedelta(hours=1)
records = eliona.GetTrendRecords(aid, "input", "Aussentemperatur", begin)
WriteTrendRecords
Beschreibung:
Schreibt einen oder mehrere TrendRecord
-Datensätze ins System.
Parameter:
asset_id: int
(erforderlich)subtype: str
(erforderlich)attr: str
(erforderlich)recs: TrendRecord | list[TrendRecord]
(erforderlich)
Code-Beispiel:
from datetime import datetime, timedelta
import eliona_types
aid = eliona.GetAssetIDByGAI("K86_WP01")
now = datetime.now()
r1 = eliona_types.TrendRecord(now, 18.7)
r2 = eliona_types.TrendRecord(now + timedelta(minutes=30), 19.2)
eliona.WriteTrendRecords(aid, "input", "Aussentemperatur", [r1, r2])
GetAggregate
Beschreibung: Berechnet aggregierte Werte (Durchschnitt, Summe, kumulative Summe) in festem Raster über einen Zeitraum.
Parameter:
agg: Aggregate
(erforderlich) – z. B.eliona_types.Aggregate.Avg
asset_id: int
(erforderlich)subtype: str
(erforderlich)attr: str
(erforderlich)raster: str
(erforderlich) – ISO 8601-Duration, z. B."PT1H"
für stündlichstart: datetime
(erforderlich)end: datetime
(optional, default:now()
)
Code-Beispiel:
from datetime import datetime, timedelta
import eliona_types
aid = eliona.GetAssetIDByGAI("K86_WP01")
end = datetime.now()
start = end - timedelta(days=1)
aggs = eliona.GetAggregate(
eliona_types.Aggregate.Avg,
aid, "input", "Aussentemperatur",
"PT1H", start, end
)
Beispiel-Output-Struktur:
[
TrendAggregate(ts=<datetime>, cnt=<int>, avg=<float>,
sum=<float>, first=<float>,
min=<float>, max=<float>, last=<float>),
...
]
GetLastAggregate
Beschreibung:
Gibt das aktuellste kumulierte Aggregate im gewählten Raster zurück (inklusive last_ts
).
Parameter:
agg: Aggregate
(erforderlich)asset_id: int
(erforderlich)subtype: str
(erforderlich)attr: str
(erforderlich)raster: str
(erforderlich)
Code-Beispiel:
import eliona_types
aid = eliona.GetAssetIDByGAI("K86_WP01")
last = eliona.GetLastAggregate(
eliona_types.Aggregate.Cusum,
aid, "input", "Aussentemperatur", "P1D"
)
Beispiel-Output-Struktur:
RunningAggregate(
ts=<datetime>, cnt=<int>, avg=<float>,
sum=<float>, first=<float>,
min=<float>, max=<float>, last=<float>,
last_ts=<datetime>
)
Einfaches Skript zur Manipulation von Daten
Dieses Beispiel zeigt, wie ein Skript einen zufälligen Wert generiert und diesen in den Heap eines Assets schreibt:
def UserFunction(id, eliona):
import random
data = {
"power_val": random.randint(10, 100)
}
eliona.SetHeap("TestInactIn", "input", data, eliona.MakeSource(id))
Beschreibung:
Das Skript importiert das Modul
random
.Es wird ein Wörterbuch
data
erstellt, das einen Schlüsselpower_val
enthält, dem ein zufälliger Wert zwischen 10 und 100 zugewiesen wird.Der generierte Wert wird mit der Methode
SetHeap
in den Heap des AssetsTestInactIn
geschrieben.
Daten abrufen und modifizieren
In diesem Beispiel wird der Wert eines Attributs von einem Asset abgerufen, modifiziert und in einem anderen Asset gespeichert:
def UserFunction(id, eliona):
from datetime import datetime
heap = eliona.GetHeap("TestInactIn", "input")
data = {
"energy_val": heap["power_val"] * 3
}
eliona.SetHeap("TestInactIn", "input", data, eliona.MakeSource(id))
Beschreibung:
Das Skript importiert das Modul
datetime
.Der aktuelle Wert des Attributs
power_val
wird aus dem Heap des AssetsTestInactIn
abgerufen.Dieser Wert wird verdreifacht und als
energy_val
in dasselbe Asset geschrieben.
Erweiterte Funktionen und SQL-Abfragen
Mit der Methode SQLQuery
können beliebige SQL-Abfragen direkt aus dem Skript heraus ausgeführt werden:
def UserFunction(id, eliona):
result = eliona.SQLQuery("SELECT * FROM public.asset WHERE gai = 'TestInactIn';")
# Weitere Verarbeitung des Ergebnisses
Beschreibung:
Die SQL-Abfrage ruft alle Informationen zu dem Asset mit der GAI
TestInactIn
ab.Das Ergebnis kann anschließend weiterverarbeitet werden.
Last updated
Was this helpful?