2016-06-14 43 views
8

Chciałbym mieć łatwą komendę, taką jak używam w bash, aby opublikować coś na temat na MQTT wewnątrz funkcji AWS Lambda. Wzdłuż linii: mosquitto_pub -h my.server.com -t "light/set" -m "na"Jak mogę opublikować w temacie MQTT w funkcji Amazon AWS Lambda?

Tło: Chciałbym włączyć i wyłączyć lampę z Alexa. Alexa może uruchomić funkcję Lambda, a wewnątrz tej funkcji Lambda chciałbym zacząć publikację MQTT, ponieważ lampa może słuchać tematu MQTT i reagować na wiadomości tam (może są łatwiejsze rozwiązania, ale jesteśmy w skomplikowany (uniwersytet) sieć, która sprawia, że ​​wiele innych podejść trudniejszych)

Odpowiedz

8

Jeśli używasz Pythona, byłem w stanie uzyskać funkcję AWS Lambda opublikować wiadomość do AWS Internetu przedmiotów przy użyciu następujących wewnątrz mojej funkcji handler:

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"}) 
    ) 

Należy również upewnić się, że funkcja Role (w konfiguracji funkcji Lambda) ma dołączoną politykę zezwalającą na dostęp do funkcji publikowania Internetu przedmiotów. Pod IAM -> Role można dodać do swojej polityki inline Lambda funkcji Roli jak:

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

Dzięki za pomoc Roy. W końcu użyliśmy Ponte, wydostaliśmy się z lambda AWS z żądaniem http, które zostało wysłane do ponte, które następnie przesłało do mqtt i wysłało to do lampy. –

1

AWS SDK ma dwóch klas do pracy z Internetem przedmiotów: Internet przedmiotów i IotData. IotData.publish to metoda, której szukasz. Wygląda na to, że obiekt Iot służy do pracy z rzeczami, a IotData do pracy z MQTT i cieniami. Powinno to być bezpośrednio odniesione w dokumentacji dotyczącej MQTT i cieni, ale tak nie jest. Ta usługa (IotData) jest również dostępna in the CLI.

+1

Dzięki za tę odpowiedź. Zrobiłem to na właściwej drodze, publikując wydarzenie z bash: 'aws iot-data publish - cli-input-json '{" topic ":" myTopic "," qos ": 0," payload ":" {\ "myKey \": 54321, \ "myOtherKey \": 12345 "} ''. Klucze ładunku muszą znajdować się w podwójnych cudzysłowach i muszą być opatrzone ukośnikami odwrotnymi. –

0

Jeśli używasz Node.js, musisz zainstalować bibliotekę mqtt. Poniższe kroki pomogą ci pobrać i zainstalować bibliotekę mqtt na AWS Lambda.

  1. Download and install Node.js and npm na komputerze.

  2. Download MQTT library for node.js.

  3. Rozpakuj go w katalogu nodejs, w którym zainstalowano Node.js. (W systemie Windows 10 x64 katalog nodejs to C:\Program Files\nodejs)

  4. Utwórz folder do przechowywania zainstalowanych plików mqtt. Na przykład: D:\lambda_function.

  5. Uruchom polecenie wiersza polecenia jako administrator, zmień katalog na katalog nodejs.

  6. Zainstaluj bibliotekę mqtt na D:\lambda_function.

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

Here's a similar project.