IP-Symcon mit VoIP/SIP Support

Vielen Dank,
habt Ihr mal ein Beispielskript?

VG

Jörg

?

Erster Beitrag ;), lesen und die Beispiel Scripte ansehen.

...
        case "DTMF":
...

Ich teste gerade das Anrufen an Symcon und nutze Teile vom ersten Beitrag.
Leider sieht es so aus, als wenn Symcon nicht abnehmen würde.
In den Meldungen kommt zur selben Sekunde:
Incoming Declined
Disconnect

In der Console sehe ich:
Incoming und sofort Disconnect

Was muss ich noch beachten?
Muss ich noch irgendwie auf „Abnehmen“ schalten?
Auf dem anrufenden Handy kommt nach 2x Rufen dann die Meldung „Leitung besetzt“.

Hier mein Code:


$id_voip = 32231;

// Skript für eingehende Anrufe (Abarbeitungsskript)
if($_IPS['SENDER'] == "VoIP") {
    // Wir wollen nur eingehende Anrufe verarbeiten
    if(VoIP_GetConnection($id_voip, $_IPS["CONNECTION"])["Direction"] == 1 /* Ausgehend */) {
        return;
    }
 
    print_r("VoIP=". $_IPS["EVENT"]);

    switch($_IPS["EVENT"]) {
        case "Incoming":
            IPS_LogMessage("VoIP", "Incoming");
            break;
 
        case "Connect":
            IPS_LogMessage("VoIP", "Connect");
            break;
 
        case "Disconnect":
            IPS_LogMessage("VoIP", "Es wurde eine Verbindung beendet");
            break;
 
        default:
            IPS_LogMessage("VoIP", "Ein unbekanntes Event wurde ausgelöst");
            break;
    }
}

Ergänzung:
Ich habe nur die Texte für die einzelnen Events geändert und nun wird der Anruf angenommen.
Ist irgendwie komisch.

Ergänzung2:
Nun gehen auch die DTMF Töne.
Als wenn sich das System erst einmal selbst anlernt.

Hallo,

ich habe ein Problem mit der Durchführung des Anrufs. Mein Script sieht zu testzwecken so aus:

    $id = VoIP_Connect(38758, "xxxxxxx");
 
for($i = 0; $i <= 5; $i++) {
        IPS_Sleep(1000);
        $c = VoIP_GetConnection(38758, $id);
        IPS_LogMessage("VoIP test", "ConnectionID ist: " . $id);
        print_r(VoIP_GetConnection(38758, $id));
        if($c['Connected']) {
            IPS_Sleep(1000);
            IPS_LogMessage("VoIP test", "Connected");
            IPS_LogMessage("VoIP test", "Wave Pfad: " . IPS_GetKernelDir() . "/media/willkommen.wav");
            VoIP_PlayWave(38758, $id, IPS_GetKernelDir() . "/media/willkommen.wav");
            return;
        }
 }

Die VOIP Instanz hat die Objektnummer 38758 und ist auf eine Fritzbox konfiguriert. Merkwürdig ist zum einen schon einmal, wenn in der VOIP Instanz nicht aktiv gestellt wurde, dass trotzdem ein Anruf ausgeführt werden kann. Aber das nur nebenbei.

Wenn ich das Script anwende, dann kommt ein Anruf. Gehe ran und es wird nichts abgespielt. Da habe ich mehrfach am Srcrip gebastelt um das Problem zu finden. In der If Abfrage geht es anscheinend nicht weiter. Trotz abgenommenen Telefons sieht der Array so aus:

Array
(
    [ID] => 5
    [TimeStamp] => 1568733654
    [Number] => xxxxxxxx
    [Direction] => 1
    [Connected] => 
    [Disconnected] => 
)

Die Eigenschaften Connected und Disconnect sind gar nicht belegt. Daher geht es in der If Anweisung wohl nicht weiter. Wo liegt hier der Fehler?
Nachtrag: Habe gerade die Anzahl der Schleifen hochgesetzt und nun scheint es zu funktionieren… Ich teste nochmal weiter.

Noch eine Frage:
Das Abarbeitungsscript soll anscheinend nur die Rückmeldungen verarbeiten. Aus dem Bespiel in der Anleitung muss demnach auch auch noch auf die VOIP Instanz verwiesen werden?

$id_voip = 38758;

Da dies in der Anleitung fehlt. Da sucht man sich auch erst einen „Wolf“. Wäre vielleicht hilfreich für andere User das zu ergänzen. Hilfreich wäre es auch detailierte zu beschreiben wie die Scripte und Module miteinander verkoppelt werden müssen.

Probier mal, die Zeile zu ändern :
for($i = 0; $i <= 5; $i++) {
in:
for($i = 0; $i <= 10; $i++) {

und berichte bitte.

Wir haben in der Doku das Timeout auch schon erhöht. Insbesondere bei Verbindungen zu Mobil kann es gerne mal länger dauern.

paresy

Dann muss ich mal wieder neu Doku lesen.:smiley:

ps paresy, dann ändere doch mal der ersten Post hier, dann kommt der Fehler weniger oft hoch.:slight_smile:

Das mit der Schleife funktioniert ja, wie ich beim Beitragschreiben auch schon bemerkt hatte.

Die Schleife wartet bis jemand abnimmt um dann die Wavedatei abzuspielen. Wie stelle ich es ein wie lange VoIP_Connect es überhaupt probieren soll jemanden zu erreichen? Ich muss den Versuch doch auch abbrechen können, wenn niemand innerhalb einer bestimmten Zeit rangeht.

Die Tests auf meinem Handy führen dazu, dass die Steuerung irgendwann auf meine Sprachbox landet und dort 7 Minuten belegen. Außerdem stürzt IPS dann sogar komplett ab und muss den Dienst danach komplett neu starten.

Außerdem habe ich dann auf meiner Handymailbox 3 Anrufe hintereinander. Irgendwas wird dort mehrfach wiederholt.

Nachtrag: Auffällig ist auch, dass bei zu schneller Annahme des Anrufs die Wave nicht spielt wird.

Hast du das Skript evtl. auch als Aktionsskript im der VoIP Instanz hinterlegt? (Das würde dann das mehrfache Anrufen erklären)

paresy

Das würde ich auch vermuten, da könntest du eine Endlosschleife bauen.

Bei mir klappts mit den Ausgehenden Anrufen, aber IPS anrufen da sehe ich nicht mal was im debug ankommen, sehr seltsam

Hallo,

super das es nun die VoIP Funktion gibt. Für mich wäre das vor allem interessant um Anrufe „mitzubekommen“ und anhand dessen Aktionen auszulösen ohne das Symcon die Verbindung entgegen nimmt, also KEIN automatischer Connect. Lässt sich das konfigurieren?

Danke!

Ja, zunächst hatte ich das Handlerscript inkl. dem Anrufteil. Das Problem hatte ich dann auch frühzeitig bemerkt, nachdem man sich in die Funktionsweise einmal reingedacht hat. Aber auch später kam das Problem mit den Zig Anrufen. Ist sichergestellt, dass der Disconnect nicht nur auf eine bestehende Verbindung funktioniert sondern auch auf einem laufenden Anrufversuch, der noch nicht angenommen wurde? Wie kann ich sonst den Anrufaufbau frühzeitig abbrechen?

Schon einmal geschaut, warum die Instanz VOIP auch funktioniert, wenn sie auf nicht aktviert gestellt wird?

Dies war ein Fehler und ja das wird im aktuellen 5.2.x Beta sichergestellt.

Das habe ich bisher noch nicht nachstellen können. Sicher, dass du nicht irgendwie zwei VoIP Instanzen hast?

paresy

Das würde mich auch interessieren!

(Sorry Fehler beim posten)

Das würde mich auch interessieren!

Jau … würde ich auch gebrauchen … Türklingel bimmelt anner Telefonanlage an … Rufe gehen nach extern … wenn nach x sekunden nx passiert könnte ich mit symcon abnehmen und wieder auflegen … oder evtl nen text brabbeln

das wäre top

Hallo paresy

Ich habe versucht mit VoIP_SendDTMF Funktionen auf meinem Türöffner auszuführen.
Ist es so, dass „*“ und „#“ noch nicht übergeben werden können? Oder besser gefragt, wie kann ich das im VoIP_SendDTMF Befehl übergeben? Und wie kann ich eine Pause zwischen den Tönen übergeben?

LG Tom

Stimmt. Das ist noch ein Fehler. Die sollten wir erlauben. Fix kommt zum nächsten Update!

Pause kannst du über ein IPS_Sleep einbauen.

paresy

Hallo,

super das es nun die VoIP Funktion gibt. Für mich wäre das vor allem interessant um Anrufe „mitzubekommen“ und anhand dessen Aktionen auszulösen ohne das Symcon die Verbindung entgegen nimmt, also KEIN automatischer Connect. Lässt sich das konfigurieren?

Danke!

Das wäre genau das was ich benötige. Gibt es da schon news?