micrOSDevToolKit 2.17.2__py3-none-any.whl → 2.19.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of micrOSDevToolKit might be problematic. Click here for more details.

Files changed (41) hide show
  1. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +15 -15
  2. micrOS/source/Config.py +2 -2
  3. micrOS/source/Espnow.py +29 -12
  4. micrOS/source/InterConnect.py +107 -31
  5. micrOS/source/Server.py +2 -3
  6. micrOS/source/Shell.py +1 -1
  7. micrOS/source/Tasks.py +22 -20
  8. micrOS/source/micrOSloader.py +1 -1
  9. micrOS/source/modules/LM_espnow.py +18 -1
  10. micrOS/source/modules/LM_neoeffects.py +1 -1
  11. micrOS/source/modules/LM_neomatrix.py +1 -1
  12. micrOS/source/modules/LM_oled_ui.py +4 -3
  13. micrOS/source/modules/LM_oledui.py +4 -3
  14. micrOS/source/modules/LM_tcs3472.py +131 -17
  15. micrOS/source/modules/LM_telegram.py +18 -18
  16. {microsdevtoolkit-2.17.2.dist-info → microsdevtoolkit-2.19.0.dist-info}/METADATA +3 -3
  17. {microsdevtoolkit-2.17.2.dist-info → microsdevtoolkit-2.19.0.dist-info}/RECORD +39 -41
  18. toolkit/Gateway.py +1 -1
  19. toolkit/dashboard_apps/SystemTest.py +22 -18
  20. toolkit/micrOSdashboard.py +8 -13
  21. toolkit/socketClient.py +27 -7
  22. toolkit/workspace/precompiled/Config.mpy +0 -0
  23. toolkit/workspace/precompiled/Espnow.mpy +0 -0
  24. toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  25. toolkit/workspace/precompiled/Server.mpy +0 -0
  26. toolkit/workspace/precompiled/Shell.mpy +0 -0
  27. toolkit/workspace/precompiled/Tasks.mpy +0 -0
  28. toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  29. toolkit/workspace/precompiled/modules/LM_espnow.py +18 -1
  30. toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
  31. toolkit/workspace/precompiled/modules/LM_neomatrix.mpy +0 -0
  32. toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
  33. toolkit/workspace/precompiled/modules/LM_oledui.mpy +0 -0
  34. toolkit/workspace/precompiled/modules/LM_tcs3472.py +131 -17
  35. toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
  36. micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
  37. micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
  38. {microsdevtoolkit-2.17.2.data → microsdevtoolkit-2.19.0.data}/scripts/devToolKit.py +0 -0
  39. {microsdevtoolkit-2.17.2.dist-info → microsdevtoolkit-2.19.0.dist-info}/WHEEL +0 -0
  40. {microsdevtoolkit-2.17.2.dist-info → microsdevtoolkit-2.19.0.dist-info}/licenses/LICENSE +0 -0
  41. {microsdevtoolkit-2.17.2.dist-info → microsdevtoolkit-2.19.0.dist-info}/top_level.txt +0 -0
@@ -6,26 +6,54 @@ Copyright (c) 2021 tti0
6
6
  Licensed under the MIT License
7
7
  """
8
8
 
9
- from machine import I2C, Pin
9
+ from struct import unpack
10
+ from time import sleep
11
+ from machine import I2C, Pin, PWM
10
12
  from microIO import bind_pin, pinmap_search
11
- import struct
13
+ from Types import resolve
12
14
 
15
+ from LM_neopixel import load as neo_load, color as neo_color, toggle as neo_toggle # local neopixel light indicator
16
+ from LM_cluster import run as cluster_run # DEMO: neomatrix cluster
17
+
18
+ CURRENT_ANIMATION_INDEX = 0 # DEMO: neomatrix cluster animation
13
19
 
14
20
  class TCS3472:
15
21
  INSTANCE = None
16
22
 
17
- def __init__(self, bus, address=0x29):
18
- self._bus = bus
23
+ def __init__(self, address=0x29, led_pin=None):
24
+ self._bus = I2C(sda=Pin(bind_pin('i2c_sda')), scl=Pin(bind_pin('i2c_scl')))
19
25
  self._i2c_address = address
20
26
  self._bus.writeto(self._i2c_address, b'\x80\x03')
21
27
  self._bus.writeto(self._i2c_address, b'\x81\x2b')
28
+ self.led = PWM(Pin(bind_pin('led', led_pin), Pin.OUT), freq=20480)
29
+ self.led_brightness = 20
22
30
  TCS3472.INSTANCE = self
23
31
 
24
- def scaled(self):
25
- crgb = self.raw()
26
- if crgb[0] > 0:
27
- return tuple(float(x) / crgb[0] for x in crgb[1:])
28
- return 0, 0, 0
32
+ def scaled(self, saturation=1.5):
33
+ """
34
+ Normalize by strongest color, then adjust saturation.
35
+ saturation = 1.0 -> normal
36
+ saturation > 1.0 -> more vibrant
37
+ saturation < 1.0 -> more pastel
38
+ """
39
+ _, r, g, b = self.raw()
40
+ m = max(r, g, b)
41
+ if m == 0:
42
+ return 0.0, 0.0, 0.0
43
+
44
+ # Normalize by strongest channel
45
+ r, g, b = r / m, g / m, b / m
46
+
47
+ # Grayscale = average of channels
48
+ gray = (r + g + b) / 3
49
+
50
+ # Interpolate between gray and color
51
+ r = gray + (r - gray) * saturation
52
+ g = gray + (g - gray) * saturation
53
+ b = gray + (b - gray) * saturation
54
+
55
+ # Clamp to 0..1
56
+ return max(0, min(1, r)), max(0, min(1, g)), max(0, min(1, b))
29
57
 
30
58
  def rgb(self):
31
59
  return tuple(int(x * 255) for x in self.scaled())
@@ -42,32 +70,118 @@ class TCS3472:
42
70
 
43
71
  def raw(self):
44
72
  self._bus.writeto(self._i2c_address, b'\xb4')
45
- return struct.unpack("<HHHH", self._bus.readfrom(self._i2c_address, 8))
73
+ return unpack("<HHHH", self._bus.readfrom(self._i2c_address, 8))
46
74
 
47
75
 
48
76
  ############################ Exposed functions ############################
49
77
 
50
- def load():
78
+ def load(led_pin=20):
51
79
  """
52
80
  Load the TCS3472 Color sensor instance.
53
81
  """
54
82
  if TCS3472.INSTANCE is None:
55
- bus = I2C(sda=Pin(bind_pin('i2c_sda')), scl=Pin(bind_pin('i2c_scl')))
56
- TCS3472.INSTANCE = TCS3472(bus)
83
+ TCS3472(led_pin=led_pin)
84
+ neo_load(ledcnt=1)
85
+ led(False)
57
86
  return TCS3472.INSTANCE
58
87
 
59
88
 
60
89
  def pinmap():
61
- return pinmap_search(['i2c_scl', 'i2c_sda'])
90
+ """
91
+ Show used pin mapping for this module.
92
+ """
93
+ return pinmap_search(['i2c_scl', 'i2c_sda', 'led'])
62
94
 
63
95
 
64
96
  def measure():
97
+ """
98
+ MEASURE sensor
99
+ """
100
+ sensor = load()
101
+ measurement = {"rgb": sensor.rgb(), "light": sensor.light(), "brightness": sensor.brightness()}
102
+ return measurement
103
+
104
+
105
+ def led(state:bool=None, br:int=None):
106
+ """
107
+ SENSOR LED toggle
108
+ :param state: None-automatic, True-ON, False-OFF
109
+ :param br: brightness 0-100
110
+ """
111
+ def _set_duty(_br):
112
+ _br = sensor.led_brightness if _br is None else _br
113
+ sensor.led.duty(int(_br * 10))
114
+ if _br != 0:
115
+ sensor.led_brightness = _br
116
+
65
117
  sensor = load()
66
- return {"rgb": sensor.rgb(), "light": sensor.light(), "brightness": sensor.brightness()}
118
+ if state is None:
119
+ # INVERT STATE
120
+ led_current_state = sensor.led.duty() > 0
121
+ if led_current_state:
122
+ _set_duty(br)
123
+ _set_duty(0)
124
+ neo_toggle(False)
125
+ else:
126
+ _set_duty(br)
127
+ neo_toggle(True)
128
+ else:
129
+ # SET STATE: ON/OFF
130
+ if state:
131
+ _set_duty(br)
132
+ neo_toggle(True)
133
+ else:
134
+ _set_duty(br)
135
+ _set_duty(0)
136
+ neo_toggle(False)
137
+ return f"LED on, {sensor.led_brightness}%" if sensor.led.duty()>0 else f"LED off"
138
+
139
+
140
+ def indicator(br=5):
141
+ """
142
+ Color indicator Neopixel LED update
143
+ :param br: brightness 0-100
144
+ """
145
+ r, g, b = measure()['rgb']
146
+ br = float(br / 100)
147
+ _r, _g, _b = int(r*br), int(g*br), int(b*br)
148
+ neo_color(_r, _g, _b, smooth=False)
149
+ return r, g, b
150
+
151
+
152
+ def neomatrix_update():
153
+ """
154
+ DEMO - Send color codes for all neomatrix devices over espnow cluster
155
+ """
156
+ r, g, b = indicator()
157
+ command = f"neomatrix color_fill {r} {g} {b}"
158
+ cluster_run(command)
159
+ return {"cmd": command, "cluster": "task show con.espnow.*"}
160
+
161
+
162
+ def neomatrix_animation():
163
+ """
164
+ DEMO - Set random animation on neomatrix espnow cluster
165
+ """
166
+ global CURRENT_ANIMATION_INDEX
167
+ animations = ('spiral', 'snake', 'noise')
168
+
169
+ next_animation = CURRENT_ANIMATION_INDEX + 1
170
+ CURRENT_ANIMATION_INDEX = 0 if next_animation >= len(animations) else next_animation
171
+ command = f"neomatrix {animations[CURRENT_ANIMATION_INDEX]}"
172
+ cluster_run(command)
173
+ return {"cmd": command, "cluster": "task show con.espnow.*"}
67
174
 
68
175
 
69
- def help(widgest=False):
176
+ def help(widgets=False):
70
177
  """
71
178
  TCS3472 Color sensor
72
179
  """
73
- return 'load', 'measure'
180
+ return resolve(('load led_pin=20',
181
+ 'TEXTBOX measure',
182
+ 'BUTTON led state=<True,False>',
183
+ 'SLIDER led state=True br=<0-100-5>',
184
+ 'indicator br=<0-100>',
185
+ 'BUTTON neomatrix_update',
186
+ 'BUTTON neomatrix_animation',
187
+ 'pinmap'), widgets=widgets)
@@ -12,6 +12,7 @@ def _timestamp():
12
12
 
13
13
 
14
14
  class Telegram(Notify):
15
+ INSTANCE = None
15
16
  # Telegram bot token and chat ID
16
17
  # https://core.telegram.org/bots/api
17
18
  _TOKEN = None # Telegram token
@@ -23,6 +24,7 @@ class Telegram(Notify):
23
24
  def __init__(self):
24
25
  # Subscribe to the notification system - provide send_msg method (over self)
25
26
  super().add_subscriber(self)
27
+ Telegram.INSTANCE = self
26
28
 
27
29
  @staticmethod
28
30
  def __id_cache(mode):
@@ -236,7 +238,7 @@ class Telegram(Notify):
236
238
  return verdict
237
239
 
238
240
  @staticmethod
239
- async def bot_repl(tag, period=3):
241
+ async def server_bot(tag, period=3):
240
242
  """
241
243
  BOT - ReceiveEvalPrintLoop
242
244
  :param tag: task tag (access)
@@ -290,17 +292,16 @@ class Telegram(Notify):
290
292
  #########################################
291
293
  # micrOS Notifications #
292
294
  #########################################
293
- TELEGRAM_OBJ = None
294
295
 
295
296
  def __init():
296
- global TELEGRAM_OBJ
297
- if TELEGRAM_OBJ is None:
297
+ if Telegram.INSTANCE is None:
298
298
  # ENABLE TELEGRAM IF NW IS STA - CONNECTED TO THE WEB
299
299
  _sta_available = True if ifconfig()[0] == "STA" else False
300
300
  if _sta_available:
301
- TELEGRAM_OBJ = Telegram()
301
+ Telegram()
302
302
  else:
303
303
  syslog("No STA: cannot init telegram")
304
+ return Telegram.INSTANCE
304
305
 
305
306
  # Auto INIT Telegram at load time (legacy)
306
307
  __init()
@@ -311,10 +312,9 @@ def load():
311
312
  - /ping
312
313
  - /cmd module function (params)
313
314
  """
314
- __init()
315
- if TELEGRAM_OBJ is None:
315
+ if __init() is None:
316
316
  return "Network unavailable."
317
- verdict = TELEGRAM_OBJ.set_commands()
317
+ verdict = Telegram.set_commands()
318
318
  return "Missing telegram bot token" if verdict is None else verdict
319
319
 
320
320
 
@@ -324,9 +324,9 @@ def send(text):
324
324
  :param text: text to send
325
325
  return verdict
326
326
  """
327
- if TELEGRAM_OBJ is None:
327
+ if Telegram.INSTANCE is None:
328
328
  return "Network unavailable."
329
- verdict = TELEGRAM_OBJ.send_msg(text)
329
+ verdict = Telegram.send_msg(text)
330
330
  return "Missing telegram bot token" if verdict is None else verdict
331
331
 
332
332
  def notify(text):
@@ -336,9 +336,9 @@ def notify(text):
336
336
  telegram notification enable=True
337
337
  telegram notification enable=False
338
338
  """
339
- if TELEGRAM_OBJ is None:
339
+ if Telegram.INSTANCE is None:
340
340
  return "Network unavailable."
341
- return TELEGRAM_OBJ.notify(text)
341
+ return Telegram.INSTANCE.notify(text)
342
342
 
343
343
 
344
344
  def receive():
@@ -347,9 +347,9 @@ def receive():
347
347
  - if all value None, then no incoming messages
348
348
  One successful msg receive is necessary to get chat_id for msg send as well!
349
349
  """
350
- if TELEGRAM_OBJ is None:
350
+ if Telegram.INSTANCE is None:
351
351
  return "Network unavailable."
352
- verdict = TELEGRAM_OBJ.get_msg()
352
+ verdict = Telegram.get_msg()
353
353
  return "Missing telegram bot token" if verdict is None else verdict
354
354
 
355
355
 
@@ -359,11 +359,11 @@ def receiver_loop(period=3):
359
359
  - Only executes module (function) if the module is already loaded
360
360
  :param period: polling period in sec, default: 3
361
361
  """
362
- if TELEGRAM_OBJ is None:
362
+ if Telegram.INSTANCE is None:
363
363
  return "Network unavailable."
364
- tag = 'telegram.bot_repl'
365
- state = micro_task(tag=tag, task=TELEGRAM_OBJ.bot_repl(tag=tag, period=period))
366
- return "Starting" if state else "Already running"
364
+ tag = 'telegram.server_bot'
365
+ state = micro_task(tag=tag, task=Telegram.server_bot(tag=tag, period=period))
366
+ return {tag: "Starting"} if state else {tag: "Already running"}
367
367
 
368
368
 
369
369
  def help(widgets=False):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: micrOSDevToolKit
3
- Version: 2.17.2
3
+ Version: 2.19.0
4
4
  Summary: Development and deployment environment for micrOS, the diy micropython automation OS (IoT)
5
5
  Home-page: https://github.com/BxNxM/micrOS
6
6
  Author: Marcell Ban
@@ -496,11 +496,11 @@ Version **3.0.0-0** `micrOS-Autonomous`
496
496
  - (1) Async SSL/TLS integration (micropython 1.22+ required) [DONE]
497
497
  - urequest module async redesign for rest clients [OK]
498
498
  - LM_telegram (Notify) + server (listener - chatbot) [OK]
499
- - (2) ESP-NOW (peer-to-peer communication) integration into InterCon [PoC:OK][TODO]
499
+ - (2) ESP-NOW (peer-to-peer communication) integration into InterCon [DONE]
500
500
  - (3) New intercon syntax - command level integration: [DONE]
501
501
  - rgb toggle >>RingLight.local
502
502
  - similar as (obsolete): intercon sendcmd host="RingLight.local" cmd="rgb toggle"
503
- - (4) Create multi level project structure (curret is flat fs) [WIP] FS
503
+ - (4) Create multi level project structure (curret is flat fs) [DONE]
504
504
  - New micrOS FS structure:
505
505
  - Automatic dir creation at bootup: '/logs', '/web', '/data', '/config', '/modules'
506
506
  - Automatic sub-dir handling /source and /precompiled
@@ -25,37 +25,35 @@ micrOS/micropython/esp32c3-20240222-v1.22.2.bin,sha256=GktHoOmEndjNy-5d4Jetx2tW1
25
25
  micrOS/micropython/esp32c6-GENERIC-20250415-v1.25.0.bin,sha256=a1womN0H96anNycVgIYT9bMkSi6HHs437ZtantOuSHg,1995392
26
26
  micrOS/micropython/esp32cam-v1.21.0_camera.bin,sha256=0j5OTjWERTfyt_RpPIC8fWA829UcCQE7MEMmYHzBOKs,1433072
27
27
  micrOS/micropython/esp32s2-20240602-v1.23.0.bin,sha256=t2ExDdbS4FZ7o0SZTur34UTQdlaim8LymDnpqtM23Yk,1422304
28
- micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin,sha256=bXR9KjDPeHZZ6DnLMXNiEq1oLt1oogyH3Dt2xqk_wUA,1230192
29
28
  micrOS/micropython/esp32s2-LOLIN_MINI-20240602-v1.23.0.bin,sha256=OJi-_TLCDZt_tEALtb9RoQ0S10H0nLQCGJmfxH_TSIg,1422256
30
29
  micrOS/micropython/esp32s3-4MBflash-20241129-v1.24.1.bin,sha256=PXVpriBIBil_96-6z4gqpDrdB5EyuIEBVTW9y33tWyk,1659056
31
30
  micrOS/micropython/esp32s3-8MBflash-20241129-v1.24.1.bin,sha256=Att5Tefiky4cDYBhBgFJx7imcrbLDSqhT7l9_yAE1Do,1659056
32
- micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin,sha256=S-sv_QeL_Tylg1t9nR-5gjxt0-xMpFY-_O8ot-L8jlE,1561184
33
31
  micrOS/micropython/esp32s3_spiram_oct-20241129-v1.24.1.bin,sha256=VbOF_F0YeqttkQd2ePTW66Jd34RU8u9ccFfcv8kxO_U,1662672
34
32
  micrOS/micropython/rpi-pico-w-20241129-v1.24.1.uf2,sha256=v4aYIbWaE94_f6DDzBWS-a9L1BzlcdkZwld9R7bOVA4,1727488
35
33
  micrOS/micropython/tinypico-20241129-v1.24.1.bin,sha256=Kf3cr766a5SK99CZy8bwdWjwvAZxls3tBYvaHBsw7ac,1527200
36
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=C7NUIDrkLDo7FXoG7zQQyZAyIyn6f0eUqPDEWJW1qnU,6338
34
+ micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=ER7jct3FU3fdwW1PX92TKEKLPs-fuI1C3JT4NIoCn0U,6340
37
35
  micrOS/source/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
38
36
  micrOS/source/Common.py,sha256=uvfLeei3Koi3MWraIk1LU4ArO7C5krcHm9mSN3tOTDM,16793
39
- micrOS/source/Config.py,sha256=094MYe1UUbRy5qRiC-HBR9GvVOXY7-2fqF9UvEtfIGo,9187
37
+ micrOS/source/Config.py,sha256=Ci2VjlK2RW1rvKr1xR4A6HeqktZYAkrU12hFVqngXB0,9178
40
38
  micrOS/source/Debug.py,sha256=in2tx6Dw8EqeKYTrJpLxSevpoIrJjxlH17JLrTui1o8,3287
41
- micrOS/source/Espnow.py,sha256=G3IG0jNIFpzBbDZPtxevO2vwOsm4YuWV8fl4sVcn1Bg,12883
39
+ micrOS/source/Espnow.py,sha256=QZN1ihPUbwtfScKRBOEmFxnAyH9x8YezwQUjY0-GOxs,13321
42
40
  micrOS/source/Files.py,sha256=SsA4kDWiB8gcunmu9mVVVGmTzxSvkpBqQV-J-U5rzt4,5428
43
41
  micrOS/source/Hooks.py,sha256=XdHCo2avht0wUj5xT1oM4tPGZM4uZ2DYmaCOFHYIpjM,4190
44
- micrOS/source/InterConnect.py,sha256=ZEYNzHmKaVYkkAfesxXSFVFPyBrmaY_JFDAmF4FxXyw,7839
42
+ micrOS/source/InterConnect.py,sha256=5_Q_t0clyNtr4mh1J--8Mjutn-JJXuXGaCVclctf15Y,11175
45
43
  micrOS/source/Interrupts.py,sha256=kLDsByjoGeEiDk_0yV7iAvsZlKs9uFqPcAKkdNNR6HU,7543
46
44
  micrOS/source/Logger.py,sha256=QSABn-dFDBDQFxgQzu1vpWnqHFg7UjJ-6utMmpEWqes,3979
47
45
  micrOS/source/Network.py,sha256=bFG_OE1baHQFJgpcNC_KAKTGPQlgN7pisV07CI30k1g,10165
48
46
  micrOS/source/Notify.py,sha256=5_Sqy2FeBVG6HznC48Rgg812AglGjO8pkDYGSpp5qSg,2637
49
47
  micrOS/source/Scheduler.py,sha256=EhOdDQqN4V1G0TD2jU5cmjUjY_g-sU8NwFoUfniBKF0,9628
50
- micrOS/source/Server.py,sha256=gNT3pcNsw8NVwldEe3c6uXlyMdawNS6F1bKUoy-OpLQ,16862
51
- micrOS/source/Shell.py,sha256=bGsDJ2teXwxUGnFgL5-5BiqvvUlurRU4coINHNc1hxs,13309
52
- micrOS/source/Tasks.py,sha256=9ITabnBkiI9W6g_wechD0fdRZvynTFyaFzUk3qNnmM4,23996
48
+ micrOS/source/Server.py,sha256=WSDW2BaCkTxkDruKZXW98jhtQXHKaCz7Em1oPYQL4Kk,16869
49
+ micrOS/source/Shell.py,sha256=bIvfRKjivTtQn8SLWGhDacaKoXtX-x27UZdhFi-VZtk,13309
50
+ micrOS/source/Tasks.py,sha256=feh4Upyx_DMkSnUvYi7ntgvbv7XHU6ZB6iv9z-_qfqk,24112
53
51
  micrOS/source/Time.py,sha256=8EHp86CAkbGIErGgN-VGAsslUBFIooRGkHB1hUYwwOE,6408
54
52
  micrOS/source/Types.py,sha256=Ft_gHokGNa9aQRGSwE3NYIvYZuolT3zfkD5JzhycQ1s,3499
55
53
  micrOS/source/Web.py,sha256=EeZzKcZMTDVls5Qu-kT8dnX2Mt8L6M4eLiCBhDBJa40,11059
56
54
  micrOS/source/main.py,sha256=cVlhoWwU9dSKEol0HWPihFAPzrUUvzSGwZNNMrpyfSY,440
57
55
  micrOS/source/micrOS.py,sha256=QM1lgUnv2qrklj5-qgU6MM_6YsTKq4VGk71Od3Dzx1M,2872
58
- micrOS/source/micrOSloader.py,sha256=wFS1i90q5po-fKpnEpwL_O4KQV9QujgwAR1QvXpjNvA,4627
56
+ micrOS/source/micrOSloader.py,sha256=9o6VIWPAgnQVb3uQDHENW9aO21gkM4jgR4O1t6uoPHI,4624
59
57
  micrOS/source/microIO.py,sha256=h7i78Rl_DKG5vwpCgk1dsY-Z9ikvmOQLMiusYP_yRMI,7096
60
58
  micrOS/source/reset.py,sha256=i7wsPkOXE7Mm0xOiw1CjqCvCdNjBvYswn9CRDvE2VbE,248
61
59
  micrOS/source/urequests.py,sha256=SrzOgo8UF9YncjfeItM9-xqUr5xEoUt1kOcPxisn6uw,9456
@@ -92,7 +90,7 @@ micrOS/source/modules/LM_dimmer.py,sha256=jmcwuyyNSCeDRNx4GieNld82eaT_K-c6zybcA7
92
90
  micrOS/source/modules/LM_distance.py,sha256=iVqQchaUOvK8Ilzr7qMi-ESvS_U8RsBwdqNHY_4qZ-c,4394
93
91
  micrOS/source/modules/LM_ds18.py,sha256=mLaH97j8d4lUXcjS8hNtwU8hL5Ybt-Q1WuoiWPnk5Ho,1807
94
92
  micrOS/source/modules/LM_esp32.py,sha256=AAMceuWTWMDu_1EJH-617dmp5ClPaAzFKgDOHWEiX0I,1862
95
- micrOS/source/modules/LM_espnow.py,sha256=WD3gnXMWjIYZGcwQM62T0xd9yMb9wzEfS0ZYlkqESjA,761
93
+ micrOS/source/modules/LM_espnow.py,sha256=8WVKGinXL380aj6-qB2euhpwxN2y9pQcXMH-CrW7FJ0,1085
96
94
  micrOS/source/modules/LM_gameOfLife.py,sha256=Mvr_S5zsJ6x_pMCGrkdgl5QdejNQjAF9mBYLN5-OA38,7685
97
95
  micrOS/source/modules/LM_genIO.py,sha256=rTiFByly8ImjHBgc2RceGczGp1rzti7Juz_Vvg5hrtc,5013
98
96
  micrOS/source/modules/LM_haptic.py,sha256=W0WiuOCxIu9RB-pWu8r8fvHmvuseet1UI7RSc9WO8zo,2862
@@ -102,13 +100,13 @@ micrOS/source/modules/LM_keychain.py,sha256=-GN-Xzoour2vjg5MyZtmbcxo8LdSn6dYrk1w
102
100
  micrOS/source/modules/LM_ld2410.py,sha256=dWBsIkI0ryomn0zDrmz5YxaGcoH5TqjAsi2qwGd8UZM,6524
103
101
  micrOS/source/modules/LM_light_sensor.py,sha256=ptOcfjLDtL930s9J9uPO9YOnIZBGvh5Fa4F01dmFFzI,4527
104
102
  micrOS/source/modules/LM_mqtt_client.py,sha256=KeHMplcRgPQf4H-RDSOQ4ODlUKm1tzDDBOQVf832UEw,8511
105
- micrOS/source/modules/LM_neoeffects.py,sha256=nKwoNHUvUOM3gmNFXlNSR3uFIF0k9NLlxwfw2VxfdNo,9848
106
- micrOS/source/modules/LM_neomatrix.py,sha256=UIZsYoNW77WagaMVUJS4hUYrt8bGuimrZWqICwaD4qg,14334
103
+ micrOS/source/modules/LM_neoeffects.py,sha256=zzsHEfZE7-c6cLVlRM9tPhbUDqBYytdHlvm41fv1nG0,9858
104
+ micrOS/source/modules/LM_neomatrix.py,sha256=jCNpV-HDOpNHe7k00fr4TfDVYkM45wCmB4ZfvKAm_NA,14332
107
105
  micrOS/source/modules/LM_neopixel.py,sha256=HwyATyAvXSJ1paUn9u-I3etu4A9cCNXwo8cPbKr93iw,13289
108
106
  micrOS/source/modules/LM_oled.py,sha256=ZwLndxWuY1Ii5d06YEf9Z_jxmTyoOYRL-BO3VhJ0b14,9903
109
107
  micrOS/source/modules/LM_oled_sh1106.py,sha256=av2_ftFHvfAIxcPYHbrOMQNZgM1Go6MQzBu5cIeVK4w,11723
110
- micrOS/source/modules/LM_oled_ui.py,sha256=1UGyXupMc8xU9zvE2AVnLRcDZEin8T1cFblsBCZ29xA,22232
111
- micrOS/source/modules/LM_oledui.py,sha256=zLj-RZ-bcWoMqcmK-pxyfSs7IU-xrXW_GLPzCMvjOXY,35395
108
+ micrOS/source/modules/LM_oled_ui.py,sha256=Dux4h8zUwSPa8zfo_lwmhH31Xmyb76d04AFoSTlwa98,22276
109
+ micrOS/source/modules/LM_oledui.py,sha256=z9MaOEaHBF3MOWi0KdfIYH_mTVPqQb8L8Pa_1_4fMq8,35439
112
110
  micrOS/source/modules/LM_pacman.py,sha256=YWshcR0itd3CAZSfvpOkyH9Ux9H0dBKonI4fzK77qls,9750
113
111
  micrOS/source/modules/LM_pet_feeder.py,sha256=ILrozpnq2_ckkVDUROysMWRksKjflsKpIHvgHdvn-JA,2572
114
112
  micrOS/source/modules/LM_presence.py,sha256=8cagHD12HF4E6qgSn6zkf6yyY6aiBiIcEvRrfVuPyzE,8796
@@ -126,8 +124,8 @@ micrOS/source/modules/LM_sound_event.py,sha256=9BZnrT8Jc2HL-28yVZE5sdeTa8Biq1qkQ
126
124
  micrOS/source/modules/LM_stepper.py,sha256=CkI4QBe2KJ7E5DKL7Z23oAMPDUFlUt7btAvqrn4H6Kg,4278
127
125
  micrOS/source/modules/LM_switch.py,sha256=1go-jfbh0zisi3Cw680n9PmcoC-dwh_N4c5fMRceJBc,7868
128
126
  micrOS/source/modules/LM_system.py,sha256=-URoeSdNZkv4veJlxlsj7JrEHbMKFfXlImwZpGUnm-4,6579
129
- micrOS/source/modules/LM_tcs3472.py,sha256=rl_-4IE6f5BYTN52xY93yZJMI_PZwq9AVK2fzi_t7c0,1829
130
- micrOS/source/modules/LM_telegram.py,sha256=EdceSUvPN8hWB4oRnr73GMGFVe5_10OLak8jo_tJMcQ,15199
127
+ micrOS/source/modules/LM_tcs3472.py,sha256=Kvkpxigv-9zgfy2_jUqKJzZgMBZxOXqQf4QBU9McndY,5459
128
+ micrOS/source/modules/LM_telegram.py,sha256=U3Ww4oSE06Fd7jPGibXGaBVpP8kmIORzoTKQsRSdlPc,15239
131
129
  micrOS/source/modules/LM_tinyrgb.py,sha256=kChL607HPTl3Z2hYN2XnzXXfZ6omdP78PQutHdbdfCo,3031
132
130
  micrOS/source/modules/LM_trackball.py,sha256=N2hhy3wuk55-ja4dmENpfthBolIEj28d2pzcjel5OKg,9716
133
131
  micrOS/source/modules/LM_veml7700.py,sha256=3eb6-HuMA_tYBA0cJHUsZzOBriHacIpVSrK-1iB3_pY,5762
@@ -139,21 +137,21 @@ micrOS/source/web/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN6uGqw9LpScDrGGF5
139
137
  micrOS/source/web/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
140
138
  micrOS/source/web/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
141
139
  micrOS/source/web/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
142
- microsdevtoolkit-2.17.2.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
143
- microsdevtoolkit-2.17.2.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
140
+ microsdevtoolkit-2.19.0.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
141
+ microsdevtoolkit-2.19.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
144
142
  toolkit/DevEnvCompile.py,sha256=wNBf0T7w07SYC3eLFow3JtZApHQK-92Fu7CvJHqWuSM,13189
145
143
  toolkit/DevEnvOTA.py,sha256=8IfAcvV0L_H91FAiZDRBmC06cWOXXCpoSDO-JWE6CG4,26889
146
144
  toolkit/DevEnvUSB.py,sha256=TorXJt5qJ1Wk8Qi5Ncn3ortu432GHVCSQFXhSuA0OSU,37197
147
- toolkit/Gateway.py,sha256=AzZydQMVOBNGyWUtEm5Rja0m47F1AU10YSQll7_2QkQ,25335
145
+ toolkit/Gateway.py,sha256=wz81ZteRtKuNsXmX3Zi9Uo4g5fuCxbErAhas0HrkJqU,25353
148
146
  toolkit/LM_to_compile.dat,sha256=EcJSCR3xugskiLAJY1BWEBfa0A4EhP5qHDXNRQZQ30E,619
149
147
  toolkit/MicrOSDevEnv.py,sha256=Puh0u2oQhPptj-XTvvi8N9Wm3UzDBys1ZHQvzCXjmB4,14583
150
148
  toolkit/WebRepl.py,sha256=805SJGoflJztyFR4DFxP80KVvNEeJfqZxlYeA3uD680,2696
151
149
  toolkit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
150
  toolkit/img_stream.html,sha256=ZGyrUgpi-JhMl4euS-TTjwwGrg66a2pGUQCopWiveds,5135
153
151
  toolkit/index.html,sha256=agTgT1d4FH8l2h47Hfb4Lv061BW9shsCAgq1abO5hlI,10998
154
- toolkit/micrOSdashboard.py,sha256=Hw7Fz6chn6z29Kx04InV9K_8iTz-HHRvYGqKVDe0xac,54425
152
+ toolkit/micrOSdashboard.py,sha256=5cd7-m3VlTMBX4jkw-kzVHS-Rzj7MnYNKKLm4w9hgOM,54335
155
153
  toolkit/micrOSlint.py,sha256=39TpsZs815L3XCI3opweOGiIJHYdvEizFbd9TlHiuck,26126
156
- toolkit/socketClient.py,sha256=cVXTO_EVYOwxHJhHuTG2Nrx6q9RDZoPyPocSFBU9MyM,18608
154
+ toolkit/socketClient.py,sha256=sQ1I04WPSmk8KwvJTgjPCWdMHKE5sKLSwMsUrOUxCao,19980
157
155
  toolkit/dashboard_apps/BackupRestore.py,sha256=udhuFpCawO0mwyiN4vFMfV8wONqHnUjYvL0udJzkq44,5897
158
156
  toolkit/dashboard_apps/CCTDemo.py,sha256=oV7k6sxepOxEa7tBNcuK5IHgKnv01sIQRPvUljic8NI,1125
159
157
  toolkit/dashboard_apps/CCTTest.py,sha256=saU4L8gOst31bno44vlwaeSzqrIBppW2DrZf2KV7_4o,3641
@@ -170,7 +168,7 @@ toolkit/dashboard_apps/RGBTest.py,sha256=QIky1Ts87h52VS9vHs3rYoEYvwFX02BlJxzK-uE
170
168
  toolkit/dashboard_apps/RoboArm.py,sha256=fqsBFTLEKXLyuZtZhbsNMNLCVtJw3gHWE-37EzjRttw,1814
171
169
  toolkit/dashboard_apps/SED_test.py,sha256=hQG8F2isZvCEsb0EvUdvcowLtJ86vrhLMOvpe9EPcJM,2703
172
170
  toolkit/dashboard_apps/SensorsTest.py,sha256=h6Sqz9HzjUawKuvxBPMltgWAycIXUUqlLANZqlF030M,1472
173
- toolkit/dashboard_apps/SystemTest.py,sha256=rrHZWToda0zVgWP3g-OpnnCuxr-5TgaaAjwLmoAzBhI,26054
171
+ toolkit/dashboard_apps/SystemTest.py,sha256=3eJ41g-AwSuR8RXFWCsb98vdsZpJvCBh-mv9uIe5WsQ,26282
174
172
  toolkit/dashboard_apps/Template_app.py,sha256=1OLO-xA6qNKyDCj-J7nHkA3Eis4ZKnHfhMcaSqHNX4A,758
175
173
  toolkit/dashboard_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
174
  toolkit/dashboard_apps/_app_base.py,sha256=u2-Clkaosftr0bgr2kiClcQ1lkJT8GoUD9UUOOKVVmk,1039
@@ -293,27 +291,27 @@ toolkit/user_data/webhooks/template.macro,sha256=XikSl3FsD6W9pUx3sqavM5tWIMBquFx
293
291
  toolkit/user_data/webhooks/template.py,sha256=UhyXmETAEr-VQutY9ME4gAb-4qi7qVfZ0NjSU1inn-E,342
294
292
  toolkit/workspace/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
295
293
  toolkit/workspace/precompiled/Common.mpy,sha256=GojFfQ_pMKH04m6WmdvLm43FEJelVhrzgolgx5ACNpU,4183
296
- toolkit/workspace/precompiled/Config.mpy,sha256=Y50bjJnmk-uI-_rkIKvPuR5zfbrHVodsSt5G7LG4eH0,3279
294
+ toolkit/workspace/precompiled/Config.mpy,sha256=tj0x_vwNo59wqBbkoFJ_-7reXQWwwQtG3-Sg_CMeNlo,3272
297
295
  toolkit/workspace/precompiled/Debug.mpy,sha256=BJqoH4QdOmeybdUxUlhNu6ApHo4KTraJ5F_winmwOm0,1039
298
- toolkit/workspace/precompiled/Espnow.mpy,sha256=mGTP_GI9uts2oqH_xw1WhcExtra3TsZrDzsopgsWUDo,4368
296
+ toolkit/workspace/precompiled/Espnow.mpy,sha256=1Dnmn5Uyk7HfdKp45Wu9apy3FgwchbRambwlVhZlnok,4529
299
297
  toolkit/workspace/precompiled/Files.mpy,sha256=_qwNi5p_d1PXPRoF5SWiFuxmY3qt8OtT8FOhW5JusF0,1798
300
298
  toolkit/workspace/precompiled/Hooks.mpy,sha256=Jb-3JliF0O4RitSfsVm8zxSFT3VGcYmPked9W6X1jNw,1769
301
- toolkit/workspace/precompiled/InterConnect.mpy,sha256=KMlKFZHhF-7SlRe_GcFnydQQuSduDEGJtgHYhhOvLFI,2358
299
+ toolkit/workspace/precompiled/InterConnect.mpy,sha256=6VtkNcotoCGLKN6iDSubnaQpEvWEXjp6s_Sz_DGjibU,3376
302
300
  toolkit/workspace/precompiled/Interrupts.mpy,sha256=0p3Bpx1C7wXWHz9jLM-eqFD0X9wuT6eKzaOdmzpkVBE,2128
303
301
  toolkit/workspace/precompiled/Logger.mpy,sha256=lgAiS5nQqIskNBtEqDoH3GwohOH0mflr8JoYV6b5x4g,1324
304
302
  toolkit/workspace/precompiled/Network.mpy,sha256=foBjsIZ1SafRplCw8v5GgDU_WjPTaRz1W9D6VYyaBSc,3553
305
303
  toolkit/workspace/precompiled/Notify.mpy,sha256=i8LNNynvNxi-tA5QT0pQJ8NJ_DNxJNW4NTZRD6gGS7M,970
306
304
  toolkit/workspace/precompiled/Scheduler.mpy,sha256=S-ZS1N420Xew74F_90O4FvFvrvmRTMiCh-C8szrdhfI,2198
307
- toolkit/workspace/precompiled/Server.mpy,sha256=Q6kIxjxhbkJ1nvxiPQD_6KvQYNfOhM3NTWbLMAIZaWA,4896
308
- toolkit/workspace/precompiled/Shell.mpy,sha256=OHOR-0z3OB4eQaVnF6QoUTxzWLZDmKG2eLdkTAdb_cQ,4821
309
- toolkit/workspace/precompiled/Tasks.mpy,sha256=1iBQXjiJm-s8OfqL2hAehhG_EqSfmubVRAgrJw_rNhc,6660
305
+ toolkit/workspace/precompiled/Server.mpy,sha256=dS2IY9NAjvy2v7-fQHeY44n080GlL3ZV8ENtN1A3KPw,4896
306
+ toolkit/workspace/precompiled/Shell.mpy,sha256=W-VN8XcaoPhV_hAW8RIXqy4kp3FKlANktqPDYNeyZcY,4821
307
+ toolkit/workspace/precompiled/Tasks.mpy,sha256=FWwD_8bc_rg90xZhs3DgvCkOs4rM2ocYq63oWB-I5j4,6680
310
308
  toolkit/workspace/precompiled/Time.mpy,sha256=3thC6iKW4UJdjNP-Jo1Ol0Zn-e4oy2H1wiIz7SH182E,2865
311
309
  toolkit/workspace/precompiled/Types.mpy,sha256=5QGhswa0jWAU1Ywpyl_92miQg4qDHReXLqq3iHBwUCs,1397
312
310
  toolkit/workspace/precompiled/Web.mpy,sha256=X3-nqKYY_RSLsAspTFY_O7H5vkUR0OwECFbSyxqSUUc,4030
313
311
  toolkit/workspace/precompiled/_mpy.version,sha256=Kik-fvRGfWAmpEjKdJLq7nPOqYR_jVgB0aiXZ8LMvMA,6
314
312
  toolkit/workspace/precompiled/main.py,sha256=cVlhoWwU9dSKEol0HWPihFAPzrUUvzSGwZNNMrpyfSY,440
315
313
  toolkit/workspace/precompiled/micrOS.mpy,sha256=zNzWg5S_-sHW_kxX9FOPlMboGMCNe_kzc1WWdN1_PEg,1208
316
- toolkit/workspace/precompiled/micrOSloader.mpy,sha256=jnrYRrHlo7YnBS2BTbF6-7lMJzyD3XoxhHLYel5ngd8,1578
314
+ toolkit/workspace/precompiled/micrOSloader.mpy,sha256=-4nL5AeXCf1-lKP6sXbj4F_QayQjCo2PpA0AHdZYQEg,1574
317
315
  toolkit/workspace/precompiled/microIO.mpy,sha256=pyfx0fA6VPniMKvmOID9Uzkq0loakhntT59hbtinsH4,1722
318
316
  toolkit/workspace/precompiled/reset.mpy,sha256=D-ZwUk-oR8OAg5ERWJXErdPAGbx_3M13hK4IBawhIg0,217
319
317
  toolkit/workspace/precompiled/urequests.mpy,sha256=tG4ttpfHPkyNk5vvbXDHKZm8zYPNEw1NYE0Ltnrjca8,2516
@@ -345,7 +343,7 @@ toolkit/workspace/precompiled/modules/LM_dimmer.mpy,sha256=QruqWLMD-cNM8FcKR_MTr
345
343
  toolkit/workspace/precompiled/modules/LM_distance.mpy,sha256=QSgZbsqCZH4vhT7caj-QyIBHuzyZxFvaQmrOqOg7zDE,1514
346
344
  toolkit/workspace/precompiled/modules/LM_ds18.mpy,sha256=WtM_FBMcwvxjqB1EsAgfkUAWBYV7AEGKIoaXOEmifB0,652
347
345
  toolkit/workspace/precompiled/modules/LM_esp32.py,sha256=AAMceuWTWMDu_1EJH-617dmp5ClPaAzFKgDOHWEiX0I,1862
348
- toolkit/workspace/precompiled/modules/LM_espnow.py,sha256=WD3gnXMWjIYZGcwQM62T0xd9yMb9wzEfS0ZYlkqESjA,761
346
+ toolkit/workspace/precompiled/modules/LM_espnow.py,sha256=8WVKGinXL380aj6-qB2euhpwxN2y9pQcXMH-CrW7FJ0,1085
349
347
  toolkit/workspace/precompiled/modules/LM_gameOfLife.mpy,sha256=z-JxoeQ76mTOXY6c_NnKclRJ4Mny0O-b9s2XBPJfXUE,2059
350
348
  toolkit/workspace/precompiled/modules/LM_genIO.mpy,sha256=M7aYNyNB1SqmLnt9y_Q0MfSMIfewyT3Uc_MSFJpjd3Q,1730
351
349
  toolkit/workspace/precompiled/modules/LM_haptic.mpy,sha256=pNUF7OJJhq-kyiDI9ceuJp3YbB1P8Gj95DvLlZSz1aw,1284
@@ -355,13 +353,13 @@ toolkit/workspace/precompiled/modules/LM_keychain.mpy,sha256=hISvQVuEgTRLu_G5APg
355
353
  toolkit/workspace/precompiled/modules/LM_ld2410.mpy,sha256=Yost6gCTx55nQoyggmHHHoDmFDWpEK14MCsP6o70m_8,2589
356
354
  toolkit/workspace/precompiled/modules/LM_light_sensor.mpy,sha256=JoNgFgSe52J2c12br6tv2Sg6VL7hdM1OACP02tEE53I,1527
357
355
  toolkit/workspace/precompiled/modules/LM_mqtt_client.mpy,sha256=IB7Faja_N2aB9welEPvakyF7lDe1Q6HB1Thi2PVYzwE,2826
358
- toolkit/workspace/precompiled/modules/LM_neoeffects.mpy,sha256=_xNdGdT_cpIYl5zz9VyZe1p6fj-4Y01Ku8TLpJjl9XA,3079
359
- toolkit/workspace/precompiled/modules/LM_neomatrix.mpy,sha256=lp7TxCInP9E2VwZMSmIudMk0ZxYgX2LAIdC53hWMAY8,5073
356
+ toolkit/workspace/precompiled/modules/LM_neoeffects.mpy,sha256=R3Ssmr3Ag-cJP5IKBsSDTSXQmxMIeo4JzvTEvcug5FU,3089
357
+ toolkit/workspace/precompiled/modules/LM_neomatrix.mpy,sha256=exJxcMKVP4xUi1ct7yj5LWFAfeIWmU12JnexmGloHM0,5071
360
358
  toolkit/workspace/precompiled/modules/LM_neopixel.mpy,sha256=7qM4z9gLGDCYxMQ4VmnGcuG3Ck5BC05AVzmG1sADXyA,3698
361
359
  toolkit/workspace/precompiled/modules/LM_oled.mpy,sha256=82OqTsCgooB4y6BdMMBaDyfHYoHkq1W_UMteOmy0ePw,3162
362
360
  toolkit/workspace/precompiled/modules/LM_oled_sh1106.mpy,sha256=tOsOk5zOT9f5sw027wQyUEXRanx8IcSyuUN6tgfd73w,3769
363
- toolkit/workspace/precompiled/modules/LM_oled_ui.mpy,sha256=KEbp8UCDKMJbYy4h0U8ITLWH2l9UgRgrtJHxqMDXleE,7034
364
- toolkit/workspace/precompiled/modules/LM_oledui.mpy,sha256=F7UEuoYYhwae7_7CYiAKv_Lk5nYLupUVhzNNJMLAhsU,11549
361
+ toolkit/workspace/precompiled/modules/LM_oled_ui.mpy,sha256=JRd-1h_rk8_-r7BuXW18d7abJHgr8zv56Kjd4dJ-Ass,7044
362
+ toolkit/workspace/precompiled/modules/LM_oledui.mpy,sha256=vHu7BqEPV4xPAEzRZuLbUcdXaB2esL44gdekf6oWvN8,11543
365
363
  toolkit/workspace/precompiled/modules/LM_pacman.mpy,sha256=m7S4Gi3fAihwxpfzCaSkTDPyIzmqp4hf6KroBo5ucPw,3946
366
364
  toolkit/workspace/precompiled/modules/LM_pet_feeder.py,sha256=ILrozpnq2_ckkVDUROysMWRksKjflsKpIHvgHdvn-JA,2572
367
365
  toolkit/workspace/precompiled/modules/LM_presence.mpy,sha256=1ZRzBCmDqwAYhVp4Ww_bcPj2bp5LLsP8l7jNBtOSpUk,2744
@@ -379,8 +377,8 @@ toolkit/workspace/precompiled/modules/LM_sound_event.mpy,sha256=HhHnSYPTzd4hHjUK
379
377
  toolkit/workspace/precompiled/modules/LM_stepper.mpy,sha256=7FJuw86m5AnjPoiD089l90MvXFcpH7sJL8prhrcyjB0,1474
380
378
  toolkit/workspace/precompiled/modules/LM_switch.mpy,sha256=zQCsYkulOQ-vRmlAFjGGThOo2X9FQh6P9-En8t31zy0,2302
381
379
  toolkit/workspace/precompiled/modules/LM_system.mpy,sha256=DIL5FxfWKAn7gjMK5Wcn7t9IyNLQWhI8qREV-8e6R_o,2824
382
- toolkit/workspace/precompiled/modules/LM_tcs3472.py,sha256=rl_-4IE6f5BYTN52xY93yZJMI_PZwq9AVK2fzi_t7c0,1829
383
- toolkit/workspace/precompiled/modules/LM_telegram.mpy,sha256=yufAtrSVCfUXGCRhliLeT8YWjzkZLmPoUctH_gkUs6o,5148
380
+ toolkit/workspace/precompiled/modules/LM_tcs3472.py,sha256=Kvkpxigv-9zgfy2_jUqKJzZgMBZxOXqQf4QBU9McndY,5459
381
+ toolkit/workspace/precompiled/modules/LM_telegram.mpy,sha256=T_R9bNbF-RMjQz6S_bhX4YP0Hn_u2SPQ9k0y1eEXFA0,5172
384
382
  toolkit/workspace/precompiled/modules/LM_tinyrgb.mpy,sha256=ggoQ1nT8GJzA96GZovfuzWderEpOwO_aklDGm2O3WcU,1024
385
383
  toolkit/workspace/precompiled/modules/LM_trackball.mpy,sha256=gRdSB3DX1wIFsDqMxLfvBEKy9Xr-otGqx97NvkwHYFI,3479
386
384
  toolkit/workspace/precompiled/modules/LM_veml7700.mpy,sha256=X_2O0XnGtEZgSrXHpZc7uOEAdpMZug7tm4RJ-n-mqbM,1961
@@ -392,7 +390,7 @@ toolkit/workspace/precompiled/web/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN
392
390
  toolkit/workspace/precompiled/web/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
393
391
  toolkit/workspace/precompiled/web/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
394
392
  toolkit/workspace/precompiled/web/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
395
- microsdevtoolkit-2.17.2.dist-info/METADATA,sha256=F9depELdXOy3V_MZ4DHfJuQHLf5AYIZ3su8QFyKdnNg,55554
396
- microsdevtoolkit-2.17.2.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
397
- microsdevtoolkit-2.17.2.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
398
- microsdevtoolkit-2.17.2.dist-info/RECORD,,
393
+ microsdevtoolkit-2.19.0.dist-info/METADATA,sha256=uM4hFX9QHXatnrIwWEYvCCYLZluk_GHL5Ms_kH0xf7w,55544
394
+ microsdevtoolkit-2.19.0.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
395
+ microsdevtoolkit-2.19.0.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
396
+ microsdevtoolkit-2.19.0.dist-info/RECORD,,
toolkit/Gateway.py CHANGED
@@ -211,7 +211,7 @@ class ListDevices(Resource):
211
211
 
212
212
  def sort_devices(self):
213
213
  device_struct = socketClient.ConnectionData.list_devices()
214
- online_devices = socketClient.ConnectionData.nodes_status()
214
+ online_devices = socketClient.ConnectionData.nodes_status(feature_stat=False)
215
215
  filtered_devices = {"online": {}, "offline": {}}
216
216
  for uid, data in device_struct.items():
217
217
  if data[0] in online_devices:
@@ -412,6 +412,10 @@ def check_intercon(host=None):
412
412
  except Exception as e:
413
413
  print(f"WARNING: cannot parse output as dir: {e}")
414
414
  data_dict = {'tag': None, 'verdict': f'{data}: {str(e)}'}
415
+ # Handle new syntax: {"taskID": "verdict"}
416
+ if data[0] and data_dict.get("tag") is None:
417
+ _ttag = list(data_dict.keys())[0]
418
+ data_dict = {'tag': _ttag, 'verdict': f'{list(data_dict.values())[0]}: task show {_ttag}'}
415
419
  return data[0], data_dict
416
420
 
417
421
  def _get_intercon_output(tag):
@@ -426,51 +430,51 @@ def check_intercon(host=None):
426
430
  break
427
431
  return _state, _output
428
432
 
429
- def run_intercon_hello(tout):
433
+ def run_intercon_hello(tout=8):
430
434
  nonlocal host
431
435
  cmd_list = [f'hello >>{host}']
432
- _output = CLIENT.execute(cmd_list, tout=8)
433
- _new_intercon = True
434
- if "hello:" in _output[1]: # TODO: remove...
435
- # LEGACY WAY: FALLBACK
436
- cmd_list = ['intercon sendcmd "{}" "hello" >json'.format(host)]
437
- _output = CLIENT.execute(cmd_list, tout=tout)
438
- _new_intercon = False
439
- return _new_intercon, _output
436
+ _output = CLIENT.execute(cmd_list, tout=tout)
437
+ return _output
440
438
 
441
439
  info_msg = '[ST] Check device-device connectivity'
442
440
  print(info_msg)
443
441
  host = 'test.local' if host is None else host
444
- new_intercon, output = run_intercon_hello(tout=8)
442
+ output = run_intercon_hello(tout=8)
445
443
  output = _convert_return_to_dict(output)
444
+
446
445
  device_was_found = False
447
446
  if output[0] is False or output[1] is None:
448
447
  output = 'Device was not found: {}:{}'.format(host, output)
449
448
  return False, output
450
- elif output[1] == '[]':
449
+ if output[1] == '[]':
451
450
  # Valid input, device was not found
452
451
  output = 'Device was not found: {}:{}'.format(host, output)
453
452
  state = True, f'{info_msg}:\n\t\t{output}'
454
453
  elif len(output[1]) > 1 and "hello" in output[1]['verdict']:
455
454
  response_state, response = _get_intercon_output(output[1]['tag'])
456
455
  # Valid input on online device
457
- output = "Device was found: {}:{} version: {}".format(host, f"{output}: {response}", "NEW" if new_intercon else "LEGACY")
458
- state = True & response_state, f'{info_msg}:\n\t\t{output}'
456
+ output = "Device was found: {}:{}".format(host, f"{output}: {response}")
457
+ state = response_state, f'{info_msg}:\n\t\t{output}'
459
458
  device_was_found = True
460
459
  else:
461
- state = False, output
460
+ state = False, f" InterCon Failed: {output}"
462
461
 
463
462
  if device_was_found:
464
463
  # DO Negative testing as well
465
464
  host = "notavailable.local"
466
- _, output_neg = run_intercon_hello(tout=20)
465
+ output_neg = run_intercon_hello(tout=20)
466
+ if output_neg[0] and output_neg[1] == '':
467
+ # NO HOST TIMEOUT ...
468
+ output_neg = f'Device was not found (dhcp timeout): {host}:{output_neg}: {output_neg[1]}'
469
+ return True & state[0], f"{state[1]}\n\t\tNegative test: {output_neg}"
470
+ # Valid return on negative testing
467
471
  output_neg = _convert_return_to_dict(output_neg)
468
- state_neg = False, output_neg
472
+ state_neg = False, f"Negative test failed: {output_neg}"
469
473
  if len(output_neg[1]) > 1 and "hello" in output_neg[1]['verdict']:
470
474
  response_state, response = _get_intercon_output(output_neg[1]['tag'])
471
475
  output_neg = f'Device was not found: {host}":{output_neg}: {response}'
472
- state_neg = True & response_state, output_neg
473
- return state[0] & state_neg[0], "{}\n\t\tNegative test: {}".format(state[1], state_neg[1])
476
+ state_neg = response_state, output_neg
477
+ return state[0] & state_neg[0], f"{state[1]}\n\t\tNegative test: {state_neg[1]}"
474
478
  return state
475
479
 
476
480