OH rechnet falsch

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
MirkoB
Beiträge: 27
Registriert: 6. Nov 2021 17:41
Answers: 0
Wohnort: Unterfranken

OH rechnet falsch

Beitrag von MirkoB »

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.

Code: Alles auswählen

aRollo = Math::tan(sunElevation) * b          // Berechnung der Fensteröffnung gemäß Sonnenstand
selbst wenn ich die Variablen durch echte Werte ersetzte, stimmt das Ergebnis nicht.

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
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.... :?
Pi 4 8GB
Openhabian
openHAB 3.4.1.
Zigbee, MQTT, Shelly, uvm.

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: OH rechnet falsch

Beitrag von udo1toni »

Frage 1: ist das die richtige Funktion? Manchmal heißen Funktionen im englischen anders als im deutschen (bei Tangens bin ich mir halt nicht zu 100% sicher, ob der nicht anders heißt)
Frage 2: Welches Maß wird verwendet? 360° für einen Vollkreis, 400° für einen Vollkreis, oder am Ende zwei Pi (Ähhhh... Bogenmaß?)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

pauliv_de
Beiträge: 31
Registriert: 31. Jan 2019 23:59
Answers: 0
Wohnort: Gütersloh

Re: OH rechnet falsch

Beitrag von pauliv_de »

Ich habe zwar keine Lösung, aber vielleicht hilft dieser Link
https://www.openhab.org/docs/configurat ... onversions
dort gibt es einen Hinweis... Take care with maths around Quantity Types. While you can freely mix units in many cases, there are pitfalls. ....
Raspberry Pi 3 Model B Rev 1.2, piVCCU version: 3.73.9-87, openHAB version: 4.1.0 Release Build

MirkoB
Beiträge: 27
Registriert: 6. Nov 2021 17:41
Answers: 0
Wohnort: Unterfranken

Re: OH rechnet falsch

Beitrag von MirkoB »

udo1toni hat geschrieben: 1. Jun 2022 19:29 Frage 1: ist das die richtige Funktion? Manchmal heißen Funktionen im englischen anders als im deutschen (bei Tangens bin ich mir halt nicht zu 100% sicher, ob der nicht anders heißt)
Frage 2: Welches Maß wird verwendet? 360° für einen Vollkreis, 400° für einen Vollkreis, oder am Ende zwei Pi (Ähhhh... Bogenmaß?)
Frage1: keine Ahnung
Frage2: ich gehen von einem 360° Kreis aus . Ich bekomme die Daten aus dem Astro Binding , Lokale Sonnedaten , Höhenwinkel
Pi 4 8GB
Openhabian
openHAB 3.4.1.
Zigbee, MQTT, Shelly, uvm.

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: OH rechnet falsch

Beitrag von udo1toni »

MirkoB hat geschrieben: 2. Jun 2022 07:26 Frage2: ich gehen von einem 360° Kreis aus . Ich bekomme die Daten aus dem Astro Binding , Lokale Sonnedaten , Höhenwinkel
Für den Eingangswert: Ja, Astro basiert auf 360° Vollkreis. Aber was erwartet Math::tan()?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
rfu
Beiträge: 24
Registriert: 8. Okt 2021 15:41
Answers: 0

Re: OH rechnet falsch

Beitrag von rfu »

Java Math.tan() erwartet einen Radiant... https://www.javatpoint.com/java-math-tan-method
openHAB 3.3.0 im docker

MirkoB
Beiträge: 27
Registriert: 6. Nov 2021 17:41
Answers: 0
Wohnort: Unterfranken

Re: OH rechnet falsch

Beitrag von MirkoB »

Danke, muss ich mir mal ansehen ;)
Pi 4 8GB
Openhabian
openHAB 3.4.1.
Zigbee, MQTT, Shelly, uvm.

MirkoB
Beiträge: 27
Registriert: 6. Nov 2021 17:41
Answers: 0
Wohnort: Unterfranken

Re: OH rechnet falsch

Beitrag von MirkoB »

mal ne schnelle Skizze . Ziel ist es mein Rollo immer soweit herunter zu fahren, das es gerade so nicht blendet.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Pi 4 8GB
Openhabian
openHAB 3.4.1.
Zigbee, MQTT, Shelly, uvm.

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: OH rechnet falsch

Beitrag von udo1toni »

Gut, dann bekommt man die passende Formel z.B. hier: https://de.wikipedia.org/wiki/Radiant_(Einheit) (2π/360 °)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten