This commit is contained in:
Oguz Bastemur 2019-04-22 13:26:03 -07:00
Родитель fc488523b7
Коммит 78793cace9
3 изменённых файлов: 86 добавлений и 9 удалений

Просмотреть файл

@ -1,11 +1,10 @@
## Azure IoT Central Reference Firmware for Raspberry Pi 2/3 ## Azure IoT reference application for Raspberry Pi 2/3 (using python)
### Description ### Description
An example of writing a firmware solution to send data to Azure IoT Central and An example python app to..
to receive events back from Azure IoT Central to be processed by the device. - send data to Azure IoT Central
You are free to take this code and the concepts used, and use them as a basis - receive events back from Azure IoT Central to be processed by the device.
for your own firmware for Azure IoT Central.
### How to run ### How to run
@ -20,12 +19,11 @@ Install [azure iot central python client](https://pypi.org/project/iotc/) `iotc`
pip install iotc pip install iotc
``` ```
Go create an application
Fill the information below (under app.py). Fill the information below (under app.py).
``` ```
deviceId = "DEVICE_ID" deviceId = "DEVICE_ID"
scopeId = "SCOPE_ID" scopeId = "SCOPE_ID"
mkey = "DEVICE_KEY" deviceKey = "DEVICE_KEY"
``` ```
Run! Run!
@ -35,3 +33,8 @@ python app.py
``` ```
Python 2/3 and micropython(*) are supported. Python 2/3 and micropython(*) are supported.
#### Using master key for producing deviceKey on runtime
Take a look at the `appMasterKey.py` sample

Просмотреть файл

@ -7,9 +7,9 @@ from random import randint
deviceId = "DEVICE_ID" deviceId = "DEVICE_ID"
scopeId = "SCOPE_ID" scopeId = "SCOPE_ID"
mkey = "PRIMARY/SECONDARY device KEY" deviceKey = "PRIMARY/SECONDARY device KEY"
iotc = iotc.Device(scopeId, mkey, deviceId, IOTConnectType.IOTC_CONNECT_SYMM_KEY) iotc = iotc.Device(scopeId, deviceKey, deviceId, IOTConnectType.IOTC_CONNECT_SYMM_KEY)
iotc.setLogLevel(IOTLogLevel.IOTC_LOGGING_API_ONLY) iotc.setLogLevel(IOTLogLevel.IOTC_LOGGING_API_ONLY)
gCanSend = False gCanSend = False

Просмотреть файл

@ -0,0 +1,74 @@
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license.
import sys
import iotc
from iotc import IOTConnectType, IOTLogLevel
from random import randint
import base64
import hmac
import hashlib
gIsMicroPython = ('implementation' in dir(sys)) and ('name' in dir(sys.implementation)) and (sys.implementation.name == 'micropython')
def computeKey(secret, regId):
global gIsMicroPython
try:
secret = base64.b64decode(secret)
except:
print("ERROR: broken base64 secret => `" + secret + "`")
sys.exit()
if gIsMicroPython == False:
return base64.b64encode(hmac.new(secret, msg=regId.encode('utf8'), digestmod=hashlib.sha256).digest())
else:
return base64.b64encode(hmac.new(secret, msg=regId.encode('utf8'), digestmod=hashlib._sha256.sha256).digest())
deviceId = "DEVICE_ID"
scopeId = "SCOPE_ID"
masterKey = "PRIMARY/SECONDARY master Key"
deviceKey = computeKey(masterKey, deviceId)
iotc = iotc.Device(scopeId, deviceKey, deviceId, IOTConnectType.IOTC_CONNECT_SYMM_KEY)
iotc.setLogLevel(IOTLogLevel.IOTC_LOGGING_API_ONLY)
gCanSend = False
gCounter = 0
def onconnect(info):
global gCanSend
print("- [onconnect] => status:" + str(info.getStatusCode()))
if info.getStatusCode() == 0:
if iotc.isConnected():
gCanSend = True
def onmessagesent(info):
print("\t- [onmessagesent] => " + str(info.getPayload()))
def oncommand(info):
print("- [oncommand] => " + info.getTag() + " => " + str(info.getPayload()))
def onsettingsupdated(info):
print("- [onsettingsupdated] => " + info.getTag() + " => " + info.getPayload())
iotc.on("ConnectionStatus", onconnect)
iotc.on("MessageSent", onmessagesent)
iotc.on("Command", oncommand)
iotc.on("SettingsUpdated", onsettingsupdated)
iotc.connect()
while iotc.isConnected():
iotc.doNext() # do the async work needed to be done for MQTT
if gCanSend == True:
if gCounter % 20 == 0:
gCounter = 0
print("Sending telemetry..")
iotc.sendTelemetry("{ \
\"temp\": " + str(randint(20, 45)) + ", \
\"accelerometerX\": " + str(randint(2, 15)) + ", \
\"accelerometerY\": " + str(randint(3, 9)) + ", \
\"accelerometerZ\": " + str(randint(1, 4)) + "}")
gCounter += 1