https://d226lax1qjow5r.cloudfront.net/blog/blogposts/send-raspberry-pi-ip-address-on-boot-in-node-with-messages/Blog_SMS_WhatsApp_RaspberryPI_1200x600.png

Raspberry Pi IP-Adresse beim Booten in Node mit Nachrichten senden

Zuletzt aktualisiert am April 19, 2021

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

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 .envund 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:

API_KEY= API_SECRET= APPLICATION_ID= APPLICATION_PRIVATE_KEY_PATH=private.key SMS_FROM="MyIPAddress" SMS_TO= WHATSAPP_FROM= WHATSAPP_TO=

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.

npm init

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:

npm install nexmo@beta express body-parser dotenv -s

Erstellen Sie eine neue Datei in Ihrem Projektverzeichnis mit dem Namen index.jsund ö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 wlan0und 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:

node index.js

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:

+const Nexmo = require('nexmo'); const os = require('os'); +const dotenv = require('dotenv'); +dotenv.config();

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:

nexmo app:create "My IP address app" --capabilities=messages --messages-inbound-url=https://example.com/webhooks/inbound-message --messages-status-url=https://example.com/webhooks/message-status --keyfile=private.key

Ö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:

sudo vim /etc/rc.local

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:

node /home/pi/ip-address-notification/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.

Share:

https://a.storyblok.com/f/270183/250x250/b052219541/greg-holmes.png
Greg HolmesVonage Ehemalige

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.