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.
- Danach den User eintragen der angerufen werden soll.
- Ereignisse bei denen angerufen werden soll mit dem Script verbinden
- In dem Info-Array die entsprechende Variablen-ID und die gewünschten Ansagetexte deklarieren.
- Einen Begrüßungstext und eine Verabschiedung wählen.
- 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 -------------------------
?>