Seite 2 von 7

Re: Jalousien nach Sonnenstand

Verfasst: 4. Mär 2021 16:55
von udo1toni
Markus_JE hat geschrieben: 2. Mär 2021 12:22 Der Aktor verhält sich so dass wenn eine Positionsfahrt angefahren wird, und ich im währenden die Lamellen verstellen möchte bzw. tue, wird die Positionsfahrt unterbrochen.
Ich denke das ist so auch richtig da die Lamellen beim hoch fahren in die eine Richtung verstellen und beim runter fahren in die andere Richtung. Eigentlich wäre die richtige Lösung zuerst die Position anfahren und danach die Lamellen in die richtige Position stellen.

Gruß Markus
Ja, das ist der Punkt. "richtig" wäre in meinen Augen, die Positionsfahrt auszuführen und anschließend die Lamellen wieder in die letzte bekannte Position zu drehen, aber ich gebe zu, dass das schon etwas mehr Aufwand in der Firmware wäre. Also müsste man das besser über eine Rule erledigen.

Re: Jalousien nach Sonnenstand

Verfasst: 5. Mär 2021 12:56
von Markus_JE
Hi Udo,

ich nehme jetzt mal die Basis deiner Rule und hatte versucht relativ einfach umzumodeln das die Rolladen auf Wert 50 fahren wenn die Vorgaben erfüllt sind. Leider bekommen ich hier einen seltsamen Fehler im Logging.
Weißt du wo ich da ran muss?


Rule:

Code: Alles auswählen

val nElevationMin = 10	//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                   

    var nCloud = 0                                                                      
    if(LokaleWettervorhersage_Bewolkung.state instanceof Number)                        
        nCloud = LokaleWettervorhersage_Bewolkung.state as Number                                                                                      
        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
Error Log:

Code: Alles auswählen

2021-03-05 12:53:56.477 [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

Danke Markus

Re: Jalousien nach Sonnenstand

Verfasst: 5. Mär 2021 13:30
von udo1toni
Nein, das ist nicht diese Rule. :)

Re: Jalousien nach Sonnenstand

Verfasst: 5. Mär 2021 13:38
von Markus_JE
HI Udo,

nein natürlich nicht im original.
Ich habe dies auch auf das DG umgemodelt bzw. versucht. Hier sind Rollläden vorhanden.
Da meine Kenntnisse nicht so umfassend sind wollte ich klein anfangen.

Diese werden auch nicht via Szene angesteuert sondern nur auf Position gefahren.
Trotzdem komme ich hier nicht weiter. Tut mir Leid wenn ich hier etwas Verwirrung rein gebracht habe.

Kannst du mir sagen wo der Fehler herkommen kann?

Markus

Re: Jalousien nach Sonnenstand

Verfasst: 5. Mär 2021 13:47
von udo1toni
Der Fehler kommt aus der Rule SonnenschutzBüro-1.
Solange ich diese Rule nicht sehe, kann ich Dir auch nicht sagen, woher der Fehler kommt :)

Re: Jalousien nach Sonnenstand

Verfasst: 5. Mär 2021 14:01
von Markus_JE
Jetzt versteh ich gar nichts mehr. Die Rule ist als Rule DSL via Text file im ordner Rules erstellt.
Die Rule welche ich hier jetzt poste ist aus der Main UI unter Rules und wird so angezeigt. Das ist die selbe Rule nur mit Ansicht via Main UI.

Code: Alles auswählen

// Triggers:
// - When LokaleSonnendaten_Position_Elevation changed

// context: SonnenschutzBüro-1
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                    

var nCloud = 0                                                                    
if(LokaleWettervorhersage_Bewolkung.state instanceof Number)                        
    nCloud = LokaleWettervorhersage_Bewolkung.state as Number                                                                             
    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)
    }

Re: Jalousien nach Sonnenstand

Verfasst: 5. Mär 2021 15:51
von udo1toni
Nein, wenn die rule in einer *.rules Datei steht, dann musst Du schon die Rule zeigen wie sie in dieser Datei steht. Die UI Ansicht ist nur bei Rules interessant, wie auch über die UI angelegt wurden.

Re: Jalousien nach Sonnenstand

Verfasst: 5. Mär 2021 19:38
von Markus_JE
Hi Udo,

die rule aus dem textfile mit der Bezeichnung "Beschattung"
Das ist deine ursprüngliche welche ich etwas angepasst habe.

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                    

    var nCloud = 0                                                                     
    if(LokaleWettervorhersage_Bewolkung.state instanceof Number)                        
        nCloud = LokaleWettervorhersage_Bewolkung.state as Number                                                                                        
        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
Diese Regel erzeugt in der Main UI unter Rules genau diesen Eintrag
// context: SonnenschutzBüro-1
Bild

Diese Bezeichnung SonnenschutzBüro-1 ist im Logging und verursacht die Meldung.

Re: Jalousien nach Sonnenstand

Verfasst: 5. Mär 2021 19:41
von Markus_JE
Noch ein kleiner Nachtrag.
Bei mir waren dann mal gerade alle Things weg. Also keine mehr unter Things in der Main UI
Habe dann das Backup eingespielt aber alles etwas seltsam.

Re: Jalousien nach Sonnenstand

Verfasst: 5. Mär 2021 19:52
von udo1toni
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~