micrOSDevToolKit 2.9.11__py3-none-any.whl → 2.10.2__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 (35) hide show
  1. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +19 -19
  2. micrOS/source/Common.py +4 -4
  3. micrOS/source/InterConnect.py +14 -11
  4. micrOS/source/LM_intercon.py +3 -0
  5. micrOS/source/LM_light_sensor.py +7 -15
  6. micrOS/source/LM_oled_ui.py +18 -22
  7. micrOS/source/LM_oledui.py +13 -16
  8. micrOS/source/LM_presence.py +8 -11
  9. micrOS/source/LM_system.py +7 -6
  10. micrOS/source/LM_telegram.py +21 -16
  11. micrOS/source/Shell.py +22 -19
  12. micrOS/source/Tasks.py +30 -15
  13. micrOS/source/Web.py +3 -2
  14. micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  15. {micrOSDevToolKit-2.9.11.dist-info → micrOSDevToolKit-2.10.2.dist-info}/METADATA +11 -14
  16. {micrOSDevToolKit-2.9.11.dist-info → micrOSDevToolKit-2.10.2.dist-info}/RECORD +35 -35
  17. toolkit/dashboard_apps/SystemTest.py +17 -6
  18. toolkit/lib/micrOSClient.py +25 -6
  19. toolkit/socketClient.py +2 -3
  20. toolkit/workspace/precompiled/Common.mpy +0 -0
  21. toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  22. toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
  23. toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
  24. toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
  25. toolkit/workspace/precompiled/LM_oledui.mpy +0 -0
  26. toolkit/workspace/precompiled/LM_presence.mpy +0 -0
  27. toolkit/workspace/precompiled/LM_system.mpy +0 -0
  28. toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
  29. toolkit/workspace/precompiled/Shell.mpy +0 -0
  30. toolkit/workspace/precompiled/Tasks.mpy +0 -0
  31. toolkit/workspace/precompiled/Web.mpy +0 -0
  32. {micrOSDevToolKit-2.9.11.data → micrOSDevToolKit-2.10.2.data}/scripts/devToolKit.py +0 -0
  33. {micrOSDevToolKit-2.9.11.dist-info → micrOSDevToolKit-2.10.2.dist-info}/LICENSE +0 -0
  34. {micrOSDevToolKit-2.9.11.dist-info → micrOSDevToolKit-2.10.2.dist-info}/WHEEL +0 -0
  35. {micrOSDevToolKit-2.9.11.dist-info → micrOSDevToolKit-2.10.2.dist-info}/top_level.txt +0 -0
@@ -4,6 +4,11 @@ from Notify import Notify
4
4
  from Config import cfgget
5
5
  from Common import micro_task, syslog, console_write
6
6
  from LM_system import ifconfig
7
+ from utime import localtime
8
+
9
+ def _timestamp():
10
+ _time = [str(k) for k in localtime()[3:6]]
11
+ return ':'.join(_time)
7
12
 
8
13
 
9
14
  class Telegram(Notify):
@@ -106,12 +111,12 @@ class Telegram(Notify):
106
111
  Update known chat_id-s and cache them
107
112
  - return active chat_id frm resp_json
108
113
  """
109
- console_write("[NTFY GET] update chatIDs")
110
114
  _cid = None
111
115
  if resp_json.get("ok", None) and len(resp_json["result"]) > 0:
112
116
  _cid = resp_json["result"][-1]["message"]["chat"]["id"]
113
117
  # LIMIT Telegram._CHAT_IDS NOTIFICATION CACHE TO 3 IDs
114
- if len(Telegram._CHAT_IDS) < 4:
118
+ if len(Telegram._CHAT_IDS) < 4 and _cid not in Telegram._CHAT_IDS:
119
+ console_write("[NTFY GET] update chatIDs")
115
120
  _ids = len(Telegram._CHAT_IDS)
116
121
  Telegram._CHAT_IDS.add(_cid)
117
122
  if len(Telegram._CHAT_IDS) - _ids > 0: # optimized save (slow storage access)
@@ -135,7 +140,7 @@ class Telegram(Notify):
135
140
  return None
136
141
  response = {'sender': None, 'text': None, 'm_id': -1, 'c_id': None}
137
142
  url = f"https://api.telegram.org/bot{bot_token}/getUpdates{Telegram._API_PARAMS}"
138
- console_write(f"\t1/2[GET] request: {url}")
143
+ console_write(f"\t[GET] request: {url}")
139
144
 
140
145
  _, resp_json = urequests.get(url, jsonify=True, sock_size=128)
141
146
 
@@ -145,7 +150,7 @@ class Telegram(Notify):
145
150
  response['sender'] = f"{resp['chat']['first_name']}{resp['chat']['last_name']}" if resp['chat'].get(
146
151
  'username', None) is None else resp['chat']['username']
147
152
  response['text'], response['m_id'] = resp['text'], resp['message_id']
148
- console_write(f"\t2/2[GET] response: {response}")
153
+ console_write(f"\t\t[GET] response: {response}")
149
154
  return response
150
155
 
151
156
  @staticmethod
@@ -160,7 +165,7 @@ class Telegram(Notify):
160
165
  return None
161
166
  response = {'sender': None, 'text': None, 'm_id': -1, 'c_id': None}
162
167
  url = f"https://api.telegram.org/bot{bot_token}/getUpdates{Telegram._API_PARAMS}"
163
- console_write(f"\t1/2[GET] request: {url}")
168
+ console_write(f"\t[aGET] request: {url}")
164
169
 
165
170
  _, resp_json = await urequests.aget(url, jsonify=True, sock_size=128)
166
171
 
@@ -170,7 +175,7 @@ class Telegram(Notify):
170
175
  response['sender'] = f"{resp['chat']['first_name']}{resp['chat']['last_name']}" if resp['chat'].get(
171
176
  'username', None) is None else resp['chat']['username']
172
177
  response['text'], response['m_id'] = resp['text'], resp['message_id']
173
- console_write(f"\t2/2[GET] response: {response}")
178
+ console_write(f"\t\t[aGET] response: {response}")
174
179
  return response
175
180
 
176
181
  @staticmethod
@@ -183,14 +188,14 @@ class Telegram(Notify):
183
188
  console_write("[NTFY] EVAL sequence")
184
189
  verdict = None
185
190
 
186
- def lm_execute(cmd_args):
191
+ def _lm_execute(cmd_args):
187
192
  nonlocal verdict, m_id
188
193
  access, output = Telegram.lm_execute(cmd_args)
189
194
  if access:
190
- verdict = f'[UP] Exec: {" ".join(cmd_args[0])}'
195
+ verdict = f'{_timestamp()} [UP] Exec: {" ".join(cmd_args[0])}'
191
196
  Telegram.send_msg(output, reply_to=m_id)
192
197
  else:
193
- verdict = f'[UP] NoAccess: {cmd_args[0]}'
198
+ verdict = f'{_timestamp()} [UP] NoAccess: {cmd_args[0]}'
194
199
  Telegram._IN_MSG_ID = m_id
195
200
 
196
201
  # -------------------------- FUNCTION MAIN -------------------------- #
@@ -211,12 +216,12 @@ class Telegram(Notify):
211
216
  cmd_lm = msg_in.strip().split()[1:]
212
217
  # [Compare] cmd selected device param with DEVFID (device/prompt name)
213
218
  if cmd_lm[0] in Telegram._DEVFID:
214
- lm_execute(cmd_lm[1:])
219
+ _lm_execute(cmd_lm[1:])
215
220
  else:
216
- verdict = f'[UP] NoSelected: {cmd_lm[0]}'
221
+ verdict = f'{_timestamp()} [UP] NoSelected: {cmd_lm[0]}'
217
222
  elif msg_in.startswith('/cmd'):
218
223
  cmd_lm = msg_in.strip().split()[1:]
219
- lm_execute(cmd_lm)
224
+ _lm_execute(cmd_lm)
220
225
  elif msg_in.startswith('/notify'):
221
226
  param = msg_in.strip().split()[1:]
222
227
  if len(param) > 0:
@@ -226,8 +231,7 @@ class Telegram(Notify):
226
231
  # Send is still synchronous (OK)
227
232
  Telegram.send_msg(verdict, reply_to=m_id)
228
233
  else:
229
- verdict = "[UP] NoExec"
230
- console_write(f"\tBOT: {verdict}")
234
+ verdict = f"{_timestamp()} [UP] NoExec"
231
235
  return verdict
232
236
 
233
237
  @staticmethod
@@ -241,11 +245,12 @@ class Telegram(Notify):
241
245
  period = period if period > 0 else 1
242
246
  period_ms = period * 1000
243
247
  with micro_task(tag=tag) as my_task:
244
- my_task.out = "[UP] Running"
248
+ my_task.out = f"{_timestamp()} [UP] Running"
245
249
  while True:
246
250
  # Normal task period
247
251
  await my_task.feed(sleep_ms=period_ms)
248
252
  try:
253
+ # await asyncio.wait_for(Telegram.receive_eval(), 5) # 5 sec timeout???
249
254
  v = await Telegram.receive_eval()
250
255
  my_task.out = "Missing bot token" if v is None else f"{v} ({period}s)"
251
256
  cancel_cnt = 0
@@ -254,7 +259,7 @@ class Telegram(Notify):
254
259
  # Auto scale - blocking nature - in case of serial failures (5) - hibernate task (increase async sleep)
255
260
  cancel_cnt += 1
256
261
  if cancel_cnt > 5:
257
- my_task.out = f"[DOWN] {e} (wait 1min)"
262
+ my_task.out = f"{_timestamp()} [DOWN] {e} (wait 1min)"
258
263
  cancel_cnt = 5
259
264
  # SLOW DOWN - hibernate task
260
265
  await my_task.feed(sleep_ms=60_000)
micrOS/source/Shell.py CHANGED
@@ -25,7 +25,7 @@ from Debug import errlog_add
25
25
 
26
26
  class Shell:
27
27
  __slots__ = ['__devfid', '__auth_mode', '__hwuid', '__auth_ok', '__conf_mode']
28
- MICROS_VERSION = '2.9.9-0'
28
+ MICROS_VERSION = '2.10.2-0'
29
29
 
30
30
  def __init__(self):
31
31
  """
@@ -106,6 +106,7 @@ class Shell:
106
106
  # No msg to work with
107
107
  return True
108
108
  msg_list = msg.strip().split()
109
+ local_cmd = not msg_list[-1].startswith(">>") # intercon request check for shell commands
109
110
 
110
111
  ##########################################
111
112
  # [1] Handle built-in shell commands #
@@ -113,7 +114,7 @@ class Shell:
113
114
  ##########################################
114
115
 
115
116
  # Hello message
116
- if msg_list[0] == 'hello':
117
+ if local_cmd and msg_list[0] == 'hello':
117
118
  # For low level device identification - hello msg
118
119
  await self.a_send(f"hello:{self.__devfid}:{self.__hwuid}")
119
120
  return True
@@ -126,60 +127,62 @@ class Shell:
126
127
  return True
127
128
 
128
129
  # Version handling
129
- if msg_list[0] == 'version':
130
+ if local_cmd and msg_list[0] == 'version':
130
131
  # For micrOS system version info
131
132
  await self.a_send(str(Shell.MICROS_VERSION))
132
133
  return True
133
134
 
134
135
  # Reboot micropython VM
135
- if msg_list[0] == 'reboot':
136
+ if local_cmd and msg_list[0] == 'reboot':
136
137
  hard = False
137
138
  if len(msg_list) >= 2 and "-h" in msg_list[1]:
138
139
  # reboot / reboot -h
139
140
  hard = True
140
141
  await self.reboot(hard)
141
142
 
142
- if msg_list[0].startswith('webrepl'):
143
+ if local_cmd and msg_list[0].startswith('webrepl'):
143
144
  if len(msg_list) == 2 and '-u' in msg_list[1]:
144
145
  await Shell.webrepl(msg_obj=self.a_send, update=True)
145
146
  return await Shell.webrepl(msg_obj=self.a_send)
146
147
 
147
148
  # CONFIGURE MODE STATE: ACCESS FOR NODE_CONFIG.JSON
148
- if msg_list[0].startswith('conf'):
149
+ if local_cmd and msg_list[0].startswith('conf'):
149
150
  self.__conf_mode = True
150
151
  return True
151
- if msg_list[0].startswith('noconf'):
152
+ if local_cmd and msg_list[0].startswith('noconf'):
152
153
  self.__conf_mode = False
153
154
  return True
154
155
 
155
156
  # HELP MSG
156
- if msg_list[0] == "help":
157
- await self.a_send("[MICROS] - built-in shell commands")
158
- await self.a_send(" hello - hello msg - for device identification")
159
- await self.a_send(" modules - show active Load Modules")
160
- await self.a_send(" version - returns micrOS version")
161
- await self.a_send(" exit - exit from shell socket prompt")
162
- await self.a_send(" reboot - system soft reboot (vm), hard reboot (hw): reboot -h")
163
- await self.a_send(" webrepl - start webrepl, for file transfers use with --update")
157
+ if local_cmd and msg_list[0] == "help":
158
+ await self.a_send("[MICROS] - built-in shell commands")
159
+ await self.a_send(" hello - hello msg - for device identification")
160
+ await self.a_send(" modules - show active Load Modules")
161
+ await self.a_send(" version - returns micrOS version")
162
+ await self.a_send(" exit - exit from shell socket prompt")
163
+ await self.a_send(" reboot - system soft reboot (vm), hard reboot (hw): reboot -h")
164
+ await self.a_send(" webrepl - start webrepl, for file transfers use with --update")
164
165
  await self.a_send("[CONF] Configure mode - built-in shell commands")
165
166
  await self.a_send(" conf - Enter conf mode")
166
167
  await self.a_send(" dump - Dump all data")
167
168
  await self.a_send(" key - Get value")
168
169
  await self.a_send(" key value - Set value")
169
170
  await self.a_send(" noconf - Exit conf mode")
170
- await self.a_send("[TASK] postfix: &x - one-time, &&x - periodic, x: wait ms [x min: 20ms]")
171
- await self.a_send(" task list - list tasks with <tag>s")
171
+ await self.a_send("[TASK] postfix: ...&x - one-time, ...&&x - periodic, x: wait ms [x min: 20ms]")
172
+ await self.a_send(" task list - list tasks by <tag>s")
172
173
  await self.a_send(" task kill <tag> - stop task")
173
174
  await self.a_send(" task show <tag> - show task output")
174
175
  await self.a_send("[EXEC] Command mode (LMs):")
175
- await self.a_send(" help lm - list ALL LoadModules")
176
+ await self.a_send(" >>node01.local - INTERCON postfix, execute command on remote device")
177
+ await self.a_send(" >json - JSON postfix, request json formatted output")
178
+ await self.a_send(" help lm - list ALL LoadModules")
176
179
  if "lm" in str(msg_list):
177
180
  return await Shell._show_lm_funcs(msg_obj=self.a_send)
178
181
  return await Shell._show_lm_funcs(msg_obj=self.a_send, active_only=True)
179
182
 
180
183
  # [2] EXECUTE:
181
184
  # @1 Configure mode
182
- if self.__conf_mode and len(msg_list) > 0:
185
+ if local_cmd and self.__conf_mode and len(msg_list) > 0:
183
186
  # Lock thread under config handling is threads available
184
187
  return await Shell._configure(self.a_send, msg_list)
185
188
  # @2 Command mode
micrOS/source/Tasks.py CHANGED
@@ -199,12 +199,9 @@ class MagicTask(TaskBase):
199
199
  - self.__inloop: lm call type - one-shot (False) / looped (True)
200
200
  - self.__msg_buf: lm msg object redirect to variable - store lm output
201
201
  """
202
- jsonify = self.__callback[-1] == '>json'
203
- if jsonify:
204
- self.__callback = self.__callback[:-1]
205
202
  while True:
206
203
  await self.feed(self.__sleep)
207
- state, self.out = _exec_lm_core(self.__callback, jsonify)
204
+ state, self.out = _exec_lm_core(self.__callback)
208
205
  if not state or not self.__inloop:
209
206
  break
210
207
  self.task_gc() # Task pool cleanup
@@ -227,6 +224,7 @@ class Manager:
227
224
  __slots__ = ['_initialized', 'idle_counter']
228
225
  INSTANCE = None # Manager object
229
226
  LOAD = 0 # CPU overload measure
227
+ INTERCON = None # Dynamic ref. for interconnect calls
230
228
 
231
229
  def __new__(cls):
232
230
  """
@@ -419,19 +417,34 @@ def exec_builtins(func):
419
417
  - modules - show active modules list
420
418
  - task kill ... - task termination
421
419
  show ... - task output dump
422
- - ... >json - postfix to "jsonize" the output
420
+ - ... >json - postfix to jsonify the output
423
421
  """
424
- def wrapper(arg_list, jsonify=None):
422
+ def wrapper(arg_list:list, jsonify=None):
425
423
  # Ensure the parameter is a list of strings
426
424
  if isinstance(arg_list, list) and arg_list:
427
- # JSONIFY: [1] >json in arg_list or [2] jsonify True/False
428
- json_flag = arg_list[-1] == '>json'
429
- if json_flag:
430
- arg_list = arg_list[:-1]
425
+ # Postfix operator handling
426
+ # ... >json - command output format option
427
+ # ... >>node01.local - intercon: command execution on remote device by hostname/IP address
428
+ arg_list, json_flag = (arg_list[:-1], True) if arg_list[-1] == '>json' else (arg_list, False)
429
+ arg_list, intercon_target = (arg_list[:-1], arg_list[-1].replace(">>", "")) if arg_list[-1].startswith('>>') else (arg_list, None)
431
430
  json_flag = jsonify if isinstance(jsonify, bool) else json_flag
431
+
432
+ # INTERCONNECT
433
+ if intercon_target:
434
+ if Manager.INTERCON is None:
435
+ from InterConnect import send_cmd
436
+ Manager.INTERCON = send_cmd
437
+ try:
438
+ out = Manager.INTERCON(host=intercon_target, cmd=arg_list)
439
+ except Exception as e:
440
+ out = {}
441
+ errlog_add(f"[ERR] Intercon: {e}")
442
+ return True, out
443
+
432
444
  # MODULES
433
445
  if arg_list[0] == 'modules':
434
446
  return True, list((m.strip().replace('LM_', '') for m in modules if m.startswith('LM_'))) + ['task']
447
+
435
448
  # Handle task manipulation commands: list, kill, show - return True -> Command handled
436
449
  if 'task' == arg_list[0]:
437
450
  arg_len = len(arg_list)
@@ -448,13 +461,13 @@ def exec_builtins(func):
448
461
  if 'show' == arg_list[1]:
449
462
  return True, Manager.show(tag=arg_list[2])
450
463
  return True, "Invalid task cmd! Help: task list / kill <taskID> / show <taskID>"
464
+
451
465
  # Call the decorated function with the additional flag
452
466
  return func(arg_list, json_flag)
453
467
  return wrapper
454
468
 
455
469
 
456
- @exec_builtins
457
- def lm_exec(arg_list, jsonify):
470
+ def lm_exec(arg_list:list, jsonify:bool=None):
458
471
  """
459
472
  Main LM executor function with
460
473
  - async (background)
@@ -489,6 +502,7 @@ def lm_exec(arg_list, jsonify):
489
502
  return state, out
490
503
 
491
504
 
505
+ @exec_builtins
492
506
  def _exec_lm_core(cmd_list, jsonify):
493
507
  """
494
508
  [CORE] Single command executor: MODULE.FUNCTION...
@@ -535,11 +549,12 @@ def _exec_lm_core(cmd_list, jsonify):
535
549
  # ------------ LM output format: dict(jsonify) / str(raw) ------------- #
536
550
  # Handle LM output data
537
551
  if isinstance(lm_output, dict):
538
- # json True: output->json else Format dict output "human readable"
552
+ # jsonify (True) json output, (False) default, "human readable" output)
539
553
  lm_output = dumps(lm_output) if jsonify else '\n'.join(
540
554
  [f" {key}: {value}" for key, value in lm_output.items()])
541
555
  if lm_func == 'help':
542
- # Special case for help command: json True: output->json else Format dict output "human readable"
556
+ # Special case:
557
+ # jsonify (True) json output, (False) default, "human readable" formatted output)
543
558
  lm_output = dumps(lm_output) if jsonify else '\n'.join([f" {out}," for out in lm_output])
544
559
  # Return LM exec result
545
560
  return True, str(lm_output)
@@ -582,7 +597,7 @@ def exec_lm_pipe(taskstr):
582
597
  for cmd in (cmd.strip().split() for cmd in taskstr.split(';') if len(cmd) > 0):
583
598
  if len(cmd) > 0 and cmd[0].startswith("#"):
584
599
  console_write(f"[SKIP] exec_lm_pipe: {' '.join(cmd)}")
585
- return True
600
+ continue
586
601
  if not lm_exec(cmd)[0]:
587
602
  errlog_add(f"[WARN] exec_lm_pipe: {cmd}")
588
603
  except Exception as e:
micrOS/source/Web.py CHANGED
@@ -102,8 +102,9 @@ class WebEngine:
102
102
  cmd = url.replace('/rest', '')
103
103
  if len(cmd) > 1:
104
104
  # REST sub-parameter handling (rest commands)
105
- cmd = (cmd.replace('/', ' ').replace('%22', '"').replace('%E2%80%9C', '"')
106
- .replace('%E2%80%9D', '"').replace('-', ' ').strip().split())
105
+ cmd = (cmd.replace('/', ' ').replace('-', ' ').replace("%3E", ">")
106
+ .replace('%22', '"').replace('%E2%80%9C', '"').replace('%E2%80%9D', '"')
107
+ .strip().split())
107
108
  # EXECUTE COMMAND - LoadModule
108
109
  if WebEngine.AUTH:
109
110
  state, out = lm_exec(cmd, jsonify=True) if lm_is_loaded(cmd[0]) else (True, 'Auth:Protected')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: micrOSDevToolKit
3
- Version: 2.9.11
3
+ Version: 2.10.2
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
@@ -494,11 +494,11 @@ Version **3.0.0-0** `micrOS-Autonomous`
494
494
  - (1) Async SSL/TLS integration (micropython 1.22+ required) [DONE]
495
495
  - urequest module async redesign for rest clients [OK]
496
496
  - LM_telegram (Notify) + server (listener - chatbot) [OK]
497
- - (2) ESP-NOW (peer-to-peer communication) integration into InterCon [PoC][TODO]
498
- - (3) New intercon syntax - command level integration: [TODO]
497
+ - (2) ESP-NOW (peer-to-peer communication) integration into InterCon [PoC:OK][TODO]
498
+ - (3) New intercon syntax - command level integration: [DONE]
499
499
  - rgb toggle >>RingLight.local
500
- - similar as: intercon sendcmd host="RingLight.local" cmd="rgb toggle"
501
- - (4) Create multi level project structure (curret is flat fs) [TODO] FS
500
+ - similar as (obsolete): intercon sendcmd host="RingLight.local" cmd="rgb toggle"
501
+ - (4) Create multi level project structure (curret is flat fs) [TODO?] FS
502
502
  - New micrOS FS structure:
503
503
  - Note:
504
504
  - On device (boot) micrOS Hooks.py/os_dir_fs_hook (check+correct) [Phase1-FS:TODO]
@@ -528,6 +528,9 @@ Version **3.0.0-0** `micrOS-Autonomous`
528
528
  - *.js
529
529
  - *.css
530
530
 
531
+ - /logs
532
+ - still there (created runtime)
533
+
531
534
  - (5) Proper mip installer support (/lib) [TODO]
532
535
  - Note: Autonomous package management over wifi (github)
533
536
  - pacman download
@@ -731,8 +734,6 @@ devToolKit.py -c -p '--dev BedLamp help'
731
734
  help
732
735
  dht22
733
736
  help
734
- intercon
735
- help
736
737
  robustness
737
738
  help
738
739
  system
@@ -862,8 +863,6 @@ BedLamp $ help
862
863
  help
863
864
  dht22
864
865
  help
865
- intercon
866
- help
867
866
  robustness
868
867
  help
869
868
  system
@@ -954,10 +953,9 @@ micrOS Load Module resources
954
953
  43 105 LM_lmpacman.py (mlint: True) (pylint: 8.38) (ref.: 0)
955
954
  44 176 LM_gameOfLife.py (mlint: True) (pylint: 9.29) (ref.: 2)
956
955
  45 58 LM_catgame.py (mlint: True) (pylint: 8.46) (ref.: 0)
957
- 46 42 LM_intercon.py (mlint: True) (pylint: 8.18) (ref.: 3)
958
- 47 43 LM_ds18.py (mlint: True) (pylint: 5.0) (ref.: 2)
959
- 48 250 LM_i2s_mic.py (mlint: False) (pylint: 8.71) (ref.: 1)
960
- 49 34 LM_sdcard.py (mlint: True) (pylint: 7.88) (ref.: 0)
956
+ 46 43 LM_ds18.py (mlint: True) (pylint: 5.0) (ref.: 2)
957
+ 47 250 LM_i2s_mic.py (mlint: False) (pylint: 8.71) (ref.: 1)
958
+ 48 34 LM_sdcard.py (mlint: True) (pylint: 7.88) (ref.: 0)
961
959
 
962
960
  SUM CODE LINES (WITH COMMENTS, WITHOUT EMPTY LINES): 6822
963
961
  ```
@@ -1048,7 +1046,6 @@ micrOS/toolkit/workspace/precompiled
1048
1046
  │   ├── LM_esp32.py
1049
1047
  │   ├── LM_genIO.mpy
1050
1048
  │   ├── LM_i2c.py
1051
- │   ├── LM_intercon.mpy
1052
1049
  │   ├── LM_light_sensor.mpy
1053
1050
  │   ├── LM_neoeffects.mpy
1054
1051
  │   ├── LM_neopixel.mpy
@@ -32,9 +32,9 @@ micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin,sha256=S-sv_QeL_Tylg1
32
32
  micrOS/micropython/esp32s3_spiram_oct-20241129-v1.24.1.bin,sha256=VbOF_F0YeqttkQd2ePTW66Jd34RU8u9ccFfcv8kxO_U,1662672
33
33
  micrOS/micropython/rpi-pico-w-20241129-v1.24.1.uf2,sha256=v4aYIbWaE94_f6DDzBWS-a9L1BzlcdkZwld9R7bOVA4,1727488
34
34
  micrOS/micropython/tinypico-20241129-v1.24.1.bin,sha256=Kf3cr766a5SK99CZy8bwdWjwvAZxls3tBYvaHBsw7ac,1527200
35
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=hUcG245oSHjZoAqx0yjbKXGGUHWNa7p0kcyDvMwxEKo,5759
35
+ micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=zhIWl4uMC9VNiTB0WY2zylxxXdjSfWyH3DvWPFQIK2Y,5759
36
36
  micrOS/source/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
37
- micrOS/source/Common.py,sha256=PAdtseGY6QxUM-5elOAcApUv8AwGQ_smsYex0FeV5w8,7937
37
+ micrOS/source/Common.py,sha256=LEdYxNT7M5aVEIyx0nPoODOYgsVsY7Japxe9diZpU5A,8020
38
38
  micrOS/source/Config.py,sha256=E3OTMRI1_T94GMADcvG7MKiuGsKsnbLn17KXHcjhqXM,8795
39
39
  micrOS/source/Debug.py,sha256=_7HZzZ2OKJrcNqeYsG1ZykBa6iN8YTj-K5FFXlEAcRw,5300
40
40
  micrOS/source/Espnow.py,sha256=_D9XYTT0gQBEWTLzBLCLCbHdFDwjHyMMO94YPtEJlsQ,5510
@@ -47,7 +47,7 @@ micrOS/source/IO_m5stamp.py,sha256=KyOGvmcWv_gqdajp4zb4-1zARMyYNxhVc-3ZVGlK4gw,1
47
47
  micrOS/source/IO_qtpy.py,sha256=glZvTTmmrJ6qwVC1fJ-pJwk4WEoZVH1KEPCpiHI66Ik,2471
48
48
  micrOS/source/IO_rp2.py,sha256=8ISwnkFvlyeQJlrZiX3xABE9_Pu4u8HhYRVpIFvZdro,131
49
49
  micrOS/source/IO_tinypico.py,sha256=S9utgFQdRLjzasylJc2HITRwy9FOb9q5cJIQdkw1UF0,2356
50
- micrOS/source/InterConnect.py,sha256=r_k7_KhAScFoFV3Vhr1D8TxgDc6pJ4Rd3bSqaEL-V3I,7739
50
+ micrOS/source/InterConnect.py,sha256=wYMoNU3GS1VzLeQfcHTYQ3JGnpXLmTm4GyUm7EmH5Qg,7859
51
51
  micrOS/source/Interrupts.py,sha256=lbDZcFTWfrjbJur1Q_hGJM1ZDsRRMWmSXREAHFogqLc,7551
52
52
  micrOS/source/LM_L298N_DCmotor.py,sha256=TsD74hXwfPwmUjHWe6r6wE49nQ82fVygevxwsCasmx8,2426
53
53
  micrOS/source/LM_L9110_DCmotor.py,sha256=sf6TtuXRrfElhm_9rbp4bPjnKGTwO3PnuXVCC5Ob7Us,1847
@@ -73,20 +73,20 @@ micrOS/source/LM_genIO.py,sha256=rTiFByly8ImjHBgc2RceGczGp1rzti7Juz_Vvg5hrtc,501
73
73
  micrOS/source/LM_haptic.py,sha256=W0WiuOCxIu9RB-pWu8r8fvHmvuseet1UI7RSc9WO8zo,2862
74
74
  micrOS/source/LM_i2c.py,sha256=WKuKxC85TKBSAT8SO4cm8OCPyceAsohHCQFTmomp8iA,1533
75
75
  micrOS/source/LM_i2s_mic.py,sha256=1Yu6RLYvSWWHT4KL1kCAuy_avV_z6WJXgIwWuQ73jcA,12271
76
- micrOS/source/LM_intercon.py,sha256=BRk8o2ksGdYTSrykTsXdkrncQZWsFYbQDHQjkwl-uy0,1680
76
+ micrOS/source/LM_intercon.py,sha256=QFXeYlrgpVeBPOjrhgWk6IWH-MM1-hPjsf-JSXn7vgk,1806
77
77
  micrOS/source/LM_keychain.py,sha256=-GN-Xzoour2vjg5MyZtmbcxo8LdSn6dYrk1wSliNQh4,12695
78
78
  micrOS/source/LM_ld2410.py,sha256=dWBsIkI0ryomn0zDrmz5YxaGcoH5TqjAsi2qwGd8UZM,6524
79
- micrOS/source/LM_light_sensor.py,sha256=FtgAhHLJvXq_ew3sNutqX2z-Poo6Yl_Tc_bmP6GW3dU,4669
79
+ micrOS/source/LM_light_sensor.py,sha256=xzsPmiLQHx5v8pyNQC0UNXFa76qsV-CqFACY7UZmVKk,4561
80
80
  micrOS/source/LM_neoeffects.py,sha256=kfReEz9pTB0GRSat6--86PZtjfiT_S9ilfb-igt-bbg,10929
81
81
  micrOS/source/LM_neopixel.py,sha256=4TWwlmW6bnnmS76fVZVri6bI2zPXbiPJ9spEtA7NTjE,13260
82
82
  micrOS/source/LM_oled.py,sha256=ZwLndxWuY1Ii5d06YEf9Z_jxmTyoOYRL-BO3VhJ0b14,9903
83
83
  micrOS/source/LM_oled_sh1106.py,sha256=av2_ftFHvfAIxcPYHbrOMQNZgM1Go6MQzBu5cIeVK4w,11723
84
- micrOS/source/LM_oled_ui.py,sha256=rs-YmYdJQy3AVokxF_oBrkjFFGGhRdnxKoHjmO-x158,21611
85
- micrOS/source/LM_oledui.py,sha256=hYt_3hWPdrZBOreVdupJxHhk9-xHkmuiqmEIA08mB2M,35407
84
+ micrOS/source/LM_oled_ui.py,sha256=65OwlWD4X4b3r64XalDTdp0fNakWY1jpnIZvNBoSyno,21655
85
+ micrOS/source/LM_oledui.py,sha256=ym502-2eNN_e9qCysBjszrfPYdJek-izf2W2UyF_g1g,35429
86
86
  micrOS/source/LM_pacman.py,sha256=k_R0X0YGkRc6-NoF5fvqng7lD5RNmV-rsVa-uBcrleE,8227
87
87
  micrOS/source/LM_pet_feeder.py,sha256=ILrozpnq2_ckkVDUROysMWRksKjflsKpIHvgHdvn-JA,2572
88
88
  micrOS/source/LM_ph_sensor.py,sha256=QBVF6cHX3l9jsKcbEZprpyFtwRVLbup-_A7RmRYsdp8,1355
89
- micrOS/source/LM_presence.py,sha256=ihOr20szXPaMWh36n5pip60_xkOHCHpkXA4e3F1K3OE,8849
89
+ micrOS/source/LM_presence.py,sha256=xHB-U_Ywp6F-DEOFlYmjx0QFFQGwKgh8RS77r805YhQ,8830
90
90
  micrOS/source/LM_rencoder.py,sha256=9w00JP8UKC_GEKr18xgZ5axX9xc_wVeR9XlWpVR2Qzw,3973
91
91
  micrOS/source/LM_rest.py,sha256=NmkAPcSCIc_eSNYMy64Kb4fa4_JEpNXkmCSXF_zEkNk,2673
92
92
  micrOS/source/LM_rgb.py,sha256=ohzGxqC-dXIVc_YPXOtmmI9vRBFFjK-OfvsTnAFaDVM,11949
@@ -99,8 +99,8 @@ micrOS/source/LM_servo.py,sha256=83YPK5qlHuEOo3jTn5wXRsvPzzJPp0ZtCW-BhHHMBK0,348
99
99
  micrOS/source/LM_sound_event.py,sha256=9BZnrT8Jc2HL-28yVZE5sdeTa8Biq1qkQiTJsTw8y08,27500
100
100
  micrOS/source/LM_stepper.py,sha256=CkI4QBe2KJ7E5DKL7Z23oAMPDUFlUt7btAvqrn4H6Kg,4278
101
101
  micrOS/source/LM_switch.py,sha256=uxw2opz41OpBiBfb5ioojsUzPsETnkinkDXI4NRHMZs,7819
102
- micrOS/source/LM_system.py,sha256=A3k2ToZmk1kSSnrcq15R5HSDjupTL0LSChO4go9r3BE,6541
103
- micrOS/source/LM_telegram.py,sha256=n5mZeompavjfFXyCUiHYmmeusY-rJRuVbWOb9tNOZ4E,14848
102
+ micrOS/source/LM_system.py,sha256=p_QvbigWe1Pp8Vdjm_ebi1EW6mFG18lB6L8mP9rYTwM,6588
103
+ micrOS/source/LM_telegram.py,sha256=DY4WEzthGExQ0A6iE6LCMYrXaMLAjsU5OsmY92X3kgg,15153
104
104
  micrOS/source/LM_tinyrgb.py,sha256=kChL607HPTl3Z2hYN2XnzXXfZ6omdP78PQutHdbdfCo,3031
105
105
  micrOS/source/LM_trackball.py,sha256=N2hhy3wuk55-ja4dmENpfthBolIEj28d2pzcjel5OKg,9716
106
106
  micrOS/source/LM_veml7700.py,sha256=3eb6-HuMA_tYBA0cJHUsZzOBriHacIpVSrK-1iB3_pY,5762
@@ -109,11 +109,11 @@ micrOS/source/Network.py,sha256=wLhAPiRyi376TKJA7tzCQidDBHq-AbZGGp7JabHIyl8,9417
109
109
  micrOS/source/Notify.py,sha256=jVf7wg7b7ehuh12A8tlYz5ZU00NQEgpVuTK0lN6cNcY,2645
110
110
  micrOS/source/Scheduler.py,sha256=K6fw807UJnOmbfzgeJQGzGbTL4s2sTIB120ZcS5qrLs,9648
111
111
  micrOS/source/Server.py,sha256=HMkHWofMmtpTQtKiGy_Gh6R2xHy4Vpud_aT2zhC4l58,16245
112
- micrOS/source/Shell.py,sha256=a8nIVnmoGgkq-7i3jCOrQFPQagxJWiUHgXd1I9pmaG8,12453
113
- micrOS/source/Tasks.py,sha256=qAcniMejAHwpRK1cq-jcN4vQ1AotU0YqmH7Y5_pQy70,22510
112
+ micrOS/source/Shell.py,sha256=hgvP41HinmQKBW7cbiit9jkNZcTyZ6jucJnoO6htxGo,12896
113
+ micrOS/source/Tasks.py,sha256=dl5Vol9WY5bnmsPr-DdLCn1So2W9mStHw16F-JeYPww,23244
114
114
  micrOS/source/Time.py,sha256=vTl8-sL-iO4l9eZMVCHTJ6oUwfhPiB1VHXTrrg-l59Y,6344
115
115
  micrOS/source/Types.py,sha256=3O_Vb1jN92RPtvgbV8ui6_iFzDOD-BUzVXlPB7PgmM4,3507
116
- micrOS/source/Web.py,sha256=BAp7mFYzJwmzUGFc6O7DZDDKKPGjgW5EY5lRcfx-SU0,8893
116
+ micrOS/source/Web.py,sha256=KxRc6zt_8acAJyL9uv2JW2c27qtzYgi673ob0kxfxpE,8933
117
117
  micrOS/source/dashboard.html,sha256=xBZOZ8AMO55QheuZ41Sl0Arvb44qnnai9D67A8YxlVE,2641
118
118
  micrOS/source/index.html,sha256=cv0hap5bhBoRR_z1KALC3fbjH2rQZY9JJPfF-dxVclw,1656
119
119
  micrOS/source/main.py,sha256=cVlhoWwU9dSKEol0HWPihFAPzrUUvzSGwZNNMrpyfSY,440
@@ -127,10 +127,10 @@ micrOS/source/urequests.py,sha256=p7_8X9SrWk4wXhAZKpVPd-PZBHHToX8b1gwhFEi96FM,90
127
127
  micrOS/source/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
128
128
  micrOS/source/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
129
129
  micrOS/source/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
130
- micrOS/source/__pycache__/Common.cpython-312.pyc,sha256=qugnjE4Q1mMrR3VJaMhq71hsOoWLuft2lwv4O8Bo6ts,10366
130
+ micrOS/source/__pycache__/Common.cpython-312.pyc,sha256=DbSNgmSjJTDfmDemMp3Us-0uDCm2bxE000P7a-6ye3s,10455
131
131
  micrOS/source/__pycache__/Logger.cpython-312.pyc,sha256=CCdkMRG0lBy7nVsc4DHwdRK0Ap0Mu9yB5fa_Hxx-RHY,5075
132
132
  micrOS/source/__pycache__/Server.cpython-312.pyc,sha256=xy1ImeXPtGhtYlAWpuWaxLmJO2nLVGdefOuqltABR9k,20615
133
- micrOSDevToolKit-2.9.11.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
133
+ micrOSDevToolKit-2.10.2.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
134
134
  toolkit/DevEnvCompile.py,sha256=H19-60ZpHzP30C-wqR5QTzMDHHpWrTk0Uzh--TZHxvw,12148
135
135
  toolkit/DevEnvOTA.py,sha256=vNa827MOhbNQbeMGGu72YmGlNN_Tm9D6Trdnz3YGpyU,25499
136
136
  toolkit/DevEnvUSB.py,sha256=G-Ram-OR27flvVhul8J_ObiMY07Wjvom6Prc4dTfkmo,34108
@@ -143,7 +143,7 @@ toolkit/img_stream.html,sha256=ZGyrUgpi-JhMl4euS-TTjwwGrg66a2pGUQCopWiveds,5135
143
143
  toolkit/index.html,sha256=agTgT1d4FH8l2h47Hfb4Lv061BW9shsCAgq1abO5hlI,10998
144
144
  toolkit/micrOSdashboard.py,sha256=SOBzGU1b-NIn40GMd2gE01Fuo8HZP5d1XyVG24RkPeA,54433
145
145
  toolkit/micrOSlint.py,sha256=HEv6q32Iy5FHx3tn_yA-iMJEeElOVNJIVN51sshv1go,25142
146
- toolkit/socketClient.py,sha256=aDKQl_I422KFoy0RcjPBIcHXgrBPwLRn9MpxuXEtUF8,18610
146
+ toolkit/socketClient.py,sha256=lZ67lpE3IcZPpVlUjxpxdYNfLuzbLY0QgzOjTpoXalg,18556
147
147
  toolkit/dashboard_apps/BackupRestore.py,sha256=udhuFpCawO0mwyiN4vFMfV8wONqHnUjYvL0udJzkq44,5897
148
148
  toolkit/dashboard_apps/CCTDemo.py,sha256=oV7k6sxepOxEa7tBNcuK5IHgKnv01sIQRPvUljic8NI,1125
149
149
  toolkit/dashboard_apps/CCTTest.py,sha256=saU4L8gOst31bno44vlwaeSzqrIBppW2DrZf2KV7_4o,3641
@@ -159,7 +159,7 @@ toolkit/dashboard_apps/RGBTest.py,sha256=QIky1Ts87h52VS9vHs3rYoEYvwFX02BlJxzK-uE
159
159
  toolkit/dashboard_apps/RoboArm.py,sha256=fqsBFTLEKXLyuZtZhbsNMNLCVtJw3gHWE-37EzjRttw,1814
160
160
  toolkit/dashboard_apps/SED_test.py,sha256=hQG8F2isZvCEsb0EvUdvcowLtJ86vrhLMOvpe9EPcJM,2703
161
161
  toolkit/dashboard_apps/SensorsTest.py,sha256=h6Sqz9HzjUawKuvxBPMltgWAycIXUUqlLANZqlF030M,1472
162
- toolkit/dashboard_apps/SystemTest.py,sha256=NaqTUWA5ub_8dHZQBrcO1n7nU95aPKVIjEn8nbaa2mI,25335
162
+ toolkit/dashboard_apps/SystemTest.py,sha256=J87ZSWP-QI5qx0EBSFZwS7f6nsZ7bhdPFaqtKfNjDcI,25740
163
163
  toolkit/dashboard_apps/Template_app.py,sha256=1OLO-xA6qNKyDCj-J7nHkA3Eis4ZKnHfhMcaSqHNX4A,758
164
164
  toolkit/dashboard_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
165
  toolkit/dashboard_apps/_app_base.py,sha256=wNurhv7AT2imsiVO3rkwPlRkss-2UQU9KsRoXjeb7rk,1007
@@ -176,7 +176,7 @@ toolkit/lib/TerminalColors.py,sha256=Ly_8o9-eBmka1dqA2M3DBlcd1zvCCO2K_BnQ1XbqxcE
176
176
  toolkit/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
177
  toolkit/lib/file_extensions.py,sha256=0DpayBGjKQg7y2ZGJXf5wVPnre_4C5j-7YIViNGvYz4,372
178
178
  toolkit/lib/macroScript.py,sha256=DQR8cFoks7fa0dgRUfGhTpEdUJWNQ1vikRoqukRKx14,14014
179
- toolkit/lib/micrOSClient.py,sha256=fLRkyOjbYQkFzcqeC3yDLa4IymarSOitbxJERa_jeHI,18752
179
+ toolkit/lib/micrOSClient.py,sha256=q1zN3nqW9t36sHqYt0fKsP61tPSC-u21-7WYqbJcO0Q,19346
180
180
  toolkit/lib/micrOSClientHistory.py,sha256=EyCqbFeMy940bfXq4Yfu8dcvb7GnBvuHHxOAIgmW1FQ,4736
181
181
  toolkit/lib/pip_package_installer.py,sha256=jpC-y1KR72_PJlqyUR6-U5b6l1szVqnIZ4nrSgUsOTM,4262
182
182
  toolkit/simulator_lib/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
@@ -273,7 +273,7 @@ toolkit/user_data/webhooks/macro.py,sha256=E_Um6fc9P6sBKvChyrKgksHmBmaFUuq_Xxy8I
273
273
  toolkit/user_data/webhooks/template.macro,sha256=XikSl3FsD6W9pUx3sqavM5tWIMBquFx9f3bh_CB8k-A,631
274
274
  toolkit/user_data/webhooks/template.py,sha256=WssXY2BDKIwvObq0SpFCjjpEGzgbLlozFTug4ANswWM,342
275
275
  toolkit/workspace/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
276
- toolkit/workspace/precompiled/Common.mpy,sha256=2bUIMJPc9AAVGtgzI_6DaNqF6T-kLyyd4Ys_yjrgI9A,2140
276
+ toolkit/workspace/precompiled/Common.mpy,sha256=30q9Yqa0QgfEaLk_Xb85XizYbBE8HPcmR-gEfkVWzDI,2151
277
277
  toolkit/workspace/precompiled/Config.mpy,sha256=A9ew69drKFA0SbfIvuTdeaXZQSvmwX0gDlnQa_8i-IE,3082
278
278
  toolkit/workspace/precompiled/Debug.mpy,sha256=OpoE-QcllAnASSnAC0V364G7zHjbYI_0jSPzPRBhWkI,1823
279
279
  toolkit/workspace/precompiled/Espnow.mpy,sha256=6201uzjatkJ9QHh7JXiLoX_mPxJCMJ90H4v6vgduc0Q,1834
@@ -286,7 +286,7 @@ toolkit/workspace/precompiled/IO_m5stamp.mpy,sha256=cn991tZyBZd4W3iO10EiLW29g8mV
286
286
  toolkit/workspace/precompiled/IO_qtpy.mpy,sha256=eHy5zmBlv3Yn6KgubYEBMWeC8OAdQRWtfJPRoppJnaE,872
287
287
  toolkit/workspace/precompiled/IO_rp2.mpy,sha256=eODuSmUmahkSp__Fb3j0M6dJdhhnC5Xq3agOMFo5pwk,60
288
288
  toolkit/workspace/precompiled/IO_tinypico.mpy,sha256=GS1NSeCBed-xLa3ZpVrk8UQONlgMgaukuH6BzTcDbFU,559
289
- toolkit/workspace/precompiled/InterConnect.mpy,sha256=tybNHMajxI6nQQOMjIHTcPSiCq2AYJE1OCZNZ15jN-c,2342
289
+ toolkit/workspace/precompiled/InterConnect.mpy,sha256=kvjpZZ4DYu-BAX2aK-Kuby-iTB9gh58CYG5HP4bTyCU,2362
290
290
  toolkit/workspace/precompiled/Interrupts.mpy,sha256=5lOWBB8qoF3YIOzNem4_9W-NWxCZsSbtGTusfUsql2E,2132
291
291
  toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy,sha256=1QPhQTw3YijVSh0pkaxCfEAjb1M5FAafyGe_J7xLUJM,878
292
292
  toolkit/workspace/precompiled/LM_L9110_DCmotor.py,sha256=sf6TtuXRrfElhm_9rbp4bPjnKGTwO3PnuXVCC5Ob7Us,1847
@@ -312,20 +312,20 @@ toolkit/workspace/precompiled/LM_genIO.mpy,sha256=F9utR5Ng-QuTq5R5ISvYPO8xASEdSn
312
312
  toolkit/workspace/precompiled/LM_haptic.mpy,sha256=46BgYkjC3AdNaJaKflFnY0oEUsd9qg6yGquX7jyFLnM,1276
313
313
  toolkit/workspace/precompiled/LM_i2c.py,sha256=WKuKxC85TKBSAT8SO4cm8OCPyceAsohHCQFTmomp8iA,1533
314
314
  toolkit/workspace/precompiled/LM_i2s_mic.mpy,sha256=lTYjVoLA8QF5JKauAY67Lugl0mhlBabwQwimO9EmOIk,3989
315
- toolkit/workspace/precompiled/LM_intercon.mpy,sha256=tmumM6s9WZquQ9dpvXb7NGBdJOC5PNniDbIXUHu5Bmo,621
315
+ toolkit/workspace/precompiled/LM_intercon.mpy,sha256=jlQECkdZ8LUGQ3yuwrW2gfjFYZhZKEVZRdAuNdWAGjA,621
316
316
  toolkit/workspace/precompiled/LM_keychain.mpy,sha256=cZVyHNny2uNsWfTNaGWBtZUr5bqQ76wEyFcxWx3Nagg,3627
317
317
  toolkit/workspace/precompiled/LM_ld2410.mpy,sha256=H7XHzLPkpyE-pRFZqBKn6M-Y5RtpNiV9prOPcmfZ6zg,2581
318
- toolkit/workspace/precompiled/LM_light_sensor.mpy,sha256=zGIj5mgDh0hTb1ih7WTjT0jNj0P-LLm6H0NlCcjqn5I,1511
318
+ toolkit/workspace/precompiled/LM_light_sensor.mpy,sha256=FQsOIOaioYpzBETO_2EM5NrOGGR15_-C44Fd5uz14eM,1538
319
319
  toolkit/workspace/precompiled/LM_neoeffects.mpy,sha256=lO0sxfiAgyASgYNjX3c_usY3TR9WeT3F2NHJkiJ182U,3091
320
320
  toolkit/workspace/precompiled/LM_neopixel.mpy,sha256=3o4Jvmc3Knr30VJ4b7JebpUsU7dBdcYBZzRD_9a4zBI,3663
321
321
  toolkit/workspace/precompiled/LM_oled.mpy,sha256=KQj4jfLwlmx2dT_GWbFzZE6FlMRPUgJvri5XbnSIod0,3154
322
322
  toolkit/workspace/precompiled/LM_oled_sh1106.mpy,sha256=0cQpu1MPkrPxvd1Fvln9c9lq9qPV6oi8iGNTZM4YbIY,3761
323
- toolkit/workspace/precompiled/LM_oled_ui.mpy,sha256=toUOIvcp8zIjsckWLMVNZK8i2KIvpLH2Xy8ORj0aPsI,6821
324
- toolkit/workspace/precompiled/LM_oledui.mpy,sha256=bSNnW6rlts7KM3YY-dTV34gG5r5zJMYvsqQorPb191E,11555
323
+ toolkit/workspace/precompiled/LM_oled_ui.mpy,sha256=nwYPXJ2Q_ogZCp1PcWlAXPzj9OlPWc82Okc1dcn-kVk,6865
324
+ toolkit/workspace/precompiled/LM_oledui.mpy,sha256=T7Fy0o_8H6h7oiVRYK43BuVb-RKZOyeJGUvHzeWHorQ,11562
325
325
  toolkit/workspace/precompiled/LM_pacman.mpy,sha256=njOwVrPKOtC4J5kRCtwV8E8hHTTTt7HzqV121HmCsxE,3507
326
326
  toolkit/workspace/precompiled/LM_pet_feeder.py,sha256=ILrozpnq2_ckkVDUROysMWRksKjflsKpIHvgHdvn-JA,2572
327
327
  toolkit/workspace/precompiled/LM_ph_sensor.py,sha256=QBVF6cHX3l9jsKcbEZprpyFtwRVLbup-_A7RmRYsdp8,1355
328
- toolkit/workspace/precompiled/LM_presence.mpy,sha256=xO3hw8VAEl7tqHM014Sb7JYOd2qr8TsLPFG-PzrAWSc,2742
328
+ toolkit/workspace/precompiled/LM_presence.mpy,sha256=vcu_qUj6oU-Cp_jepQRio3BxPe0SQFTBYkJex9JCcDM,2754
329
329
  toolkit/workspace/precompiled/LM_rencoder.py,sha256=9w00JP8UKC_GEKr18xgZ5axX9xc_wVeR9XlWpVR2Qzw,3973
330
330
  toolkit/workspace/precompiled/LM_rest.mpy,sha256=U-2Pihzos6A2xLtcE33qWW6qtoYLH2UM_ZN8LmRrexg,1036
331
331
  toolkit/workspace/precompiled/LM_rgb.mpy,sha256=o12V42r67SvMkhLMINbUVAguShK_GN7AzqmtX4fOqCE,3467
@@ -338,8 +338,8 @@ toolkit/workspace/precompiled/LM_servo.mpy,sha256=S1mH7tS6WK-vclAPQrWK46_IB2GlBZ
338
338
  toolkit/workspace/precompiled/LM_sound_event.mpy,sha256=QJ5xmKtK2sfA9lyROJRRpSAjypl10MkwLdW-QsXhRf8,7384
339
339
  toolkit/workspace/precompiled/LM_stepper.mpy,sha256=20Jpee74AjyjjMaHmgKbZvU5phcOvh8nQNSUDCAk_KE,1466
340
340
  toolkit/workspace/precompiled/LM_switch.mpy,sha256=58sjZQokfBYBZlplFQB5-t-3O-2mlsE3NXjvJ5FgD_U,2237
341
- toolkit/workspace/precompiled/LM_system.mpy,sha256=Desld_4SY-bsOHdrNTx-jjqIx809cwuVnnx68HwZSZk,2802
342
- toolkit/workspace/precompiled/LM_telegram.mpy,sha256=5Y-YrdYjBLN7gmIqlE6WhbWhA3Dak4IVd7j_FQYOQho,4877
341
+ toolkit/workspace/precompiled/LM_system.mpy,sha256=Z5f_YXa9-XFTFOjl4ndE2zTrVETFtF5oG2ht3GqcejA,2831
342
+ toolkit/workspace/precompiled/LM_telegram.mpy,sha256=NhkPz77bvvXXXJhZAsN7WbKn40fzZlHPWQIDWPe4uCs,5080
343
343
  toolkit/workspace/precompiled/LM_tinyrgb.mpy,sha256=qWR-e8DXuzmstxQlyic0YjwFaGiBBBWpf57Wyn1jjFc,1016
344
344
  toolkit/workspace/precompiled/LM_trackball.mpy,sha256=eDVf55dNJXd0Mzg1MZH0talUloPEGFNccE08vwbgn0g,3471
345
345
  toolkit/workspace/precompiled/LM_veml7700.mpy,sha256=NxOvdbrqyyhhwjm2d2dfrJK0dTK3NiP5kQ5GDXjXgq0,1953
@@ -348,11 +348,11 @@ toolkit/workspace/precompiled/Network.mpy,sha256=WtpvhGB2bvEe94dAHV40fpEyk-Fi0D6
348
348
  toolkit/workspace/precompiled/Notify.mpy,sha256=ioeDVMh9qBtACWQMASrrhGkSfp1KKUN6d2rt0NpbClo,974
349
349
  toolkit/workspace/precompiled/Scheduler.mpy,sha256=ctCj7FfXj5TchPPxe_9dmnTXWN88egtbAnmJ0N9u_1w,2202
350
350
  toolkit/workspace/precompiled/Server.mpy,sha256=dtSXLYpBcdz0DveB_S6nos46h-m6hwlQ-38G-iVQwKQ,4762
351
- toolkit/workspace/precompiled/Shell.mpy,sha256=-HCVQVnKCyKf1k-DsR_-MxN4PladJl3cMA6JwtRRxsA,4385
352
- toolkit/workspace/precompiled/Tasks.mpy,sha256=vL3tDV7Us3Wg7qtZA8ovqEsvLndOmu14GHcZF2_DtrY,6253
351
+ toolkit/workspace/precompiled/Shell.mpy,sha256=tmtwNjJdCoKqrNZfBYW7JN9jt-XS6TEf7BTtApuICDw,4620
352
+ toolkit/workspace/precompiled/Tasks.mpy,sha256=RfYvJZwvY1wAOT3CWHGTlE9B8F-nZMmKgTAc3WElF5M,6459
353
353
  toolkit/workspace/precompiled/Time.mpy,sha256=AZAtFj-l2ERKUpWgQS4gyq_XUx1ddy4ZTTgpRxbWK9M,2773
354
354
  toolkit/workspace/precompiled/Types.mpy,sha256=LssRbPgvsWuR4d2m3R7VMIvsnkVp9nN0ltwaY2wGop8,1401
355
- toolkit/workspace/precompiled/Web.mpy,sha256=RuZNz2Yfe3MGoMV09nRLUS0MQ2CoJHHBVh7FnC9dYY4,3116
355
+ toolkit/workspace/precompiled/Web.mpy,sha256=-YbLZ4LeJtsXY1o2a2V7e3JBlqi9XldMxQjnbl_ps-g,3133
356
356
  toolkit/workspace/precompiled/_mpy.version,sha256=Kik-fvRGfWAmpEjKdJLq7nPOqYR_jVgB0aiXZ8LMvMA,6
357
357
  toolkit/workspace/precompiled/dashboard.html,sha256=xBZOZ8AMO55QheuZ41Sl0Arvb44qnnai9D67A8YxlVE,2641
358
358
  toolkit/workspace/precompiled/index.html,sha256=cv0hap5bhBoRR_z1KALC3fbjH2rQZY9JJPfF-dxVclw,1656
@@ -367,8 +367,8 @@ toolkit/workspace/precompiled/urequests.mpy,sha256=-JDY-DOtJrGdwQo0-P809zZu-cJBR
367
367
  toolkit/workspace/precompiled/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
368
368
  toolkit/workspace/precompiled/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
369
369
  toolkit/workspace/precompiled/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
370
- micrOSDevToolKit-2.9.11.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
371
- micrOSDevToolKit-2.9.11.dist-info/METADATA,sha256=BqgNJ6O6FQZJclGKfkWwg2h04G8pL1_n1zVdaSVRsVY,55250
372
- micrOSDevToolKit-2.9.11.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
373
- micrOSDevToolKit-2.9.11.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
374
- micrOSDevToolKit-2.9.11.dist-info/RECORD,,
370
+ micrOSDevToolKit-2.10.2.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
371
+ micrOSDevToolKit-2.10.2.dist-info/METADATA,sha256=WM1uEW7xxmdoHqnDNsWP3skrTFhWrfT-S8yQV7LpLO0,55150
372
+ micrOSDevToolKit-2.10.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
373
+ micrOSDevToolKit-2.10.2.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
374
+ micrOSDevToolKit-2.10.2.dist-info/RECORD,,