NEWS
[gelöst] Anrufer Ansage wiederholen, bis Gespäch angenommen wurde
-
Hallo Netprog,
willkommen im Forum
du könntest doch in deiner Funktion eine Schleife einbauen….
if ring == true...
dann ansagen
else
ende
Gruß
Jürgen
-
Probier mal:
var idAnrufer = "fritzbox.0.calls.ringActualNumber"; // actual last ringing number var idRing = "fritzbox.0.calls.ring"; var idSayIt = 'sayit.0.tts.text'; var ansageDelay = 8000; // Zeit in ms zwischen den Ansagen var timer = null; function ausgabeAnrufer(){ setState (idSayIt, 'Hinweis! Anruf von ' + getState(idAnrufer).val); } function wiederholungAnsage(delay) { delay = delay || 8000; // wenn kein Delay übergeben wurde, nimm 8000ms if (!getState(idRing).val) return; // ring noch aktiv? wenn ja weiter, wenn nein Abbruch ausgabeAnrufer(); // Ansage log("Ansage Wiederholung"); timer = setTimeout(function() { timer = null; wiederholungAnsage(delay); // ruft den Timer nach Ablauf wieder auf },delay); } // bei Anruf (aktuelle anrufende Nummer ist nicht leer) //on ({id: idAnrufer, valGe: 1}, wiederholungAnsage); on({id:idAnrufer ,change:'ne'}, function (obj) { if (obj.state.val !== "") wiederholungAnsage(ansageDelay); });
Du kannst das Skript auch erweitern, dass der Name angesagt wird, wenn bekannt (nicht aus dem Fritzbox Telefonbuch)
-
Hallo,
vielen Dank für deine Hilfe @ruhr70
…das hätte ich mit meinen jetzigen Anfänger-Kenntnissen niemals hinbekommen.
Jetzt funktioniert das genau so, wie ich mir das vorgestellt hatte.
Nun merke ich immer mehr, wieviel Arbeit da noch vor mir steckt
-
Hale es auch direkt getestet
Super Sache !!
Mir ist folgendes Aufgefallen:
Die erste Ansage kommt "laut"
Die Wiederholungen sind "leiser"
Gruß
Jürgen
-
Ggf. Ist die Zeit zwischen den Ansagen zu kurz?
Manchmal verschluckt sich SayIt und das Zwischenspeichern und Wiederherstellen der Lautstärke klappt nicht.
Gesendet von iPad mit Tapatalk
-
Hallo
das mit den unterschiedlichen Lautstärken, kann ich so nicht feststellen.
Was mir jetzt, nach mehrfachen Testanrufen jedoch aufgefallen ist, ist
die Tatsache, das der Zeitraum vom ersten Klingeln bis zur ersten Ansage,
etwas länger ist, als die Zeiträume zwischen den Ansagen.
Delay auf 10000ms verlängert und nun passt alles - Perfekt !!!
-
Probier mal:
!
var idAnrufer = "fritzbox.0.calls.ringActualNumber"; // actual last ringing number var idRing = "fritzbox.0.calls.ring"; var idSayIt = 'sayit.0.tts.text'; var ansageDelay = 8000; // Zeit in ms zwischen den Ansagen var timer = null; ! function ausgabeAnrufer(){ setState (idSayIt, 'Hinweis! Anruf von ' + getState(idAnrufer).val); } ! function wiederholungAnsage(delay) { delay = delay || 8000; // wenn kein Delay übergeben wurde, nimm 8000ms if (!getState(idRing).val) return; // ring noch aktiv? wenn ja weiter, wenn nein Abbruch ausgabeAnrufer(); // Ansage log("Ansage Wiederholung"); timer = setTimeout(function() { timer = null; wiederholungAnsage(delay); // ruft den Timer nach Ablauf wieder auf },delay); } ! // bei Anruf (aktuelle anrufende Nummer ist nicht leer) //on ({id: idAnrufer, valGe: 1}, wiederholungAnsage); ! on({id:idAnrufer ,change:'ne'}, function (obj) { if (obj.state.val !== "") wiederholungAnsage(ansageDelay); }); !
Du kannst das Skript auch erweitern, dass der Name angesagt wird, wenn bekannt (nicht aus dem Fritzbox Telefonbuch) `
Hi Ruhr70,
ist es auch möglich, dass der Callmonitor nur auf 1 Anschlussnummer reagiert? Es gibt hier im Haushalt 4 Anschlussnummer, von denen aber nur 1 für diese Funktion vorgesehen wäre. So wie das Skript jetzt ist, wird es wohl auf alle Anschlussnummern reagieren vermute ich mal.
Danke.
Gruß
Thomas
-
Das ist in der Theorie möglich…
Ich habe eigentlich gedacht, dass ich viel zu viel Datenpunkte im Adapter fülle. Nun gibt es doch immer wieder mal Wünsche
Wenn Du mehrere Anrufe parallel hast, ist es aufwendiger zu programmieren.
Man kann den Datensatz unter fritzbox.0.message auswerten.
Dort steht die anrufende Rufnummer drin und die angerufene Rufnummer.
13.01.17 16:15:47;RING;0;08150815;47114711;SIP1;
* Format der Fritzbox-Meldungen: * * Ausgehende Anrufe: datum;CALL; CallID;Nebenstelle;callingNumber;calledNumber;lineType; * Eingehende Anrufe: datum;RING; CallID;callingNumber;calledNumber;lineTpe; * Zustandegekommene Verbindung: datum;CONNECT; CallID;Nebenstelle;connectedNumber; * Ende der Verbindung: datum;DISCONNECT;CallID;dauerInSekunden;
Du müsstest auf die Meldung mit dem Ring reagieren:
- RING -> für die gewünschte calledNumber:
nein: nicht reagieren
ja: callID merken und Ansage bis zum CONNECT oder DISCONNECT mit dieser CallID wiederholen.
Ich komme leider erst frühestens in einer Woche dazu
-
Das ist in der Theorie möglich…
Ich habe eigentlich gedacht, dass ich viel zu viel Datenpunkte im Adapter fülle. Nun gibt es doch immer wieder mal Wünsche
`
Hi,
zuviel geht gar nicht :mrgreen: .
Für mich als Laien ist das etwas zu heftig. Ich warte da gerne die Woche ab bis Du Zeit dafür hast…..
Mehrere Anrufe gleichzeitig kommt eigentlich nicht vor. So wild geht es hier nicht ab.
Danke fürs Aufnehmen des Wunsches.
Danke und Gruß
Thomas
-
Hi,
Für Android gibt es was ähnliches, läuft allerdings nicht über iobroker. Vielleicht kann man das ja irgendwie einbinden.