
Share:
)
Ehemaliger Ausbilder für Entwickler @Vonage. Kommt von einem PHP-Hintergrund, ist aber nicht auf eine Sprache beschränkt. Ein begeisterter Gamer und Raspberry-Pi-Enthusiast. Oft beim Bouldern in Kletterhallen anzutreffen.
Raspberry Pi IP-Adresse beim Booten in Node mit Nachrichten senden
Lesedauer: 12 Minuten
Als Raspberry Pi-Enthusiast gibt es mehrere Gelegenheiten, bei denen ich ein wiederverwendbares Skript benötige, das ich zur Verbesserung meiner Projekte einsetzen kann. Ein Paradebeispiel dafür ist das Wissen um die IP-Adresse meines Raspberry Pi, wenn ich im Headless-Modus (ohne Monitor, Tastatur oder Maus) boote.
Vor kurzem habe ich ein Tutorial veröffentlicht, wie man ein Home Surveillance System mit Node und einem Raspberry Pi. Bei der Umsetzung dieses Projekts soll der Raspberry Pi nicht an einen Monitor angeschlossen werden, so dass es keine Möglichkeit gibt, die IP-Adresse des Raspberry Pi herauszufinden, wenn er an einem entfernten Ort fernab von Monitoren hochgefahren wird. Dieses Tutorial führt Sie durch eine Lösung für das Problem, dass Sie die IP-Adresse nicht kennen.
Voraussetzungen
Knotenpunkt & NPM auf dem Raspberry Pi installiert
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.
Der Kodex
Erstellen und öffnen Sie in Ihrem Projektverzeichnis eine Datei namens .env
und fügen Sie Ihre Umgebungsvariablen hinzu. Sie finden Ihre API_KEY
und API_SECRET
im Vonage Entwickler Dashboard. Fügen Sie diese Werte in die ersten beiden Zeilen des folgenden Beispiels ein:
Wenn Sie sich für den Versand von SMS-Benachrichtigungen entscheiden, fügen Sie Ihre Handynummer zu dem SMS_TO=
Teil Ihrer .env
Datei hinzu. Wenn Sie sich entscheiden, WhatsApp für Ihre Benachrichtigungen zu verwenden, fügen Sie Ihre WhatsApp-fähige Handynummer zu dem WHATSAPP_TO=
Teil Ihrer .env
Datei hinzu.
Sie finden Ihre WHATSAPP_FROM
Nummer auf der Nachrichten Sandbox API Seite.
Befolgen Sie alle Eingabeaufforderungen des obigen Befehls. Wenn Sie fertig sind, führen Sie den folgenden Befehl aus, um die Nexmo Node SDK
, Express
, Body-Parser
und DotEnv
Pakete in Ihr Projekt zu installieren:
Erstellen Sie eine neue Datei in Ihrem Projektverzeichnis mit dem Namen index.js
und öffnen Sie dann diese Datei. Als erstes müssen Sie die IP-Adresse Ihres Raspberry Pi abrufen.
Fügen Sie den folgenden Code in Ihre neue index.js
Datei hinzu. Das OS
Modul ermöglicht den Zugriff auf die Informationen des Betriebssystems des Geräts, wie zum Beispiel die network interfaces
.
Der folgende Code durchläuft jede dieser Schnittstellen und sucht nach der Schnittstelle namens wlan0
und stellt sicher, dass diese Schnittstelle IPv4
ist und es sich nicht um eine interne Schnittstelle handelt.
const os = require('os');
var ifaces = os.networkInterfaces();
Object.keys(ifaces).forEach(function (ifname) {
ifaces[ifname].forEach(function (iface) {
if ('wlan0' === ifname && "IPv4" === iface.family && iface.internal === false) {
console.log(iface.address);
return;
}
});
});
Wenn Sie den unten stehenden Befehl in Ihrem Terminal ausführen, sollten Sie als Ergebnis die Wifi-IP-Adresse Ihres Geräts erhalten:
Als Nächstes ist es an der Zeit, die IP-Adresse als Benachrichtigung zu senden. In diesem Tutorial können Sie wählen, ob Sie die Benachrichtigung als SMS, WhatsApp-Nachricht oder beides senden möchten.
SMS versenden
Um eine SMS zu senden, müssen Sie Ihren API-Schlüssel und Ihr API-Geheimnis verwenden, die Sie bereits in der .env
Datei gespeichert haben. Fügen Sie zunächst am Anfang Ihrer index.js
Datei die folgenden Zeilen ein, um das Nexmo
Paket und DotEnv
Paket:
Fügen Sie nun am Ende Ihrer Datei die folgende Funktionalität hinzu, die das Nexmo
Objekt mit dem API-Schlüssel und dem Geheimnis öffnet. Die nächste Zeile füllt die Variable text
mit der Zeichenkette "Your IP Address is:" und dann die ipAddress
an die Funktion übergeben.
Der letzte Teil dieser Methode sendet die SMS.
function sendSms(ipAddress) {
const nexmo = new Nexmo({
apiKey: process.env.API_KEY,
apiSecret: process.env.API_SECRET,
});
var text = "Your IP Address is: " + ipAddress;
nexmo.message.sendSms(process.env.SMS_FROM, process.env.SMS_TO, text);
}
WhatsApp senden
Für das Versenden einer WhatsApp-Nachricht sind ein paar mehr Informationen erforderlich, darunter ein Application ID
und die Private Key
. Um eine Anwendung zu erstellen, die sowohl die application_id
Variable und die private.key
Datei erzeugt, führen Sie den folgenden Befehl aus:
Öffnen Sie Ihre .env
Datei, und aktualisieren Sie die Zeile APPLICATION_ID=
um die neue Zeile Application ID
.
Zurück in Ihrer index.js
fügen Sie am Ende der Datei den folgenden Befehl ein:
function sendWhatsApp(ipAddress) {
const nexmo = new Nexmo({
apiKey: process.env.API_KEY,
apiSecret: process.env.API_SECRET,
applicationId: process.env.APPLICATION_ID,
privateKey: process.env.APPLICATION_PRIVATE_KEY_PATH
}, {
apiHost: 'messages-sandbox.nexmo.com'
});
var text = "Your IP Address is: " + ipAddress;
nexmo.channel.send(
{ "type": "whatsapp", "number": process.env.WHATSAPP_TO },
{ "type": "whatsapp", "number": process.env.WHATSAPP_FROM },
{
"content": {
"type": "text",
"text": text
}
},
(err, data) => {
if (err) {
console.error(err);
} else {
console.log(data.message_uuid);
}
}
);
}
Das obige Beispiel erstellt eine neue Funktion namens sendWhatsApp
mit dem Parameter ipAddress
. Die Funktion initiiert eine neue Instanz des Nexmo
Objekts unter Verwendung des Parameters API_KEY
, API_SECRET
, APPLICATION_ID
, und APPLICATION_PRIVATE_KEY_PATH
. Die besonders wichtige Information, die hier benötigt wird, ist das Setzen des apiHost
zu setzen, um sicherzustellen, dass die Verbindung mit der messages-sandbox
API und nicht mit der Standardproduktions-API.
Der Rest der Methode erstellt eine Zeichenfolge, die dem Benutzer die IP-Adresse mitteilt, und sendet dann die WhatsApp
Nachricht.
Versenden der Benachrichtigung
So wie es aussieht, wird nichts gesendet, wenn Sie den Befehl node index.js
. Es wird nur die IP-Adresse ausgegeben, sonst nichts. Um die Benachrichtigung zu senden, sei es als SMS, WhatsApp-Nachricht oder beides, suchen Sie die Zeile: console.log(iface.address);
. Fügen Sie unter dieser Zeile Folgendes ein:
// To send an SMS:
sendSms(ipAddress);
// To send a WhatsApp message:
sendWhatsApp(ipAddress);
Den Befehl ausführen
Nun, da der Code implementiert ist und funktioniert, muss das Betriebssystem so konfiguriert werden, dass dieses Skript beim Hochfahren des Raspberry Pi ausgeführt wird. Dazu öffnen Sie die folgende Datei in Ihrem Terminal:
Diese Datei führt beim Hochfahren des Betriebssystems Befehle aus. Oberhalb der Zeile: exit 0
fügen Sie den folgenden Befehl ein, um das soeben erstellte Projekt auszuführen. Achten Sie darauf, den vollständigen Pfad der Datei zu aktualisieren index.js
:
Testen Sie es!
Sie haben einen Raspberry Pi eingerichtet und einen Code geschrieben, mit dem Sie entweder die IP-Adresse des Raspberry Pi per WhatsApp, SMS oder Text-To-Speech-Sprachanruf an Sie senden können. Jetzt müssen Sie nur noch den Raspberry Pi neu starten und beobachten, wie die Benachrichtigung(en) bei der Zielnummer eingehen.
Weitere Lektüre
Hier finden Sie einige weitere Artikel, die Ihnen beim Aufbau eines Dienstes mit einem Raspberry Pi oder beim Versenden von WhatsApp-Nachrichten helfen könnten.
Und vergessen Sie nicht: Wenn Sie Fragen, Ratschläge oder Ideen haben, die Sie mit der Community teilen möchten, dann können Sie sich gerne in unserem Slack-Arbeitsbereich der Gemeinschaft.