|
7 | 7 | import time
|
8 | 8 | import sys
|
9 | 9 | import logging
|
| 10 | +import cbor2 |
10 | 11 | from senml import SenmlPack
|
11 | 12 | from senml import SenmlRecord
|
12 | 13 | from arduino_iot_cloud.umqtt import MQTTClient
|
13 |
| - |
14 | 14 | import asyncio
|
15 | 15 | from asyncio import CancelledError
|
16 | 16 | try:
|
|
19 | 19 | # MicroPython doesn't have this exception
|
20 | 20 | class InvalidStateError(Exception):
|
21 | 21 | pass
|
| 22 | +try: |
| 23 | + from arduino_iot_cloud._version import __version__ |
| 24 | +except (ImportError, AttributeError): |
| 25 | + __version__ = "1.3.0" |
22 | 26 |
|
23 | 27 | # Server/port for basic auth.
|
24 | 28 | _DEFAULT_SERVER = "iot.arduino.cc"
|
@@ -213,6 +217,7 @@ def __init__(
|
213 | 217 | password = bytes(password, "utf-8")
|
214 | 218 |
|
215 | 219 | self.device_topic = b"/a/d/" + device_id + b"/e/i"
|
| 220 | + self.command_topic = b"/a/d/" + device_id + b"/c/up" |
216 | 221 |
|
217 | 222 | # Update RTC from NTP server on MicroPython.
|
218 | 223 | self.update_systime()
|
@@ -355,6 +360,10 @@ def poll_discovery(self, aiot=None):
|
355 | 360 | lastval_record.add_to_pack(self.senmlpack)
|
356 | 361 | self.mqtt.subscribe(self.create_topic("shadow", "i"), qos=1)
|
357 | 362 | self.mqtt.publish(self.create_topic("shadow", "o"), self.senmlpack.to_cbor(), qos=1)
|
| 363 | + |
| 364 | + # Push library version and mode. |
| 365 | + libv = "%s-%s" % (__version__, "async" if self.async_mode else "sync") |
| 366 | + self.mqtt.publish(self.command_topic, cbor2.dumps(cbor2.CBORTag(67328, [libv])), qos=1) |
358 | 367 | logging.info("Device configured via discovery protocol.")
|
359 | 368 | if self.async_mode:
|
360 | 369 | raise DoneException()
|
|
0 commit comments