Problem mit ISDN_Disconnect

Hallo,

ich wollte mich anrufen lassen wenn meine Aquarium Temp. zu niedrig ist.

Das mit dem Anrufen klappt auch, aber IPS legt nach der Ansage nicht wieder auf :frowning:

Und das ist, wenn die Handy Mailbox rangeht nicht so lustig :o

ISDN_Connect(ISDN_Alarm, "xxxxxxxx");
ISDN_PlayWave(ISDN_Alarm,"d:/daten/ip-symcon/sounds/Temp_Aquarium.wav");
 
ISDN_Disconnect(ISDN_Alarm);

Jemand `ne Idee was falsch sein könnte?

Hallo HBraun,

ist ISDN_Alarm eine Variable? Dann sollte sie $ISDN_Alarm heißen.

Wahrscheinlich musst Du auch noch zwischen der Ansage und dem Auflegen eine Verzögerung einbauen.

Ich wünsche einen schönen Tag.

Christoph.

Hallo Christoph,

Nein, ist das ISDN Module (Instance)

Werde ich mal versuchen.

Also hinter dem „ISDN_Disconnect(“ muß meiner Meinung nach eine Instance_ID stehen, die üblicherweise numerisch ist. Aber wenn der Rest funktioniert, wird das schon passen.

Ich persönlich löse das „Auflege-Problem“ folgendermaßen: Ich habe zunächst mal ohnehin ein Script im 60-Sekunden-Takt laufen. Unter anderem prüft es, ob eine Verbindung besteht - eingehend oder ausgehend. Beim zustandekommen eines Gespräches lasse ich zwei Variablen ändern. Eine davon ist die DTMF-Variable, das ist in dem Fall relativ wichtig. Daran orientiert sich dieses Minutenscript und triggert dann das folgende „Aufleger-Script“:



//Wird vom Minutenscript gestartet, falls ISDN_DTMF ungleich "off"
//oder FlasISDN ungleich 99

$timeout=120;  //Sekunden bis zum Auflegen
$Modul1=35940;
$Modul2=47258;
$Modul3=16061;

$Modul = GetValueInteger("ISDN_Modul_ID");
$dtmf_update=IPS_GetUpdateTime("ISDN_DTMF");

if((time()-$dtmf_update)>$timeout)
   {
      ISDN_PlayWave($Modul,"E:/Programme-XP/IP-Symcon/Telefontexte/aufleger.wav");
      IPS_Sleep(8000);
      //Prfung, ob inzwischen doch noch eine Taste gedrckt wurde
      if($dtmf_update!=IPS_GetUpdateTime("ISDN_DTMF")) return;
      ISDN_Disconnect($Modul1);
      ISDN_Disconnect($Modul2);
      ISDN_Disconnect($Modul3);
      
      SetValueString("ISDN_DTMF","off");
      SetValueInteger("Flag_ISDN",99);
   }
   
?>

Das Script prüft, ob die DTMF-Variable sich innerhalb der letzten $timeout Sekunden geändert hat. Deshalb muss die auch gleich beim Beginn des Gespräches automatisch irgendwie verändert werden.
Die IPS-Variable „ISDN_Modul_ID“ wird beim zustandekommen eines Gespräches mit der Instance_ID der aktiven Instanz belegt… das muss man natürlich nicht so kompliziert machen, wenn man nur eine Instanz verwendet.
Diese Methode funktioniert bei mir einwandfrei und hat den Vorteil, daß auch eingehende Gespräche irgenwann beendet werden, wenn man die „Auflegen-Taste“ verfehlt hat.
Ansonsten habe ich auch eben die „These ins Forum genagelt“, daß ich die ISDN_Disconnect Funktion für fehlerhaft halte. Evtl. dann, wenn noch eine WAV abgespielt wird!?
In dem Fall funktioniert das Script eben beim zweiten oder dritten Durchlauf. :wink:

MfG, douglas882

PS: Mein Aquarium ruft mich nur an, wenn es ausläuft - und ich hoffe, daß das nie vorkommt! :eek:

Hallo douglas882,

Mit nummerisch hast schon recht. Habe aber meinen Instance über eine Globale Function Namen gegeben, fand`s irgendwie praktischer.

Könnte natürlich sein. Habe jetzt ein ISDN_StopPlay eingebaut und nun funktioniert es. Aber evtl. lag der Fehler auch woanders in meinem Script.

Naja, bei uns ist während eines Urlaubs mal die Heizung ausgefallen, war für einige Fische nicht so Klasse :o

Mann, bin ich doch ein Hirsch! Auf diese naheliegende Idee bin ich irgendwie garnicht gekommen: ISDN_StopPlay :o
Das hat mir irgendwie in meinem „aktiven Wortschatz“ gefehlt… werde ich dann später auch mal „einbauen“ und ausprobieren! :slight_smile:

MfG, douglas882