Habs jetzt so umgesetzt.
Pro Brandmeldeschleife eine VOIP Instanz.
Das ganze ruft drei Rufnummern hintereinader an und wiederholt das ganze 1x.
Wenn jemand abhebt, dann wird nicht mehr angerufen.
Bei Abheben, wird die Ansage abgespielt, hier habe ich ein IPS_Sleep einbauen müssen, das die Absage abgespielt werden kann, also das gewartet wird. In der 6.4 soll das per Variable überwacht werden können, somit kann ich das slepp wieder rausschmeissen.
Im Webfront, kann man die Telefonnummern eingeben und Nummern aktivieren oder deaktivieren, sowie die Funktion testen.
Ist sicherlich ein bisschen Spaghetti Code, aber ich kanns nicht besser.
Falls man hier was verbessern kann, immer gene her mit den Vorschlägen.
@bbernhard Hast du ein Beispiel oder einen Link mit einer anständigen Zustandsmaschine?
Hier mein Skript, vielleicht kanns jemand gebrauchen…
<?php
if($_IPS['SENDER'] == "Variable") {
$state = GetValueInteger(58601);
switch ($state) {
case 1: $Nummer = GetValueString(35515); //Telefonnummer
$Hans_aktiv = GetValueBoolean(34709); //Teilnehmer aktivieren oder deaktivieren
if ($Hans_aktiv) {
//Hans anrufen wenn aktiviert
$id = VoIP_Connect(35954, "$Nummer");
//Maximal 10 Sekunden warten, dass einer abnimmt
for($i = 0; $i < 15; $i++) {
IPS_Sleep(1000);
$c = VoIP_GetConnection(35954, $id);
if($c['Connected']) {
// VoIP_Playwave() unterstützt ausschließlich WAV im Format: 16 Bit, 8000 Hz, Mono. Sound abspielen
VoIP_PlayWave(35954, $id, IPS_GetKernelDir() . "media/Brandalarm/Garage.wav");
IPS_Sleep(7000); //warten bis abgespielt ist
SetValueInteger(58601,1); //Status für beendet setzen
SetValueString(23981,"Hans"); //Wer hat abgnommen setzen
return;
}
}
//Auflegen, falls keiner abnimmt
VoIP_Disconnect(35954, $id);
SetValueInteger(58601,2); //Status 1 höher um nächsten anzurufen
}
else
{
SetValueInteger(58601,2); //Falls Teilnehmer nicht aktiviert, sofort Status für nächsten Teilnehmer setzen
}
break;
case 2:
$Nummer = GetValueString(47342); //Telefonnummer
$Maria_aktiv = GetValueBoolean(30225); //Teilnehmer aktivieren oder deaktivieren
if ($Maria_aktiv){
//Maria anrufen wenn aktiviert
$id = VoIP_Connect(35954, "$Nummer");
//Maximal 10 Sekunden warten, dass einer abnimmt
for($i = 0; $i < 15; $i++) {
IPS_Sleep(1000);
$c = VoIP_GetConnection(35954, $id);
if($c['Connected']) {
// VoIP_Playwave() unterstützt ausschließlich WAV im Format: 16 Bit, 8000 Hz, Mono.
VoIP_PlayWave(35954, $id, IPS_GetKernelDir() . "media/Brandalarm/Garage.wav");
IPS_Sleep(7000); //warten bis abgespielt ist
SetValueInteger(58601,1); //Status für beendet setzen
SetValueString(23981,"Maria"); //Wer hat abgnommen setzen
return;
}
}
//Auflegen, falls keiner abnimmt
VoIP_Disconnect(35954, $id);
SetValueInteger(58601,3); //Status 1 höher um nächsten anzurufen
}
else
{
SetValueInteger(58601,3);
}
break;
case 3:
$Nummer = GetValueString(42950); //Telefonnummer
$Telefon_optional_aktiv = GetValueBoolean(47824); //Teilnehmer aktivieren oder deaktivieren
if ($Telefon_optional_aktiv){
//Teilnehmer optional anrufen wenn aktiviert
$id = VoIP_Connect(35954, "$Nummer");
//Maximal 10 Sekunden warten, dass einer abnimmt
for($i = 0; $i < 15; $i++) {
IPS_Sleep(1000);
$c = VoIP_GetConnection(35954, $id);
if($c['Connected']) {
// VoIP_Playwave() unterstützt ausschließlich WAV im Format: 16 Bit, 8000 Hz, Mono.
VoIP_PlayWave(35954, $id, IPS_GetKernelDir() . "media/Brandalarm/Garage.wav");
IPS_Sleep(7000); //warten bis abgespielt ist
SetValueInteger(58601,1); //Status für beendet setzen
SetValueString(23981,"Telefon optional"); //Wer hat abgnommen setzen
return;
}
}
//Auflegen, falls keiner abnimmt
VoIP_Disconnect(35954, $id);
SetValueInteger(58601,4); //Status 1 höher um nächsten anzurufen
}
else
{
SetValueInteger(58601,4); //Falls Teilnehmer nicht aktiviert, sofort Status für nächsten Teilnehmer setzen
}
break;
case 4: $Nummer = GetValueString(35515); //Telefonnummer
$Hans_aktiv = GetValueBoolean(34709); //Teilnehmer aktivieren oder deaktivieren
if ($Hans_aktiv) {
//Hans anrufen wenn aktiviert
$id = VoIP_Connect(35954, "$Nummer");
//Maximal 10 Sekunden warten, dass einer abnimmt
for($i = 0; $i < 15; $i++) {
IPS_Sleep(1000);
$c = VoIP_GetConnection(35954, $id);
if($c['Connected']) {
// VoIP_Playwave() unterstützt ausschließlich WAV im Format: 16 Bit, 8000 Hz, Mono. Sound abspielen
VoIP_PlayWave(35954, $id, IPS_GetKernelDir() . "media/Brandalarm/Garage.wav");
IPS_Sleep(7000); //warten bis abgespielt ist
SetValueInteger(58601,1); //Status für beendet setzen
SetValueString(23981,"Hans"); //Wer hat abgnommen setzen
return;
}
}
//Auflegen, falls keiner abnimmt
VoIP_Disconnect(35954, $id);
SetValueInteger(58601,5); //Status 1 höher um nächsten anzurufen
}
else
{
SetValueInteger(58601,5); //Falls Teilnehmer nicht aktiviert, sofort Status für nächsten Teilnehmer setzen
}
break;
case 5:
$Nummer = GetValueString(47342); //Telefonnummer
$Maria_aktiv = GetValueBoolean(30225); //Teilnehmer aktivieren oder deaktivieren
if ($Maria_aktiv){
//Maria anrufen wenn aktiviert
$id = VoIP_Connect(35954, "$Nummer");
//Maximal 10 Sekunden warten, dass einer abnimmt
for($i = 0; $i < 15; $i++) {
IPS_Sleep(1000);
$c = VoIP_GetConnection(35954, $id);
if($c['Connected']) {
// VoIP_Playwave() unterstützt ausschließlich WAV im Format: 16 Bit, 8000 Hz, Mono.
VoIP_PlayWave(35954, $id, IPS_GetKernelDir() . "media/Brandalarm/Garage.wav");
IPS_Sleep(7000); //warten bis abgespielt ist
SetValueInteger(58601,1); //Status für beendet setzen
SetValueString(23981,"Maria"); //Wer hat abgnommen setzen
return;
}
}
//Auflegen, falls keiner abnimmt
VoIP_Disconnect(35954, $id);
SetValueInteger(58601,6); //Status 1 höher um nächsten anzurufen
}
else
{
SetValueInteger(58601,6);
}
break;
case 6:
$Nummer = GetValueString(42950); //Telefonnummer
$Telefon_optional_aktiv = GetValueBoolean(47824); //Teilnehmer aktivieren oder deaktivieren
if ($Telefon_optional_aktiv){
//Teilnehmer optional anrufen wenn aktiviert
$id = VoIP_Connect(35954, "$Nummer");
//Maximal 10 Sekunden warten, dass einer abnimmt
for($i = 0; $i < 15; $i++) {
IPS_Sleep(1000);
$c = VoIP_GetConnection(35954, $id);
if($c['Connected']) {
// VoIP_Playwave() unterstützt ausschließlich WAV im Format: 16 Bit, 8000 Hz, Mono.
VoIP_PlayWave(35954, $id, IPS_GetKernelDir() . "media/Brandalarm/Garage.wav");
IPS_Sleep(7000); //warten bis abgespielt ist
SetValueInteger(58601,1); //Status für beendet setzen
SetValueString(23981,"Telefon optional"); //Wer hat abgnommen setzen
return;
}
}
//Auflegen, falls keiner abnimmt
VoIP_Disconnect(35954, $id);
SetValueInteger(58601,1); //Status 1 höher um nächsten anzurufen
}
else
{
SetValueInteger(58601,1); //Falls Teilnehmer nicht aktiviert, sofort Status für nächsten Teilnehmer setzen
}
break;
}
}