Skip to content

Updating to latest requests and miniMQTT #31

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Apr 16, 2021
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ bundles
dist
**/*.egg-info
.vscode/settings.json
.venv
4 changes: 2 additions & 2 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ confidence=
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
# disable=import-error,print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call
disable=print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call,import-error,bad-continuation
disable=print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call,import-error,bad-continuation,similarities

# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
Expand Down Expand Up @@ -398,7 +398,7 @@ valid-metaclass-classmethod-first-arg=mcs
[DESIGN]

# Maximum number of arguments for function / method
max-args=6
max-args=7

# Maximum number of attributes for a class (see R0902).
# max-attributes=7
Expand Down
4 changes: 2 additions & 2 deletions adafruit_azureiot/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
"""

# The version of the IoT Central MQTT API this code is built against
IOTC_API_VERSION = "2016-11-14"
IOTC_API_VERSION = "2019-10-01"

# The version of the Azure Device Provisioning Service this code is built against
DPS_API_VERSION = "2018-11-01"
DPS_API_VERSION = "2019-03-31"

# The Azure Device Provisioning service endpoint that this library uses to provision IoT Central devices
DPS_END_POINT = "global.azure-devices-provisioning.net"
12 changes: 10 additions & 2 deletions adafruit_azureiot/device_registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,17 @@ def _parse_http_status(status_code: int, status_reason: str) -> None:
)

def __init__(
self, socket, id_scope: str, device_id: str, key: str, logger: Logger = None
self,
socket,
iface,
id_scope: str,
device_id: str,
key: str,
logger: Logger = None,
):
"""Creates an instance of the device registration service
:param socket: The network socket
:param iface: The network interface
:param str id_scope: The ID scope of the device to register
:param str device_id: The device ID of the device to register
:param str key: The primary or secondary key of the device to register
Expand All @@ -73,7 +80,8 @@ def __init__(
self._key = key
self._logger = logger if logger is not None else logging.getLogger("log")

requests.set_socket(socket)
socket.set_interface(iface)
requests.set_socket(socket, iface)

def _loop_assign(self, operation_id, headers) -> str:
uri = "https://%s/%s/registrations/%s/operations/%s?api-version=%s" % (
Expand Down
20 changes: 10 additions & 10 deletions adafruit_azureiot/iot_mqtt.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,14 @@ def _gen_sas_token(self) -> str:
def _create_mqtt_client(self) -> None:
minimqtt.set_socket(self._socket, self._iface)

self._logger.debug(
str.replace(
f"- iot_mqtt :: _on_connect :: username = {self._username}, password = {self._passwd}",
"%",
"%%",
)
)

self._mqtts = MQTT(
broker=self._hostname,
username=self._username,
Expand All @@ -119,14 +127,12 @@ def _create_mqtt_client(self) -> None:
keep_alive=120,
is_ssl=True,
client_id=self._device_id,
log=True,
)

self._mqtts.logger.setLevel(self._logger.getEffectiveLevel())
self._mqtts.enable_logger(logging, self._logger.getEffectiveLevel())

# set actions to take throughout connection lifecycle
self._mqtts.on_connect = self._on_connect
self._mqtts.on_log = self._on_log
self._mqtts.on_publish = self._on_publish
self._mqtts.on_disconnect = self._on_disconnect

Expand All @@ -146,12 +152,6 @@ def _on_connect(self, client, userdata, _, rc) -> None:
self._auth_response_received = True
self._callback.connection_status_change(True)

# pylint: disable=C0103, W0613
def _on_log(self, client, userdata, level, buf) -> None:
self._logger.info("mqtt-log : " + buf)
if level <= 8:
self._logger.error("mqtt-log : " + buf)

def _on_disconnect(self, client, userdata, rc) -> None:
self._logger.info("- iot_mqtt :: _on_disconnect :: rc = " + str(rc))
self._auth_response_received = True
Expand Down Expand Up @@ -348,7 +348,7 @@ def __init__(
self._hostname = hostname
self._key = key
self._token_expires = token_expires
self._username = "{}/{}/api-version={}".format(
self._username = "{}/{}/?api-version={}".format(
self._hostname, device_id, constants.IOTC_API_VERSION
)
self._passwd = self._gen_sas_token()
Expand Down
11 changes: 10 additions & 1 deletion adafruit_azureiot/iotcentral_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,12 @@ def connect(self) -> None:
:raises RuntimeError: if the internet connection is not responding or is unable to connect
"""
self._device_registration = DeviceRegistration(
self._socket, self._id_scope, self._device_id, self._key, self._logger
self._socket,
self._iface,
self._id_scope,
self._device_id,
self._key,
self._logger,
)

token_expiry = int(time.time() + self._token_expires)
Expand All @@ -152,6 +157,10 @@ def connect(self) -> None:
self._logger,
)

self._logger.debug("Hostname: " + hostname)
self._logger.debug("Device Id: " + self._device_id)
self._logger.debug("Shared Access Key: " + self._key)

self._mqtt.connect()
self._mqtt.subscribe_to_twins()

Expand Down