Ereignisskript im ISDN Modul Probleme mit $ISDN_EVENT

Hallo zusammen,

nach einigen Stunden Forensuche und eigenen Versuchen nun mein Hilferuf an euch.

Ich versuche krampfhaft das Ereignisscript vom ISDN Modul zum laufen zu bekommen. Und zwar scheitere ich konkret an der Systemvariable $ISDN_EVENT die im Switch Case Modus die einzelnen Aktionen steuern soll. Leider, das haben meine versuche mir gezeigt gibt es die SystemVatiable in V2.5 wohl nicht mehr.

So wie $IPS_Sende in $_IPS[‚SENDER‘] umgetauft wurde vermute ich auch hier eine Änderung.
Die Doku sagt leider GAR nichts aus. Hat es jemand bei sich zum laufen gebracht?

$ISDN = 14202 /*[Scripte\Telefon\ISDN ]*/;

if($_IPS['SENDER'] == "ISDN") {

	setValueString(27660  /*[Scripte\Telefon\ISDN \Ereignisse\Info]*/,$ISDN_EVENT); //Schreibe den Inhalt in eine Stringavraibel zum prüfen - bleibt leer!

	 switch ($ISDN_EVENT) {
	   case "Connect":
	      setValue(53269 /*[Scripte\Telefon\ISDN \Status]*/ ,true);
	      echo "Anruf angenommen";
	    break;
	   
	   case "Disconnect":
	       setValue(53269 /*[Scripte\Telefon\ISDN \Status]*/ ,false);
               echo "Anrufer hat aufgelegt";
	   break;
 	}
}

Hallo Bastian,

in IPS 2.5 und V 2.6 funktionieren beide Schreibweisen ($IPS_SENDER und $_IPS[‚SENDER‘]. Zum ISDN-Modul kann ich nichts sagen, aber was wirft denn print_r($_IPS); aus?

Hallo Raketenschnecke,

leider funktioniern nicht beide Schreibweisen. Habe ich einfach mit einem kleinen Script ausprobiert:

if($_IPS['SENDER'] == "ISDN") {
setValueString(27660 /*[Scripte\Telefon\ISDN \Ereignisse\Info]*/ ,"Jetzt sollte was in der Variable stehen");
}

In der String Variable wird mein Test Text angezeigt

if($IPS_SENDER == "ISDN") {
setValueString(27660 /*[Scripte\Telefon\ISDN \Ereignisse\Info]*/ ,"Jetzt sollte was in der Variable stehen");
}

Dann wird die Variable nicht beschrieben. Ergo (Wenn ich mich nicht versehe) $IPS_SENDER geht nicht!

Also $ISDN_EVENT sacht „Undefined variable: ISDN_EVENT“
print_r($_IPS) sagt nur das übliche (Sender, Self und Thread)

nun, definitiv gehen beide , von mir o.g. Schreibweisen. Das was du da ausprobierst sind ja schon spezielle Events. Ob es die noch gibt -weiß ich nicht, Dazu hab ich mich auch nicht geäussert.
Da ich von hier aus auch nicht sehen kann, wer deín Script triggert, was genau im $_IPS-Array übergeben wird, was du als Ergebnis erwartest, kann ich nicht weiterhelfen.

ich hab aber inzwischen in das compatibility-Script geschaut, vielleicht kommst du damit weiter:


switch($_IPS['SENDER'])
{
	case "HeatingControl":
		$HC_INSTANCES = $_IPS['INSTANCES'];
		$HC_INVERTS = $_IPS['INVERTS'];
		$HC_VALUE = $_IPS['VALUE'];
		break;
	case "ShutterControl":
		$SC_INSTANCE = $_IPS['INSTANCE'];
		$SC_INSTANCE2 = $_IPS['INSTANCE2'];
		$SC_DIRECTION = $_IPS['DIRECTION'];
		$SC_DURATION = $_IPS['DURATION'];
		break;
	case "ISDN":
		$ISDN_CONNECTION = $_IPS['CONNECTION'];
		$ISDN_EVENT = $_IPS['EVENT'];
		$ISDN_DATA = $_IPS['DATA'];
		break;
	case "WebFront":
		$REMOTE_ADDR = $_IPS['REMOTE_ADDR'];
		break;
	case "Designer":
		$REMOTE_ADDR = $_IPS['REMOTE_ADDR'];
		$REMOTE_HOST = $_IPS['REMOTE_HOST'];
		break;
}

Ohne große Diskussion…

bei mir gehen die alten Schreibweisen nicht! Aber die Liste hat mir weiter geholfen. Die neuen schreibweisen funktionieren.

Danke!

Hallo,

bei mir scheint noch alles zu funktionieren, ich habe für 2.5 oder 2.6 nichts geändert.
Hier ist mal mein Script:

<?
$timestamp = time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
echo "Event: ".$ISDN_EVENT."
";
if($ISDN_EVENT != "Disconnect")
    {
    $Cinfo = ISDN_GetConnectionInfo(27071 /*[Computer\ISDN\ISDN Module Telefon]*/, $ISDN_CONNECTION);
    print_r($Cinfo);
    }
switch($ISDN_EVENT) {
case "Incoming":
$blacklist= 0;
$Anrufer = $Cinfo['CallingNumber'];
$Gerufener = $Cinfo['CalledNumber'];
if($Anrufer == "")
{
$Anrufer="XXX";
}
$Zeilen = 1;
$Dateizeiger = fopen("R:\ip-symcon-log\blacklist.log","r");
while(($Daten = fgetcsv($Dateizeiger, 20, " ")) !== FALSE)
{
    $AnzahlDerFelder = count($Daten);
    $Zeilen++;
    echo "daten: ".$Daten[0]."
";
      if($Daten[0] == $Cinfo['CallingNumber'])
      {
      $blacklist= 1;
      }
}
fclose($Dateizeiger);
echo $blacklist;
if($blacklist == 1)
      {
      ISDN_AcceptCall(27071 /*[Computer\ISDN\ISDN Module Telefon]*/, $ISDN_CONNECTION);
      }
SetValue(14905 /*[Computer\ISDN\Rufnummer2]*/ , $Anrufer);
SetValue(30232 /*[Computer\ISDN\gerufener]*/  , "$Gerufener");
SetValue(59865 /*[Computer\ISDN\calltime]*/ , "$datum $uhrzeit");
$datei = fopen("R:\ip-symcon-log\anrufer.log","a");
fwrite($datei, "$datum $uhrzeit $Anrufer $Gerufener $blacklist
");
fclose($datei);
$meldung = "Das Telefon klingelt.";
SetValue(26627 /*[Twitter	witter]*/  , $meldung);
break;
case "Connect":
$file = "C:/IP-Symcon/sprache/blacklist3.wav";
IPS_Sleep(1000);
ISDN_PlayWave(27071 /*[Computer\ISDN\ISDN Module Telefon]*/, $ISDN_CONNECTION, $file);
break;
case "PlayFinish":
IPS_Sleep(1600);
ISDN_Disconnect(27071 /*[Computer\ISDN\ISDN Module Telefon]*/, $ISDN_CONNECTION);
break;
}
?>

PS: in mein Script finde ich nichts von

$_IPS['SENDER']

.

Schöne Grüße
Thomas

Bastian hat IPS 3.0, da geht das nicht mehr :smiley:

Ich glaube euch allen…

aber bei mir geht es einfach nicht :smiley: bestimmt schon auf 3.0 heimlich geupdatet.

Habe das Script 1zu1 laufen. Das eine funktioniert das andere nicht!

Es ist ja auch müßig darüber zu reden $_IPS ist der neue Standard für 3.0 und damit ist es auch gut so.

Eine Sache funktioniert bei mir noch nicht so wie es soll. Die DTMF Erkennung!
Habe unter case „DTMF“ einfach mal eine setValue Variable gelegt um zu sehen ob die Case Anweisung auch durchlaufen wird. Leider passiert da gar nichts!

Kann es sein, dass die Telefonanlage evtl mir einen Strich durch die Rechnung macht? Pansonic mit über 80Nebenstellen!

Ansonsten habe ich alle anderen Bedingungen herausbekommen. Incomin geht, Connect geht, PlayFinish geht, Disconnect geht. NUR DTMF nicht hhrrrrrrrr!!!:confused:

Hat da noch einer einen Tipp!

$meldung = „Das Telefon klingelt.“;
SetValue(26627 /[Twitter witter]/ , $meldung);

Zu geil Thomas… wenn das Telefon klingelt gibt es eine Twitternachricht :smiley:

Ich hatte sowas früher mit meinem Nabaztag mit RFID in meiner Geldbörse:
Bastian geht arbeiten: Twittermeldung Bastian geht :frowning:
Bastian kommt wieder nach Hause: Bastian ist wieder da :smiley:

Eine besser Anwesenheitskontrolle gibt es nicht :smiley:

Hallo,

du brauchst die ersten beiden Zeilen (IPS Sender) nicht, da du das Script aus dem ISDN Modul startest weiß es schon wo die Daten herkommen. Schau mal in mein Script.

Schöne Grüße
Thomas

@Thomas
Stimmt schon.

Aber wieso geht mein DTMF nicht. Es ist zum verzweifeln. Ich glaube ich habe mich heute schon 100.000x angerufen!

So habe auch mal im Debug geschaut nichts!

Bildschirmfoto 2012-08-27 um 19.34.18.png

Wer möchte kann gerne mal probieren 04421 3004421 bei 0 sollte er schreiben bei jeder anderen Taste auflegen.

Bastian,

ich hab ja auch verstanden, dass es bei dir nicht geht. Nur so langsam sollte klar geworden sein, dass das nichts mit der Änderung der Befehls-Schreibweise zu tun haben kann.:wink:
hätte ich ISDN, hätte ich hier weiter bohren können…

Hallo Bastian,

nachdem ich dann nun bei Version 2.6 angekommen bin, wollte ich mein DTMF-Problem wieder rausholen und hoffte, es sei mit der neuen IPS-Version behiben. Aber auch mit 2.6 geht es nicht. Bei mir muss ich die Ziffer 2x schnell nacheinander drücken. Dann sieht man was im Debug und die gewünschte Funktion in der switch-Anweisung wird ausgeführt. Warum aber 2x schnell, konnte mit bisher niemand erklären. http://www.ip-symcon.de/forum/threads/5071-ISDN-Modul-verwenden?p=153082#post153082

So bei mir gab es eine Entwicklung. DTMF konnte bei mir nicht funktionieren, da der eingesetzte LanCom Router KEIN DTMF über LanCapi unterstützt. Das ist zum Mäuse melken. Schweineteures Gerät und 0 Funktionen.
Also doch die alte gute FritzBox! Ich werde berichten…

Tach,

Ich habe auch kleine Erfolge zu melden: DTMF geht jetzt auch ohne zweimal schnell zu drücken. Habe an der Tk-Anlage das Puls-Pausen-Verhältnis für das DTMF geändert. Mehrmalig probiert und dann gewonnen. Merkwürdig! Musste ich noch für keinen Anwendungsfall ändern. Aber scheinbar ist das ISDN-Modul eine kleine Heulsuse, die bedauert werden möchte.:stuck_out_tongue: Habe nun vor, einige Funktionen wie Lichtsteuerung darüber abzubilden. Also abends im Bett schnell noch mal IPS anrufen, Stati vorlesen und ggf. das vergessene Licht im Schuppen noch aussschalten lassen. Und das vielleicht noch von extern, wenn mal kein Internet zur Verfügung steht…

Kann ich das Abspielen eines wav-Files auch abbrechen, wenn während dessen eine weiteres DTMF-Signal empfangen wurde?