IPS telefoniert!

Hallo alle zusammen,

mit der neuen Version von IgS habe ich die Möglichkeit mit IPS automatische Anrufe zu generieren. z.B. bei Feuer/Rauch.

Was Ihr dazu braucht ist:

  • IgS in der Version 2.1
  • Skype und ein gültigen Skype-Account
  • Eine TTS-Instanz

Das unten stehende Script in ein leeres Script kopieren und speichern.

  1. Danach den User eintragen der angerufen werden soll.
  2. Ereignisse bei denen angerufen werden soll mit dem Script verbinden
  3. In dem Info-Array die entsprechende Variablen-ID und die gewünschten Ansagetexte deklarieren.
  4. Einen Begrüßungstext und eine Verabschiedung wählen.
  5. Die ID der TTS-Instanz eintragen.
    Das war‘s.

Viel Spaß damit


<?
/*=============================================
skrAutoCall - Martin Heinzel - 03.07.2011
Version: 1.0

Beschreibung:
Mit diesem Script werden automatisch Anrufe per Skype generiert.
Das Script wird beim ersten Aufruf eingerichtet.

Schrittkette (StepCount):
-------------------------

0  =  kein Anruf aktiv
10 =  AutoCall starten
20 =  AutoCall "Ringing"
30 =  AutoCall aktiv
40 =  AutoCall beenden

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

//Bitte anpassen
//------------------------------------------
// Telefonummer die angerufen werden soll
$Username         = "echo123";
$Begruessung      = "Hallo, hier ist die Haussteuerung von Martin Heinzel.";

//Infotexte bestehend aus 'Variablen-ID' => 'Infotext'
$Infotexte			=	array(0 		=> 'Es gibt aktuell: kein Problem.',
			                  12345 => 'Es gibt aktuell ein Problem mit dem Rauchmelder im Untergeschoss.',
			                  23456 => 'Es gibt aktuell ein Problem mit dem Rauchmelder im Obergeschoss.',
			                  34567 => 'Es gibt aktuell ein Problem mit dem Rauchmelder im Dachgeschoss.');

$Verabschiedung   = "Bis dann, und auf Wiedersehen.";

$id_TTS				= 54665 /*[.Sound\Text To Speech]*/;
//------------------------------------------

// ID's
//------------------------------------------
// bestehende ID's
$CatID 				= IPS_GetObjectIDByName(".Skype", 0);
$id_Username      = IPS_GetObjectIDByName("Username", $CatID);
$id_PlaceCall 		= IPS_GetObjectIDByName("PlaceCall", $CatID);
$id_CS_Ringing    = IPS_GetObjectIDByName("CS_Ringing", $CatID);
$id_CS_Progress   = IPS_GetObjectIDByName("CS_Progress", $CatID);
$id_FinishCall	   = IPS_GetObjectIDByName("FinishCall", $CatID);
$id_PlayFile      = IPS_GetObjectIDByName("PlayFile", $CatID);
$id_SetPlayFile   = IPS_GetObjectIDByName("SetPlayFile", $CatID);

// Kontrolle der neuen ID's
$id_StepCount		= 	@IPS_GetVariableIDByName("StepCount", $IPS_SELF);
// Wenn es diese Variable noch nicht gibt dann
if($id_StepCount === false)
{
	//erzeugen und initialisieren der Variablen StepCount
	$id_StepCount 	= IPS_CreateVariable(1);
	IPS_SetName($id_StepCount, "StepCount");
	IPS_SetParent($id_StepCount, $IPS_SELF);
	SetValueInteger($id_StepCount, 0);
	$StepCount     = 0;
}
else
{
	$StepCount     = GetValueInteger($id_StepCount);
}

//------------------------------------------

// Variablen
//--------------
$PlaceCall        = GetValueBoolean($id_PlaceCall);
$FinishCall    	= GetValueBoolean($id_FinishCall);
$SetPlayFile    	= GetValueBoolean($id_SetPlayFile);
$Ansagetext       = "";
if (!isset($IPS_VARIABLE))     $IPS_VARIABLE    = 0;
	
// Konstanten
//--------------
define('No_Call'		, 0);
define('PlaceCall'	, 10);
define('Ringing'		, 20);
define('Aktive'		, 30);
define('FinishCall'	, 40);

//-------------------------------------------------------------

//--------------------------- Main ----------------------------
// eintragen der Ereignisse
$EreignisID = @IPS_GetEventIDByName("CS_Ringing", $IPS_SELF);
// Wenn es die Ereignisse noch nicht gibt dann
if($EreignisID === false)
{

	// anlegen des Events CS_Ringing
	$eid_CS_Ringing 	= IPS_CreateEvent(0);
	IPS_SetName($eid_CS_Ringing, "CS_Ringing");
	IPS_SetEventTrigger($eid_CS_Ringing, 4, $id_CS_Ringing);
	IPS_SetEventTriggerValue($eid_CS_Ringing, true);
	IPS_SetParent($eid_CS_Ringing, $IPS_SELF);
	IPS_SetEventActive($eid_CS_Ringing, true);

	// anlegen des Events CS_Progress
	$eid_CS_Progress 	= IPS_CreateEvent(0);
	IPS_SetName($eid_CS_Progress, "CS_Progress");
	IPS_SetEventTrigger($eid_CS_Progress, 4, $id_CS_Progress);
	IPS_SetEventTriggerValue($eid_CS_Progress, true);
	IPS_SetParent($eid_CS_Progress, $IPS_SELF);
	IPS_SetEventActive($eid_CS_Progress, true);

	// anlegen des Events PlaceCall
	$eid_PlaceCall 	= IPS_CreateEvent(0);
	IPS_SetName($eid_PlaceCall, "PlaceCall");
	IPS_SetEventTrigger($eid_PlaceCall, 4, $id_PlaceCall);
	IPS_SetEventTriggerValue($eid_PlaceCall, false);
	IPS_SetParent($eid_PlaceCall, $IPS_SELF);
	IPS_SetEventActive($eid_PlaceCall, true);

	// anlegen des Events FinishCall
	$eid_FinishCall 	= IPS_CreateEvent(0);
	IPS_SetName($eid_FinishCall, "FinishCall");
	IPS_SetEventTrigger($eid_FinishCall, 4, $id_FinishCall);
	IPS_SetEventTriggerValue($eid_FinishCall, false);
	IPS_SetParent($eid_FinishCall, $IPS_SELF);
	IPS_SetEventActive($eid_FinishCall, true);

}

// Schritt 00: kein Anruf aktiv
if($StepCount == FinishCall	and ($IPS_VARIABLE == $id_FinishCall or $IPS_SENDER == "TimerEvent") or
   $StepCount == PlaceCall		and $IPS_SENDER == "TimerEvent")
{
	// Bei einem Kommunikationsfehler zu IgS bleiben die Bit's stehen
	if($PlaceCall)
	{
	   SetValueBoolean($id_PlaceCall, false);
	}
	
	if($FinishCall)
	{
	   SetValueBoolean($id_FinishCall, false);
	}

	if($SetPlayFile)
	{
	   SetValueBoolean($id_SetPlayFile, false);
	}

	// Den Scripttimer deaktivieren
	IPS_SetScriptTimer($IPS_SELF, 0);
	// Die Schrittkette auf "kein Anruf aktiv"
	SetValueInteger($id_StepCount, No_Call);
}

// Schritt 01: AutoCall starten
if($StepCount 		== No_Call				and
	$IPS_VARIABLE 	!= $id_CS_Ringing 	and
	$IPS_VARIABLE 	!= $id_CS_Progress 	and
	$IPS_VARIABLE 	!= $id_PlaceCall 		and
	$IPS_VARIABLE 	!= $id_FinishCall)
{

	// erzeugen des Ansagetextes
	foreach($Infotexte as $key => $value)
	{

		//Durchsuchen der $key's nach der Triggervariablen
		If($IPS_VARIABLE == $key)
		{
		   //zusammensetzen des Ansagetextes
			$Ansagetext = $Begruessung . ":" . $value . ":" . $Verabschiedung;
			TTS_GenerateFile($id_TTS, $Ansagetext,IPS_GetKernelDir()."media\Ansagetext.wav",18);
		   IPS_Sleep(50);
		}
	}

	// Die Telefonnummer eintragen
	SetValueString($id_Username, $Username);
	// "PlaceCall" setzen
	SetValueBoolean($id_PlaceCall, true);
	// Den Scripttimer aktivieren
	IPS_SetScriptTimer($IPS_SELF, 10);
	// Die Schrittkette auf "AutoCall starten"
	SetValueInteger($id_StepCount, PlaceCall);
}

// Schritt 02: AutoCall "Ringing"
if($StepCount == PlaceCall		and $IPS_VARIABLE == $id_CS_Ringing)
{

	// Den Scripttimer deaktivieren
	IPS_SetScriptTimer($IPS_SELF, 0);
	// Den Scripttimer aktivieren
	IPS_SetScriptTimer($IPS_SELF, 20);
	// Die Schrittkette auf AutoCall "Ringing"
	SetValueInteger($id_StepCount, Ringing);
}

// Schritt 03: AutoCall aktiv
if($StepCount == Ringing		and $IPS_VARIABLE == $id_CS_Progress)
{

	// Den Scripttimer deaktivieren
	IPS_SetScriptTimer($IPS_SELF, 0);

	// Die Schrittkette auf "AutoCall aktiv -> Begrüssung"
	SetValueInteger($id_StepCount, Aktive);

	//abspielen der Begrüssung
	SetValueString($id_PlayFile, IPS_GetKernelDir()."media\Ansagetext.wav");
	SetValueBoolean($id_SetPlayFile, True);

	// Den Scripttimer aktivieren
	IPS_SetScriptTimer($IPS_SELF, 20);

}

// Schritt 04: AutoCall beenden
if($IPS_SENDER == "TimerEvent"	and ($StepCount == Ringing or $StepCount == Aktive))
{
	// Den Scripttimer deaktivieren
	IPS_SetScriptTimer($IPS_SELF, 0);
	// "FinishCall" setzen
	SetValueBoolean($id_FinishCall, true);
	// Den Scripttimer aktivieren
	IPS_SetScriptTimer($IPS_SELF, 10);
	// Die Schrittkette auf "AutoCall beenden"
	SetValueInteger($id_StepCount, FinishCall);
}

//------------------------- Main ENDE -------------------------

?>

Hallo Martin… was ist den IgS oder woher holt man das, google kennt da alles von dokumentensolutions bis hin zu freeware welche SW verwendest du da genau hat das was mit den Rauchmeldern zu tun=?

Hallo,

ich denke gemeint ist IPS goes Skype:

http://www.ip-symcon.de/forum/115753-post1.html

Gruß
Christian

Genau!!

Besten Dank Christian

Allesss klar… begriffen Danke :slight_smile: Ist ne Coole Sache, guten Tag hier ist der Telefonautomat von XY, in Ihrem Wohnzimmer brennt es und die Temperatur beträgt aktuell 100 grad :slight_smile: hehe aber werde es wohl mal testen, immerhin ist Telefonanruf doch eher auffallend im Notfall als nur SMS oder Email… :slight_smile:

Danke vielmals und Gruss

Bitte, Bitte. :slight_smile: