In bin froh, wenn mir jemand hilft, da ich mit dem Thema noch ziemlich am Anfang stehe, also von „nicht gefallen“ kann keine Rede sein - ich wusste nur nicht genau was du damit meinst.
Ich versuche mal alles so genau zu beschreiben wie es geht und hoffe, dass dann klar ist was ich zu tun versuche:
Problem 1: Wie kann ich der Statusvariable die aktuelle Position der Rolläden zuweisen (Objekt ID 52961 im Anhang „Objektbaum.jpg“ wenn jemand einen Taster des BTicino-Systems betätigt?
Ich erhalte die einzelnen Status der Rolläden über folgendes PHP-Script
<?
$RegVarID = $IPS_INSTANCE;
$newdata = $IPS_VALUE;
$myID = $IPS_SELF;
$SocketID = IPS_GetParent($myID);
$data = RegVar_GetBuffer ( $RegVarID );
if ($data = "*#*1##") { //sende Monitorkomanndo wenn der Empfangsstring ankommt
CSCK_SendText(23985 /*[BTicino Socket Client]*/ ,'*99*1##');
}
$data .= $newdata;
// Parsen
$suchmuster = '/^\*\#\*1\#\#\*2\*([0-2])\*([0-9]+)\#\#/';
if (preg_match($suchmuster, $data, $treffer) > 0) {
//CODE ZUM SETZEN DES ROLLOSTATUS HIER
//TREFFER[1] = 0..2 (stop/auf/ab)
//TREFFER[2] = RolloID
IPS_LogMessage("BTicono-Listener",$treffer [1]." " . $treffer[2]);
}
// wrte back data to variable for use in other scripts
RegVar_SetBuffer($RegVarID, $data);
?>
Die Statusvariable (ID52961) ist schreibgeschützt; es steht auch dabei "Variable kann nicht von PHP-Scripts geändert werden. Ich habe auch schon versucht eine eigene Variable anzulegen, weiss aber nicht wie ich die mit der Instanz verknüpfen kann.
Problem 2: Wie ändere ich die Position von mehreren Rollos gleichzeitig und stelle sicher, dass IPS den Status der Rollos kennt?
Folgendes Script funktioniert, allerdings weiss ich wie auch beim Problem 1 nicht, wie ich den Status der Rollos an IPS weitergebe:
<?
$s = IPS_GetScript(39076 /*[Rolläden\Script\B-Ticino Control]*/);
include($s['ScriptFile']); //Funktion, die ein Commandlinetool für das Steuern der Rollos aufruft
//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $SC_INSTANCE); /* InstanceID */
//IPS_LogMessage("Direction", $SC_DIRECTION); /* {0..2} Stop, Up, Down */
//IPS_LogMessage("Duration", $SC_DURATION); /* ms */
if($IPS_SENDER != "ShutterControl") die("This script can only be started by the ShutterControl Module");
$i2f[1] = 52953 /*[Rolläden\Erdgeschoss\Büro Nord]*/; //Büro Nord
$i2f[2] = 32712 /*[Rolläden\Erdgeschoss\Küche West]*/; //Küche West
$i2f[3] = 49033 /*[Rolläden\Erdgeschoss\Mehrzweckraum]*/; //Mehrzweckraum
$i2f[4] = 55561 /*[Rolläden\Erdgeschoss\Wohnzimmer Ost]*/; //Wohnzimmer Ost
$i2f[5] = 44322 /*[Rolläden\Erdgeschoss\Wohnzimmer Süd]*/; //Wohnzimmer Süd
$i2f[6] = 38225 /*[Rolläden\Erdgeschoss\Wohnzimmer West Mitte]*/; //Wohnzimmer West 1
$i2f[7] = 45193 /*[Rolläden\Erdgeschoss\Wohnzimmer West]*/; //Wohnzimmer West 2
$i2f[8] = 19865 /*[Rolläden\Erdgeschoss\Stiegenhaus Nord]*/; //Stiegenhaus Nord
$i2f[9] = 41347 /*[Rolläden\Obergeschoss\KiZi Süd]*/; //KiZi Süd
$i2f[10] = 35282 /*[Rolläden\Obergeschoss\KiZi West]*/; //KiZi West
$i2f[11] = 22609 /*[Rolläden\Obergeschoss\Zi1]*/; //Zi1
$i2f[12] = 36194 /*[Rolläden\Obergeschoss\KiZi1]*/; //KiZi1
$i2f[13] = 54769 /*[Rolläden\Obergeschoss\Bad]*/; //Bad
$i2f[14] = 43266 /*[Rolläden\Obergeschoss\SZ1]*/; //SZ1
$i2f[15] = 12076 /*[Rolläden\Obergeschoss\SZ2]*/; //SZ2
$i2f[16] = 19865 /*[Rolläden\Erdgeschoss\Stiegenhaus Nord]*/; //Stiegenhaus Nord
switch($SC_INSTANCE){
case "57491": //Alles gewählt
$sca=1;
$sce=16;
break;
case "12994": //Alles EG gewählt
$sca=1;
$sce=8;
break;
case "31290": //Alles OG gewählt
$sca=9;
$sce=16;
break;
}
switch($SC_DIRECTION)
{
case SC_DIRECTION_STOP:
for ($i = $sca; $i <= $sce; $i++) {
ExecuteShutter(0,$i2f[$i]);
}
break;
case SC_DIRECTION_UP:
for ($i = $sca; $i <= $sce; $i++) {
ExecuteShutter(1,$i2f[$i]);
}
if($SC_DURATION > 0)
{
IPS_Sleep($SC_DURATION);
for ($i = $sca; $i <= $sce; $i++) {
ExecuteShutter(0,$i2f[$i]);
}
}
break;
case SC_DIRECTION_DOWN:
for ($i = $sca; $i <= $sce; $i++) {
ExecuteShutter(2,$i2f[$i]);
//SC_Move($i2f[$i], 100);
}
if($SC_DURATION > 0)
{
IPS_Sleep($SC_DURATION);
for ($i = $sca; $i <= $sce; $i++) {
ExecuteShutter(0,$i2f[$i]);
}
}
break;
}
Wenn ich den Befehl SC_Move (im Script auskommentiert) statt ExecuteShutter verwende, dann werden die Rollos hintereinander geschaltet, d.h. erst wenn der erste Rollo vollständig auf- oder zu ist kommt der nächste dran - und das verursacht nach einiger Zeit auch ein TimeOut. Allerdings werden mit dieser Methode die Status der Variable POSITION richtig gesetzt.
Ich hoffe, dass ich nun alle Informationen die ihr Experten braucht angeführt habe und meine Beschreibung halbwegs klar ist. Wie gesagt - ich bin noch ein Anfänger und am Lernen, also entschuldigt bitte, wenns eine blöde Frage ist. Ich danke im Voraus für eure Hilfe
Hugo