micrOSDevToolKit 2.17.1__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.
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +15 -15
- micrOS/source/Config.py +2 -2
- micrOS/source/Espnow.py +29 -12
- micrOS/source/InterConnect.py +107 -31
- micrOS/source/Server.py +2 -3
- micrOS/source/Shell.py +1 -1
- micrOS/source/Tasks.py +22 -20
- micrOS/source/micrOSloader.py +1 -1
- micrOS/source/modules/LM_espnow.py +18 -1
- micrOS/source/modules/LM_neoeffects.py +1 -1
- micrOS/source/modules/LM_neomatrix.py +1 -1
- micrOS/source/modules/LM_oled_ui.py +4 -3
- micrOS/source/modules/LM_oledui.py +4 -3
- micrOS/source/modules/LM_tcs3472.py +131 -17
- micrOS/source/modules/LM_telegram.py +18 -18
- {microsdevtoolkit-2.17.1.dist-info → microsdevtoolkit-2.19.0.dist-info}/METADATA +3 -3
- {microsdevtoolkit-2.17.1.dist-info → microsdevtoolkit-2.19.0.dist-info}/RECORD +40 -42
- toolkit/DevEnvUSB.py +4 -1
- toolkit/Gateway.py +1 -1
- toolkit/dashboard_apps/SystemTest.py +22 -18
- toolkit/micrOSdashboard.py +8 -13
- toolkit/socketClient.py +27 -7
- toolkit/workspace/precompiled/Config.mpy +0 -0
- toolkit/workspace/precompiled/Espnow.mpy +0 -0
- toolkit/workspace/precompiled/InterConnect.mpy +0 -0
- toolkit/workspace/precompiled/Server.mpy +0 -0
- toolkit/workspace/precompiled/Shell.mpy +0 -0
- toolkit/workspace/precompiled/Tasks.mpy +0 -0
- toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_espnow.py +18 -1
- toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_neomatrix.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oledui.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_tcs3472.py +131 -17
- toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
- micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
- micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
- {microsdevtoolkit-2.17.1.data → microsdevtoolkit-2.19.0.data}/scripts/devToolKit.py +0 -0
- {microsdevtoolkit-2.17.1.dist-info → microsdevtoolkit-2.19.0.dist-info}/WHEEL +0 -0
- {microsdevtoolkit-2.17.1.dist-info → microsdevtoolkit-2.19.0.dist-info}/licenses/LICENSE +0 -0
- {microsdevtoolkit-2.17.1.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
|
|
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
|
|
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,
|
|
18
|
-
self._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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
176
|
+
def help(widgets=False):
|
|
70
177
|
"""
|
|
71
178
|
TCS3472 Color sensor
|
|
72
179
|
"""
|
|
73
|
-
return 'load',
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
|
327
|
+
if Telegram.INSTANCE is None:
|
|
328
328
|
return "Network unavailable."
|
|
329
|
-
verdict =
|
|
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
|
|
339
|
+
if Telegram.INSTANCE is None:
|
|
340
340
|
return "Network unavailable."
|
|
341
|
-
return
|
|
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
|
|
350
|
+
if Telegram.INSTANCE is None:
|
|
351
351
|
return "Network unavailable."
|
|
352
|
-
verdict =
|
|
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
|
|
362
|
+
if Telegram.INSTANCE is None:
|
|
363
363
|
return "Network unavailable."
|
|
364
|
-
tag = 'telegram.
|
|
365
|
-
state = micro_task(tag=tag, task=
|
|
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.
|
|
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 [
|
|
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) [
|
|
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=
|
|
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=
|
|
37
|
+
micrOS/source/Config.py,sha256=Ci2VjlK2RW1rvKr1xR4A6HeqktZYAkrU12hFVqngXB0,9178
|
|
40
38
|
micrOS/source/Debug.py,sha256=in2tx6Dw8EqeKYTrJpLxSevpoIrJjxlH17JLrTui1o8,3287
|
|
41
|
-
micrOS/source/Espnow.py,sha256=
|
|
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=
|
|
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=
|
|
51
|
-
micrOS/source/Shell.py,sha256=
|
|
52
|
-
micrOS/source/Tasks.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
106
|
-
micrOS/source/modules/LM_neomatrix.py,sha256=
|
|
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=
|
|
111
|
-
micrOS/source/modules/LM_oledui.py,sha256=
|
|
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=
|
|
130
|
-
micrOS/source/modules/LM_telegram.py,sha256=
|
|
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.
|
|
143
|
-
microsdevtoolkit-2.
|
|
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
|
-
toolkit/DevEnvUSB.py,sha256=
|
|
147
|
-
toolkit/Gateway.py,sha256=
|
|
144
|
+
toolkit/DevEnvUSB.py,sha256=TorXJt5qJ1Wk8Qi5Ncn3ortu432GHVCSQFXhSuA0OSU,37197
|
|
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=
|
|
152
|
+
toolkit/micrOSdashboard.py,sha256=5cd7-m3VlTMBX4jkw-kzVHS-Rzj7MnYNKKLm4w9hgOM,54335
|
|
155
153
|
toolkit/micrOSlint.py,sha256=39TpsZs815L3XCI3opweOGiIJHYdvEizFbd9TlHiuck,26126
|
|
156
|
-
toolkit/socketClient.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
308
|
-
toolkit/workspace/precompiled/Shell.mpy,sha256=
|
|
309
|
-
toolkit/workspace/precompiled/Tasks.mpy,sha256=
|
|
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
|
|
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=
|
|
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=
|
|
359
|
-
toolkit/workspace/precompiled/modules/LM_neomatrix.mpy,sha256=
|
|
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=
|
|
364
|
-
toolkit/workspace/precompiled/modules/LM_oledui.mpy,sha256=
|
|
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=
|
|
383
|
-
toolkit/workspace/precompiled/modules/LM_telegram.mpy,sha256=
|
|
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.
|
|
396
|
-
microsdevtoolkit-2.
|
|
397
|
-
microsdevtoolkit-2.
|
|
398
|
-
microsdevtoolkit-2.
|
|
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/DevEnvUSB.py
CHANGED
|
@@ -266,7 +266,7 @@ class USB(Compile):
|
|
|
266
266
|
self.console(f"Error creating directories on device: {dir_list_to_create}")
|
|
267
267
|
sys.exit(1)
|
|
268
268
|
# Generate resource list to be put on the device
|
|
269
|
-
source_to_put_device = list([s.replace(self.precompiled_micrOS_dir_path +
|
|
269
|
+
source_to_put_device = list([s.replace(self.precompiled_micrOS_dir_path + os.sep, '') for s in _source_to_put_device])
|
|
270
270
|
# Set source order - main, boot
|
|
271
271
|
source_to_put_device.append(source_to_put_device.pop(source_to_put_device.index("main.py")))
|
|
272
272
|
|
|
@@ -603,6 +603,9 @@ class USB(Compile):
|
|
|
603
603
|
return is_valid
|
|
604
604
|
|
|
605
605
|
def __safe_execute_mpremote_cmd(self, command, source, retry=8):
|
|
606
|
+
if sys.platform.startswith('win'):
|
|
607
|
+
# Because windows is a shit... python commands requires unix like separators
|
|
608
|
+
command = command.replace('\\', '/')
|
|
606
609
|
retry_orig = retry
|
|
607
610
|
status = False
|
|
608
611
|
for retry in range(1, retry_orig):
|
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=
|
|
433
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: {}:{}
|
|
458
|
-
state =
|
|
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
|
-
|
|
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 =
|
|
473
|
-
return state[0] & state_neg[0], "{}\n\t\tNegative test: {
|
|
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
|
|