-
-
Notifications
You must be signed in to change notification settings - Fork 15
Skripte
mdzio edited this page Feb 28, 2019
·
28 revisions
Der CCU-Historian besitzt eine Skriptumgebung, die direkten Zugriff auf die Datenbank besitzt. Dadurch eröffnen sich vielfältige Anwendungen: Automatisierte Massenkonfiguration, Erstellung von Statistiken und Analysen, Manipulation von Zeitreihen, usw.. Skripte können über Werkzeuge → Skriptumgebung eingegeben und ausgeführt werden. Weitere Informationen sind im Handbuch Abschnitt Skriptumgebung zu finden. In den folgenden Abschnitten sind Beispielskripte aufgeführt.
Mit dem folgenden Skript kann die Deltakompression automatisch für alle Datenpunkt gesetzt werden.
/*
Autokonfiguration Deltakompression V1.0.0
Wichtig: Vor Anwendung des Skripts ein Backup der Datenbank erstellen!
*/
// *** Konfiguration ***
// Testlauf durchführen? Bei einem Testlauf wird die Datenbank nicht verändert.
// (Ja: true, Nein: false)
def testRun=true
// Sollen bereits konfigurierte Vorverarbeitungen überschrieben werden?
// (Ja: true, Nein: false)
def overrideAll=true
// Sollen auch nicht geänderte Datenpunkte aufgelistet werden?
// (Ja: true, Nein: false)
def logNotChanged=false
// *** Skript ***
println "*** Autokonfiguration Deltakompression V1.0.0 ***"
println "Testlauf: ${testRun?"Ja":"Nein"}"
println "Alle überschreiben: ${overrideAll?"Ja":"Nein"}"
println "Alle auflisten: ${logNotChanged?"Ja":"Nein"}"
database.dataPoints.each { dp ->
def currentCompr=getPreprocType(dp)
def currentParam=getPreprocParam(dp)
if (currentCompr!=PreprocType.DISABLED && !overrideAll) {
println "\n$dp.displayName"
println " Vorhandene Vorverarbeitung wird nicht überschrieben: $currentCompr, $currentParam"
return
}
def type=dp.attributes.type
def ident=dp.id.identifier
def compr=currentCompr
def param=currentParam
if (type=="ACTION") {
compr=PreprocType.DISABLED
param=0.0
} else if (type in ["BOOL", "INTEGER", "ENUM", "ALARM"]) {
compr=PreprocType.DELTA_COMPR
param=0.1
} else if (type=="FLOAT") {
compr=PreprocType.DELTA_COMPR
param=0.000001
} else if (type=="STRING") {
compr=PreprocType.DELTA_COMPR
param=0.0
}
if (currentCompr!=compr || currentParam!=param) {
println "\n$dp.displayName"
println " Vorverarbeitung wird abgeändert: $compr, $param"
if (!testRun) {
dp.attributes.preprocType=compr.ordinal()
dp.attributes.preprocParam=(compr==PreprocType.DISABLED ? null : param)
database.updateDataPoint(dp)
}
} else {
if (logNotChanged) {
println "\n$dp.displayName"
println " Vorverarbeitung muss nicht geändert werden: $compr, $param"
}
}
}
def getPreprocType(dp) {
int idx=(dp.attributes.preprocType as Integer)?:PreprocType.DISABLED.ordinal()
if (idx<0 || idx>=PreprocType.values().length) {
throw new Exception("Invalid preprocessing type in database: "+idx)
}
PreprocType.values()[idx]
}
def getPreprocParam(dp) {
(dp.attributes.preprocParam as Double)?:0.0
}