Ich denke, einer der Gründe für die Verwendung von AWS IoT ist, dass Sie Thing / Device by Thing Shadow steuern können. Auf der anderen Seite denken viele Leute, obwohl ich die Gliederung verstanden habe, dass es nicht möglich ist, die Operation zu überprüfen, weil es keine "Sache" gibt. Sie können dies unter Linux mithilfe des Geräte-SDK überprüfen. Lassen Sie uns hier den Betrieb von Thing Shadow mit EC2 als virtuellem Gerät überprüfen.
[Zusatz] Ich wurde nach der Bedeutung von Shadow gefragt, daher füge ich ein wenig hinzu. Wenn Sie ein Gerät wie dieses Beispiel verwalten, ist es nicht schwierig, es manuell zu organisieren. Im Fall von IoT ist es jedoch erforderlich, eine große Anzahl von Sensoren und Gateways zu verwalten. Auch ist es nicht immer nah. Ich denke, der Wert von Shadow ist, dass Sie die Einstellungen vieler / entfernter Geräte über die Cloud verwalten / ändern können.
AWS IoT
Wählen Sie die Registrierung und wählen Sie die Dinge aus. Wenn der Bereich "Dinge" angezeigt wird, klicken Sie oben auf dem Bildschirm auf "Erstellen".
Um eine Sache zu erstellen, legen Sie einen beliebigen Namen fest und drücken Sie auf Erstellen. Hier ist der Name _ ** Schattentest ** _.
Wählen Sie nach dem Erstellen von Thing auf dem Bildschirm Zertifikat aus. Klicken Sie auf dem angezeigten Bildschirm auf Zertifikat erstellen.
Bitte laden Sie die drei erstellten Zertifikate herunter. (cert.pem / public.key / private.key) Drücken Sie außerdem ** Aktiv **, das am unteren Bildschirmrand angezeigt wird, um das Zertifikat zu aktivieren.
Drücken Sie in der AWS IoT-Konsole unten links auf dem Bildschirm auf Einstellungen, überprüfen Sie den Endpunkt auf dem angezeigten Bildschirm, kopieren Sie ihn in Text usw. Für jede Region gibt es einen Endpunkt. {random}.iot.{region}.amazon.com Es wird in Form von angezeigt.
EC2
Booten Sie Amazon Linux mit EC2. t2.micro ist genug. Wenn Sie nicht wissen, wie Sie EC2 starten sollen, lesen Sie bitte hier. Standardmäßig ist auch die Festplattengröße ausreichend. Vergessen Sie nicht, Global IP für die Anmeldung bei SSH einzurichten.
Da Mock mit Python SDK erstellt wird, installieren Sie Python SDK. Geben Sie den folgenden Befehl über die EC2-Konsole aus
pip install AWSIoTPythonSDK
Wie benötigt
Platz In diesem Beitrag gehe ich davon aus, dass Sie unter / tmp arbeiten werden.
mkdir /tmp/dummy-shadow
cd /tmp/dummy-shadow
mkdir certs
cd certs
Holen Sie sich rootCA (unter Zertifikaten platziert) Erhalten von VeriSign hier
curl https://www.symantec.com/content/en/us/enterprise/veisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem -o /tmp/root.pem
Platzieren Sie außerdem das zuvor in AWS IoT erstellte private / cert-Zertifikat in diesem Zertifikatsverzeichnis. Sie können auch mit scp / vi kopieren und einfügen. Der Dateiname lautet cert => cert.pem private => private.pem Bitte. Versuchen Sie, das folgende Ergebnis zu erhalten.
ls -1 /tmp/certs
cert.pem
private.pem
root.pem
Platzieren Sie die folgenden Dateien in / tmp / dummy-shadow. Bitte stellen Sie YOUR_AWSIOT_DOMAIN entsprechend Ihrer Umgebung ein. Informationen zur Domänenüberprüfung finden Sie unter AWS IoT Console-Einstellungen => Benutzerdefinierter Endpunkt.
setup.json
{
"AWSIoT": {
"ENDPOINT":"YOUR_AWSIOT_DOMAIN",
"CERT_PATH":"./certs/",
"KEYS":["cert.pem", "public.pem", "root.pem"]
},
"DEVICE":{
"NAME":"shadow-test",
}
}
Unten ist das Dummy-Programm
dummy-shadow.py
import os
import sys
import json
import time
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient
CONFIG_FILE = './setup.json'
#Feste Definition des Status beim Start der Anwendung(Variablen, die mit dem Schatten synchronisiert werden)
SIGNAL = "green"
WAIT_TIME = 10
#Da Schatten aus der Rückruffunktion gelesen wird, wird er als global definiert.
shadow = None
shadow_hundler = None
##########################################################
# setup.Lesen Sie die Einstellungen von json
##########################################################
def readConfig():
print 'start readConfig func'
try:
# read config file
f = open(CONFIG_FILE, "r")
jsonData = json.load(f)
f.close()
list = {}
list["ENDPOINT"] = jsonData["AWSIoT"]["ENDPOINT"]
list["CERT_PATH"] = jsonData["AWSIoT"]["CERT_PATH"]
list["DEVICE_NAME"] = jsonData["DEVICE"]["NAME"]
return list
except Exception as e:
print 'Config load error'
print e.message
sys.exit()
##########################################################
#Ausgabe des Shadow Update-Befehls
##########################################################
def updateThing(report):
try:
report_json = '{"state":{"reported":'+ report + '}}'
print "send currnet status to cloud-shadow"
print report_json
shadow_hundler.shadowUpdate(report_json, None, 5)
return
except Exception as e:
print e.message
sys.exit()
##########################################################
#Wird als Rückruftyp von shadowRegisterDeltaCallback aufgerufen
#
##########################################################
def getDelta(payload, responseStatus, token):
try:
print '======get Delta======'
dict_delta = json.loads(payload)
print dict_delta
state = dict_delta["state"]
if state.has_key("wait_time"):
delta = int(state["wait_time"])
global WAIT_TIME
WAIT_TIME = delta
print "wait time change :%s" % WAIT_TIME
if state.has_key('signal'):
global SIGNAL
SIGNAL = state['signal']
print "SIGNAL change :%s" % SIGNAL
report = json.dumps(dict_delta["state"])
updateThing(report)
return
except Exception as e:
print "Error on Delta function"
print e.message
raise
################################################
#Prozedurale Funktion der Schattenverbindung
################################################
def initShadow(Config):
##--need device cert / private / rootCA--
# rootCA: get from symantec
ROOT_KEY = Config['CERT_PATH'] + 'root.pem'
CERT_KEY = Config['CERT_PATH'] + 'cert.pem'
PRIVATE_KEY = Config['CERT_PATH'] + 'private.pem'
try:
# init shadow connect procedure
global shadow
shadow = AWSIoTMQTTShadowClient(Config["DEVICE_NAME"])
shadow.configureEndpoint(Config["ENDPOINT"], 8883) # Setting URL-ENDPOINT & Port
shadow.configureCredentials(ROOT_KEY, PRIVATE_KEY, CERT_KEY ) # Cert file setting
shadow.configureConnectDisconnectTimeout(10)# CONNACK wait time (sec)
shadow.configureMQTTOperationTimeout(5) # QoS1 publish (sec)
print 'start connct shadow'
shadow.connect()
print 'shadow connect'
return
except Exception as e:
print 'Error on Init Shadow'
raise
####
if __name__ == '__main__':
Config = readConfig()
try:
initShadow(Config)
print 'satrt subscribe shadow'
shadow_hundler = shadow.createShadowHandlerWithName(Config['DEVICE_NAME'], True)
shadow_hundler.shadowRegisterDeltaCallback(getDelta)
default_state = '{"wait_time":' + str(WAIT_TIME) + ', "signal":"green"}'
updateThing(default_state)
while True:
time.sleep(WAIT_TIME)
print 'Currnet WAIT_TIME=%s' % str(WAIT_TIME)
pass
except KeyboardInterrupt:
print 'Keyboard Interrupt'
sys.exit()
except Exception as e:
print e.message
sys.exit()
python PROGRAM.py &
Beginnt im Hintergrund mit.
shadow update
Führen Sie eine Schattenaktualisierung auf der Konsole oder der CLI durch. Wählen Sie Widerstand => Sache => [Sache Name] => Schatten.
Fügen Sie einen gewünschten Abschnitt wie unten gezeigt hinzu und registrieren Sie sich mit wait_time: 30, Signal: "grün". Dann, als Delta, wait_time: 30, das heißt, nur der Unterschied wird als Delta gemeldet.
Wenn Sie sich die Konsole auf der Programmseite ansehen, sollten Sie das Delta und die Sohle sehen. Wie Sie dem Code entnehmen können, habe ich die Variable wait_time geändert und [state] zurückgesendet. Da der Zustand, der als Ergebnis Konsistenz sein sollte, im Zustand Delta geschrieben wird, ist es nicht erforderlich, JSON einzeln zu erstellen, indem dies nur gemeldet wird, wenn __korrekter Zustandsübergang __ durchgeführt wird. Wie oben erwähnt, beachten Sie bitte, dass wenn Sie in einem Zustand melden, in dem der Zustand nicht korrekt geändert werden kann, er falsch ausgerichtet ist.
Wenn dieser Bericht gesendet wird, sollte das Delta weg sein und gewünscht / gemeldet sollte den gleichen Wert haben.
Die grobe Reihenfolge ist unten gezeigt.
Als Programmstatus beim Programmstart fest codiert SIGNAL = "green" WAIT_TIME = 10 Wird benachrichtigt. Wenn der Schattenzustand mehrmals geändert wird, werden die obigen Anfangsparameter sofort nach dem Start des Programms benachrichtigt, und Delta wird sofort empfangen.
Dieser Beitrag ist eine individuelle Meinung und bezieht sich nicht auf das Unternehmen oder die Organisation, zu der er gehört. Darüber hinaus übernehmen wir keine Garantie für den Betrieb des veröffentlichten Beispielprogramms. Verwenden Sie es daher nur als Referenz.
Recommended Posts