In einer DSL Rule errechne ich einen Wert (Zeile 36). Die Rule läuft auch sauer durch, jedoch kommt ein falsches Ergebnis heraus.
Code: Alles auswählen
aRollo = Math::tan(sunElevation) * b // Berechnung der Fensteröffnung gemäß Sonnenstand
Code: Alles auswählen
var Number BelDecke = null
var Number preJalFenster // Ist-Zustand Jalousie Fenster Wohnzimmer
var Number preJalTuer // Ist-Zustand Jalousie Balkontür
var Number preJalWest // Ist-Zustand Jalousie Fenster West Wohnzimmer
var double sunEnd // Sonnenuntergang in Variable setzen
val double b = 2.3 // Constante "b" Abstand TV - Fenster UK
val double c = 2.74 // Constante "c" Abstand TV - Fenster OK
val double a = 1.57 // Constante "a" Höhen Fenster
var double aRollo = 0 // Variable "a" Abstand UK Fenster - UK Rollo
var double sunElevation
var double wAlpha = 0 // Winkel Alpha
rule "Wohnzimmer TV "
when
Item TESTSCHALTER changed
then
var Number preJalFenster = WohnzimmerRolloFenster_Steuerung0offen100geschlossen.state as Number // Ist-Zustand Jalousie Fenster Wohnzimmer
var Number preJalTuer = WohnzimmerRolloTuer_Steuerung0offen100geschlossen.state as Number // Ist-Zustand Jalousie Balkontür
var Number preJalWest = WohnzimmerRolloWest_Steuerung0offen100geschlossen.state as Number // Ist-Zustand Jalousie Fenster West Wohnzimmer
val SwitchNum = if (WohnzimmerLicht_Betrieb.state == ON) 1 else 0 // Ist-Zustand Deckenlicht
val sunEnd = (LokaleSonnendaten_AstroDusk_Start.state as DateTimeType).getZonedDateTime() // Sonnenuntergang in Variable setzen
//val day_start = (AstroSunData_Rise_StartTime.state as DateTimeType)
//val evening_start = (AstroSunData_Set_StartTime.state as DateTimeType).getZonedDateTime()
sunElevation = (LokaleSonnendaten_Position_Elevation.state as QuantityType<Number>).doubleValue
aRollo = Math::tan(sunElevation) * b // Berechnung der Fensteröffnung gemäß Sonnenstand
var Number aRolloProzent = ((aRollo * 100)/a) // Umstellen der Öffnunggrösse aus Prozent
logInfo("TV_Sonnenstand", "Tangens aus Variable sunElevation"+ " " + Math::tan(sunElevation) )
logInfo("TV_Sonnenstand", "Fensteröffnung Variable aRollo " + aRollo)
logInfo("TV_Sonnenstand", "Fensteröffnung in Variable aRolloProzent" + " " + aRolloProzent)
logInfo("TV_Sonnenstand", "Sonnenstand Variable sunElevation" + " "+ sunElevation)
logInfo ("Sonnenaufgang um ",""+ sunEnd)
if (now.isAfter(sunEnd))
{ logInfo("TV-Modus", "nach Sonnenuntergang")
}
if((now.isBefore(sunEnd)) && (WZBalkontur_FKswitch.state == (ON)))
{ logInfo("TV-Modus", "vor Sonnenuntergang")
}
end
Zur Fehlersuche habe ich im Log die einzelnen Variablenwerte anzeigen lassen.
Code: Alles auswählen
2022-06-01 17:06:36.564 [INFO ] [hab.core.model.script.TV_Sonnenstand] - Sonnenstand Variable sunElevation 37.85849688964969
2022-06-01 17:06:36.589 [INFO ] [hab.core.model.script.TV_Sonnenstand] - Tangens aus Variable sunElevation 0.16074855440426897
2022-06-01 17:06:36.593 [INFO ] [hab.core.model.script.TV_Sonnenstand] - Fensteröffnung Variable aRollo 0.36972167512981857
2022-06-01 17:06:36.597 [INFO ] [hab.core.model.script.TV_Sonnenstand] - Fensteröffnung in Variable aRolloProzent 23.549151282154046
2022-06-01 17:06:36.603 [INFO ] [hab.core.model.script.TV_Sonnenstand] - Sonnenstand Variable sunElevation 37.85849688964969
Müssen vielleicht noch irgendwelche Bibliothek geladen werden?
Stört Euch bitte nicht an dem chaotischen Rest , ist noch lange nicht fertig....
