Ich habe ohne Dokumentation aus Beobachtung der tr-64 versucht, eine Anruferkennung zu programmieren.
Ob es in allen Cornercases funktioniert, weiß ich nicht, aber in den ersten Tests hat es funktioniert.
Hier der Code. Feedback erwünscht.
createState("Anrufzaehler",0); // zählt die Anrufe pro Tag
createState("Anrufampel",false); // setzt Signal wenn Anruf
createState("Anrufernamen",''); // mit Kommata getrennte Anrufliste
createState("Anrufe_Anrufbeantworter",0); // zählt die Nachrichten auf AB
createState("Anrufbeantworterampel",false); // setzt Signal wenn Nachr. auf AB
createState('Anrufbeantworternamen',''); // mit Kommata getrennte AB- Anrufl.
//---------------------- Anrufstatistik jede Nacht zurücksetzen ----------------
schedule("0 0 * * *", function(obj){
setState("Anrufzaehler",0);
setState("Anrufampel",false);
setState("Anrufernamen",'');
setState("Anrufe_Anrufbeantworter",0);
setState("Anrufbeantworterampel",false);
setState('Anrufbeantworternamen','');
});
//------------------------- Anrufername oder Telefonnummer ermitteln -----------
/*
Steht der Anrufer in Adressbuch wird Vorname und Name ausgegeben, sonst die
Telefonnummer
*/
function telefonname () {
var tokens = getState("tr-064.0.callmonitor.inbound.callerName").val.split(",");
var answer = '';
var vorname = tokens[1];
var famname = tokens[0];
if (famname === undefined) famname = '';
if (vorname === undefined) vorname = '';
if (vorname !== '' || famname !== '')
answer = vorname + ' ' + famname;
else
answer = getState("tr-064.0.callmonitor.inbound.caller").val;
return answer;
}
/*
---------------------------- Anrufer ansagen ----------------------------------
Der Name des Anrufenden wird beim Klingeln auf allen Lautsprechern ausgegeben
und die Anrufstatistik mitgeführt
*/
on({id:"tr-064.0.callmonitor.ringing", change: 'gt'}, function(obj) {
setTimeout( function() {
if (getState("tr-064.0.callmonitor.ringing").val === true) {
setState("Anrufzaehler",getState("Anrufzaehler").val + 1);
var name = telefonname();
setState("Anrufernamen",getState("Anrufernamen").val + ((getState("Anrufampel").val === true) ? ", " : "") + name);
setState("Anrufampel",true);
// Sprachausgabe
setState("speechout2",JSON.stringify(
{ text: "Anruf von " + name + "!",
vol:50,
device: 'ALL',
night: false
}));
}
}, 3000);
});
/*
---------------------------- Anruf beendet -------------------------------------
Es werden die Anzahl der Anrufe auf Anrufbeantworter und eine Liste von
Namen mitgeführt, die Nachrichten hinterlassen haben.
Es werden dazu 'callmonitor.lastCall.type' und
'tr-064.0.callmonitor.lastCall.extension' ausgewertet.
Mangels Dok wurde durch Ausprobieren ermittelt, dass
- type === missed : es wurde aufgelegt und nicht gesprochen.
- type === disconnect && extension !== 40: Gespräch wurde geführt und dann aufgelegt
- type === disconnect && extension === 40: Nachricht auf AB
bedeuten könnte.
*/
on({id:"tr-064.0.callmonitor.toPauseState", change: 'ne'}, function(obj) {
setTimeout( function() {
if (getState('tr-064.0.callmonitor.toPauseState').val === 'end') {
var name = telefonname();
if (getState("tr-064.0.callmonitor.lastCall.type").val === 'missed') {
log(name + " hat aufgelegt und keine Nachricht hinterlassen");}
if (getState("tr-064.0.callmonitor.lastCall.type").val === 'disconnect') {
if (getState('tr-064.0.callmonitor.lastCall.extension').val == 40) {
setState("Anrufe_Anrufbeantworter",getState("Anrufe_Anrufbeantworter").val + 1);
log("Nachricht auf Anrufbeantworter von "+ name + " mit einer Länge von " + getState("tr-064.0.callmonitor.lastCall.duration").val + " sec");
setState("Anrufbeantworternamen",getState("Anrufbeantworternamen").val + ((getState("Anrufbeantworterampel").val === true) ? ", " : "") + name);
setState("Anrufbeantworterampel",true);
} else {
log("Der Anruf von " + telefonname() + " hat " + getState("tr-064.0.callmonitor.lastCall.duration").val + " sec gedauert");
}
}
}
}, 3000);
});
Was jetzt noch schön wäre, wenn ich mit einem Alexa Dialog die hinterlassenen Nachrichten auf Alexa abhören könnte.
Keine Ahnung, ob das möglich ist, wenn das schon einer gemacht hat, dann wäre ich daran interessiert.