Jalousien nach Sonnenstand

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Markus_JE
Beiträge: 138
Registriert: 6. Okt 2019 13:20

Re: Jalousien nach Sonnenstand

Beitrag von Markus_JE »

Gaga hin oder her. Keine Ahnung wo der Name herkommt.
Was soll ich denn noch machen das man das erkennen kann?

Und wie bitte bekomme ich die Zeilennummern da rein kopiert?

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

Re: Jalousien nach Sonnenstand

Beitrag von udo1toni »

Achso, ich möchte empfehlen, dass Du die Indentation beachtest. Das ist zwar in der DSL für den Ablauf irrelevant, hilft aber den Code zu lesen :)
Meist sitzen die Tabs im 4er Abstand, ein Tab führt also auf ein Stelle "mehrfaches von 4". Hier in der Forensoftware ist es aber so, dass ein Tab ein mehrfaches von 8 ist, das führt dann zu zusätzlichen Verschiebungen.

Zum eigentlichen Problem... eventuell ist die Strahlungsintensität ebenfalls einheitenbehaftet (habe da nicht drauf geachtet). Weiterhin habe ich ja den Bewölkungsgrad mit eingebaut. Das funktioniert natürlich nur dann, wenn Du auch ein entsprechendes Item hast. der Bewölkungsgrad wird in % angegeben, das wäre also ein Wert zwischen 0 und 100.
Hier mal eine hoffentlich robustere Version:

Code: Alles auswählen

val nElevationMin = 0          //  10
val nElevationMax = 300        //  45
val nAzimutMin = 0             // 130
val nAzimutMax = 210           // 210
val nIntensityMin = 0          //  80
val nCloudynessMax = 110       //  40

rule "Beschattung"
when
    Item LokaleSonnendaten_Position_Elevation changed
then
    if(!(LokaleSonnendaten_Position_Elevation.state instanceof Number)) {
        logWarn("shade","Elevation ungültig! Abbruch!")
        return;
    }
    if(!(LokaleSonnendaten_Azimut.state instanceof Number)) {
        logWarn("shade","Azimut ungültig! Abbruch!")
        return;
    }
    val nElevation = (LokaleSonnendaten_Position_Elevation.state as Number).floatValue
    val nAzimut = (LokaleSonnendaten_Azimut.state as Number).floatValue

    var nIntens = 100
    if(LokaleSonnendaten_DirekteStrahlung.state instanceof Number)
        nIntens = (LokaleSonnendaten_DirekteStrahlung.state as Number).floatValue

    var nCloud = 0
    if(LokaleWettervorhersage_Bewolkung.state instanceof Number)
        nCloud = (LokaleWettervorhersage_Bewolkung.state as Number).intValue

    if(nElevation < nElevationMin || nElevation > nElevationMax ||
       nAzimut < nAzimutMin || nAzimut > nAzimutMax || 
       nIntens < nIntensityMin || 
       nCloud > nCloudynessMax) {
        logInfo("shade","Rolladen Büro und Kinderzimmer Beschattung aus!")
    } else {
        logInfo("shade","Rolladen Büro und Kinderzimmer Beschattung an!")
        DGBuero.sendCommand(50)
        DGKind.sendCommand(50)
    }
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Markus_JE
Beiträge: 138
Registriert: 6. Okt 2019 13:20

Re: Jalousien nach Sonnenstand

Beitrag von Markus_JE »

Hi,

danke dir. Das Item habe ich letztes mal schon gesehen und umbeannt in mein Item der Bewölkung (LokaleWettervorhersage_Bewolkung)
Ich bekomme auch keinen Fehler mehr im Logging aber immer nur die Log Info "Rolladen Büro und Kinderzimmer Beschattung aus!"
Trotz der Parameter wie ich sie oben definiert habe (min/max werte) läuft die Regel nicht weiter durch.
Ich habe den nElevationMin auf -50 gesetzt funktioniert dies überhaupt in Bezug auf instanceof number ? (Negativwerte)

Da der Elevationswinkel im Moment bei ca -20 steht

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

Re: Jalousien nach Sonnenstand

Beitrag von udo1toni »

Na dann hilft es nix, muss halt mehr Logging rein...
Diesen Block

Code: Alles auswählen

    logInfo("shade","Elevation: Min({}) Max({}) aktuell:{}",nElevationMin,nElevationMax,nElevation)
    logInfo("shade","   Azimut: Min({}) Max({}) aktuell:{}",nAzimutMin,nAzimutMax,nAzimut)
    logInfo("shade","Intensity: Min({}) aktuell:{}",nIntensityMin,nIntens)
    logInfo("shade","    Cloud: Max({}) aktuell:{}",nCloudynessMax,nCloud)
vor der Zeile

Code: Alles auswählen

    if(nElevation < nElevationMin || nElevation > nElevationMax ||
       nAzimut < nAzimutMin || nAzimut > nAzimutMax || 
       nIntens < nIntensityMin || 
       nCloud > nCloudynessMax) {
einfügen, dann siehst Du die konkret genutzten Werte.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Markus_JE
Beiträge: 138
Registriert: 6. Okt 2019 13:20

Re: Jalousien nach Sonnenstand

Beitrag von Markus_JE »

Hi Udo,

wie cool.
Azimut max hatte nicht gepasst. Habe ich angepasst.
Jetzt kommt aber wieder diese Meldung.
2021-03-05 20:43:29.619 [INFO ] [org.openhab.core.model.script.shade ] - Elevation: Min(-50) Max(300) aktuell:-25.00499

2021-03-05 20:43:29.624 [INFO ] [org.openhab.core.model.script.shade ] - Azimut: Min(0) Max(500) aktuell:291.34424

2021-03-05 20:43:29.628 [INFO ] [org.openhab.core.model.script.shade ] - Intensity: Min(0) aktuell:0.0

2021-03-05 20:43:29.632 [INFO ] [org.openhab.core.model.script.shade ] - Cloud: Max(110) aktuell:12

2021-03-05 20:43:29.645 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'SonnenschutzBüro-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_lessThan(int,int) on instance: null in SonnenschutzBüro
Ich gehe davon aus das diese Meldung kommt wenn die Werte für den Start der Beschattung passen würden

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Jalousien nach Sonnenstand

Beitrag von int5749 »

Markus_JE hat geschrieben: 5. Mär 2021 20:45 Ich gehe davon aus das diese Meldung kommt wenn die Werte für den Start der Beschattung passen würden
Nein, die Meldung ist ja ein Fehler

Ich habe das gerade mal nachgebaut und bei mir kommt diese Meldung nicht
22:04:06.659 [INFO ] [org.openhab.core.model.script.shade ] - Elevation: Min(0) Max(300) aktuell:-33.32822
22:04:06.659 [INFO ] [org.openhab.core.model.script.shade ] - Azimut: Min(0) Max(210) aktuell:308.66458
22:04:06.663 [INFO ] [org.openhab.core.model.script.shade ] - Intensity: Min(0) aktuell:0.0
22:04:06.663 [INFO ] [org.openhab.core.model.script.shade ] - Cloud: Max(110) aktuell:0
22:04:06.671 [INFO ] [org.openhab.core.model.script.shade ] - Rolladen Büro und Kinderzimmer Beschattung aus!
Ich habe die Items derzeit als simple "Number" angelegt

Code: Alles auswählen

Number LokaleSonnendaten_Azimut			"Azimuth"	      { channel="astro:sun:local:position#azimuth" }
Number LokaleSonnendaten_Position_Elevation   "Elevation"      { channel="astro:sun:local:position#elevation" }
Number LokaleSonnendaten_DirekteStrahlung     "Strahlung"      { channel="astro:sun:local:radiation#direct" }
Number LokaleWettervorhersage_Bewolkung       "Wolken"         { channel="openweathermap:weather-and-forecast:api:local:current#cloudiness" }
Wie sehen Deine Items aus??
Zuletzt geändert von int5749 am 5. Mär 2021 22:32, insgesamt 2-mal geändert.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Jalousien nach Sonnenstand

Beitrag von int5749 »

udo1toni hat geschrieben: 5. Mär 2021 19:52 Das ist komplett gaga... Warum wird da einfach ein frei erfundener Name generiert? Wo kommt der Name her? Und wie bitte soll man einen Fehler eingrenzen, wenn keine Zeilennummern angegeben werden? ~grummel~
Dies ist leider eine Eigenart von OH3, Der Name ist einfach der Name der Datei und dann werden die enthaltenen Rules hochgezählt und der Name der Rule als Identifier

In meinem Fall
Beschattung
Test-1
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Jalousien nach Sonnenstand

Beitrag von int5749 »

Markus_JE hat geschrieben: 5. Mär 2021 20:24 Trotz der Parameter wie ich sie oben definiert habe (min/max werte) läuft die Regel nicht weiter durch.
Ich habe den nElevationMin auf -50 gesetzt funktioniert dies überhaupt in Bezug auf instanceof number ? (Negativwerte)
Evtl. habe ich ja auch noch nicht verstanden, wann genau die Rollladen bei Dir fahren sollen, aber

Code: Alles auswählen

if(nElevation < nElevationMin || nElevation > nElevationMax ||
    nAzimut < nAzimutMin || nAzimut > nAzimutMax || 
    nIntens < nIntensityMin || 
    nCloud > nCloudynessMax) {
bedeutet ja, das nur einer der angegebenen Vergleiche wahr sein muß um eben "Rolladen Büro und Kinderzimmer Beschattung aus!" zu triggern
||
bedeutet "oder"
&&
wäre z.B. ein "und" Vergleich
Und verschachteln könntest Du, indem Du Klammern um Vergleiche setzen würde.

Dait wären wir wieder bei "Wie, wann, wo (weiß nicht Obi) aber sollte klar definiert sein ;)
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Jalousien nach Sonnenstand

Beitrag von udo1toni »

int5749 hat geschrieben: 5. Mär 2021 22:30
udo1toni hat geschrieben: 5. Mär 2021 19:52 Das ist komplett gaga... Warum wird da einfach ein frei erfundener Name generiert? Wo kommt der Name her? Und wie bitte soll man einen Fehler eingrenzen, wenn keine Zeilennummern angegeben werden? ~grummel~
Dies ist leider eine Eigenart von OH3, Der Name ist einfach der Name der Datei und dann werden die enthaltenen Rules hochgezählt und der Name der Rule als Identifier

In meinem Fall
Beschattung
Test-1
Ah, jetzt, ja. Das war der eine Parameter, den ich nicht kannte... so ist es natürlich wieder einigermaßen sinnvoll. Fehlende Zeilennummern sind aber trotzdem unschön.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Jalousien nach Sonnenstand

Beitrag von udo1toni »

int5749 hat geschrieben: 5. Mär 2021 22:57
Markus_JE hat geschrieben: 5. Mär 2021 20:24 Trotz der Parameter wie ich sie oben definiert habe (min/max werte) läuft die Regel nicht weiter durch.
Ich habe den nElevationMin auf -50 gesetzt funktioniert dies überhaupt in Bezug auf instanceof number ? (Negativwerte)
Evtl. habe ich ja auch noch nicht verstanden, wann genau die Rollladen bei Dir fahren sollen, aber

Code: Alles auswählen

if(nElevation < nElevationMin || nElevation > nElevationMax ||
    nAzimut < nAzimutMin || nAzimut > nAzimutMax || 
    nIntens < nIntensityMin || 
    nCloud > nCloudynessMax) {
bedeutet ja, das nur einer der angegebenen Vergleiche wahr sein muß um eben "Rolladen Büro und Kinderzimmer Beschattung aus!" zu triggern
||
bedeutet "oder"
&&
wäre z.B. ein "und" Vergleich
Und verschachteln könntest Du, indem Du Klammern um Vergleiche setzen würde.

Dait wären wir wieder bei "Wie, wann, wo (weiß nicht Obi) aber sollte klar definiert sein ;)
Das VerODERn ist hier schon in Ordnung, es geht darum, dass die Rollläden nur dann in die Beschattung gehen sollen, wenn alle Parameter oberhalb des Minimum und unterhalb des Maximum sind.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten