micrOSDevToolKit 2.13.1__py3-none-any.whl → 2.17.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 (220) hide show
  1. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +125 -121
  2. micrOS/source/Common.py +48 -26
  3. micrOS/source/Config.py +13 -5
  4. micrOS/source/Espnow.py +100 -58
  5. micrOS/source/Files.py +77 -41
  6. micrOS/source/Hooks.py +18 -34
  7. micrOS/source/Logger.py +2 -7
  8. micrOS/source/Network.py +36 -16
  9. micrOS/source/Server.py +22 -8
  10. micrOS/source/Shell.py +9 -6
  11. micrOS/source/Tasks.py +34 -13
  12. micrOS/source/Web.py +69 -31
  13. micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  14. micrOS/source/__pycache__/Files.cpython-312.pyc +0 -0
  15. micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  16. micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
  17. micrOS/source/config/_git.keep +0 -0
  18. micrOS/source/micrOS.py +7 -0
  19. micrOS/source/micrOSloader.py +2 -10
  20. micrOS/source/microIO.py +2 -2
  21. micrOS/source/modules/IO_esp32c6.py +38 -0
  22. micrOS/source/modules/LM_L298N.py +161 -0
  23. micrOS/source/modules/LM_cluster.py +250 -0
  24. {toolkit/workspace/precompiled → micrOS/source/modules}/LM_esp32.py +5 -0
  25. micrOS/source/modules/LM_espnow.py +36 -0
  26. micrOS/source/{LM_i2c.py → modules/LM_i2c.py} +1 -1
  27. micrOS/source/{LM_light_sensor.py → modules/LM_light_sensor.py} +2 -2
  28. micrOS/source/modules/LM_mqtt_client.py +246 -0
  29. micrOS/source/{LM_neoeffects.py → modules/LM_neoeffects.py} +14 -4
  30. micrOS/source/{LM_neomatrix.py → modules/LM_neomatrix.py} +140 -38
  31. micrOS/source/{LM_oled_ui.py → modules/LM_oled_ui.py} +2 -2
  32. micrOS/source/{LM_oledui.py → modules/LM_oledui.py} +2 -2
  33. micrOS/source/{LM_pacman.py → modules/LM_pacman.py} +74 -29
  34. micrOS/source/{LM_presence.py → modules/LM_presence.py} +2 -2
  35. micrOS/source/{LM_robustness.py → modules/LM_robustness.py} +49 -2
  36. micrOS/source/{LM_tcs3472.py → modules/LM_tcs3472.py} +4 -6
  37. micrOS/source/web/dashboard.html +2 -0
  38. micrOS/source/web/matrix_draw.html +390 -0
  39. micrOS/source/web/uapi.js +9 -6
  40. {microsdevtoolkit-2.13.1.dist-info → microsdevtoolkit-2.17.0.dist-info}/METADATA +30 -37
  41. {microsdevtoolkit-2.13.1.dist-info → microsdevtoolkit-2.17.0.dist-info}/RECORD +200 -190
  42. toolkit/DevEnvCompile.py +21 -12
  43. toolkit/DevEnvOTA.py +27 -16
  44. toolkit/DevEnvUSB.py +35 -21
  45. toolkit/LM_to_compile.dat +3 -1
  46. toolkit/MicrOSDevEnv.py +37 -21
  47. toolkit/dashboard_apps/QMI8685_GYRO.py +1 -1
  48. toolkit/dashboard_apps/SystemTest.py +8 -5
  49. toolkit/{MicrosFiles.py → lib/MicrosFiles.py} +24 -4
  50. toolkit/micrOSdashboard.py +2 -2
  51. toolkit/micrOSlint.py +17 -7
  52. toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
  53. toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
  54. toolkit/simulator_lib/mqtt_as/Note.md +15 -0
  55. toolkit/simulator_lib/mqtt_as/__init__.py +950 -0
  56. toolkit/simulator_lib/mqtt_as/__pycache__/__init__.cpython-312.pyc +0 -0
  57. toolkit/simulator_lib/mqtt_as/clean.py +69 -0
  58. toolkit/simulator_lib/mqtt_as/mqtt_v5_properties.py +239 -0
  59. toolkit/simulator_lib/mqtt_as/range.py +90 -0
  60. toolkit/simulator_lib/mqtt_as/range_ex.py +119 -0
  61. toolkit/simulator_lib/simulator.py +14 -1
  62. toolkit/simulator_lib/uos.py +2 -0
  63. toolkit/workspace/precompiled/Common.mpy +0 -0
  64. toolkit/workspace/precompiled/Config.mpy +0 -0
  65. toolkit/workspace/precompiled/Espnow.mpy +0 -0
  66. toolkit/workspace/precompiled/Files.mpy +0 -0
  67. toolkit/workspace/precompiled/Hooks.mpy +0 -0
  68. toolkit/workspace/precompiled/Logger.mpy +0 -0
  69. toolkit/workspace/precompiled/Network.mpy +0 -0
  70. toolkit/workspace/precompiled/Server.mpy +0 -0
  71. toolkit/workspace/precompiled/Shell.mpy +0 -0
  72. toolkit/workspace/precompiled/Tasks.mpy +0 -0
  73. toolkit/workspace/precompiled/Web.mpy +0 -0
  74. toolkit/workspace/precompiled/config/_git.keep +0 -0
  75. toolkit/workspace/precompiled/micrOS.mpy +0 -0
  76. toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  77. toolkit/workspace/precompiled/microIO.mpy +0 -0
  78. toolkit/workspace/precompiled/{IO_esp32.mpy → modules/IO_esp32.mpy} +0 -0
  79. toolkit/workspace/precompiled/{IO_esp32c3.mpy → modules/IO_esp32c3.mpy} +0 -0
  80. toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
  81. toolkit/workspace/precompiled/{IO_esp32s2.mpy → modules/IO_esp32s2.mpy} +0 -0
  82. toolkit/workspace/precompiled/{IO_esp32s3.mpy → modules/IO_esp32s3.mpy} +0 -0
  83. toolkit/workspace/precompiled/{IO_m5stamp.mpy → modules/IO_m5stamp.mpy} +0 -0
  84. toolkit/workspace/precompiled/{IO_qtpy.mpy → modules/IO_qtpy.mpy} +0 -0
  85. toolkit/workspace/precompiled/modules/IO_rp2.mpy +0 -0
  86. toolkit/workspace/precompiled/modules/IO_s3matrix.mpy +0 -0
  87. toolkit/workspace/precompiled/{IO_tinypico.mpy → modules/IO_tinypico.mpy} +0 -0
  88. toolkit/workspace/precompiled/modules/LM_L298N.mpy +0 -0
  89. toolkit/workspace/precompiled/{LM_OV2640.mpy → modules/LM_OV2640.mpy} +0 -0
  90. toolkit/workspace/precompiled/{LM_aht10.mpy → modules/LM_aht10.mpy} +0 -0
  91. toolkit/workspace/precompiled/{LM_bme280.mpy → modules/LM_bme280.mpy} +0 -0
  92. toolkit/workspace/precompiled/{LM_buzzer.mpy → modules/LM_buzzer.mpy} +0 -0
  93. toolkit/workspace/precompiled/{LM_cct.mpy → modules/LM_cct.mpy} +0 -0
  94. toolkit/workspace/precompiled/modules/LM_cluster.mpy +0 -0
  95. toolkit/workspace/precompiled/{LM_co2.mpy → modules/LM_co2.mpy} +0 -0
  96. toolkit/workspace/precompiled/{LM_dht11.mpy → modules/LM_dht11.mpy} +0 -0
  97. toolkit/workspace/precompiled/{LM_dht22.mpy → modules/LM_dht22.mpy} +0 -0
  98. toolkit/workspace/precompiled/{LM_dimmer.mpy → modules/LM_dimmer.mpy} +0 -0
  99. toolkit/workspace/precompiled/{LM_distance.mpy → modules/LM_distance.mpy} +0 -0
  100. toolkit/workspace/precompiled/{LM_ds18.mpy → modules/LM_ds18.mpy} +0 -0
  101. {micrOS/source → toolkit/workspace/precompiled/modules}/LM_esp32.py +5 -0
  102. toolkit/workspace/precompiled/modules/LM_espnow.py +36 -0
  103. toolkit/workspace/precompiled/{LM_gameOfLife.mpy → modules/LM_gameOfLife.mpy} +0 -0
  104. toolkit/workspace/precompiled/{LM_genIO.mpy → modules/LM_genIO.mpy} +0 -0
  105. toolkit/workspace/precompiled/{LM_haptic.mpy → modules/LM_haptic.mpy} +0 -0
  106. toolkit/workspace/precompiled/{LM_i2c.py → modules/LM_i2c.py} +1 -1
  107. toolkit/workspace/precompiled/{LM_i2s_mic.mpy → modules/LM_i2s_mic.mpy} +0 -0
  108. toolkit/workspace/precompiled/{LM_keychain.mpy → modules/LM_keychain.mpy} +0 -0
  109. toolkit/workspace/precompiled/{LM_ld2410.mpy → modules/LM_ld2410.mpy} +0 -0
  110. toolkit/workspace/precompiled/modules/LM_light_sensor.mpy +0 -0
  111. toolkit/workspace/precompiled/modules/LM_mqtt_client.mpy +0 -0
  112. toolkit/workspace/precompiled/{LM_neoeffects.mpy → modules/LM_neoeffects.mpy} +0 -0
  113. toolkit/workspace/precompiled/modules/LM_neomatrix.mpy +0 -0
  114. toolkit/workspace/precompiled/{LM_neopixel.mpy → modules/LM_neopixel.mpy} +0 -0
  115. toolkit/workspace/precompiled/{LM_oled.mpy → modules/LM_oled.mpy} +0 -0
  116. toolkit/workspace/precompiled/{LM_oled_sh1106.mpy → modules/LM_oled_sh1106.mpy} +0 -0
  117. toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
  118. toolkit/workspace/precompiled/modules/LM_oledui.mpy +0 -0
  119. toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
  120. toolkit/workspace/precompiled/modules/LM_presence.mpy +0 -0
  121. toolkit/workspace/precompiled/{LM_rest.mpy → modules/LM_rest.mpy} +0 -0
  122. toolkit/workspace/precompiled/{LM_rgb.mpy → modules/LM_rgb.mpy} +0 -0
  123. toolkit/workspace/precompiled/{LM_rgbcct.mpy → modules/LM_rgbcct.mpy} +0 -0
  124. toolkit/workspace/precompiled/{LM_roboarm.mpy → modules/LM_roboarm.mpy} +0 -0
  125. toolkit/workspace/precompiled/{LM_robustness.py → modules/LM_robustness.py} +49 -2
  126. toolkit/workspace/precompiled/{LM_servo.mpy → modules/LM_servo.mpy} +0 -0
  127. toolkit/workspace/precompiled/{LM_sound_event.mpy → modules/LM_sound_event.mpy} +0 -0
  128. toolkit/workspace/precompiled/{LM_stepper.mpy → modules/LM_stepper.mpy} +0 -0
  129. toolkit/workspace/precompiled/{LM_switch.mpy → modules/LM_switch.mpy} +0 -0
  130. toolkit/workspace/precompiled/{LM_system.mpy → modules/LM_system.mpy} +0 -0
  131. toolkit/workspace/precompiled/{LM_tcs3472.py → modules/LM_tcs3472.py} +4 -6
  132. toolkit/workspace/precompiled/{LM_telegram.mpy → modules/LM_telegram.mpy} +0 -0
  133. toolkit/workspace/precompiled/{LM_tinyrgb.mpy → modules/LM_tinyrgb.mpy} +0 -0
  134. toolkit/workspace/precompiled/{LM_trackball.mpy → modules/LM_trackball.mpy} +0 -0
  135. toolkit/workspace/precompiled/{LM_veml7700.mpy → modules/LM_veml7700.mpy} +0 -0
  136. toolkit/workspace/precompiled/web/dashboard.html +2 -0
  137. toolkit/workspace/precompiled/web/matrix_draw.html +390 -0
  138. toolkit/workspace/precompiled/web/uapi.js +9 -6
  139. micrOS/source/IO_esp32c6.py +0 -16
  140. micrOS/source/LM_L298N_DCmotor.py +0 -86
  141. micrOS/source/LM_espnow.py +0 -57
  142. micrOS/source/LM_mqtt_pro.py +0 -211
  143. toolkit/lib/file_extensions.py +0 -22
  144. toolkit/workspace/precompiled/Common.cpython-312.pyc +0 -0
  145. toolkit/workspace/precompiled/IO_esp32c6.mpy +0 -0
  146. toolkit/workspace/precompiled/IO_rp2.mpy +0 -0
  147. toolkit/workspace/precompiled/IO_s3matrix.mpy +0 -0
  148. toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy +0 -0
  149. toolkit/workspace/precompiled/LM_espnow.py +0 -57
  150. toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
  151. toolkit/workspace/precompiled/LM_mqtt_pro.py +0 -211
  152. toolkit/workspace/precompiled/LM_neomatrix.mpy +0 -0
  153. toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
  154. toolkit/workspace/precompiled/LM_oledui.mpy +0 -0
  155. toolkit/workspace/precompiled/LM_pacman.mpy +0 -0
  156. toolkit/workspace/precompiled/LM_presence.mpy +0 -0
  157. toolkit/workspace/precompiled/Logger.cpython-312.pyc +0 -0
  158. toolkit/workspace/precompiled/Server.cpython-312.pyc +0 -0
  159. /micrOS/source/{IO_esp32.py → modules/IO_esp32.py} +0 -0
  160. /micrOS/source/{IO_esp32c3.py → modules/IO_esp32c3.py} +0 -0
  161. /micrOS/source/{IO_esp32s2.py → modules/IO_esp32s2.py} +0 -0
  162. /micrOS/source/{IO_esp32s3.py → modules/IO_esp32s3.py} +0 -0
  163. /micrOS/source/{IO_m5stamp.py → modules/IO_m5stamp.py} +0 -0
  164. /micrOS/source/{IO_qtpy.py → modules/IO_qtpy.py} +0 -0
  165. /micrOS/source/{IO_rp2.py → modules/IO_rp2.py} +0 -0
  166. /micrOS/source/{IO_s3matrix.py → modules/IO_s3matrix.py} +0 -0
  167. /micrOS/source/{IO_tinypico.py → modules/IO_tinypico.py} +0 -0
  168. /micrOS/source/{LM_L9110_DCmotor.py → modules/LM_L9110_DCmotor.py} +0 -0
  169. /micrOS/source/{LM_OV2640.py → modules/LM_OV2640.py} +0 -0
  170. /micrOS/source/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +0 -0
  171. /micrOS/source/{LM_aht10.py → modules/LM_aht10.py} +0 -0
  172. /micrOS/source/{LM_bme280.py → modules/LM_bme280.py} +0 -0
  173. /micrOS/source/{LM_buzzer.py → modules/LM_buzzer.py} +0 -0
  174. /micrOS/source/{LM_cct.py → modules/LM_cct.py} +0 -0
  175. /micrOS/source/{LM_co2.py → modules/LM_co2.py} +0 -0
  176. /micrOS/source/{LM_dashboard_be.py → modules/LM_dashboard_be.py} +0 -0
  177. /micrOS/source/{LM_dht11.py → modules/LM_dht11.py} +0 -0
  178. /micrOS/source/{LM_dht22.py → modules/LM_dht22.py} +0 -0
  179. /micrOS/source/{LM_dimmer.py → modules/LM_dimmer.py} +0 -0
  180. /micrOS/source/{LM_distance.py → modules/LM_distance.py} +0 -0
  181. /micrOS/source/{LM_ds18.py → modules/LM_ds18.py} +0 -0
  182. /micrOS/source/{LM_gameOfLife.py → modules/LM_gameOfLife.py} +0 -0
  183. /micrOS/source/{LM_genIO.py → modules/LM_genIO.py} +0 -0
  184. /micrOS/source/{LM_haptic.py → modules/LM_haptic.py} +0 -0
  185. /micrOS/source/{LM_i2s_mic.py → modules/LM_i2s_mic.py} +0 -0
  186. /micrOS/source/{LM_keychain.py → modules/LM_keychain.py} +0 -0
  187. /micrOS/source/{LM_ld2410.py → modules/LM_ld2410.py} +0 -0
  188. /micrOS/source/{LM_neopixel.py → modules/LM_neopixel.py} +0 -0
  189. /micrOS/source/{LM_oled.py → modules/LM_oled.py} +0 -0
  190. /micrOS/source/{LM_oled_sh1106.py → modules/LM_oled_sh1106.py} +0 -0
  191. /micrOS/source/{LM_pet_feeder.py → modules/LM_pet_feeder.py} +0 -0
  192. /micrOS/source/{LM_qmi8658.py → modules/LM_qmi8658.py} +0 -0
  193. /micrOS/source/{LM_rencoder.py → modules/LM_rencoder.py} +0 -0
  194. /micrOS/source/{LM_rest.py → modules/LM_rest.py} +0 -0
  195. /micrOS/source/{LM_rgb.py → modules/LM_rgb.py} +0 -0
  196. /micrOS/source/{LM_rgbcct.py → modules/LM_rgbcct.py} +0 -0
  197. /micrOS/source/{LM_roboarm.py → modules/LM_roboarm.py} +0 -0
  198. /micrOS/source/{LM_rp2w.py → modules/LM_rp2w.py} +0 -0
  199. /micrOS/source/{LM_sdcard.py → modules/LM_sdcard.py} +0 -0
  200. /micrOS/source/{LM_servo.py → modules/LM_servo.py} +0 -0
  201. /micrOS/source/{LM_sound_event.py → modules/LM_sound_event.py} +0 -0
  202. /micrOS/source/{LM_stepper.py → modules/LM_stepper.py} +0 -0
  203. /micrOS/source/{LM_switch.py → modules/LM_switch.py} +0 -0
  204. /micrOS/source/{LM_system.py → modules/LM_system.py} +0 -0
  205. /micrOS/source/{LM_telegram.py → modules/LM_telegram.py} +0 -0
  206. /micrOS/source/{LM_tinyrgb.py → modules/LM_tinyrgb.py} +0 -0
  207. /micrOS/source/{LM_trackball.py → modules/LM_trackball.py} +0 -0
  208. /micrOS/source/{LM_veml7700.py → modules/LM_veml7700.py} +0 -0
  209. {microsdevtoolkit-2.13.1.data → microsdevtoolkit-2.17.0.data}/scripts/devToolKit.py +0 -0
  210. {microsdevtoolkit-2.13.1.dist-info → microsdevtoolkit-2.17.0.dist-info}/WHEEL +0 -0
  211. {microsdevtoolkit-2.13.1.dist-info → microsdevtoolkit-2.17.0.dist-info}/licenses/LICENSE +0 -0
  212. {microsdevtoolkit-2.13.1.dist-info → microsdevtoolkit-2.17.0.dist-info}/top_level.txt +0 -0
  213. /toolkit/workspace/precompiled/{LM_L9110_DCmotor.py → modules/LM_L9110_DCmotor.py} +0 -0
  214. /toolkit/workspace/precompiled/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +0 -0
  215. /toolkit/workspace/precompiled/{LM_dashboard_be.py → modules/LM_dashboard_be.py} +0 -0
  216. /toolkit/workspace/precompiled/{LM_pet_feeder.py → modules/LM_pet_feeder.py} +0 -0
  217. /toolkit/workspace/precompiled/{LM_qmi8658.py → modules/LM_qmi8658.py} +0 -0
  218. /toolkit/workspace/precompiled/{LM_rencoder.py → modules/LM_rencoder.py} +0 -0
  219. /toolkit/workspace/precompiled/{LM_rp2w.py → modules/LM_rp2w.py} +0 -0
  220. /toolkit/workspace/precompiled/{LM_sdcard.py → modules/LM_sdcard.py} +0 -0
@@ -1,43 +1,43 @@
1
1
  {
2
2
  "files": {
3
3
  "Time.py": [
4
- 9.26,
4
+ 9.34,
5
5
  6
6
6
  ],
7
7
  "Files.py": [
8
- 9.38,
9
- 8
8
+ 9.64,
9
+ 10
10
10
  ],
11
11
  "micrOSloader.py": [
12
- 7.33,
12
+ 7.12,
13
13
  1
14
14
  ],
15
15
  "Hooks.py": [
16
- 9.67,
16
+ 9.62,
17
17
  1
18
18
  ],
19
19
  "Server.py": [
20
- 9.51,
20
+ 9.53,
21
21
  3
22
22
  ],
23
23
  "Web.py": [
24
- 9.64,
24
+ 9.61,
25
25
  1
26
26
  ],
27
27
  "Tasks.py": [
28
- 9.38,
28
+ 9.43,
29
29
  12
30
30
  ],
31
31
  "Config.py": [
32
- 9.48,
33
- 18
32
+ 9.43,
33
+ 19
34
34
  ],
35
35
  "reset.py": [
36
36
  10.0,
37
37
  0
38
38
  ],
39
39
  "Shell.py": [
40
- 9.36,
40
+ 9.37,
41
41
  1
42
42
  ],
43
43
  "Notify.py": [
@@ -49,12 +49,12 @@
49
49
  28
50
50
  ],
51
51
  "Logger.py": [
52
- 9.05,
52
+ 8.84,
53
53
  4
54
54
  ],
55
55
  "Common.py": [
56
- 9.74,
57
- 34
56
+ 9.85,
57
+ 35
58
58
  ],
59
59
  "InterConnect.py": [
60
60
  9.41,
@@ -62,15 +62,15 @@
62
62
  ],
63
63
  "Debug.py": [
64
64
  7.37,
65
- 18
65
+ 17
66
66
  ],
67
67
  "Network.py": [
68
- 9.71,
68
+ 9.81,
69
69
  8
70
70
  ],
71
71
  "Espnow.py": [
72
- 9.57,
73
- 2
72
+ 9.5,
73
+ 3
74
74
  ],
75
75
  "Scheduler.py": [
76
76
  9.62,
@@ -78,10 +78,10 @@
78
78
  ],
79
79
  "microIO.py": [
80
80
  9.44,
81
- 43
81
+ 44
82
82
  ],
83
83
  "micrOS.py": [
84
- 9.27,
84
+ 9.3,
85
85
  1
86
86
  ],
87
87
  "Interrupts.py": [
@@ -93,238 +93,242 @@
93
93
  0
94
94
  ],
95
95
  "urequests.py": [
96
- 9.31,
96
+ 9.65,
97
97
  5
98
98
  ],
99
- "LM_roboarm.py": [
99
+ "modules/LM_roboarm.py": [
100
100
  7.78,
101
101
  0
102
102
  ],
103
- "LM_stepper.py": [
103
+ "modules/LM_stepper.py": [
104
104
  8.9,
105
- 1
105
+ 0
106
+ ],
107
+ "modules/LM_L298N.py": [
108
+ 8.25,
109
+ 0
106
110
  ],
107
- "LM_pacman.py": [
108
- 8.92,
111
+ "modules/LM_pacman.py": [
112
+ 7.95,
109
113
  0
110
114
  ],
111
- "LM_genIO.py": [
115
+ "modules/LM_genIO.py": [
112
116
  9.12,
113
117
  0
114
118
  ],
115
- "LM_oled_ui.py": [
116
- 8.73,
119
+ "modules/LM_oled_ui.py": [
120
+ 8.78,
117
121
  0
118
122
  ],
119
- "LM_system.py": [
120
- 8.36,
121
- 5
123
+ "modules/LM_system.py": [
124
+ 8.45,
125
+ 0
122
126
  ],
123
- "LM_robustness.py": [
124
- 7.57,
127
+ "modules/LM_robustness.py": [
128
+ 8.36,
125
129
  0
126
130
  ],
127
- "LM_qmi8658.py": [
131
+ "modules/LM_qmi8658.py": [
128
132
  9.1,
129
133
  0
130
134
  ],
131
- "LM_co2.py": [
135
+ "modules/LM_co2.py": [
132
136
  8.5,
133
137
  0
134
138
  ],
135
- "LM_rest.py": [
139
+ "modules/LM_rest.py": [
136
140
  8.18,
137
141
  0
138
142
  ],
139
- "LM_tcs3472.py": [
140
- 9.02,
143
+ "modules/LM_tcs3472.py": [
144
+ 9.0,
141
145
  0
142
146
  ],
143
- "LM_oled.py": [
144
- 9.23,
145
- 4
147
+ "modules/LM_oled.py": [
148
+ 9.37,
149
+ 0
146
150
  ],
147
- "LM_tinyrgb.py": [
151
+ "modules/LM_tinyrgb.py": [
148
152
  7.95,
149
153
  0
150
154
  ],
151
- "LM_aht10.py": [
155
+ "modules/LM_aht10.py": [
152
156
  8.79,
153
157
  0
154
158
  ],
155
- "LM_bme280.py": [
159
+ "modules/LM_bme280.py": [
156
160
  8.09,
157
161
  0
158
162
  ],
159
- "LM_buzzer.py": [
163
+ "modules/LM_buzzer.py": [
160
164
  9.11,
161
165
  0
162
166
  ],
163
- "LM_switch.py": [
167
+ "modules/LM_switch.py": [
164
168
  8.68,
165
- 1
169
+ 0
166
170
  ],
167
- "LM_servo.py": [
171
+ "modules/LM_servo.py": [
168
172
  7.73,
169
- 2
173
+ 0
170
174
  ],
171
- "LM_rgbcct.py": [
175
+ "modules/LM_rgbcct.py": [
172
176
  8.62,
173
177
  0
174
178
  ],
175
- "LM_oled_sh1106.py": [
176
- 8.89,
177
- 2
179
+ "modules/LM_oled_sh1106.py": [
180
+ 9.2,
181
+ 0
178
182
  ],
179
- "LM_haptic.py": [
183
+ "modules/LM_haptic.py": [
180
184
  9.25,
181
- 1
185
+ 0
182
186
  ],
183
- "LM_ld2410.py": [
187
+ "modules/LM_ld2410.py": [
184
188
  9.07,
185
189
  0
186
190
  ],
187
- "LM_neopixel.py": [
188
- 7.66,
189
- 2
191
+ "modules/LM_neopixel.py": [
192
+ 7.78,
193
+ 0
190
194
  ],
191
- "LM_cct.py": [
195
+ "modules/LM_cct.py": [
192
196
  9.04,
193
- 1
197
+ 0
194
198
  ],
195
- "LM_L9110_DCmotor.py": [
199
+ "modules/LM_L9110_DCmotor.py": [
196
200
  7.69,
197
201
  0
198
202
  ],
199
- "LM_neoeffects.py": [
200
- 9.09,
203
+ "modules/LM_neoeffects.py": [
204
+ 9.08,
201
205
  0
202
206
  ],
203
- "LM_i2c.py": [
207
+ "modules/LM_i2c.py": [
204
208
  7.6,
205
209
  0
206
210
  ],
207
- "LM_dht22.py": [
211
+ "modules/LM_dht22.py": [
208
212
  7.94,
209
213
  0
210
214
  ],
211
- "LM_L298N_DCmotor.py": [
212
- 8.78,
213
- 0
214
- ],
215
- "LM_esp32.py": [
215
+ "modules/LM_esp32.py": [
216
216
  6.52,
217
- 1
217
+ 0
218
218
  ],
219
- "LM_veml7700.py": [
219
+ "modules/LM_veml7700.py": [
220
220
  7.62,
221
221
  0
222
222
  ],
223
- "LM_pet_feeder.py": [
223
+ "modules/LM_pet_feeder.py": [
224
224
  7.94,
225
225
  0
226
226
  ],
227
- "LM_rencoder.py": [
227
+ "modules/LM_rencoder.py": [
228
228
  8.65,
229
229
  0
230
230
  ],
231
- "LM_keychain.py": [
231
+ "modules/LM_keychain.py": [
232
232
  9.17,
233
233
  0
234
234
  ],
235
- "LM_dht11.py": [
235
+ "modules/LM_dht11.py": [
236
236
  7.94,
237
237
  0
238
238
  ],
239
- "LM_sound_event.py": [
240
- 8.49,
239
+ "modules/LM_sound_event.py": [
240
+ 8.52,
241
241
  0
242
242
  ],
243
- "LM_oledui.py": [
244
- 8.34,
243
+ "modules/LM_cluster.py": [
244
+ 8.87,
245
+ 0
246
+ ],
247
+ "modules/LM_oledui.py": [
248
+ 8.7,
245
249
  0
246
250
  ],
247
- "LM_espnow.py": [
248
- 7.89,
251
+ "modules/LM_espnow.py": [
252
+ 6.0,
249
253
  0
250
254
  ],
251
- "LM_telegram.py": [
255
+ "modules/LM_telegram.py": [
252
256
  9.58,
253
257
  0
254
258
  ],
255
- "LM_OV2640.py": [
256
- 9.19,
259
+ "modules/LM_OV2640.py": [
260
+ 9.27,
257
261
  0
258
262
  ],
259
- "LM_rgb.py": [
260
- 8.95,
261
- 1
263
+ "modules/LM_rgb.py": [
264
+ 9.01,
265
+ 0
262
266
  ],
263
- "LM_distance.py": [
267
+ "modules/LM_distance.py": [
264
268
  8.87,
265
269
  0
266
270
  ],
267
- "LM_VL53L0X.py": [
271
+ "modules/LM_VL53L0X.py": [
268
272
  9.07,
269
273
  0
270
274
  ],
271
- "LM_light_sensor.py": [
275
+ "modules/LM_light_sensor.py": [
272
276
  9.17,
273
277
  0
274
278
  ],
275
- "LM_rp2w.py": [
279
+ "modules/LM_rp2w.py": [
276
280
  4.44,
277
281
  0
278
282
  ],
279
- "LM_presence.py": [
283
+ "modules/LM_presence.py": [
280
284
  8.9,
281
- 4
285
+ 0
282
286
  ],
283
- "LM_mqtt_pro.py": [
284
- 9.44,
287
+ "modules/LM_trackball.py": [
288
+ 8.6,
285
289
  0
286
290
  ],
287
- "LM_trackball.py": [
288
- 8.49,
289
- 1
291
+ "modules/LM_mqtt_client.py": [
292
+ 8.45,
293
+ 0
290
294
  ],
291
- "LM_dashboard_be.py": [
295
+ "modules/LM_dashboard_be.py": [
292
296
  6.5,
293
297
  0
294
298
  ],
295
- "LM_dimmer.py": [
299
+ "modules/LM_dimmer.py": [
296
300
  8.33,
297
- 1
301
+ 0
298
302
  ],
299
- "LM_gameOfLife.py": [
303
+ "modules/LM_gameOfLife.py": [
300
304
  9.29,
301
- 3
305
+ 0
302
306
  ],
303
- "LM_ds18.py": [
307
+ "modules/LM_ds18.py": [
304
308
  6.0,
305
- 2
309
+ 0
306
310
  ],
307
- "LM_i2s_mic.py": [
308
- 8.37,
309
- 2
311
+ "modules/LM_i2s_mic.py": [
312
+ 8.43,
313
+ 0
310
314
  ],
311
- "LM_sdcard.py": [
315
+ "modules/LM_sdcard.py": [
312
316
  7.88,
313
317
  0
314
318
  ],
315
- "LM_neomatrix.py": [
316
- 8.8,
319
+ "modules/LM_neomatrix.py": [
320
+ 8.75,
317
321
  0
318
322
  ]
319
323
  },
320
324
  "summary": {
321
325
  "core": [
322
- 3751,
326
+ 3923,
323
327
  24
324
328
  ],
325
329
  "load": [
326
- 9449,
327
- 55
330
+ 9871,
331
+ 56
328
332
  ],
329
333
  "core_dep": [
330
334
  true,
@@ -332,10 +336,10 @@
332
336
  ],
333
337
  "load_dep": [
334
338
  true,
335
- 5
339
+ 4
336
340
  ],
337
- "core_score": 9.23,
338
- "load_score": 8.39,
339
- "version": "2.13.0-0"
341
+ "core_score": 9.24,
342
+ "load_score": 8.35,
343
+ "version": "2.17.0-0"
340
344
  }
341
345
  }
micrOS/source/Common.py CHANGED
@@ -7,7 +7,7 @@ from Debug import syslog as debug_syslog, console_write
7
7
  from Logger import logger, log_get
8
8
  from Files import OSPath, path_join
9
9
  from microIO import resolve_pin
10
- from Tasks import TaskBase, Manager, lm_exec
10
+ from Tasks import TaskBase, Manager, lm_exec, lm_is_loaded
11
11
  from machine import Pin, ADC
12
12
  from Notify import Notify
13
13
 
@@ -15,27 +15,48 @@ from Notify import Notify
15
15
  #####################################################################################
16
16
  # SYSTEM #
17
17
  #####################################################################################
18
-
19
- def micro_task(tag:str, task=None):
18
+ def micro_task(tag: str, task=None, _wrap=False):
20
19
  """
21
20
  [LM] Async task manager.
22
- :param tag: task tag string
23
- :param task: coroutine (or list of command arguments) to contract a task with the given async task callback
24
- return bool|callable
21
+ Modes:
22
+ A) GET:
23
+ micro_task("tag") -> existing task object or None
24
+ B) CREATE:
25
+ micro_task("tag", task=...) -> True | None | False
26
+ Creates a new async task with the given tag if not already running.
27
+ C) CREATE AS DECORATOR (shortcut):
28
+ @micro_task("main", _wrap=True)
29
+ async def mytask(tag, ...): ...
30
+ # Calling mytask(...) will create/start a new task under "main._mytask"
31
+
32
+ :param tag: Task tag string
33
+ :param task: Coroutine (or list of command arguments) to contract a task with
34
+ the given async task callback
35
+ :param _wrap: When True, return a decorator factory (for use as @micro_task(...))
36
+ :return: Task object (GET), bool|None|False (CREATE), or decorator (DECORATOR)
25
37
  """
26
- if task is None:
27
- # [1] Task is None -> Get task mode by tag
28
- # RETURN task obj (access obj.out + obj.done (automatic - with keyword arg))
29
- async_task = TaskBase.TASKS.get(tag, None)
30
- return async_task
31
- if TaskBase.is_busy(tag):
32
- # [2] Shortcut: Check task state by tag
33
- # RETURN: None - if task is already running
34
- return None
35
- # [3] Create task (not running) + task coroutine was provided
36
- # RETURN task creation state - success (True) / fail (False)
37
- state:bool = Manager().create_task(callback=task, tag=tag)
38
- return state
38
+ # --- CREATE (original) ---
39
+ if task is not None:
40
+ if TaskBase.is_busy(tag):
41
+ return None # task already running
42
+ return Manager().create_task(callback=task, tag=tag)
43
+
44
+ # --- CREATE WITH DECORATOR FACTORY (simplified) ---
45
+ if _wrap:
46
+ def _decorator(async_fn):
47
+ task_tag = f"{tag}._{async_fn.__name__}"
48
+ _launcher = (
49
+ lambda *args, **kwargs:
50
+ None if TaskBase.is_busy(task_tag)
51
+ else Manager().create_task(
52
+ callback=async_fn(task_tag, *args, **kwargs),
53
+ tag=task_tag)
54
+ )
55
+ return _launcher
56
+ return _decorator
57
+
58
+ # --- GET (_wrap=False): return task object or None if not existing ---
59
+ return TaskBase.TASKS.get(tag, None)
39
60
 
40
61
 
41
62
  def manage_task(tag:str, operation:str):
@@ -44,9 +65,6 @@ def manage_task(tag:str, operation:str):
44
65
  :param tag: task tag
45
66
  :param operation: kill / show / isbusy
46
67
  """
47
- if Manager is None:
48
- # RETURN: None - cannot utilize async task functionality
49
- return None
50
68
  if operation == "show":
51
69
  return str(Manager().show(tag=tag))
52
70
  if operation == "kill":
@@ -56,14 +74,16 @@ def manage_task(tag:str, operation:str):
56
74
  raise Exception(f"Invalid operation: {operation}")
57
75
 
58
76
 
59
- def exec_cmd(cmd:list, jsonify:bool=None, skip_check=None):
77
+ def exec_cmd(cmd:list, jsonify:bool=None, secure=False):
60
78
  """
61
79
  [LM] Single (sync) LM execution
62
80
  :param cmd: command string list, ex.: ['system', 'clock']
63
81
  :param jsonify: request json output
64
- :param skip_check: legacy (check was removed) - remove parameter
82
+ :param secure: check LM is loaded, if NOT skip execution 'NotAllowed'
65
83
  return state, output
66
84
  """
85
+ if secure and not lm_is_loaded(cmd[0]):
86
+ return False, f"NotAllowed {cmd[0]}"
67
87
  return lm_exec(cmd, jsonify=jsonify)
68
88
 
69
89
 
@@ -87,7 +107,7 @@ def notify(text=None) -> bool:
87
107
  return False
88
108
 
89
109
 
90
- def web_endpoint(endpoint, function) -> bool:
110
+ def web_endpoint(endpoint, function, method='GET', auto_enable=True) -> bool:
91
111
  """
92
112
  [LM] Add test endpoint <localhost.local>/endpoint from Load Modules
93
113
  :param endpoint: simple string, name of the endpoint
@@ -98,8 +118,10 @@ def web_endpoint(endpoint, function) -> bool:
98
118
  [2] Stream function return tuple (multipart_type, data):
99
119
  multipart/x-mixed-replace | multipart/form-data, <data>
100
120
  <data>: {'callback':<func>, 'content-type': image/jpeg | audio/l16;*}
121
+ :param method: HTTP method name
122
+ :param auto_enable: if True will enable webui (if disabled) when register endpoint
101
123
  """
102
- WebCli.register(endpoint=endpoint, callback=function)
124
+ WebCli.register(endpoint=endpoint, callback=function, method=method, auto_enable=auto_enable)
103
125
  return True
104
126
 
105
127
 
micrOS/source/Config.py CHANGED
@@ -17,10 +17,12 @@ from json import load, dump
17
17
  from uos import remove
18
18
  from utime import sleep
19
19
  from Debug import DebugCfg, console_write, syslog
20
+ from Files import OSPath, path_join, is_file
21
+ from uos import rename as move_file
20
22
  try:
21
23
  from microIO import set_pinmap
22
24
  except:
23
- syslog("[ERR] LogicalPins import: set_pinmap")
25
+ syslog("[ERR] microIO import: set_pinmap")
24
26
  set_pinmap = None
25
27
 
26
28
 
@@ -30,7 +32,8 @@ class Data:
30
32
  """
31
33
  __slots__ = []
32
34
 
33
- CONFIG_PATH = "node_config.json"
35
+ CONFIG_NAME = "node_config.json"
36
+ CONFIG_PATH = path_join(OSPath.CONFIG, CONFIG_NAME)
34
37
  CONFIG_CACHE = {"version": "n/a",
35
38
  "auth": False,
36
39
  "staessid": "your_wifi_name",
@@ -73,10 +76,14 @@ class Data:
73
76
 
74
77
  @staticmethod
75
78
  def init():
79
+ # Migrate config from / to /config
80
+ if is_file(Data.CONFIG_NAME):
81
+ console_write(f"[CONF] Migrate {Data.CONFIG_NAME} to {Data.CONFIG_PATH}")
82
+ move_file(Data.CONFIG_NAME, Data.CONFIG_PATH)
76
83
  # Inject user config into template
77
84
  Data.__inject_default_conf()
78
85
  # [!!!] Init selected pinmap - default pinmap calculated by platform
79
- if set_pinmap is not None:
86
+ if callable(set_pinmap):
80
87
  pinmap = set_pinmap(Data.CONFIG_CACHE['cstmpmap'])
81
88
  console_write(f"[PIN MAP] {pinmap}")
82
89
  # SET dbg based on config settings (inject user conf)
@@ -171,16 +178,17 @@ class Data:
171
178
  These kind of parameters are not cached in memory
172
179
  """
173
180
  # Write str value to file
181
+ offloaded_key = path_join(OSPath.CONFIG, f'.{key}.key')
174
182
  if isinstance(value, str) and key in Data.CONFIG_CACHE:
175
183
  try:
176
- with open(f'.{key}.key', 'w') as f:
184
+ with open(offloaded_key, 'w') as f:
177
185
  f.write(value)
178
186
  return True
179
187
  except Exception:
180
188
  return False
181
189
  # Read str value from file
182
190
  try:
183
- with open(f'.{key}.key', 'r') as f:
191
+ with open(offloaded_key, 'r') as f:
184
192
  return f.read().strip()
185
193
  except Exception:
186
194
  # Return default value if key not exists