OH rechnet falsch
Verfasst: 1. Jun 2022 17:16
Hallo ich wieder,
In einer DSL Rule errechne ich einen Wert (Zeile 36). Die Rule läuft auch sauer durch, jedoch kommt ein falsches Ergebnis heraus.
selbst wenn ich die Variablen durch echte Werte ersetzte, stimmt das Ergebnis nicht.
Zur Fehlersuche habe ich im Log die einzelnen Variablenwerte anzeigen lassen.
Wird noch lustiger: Nach Änderungen in der Rule, egal welcher Art. Kommt als Ergebnis immer ein negativer Wert raus. Nach Neustart von OH ist der Wert wieder Positiv.
Müssen vielleicht noch irgendwelche Bibliothek geladen werden?
Stört Euch bitte nicht an dem chaotischen Rest , ist noch lange nicht fertig....
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....
