Hi zusammen
ich habe eine Rule datei in der ich 4 Rolladen nach Zeit steuere.
Das heißt 4 Timer usw, also nicht gerade klein.
Steuere ich ein Rolladen ist alles gut und die Zeiten passen.
Starte ich nun 2 Rolladen fast gleichzeitig steht in den Logs schon etwas von 500ms.
Der nächste Schritt läuft versetzt ab ....
Schlimmer ist es wenn ich alle 4 gleichzeitig fahre, also nicht als Gruppe sondern alle 4 Schieberegler einzeln schnell verschiebe.
Es passiert fast immer das dann jedes Fenster anders stopt.
Nun zur Fehleranalyse ......
Laut meiner Info laufen so viele Rules parallel wie man will aber warum dann die 500ms Warnung ?
Kann es sein das die Rule datei nicht zu groß sein darf und lieber mehrere Ruledatein anlegen ?
Ein Ordner in dem Rule Ordner wird ja ebenfalls mit in die Bearbeitung genommen.
Könnte es Abhilfe schaffen ein Ordner zu erstellen "Rolladen" und darin für jeden Rolladen ein eigene Ruledatei pro Fenster anzulegen ?
Variablen sind ja nicht Global sondern auf die Datei beschenkt ....
Vielleicht liegt es ja auch an etwas ganz anderem ?
Falls es wichtig sein könnte hier die gesamte Rule
MfG
ich habe eine Rule datei in der ich 4 Rolladen nach Zeit steuere.
Das heißt 4 Timer usw, also nicht gerade klein.
Steuere ich ein Rolladen ist alles gut und die Zeiten passen.
Starte ich nun 2 Rolladen fast gleichzeitig steht in den Logs schon etwas von 500ms.
Der nächste Schritt läuft versetzt ab ....
Schlimmer ist es wenn ich alle 4 gleichzeitig fahre, also nicht als Gruppe sondern alle 4 Schieberegler einzeln schnell verschiebe.
Es passiert fast immer das dann jedes Fenster anders stopt.
Nun zur Fehleranalyse ......
Laut meiner Info laufen so viele Rules parallel wie man will aber warum dann die 500ms Warnung ?
Kann es sein das die Rule datei nicht zu groß sein darf und lieber mehrere Ruledatein anlegen ?
Ein Ordner in dem Rule Ordner wird ja ebenfalls mit in die Bearbeitung genommen.
Könnte es Abhilfe schaffen ein Ordner zu erstellen "Rolladen" und darin für jeden Rolladen ein eigene Ruledatei pro Fenster anzulegen ?
Variablen sind ja nicht Global sondern auf die Datei beschenkt ....
Vielleicht liegt es ja auch an etwas ganz anderem ?
Falls es wichtig sein könnte hier die gesamte Rule
Code:
var Timer RolloOGZentralsteuerung
// Variablen Rollo 01 (Büro)
var long StartZeitRollo01
var long DauerZeitRollo01
var long Rollo01ZeitAuf = 34100
var long Rollo01ZeitZu = 15000
var long Rollo01ProzentAlt = 50
var long Rollo01ProzentNeu = 50
var long Rollo01ProzentZiel = 50
var long Rollo01ProzentGefahren = 50
var boolean Rollo01Fahrtrichtungtest //true = hoch false = runter
var Timer Rollo01Fahrt
var Timer Rollo01Nachlauf
// Variablen Rollo 02 (Schlafzimmer)
var long StartZeitRollo02
var long DauerZeitRollo02
var long Rollo02ZeitAuf = 34100
var long Rollo02ZeitZu = 35000
var long Rollo02ProzentAlt = 50
var long Rollo02ProzentNeu = 50
var long Rollo02ProzentZiel = 50
var long Rollo02ProzentGefahren = 50
var boolean Rollo02Fahrtrichtungtest //true = hoch false = runter
var Timer Rollo02Fahrt
var Timer Rollo02Nachlauf
// Variablen Rollo 03 (KZ Steiger)
var long StartZeitRollo03
var long DauerZeitRollo03
var long Rollo03ZeitAuf = 34100
var long Rollo03ZeitZu = 35000
var long Rollo03ProzentAlt = 50
var long Rollo03ProzentNeu = 50
var long Rollo03ProzentZiel = 50
var long Rollo03ProzentGefahren = 50
var boolean Rollo03Fahrtrichtungtest //true = hoch false = runter
var Timer Rollo03Fahrt
var Timer Rollo03Nachlauf
// Variablen Rollo 04 (KZ Treppe)
var long StartZeitRollo04
var long DauerZeitRollo04
var long Rollo04ZeitAuf = 34100
var long Rollo04ZeitZu = 35000
var long Rollo04ProzentAlt = 50
var long Rollo04ProzentNeu = 50
var long Rollo04ProzentZiel = 50
var long Rollo04ProzentGefahren = 50
var boolean Rollo04Fahrtrichtungtest //true = hoch false = runter
var Timer Rollo04Fahrt
var Timer Rollo04Nachlauf
///////////////////////////////////////////////////////////////////////////
//Gruppensteuerung
rule "Alle Rollos im OG Auffahren"
when
Item AlleAufOG changed to ON
then
M076R2.sendCommand(ON)
M076R4.sendCommand(ON)
M076R6.sendCommand(ON)
M076R8.sendCommand(ON)
M076R1.sendCommand(ON)
M076R3.sendCommand(ON)
M076R5.sendCommand(ON)
M076R7.sendCommand(ON)
RolloOGZentralsteuerung = createTimer(now.plusSeconds(40)) [|
M076R1.sendCommand(OFF)
M076R3.sendCommand(OFF)
M076R5.sendCommand(OFF)
M076R7.sendCommand(OFF)
Rollo01Visu.postUpdate(0)
Rollo01ProzentNeu = 0
Rollo01ProzentAlt = 0
Rollo02Visu.postUpdate(0)
Rollo02ProzentNeu = 0
Rollo02ProzentAlt = 0
Rollo03Visu.postUpdate(0)
Rollo03ProzentNeu = 0
Rollo03ProzentAlt = 0
Rollo04Visu.postUpdate(0)
Rollo04ProzentNeu = 0
Rollo04ProzentAlt = 0
AlleAufOG.postUpdate(OFF)
]
end
rule "Alle Rollos im OG Auffahren"
when
Item AlleZuOG changed to ON
then
M076R2.sendCommand(OFF)
M076R4.sendCommand(OFF)
M076R6.sendCommand(OFF)
M076R8.sendCommand(OFF)
M076R1.sendCommand(ON)
M076R3.sendCommand(ON)
M076R5.sendCommand(ON)
M076R7.sendCommand(ON)
RolloOGZentralsteuerung = createTimer(now.plusSeconds(40)) [|
M076R1.sendCommand(OFF)
M076R3.sendCommand(OFF)
M076R5.sendCommand(OFF)
M076R7.sendCommand(OFF)
Rollo01Visu.postUpdate(100)
Rollo01ProzentNeu = 100
Rollo01ProzentAlt = 100
Rollo02Visu.postUpdate(100)
Rollo02ProzentNeu = 100
Rollo02ProzentAlt = 100
Rollo03Visu.postUpdate(100)
Rollo03ProzentNeu = 100
Rollo03ProzentAlt = 100
Rollo04Visu.postUpdate(100)
Rollo04ProzentNeu = 100
Rollo04ProzentAlt = 100
AlleZuOG.postUpdate(OFF)
]
end
///////////////////////////////////////////////////////////////////////////
// Rollo 01 = Rolladen Büro !
rule "Reset Rollo 01 AN"
when
Item Rollo01reset changed to ON
then
M076R1.sendCommand(ON)
M076R2.sendCommand(ON)
Rollo01Fahrt = createTimer(now.plusMillis(40000)) [|
Rollo01reset.postUpdate(OFF)
]
end
rule "Reset Rollo 01 AUS"
when
Item Rollo01reset changed to OFF
then
M076R1.sendCommand(OFF)
M076L1.sendCommand(OFF)
Rollo01Visu.postUpdate(0)
Rollo01ProzentNeu = 0
Rollo01ProzentAlt = 0
end
rule "Verstellen Visu Rollo 01"
when
Item Rollo01Visu changed
then
//Start
if ( M076L1.state == OFF && Rollo01Visu != Rollo01ProzentAlt && M076R1.state == OFF ) {
Rollo01ProzentZiel = (Rollo01Visu.state as DecimalType).intValue
//Auf
if ( Rollo01ProzentZiel < Rollo01ProzentAlt) {
Rollo01ProzentNeu = Rollo01ProzentZiel
M076R1.sendCommand(ON)
M076R2.sendCommand(ON)
}
//Zu
if ( Rollo01ProzentZiel > Rollo01ProzentAlt) {
Rollo01ProzentNeu = Rollo01ProzentZiel
M076R2.sendCommand(OFF)
M076R1.sendCommand(ON)
}}
end
rule "Fahren Rollo 01"
when
Item M076R1 changed to ON
then
//AUF
if ( M076R2.state == ON && Rollo01ProzentAlt > 0 && Rollo01reset.state == OFF ) {
StartZeitRollo01 = now.millis
Rollo01Fahrtrichtungtest = true
//Manuel
if ( M076L1.state == ON ) {
Rollo01Fahrt = createTimer(now.plusMillis((new Float(Rollo01ProzentAlt * Rollo01ZeitAuf / 100)).intValue)) [|
M076L1.sendCommand(OFF)
Rollo01ProzentNeu = 0
Rollo01Update.postUpdate((Rollo01Update.state as Number) + 1)
Rollo01Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R1.sendCommand(OFF)
]]}
//Automatik
if ( M076L1.state == OFF ) {
Rollo01Fahrt = createTimer(now.plusMillis((new Float((Rollo01ProzentAlt - Rollo01ProzentZiel) * Rollo01ZeitAuf / 100)).intValue)) [|
Rollo01ProzentAlt = Rollo01ProzentNeu
if ( Rollo01ProzentNeu == 990) {
Rollo01Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R1.sendCommand(OFF)
Rollo01Visu.postUpdate(Rollo01ProzentZiel)
]
}else
M076R1.sendCommand(OFF)
Rollo01Visu.postUpdate(Rollo01ProzentZiel)
]}
//ZU
}else if ( M076R2.state == OFF && Rollo01ProzentAlt < 100 && Rollo01reset.state == OFF ) {
StartZeitRollo01 = now.millis
Rollo01Fahrtrichtungtest = false
//Manuel
if ( M076L1.state == ON ) {
Rollo01Fahrt = createTimer(now.plusMillis((new Float((100 - Rollo01ProzentAlt) * Rollo01ZeitZu / 100)).intValue)) [|
M076L1.sendCommand(OFF)
Rollo01ProzentNeu = 100
Rollo01Update.postUpdate((Rollo01Update.state as Number) + 1)
Rollo01Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R1.sendCommand(OFF)
]]}
//Automatik
if ( M076L1.state == OFF ) {
Rollo01Fahrt = createTimer(now.plusMillis((new Float((Rollo01ProzentNeu - Rollo01ProzentAlt) * Rollo01ZeitZu / 100)).intValue)) [|
Rollo01ProzentAlt = Rollo01ProzentNeu
if ( Rollo01ProzentNeu == 99100) {
Rollo01Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R1.sendCommand(OFF)
Rollo01Visu.postUpdate(Rollo01ProzentZiel)
]
}else
M076R1.sendCommand(OFF)
Rollo01Visu.postUpdate(Rollo01ProzentZiel)
]}
//Keine Fahrt
}else if ( M076L1.state == ON && Rollo01reset.state == OFF ) {
M076R1.sendCommand(OFF)
M076L1.sendCommand(OFF)
Rollo01Update.postUpdate((Rollo01Update.state as Number) + 1)
}
end
rule "Stopen Manuel Rollo 01"
when
Item M076R1 changed to OFF
then
//AUF - Aus
if ( M076L1.state == ON && Rollo01Fahrtrichtungtest == true && Rollo01reset.state == OFF ) {
Rollo01Fahrt.cancel
M076L1.sendCommand(OFF)
DauerZeitRollo01 = now.millis - StartZeitRollo01
Rollo01ProzentNeu = Rollo01ProzentAlt - (DauerZeitRollo01 * 100 / Rollo01ZeitAuf)
Rollo01Update.postUpdate((Rollo01Update.state as Number) + 1)
// ZU - Aus
}else if ( M076L1.state == ON && Rollo01Fahrtrichtungtest == false && Rollo01reset.state == OFF ) {
Rollo01Fahrt.cancel
M076L1.sendCommand(OFF)
DauerZeitRollo01 = now.millis - StartZeitRollo01
Rollo01ProzentNeu = Rollo01ProzentAlt + (DauerZeitRollo01 * 100 / Rollo01ZeitZu)
Rollo01Update.postUpdate((Rollo01Update.state as Number) + 1)
}
end
rule "Aktualiesierung Rollo 01"
when
Item Rollo01Update changed
then
//R?cksetzen Rollo01Update auf 0
if ( Rollo01Update.state > 50 ) {
Rollo01Update.postUpdate(0)
}
//mehr als 100%
if ( Rollo01ProzentNeu > 100 ) {
Rollo01ProzentNeu = 100
Rollo01ProzentAlt = 100
Rollo01Visu.postUpdate(100)
//weniger alls 0%
}else if ( Rollo01ProzentNeu < 0 ) {
Rollo01ProzentNeu = 0
Rollo01ProzentAlt = 0
Rollo01Visu.postUpdate(0)
//Status Update
}else if ( Rollo01ProzentNeu != Rollo01ProzentAlt ) {
Rollo01ProzentAlt = Rollo01ProzentNeu
Rollo01Visu.postUpdate(Rollo01ProzentNeu)
}
end
///////////////////////////////////////////////////////////////////////////
// Rollo 02 = Rolladen Schlafzimmer !
rule "Reset Rollo 02 AN"
when
Item Rollo02reset changed to ON
then
M076R3.sendCommand(ON)
M076R4.sendCommand(ON)
Rollo02Fahrt = createTimer(now.plusMillis(40000)) [|
Rollo02reset.postUpdate(OFF)
]
end
rule "Reset Rollo 02 AUS"
when
Item Rollo02reset changed to OFF
then
M076R3.sendCommand(OFF)
M076L2.sendCommand(OFF)
Rollo02Visu.postUpdate(0)
Rollo02ProzentNeu = 0
Rollo02ProzentAlt = 0
end
rule "Verstellen Visu Rollo 02"
when
Item Rollo02Visu changed
then
//Start
if ( M076L2.state == OFF && Rollo02Visu != Rollo02ProzentAlt && M076R3.state == OFF ) {
Rollo02ProzentZiel = (Rollo02Visu.state as DecimalType).intValue
//Auf
if ( Rollo02ProzentZiel < Rollo02ProzentAlt) {
Rollo02ProzentNeu = Rollo02ProzentZiel
M076R3.sendCommand(ON)
M076R4.sendCommand(ON)
}
//Zu
if ( Rollo02ProzentZiel > Rollo02ProzentAlt) {
Rollo02ProzentNeu = Rollo02ProzentZiel
M076R4.sendCommand(OFF)
M076R3.sendCommand(ON)
}}
end
rule "Fahren Rollo 02"
when
Item M076R3 changed to ON
then
//AUF
if ( M076R4.state == ON && Rollo02ProzentAlt > 0 && Rollo02reset.state == OFF ) {
StartZeitRollo02 = now.millis
Rollo02Fahrtrichtungtest = true
//Manuel
if ( M076L2.state == ON ) {
Rollo02Fahrt = createTimer(now.plusMillis((new Float(Rollo02ProzentAlt * Rollo02ZeitAuf / 100)).intValue)) [|
M076L2.sendCommand(OFF)
Rollo02ProzentNeu = 0
Rollo02Update.postUpdate((Rollo02Update.state as Number) + 1)
Rollo02Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R3.sendCommand(OFF)
]]}
//Automatik
if ( M076L2.state == OFF ) {
Rollo02Fahrt = createTimer(now.plusMillis((new Float((Rollo02ProzentAlt - Rollo02ProzentZiel) * Rollo02ZeitAuf / 100)).intValue)) [|
Rollo02ProzentAlt = Rollo02ProzentNeu
if ( Rollo02ProzentNeu == 990) {
Rollo02Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R3.sendCommand(OFF)
Rollo02Visu.postUpdate(Rollo02ProzentZiel)
]
}else
M076R3.sendCommand(OFF)
Rollo02Visu.postUpdate(Rollo02ProzentZiel)
]}
//ZU
}else if ( M076R4.state == OFF && Rollo02ProzentAlt < 100 && Rollo02reset.state == OFF ) {
StartZeitRollo02 = now.millis
Rollo02Fahrtrichtungtest = false
//Manuel
if ( M076L2.state == ON ) {
Rollo02Fahrt = createTimer(now.plusMillis((new Float((100 - Rollo02ProzentAlt) * Rollo02ZeitZu / 100)).intValue)) [|
M076L2.sendCommand(OFF)
Rollo02ProzentNeu = 100
Rollo02Update.postUpdate((Rollo02Update.state as Number) + 1)
Rollo02Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R3.sendCommand(OFF)
]]}
//Automatik
if ( M076L2.state == OFF ) {
Rollo02Fahrt = createTimer(now.plusMillis((new Float((Rollo02ProzentNeu - Rollo02ProzentAlt) * Rollo02ZeitZu / 100)).intValue)) [|
Rollo02ProzentAlt = Rollo01ProzentNeu
if ( Rollo02ProzentNeu == 99100) {
Rollo02Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R3.sendCommand(OFF)
Rollo02Visu.postUpdate(Rollo02ProzentZiel)
]
}else
M076R3.sendCommand(OFF)
Rollo02Visu.postUpdate(Rollo02ProzentZiel)
]}
//Keine Fahrt
}else if ( M076L2.state == ON && Rollo02reset.state == OFF ) {
M076R3.sendCommand(OFF)
M076L2.sendCommand(OFF)
Rollo02Update.postUpdate((Rollo02Update.state as Number) + 1)
}
end
rule "Stopen Manuel Rollo 02"
when
Item M076R3 changed to OFF
then
//AUF - Aus
if ( M076L2.state == ON && Rollo02Fahrtrichtungtest == true && Rollo02reset.state == OFF ) {
Rollo02Fahrt.cancel
M076L2.sendCommand(OFF)
DauerZeitRollo02 = now.millis - StartZeitRollo02
Rollo02ProzentNeu = Rollo02ProzentAlt - (DauerZeitRollo02 * 100 / Rollo02ZeitAuf)
Rollo02Update.postUpdate((Rollo02Update.state as Number) + 1)
// ZU - Aus
}else if ( M076L2.state == ON && Rollo02Fahrtrichtungtest == false && Rollo02reset.state == OFF ) {
Rollo02Fahrt.cancel
M076L2.sendCommand(OFF)
DauerZeitRollo02 = now.millis - StartZeitRollo02
Rollo02ProzentNeu = Rollo02ProzentAlt + (DauerZeitRollo02 * 100 / Rollo02ZeitZu)
Rollo02Update.postUpdate((Rollo02Update.state as Number) + 1)
}
end
rule "Aktualiesierung Rollo 02"
when
Item Rollo02Update changed
then
//R?cksetzen Rollo02Update auf 0
if ( Rollo02Update.state > 50 ) {
Rollo02Update.postUpdate(0)
}
//mehr als 100%
if ( Rollo02ProzentNeu > 100 ) {
Rollo02ProzentNeu = 100
Rollo02ProzentAlt = 100
Rollo02Visu.postUpdate(100)
//weniger alls 0%
}else if ( Rollo02ProzentNeu < 0 ) {
Rollo02ProzentNeu = 0
Rollo02ProzentAlt = 0
Rollo02Visu.postUpdate(0)
//Status Update
}else if ( Rollo02ProzentNeu != Rollo02ProzentAlt ) {
Rollo02ProzentAlt = Rollo02ProzentNeu
Rollo02Visu.postUpdate(Rollo02ProzentNeu)
}
end
///////////////////////////////////////////////////////////////////////////
// Rollo 03 = Rolladen Kinderzimmer Steiger !
rule "Reset Rollo 03 AN"
when
Item Rollo03reset changed to ON
then
M076R5.sendCommand(ON)
M076R6.sendCommand(ON)
Rollo03Fahrt = createTimer(now.plusMillis(40000)) [|
Rollo03reset.postUpdate(OFF)
]
end
rule "Reset Rollo 03 AUS"
when
Item Rollo03reset changed to OFF
then
M076R5.sendCommand(OFF)
M076L3.sendCommand(OFF)
Rollo03Visu.postUpdate(0)
Rollo03ProzentNeu = 0
Rollo03ProzentAlt = 0
end
rule "Verstellen Visu Rollo 03"
when
Item Rollo03Visu changed
then
//Start
if ( M076L3.state == OFF && Rollo03Visu != Rollo03ProzentAlt && M076R5.state == OFF ) {
Rollo03ProzentZiel = (Rollo03Visu.state as DecimalType).intValue
//Auf
if ( Rollo03ProzentZiel < Rollo03ProzentAlt) {
Rollo03ProzentNeu = Rollo03ProzentZiel
M076R5.sendCommand(ON)
M076R6.sendCommand(ON)
}
//Zu
if ( Rollo03ProzentZiel > Rollo03ProzentAlt) {
Rollo03ProzentNeu = Rollo03ProzentZiel
M076R6.sendCommand(OFF)
M076R5.sendCommand(ON)
}}
end
rule "Fahren Rollo 03"
when
Item M076R5 changed to ON
then
//AUF
if ( M076R6.state == ON && Rollo03ProzentAlt > 0 && Rollo03reset.state == OFF ) {
StartZeitRollo03 = now.millis
Rollo03Fahrtrichtungtest = true
//Manuel
if ( M076L3.state == ON ) {
Rollo03Fahrt = createTimer(now.plusMillis((new Float(Rollo03ProzentAlt * Rollo03ZeitAuf / 100)).intValue)) [|
M076L3.sendCommand(OFF)
Rollo03ProzentNeu = 0
Rollo03Update.postUpdate((Rollo03Update.state as Number) + 1)
Rollo03Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R5.sendCommand(OFF)
]]}
//Automatik
if ( M076L3.state == OFF ) {
Rollo03Fahrt = createTimer(now.plusMillis((new Float((Rollo03ProzentAlt - Rollo03ProzentZiel) * Rollo03ZeitAuf / 100)).intValue)) [|
Rollo03ProzentAlt = Rollo03ProzentNeu
if ( Rollo03ProzentNeu == 990) {
Rollo03Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R5.sendCommand(OFF)
Rollo03Visu.postUpdate(Rollo03ProzentZiel)
]
}else
M076R5.sendCommand(OFF)
Rollo03Visu.postUpdate(Rollo03ProzentZiel)
]}
//ZU
}else if ( M076R6.state == OFF && Rollo03ProzentAlt < 100 && Rollo03reset.state == OFF ) {
StartZeitRollo03 = now.millis
Rollo03Fahrtrichtungtest = false
//Manuel
if ( M076L3.state == ON ) {
Rollo03Fahrt = createTimer(now.plusMillis((new Float((100 - Rollo03ProzentAlt) * Rollo03ZeitZu / 100)).intValue)) [|
M076L3.sendCommand(OFF)
Rollo03ProzentNeu = 100
Rollo03Update.postUpdate((Rollo03Update.state as Number) + 1)
Rollo03Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R5.sendCommand(OFF)
]]}
//Automatik
if ( M076L3.state == OFF ) {
Rollo03Fahrt = createTimer(now.plusMillis((new Float((Rollo03ProzentNeu - Rollo03ProzentAlt) * Rollo03ZeitZu / 100)).intValue)) [|
Rollo03ProzentAlt = Rollo03ProzentNeu
if ( Rollo03ProzentNeu == 99100) {
Rollo03Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R5.sendCommand(OFF)
Rollo03Visu.postUpdate(Rollo03ProzentZiel)
]
}else
M076R5.sendCommand(OFF)
Rollo03Visu.postUpdate(Rollo03ProzentZiel)
]}
//Keine Fahrt
}else if ( M076L3.state == ON && Rollo03reset.state == OFF ) {
M076R5.sendCommand(OFF)
M076L3.sendCommand(OFF)
Rollo03Update.postUpdate((Rollo03Update.state as Number) + 1)
}
end
rule "Stopen Manuel Rollo 03"
when
Item M076R5 changed to OFF
then
//AUF - Aus
if ( M076L3.state == ON && Rollo03Fahrtrichtungtest == true && Rollo03reset.state == OFF ) {
Rollo03Fahrt.cancel
M076L3.sendCommand(OFF)
DauerZeitRollo03 = now.millis - StartZeitRollo03
Rollo03ProzentNeu = Rollo03ProzentAlt - (DauerZeitRollo03 * 100 / Rollo03ZeitAuf)
Rollo03Update.postUpdate((Rollo03Update.state as Number) + 1)
// ZU - Aus
}else if ( M076L3.state == ON && Rollo03Fahrtrichtungtest == false && Rollo03reset.state == OFF ) {
Rollo03Fahrt.cancel
M076L3.sendCommand(OFF)
DauerZeitRollo03 = now.millis - StartZeitRollo03
Rollo03ProzentNeu = Rollo03ProzentAlt + (DauerZeitRollo03 * 100 / Rollo03ZeitZu)
Rollo03Update.postUpdate((Rollo03Update.state as Number) + 1)
}
end
rule "Aktualiesierung Rollo 03"
when
Item Rollo03Update changed
then
//R?cksetzen Rollo03Update auf 0
if ( Rollo03Update.state > 50 ) {
Rollo03Update.postUpdate(0)
}
//mehr als 100%
if ( Rollo03ProzentNeu > 100 ) {
Rollo03ProzentNeu = 100
Rollo03ProzentAlt = 100
Rollo03Visu.postUpdate(100)
//weniger alls 0%
}else if ( Rollo03ProzentNeu < 0 ) {
Rollo03ProzentNeu = 0
Rollo03ProzentAlt = 0
Rollo03Visu.postUpdate(0)
//Status Update
}else if ( Rollo03ProzentNeu != Rollo03ProzentAlt ) {
Rollo03ProzentAlt = Rollo03ProzentNeu
Rollo03Visu.postUpdate(Rollo03ProzentNeu)
}
end
///////////////////////////////////////////////////////////////////////////
// Rollo 04 = Rolladen Kinderzimmer Treppe !
rule "Reset Rollo 04 AN"
when
Item Rollo04reset changed to ON
then
M076R7.sendCommand(ON)
M076R8.sendCommand(ON)
Rollo04Fahrt = createTimer(now.plusMillis(40000)) [|
Rollo04reset.postUpdate(OFF)
]
end
rule "Reset Rollo 04 AUS"
when
Item Rollo04reset changed to OFF
then
M076R7.sendCommand(OFF)
M076L4.sendCommand(OFF)
Rollo04Visu.postUpdate(0)
Rollo04ProzentNeu = 0
Rollo04ProzentAlt = 0
end
rule "Verstellen Visu Rollo 04"
when
Item Rollo04Visu changed
then
//Start
if ( M076L4.state == OFF && Rollo04Visu != Rollo04ProzentAlt && M076R7.state == OFF ) {
Rollo04ProzentZiel = (Rollo04Visu.state as DecimalType).intValue
//Auf
if ( Rollo04ProzentZiel < Rollo04ProzentAlt) {
Rollo04ProzentNeu = Rollo04ProzentZiel
M076R7.sendCommand(ON)
M076R8.sendCommand(ON)
}
//Zu
if ( Rollo04ProzentZiel > Rollo04ProzentAlt) {
Rollo04ProzentNeu = Rollo04ProzentZiel
M076R8.sendCommand(OFF)
M076R7.sendCommand(ON)
}}
end
rule "Fahren Rollo 04"
when
Item M076R7 changed to ON
then
//AUF
if ( M076R8.state == ON && Rollo04ProzentAlt > 0 && Rollo04reset.state == OFF ) {
StartZeitRollo04 = now.millis
Rollo04Fahrtrichtungtest = true
//Manuel
if ( M076L4.state == ON ) {
Rollo04Fahrt = createTimer(now.plusMillis((new Float(Rollo04ProzentAlt * Rollo04ZeitAuf / 100)).intValue)) [|
M076L4.sendCommand(OFF)
Rollo04ProzentNeu = 0
Rollo04Update.postUpdate((Rollo04Update.state as Number) + 1)
Rollo04Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R7.sendCommand(OFF)
]]}
//Automatik
if ( M076L4.state == OFF ) {
Rollo04Fahrt = createTimer(now.plusMillis((new Float((Rollo04ProzentAlt - Rollo04ProzentZiel) * Rollo04ZeitAuf / 100)).intValue)) [|
Rollo04ProzentAlt = Rollo04ProzentNeu
if ( Rollo04ProzentNeu == 990) {
Rollo04Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R7.sendCommand(OFF)
Rollo04Visu.postUpdate(Rollo04ProzentZiel)
]
}else
M076R7.sendCommand(OFF)
Rollo04Visu.postUpdate(Rollo04ProzentZiel)
]}
//ZU
}else if ( M076R8.state == OFF && Rollo04ProzentAlt < 100 && Rollo04reset.state == OFF ) {
StartZeitRollo04 = now.millis
Rollo04Fahrtrichtungtest = false
//Manuel
if ( M076L4.state == ON ) {
Rollo04Fahrt = createTimer(now.plusMillis((new Float((100 - Rollo04ProzentAlt) * Rollo04ZeitZu / 100)).intValue)) [|
M076L4.sendCommand(OFF)
Rollo04ProzentNeu = 99100
Rollo04Update.postUpdate((Rollo04Update.state as Number) + 1)
Rollo04Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R7.sendCommand(OFF)
]]}
//Automatik
if ( M076L4.state == OFF ) {
Rollo04Fahrt = createTimer(now.plusMillis((new Float((Rollo04ProzentNeu - Rollo04ProzentAlt) * Rollo04ZeitZu / 100)).intValue)) [|
Rollo04ProzentAlt = Rollo04ProzentNeu
if ( Rollo04ProzentNeu == 100) {
Rollo04Nachlauf = createTimer(now.plusSeconds(3)) [|
M076R7.sendCommand(OFF)
Rollo04Visu.postUpdate(Rollo04ProzentZiel)
]
}else
M076R7.sendCommand(OFF)
Rollo04Visu.postUpdate(Rollo04ProzentZiel)
]}
//Keine Fahrt
}else if ( M076L4.state == ON && Rollo04reset.state == OFF ) {
M076R7.sendCommand(OFF)
M076L4.sendCommand(OFF)
Rollo04Update.postUpdate((Rollo04Update.state as Number) + 1)
}
end
rule "Stopen Manuel Rollo 04"
when
Item M076R7 changed to OFF
then
//AUF - Aus
if ( M076L4.state == ON && Rollo04Fahrtrichtungtest == true && Rollo04reset.state == OFF ) {
Rollo04Fahrt.cancel
M076L4.sendCommand(OFF)
DauerZeitRollo04 = now.millis - StartZeitRollo04
Rollo04ProzentNeu = Rollo04ProzentAlt - (DauerZeitRollo04 * 100 / Rollo04ZeitAuf)
Rollo04Update.postUpdate((Rollo04Update.state as Number) + 1)
// ZU - Aus
}else if ( M076L4.state == ON && Rollo04Fahrtrichtungtest == false && Rollo04reset.state == OFF ) {
Rollo04Fahrt.cancel
M076L4.sendCommand(OFF)
DauerZeitRollo04 = now.millis - StartZeitRollo04
Rollo04ProzentNeu = Rollo04ProzentAlt + (DauerZeitRollo04 * 100 / Rollo04ZeitZu)
Rollo04Update.postUpdate((Rollo04Update.state as Number) + 1)
}
end
rule "Aktualiesierung Rollo 04"
when
Item Rollo04Update changed
then
//R?cksetzen Rollo04Update auf 0
if ( Rollo04Update.state > 50 ) {
Rollo04Update.postUpdate(0)
}
//mehr als 100%
if ( Rollo04ProzentNeu > 100 ) {
Rollo04ProzentNeu = 100
Rollo04ProzentAlt = 100
Rollo04Visu.postUpdate(100)
//weniger alls 0%
}else if ( Rollo04ProzentNeu < 0 ) {
Rollo04ProzentNeu = 0
Rollo04ProzentAlt = 0
Rollo04Visu.postUpdate(0)
//Status Update
}else if ( Rollo04ProzentNeu != Rollo04ProzentAlt ) {
Rollo04ProzentAlt = Rollo04ProzentNeu
Rollo04Visu.postUpdate(Rollo04ProzentNeu)
}
end


Kommentar