Auflegen einer ISDN-Verbindung

Hallo zusammen,

ich möchte mich bei einem Rauchmelderalarm anrufen lassen. Dazu hab ich folgendes in ein Skript reingepackt:

<?
SetValue(11254 /*[.System\Rauchmelder\rm_V_lv_act]*/, true);
$id = ISDN_Connect(36036 /*[.System\ISDN\isdn_M_menu]*/, "Nummer");
$eid = CreateEventIDByName(11254 /*[.System\Rauchmelder\rm_V_lv_act]*/, "Timer", 1);
IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1, 20); 
IPS_SetEventCyclicTimeBounds($eid, time(), 0);
IPS_SetEventActive($eid, true);

if ($IPS_SENDER == "TimerEvent") {  //Anruf beenden, da nicht abgenommen wird
   IPS_SetEventActive($IPS_EVENT, false);
   $eid = IPS_GetObject($IPS_EVENT);
   SetValue($eid['ParentID'], false);
	$isdn = ISDN_GetActiveConnections(36036 /*[.System\ISDN\isdn_M_menu]*/);
	foreach($isdn as $index) {
	   If ($isdn[$index] == $id) {
		   ISDN_Disconnect(36036 /*[.System\ISDN\isdn_M_menu]*/, $isdn[$index]);
		}
 	}
}

Wenn nicht abgenommen wird, soll nach 20 Sekunden aufgelegt werden. Allerdings klappt das nicht. Es wird zwar der richtige Array-Index gefunden, aber die Verbindung wird, warum auch immer, leider nicht abgebaut. Auch wenn ich direkt mit $id arbeite, wird nicht aufgelegt.
Hat jemand ne Idee, woran das liegen kann? Oder Bug im ISDN-Modul?

Gruß & Danke,
Dirk

Vielleicht hilft Dir das weiter.

Jürgen

Hallo Jürgen,

Danke für den Tip, aber das ist ja genau das, was ich mache… :confused:
:smiley:

Probier mal die Variable „$ISDN_CONNECTION“ anstatt „$isdn[$index]“:

ISDN_Disconnect(36036 /[.System\ISDN\isdn_M_menu]/, $ISDN_CONNECTION);

… so funktioniert es zumindest bei mir.

Hallo Dirk

Hoffe ich kann Dir ein paar Tips geben und Du bekommst das hin.

  1. Sehe ich es richtig das du im oberen Teil kein
if ($IPS_SENDER == "Variable")

oder etwas entsprechendes verwendest?
Das würde bedeuten das IPS jedesmal, auch wenn Du auflegen willst, erstmal eine neue Verbing herstellen will.

2.Wenn Du den oberen Teil wie unter 1. abtrennst oder in ein anderes Skript schreibst, dann weiß der „Timerevent“ Teil nicht was $id ist.

  1. Schau Dir nochmal die foreach benutzung an
$arr = array(1, 3, 5, 6);
foreach ($arr as $value) {
    $value = $value * 2;
   echo $value; // Ausgabe(2, 6, 10, 12)
}

Wenn bei Dir z.B. $isdn[0] = 1 ist, dann wird $index im ersten durchlauf von foreach 1 und Du versuchst $index[1] mit $id zu vergleichen.
Da steht ja aber nichts drin also ist die If bedingung false und wird nicht ausgeführt.

Zum auflegen benutze ich dies hier:

if ($IPS_SENDER == "TimerEvent")
	{
   $isdn = ISDN_GetActiveConnections(55105 /*[Hilfsprogramme\Fritzbox\ISDN Module]*/);
	ISDN_Disconnect(55105 /*[Hilfsprogramme\Fritzbox\ISDN Module]*/,$isdn[0]);
	IPS_SetScriptTimer($IPS_SELF,0);
	}

Damit wird zwar nicht verglichen ob das auch die Verbindung ist die IPS angerufen hat, aber davon sollte man ja ausgehen. :smiley:

Hoffe damit kommst Du erstmal weiter.

Ich habe es übrigens so gelöst das ich bei einem Alarm ein anderes ISDN_Programm im ISDN Modul nehme und damit den Alarm bestätigen, oder weiter Informationen(z.B. Temperaturen) abrufen kann. Wenn ich nicht bestätige innerhalb einer gewissen Frist ruft er noch jemand anderen an.

Gruß Jannis

P.S.: Wenn Du nur einen Timer setzen willst würde ich statt dem hier:

$eid = CreateEventIDByName(11254 /*[.System\Rauchmelder\rm_V_lv_act]*/, "Timer", 1);
IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1, 20); 
IPS_SetEventCyclicTimeBounds($eid, time(), 0);
IPS_SetEventActive($eid, true); 

einfach ein

IPS_SetScriptTimer($IPS_SELF,20); // Timer einschalten 20 sec.
IPS_SetScriptTimer($IPS_SELF,00); //Timer ausschalten

nehmen.

Hallo Jannis,

dein erster Tipp war es. Ich Idiot hab immer noch eine Verbindung aufgebaut. Den ersten Teil hab ich nun einfach in eine negierte If-Abfrage auf einen TimerEvent reingepackt und nun funktioniert es. Vielen Dank nochmal! :smiley: