Wenn du nur 2 Sende-Instanzen (Powerrelais und Richtungsrelais) hast, musst du diesen „Umweg“ nicht gehen.
Analog zu: Shutter Control — IP-Symcon :: Automatisierungssoftware hier eine Anleitung für Modbus (PoKeys):
Hinweise für Modbus/ Pokeys Nutzer:
Beim Betrieb mit Relais muss für „Sende-Instanz (1)“ immer das erste Relais der beiden angegeben werden. Das erste Relais ist das, welches den Strom AN/AUS schaltet. „Sende-Instanz (2)*“ ist immer das Relais, welches die Richtung steuert.
Sollte die Fahrtrichtung verdreht sein, muss dies manuell im Skript geändert werden. Im “case Block für Modbus Address (Pokeys)” des Shutter Skriptes findet sich an den beiden Stellen ein entsprechender Kommentar.
Für den Fall, dass man unterschiedlich verdrahtete Rolladen/Jalousien an den Relais nutzt, müssen für die jeweiligen Konfigurationen zwei unterschiedliche Shutterskripte verwendet werden. Einmal ein Skript für die eine Verdrahtung und ein zweites Skript mit vertauschten Werten für das Richtungsrelais für die spiegelverkehrte Verdrahtung.
Konfiguration der zwei Sende-Instanzen:
Abarbeitungsskript:
<?
//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $_IPS['INSTANCE']); /* InstanceID */
//IPS_LogMessage("Direction", $_IPS['DIRECTION']); /* {0..2} Stop, Up, Down */
//IPS_LogMessage("Duration", $_IPS['DURATION']); /* ms */
if($_IPS['SENDER'] != "ShutterControl")
die("This script can only be started by the ShutterControl Module");
define("SC_DIRECTION_STOP", 0);
define("SC_DIRECTION_UP", 1);
define("SC_DIRECTION_DOWN", 2);
$instance = IPS_GetInstance($_IPS['INSTANCE']);
switch($instance['ModuleInfo']['ModuleID'])
{
case "{CB197E50-273D-4535-8C91-BB35273E3CA5}": //Modbus Address (Pokeys)
switch($_IPS['DIRECTION'])
{
case SC_DIRECTION_STOP:
ModBus_WriteCoil($_IPS['INSTANCE'], false);
break;
case SC_DIRECTION_UP:
ModBus_WriteCoil($_IPS['INSTANCE2'], false); //Um Relaisrichtung zu ändern, bitte auf true
IPS_Sleep(100);
ModBus_WriteCoil($_IPS['INSTANCE'], true);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
ModBus_WriteCoil($_IPS['INSTANCE'], false);
}
break;
case SC_DIRECTION_DOWN:
ModBus_WriteCoil($_IPS['INSTANCE2'], true); //Um Relaisrichtung zu ändern bitte, auf false
IPS_Sleep(100);
ModBus_WriteCoil($_IPS['INSTANCE'], true);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
ModBus_WriteCoil($_IPS['INSTANCE'], false);
}
break;
}
break;
case "{48FCFDC1-11A5-4309-BB0B-A0DB8042A969}": //FS20
$running = CreateVariableByName($_IPS['INSTANCE'], "Moving", 0);
$value = GetValue(IPS_GetObjectIDByIdent("StatusVariable", $_IPS['INSTANCE']));
switch($_IPS['DIRECTION'])
{
case SC_DIRECTION_STOP:
if(GetValue($running))
{
FS20_SwitchMode($_IPS['INSTANCE'], $value);
SetValue($running, false);
}
break;
case SC_DIRECTION_UP:
if(!GetValue($running))
{
FS20_SwitchMode($_IPS['INSTANCE'], true);
SetValue($running, true);
}
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
FS20_SwitchMode($_IPS['INSTANCE'], true);
SetValue($running, false);
}
break;
case SC_DIRECTION_DOWN:
if(!GetValue($running))
{
FS20_SwitchMode($_IPS['INSTANCE'], false);
SetValue($running, true);
}
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
FS20_SwitchMode($_IPS['INSTANCE'], false);
SetValue($running, false);
}
break;
}
break;
case "{1B7B5B7D-CAA9-4AB5-B9D8-EC805EC955AD}": //xComfort
switch($_IPS['DIRECTION'])
{
case SC_DIRECTION_STOP:
MXC_ShutterStop($_IPS['INSTANCE']);
break;
case SC_DIRECTION_UP:
MXC_ShutterMoveUp($_IPS['INSTANCE']);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
MXC_ShutterStop($_IPS['INSTANCE']);
}
break;
case SC_DIRECTION_DOWN:
MXC_ShutterMoveDown($_IPS['INSTANCE']);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
MXC_ShutterStop($_IPS['INSTANCE']);
}
break;
}
break;
case "{2D871359-14D8-493F-9B01-26432E3A710F}": //LCN
$type=LCN_GetUnit($_IPS['INSTANCE']);
switch($type)
{
case 0: //Ausgänge
switch($_IPS['DIRECTION'])
{
case SC_DIRECTION_STOP:
LCN_SetIntensity($_IPS['INSTANCE'],0,0);
LCN_SetIntensity($_IPS['INSTANCE2'],0,0);
break;
case SC_DIRECTION_UP:
LCN_SetIntensity($_IPS['INSTANCE'],100,4);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
LCN_SetIntensity($_IPS['INSTANCE'],0,0);
}
break;
case SC_DIRECTION_DOWN:
LCN_SetIntensity($_IPS['INSTANCE2'],100,4);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
LCN_SetIntensity($_IPS['INSTANCE2'],0,0);
}
break;
}
break;
case 2: //Reais
switch($_IPS['DIRECTION'])
{
case SC_DIRECTION_STOP:
LCN_SwitchRelay($_IPS['INSTANCE'],false);
break;
case SC_DIRECTION_UP:
LCN_SwitchRelay($_IPS['INSTANCE'],true);
LCN_SwitchRelay($_IPS['INSTANCE2'],false); // Um Relaisrichtung zu ändern bitte auf true
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
LCN_SwitchRelay($_IPS['INSTANCE'],false);
}
break;
case SC_DIRECTION_DOWN:
LCN_SwitchRelay($_IPS['INSTANCE'],true);
LCN_SwitchRelay($_IPS['INSTANCE2'],true);// Um Relaisrichtung zu ändern bitte auf false
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
LCN_SwitchRelay($_IPS['INSTANCE'],false);
}
break;
}
break;
}
break;
case "{C81E019F-6341-4748-8644-1C29D99B813E}": //LCN Shutter
switch($_IPS['DIRECTION'])
{
case SC_DIRECTION_STOP:
LCN_ShutterStop($_IPS['INSTANCE']);
break;
case SC_DIRECTION_UP:
LCN_ShutterMoveUp($_IPS['INSTANCE']);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
LCN_ShutterStop($_IPS['INSTANCE']);
}
break;
case SC_DIRECTION_DOWN:
LCN_ShutterMoveDown($_IPS['INSTANCE']);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
LCN_ShutterStop($_IPS['INSTANCE']);
}
break;
}
break;
case "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}": //1-Wire Shutter Modul (e-service Online)
switch($_IPS['DIRECTION'])
{
case SC_DIRECTION_STOP:
TMEX_F3A_SetPin($_IPS['INSTANCE'], 0, true);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 1, true);
IPS_Sleep(100);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 0, false);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 1, false);
break;
case SC_DIRECTION_UP:
TMEX_F3A_SetPin($_IPS['INSTANCE'], 0, true);
IPS_Sleep(100);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 0, false);
if($_IPS['DURATION'] > 0)
{
TMEX_F3A_SetPin($_IPS['INSTANCE'], 0, true);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 1, true);
IPS_Sleep(100);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 0, false);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 1, false);
}
break;
case SC_DIRECTION_DOWN:
TMEX_F3A_SetPin($_IPS['INSTANCE'], 1, true);
IPS_Sleep(100);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 1, false);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 0, true);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 1, true);
IPS_Sleep(100);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 0, false);
TMEX_F3A_SetPin($_IPS['INSTANCE'], 1, false);
}
break;
}
break;
/*
case "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}": //1-Wire Shutter (1-wire.de)
switch($_IPS['DIRECTION'])
{
case SC_DIRECTION_STOP:
OneWireShutter($_IPS['INSTANCE'], 0, $_IPS['DURATION']);
break;
case SC_DIRECTION_UP:
if($_IPS['DURATION'] == 0)
$_IPS['DURATION'] = 120000;
OneWireShutter($_IPS['INSTANCE'], 0, $_IPS['DURATION']);
break;
case SC_DIRECTION_DOWN:
if($_IPS['DURATION'] == 0)
$_IPS['DURATION'] = 120000;
OneWireShutter($_IPS['INSTANCE'], 1, $_IPS['DURATION']);
break;
}
break;
*/
case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic Shutter
switch($_IPS['DIRECTION'])
{
case SC_DIRECTION_STOP:
HM_WriteValueBoolean($_IPS['INSTANCE'], "STOP", true);
break;
case SC_DIRECTION_UP:
HM_WriteValueFloat($_IPS['INSTANCE'], "LEVEL", 1.0);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
HM_WriteValueBoolean($_IPS['INSTANCE'], "STOP", true);
}
break;
case SC_DIRECTION_DOWN:
HM_WriteValueFloat($_IPS['INSTANCE'], "LEVEL", 0.0);
if($_IPS['DURATION'] > 0)
{
IPS_Sleep($_IPS['DURATION']);
HM_WriteValueBoolean($_IPS['INSTANCE'], "STOP", true);
}
break;
}
break;
default:
die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}
function OneWireShutter($ins, $dir, $sec) {
@TMEX_F29_SetStrobe($ins, True);
$res = ($dir * 128) + ($sec / 1000);
@TMEX_F29_SetPort((integer)$ins, (integer)$res);
}
function CreateVariableByName($id, $name, $type)
{
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid===false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "This Variable was created by Script");
}
return $vid;
}
?>
Das Skript kan einfach 1zu1 kopiert werden, ohne etwas zu verändern (außer wenn die Fahrtrichtung verdreht ist). Bei einem neuen Rollo werden in der Konfiguration vom Shutter Control Modul, die entsprechenden Sende-Instanzen für Powerrelais und Richtungsrelais eingetragen und das oben gepostete Skript als Abarbeitungsskript angegeben.
Gruß Basti