Hallo, ich habe mir mal eine kleine Rollladensteuerung zum Lernen zusammengebastelt
Ich weiß, es würde auch mit weniger Variablen gehen und man kann noch viel optimieren.
Aber mal als Anfang..
meine Idee dahinter:
Ich will meine Rollladen einfach einzeln anwählen, und dann eine gemeinsame Aktion auswählen.
Also z.B. im Wohnzimmer und ein Fenster im Esszimmer auswählen, und dann alle auf 50% fahren.
Meine Rollladen werden durch 2 Signale gesteuert. Ohne irgendeine Rückmeldung.
Ev. kann es ja jemand gebrauchen.
Falls jemand Verbesserungen hat, gerne her damit.
###[DEF]###
[name = Rollladensteuerung LZ-KZ]
[e#1 = Start #init=0 ]
[e#2 = Stop #init=0 ]
[e#3 = Wert(0 - 100%) ]
[e#4 = aktueller Wert (%)]
[e#5 = Max. Laufzeit (s) #init=20 ]
[e#6 = Trigger Bereit #init=0 ]
[a#1 = LZ]
[a#2 = KZ]
[a#3 = aktueller Wert]
[v#1 = 0]
[v#2 = 0]
[v#3 = 0]
[v#4 = 0]
[v#5 = 0]
[v#6 = 0]
[v#7 = 0]
[v#8 = 0]
###[/DEF]###
###[HELP]###
Variablen
V1 = microtime Start
V2 = Laufzeit in Zehntelsekunden
V3 = Neue Soll-Position
V4 = Aktuelle Laufzeit in Prozent
V5 = Neue Ist-Position
V6 = Laufrichtung, 1 = abwärts, 2 = aufwärts
V7 = Soll Laufzeit in Sekunden
V8 = Status für Start Taste
E1 = Startet den Rollladen
E2 = Stoppt den Rollladen
E3 gibt die Soll Stellung in % an
E4 ist der aktuelle Wert eines KO's, das remanent sein sollte. Es wird bei jeden Betätigen neu mit der aktuellen Stellung beschrieben
E5 ist die maximale Laufzeit des Rollladens. Es ist die Zeit, die der Rollladen braucht um von Endstellung zu Endstellung zu fahren. KO's, das remanent sein sollte.
E6 Nur wenn hier eine 1 anliegt, wird der LBA überhaupt aktiv
A1 ist das KNX-Signal für LZ. LZ startet bei einer 0 den Rollladen auf, bei einer 1 ab.
A2 ist das KNX-Signal für KZ. KZ stoppt den Rollladen, egal ob 0 oder 1
A3 schreibt den aktuellen Wert in das KO von E4
Jeder Befehl maximal zu oder auf, der nicht unterbrochen wird, resetet den statischen Wert, d.h. in das KO an E4 / A3 wird eine 0 oder 100 geschrieben
###[/HELP]###
###[LBS]###
<?
function LB_LBSID($id)
{
if ($E=getLogicEingangDataAll($id))
{
if ($E[6]['value'] == 1)
{
if ($E[1]['refresh']==1 && getLogicElementVar($id,8) == 0 && $E[1]['value'] == 1)
{
setLogicElementVar($id,8,1);
setLogicElementVar($id,3, $E[3]['value'] - $E[4]['value']); //Neue soll-Position
setLogicElementVar($id,1,getMicrotime());
setLogicElementStatus($id,1);
if ($E[3]['value'] == 0) //Rollladen läuft maximale Zeit nach oben
{
setLogicLinkAusgang($id,1,0); //Rollladen aufwärts
setLogicElementVar($id,7,($E[5]['value'])); //Laufzeit
}
elseif ($E[3]['value'] == 100) //Rollladen läuft maximale Zeit nach unten
{
setLogicLinkAusgang($id,1,1); //Rollladen aufwärts
setLogicElementVar($id,7,($E[5]['value'])); //Laufzeit
}
elseif (getLogicElementVar($id,3) > 0)
{
setLogicLinkAusgang($id,1,1); //Rollladen abwärts
setLogicElementVar($id,6,1); //Laufrichtung abwärts
setLogicElementVar($id,7,($E[5]['value'] / 100 * ($E[3]['value'] - $E[4]['value']))); //Laufzeit
}
else
{
setLogicLinkAusgang($id,1,0); //Rollladen aufwärts
setLogicElementVar($id,6,2); //Laufrichtung aufwärts
setLogicElementVar($id,7,($E[5]['value'] / 100 * ($E[4]['value'] - $E[3]['value']))); //Laufzeit
}
}
if (getLogicElementStatus($id)==1)
{
if ($E[2]['refresh']==1) //Reset
{
setLogicElementVar($id,2,round(getMicrotime() - getLogicElementVar($id,1), 1)); //Laufzeit in Zehntelsekunden
setLogicElementVar($id,4,round(getLogicElementVar( $id,2) * 100 / $E[5]['value'])); //Aktuelle Laufzeit in Prozent
//Neue Ist-Position
if (getLogicElementVar($id,6) == 1)
{
setLogicElementVar($id,5, $E[4]['value'] + getLogicElementVar($id,4));
}
elseif (getLogicElementVar($id,6) == 2)
{
setLogicElementVar($id,5, $E[4]['value'] - getLogicElementVar($id,4));
}
setLogicLinkAusgang($id,2,0); //Rollladen Stop
setLogicLinkAusgang($id,3,getLogicElementVar($id,5 ));
setLogicElementVar($id,8,0); // Starttaste kann wieder betätigt werden
setLogicElementStatus($id,0);
}
if (getMicrotime() >= (getLogicElementVar($id,1) + getLogicElementVar($id,7))) //Zeit abgelaufen
{
setLogicLinkAusgang($id,2,0); //Rollladen Stop
setLogicLinkAusgang($id,3,$E[3]['value']); //Neue Ist-Position
setLogicElementVar($id,8,0); // Starttaste kann wieder betätigt werden
setLogicElementStatus($id,0);
}
}
}
}
}
?>
###[/LBS]###
###[EXEC]###
?>
###[/EXEC]###
Ich weiß, es würde auch mit weniger Variablen gehen und man kann noch viel optimieren.
Aber mal als Anfang..
meine Idee dahinter:
Ich will meine Rollladen einfach einzeln anwählen, und dann eine gemeinsame Aktion auswählen.
Also z.B. im Wohnzimmer und ein Fenster im Esszimmer auswählen, und dann alle auf 50% fahren.
Meine Rollladen werden durch 2 Signale gesteuert. Ohne irgendeine Rückmeldung.
Ev. kann es ja jemand gebrauchen.
Falls jemand Verbesserungen hat, gerne her damit.
###[DEF]###
[name = Rollladensteuerung LZ-KZ]
[e#1 = Start #init=0 ]
[e#2 = Stop #init=0 ]
[e#3 = Wert(0 - 100%) ]
[e#4 = aktueller Wert (%)]
[e#5 = Max. Laufzeit (s) #init=20 ]
[e#6 = Trigger Bereit #init=0 ]
[a#1 = LZ]
[a#2 = KZ]
[a#3 = aktueller Wert]
[v#1 = 0]
[v#2 = 0]
[v#3 = 0]
[v#4 = 0]
[v#5 = 0]
[v#6 = 0]
[v#7 = 0]
[v#8 = 0]
###[/DEF]###
###[HELP]###
Variablen
V1 = microtime Start
V2 = Laufzeit in Zehntelsekunden
V3 = Neue Soll-Position
V4 = Aktuelle Laufzeit in Prozent
V5 = Neue Ist-Position
V6 = Laufrichtung, 1 = abwärts, 2 = aufwärts
V7 = Soll Laufzeit in Sekunden
V8 = Status für Start Taste
E1 = Startet den Rollladen
E2 = Stoppt den Rollladen
E3 gibt die Soll Stellung in % an
E4 ist der aktuelle Wert eines KO's, das remanent sein sollte. Es wird bei jeden Betätigen neu mit der aktuellen Stellung beschrieben
E5 ist die maximale Laufzeit des Rollladens. Es ist die Zeit, die der Rollladen braucht um von Endstellung zu Endstellung zu fahren. KO's, das remanent sein sollte.
E6 Nur wenn hier eine 1 anliegt, wird der LBA überhaupt aktiv
A1 ist das KNX-Signal für LZ. LZ startet bei einer 0 den Rollladen auf, bei einer 1 ab.
A2 ist das KNX-Signal für KZ. KZ stoppt den Rollladen, egal ob 0 oder 1
A3 schreibt den aktuellen Wert in das KO von E4
Jeder Befehl maximal zu oder auf, der nicht unterbrochen wird, resetet den statischen Wert, d.h. in das KO an E4 / A3 wird eine 0 oder 100 geschrieben
###[/HELP]###
###[LBS]###
<?
function LB_LBSID($id)
{
if ($E=getLogicEingangDataAll($id))
{
if ($E[6]['value'] == 1)
{
if ($E[1]['refresh']==1 && getLogicElementVar($id,8) == 0 && $E[1]['value'] == 1)
{
setLogicElementVar($id,8,1);
setLogicElementVar($id,3, $E[3]['value'] - $E[4]['value']); //Neue soll-Position
setLogicElementVar($id,1,getMicrotime());
setLogicElementStatus($id,1);
if ($E[3]['value'] == 0) //Rollladen läuft maximale Zeit nach oben
{
setLogicLinkAusgang($id,1,0); //Rollladen aufwärts
setLogicElementVar($id,7,($E[5]['value'])); //Laufzeit
}
elseif ($E[3]['value'] == 100) //Rollladen läuft maximale Zeit nach unten
{
setLogicLinkAusgang($id,1,1); //Rollladen aufwärts
setLogicElementVar($id,7,($E[5]['value'])); //Laufzeit
}
elseif (getLogicElementVar($id,3) > 0)
{
setLogicLinkAusgang($id,1,1); //Rollladen abwärts
setLogicElementVar($id,6,1); //Laufrichtung abwärts
setLogicElementVar($id,7,($E[5]['value'] / 100 * ($E[3]['value'] - $E[4]['value']))); //Laufzeit
}
else
{
setLogicLinkAusgang($id,1,0); //Rollladen aufwärts
setLogicElementVar($id,6,2); //Laufrichtung aufwärts
setLogicElementVar($id,7,($E[5]['value'] / 100 * ($E[4]['value'] - $E[3]['value']))); //Laufzeit
}
}
if (getLogicElementStatus($id)==1)
{
if ($E[2]['refresh']==1) //Reset
{
setLogicElementVar($id,2,round(getMicrotime() - getLogicElementVar($id,1), 1)); //Laufzeit in Zehntelsekunden
setLogicElementVar($id,4,round(getLogicElementVar( $id,2) * 100 / $E[5]['value'])); //Aktuelle Laufzeit in Prozent
//Neue Ist-Position
if (getLogicElementVar($id,6) == 1)
{
setLogicElementVar($id,5, $E[4]['value'] + getLogicElementVar($id,4));
}
elseif (getLogicElementVar($id,6) == 2)
{
setLogicElementVar($id,5, $E[4]['value'] - getLogicElementVar($id,4));
}
setLogicLinkAusgang($id,2,0); //Rollladen Stop
setLogicLinkAusgang($id,3,getLogicElementVar($id,5 ));
setLogicElementVar($id,8,0); // Starttaste kann wieder betätigt werden
setLogicElementStatus($id,0);
}
if (getMicrotime() >= (getLogicElementVar($id,1) + getLogicElementVar($id,7))) //Zeit abgelaufen
{
setLogicLinkAusgang($id,2,0); //Rollladen Stop
setLogicLinkAusgang($id,3,$E[3]['value']); //Neue Ist-Position
setLogicElementVar($id,8,0); // Starttaste kann wieder betätigt werden
setLogicElementStatus($id,0);
}
}
}
}
}
?>
###[/LBS]###
###[EXEC]###
?>
###[/EXEC]###