2017-10-25 6 views
0

Ich versuche, AWS IoT-Regeln auszulösen, die meine Aktionen auslösen. Aber die Dokumentation ist ziemlich schlecht. Aus irgendeinem Grund denke ich, dass ich Json-Payloads mit Verschachtelungsgrad = 1 oben haben werde. Beispiel meiner JSON Nutzlast:Suche nach geschachtelter Eigenschaft in AWS IoT-Regeln mit der AWS IoT-Abfragesprache

"state": { "reported": { "movement": "yes" } } }

Abfrage i innerhalb der Regel bin mit SELECT * FROM '$aws/things/thing-name/shadow/update/accepted' WHERE state.reported.movement="yes"

Dokumentation, ich verwende: http://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-where.html

Informationsobjekt nur über flache JSON hat, Ich habe versucht, state.reported.movement, reported.movement, nur Bewegung und sieht aus wie keiner von ihnen funktioniert

+0

Dieser Teil der Dokumentation umfasst die Referenzierung geschachtelter JSON-Objekte in IoT-Abfragen: http://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-json.html Ihre Select-Anweisung sieht für mich korrekt aus. Was ist das eigentliche Problem, auf das Sie stoßen? Ist die IoT-Service-Protokollierung aktiviert, und stellen Sie sicher, dass in diesem Protokoll keine Fehler angezeigt werden? http://docs.aws.amazon.com/iot/latest/developerguide/cloud-watch-logs.html –

+0

Nicht sicher, warum es vor zwei Tagen nicht funktioniert hat, aber anscheinend hatte @MarkB Recht. Heute habe ich es noch einmal getestet und SNS-Thema begann eine Nachricht zu senden (als Ergebnis der Regel hatte ich ein Sns-Thema verbunden). –

Antwort

0

Okay, Antwort auf meine Frage ist: AWS IoT unterstützt verschachtelte Eigenschaften in WHERE-Anweisungen. Aus irgendeinem Grund hat es nicht funktioniert, als ich eine Regel erstellt habe. Vielleicht hatte das SNS-Thema eine Verzögerung bei der Übermittlung von Nachrichten.

Mein Zustand der Sache, zu AWS IoT Thema wie das aussieht akzeptiert kommen:

{ 
    "state": { 
    "reported": { 
     "system": "armed", 
     "movement": "yes" 
    } 
    }, 
    "metadata": { 
    "reported": { 
     "system": { 
     "timestamp": 1509207282 
     }, 
     "movement": { 
     "timestamp": 1509207282 
     } 
    } 
    }, 
    "version": 618, 
    "timestamp": 1509207282, 
    "clientToken": "xxxxxxxx" 
} 

Und abzufragen, die JSON ich verwende folgende Abfrage:

SELECT * FROM '$aws/things/myThing/shadow/update/accepted' WHERE state.reported.movement="yes" and state.reported.system="armed" 
Verwandte Themen