|
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