-
Notifications
You must be signed in to change notification settings - Fork 7
/
main_shadowEcho.py
49 lines (40 loc) · 1.75 KB
/
main_shadowEcho.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from MQTTLib import AWSIoTMQTTShadowClient
from network import WLAN
import time
import config
import json
# Connect to wifi
wlan = WLAN(mode=WLAN.STA)
wlan.connect(config.WIFI_SSID, auth=(None, config.WIFI_PASS), timeout=5000)
while not wlan.isconnected():
time.sleep(0.5)
print('WLAN connection succeeded!')
# Custom Shadow callback with echo
class shadowCallbackContainer:
def __init__(self, deviceShadowInstance):
self.deviceShadowInstance = deviceShadowInstance
# Custom Shadow callback
def customShadowCallback_Delta(self, payload, responseStatus, token):
print("Received a delta message:")
payloadDict = json.loads(payload)
deltaMessage = json.dumps(payloadDict["state"])
print(deltaMessage)
print("Request to update the reported state...")
newPayload = '{"state":{"reported":' + deltaMessage + '}}'
self.deviceShadowInstance.shadowUpdate(newPayload, None, 5)
print("Sent.")
# configure the MQTT client
pycomAwsMQTTShadowClient = AWSIoTMQTTShadowClient(config.CLIENT_ID)
pycomAwsMQTTShadowClient.configureEndpoint(config.AWS_HOST, config.AWS_PORT)
pycomAwsMQTTShadowClient.configureCredentials(config.AWS_ROOT_CA, config.AWS_PRIVATE_KEY, config.AWS_CLIENT_CERT)
pycomAwsMQTTShadowClient.configureConnectDisconnectTimeout(config.CONN_DISCONN_TIMEOUT)
pycomAwsMQTTShadowClient.configureMQTTOperationTimeout(config.MQTT_OPER_TIMEOUT)
# Connect to MQTT Host
if pycomAwsMQTTShadowClient.connect():
print('AWS connection succeeded')
deviceShadowHandler = pycomAwsMQTTShadowClient.createShadowHandlerWithName(config.THING_NAME, True)
shadowCallbackContainer_Bot = shadowCallbackContainer(deviceShadowHandler)
deviceShadowHandler.shadowRegisterDeltaCallback(shadowCallbackContainer_Bot.customShadowCallback_Delta)
# Loop forever
while True:
time.sleep(1)