Hallo Gerhard,
mit „dem Script“ ist das schon etwas Aufwand beim Einrichten und die Position hast du nur, wenn sie scriptgesteuert angefahren wird. Das ganze läuft noch in meiner V3.4 Umgebung.
Als Basis Info der Objektbaum Teil zu einer Jalusie:
Die LCN Instanzen haben bei mir immer noch Segment, Modul und Relais/Ausgang mit im Namen, damit sollte sich das auch erklären. Für die Handsteuerung sind das virtuelle Relais. Die Tasten wurden das letzte Mal in 2014 betätigt :eek:.
[ul]
[li]JalusiePositionierung
[/li][/ul]
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : JalusiePositionierung.ips.php
Trigger :
Interval :
*/
//Dieses Script positioniert eine Rolladen an einem Relaisblock über die eingelernte Zeit.
//Die Sollpos kann von 0 (offen) bis 100 (geschlossen) eingestellt werden.
//Es muessen pro Rolladen zwei Integer Variable (hier "JalusieAktuellePosition" und "JalusieSollPosition") angelegt werden.
//Jeder Befehl an diesen Rolladen der aus dem LCN Bus direkt kommt (z.B. Handbetrieb), muss parallel die Variable des Rolladens auf 999 setzen.
//Somit weiss das Script beim nächsten Aufruf, dass der Rolladen manuell verstellt wurde und die gespeicherte Pos in IPS nicht der tatsächlichen entspricht.
//Dann wird die nächste gewünschte Position über die obere Endlage angefahren.
$actpos = GetValueInteger(38830 /* [Flur/Windfang/GästeWC\Jalusie\JalusiePositionierung\JalusieAktuellePosition]*/); //holt den aktuellen Positionswert
$laufzeit = 14; // Fahrzeit für eine Komplettfahrt in Sekunden (individuell zu messen und einzugeben)
$laufzeit2 = $laufzeit*1000; // Definiert die Laufzeit für eine komplette Fahrt in Millisekunden
$step = $laufzeit/100; // gibt die Laufzeit je Prozentstep an
$step2 = ($laufzeit+2)/100; // "+2" Korrekturfaktor für Aufwärtsfahrt
$sollpos = GetValueInteger(20139 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieSollPosition]*/);
$debug = true;
$relpos=$sollpos-$actpos;
switch($actpos){
case 999:
$TX_BUF = ">M000137.RL------10".chr(10); // Relais des Rolladens für Fahrt nach oben
$result = CSCK_SendText(23073 /*[PCHK produktiv]*/, $TX_BUF);
SetValueInteger(38830 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieAktuellePosition]*/ , 0);
ips_sleep($laufzeit2);
IPS_RunScript($_IPS['SELF']);
break;
default:
if($relpos>0) //Gewünschte Position ist größer wie die aktuelle
{
$richtung=0;
$fahrzeit=$relpos*$step*1000;
}
elseif($relpos<0)
{
$richtung=1 ;
$fahrzeit=$relpos*$step2*-1000;
}
else //Gewünschte Position ist gleich wie die aktuelle
{
$richtung=2 ;
$fahrzeit=$relpos*$step*-1000;
}
// if ($debug)
// IPS_LogMessage(IPS_GetName($_IPS['SELF']), "relpos: " . $relpos . " sollpos: " . $sollpos . " step: " . $step . " step2: " . $step2 . " fahrzeit: " . intval($fahrzeit));
switch($richtung) {
case 0:
if ($debug)
IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Position ändern -> runter für " . $fahrzeit . " millisekunden.");
SetValueInteger(38830 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieAktuellePosition]*/, $sollpos);
$TX_BUF = ">M000137.RL------01".chr(10);
$result = CSCK_SendText(23073 /*[PCHK produktiv]*/, $TX_BUF);
ips_sleep(intval($fahrzeit));
break;
case 1:
if ($debug)
IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Position ändern -> rauf für " . $fahrzeit . " millisekunden.");
SetValueInteger(38830 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieAktuellePosition]*/, $sollpos);
$TX_BUF = ">M000137.RL------10".chr(10);
$result = CSCK_SendText(23073 /*[PCHK produktiv]*/, $TX_BUF);
ips_sleep(intval($fahrzeit));
break;
case 2:
if ($debug)
IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Position erreicht -> STOP");
SetValueInteger(38830 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieAktuellePosition]*/ , $sollpos);
break;
}
$TX_BUF = ">M000137.RL------00".chr(10);
$result = CSCK_SendText(23073 /*[PCHK produktiv]*/, $TX_BUF);
if ($debug)
IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Wartezeit ". $fahrzeit . " ms beendet, STOP senden, Result: " . $result );
break;
}
?>
[ul]
[li]JalusieTasterAnsteuerung
[/li][/ul]
<?
$debug = true;
function boolStringEinAus($bValue = false) { // returns string
return ($bValue ? 'ein' : 'aus');
}
$hoch = GetValueBoolean(32453 /*[Flur_Windfang\Jalusie\Jalusie Handsteuerung hoch (0, 51, R1)\Status]*/);
$runter = GetValueBoolean(10118 /*[Flur_Windfang\Jalusie\Jalusie Handsteuerung runter (0, 51, R2)\Status]*/);
$manuell = GetValueBoolean(16233 /*[Flur_Windfang\Jalusie\Jalusie Handsteuerung manuell (0, 51, R3)\Status]*/);
if ($hoch) {
SetValueInteger(20139 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieSollPosition]*/, 0 );
$TX_BUF = '>M000051.RL0-------'.chr(10);
$result = CSCK_SendText(23073 /*[PCHK produktiv]*/, $TX_BUF);
}
if ($runter) {
SetValueInteger(20139 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieSollPosition]*/, 100 );
$TX_BUF = '>M000051.RL-0------'.chr(10);
$result = CSCK_SendText(23073 /*[PCHK produktiv]*/, $TX_BUF);
}
if ($manuell) {
SetValueInteger(38830 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieAktuellePosition]*/, 999 );
$TX_BUF = '>M000051.RL--0-----'.chr(10);
$result = CSCK_SendText(23073 /*[PCHK produktiv]*/, $TX_BUF);
}
if ($debug)
IPS_LogMessage(IPS_GetName($_IPS['SELF']), "MANUELL - hoch = " . boolStringEinAus($hoch) . " :: runter = " . boolStringEinAus($runter) . " :: manuell = " . boolStringEinAus($manuell) . " :: Result: " . $result );
?>
[ul]
[li]JalusieKomplettÖffnen
[/li][/ul]
<?
$debug=true;
function boolStringEinAus($bValue = false) { // returns string
return ($bValue ? 'ein ' : 'aus ');
}
$RolloPosition = GetValueInteger(38830 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieAktuellePosition]*/);
$InnenLichtGesperrt = GetValueBoolean(44431 /*[Steuerung\Beleuchtung\Innenbeleuchtung frei\Status]*/);
$HaustuerGeschlossen = GetValueBoolean(57727 /*[Flur_Windfang\Haustür Schloss\Haustür Status]*/);
if ($debug)
IPS_LogMessage(IPS_GetName($_IPS['SELF']), "(GESTARTET) " . $_IPS['SENDER'] . ", Akt. Pos. " . $RolloPosition . ", Innenlicht " . boolStringEinAus($InnenLichtGesperrt) . ", HaustuerGeschlossen " . boolStringEinAus($HaustuerGeschlossen));
if ($_IPS['SENDER'] == "TimerEvent") {
if (!$InnenLichtGesperrt AND ($RolloPosition == 80 OR $RolloPosition == 100) AND !$HaustuerGeschlossen) {
if ($debug)
IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Rollo öffnen (TIMER)" );
// Velux Rollo Flur 0% ==> öffnen
SetValueInteger(20139 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieSollPosition]*/, 0);
SetValueBoolean(24471 /*[Steuerung\Zirkulationspumpe\FirstMoveFlur]*/, FALSE );
}
}
?>
Und für die Ansteuerung aus dem Dashboard sind die Positionen im Dashboard hinterlegt.
[ul]
[li]Jalusie fahren (Dashboard)
[/li][/ul]
<?
SetValueInteger(20139 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieSollPosition]*/, (int)$_IPS['COMPONENT']);
?>
[ul]
[li]JalusieKomplttÖffnen
[/li][/ul]
<?
$debug=true;
function boolStringEinAus($bValue = false) { // returns string
return ($bValue ? 'ein ' : 'aus ');
}
$RolloPosition = GetValueInteger(38830 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieAktuellePosition]*/);
$InnenLichtGesperrt = GetValueBoolean(44431 /*[Steuerung\Beleuchtung\Innenbeleuchtung frei\Status]*/);
$HaustuerGeschlossen = GetValueBoolean(57727 /*[Flur_Windfang\Haustür Schloss\Haustür Status]*/);
if ($debug)
IPS_LogMessage(IPS_GetName($_IPS['SELF']), "(GESTARTET) " . $_IPS['SENDER'] . ", Akt. Pos. " . $RolloPosition . ", Innenlicht " . boolStringEinAus($InnenLichtGesperrt) . ", HaustuerGeschlossen " . boolStringEinAus($HaustuerGeschlossen));
if ($_IPS['SENDER'] == "TimerEvent") {
if (!$InnenLichtGesperrt AND ($RolloPosition == 80 OR $RolloPosition == 100) AND !$HaustuerGeschlossen) {
if ($debug)
IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Rollo öffnen (TIMER)" );
// Velux Rollo Flur 0% ==> öffnen
SetValueInteger(20139 /*[Flur_Windfang\Jalusie\JalusiePositionierung\JalusieSollPosition]*/, 0);
SetValueBoolean(24471 /*[Steuerung\Zirkulationspumpe\FirstMoveFlur]*/, FALSE );
}
}
?>
Ich hoffe, ich habe nichts vergessen.