
Mit AWS IoT Button und Nexmo einen Anruf tätigen
Lesedauer: 4 Minuten
Durch die Integration der Nexmo Voice API mit einem Amazon IoT Button, Gastblogger Michael Piccuirro ermöglichte es seinem Sohn, per Knopfdruck einen Anruf zu tätigen, damit er zur Schule gehen konnte. Hier ist, wie er es tat.
Meine Frau geht früh zur Arbeit, so dass es meine Aufgabe ist, unsere Kinder fertig zu machen und zur Schule zu bringen. Um Zeit zu sparen, wollte ich meinen 8-jährigen Sohn allein zur Schule gehen lassen, aber da gab es ein Problem. Ich setze ihn etwa eine Stunde vor Schulbeginn ab. Zu dieser Zeit sind alle Türen verschlossen. Um das Gebäude früher zu betreten, muss man das Handy des Lehrers anrufen, der in der Cafeteria steht und auf die ersten Kinder aufpasst.
Anfangs wollte ich meinem Sohn ein eigenes Telefon schenken, aber nachdem ich ein wenig darüber nachgedacht hatte, habe ich es mir anders überlegt. Da sind die monatlichen Kosten für das Telefon und den Service, er könnte es leicht verlieren, und er würde wahrscheinlich so viel damit spielen, wie er könnte. Er brauchte wirklich nur etwas für diesen einen Moment am Tag. Ich dachte, es muss doch etwas Billiges und Einfaches geben.
Nachdem ich bei Amazon nach einem Produkt gesucht hatte, das mein Problem lösen könnte, fiel mir ein, dass ich vielleicht einen AWS IoT-Tastezu verwenden, sie sind wie ein leerer Amazon Dash Button den Sie mit Ihren eigenen Amazon-Webdiensten verknüpfen können. Diese Buttons sind billig und für einen sehr ähnlichen Anwendungsfall wie den meinen konzipiert: Gelegentliches Klicken auf eine Schaltfläche, um eine Sache über das Internet auszulösen.
Der erste Schritt war also, einen AWS-Button zu besorgen, ihn in mein WiFi-Netzwerk einzubinden und eine Hallo-Welt-App einzurichten. Wenn Sie in der Dokumentation nachlesen, werden Sie feststellen, dass es einige Schritte zu befolgen gibt. Ich habe das Gerät verkabelt und konnte sehen, wie das Ereignis in meiner AWS-Konsole jedes Mal angezeigt wurde, wenn ich auf die Schaltfläche klickte.
Amazon Dash, AWS IoT
Okay, jetzt will ich versuchen, das mit etwas Code zu verbinden. Ich habe eine Lambda-Funktion verwendet. Das ist die AWS-Methode, um Code in der Cloud laufen zu lassen, ohne sich um eine Servereinrichtung kümmern zu müssen. Dieser Teil war viel einfacher da sie bereits einen IoT-Button-Blaupause zur Verfügung hatten. Er richtete automatisch Node.js-Code ein, der mir eine E-Mail schickte, wenn der Button gedrückt wurde. Sie können den Code dafür hier sehen.
exports.handler = (event, context, callback) => {
console.log('Received event:', event.clickType);
// create/get topic
createTopic('aws-iot-button-sns-topic', (err, topicArn) => {
if (err) {
return callback(err);
}
console.log(`Publishing to topic ${topicArn}`);
// publish message
const params = {
Message: `${event.serialNumber} -- processed by Lambda\nBattery voltage: ${event.batteryVoltage}`,
Subject: `Hello from your IoT Button ${event.serialNumber}: ${event.clickType}`,
TopicArn: topicArn,
};
// result will go to function callback
SNS.publish(params, callback);
});
};
Der nächste Schritt bestand darin, einen Dienst zu finden, der es mir ermöglicht, einen automatischen Anruf zu tätigen, und so fand ich die Nexmo API. Anders als bei der anfänglichen Einrichtung von Dash war es bei Nexmo sehr einfach, loszulegen. Sie haben eine klare Dokumentationdie genau erklärt, wie man eine Node.js-App zum Laufen bringt. Innerhalb weniger Minuten hatte ich etwas, das ich lokal über das Terminal ausführen konnte und das einen Robo-Anruf an meine Telefonnummer sendete. Sehen Sie sich den Code dafür hier an. Nach einem Blick in die Nexmo-Dokumente fand ich dann heraus, wie ich meine eigene Stimme aufnimmt und diese anstelle der Text-to-Speech aus ihrem Beispiel zu verwenden.
Nachdem die beiden Teile funktionierten, musste ich sie nun zusammenfügen. Ich schnitt den gesamten Code aus, der eine E-Mail von meiner Dash-Lambda-Funktion sendete, und fügte den Nexmo-Code ein, der den Telefonanruf tätigte.
exports.handler = (event, context, callback) => {
console.log('Calling phone number', recipientNumber);
nexmo.calls.create({
to: [{
type: 'phone',
number: recipientNumber
}],
from: {
type: 'phone',
number: '12325551212'
},
answer_url: ['http://capturetheory.com/school_dash/first_call_talk.json']
}, (err, res) => {
if(err) {
console.error("there is an error");
console.error(err);
}
else {
console.log(res);
}
});
};
Sie können sehen, wie wie der vollständige Code aussieht, sehen Sie hier.
Dann hatte ich einen Knopf, der in meinem Haus funktionierte. Wenn man ihn drückte, rief er mein Telefon an. Um das Schultelefon anzurufen, musste ich 10 Pfund Guthaben auf meinen Nexmo Account laden. Die Kosten pro Minute sind aber so niedrig. Ich kann mir nicht vorstellen, das in nächster Zeit auszugeben. Ich änderte den Dash, um das WiFi-Netzwerk der Schule zu nutzen, und schon waren wir im Geschäft.
Jetzt, wo das funktioniert, habe ich ein paar Ideen, um es zu verbessern.
Ich könnte mir eine Nachricht schicken lassen wenn der Anruf besetzt ist oder nicht durchgestellt werden kanndann kann ich anrufen, wo immer ich bin.
Ich kann eine virtuelle Nummer hinzufügen so dass mein Handy angerufen wird, wenn der Lehrer zurückruft.
Der Amazon Dash unterstützt auch das lange Drücken der Taste. Dieses Ereignis könnte also eine andere Nachricht an mich auslösen, die besagt: "Komm mich abholen" oder "Ich habe Probleme, in die Schule zu kommen".
Sobald die Pressto oder eine andere IoT-Mobilfunktaste in Betrieb genommen wird, könnte ich sogar darauf verzichten, mich in das WIFI-Netz der Schule einzuklinken, was das Ganze viel leistungsfähiger machen würde, da es fast überall funktionieren würde.
Aber jetzt geht mein Sohn allein zur Schule, und ich habe wertvolle Zeit von meiner Morgenroutine zurückbekommen.
Hier ist ein Video, in dem ich das Projekt erkläre.