2016-06-14 73 views
8

Mi piacerebbe avere un comando semplice come quello che uso in bash per pubblicare qualcosa su un argomento su MQTT all'interno di una funzione AWS Lambda. Lungo le linee di: mosquitto_pub -h my.server.com -t "light/set" -m "on"Come posso pubblicare su un argomento MQTT in una funzione Amazon AWS Lambda?

Sfondo: Vorrei accendere e spegnere una lampada con Alexa. Alexa può avviare una funzione Lambda, e all'interno di questa funzione Lambda vorrei iniziare una pubblicazione MQTT, perché la lampada può ascoltare un argomento MQTT e reagire ai messaggi lì. (Forse ci sono soluzioni più semplici, ma siamo in una rete complessa (università), che rende molti altri approcci più difficile)

risposta

8

Se si sta utilizzando Python, sono stato in grado di ottenere una funzione di AWS Lambda di pubblicare un messaggio a AWS degli oggetti utilizzando la seguente dentro la mia funzione di gestione:

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

Sarà inoltre necessario assicurarsi che il ruolo (nella configurazione della funzione Lambda) disponga di una politica collegata per consentire l'accesso alla funzione di pubblicazione IoT. Sotto IAM -> ruoli è possibile aggiungere una politica in linea per la vostra funzione Lambda Ruolo come:

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

Grazie per il vostro aiuto Roy. Alla fine usammo Ponte, uscimmo dalla lambda AWS con una richiesta http inviata a ponte che poi la trasferimmo in mqtt e la mandammo alla lampada. –

1

L'AWS SDK è dotato di due classi per lavorare con degli oggetti: Iot e IotData. IotData.publish è il metodo che stai cercando. Sembra che l'oggetto Iot sia per lavorare con le cose e IotData sia per lavorare con MQTT e le ombre. Questo dovrebbe essere fatto direttamente riferimento nella documentazione su MQTT e ombre, ma non lo è.

Questo servizio (IotData) è disponibile anche in the CLI.

+1

Grazie per questa risposta. Mi ha messo sulla strada giusta con la pubblicazione di un evento da bash: 'aws iot-data publish --cli-input-json '{" topic ":" myTopic "," qos ": 0," payload ":" {\ "myKey \": 54321, \ "myOtherKey \": 12345 "} ''. Le chiavi del payload devono essere racchiuse tra virgolette doppie e scappate con barre rovesciate. –

0

Se si utilizza Node.js, è necessario installare la libreria mqtt. I seguenti passaggi ti aiutano a scaricare e installare la libreria mqtt su AWS Lambda.

  1. Download and install Node.js and npm sul PC.

  2. Download MQTT library for node.js.

  3. Decomprimere nella directory nodejs che Node.js è stato installato. (In Windows 10 x64, la directory nodejs è C:\Program Files\nodejs)

  4. Creare una cartella per memorizzare i file installati mqtt. Ad esempio, D:\lambda_function.

  5. Eseguire il prompt dei comandi come amministratore, cambiare la directory nella directory nodejs.

  6. Installare la libreria mqtt su D:\lambda_function.

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

Here's a similar project.