2016-06-14 6 views
8

Ich hätte gerne einen einfachen Befehl wie ich in der Bash verwenden, um etwas zu einem Thema auf MQTT innerhalb einer AWS Lambda-Funktion zu veröffentlichen. In Anlehnung an: mosquitto_pub -h my.server.com -t "light/set" -m "on"Wie kann ich zu einem MQTT-Thema in einer Amazon AWS Lambda-Funktion veröffentlichen?

Hintergrund: Ich möchte mit Alexa eine Lampe ein- und ausschalten. Alexa kann eine Lambda - Funktion starten, und innerhalb dieser Lambda - Funktion möchte ich eine MQTT - Veröffentlichung starten, weil die Lampe ein MQTT - Thema hören und auf die Nachrichten reagieren kann. (Vielleicht gibt es einfachere Lösungen, aber wir sind in einer kompliziert (Universität) Netzwerk, das viele andere Ansätze schwieriger)

Antwort

8

Wenn Sie mit Python macht, konnte ich eine AWS Lambda-Funktion erhalten Sie eine Nachricht an AWS IoT mit dem folgenden in meinem Handler-Funktion zu veröffentlichen:

import boto3 
import json 

client = boto3.client('iot-data', region_name='us-east-1') 

# Change topic, qos and payload 
response = client.publish(
     topic='$aws/things/pi/shadow/update', 
     qos=1, 
     payload=json.dumps({"foo":"bar"}) 
    ) 

Sie müssen außerdem sicherstellen, dass der Rolle (in Ihrer Lambda-Funktionskonfiguration) eine Richtlinie zugeordnet ist, um den Zugriff auf die IoT-Veröffentlichungsfunktion zu ermöglichen. Unter IAM -> Rollen können Sie eine Inline-Politik Ihre Lambda-Funktion Rolle hinzufügen:

{ 
    "Version": "2016-6-25", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "iot:Publish" 
     ], 
     "Resource": [ 
      "*" 
     ] 
    } 
    ] 
} 
+0

Danke für Ihre Hilfe Roy. Am Ende verwendeten wir Ponte, stieg aus dem AWS Lambda mit einer HTTP-Anfrage, die an Ponte gesendet wurde, die es dann an mqtt übertragen und das an die Lampe gesendet hat. –

1

Das AWS SDK verfügt über zwei Klassen mit IoT arbeiten: Iot und IotData. IotData.publish ist die Methode, nach der Sie suchen. Es sieht so aus, als ob das Iot-Objekt zum Arbeiten mit Dingen dient und IotData zum Arbeiten mit MQTT und Schatten. Dies sollte in der Dokumentation zu MQTT und Schatten direkt referenziert werden, ist es aber nicht.

Dieser Dienst (IotData) ist ebenfalls verfügbar in the CLI.

+1

Danke für diese Antwort. Es brachte mich auf die richtige Spur mit der Veröffentlichung eines Ereignisses von bash: 'aws iot-data veröffentlichen --cli-input-json '{" topic ":" myTopic "," qos ": 0," Nutzlast ":" {\ "myKey": 54321, "myOtherKey": 12345 "}". Die Payload-Schlüssel müssen in doppelte Anführungszeichen gesetzt und mit umgekehrten Schrägstrichen versehen werden. –

0

Wenn Sie Node.js verwenden, müssen Sie die Bibliothek mqtt installieren. Mit den folgenden Schritten können Sie die mqtt-Bibliothek auf AWS Lambda herunterladen und installieren.

  1. Download and install Node.js and npm auf Ihrem PC.

  2. Download MQTT library for node.js.

  3. Entpacken Sie es im Verzeichnis nodejs, in dem Node.js installiert wurde. (In Windows 10 x64 ist das Verzeichnis nodejs C:\Program Files\nodejs)

  4. Erstellen Sie einen Ordner zum Speichern der installierten mqtt-Dateien. Zum Beispiel D:\lambda_function.

  5. Führen Sie die Eingabeaufforderung als Administrator aus und wechseln Sie in das Verzeichnis nodejs.

  6. Installieren Sie die mqtt-Bibliothek unter D:\lambda_function.

    C:\Program Files\nodejs>npm install --prefix "D:\lambda_function” mqtt 
    

Here's a similar project.

Verwandte Themen