Adafruit_CircuitPython_AzureIoT
================================
.. image:: https://readthedocs.org/projects/adafruit-circuitpython-azureiot/badge/?version=latest
:target: https://docs.circuitpython.org/projects/azureiot/en/latest/
:alt: Documentation Status
.. image:: https://raw.githubusercontent.com/adafruit/Adafruit_CircuitPython_Bundle/main/badges/adafruit_discord.svg
:target: https://adafru.it/discord
:alt: Discord
.. image:: https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT/workflows/Build%20CI/badge.svg
:target: https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT/actions/
:alt: Build Status
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/psf/black
:alt: Code Style: Black
A CircuitPython device library for `Microsoft Azure IoT Services <https://azure.microsoft.com/overview/iot/?WT.mc_id=academic-3168-jabenn>`_ from a CircuitPython device. This library only supports key-base authentication, it currently doesn't support X.509 certificates.
Installing from PyPI
=====================
On supported GNU/Linux systems like the Raspberry Pi, you can install the driver locally `from
PyPI <https://pypi.org/project/adafruit-circuitpython-azureiot/>`_. To install for current user:
.. code-block:: shell
pip3 install adafruit-circuitpython-azureiot
To install system-wide (this may be required in some cases):
.. code-block:: shell
sudo pip3 install adafruit-circuitpython-azureiot
To install in a virtual environment in your current project:
.. code-block:: shell
mkdir project-name && cd project-name
python3 -m venv .venv
source .venv/bin/activate
pip3 install adafruit-circuitpython-azureiot
Dependencies
=============
This driver depends on:
* `Adafruit CircuitPython <https://github.com/adafruit/circuitpython>`_
* `Adafruit CircuitPython BinASCII <https://github.com/adafruit/Adafruit_CircuitPython_Binascii>`_
* `Adafruit CircuitPython Logging <https://github.com/adafruit/Adafruit_CircuitPython_Logging>`_
* `Adafruit CircuitPython MiniMQTT <https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT>`_
Please ensure all dependencies are available on the CircuitPython filesystem.
This is easily achieved by downloading
`the Adafruit library and driver bundle <https://github.com/adafruit/Adafruit_CircuitPython_Bundle>`_.
**Board Compatibility:** The following built-in modules must be available: gc, json, time
Usage Example
=============
This library supports both `Azure IoT Hub <https://azure.microsoft.com/services/iot-hub/?WT.mc_id=academic-3168-jabenn>`_ and `Azure IoT Central <https://azure.microsoft.com/services/iot-central/?WT.mc_id=academic-3168-jabenn>`__.
To create an Azure IoT Hub instance or an Azure IoT Central app, you will need an Azure subscription. If you don't have an Azure subscription, you can sign up for free:
- If you are a student 18 or over, head to `aka.ms/FreeStudentAzure <https://aka.ms/FreeStudentAzure>`_ and sign up, validating with your student email address. This will give you $100 of Azure credit and free tiers of a load of service, renewable each year you are a student. You will not need a credit card.
- If you are not a student, head to `aka.ms/FreeAz <https://aka.ms/FreeAz>`_ and sign up to get $200 of credit for 30 days, as well as free tiers of a load of services. You will need a credit card for validation only, your card will not be charged.
ESP32 AirLift Networking
========================
To use this library, you will need to create an ESP32_SPI WifiManager, connected to WiFi. You will also need to set the current time, as this is used to generate time-based authentication keys. One way to do this is with the following code:
.. code-block:: python
# get_time will raise ValueError if the time isn't available yet so loop until
# it works.
now_utc = None
while now_utc is None:
try:
now_utc = time.localtime(esp.get_time()[0])
except ValueError:
pass
rtc.RTC().datetime = now_utc
Native Networking
=================
To use this library, with boards that have native networking support, you need to be connected to a network. You will also need to set the current time, as this is used to generate time-based authentication keys. One way to do this is the `Adafruit NTP library <https://github.com/adafruit/Adafruit_CircuitPython_NTP>`_ with the following code:
.. code-block:: python
pool = adafruit_connection_manager.get_radio_socketpool(wifi.radio)
ntp = adafruit_ntp.NTP(pool, tz_offset=0)
# NOTE: This changes the system time so make sure you aren't assuming that time
# doesn't jump.
rtc.RTC().datetime = ntp.datetime
Azure IoT Hub
-------------
To interact with Azure IoT Hub, you will need to create a hub, and a register a device inside that hub. There is a free tier available, and this free tier allows up to 8,000 messages a day, so try not to send messages too often if you are using this tier.
- Open the `Azure Portal <https://aka.ms/AzurePortalHome>`_.
- Follow the instructions in `Microsoft Docs <https://aka.ms/CreateIoTHub>`_ to create an Azure IoT Hub and register a device.
- Copy the devices Primary or secondary connection string, and add this to your ``secrets.py`` file.
You can find the device connection string by selecting the IoT Hub in the `Azure Portal <https://aka.ms/AzurePortalHome>`_, *selecting Explorer -> IoT devices*, then selecting your device.
.. image:: iot-hub-device.png
:alt: Locating the device in the IoT hub blade
*Locating the device in the IoT hub blade*
Then copy either the primary or secondary connection string using the copy button next to the value.
.. image:: iot-hub-device-keys.png
:alt: Copy the primary connection string
*Copy the primary connection string*
**Connect your device to Azure IoT Hub**
.. code-block:: python
from adafruit_azureiot import IoTHubDevice
device = IoTHubDevice(wifi, secrets["device_connection_string"])
device.connect()
Once the device is connected, you will regularly need to run a ``loop`` to poll for messages from the cloud.
.. code-block:: python
while True:
device.loop()
time.sleep(1)
**Send a device to cloud message**
.. code-block:: python
message = {"Temperature": temp}
device.send_device_to_cloud_message(json.dumps(message))
**Receive device to cloud messages**
.. code-block:: python
def cloud_to_device_message_received(body: str, properties: dict):
print("Received message with body", body, "and properties", json.dumps(properties))
# Subscribe to cloud to device messages
device.on_cloud_to_device_message_received = cloud_to_device_message_received
**Receive direct methods**
.. code-block:: python
def direct_method_invoked(method_name: str, payload) -> IoTResponse:
print("Received direct method", method_name, "with data", str(payload))
# return a status code and message to indicate if the direct method was handled correctly
return IoTResponse(200, "OK")
# Subscribe to direct methods
device.on_direct_method_invoked = direct_method_invoked
**Update reported properties on the device twin**
*This is not supported on Basic tier IoT Hubs, only on the free and standard tiers.*
.. code-block:: python
patch = {"Temperature": temp}
device.update_twin(patch)
**Subscribe to desired property changes on the device twin**
*This is not supported on Basic tier IoT Hubs, only on the free and standard tiers.*
.. code-block:: python
def device_twin_desired_updated(desired_property_name: str, desired_property_value, desired_version: int):
print("Property", desired_property_name, "updated to", str(desired_property_value), "version", desired_version)
# Subscribe to desired property changes
device.on_device_twin_desired_updated = device_twin_desired_updated
Azure IoT Central
-----------------
To use Azure IoT Central, you will need to create an Azure IoT Central app, create a device template and register a device against the template.
- Head to `Azure IoT Central <https://apps.azureiotcentral.com/?WT.mc_id=academic-3168-jabenn>`__
- Follow the instructions in the `Microsoft Docs <https://docs.microsoft.com/azure/iot-central/core/quick-deploy-iot-central?WT.mc_id=academic-3168-jabenn>`__ to create an application. Every tier is free for up to 2 devices.
- Follow the instructions in the `Microsoft Docs <https://docs.microsoft.com/azure/iot-central/core/quick-create-simulated-device?WT.mc_id=academic-3168-jabenn>`__ to create a device template.
- Create a device based off the template, and select **Connect** to get the device connection details. Store the ID Scope, Device ID and either the primary or secondary device SAS key in your ``secrets.py`` file.
.. image:: iot-central-connect-button.png
:alt: The IoT Central connect button
*The connect button*
.. image:: iot-central-connect-dialog.png
:alt: The IoT Central connection details dialog
*The connection details dialog*
.. code-block:: python
secrets = {
# WiFi settings
"ssid": "",
"password": "",
# Azure IoT Central settings
"id_scope": "",
"device_id": "",
"device_sas_key": ""
}
**Connect your device to your Azure IoT Central app**
.. code-block:: python
from adafruit_azureiot import IoTCentralDevice
device = IoTCentralDevice(wifi, secrets["id_scope"], secrets["device_id"], secrets["device_sas_key"])
device.connect()
Once the device is connected, you will regularly need to run a ``loop`` to poll for messages from the cloud.
.. code-block:: python
while True:
device.loop()
time.sleep(1)
**Send telemetry**
.. code-block:: python
message = {"Temperature": temp}
device.send_telemetry(json.dumps(message))
**Listen for commands**
.. code-block:: python
def command_executed(command_name: str, payload) -> IoTResponse:
print("Command", command_name, "executed with payload", str(payload))
# return a status code and message to indicate if the command was handled correctly
return IoTResponse(200, "OK")
# Subscribe to commands
device.on_command_executed = command_executed
**Update properties**
.. code-block:: python
device.send_property("Desired_Temperature", temp)
**Listen for property updates**
.. code-block:: python
def property_changed(property_name, property_value, version):
print("Property", property_name, "updated to", str(property_value), "version", str(version))
# Subscribe to property updates
device.on_property_changed = property_changed
Learning more about Azure IoT services
--------------------------------------
If you want to learn more about setting up or using Azure IoT Services, check out the following resources:
- `Azure IoT documentation on Microsoft Docs <https://docs.microsoft.com/azure/iot-fundamentals/?WT.mc_id=academic-3168-jabenn>`_
- `IoT learning paths and modules on Microsoft Learn <https://docs.microsoft.com/learn/browse/?term=iot&WT.mc_id=academic-3168-jabenn>`_ - Free, online, self-guided hands on learning with Azure IoT services
Documentation
=============
API documentation for this library can be found on `Read the Docs <https://docs.circuitpython.org/projects/azureiot/en/latest/>`_.
For information on building library documentation, please check out `this guide <https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/sharing-our-docs-on-readthedocs#sphinx-5-1>`_.
Contributing
============
Contributions are welcome! Please read our `Code of Conduct
<https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT/blob/main/CODE_OF_CONDUCT.md>`_
before contributing to help this project stay welcoming.
Raw data
{
"_id": null,
"home_page": null,
"name": "adafruit-circuitpython-azureiot",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "adafruit, blinka, circuitpython, micropython, azureiot, azure, iot, device, services, , iothub, , iotcentral",
"author": null,
"author_email": "Adafruit Industries <circuitpython@adafruit.com>",
"download_url": "https://files.pythonhosted.org/packages/9e/46/19a2b50838f79fac5fc85b95dbe2be7dc76c9bd1f06366e2227131eaeba0/adafruit_circuitpython_azureiot-2.6.0.tar.gz",
"platform": null,
"description": "Adafruit_CircuitPython_AzureIoT\n================================\n\n.. image:: https://readthedocs.org/projects/adafruit-circuitpython-azureiot/badge/?version=latest\n :target: https://docs.circuitpython.org/projects/azureiot/en/latest/\n :alt: Documentation Status\n\n.. image:: https://raw.githubusercontent.com/adafruit/Adafruit_CircuitPython_Bundle/main/badges/adafruit_discord.svg\n :target: https://adafru.it/discord\n :alt: Discord\n\n.. image:: https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT/workflows/Build%20CI/badge.svg\n :target: https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT/actions/\n :alt: Build Status\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg\n :target: https://github.com/psf/black\n :alt: Code Style: Black\n\nA CircuitPython device library for `Microsoft Azure IoT Services <https://azure.microsoft.com/overview/iot/?WT.mc_id=academic-3168-jabenn>`_ from a CircuitPython device. This library only supports key-base authentication, it currently doesn't support X.509 certificates.\n\nInstalling from PyPI\n=====================\nOn supported GNU/Linux systems like the Raspberry Pi, you can install the driver locally `from\nPyPI <https://pypi.org/project/adafruit-circuitpython-azureiot/>`_. To install for current user:\n\n.. code-block:: shell\n\n pip3 install adafruit-circuitpython-azureiot\n\nTo install system-wide (this may be required in some cases):\n\n.. code-block:: shell\n\n sudo pip3 install adafruit-circuitpython-azureiot\n\nTo install in a virtual environment in your current project:\n\n.. code-block:: shell\n\n mkdir project-name && cd project-name\n python3 -m venv .venv\n source .venv/bin/activate\n pip3 install adafruit-circuitpython-azureiot\n\nDependencies\n=============\nThis driver depends on:\n\n* `Adafruit CircuitPython <https://github.com/adafruit/circuitpython>`_\n* `Adafruit CircuitPython BinASCII <https://github.com/adafruit/Adafruit_CircuitPython_Binascii>`_\n* `Adafruit CircuitPython Logging <https://github.com/adafruit/Adafruit_CircuitPython_Logging>`_\n* `Adafruit CircuitPython MiniMQTT <https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT>`_\n\nPlease ensure all dependencies are available on the CircuitPython filesystem.\nThis is easily achieved by downloading\n`the Adafruit library and driver bundle <https://github.com/adafruit/Adafruit_CircuitPython_Bundle>`_.\n\n**Board Compatibility:** The following built-in modules must be available: gc, json, time\n\nUsage Example\n=============\n\nThis library supports both `Azure IoT Hub <https://azure.microsoft.com/services/iot-hub/?WT.mc_id=academic-3168-jabenn>`_ and `Azure IoT Central <https://azure.microsoft.com/services/iot-central/?WT.mc_id=academic-3168-jabenn>`__.\n\nTo create an Azure IoT Hub instance or an Azure IoT Central app, you will need an Azure subscription. If you don't have an Azure subscription, you can sign up for free:\n\n- If you are a student 18 or over, head to `aka.ms/FreeStudentAzure <https://aka.ms/FreeStudentAzure>`_ and sign up, validating with your student email address. This will give you $100 of Azure credit and free tiers of a load of service, renewable each year you are a student. You will not need a credit card.\n\n- If you are not a student, head to `aka.ms/FreeAz <https://aka.ms/FreeAz>`_ and sign up to get $200 of credit for 30 days, as well as free tiers of a load of services. You will need a credit card for validation only, your card will not be charged.\n\nESP32 AirLift Networking\n========================\n\nTo use this library, you will need to create an ESP32_SPI WifiManager, connected to WiFi. You will also need to set the current time, as this is used to generate time-based authentication keys. One way to do this is with the following code:\n\n.. code-block:: python\n\n # get_time will raise ValueError if the time isn't available yet so loop until\n # it works.\n now_utc = None\n while now_utc is None:\n try:\n now_utc = time.localtime(esp.get_time()[0])\n except ValueError:\n pass\n rtc.RTC().datetime = now_utc\n\nNative Networking\n=================\nTo use this library, with boards that have native networking support, you need to be connected to a network. You will also need to set the current time, as this is used to generate time-based authentication keys. One way to do this is the `Adafruit NTP library <https://github.com/adafruit/Adafruit_CircuitPython_NTP>`_ with the following code:\n\n.. code-block:: python\n\n pool = adafruit_connection_manager.get_radio_socketpool(wifi.radio)\n ntp = adafruit_ntp.NTP(pool, tz_offset=0)\n\n # NOTE: This changes the system time so make sure you aren't assuming that time\n # doesn't jump.\n rtc.RTC().datetime = ntp.datetime\n\nAzure IoT Hub\n-------------\n\nTo interact with Azure IoT Hub, you will need to create a hub, and a register a device inside that hub. There is a free tier available, and this free tier allows up to 8,000 messages a day, so try not to send messages too often if you are using this tier.\n\n- Open the `Azure Portal <https://aka.ms/AzurePortalHome>`_.\n- Follow the instructions in `Microsoft Docs <https://aka.ms/CreateIoTHub>`_ to create an Azure IoT Hub and register a device.\n- Copy the devices Primary or secondary connection string, and add this to your ``secrets.py`` file.\n\nYou can find the device connection string by selecting the IoT Hub in the `Azure Portal <https://aka.ms/AzurePortalHome>`_, *selecting Explorer -> IoT devices*, then selecting your device.\n\n.. image:: iot-hub-device.png\n :alt: Locating the device in the IoT hub blade\n\n*Locating the device in the IoT hub blade*\n\nThen copy either the primary or secondary connection string using the copy button next to the value.\n\n.. image:: iot-hub-device-keys.png\n :alt: Copy the primary connection string\n\n*Copy the primary connection string*\n\n**Connect your device to Azure IoT Hub**\n\n.. code-block:: python\n\n from adafruit_azureiot import IoTHubDevice\n\n device = IoTHubDevice(wifi, secrets[\"device_connection_string\"])\n device.connect()\n\nOnce the device is connected, you will regularly need to run a ``loop`` to poll for messages from the cloud.\n\n.. code-block:: python\n\n while True:\n device.loop()\n time.sleep(1)\n\n**Send a device to cloud message**\n\n.. code-block:: python\n\n message = {\"Temperature\": temp}\n device.send_device_to_cloud_message(json.dumps(message))\n\n**Receive device to cloud messages**\n\n.. code-block:: python\n\n def cloud_to_device_message_received(body: str, properties: dict):\n print(\"Received message with body\", body, \"and properties\", json.dumps(properties))\n\n # Subscribe to cloud to device messages\n device.on_cloud_to_device_message_received = cloud_to_device_message_received\n\n**Receive direct methods**\n\n.. code-block:: python\n\n def direct_method_invoked(method_name: str, payload) -> IoTResponse:\n print(\"Received direct method\", method_name, \"with data\", str(payload))\n # return a status code and message to indicate if the direct method was handled correctly\n return IoTResponse(200, \"OK\")\n\n # Subscribe to direct methods\n device.on_direct_method_invoked = direct_method_invoked\n\n**Update reported properties on the device twin**\n\n*This is not supported on Basic tier IoT Hubs, only on the free and standard tiers.*\n\n.. code-block:: python\n\n patch = {\"Temperature\": temp}\n device.update_twin(patch)\n\n**Subscribe to desired property changes on the device twin**\n\n*This is not supported on Basic tier IoT Hubs, only on the free and standard tiers.*\n\n.. code-block:: python\n\n def device_twin_desired_updated(desired_property_name: str, desired_property_value, desired_version: int):\n print(\"Property\", desired_property_name, \"updated to\", str(desired_property_value), \"version\", desired_version)\n\n # Subscribe to desired property changes\n device.on_device_twin_desired_updated = device_twin_desired_updated\n\nAzure IoT Central\n-----------------\n\nTo use Azure IoT Central, you will need to create an Azure IoT Central app, create a device template and register a device against the template.\n\n- Head to `Azure IoT Central <https://apps.azureiotcentral.com/?WT.mc_id=academic-3168-jabenn>`__\n- Follow the instructions in the `Microsoft Docs <https://docs.microsoft.com/azure/iot-central/core/quick-deploy-iot-central?WT.mc_id=academic-3168-jabenn>`__ to create an application. Every tier is free for up to 2 devices.\n- Follow the instructions in the `Microsoft Docs <https://docs.microsoft.com/azure/iot-central/core/quick-create-simulated-device?WT.mc_id=academic-3168-jabenn>`__ to create a device template.\n- Create a device based off the template, and select **Connect** to get the device connection details. Store the ID Scope, Device ID and either the primary or secondary device SAS key in your ``secrets.py`` file.\n\n.. image:: iot-central-connect-button.png\n :alt: The IoT Central connect button\n\n*The connect button*\n\n.. image:: iot-central-connect-dialog.png\n :alt: The IoT Central connection details dialog\n\n*The connection details dialog*\n\n.. code-block:: python\n\n secrets = {\n # WiFi settings\n \"ssid\": \"\",\n \"password\": \"\",\n\n # Azure IoT Central settings\n \"id_scope\": \"\",\n \"device_id\": \"\",\n \"device_sas_key\": \"\"\n }\n\n**Connect your device to your Azure IoT Central app**\n\n.. code-block:: python\n\n from adafruit_azureiot import IoTCentralDevice\n\n device = IoTCentralDevice(wifi, secrets[\"id_scope\"], secrets[\"device_id\"], secrets[\"device_sas_key\"])\n device.connect()\n\nOnce the device is connected, you will regularly need to run a ``loop`` to poll for messages from the cloud.\n\n.. code-block:: python\n\n while True:\n device.loop()\n time.sleep(1)\n\n**Send telemetry**\n\n.. code-block:: python\n\n message = {\"Temperature\": temp}\n device.send_telemetry(json.dumps(message))\n\n**Listen for commands**\n\n.. code-block:: python\n\n def command_executed(command_name: str, payload) -> IoTResponse:\n print(\"Command\", command_name, \"executed with payload\", str(payload))\n # return a status code and message to indicate if the command was handled correctly\n return IoTResponse(200, \"OK\")\n\n # Subscribe to commands\n device.on_command_executed = command_executed\n\n**Update properties**\n\n.. code-block:: python\n\n device.send_property(\"Desired_Temperature\", temp)\n\n**Listen for property updates**\n\n.. code-block:: python\n\n def property_changed(property_name, property_value, version):\n print(\"Property\", property_name, \"updated to\", str(property_value), \"version\", str(version))\n\n # Subscribe to property updates\n device.on_property_changed = property_changed\n\nLearning more about Azure IoT services\n--------------------------------------\n\nIf you want to learn more about setting up or using Azure IoT Services, check out the following resources:\n\n- `Azure IoT documentation on Microsoft Docs <https://docs.microsoft.com/azure/iot-fundamentals/?WT.mc_id=academic-3168-jabenn>`_\n- `IoT learning paths and modules on Microsoft Learn <https://docs.microsoft.com/learn/browse/?term=iot&WT.mc_id=academic-3168-jabenn>`_ - Free, online, self-guided hands on learning with Azure IoT services\n\nDocumentation\n=============\n\nAPI documentation for this library can be found on `Read the Docs <https://docs.circuitpython.org/projects/azureiot/en/latest/>`_.\n\nFor information on building library documentation, please check out `this guide <https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/sharing-our-docs-on-readthedocs#sphinx-5-1>`_.\n\nContributing\n============\n\nContributions are welcome! Please read our `Code of Conduct\n<https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT/blob/main/CODE_OF_CONDUCT.md>`_\nbefore contributing to help this project stay welcoming.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Access to Microsoft Azure IoT from CircuitPython",
"version": "2.6.0",
"project_urls": {
"Homepage": "https://github.com/adafruit/Adafruit_CircuitPython_AzureIoT"
},
"split_keywords": [
"adafruit",
" blinka",
" circuitpython",
" micropython",
" azureiot",
" azure",
" iot",
" device",
" services",
" ",
" iothub",
" ",
" iotcentral"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "4fd84b1ee4f1c338b78ed2789314faaa38eec1625dc3e01d8ccf205428f5bd73",
"md5": "5d54cbd37b74d3cde7e2fe7d70d613c0",
"sha256": "a8e7b4d7e81100c1c4814aa47ee789c2861426925c57124c18a3bd4188daa0d8"
},
"downloads": -1,
"filename": "adafruit_circuitpython_azureiot-2.6.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5d54cbd37b74d3cde7e2fe7d70d613c0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 27968,
"upload_time": "2024-05-03T01:50:51",
"upload_time_iso_8601": "2024-05-03T01:50:51.096130Z",
"url": "https://files.pythonhosted.org/packages/4f/d8/4b1ee4f1c338b78ed2789314faaa38eec1625dc3e01d8ccf205428f5bd73/adafruit_circuitpython_azureiot-2.6.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9e4619a2b50838f79fac5fc85b95dbe2be7dc76c9bd1f06366e2227131eaeba0",
"md5": "18bc01451842808e7f4fd5ea7841aa15",
"sha256": "83e4c5ede86a2e9db6230c6d76104ae493a82dd759bdb0f43d687527cd299227"
},
"downloads": -1,
"filename": "adafruit_circuitpython_azureiot-2.6.0.tar.gz",
"has_sig": false,
"md5_digest": "18bc01451842808e7f4fd5ea7841aa15",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 493623,
"upload_time": "2024-05-03T01:50:52",
"upload_time_iso_8601": "2024-05-03T01:50:52.868705Z",
"url": "https://files.pythonhosted.org/packages/9e/46/19a2b50838f79fac5fc85b95dbe2be7dc76c9bd1f06366e2227131eaeba0/adafruit_circuitpython_azureiot-2.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-03 01:50:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "adafruit",
"github_project": "Adafruit_CircuitPython_AzureIoT",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "Adafruit-Blinka",
"specs": []
},
{
"name": "adafruit-circuitpython-logging",
"specs": [
[
">=",
"4.0.1"
]
]
},
{
"name": "adafruit-circuitpython-minimqtt",
"specs": []
},
{
"name": "adafruit-circuitpython-binascii",
"specs": []
}
],
"lcname": "adafruit-circuitpython-azureiot"
}