micrOSDevToolKit 2.10.2__py3-none-any.whl → 2.10.5__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 (34) hide show
  1. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +26 -18
  2. micrOS/source/Common.py +2 -2
  3. micrOS/source/Espnow.py +245 -123
  4. micrOS/source/Files.py +101 -0
  5. micrOS/source/LM_espnow.py +10 -7
  6. micrOS/source/LM_mqtt_pro.py +211 -0
  7. micrOS/source/LM_pacman.py +37 -57
  8. micrOS/source/LM_system.py +1 -1
  9. micrOS/source/Logger.py +5 -11
  10. micrOS/source/Shell.py +23 -19
  11. micrOS/source/Tasks.py +2 -2
  12. micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  13. micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  14. micrOS/source/microIO.py +3 -2
  15. micrOS/source/urequests.py +10 -1
  16. {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info}/METADATA +3 -2
  17. {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info}/RECORD +34 -30
  18. {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info}/WHEEL +1 -1
  19. toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
  20. toolkit/simulator_lib/uos.py +5 -5
  21. toolkit/workspace/precompiled/Espnow.mpy +0 -0
  22. toolkit/workspace/precompiled/Files.mpy +0 -0
  23. toolkit/workspace/precompiled/LM_espnow.py +10 -7
  24. toolkit/workspace/precompiled/LM_mqtt_pro.py +211 -0
  25. toolkit/workspace/precompiled/LM_pacman.mpy +0 -0
  26. toolkit/workspace/precompiled/LM_system.mpy +0 -0
  27. toolkit/workspace/precompiled/Logger.mpy +0 -0
  28. toolkit/workspace/precompiled/Shell.mpy +0 -0
  29. toolkit/workspace/precompiled/Tasks.mpy +0 -0
  30. toolkit/workspace/precompiled/microIO.mpy +0 -0
  31. toolkit/workspace/precompiled/urequests.mpy +0 -0
  32. {micrOSDevToolKit-2.10.2.data → microsdevtoolkit-2.10.5.data}/scripts/devToolKit.py +0 -0
  33. {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info/licenses}/LICENSE +0 -0
  34. {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info}/top_level.txt +0 -0
@@ -197,10 +197,19 @@ async def arequest(method:str, url:str, data:str=None, json=None, headers:dict=N
197
197
  addr = _host_to_addr(host, port)
198
198
  reader, writer = None, None
199
199
 
200
+ # Open a connection
200
201
  try:
201
- # Open a connection
202
202
  reader, writer = await asyncio.open_connection(addr[0], port, ssl=(proto == 'https:'))
203
+ except Exception as e:
204
+ # Refresh host address & reconnect
205
+ if "EHOSTUNREACH" in str(e):
206
+ addr = _host_to_addr(host, port, force=True)
207
+ reader, writer = await asyncio.open_connection(addr[0], port, ssl=(proto == 'https:'))
208
+ else:
209
+ errlog_add(f"[ERR] arequest connection: {e}")
203
210
 
211
+ # Send request + Wait for the response
212
+ try:
204
213
  # Build the HTTP request
205
214
  http_request = _build_request(host, method, path, headers, data, json)
206
215
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: micrOSDevToolKit
3
- Version: 2.10.2
3
+ Version: 2.10.5
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
@@ -31,6 +31,7 @@ Dynamic: description
31
31
  Dynamic: description-content-type
32
32
  Dynamic: home-page
33
33
  Dynamic: license
34
+ Dynamic: license-file
34
35
  Dynamic: project-url
35
36
  Dynamic: requires-dist
36
37
  Dynamic: summary
@@ -32,12 +32,13 @@ 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=zhIWl4uMC9VNiTB0WY2zylxxXdjSfWyH3DvWPFQIK2Y,5759
35
+ micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=rX6vm06dC1ZSH5RD7vBHZIgbxgZ208wRyOdAUtl52GM,5895
36
36
  micrOS/source/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
37
- micrOS/source/Common.py,sha256=LEdYxNT7M5aVEIyx0nPoODOYgsVsY7Japxe9diZpU5A,8020
37
+ micrOS/source/Common.py,sha256=NUXz03yaFCw7qqc_7vBbQ6izcKil2iZgPCXVSkoG0w4,8051
38
38
  micrOS/source/Config.py,sha256=E3OTMRI1_T94GMADcvG7MKiuGsKsnbLn17KXHcjhqXM,8795
39
39
  micrOS/source/Debug.py,sha256=_7HZzZ2OKJrcNqeYsG1ZykBa6iN8YTj-K5FFXlEAcRw,5300
40
- micrOS/source/Espnow.py,sha256=_D9XYTT0gQBEWTLzBLCLCbHdFDwjHyMMO94YPtEJlsQ,5510
40
+ micrOS/source/Espnow.py,sha256=WrqzX4RQwJbzCouYMaMLjMD-23f5CDrCN6phpc2gdrU,10481
41
+ micrOS/source/Files.py,sha256=HaHf9_-WD5JgxrzR-eTY_ty0xkLXxv5TgpoTAL9MLeg,3499
41
42
  micrOS/source/Hooks.py,sha256=GyFAVpWJPEnRsqhoGMnmXJNTgFRE6S3mGKfKX6-TvQg,3582
42
43
  micrOS/source/IO_esp32.py,sha256=9gTrdLiySmoacLvCy-DRAplkSZFzJU-9j54DX6YwB0s,2505
43
44
  micrOS/source/IO_esp32c3.py,sha256=YicJTmnh1sHTioyBAZlKcoO4YSuj6CptUnaEGq8MTNQ,1468
@@ -67,7 +68,7 @@ micrOS/source/LM_dimmer.py,sha256=Jhpeh0Kq7Dnt9nA8PVobENbsf1x-U7rOv9EGGdhC_30,83
67
68
  micrOS/source/LM_distance.py,sha256=iVqQchaUOvK8Ilzr7qMi-ESvS_U8RsBwdqNHY_4qZ-c,4394
68
69
  micrOS/source/LM_ds18.py,sha256=mLaH97j8d4lUXcjS8hNtwU8hL5Ybt-Q1WuoiWPnk5Ho,1807
69
70
  micrOS/source/LM_esp32.py,sha256=yUIMWsfimCAhgyV4pT4sh-kqE_mDL83cmAZji_2uFpI,1738
70
- micrOS/source/LM_espnow.py,sha256=Tto5JGnhbqyKT0hzDlJ_G-o_34dVf0CIaiMPbP-xbHU,1070
71
+ micrOS/source/LM_espnow.py,sha256=hlhSHXB8gI8fdPru-UKplpzg1Gpc20ctmG5Ex4ds06c,1198
71
72
  micrOS/source/LM_gameOfLife.py,sha256=Mvr_S5zsJ6x_pMCGrkdgl5QdejNQjAF9mBYLN5-OA38,7685
72
73
  micrOS/source/LM_genIO.py,sha256=rTiFByly8ImjHBgc2RceGczGp1rzti7Juz_Vvg5hrtc,5013
73
74
  micrOS/source/LM_haptic.py,sha256=W0WiuOCxIu9RB-pWu8r8fvHmvuseet1UI7RSc9WO8zo,2862
@@ -77,13 +78,14 @@ micrOS/source/LM_intercon.py,sha256=QFXeYlrgpVeBPOjrhgWk6IWH-MM1-hPjsf-JSXn7vgk,
77
78
  micrOS/source/LM_keychain.py,sha256=-GN-Xzoour2vjg5MyZtmbcxo8LdSn6dYrk1wSliNQh4,12695
78
79
  micrOS/source/LM_ld2410.py,sha256=dWBsIkI0ryomn0zDrmz5YxaGcoH5TqjAsi2qwGd8UZM,6524
79
80
  micrOS/source/LM_light_sensor.py,sha256=xzsPmiLQHx5v8pyNQC0UNXFa76qsV-CqFACY7UZmVKk,4561
81
+ micrOS/source/LM_mqtt_pro.py,sha256=Vma1efLJ9Z9MrDd0qSrfJdoAxcaPfxdnqNjMIkHoHzY,7847
80
82
  micrOS/source/LM_neoeffects.py,sha256=kfReEz9pTB0GRSat6--86PZtjfiT_S9ilfb-igt-bbg,10929
81
83
  micrOS/source/LM_neopixel.py,sha256=4TWwlmW6bnnmS76fVZVri6bI2zPXbiPJ9spEtA7NTjE,13260
82
84
  micrOS/source/LM_oled.py,sha256=ZwLndxWuY1Ii5d06YEf9Z_jxmTyoOYRL-BO3VhJ0b14,9903
83
85
  micrOS/source/LM_oled_sh1106.py,sha256=av2_ftFHvfAIxcPYHbrOMQNZgM1Go6MQzBu5cIeVK4w,11723
84
86
  micrOS/source/LM_oled_ui.py,sha256=65OwlWD4X4b3r64XalDTdp0fNakWY1jpnIZvNBoSyno,21655
85
87
  micrOS/source/LM_oledui.py,sha256=ym502-2eNN_e9qCysBjszrfPYdJek-izf2W2UyF_g1g,35429
86
- micrOS/source/LM_pacman.py,sha256=k_R0X0YGkRc6-NoF5fvqng7lD5RNmV-rsVa-uBcrleE,8227
88
+ micrOS/source/LM_pacman.py,sha256=qXPXPNW-t3CsljP9vj0nUtwu_f384C0XXD-buWy8uRU,7507
87
89
  micrOS/source/LM_pet_feeder.py,sha256=ILrozpnq2_ckkVDUROysMWRksKjflsKpIHvgHdvn-JA,2572
88
90
  micrOS/source/LM_ph_sensor.py,sha256=QBVF6cHX3l9jsKcbEZprpyFtwRVLbup-_A7RmRYsdp8,1355
89
91
  micrOS/source/LM_presence.py,sha256=xHB-U_Ywp6F-DEOFlYmjx0QFFQGwKgh8RS77r805YhQ,8830
@@ -99,18 +101,18 @@ micrOS/source/LM_servo.py,sha256=83YPK5qlHuEOo3jTn5wXRsvPzzJPp0ZtCW-BhHHMBK0,348
99
101
  micrOS/source/LM_sound_event.py,sha256=9BZnrT8Jc2HL-28yVZE5sdeTa8Biq1qkQiTJsTw8y08,27500
100
102
  micrOS/source/LM_stepper.py,sha256=CkI4QBe2KJ7E5DKL7Z23oAMPDUFlUt7btAvqrn4H6Kg,4278
101
103
  micrOS/source/LM_switch.py,sha256=uxw2opz41OpBiBfb5ioojsUzPsETnkinkDXI4NRHMZs,7819
102
- micrOS/source/LM_system.py,sha256=p_QvbigWe1Pp8Vdjm_ebi1EW6mFG18lB6L8mP9rYTwM,6588
104
+ micrOS/source/LM_system.py,sha256=-URoeSdNZkv4veJlxlsj7JrEHbMKFfXlImwZpGUnm-4,6579
103
105
  micrOS/source/LM_telegram.py,sha256=DY4WEzthGExQ0A6iE6LCMYrXaMLAjsU5OsmY92X3kgg,15153
104
106
  micrOS/source/LM_tinyrgb.py,sha256=kChL607HPTl3Z2hYN2XnzXXfZ6omdP78PQutHdbdfCo,3031
105
107
  micrOS/source/LM_trackball.py,sha256=N2hhy3wuk55-ja4dmENpfthBolIEj28d2pzcjel5OKg,9716
106
108
  micrOS/source/LM_veml7700.py,sha256=3eb6-HuMA_tYBA0cJHUsZzOBriHacIpVSrK-1iB3_pY,5762
107
- micrOS/source/Logger.py,sha256=CtmjmQc9hzCystEzY0AtopjRnSy5T6AdWwpj2KTmGWg,3942
109
+ micrOS/source/Logger.py,sha256=Lk6pGZQeafidnfJd0_k1v1VZuXEW9t9km8tNuzk_Ixk,3818
108
110
  micrOS/source/Network.py,sha256=wLhAPiRyi376TKJA7tzCQidDBHq-AbZGGp7JabHIyl8,9417
109
111
  micrOS/source/Notify.py,sha256=jVf7wg7b7ehuh12A8tlYz5ZU00NQEgpVuTK0lN6cNcY,2645
110
112
  micrOS/source/Scheduler.py,sha256=K6fw807UJnOmbfzgeJQGzGbTL4s2sTIB120ZcS5qrLs,9648
111
113
  micrOS/source/Server.py,sha256=HMkHWofMmtpTQtKiGy_Gh6R2xHy4Vpud_aT2zhC4l58,16245
112
- micrOS/source/Shell.py,sha256=hgvP41HinmQKBW7cbiit9jkNZcTyZ6jucJnoO6htxGo,12896
113
- micrOS/source/Tasks.py,sha256=dl5Vol9WY5bnmsPr-DdLCn1So2W9mStHw16F-JeYPww,23244
114
+ micrOS/source/Shell.py,sha256=vjMTXsDFyRhAs8En-BpQqvTAWQ5Qb8NfQvOt3bTYRSQ,13101
115
+ micrOS/source/Tasks.py,sha256=Y7F3ouNL_4TKAOJPNm5_b-_DWCKMadhm9YPzoextPVM,23262
114
116
  micrOS/source/Time.py,sha256=vTl8-sL-iO4l9eZMVCHTJ6oUwfhPiB1VHXTrrg-l59Y,6344
115
117
  micrOS/source/Types.py,sha256=3O_Vb1jN92RPtvgbV8ui6_iFzDOD-BUzVXlPB7PgmM4,3507
116
118
  micrOS/source/Web.py,sha256=KxRc6zt_8acAJyL9uv2JW2c27qtzYgi673ob0kxfxpE,8933
@@ -119,18 +121,19 @@ micrOS/source/index.html,sha256=cv0hap5bhBoRR_z1KALC3fbjH2rQZY9JJPfF-dxVclw,1656
119
121
  micrOS/source/main.py,sha256=cVlhoWwU9dSKEol0HWPihFAPzrUUvzSGwZNNMrpyfSY,440
120
122
  micrOS/source/micrOS.py,sha256=3PQR7_xNLsI7KJtPJQUudIgpL2JIe7pctCjXH-bwFtA,2556
121
123
  micrOS/source/micrOSloader.py,sha256=IgiQgUm97raQB0yHxUjQtvXSjsCdA_1OwSkRwwNLDzU,4794
122
- micrOS/source/microIO.py,sha256=pFRvRlEK9OulVmdXOTbcnHHhSKt-JuEpjUr9GzY-rUQ,7087
124
+ micrOS/source/microIO.py,sha256=3Gk0BstSTwHWVxcANSBwWU9mFvb_FaHmnbRGrM4YwpA,7110
123
125
  micrOS/source/reset.py,sha256=i7wsPkOXE7Mm0xOiw1CjqCvCdNjBvYswn9CRDvE2VbE,248
124
126
  micrOS/source/uapi.js,sha256=fZ0E9-ZndCoUNQq1yJ7yUCiLYxe3p8hzSFnlN2R9roc,2959
125
127
  micrOS/source/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN6uGqw9LpScDrGGF58c,4581
126
- micrOS/source/urequests.py,sha256=p7_8X9SrWk4wXhAZKpVPd-PZBHHToX8b1gwhFEi96FM,9089
128
+ micrOS/source/urequests.py,sha256=8vNxp_pkd_OlSrimg83FiQW0Y-t7j1UkC8If1VI_qJg,9472
127
129
  micrOS/source/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
128
130
  micrOS/source/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
129
131
  micrOS/source/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
130
- micrOS/source/__pycache__/Common.cpython-312.pyc,sha256=DbSNgmSjJTDfmDemMp3Us-0uDCm2bxE000P7a-6ye3s,10455
131
- micrOS/source/__pycache__/Logger.cpython-312.pyc,sha256=CCdkMRG0lBy7nVsc4DHwdRK0Ap0Mu9yB5fa_Hxx-RHY,5075
132
+ micrOS/source/__pycache__/Common.cpython-312.pyc,sha256=pSCsRbzAHZs-B99AsBsBqAu8vLprS8R8Sw-mVJ3y9so,10514
133
+ micrOS/source/__pycache__/Logger.cpython-312.pyc,sha256=AgoBYSXZpdwAJvEWjYE18W5zHbC67u7kbWLJJEYzBPM,5028
132
134
  micrOS/source/__pycache__/Server.cpython-312.pyc,sha256=xy1ImeXPtGhtYlAWpuWaxLmJO2nLVGdefOuqltABR9k,20615
133
- micrOSDevToolKit-2.10.2.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
135
+ microsdevtoolkit-2.10.5.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
136
+ microsdevtoolkit-2.10.5.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
134
137
  toolkit/DevEnvCompile.py,sha256=H19-60ZpHzP30C-wqR5QTzMDHHpWrTk0Uzh--TZHxvw,12148
135
138
  toolkit/DevEnvOTA.py,sha256=vNa827MOhbNQbeMGGu72YmGlNN_Tm9D6Trdnz3YGpyU,25499
136
139
  toolkit/DevEnvUSB.py,sha256=G-Ram-OR27flvVhul8J_ObiMY07Wjvom6Prc4dTfkmo,34108
@@ -200,7 +203,7 @@ toolkit/simulator_lib/simgc.py,sha256=qaYlZKW48ciIglgYxZt9ZxRUyThskhoQqke_A_bfIy
200
203
  toolkit/simulator_lib/simulator.py,sha256=-qgwcGwFFUgyIZ6CzpxQMgKDFUVAY_rDWA-4XwlJLCg,7688
201
204
  toolkit/simulator_lib/tinypico.py,sha256=z6B0743-7Cg8ISa7q7kljvKi0DGoegWus3HbiaOGU3E,156
202
205
  toolkit/simulator_lib/uasyncio.py,sha256=4ENv435IIr56x5IWeJUr1-QdczBBVG1zFr3-H2VDSpw,822
203
- toolkit/simulator_lib/uos.py,sha256=QJFXf2wW-U_2Iuzw2b38h9t6pihWpDd02368Ofmb0V4,3508
206
+ toolkit/simulator_lib/uos.py,sha256=rdtP19Xrq9hjtRXkq0tps9v4WY4hhHiOx4cL4EqhdZ0,3609
204
207
  toolkit/simulator_lib/usocket.py,sha256=7cqbG03yW5wySY1yCdFRbjDgDvbFqpU1otNJxyedaGU,347
205
208
  toolkit/simulator_lib/ussl.py,sha256=yBXPRGKIWwBRQFcKwciHCDfTj69bgfswH0WSrk3Zhjg,601
206
209
  toolkit/simulator_lib/ustruct.py,sha256=XEcN7BdO_dDw2j5fDNzv-McTGPC0kObt1LJ2KU1Kpm8,136
@@ -256,7 +259,7 @@ toolkit/simulator_lib/__pycache__/tinypico.cpython-39.pyc,sha256=VPvz9Caomn5rtrR
256
259
  toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc,sha256=ihShEcyfAQVtDTWDcsx3rENRGWKlw4ZLo90OTt_opCQ,2112
257
260
  toolkit/simulator_lib/__pycache__/uasyncio.cpython-38.pyc,sha256=F9FU77fFSaOYcAsDiMTQbOIaQ9bKeI1HuAqLZCjNIfk,976
258
261
  toolkit/simulator_lib/__pycache__/uasyncio.cpython-39.pyc,sha256=OMX0MlM7Y4WWePolE-QTVMoKn1yQnQHxvpsb42JErcI,1355
259
- toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc,sha256=n72JhneQF_KBwEZEoUUiZfziqZPvpNW8xKf0dr3ewQM,6005
262
+ toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc,sha256=RdyxO9jlfueaDvbNtKvhtRAXZxGw_jPlBYJ-Y1FJiH4,6149
260
263
  toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc,sha256=rAKwfzQXhHGDSvCYyRcohNbb1dzKxZHZ2EGrSF-B8L0,842
261
264
  toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc,sha256=ZffWjvpL_43ihw5Rb4dGQ-8a7s3r5G-6ZvX8LixPCjU,1019
262
265
  toolkit/simulator_lib/__pycache__/ustruct.cpython-312.pyc,sha256=T_xaVNR9vCkHsrkuBOB9jKzx9HPGo1I3GeSO20b2kRI,516
@@ -276,7 +279,8 @@ toolkit/workspace/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
276
279
  toolkit/workspace/precompiled/Common.mpy,sha256=30q9Yqa0QgfEaLk_Xb85XizYbBE8HPcmR-gEfkVWzDI,2151
277
280
  toolkit/workspace/precompiled/Config.mpy,sha256=A9ew69drKFA0SbfIvuTdeaXZQSvmwX0gDlnQa_8i-IE,3082
278
281
  toolkit/workspace/precompiled/Debug.mpy,sha256=OpoE-QcllAnASSnAC0V364G7zHjbYI_0jSPzPRBhWkI,1823
279
- toolkit/workspace/precompiled/Espnow.mpy,sha256=6201uzjatkJ9QHh7JXiLoX_mPxJCMJ90H4v6vgduc0Q,1834
282
+ toolkit/workspace/precompiled/Espnow.mpy,sha256=9rRRyICUkj1p75K-3PKgvKxuLuAanmOuTZcxapjhRjs,3301
283
+ toolkit/workspace/precompiled/Files.mpy,sha256=OdEU5MoKiczhNiKPk_jqkIoipvi8eWCpYmfeKCrBnGY,970
280
284
  toolkit/workspace/precompiled/Hooks.mpy,sha256=qFpJrST1zIDwm16NvvWwDA982X_FDgm_fH38G1wQays,1438
281
285
  toolkit/workspace/precompiled/IO_esp32.mpy,sha256=ojJXxhRX6V8ubT1cFXpYlhHB1NplNrT2bTi247CXFrc,661
282
286
  toolkit/workspace/precompiled/IO_esp32c3.mpy,sha256=VFbiQWpnefXO5LirEb_Nfz1286UeAbvcmE3Z8_vupTs,403
@@ -306,7 +310,7 @@ toolkit/workspace/precompiled/LM_dimmer.mpy,sha256=dRdDr3WfFy-um3-fRiK4IuZdwBTUD
306
310
  toolkit/workspace/precompiled/LM_distance.mpy,sha256=6VoSsyd-hQ4P16USDnSqpq5gpi0v2WbseeHnTFJxuJA,1506
307
311
  toolkit/workspace/precompiled/LM_ds18.mpy,sha256=1TYvc8hj1ypE1v52l6u83e8XqUi0_Rjwil-BnYXDSKI,644
308
312
  toolkit/workspace/precompiled/LM_esp32.py,sha256=yUIMWsfimCAhgyV4pT4sh-kqE_mDL83cmAZji_2uFpI,1738
309
- toolkit/workspace/precompiled/LM_espnow.py,sha256=Tto5JGnhbqyKT0hzDlJ_G-o_34dVf0CIaiMPbP-xbHU,1070
313
+ toolkit/workspace/precompiled/LM_espnow.py,sha256=hlhSHXB8gI8fdPru-UKplpzg1Gpc20ctmG5Ex4ds06c,1198
310
314
  toolkit/workspace/precompiled/LM_gameOfLife.mpy,sha256=mAOivt472fRGOcpgx6xShyfbrpT0GTbLhT2vujncS4w,2051
311
315
  toolkit/workspace/precompiled/LM_genIO.mpy,sha256=F9utR5Ng-QuTq5R5ISvYPO8xASEdSnndc1hFfxcNWOE,1722
312
316
  toolkit/workspace/precompiled/LM_haptic.mpy,sha256=46BgYkjC3AdNaJaKflFnY0oEUsd9qg6yGquX7jyFLnM,1276
@@ -316,13 +320,14 @@ toolkit/workspace/precompiled/LM_intercon.mpy,sha256=jlQECkdZ8LUGQ3yuwrW2gfjFYZh
316
320
  toolkit/workspace/precompiled/LM_keychain.mpy,sha256=cZVyHNny2uNsWfTNaGWBtZUr5bqQ76wEyFcxWx3Nagg,3627
317
321
  toolkit/workspace/precompiled/LM_ld2410.mpy,sha256=H7XHzLPkpyE-pRFZqBKn6M-Y5RtpNiV9prOPcmfZ6zg,2581
318
322
  toolkit/workspace/precompiled/LM_light_sensor.mpy,sha256=FQsOIOaioYpzBETO_2EM5NrOGGR15_-C44Fd5uz14eM,1538
323
+ toolkit/workspace/precompiled/LM_mqtt_pro.py,sha256=Vma1efLJ9Z9MrDd0qSrfJdoAxcaPfxdnqNjMIkHoHzY,7847
319
324
  toolkit/workspace/precompiled/LM_neoeffects.mpy,sha256=lO0sxfiAgyASgYNjX3c_usY3TR9WeT3F2NHJkiJ182U,3091
320
325
  toolkit/workspace/precompiled/LM_neopixel.mpy,sha256=3o4Jvmc3Knr30VJ4b7JebpUsU7dBdcYBZzRD_9a4zBI,3663
321
326
  toolkit/workspace/precompiled/LM_oled.mpy,sha256=KQj4jfLwlmx2dT_GWbFzZE6FlMRPUgJvri5XbnSIod0,3154
322
327
  toolkit/workspace/precompiled/LM_oled_sh1106.mpy,sha256=0cQpu1MPkrPxvd1Fvln9c9lq9qPV6oi8iGNTZM4YbIY,3761
323
328
  toolkit/workspace/precompiled/LM_oled_ui.mpy,sha256=nwYPXJ2Q_ogZCp1PcWlAXPzj9OlPWc82Okc1dcn-kVk,6865
324
329
  toolkit/workspace/precompiled/LM_oledui.mpy,sha256=T7Fy0o_8H6h7oiVRYK43BuVb-RKZOyeJGUvHzeWHorQ,11562
325
- toolkit/workspace/precompiled/LM_pacman.mpy,sha256=njOwVrPKOtC4J5kRCtwV8E8hHTTTt7HzqV121HmCsxE,3507
330
+ toolkit/workspace/precompiled/LM_pacman.mpy,sha256=xfSDpYrJaFkr-pKLSAM3LetF9Hs3_0ivXOK9mbOII0g,3090
326
331
  toolkit/workspace/precompiled/LM_pet_feeder.py,sha256=ILrozpnq2_ckkVDUROysMWRksKjflsKpIHvgHdvn-JA,2572
327
332
  toolkit/workspace/precompiled/LM_ph_sensor.py,sha256=QBVF6cHX3l9jsKcbEZprpyFtwRVLbup-_A7RmRYsdp8,1355
328
333
  toolkit/workspace/precompiled/LM_presence.mpy,sha256=vcu_qUj6oU-Cp_jepQRio3BxPe0SQFTBYkJex9JCcDM,2754
@@ -338,18 +343,18 @@ toolkit/workspace/precompiled/LM_servo.mpy,sha256=S1mH7tS6WK-vclAPQrWK46_IB2GlBZ
338
343
  toolkit/workspace/precompiled/LM_sound_event.mpy,sha256=QJ5xmKtK2sfA9lyROJRRpSAjypl10MkwLdW-QsXhRf8,7384
339
344
  toolkit/workspace/precompiled/LM_stepper.mpy,sha256=20Jpee74AjyjjMaHmgKbZvU5phcOvh8nQNSUDCAk_KE,1466
340
345
  toolkit/workspace/precompiled/LM_switch.mpy,sha256=58sjZQokfBYBZlplFQB5-t-3O-2mlsE3NXjvJ5FgD_U,2237
341
- toolkit/workspace/precompiled/LM_system.mpy,sha256=Z5f_YXa9-XFTFOjl4ndE2zTrVETFtF5oG2ht3GqcejA,2831
346
+ toolkit/workspace/precompiled/LM_system.mpy,sha256=6rHe07pXPzNplojqFur3npBnfGkU-ojlIcbd3innp1A,2816
342
347
  toolkit/workspace/precompiled/LM_telegram.mpy,sha256=NhkPz77bvvXXXJhZAsN7WbKn40fzZlHPWQIDWPe4uCs,5080
343
348
  toolkit/workspace/precompiled/LM_tinyrgb.mpy,sha256=qWR-e8DXuzmstxQlyic0YjwFaGiBBBWpf57Wyn1jjFc,1016
344
349
  toolkit/workspace/precompiled/LM_trackball.mpy,sha256=eDVf55dNJXd0Mzg1MZH0talUloPEGFNccE08vwbgn0g,3471
345
350
  toolkit/workspace/precompiled/LM_veml7700.mpy,sha256=NxOvdbrqyyhhwjm2d2dfrJK0dTK3NiP5kQ5GDXjXgq0,1953
346
- toolkit/workspace/precompiled/Logger.mpy,sha256=Nz33LQBUliSguxuy4EV3GWXLd9PFyqzivuNivWdLJ_w,1388
351
+ toolkit/workspace/precompiled/Logger.mpy,sha256=xVHOykBlMALlztUuutWMg2q0-pd-SMePIimI56lU28A,1403
347
352
  toolkit/workspace/precompiled/Network.mpy,sha256=WtpvhGB2bvEe94dAHV40fpEyk-Fi0D6vL1q_m6k4qBg,3274
348
353
  toolkit/workspace/precompiled/Notify.mpy,sha256=ioeDVMh9qBtACWQMASrrhGkSfp1KKUN6d2rt0NpbClo,974
349
354
  toolkit/workspace/precompiled/Scheduler.mpy,sha256=ctCj7FfXj5TchPPxe_9dmnTXWN88egtbAnmJ0N9u_1w,2202
350
355
  toolkit/workspace/precompiled/Server.mpy,sha256=dtSXLYpBcdz0DveB_S6nos46h-m6hwlQ-38G-iVQwKQ,4762
351
- toolkit/workspace/precompiled/Shell.mpy,sha256=tmtwNjJdCoKqrNZfBYW7JN9jt-XS6TEf7BTtApuICDw,4620
352
- toolkit/workspace/precompiled/Tasks.mpy,sha256=RfYvJZwvY1wAOT3CWHGTlE9B8F-nZMmKgTAc3WElF5M,6459
356
+ toolkit/workspace/precompiled/Shell.mpy,sha256=7DDUAntfvcxJejOnnE-iJMzsj98MRP1L6ZsAhbCTl3A,4747
357
+ toolkit/workspace/precompiled/Tasks.mpy,sha256=ee740jEMPqmieC1fCJYp3pJM72qIzL_HvOBRHTDwQaY,6469
353
358
  toolkit/workspace/precompiled/Time.mpy,sha256=AZAtFj-l2ERKUpWgQS4gyq_XUx1ddy4ZTTgpRxbWK9M,2773
354
359
  toolkit/workspace/precompiled/Types.mpy,sha256=LssRbPgvsWuR4d2m3R7VMIvsnkVp9nN0ltwaY2wGop8,1401
355
360
  toolkit/workspace/precompiled/Web.mpy,sha256=-YbLZ4LeJtsXY1o2a2V7e3JBlqi9XldMxQjnbl_ps-g,3133
@@ -359,16 +364,15 @@ toolkit/workspace/precompiled/index.html,sha256=cv0hap5bhBoRR_z1KALC3fbjH2rQZY9J
359
364
  toolkit/workspace/precompiled/main.py,sha256=cVlhoWwU9dSKEol0HWPihFAPzrUUvzSGwZNNMrpyfSY,440
360
365
  toolkit/workspace/precompiled/micrOS.mpy,sha256=x20-mxGB7mkvdcyulttyXhjdLvXeyXlpl57yctS3eTA,1129
361
366
  toolkit/workspace/precompiled/micrOSloader.mpy,sha256=Gcznp2z2Zv4N4dHv7PE7d6bNSQPTdvHLeStCCHGNuEg,1747
362
- toolkit/workspace/precompiled/microIO.mpy,sha256=SWYlvjIHgcMsSVCuxWataoqI03T8Aq6u4TzeGU3I3fs,1638
367
+ toolkit/workspace/precompiled/microIO.mpy,sha256=h_dKLRe0GQJAcXPbC5663A-15xJqJwzdSL0E-5jokuw,1674
363
368
  toolkit/workspace/precompiled/reset.mpy,sha256=D-ZwUk-oR8OAg5ERWJXErdPAGbx_3M13hK4IBawhIg0,217
364
369
  toolkit/workspace/precompiled/uapi.js,sha256=fZ0E9-ZndCoUNQq1yJ7yUCiLYxe3p8hzSFnlN2R9roc,2959
365
370
  toolkit/workspace/precompiled/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN6uGqw9LpScDrGGF58c,4581
366
- toolkit/workspace/precompiled/urequests.mpy,sha256=-JDY-DOtJrGdwQo0-P809zZu-cJBRqKH3X4ZHuo38k4,2387
371
+ toolkit/workspace/precompiled/urequests.mpy,sha256=ZMXbz4uwU7h2_1TKFoyLa1CFC7ZRFuDowAtEwt4rtdU,2520
367
372
  toolkit/workspace/precompiled/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
368
373
  toolkit/workspace/precompiled/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
369
374
  toolkit/workspace/precompiled/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
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,,
375
+ microsdevtoolkit-2.10.5.dist-info/METADATA,sha256=8P2k8XxlRBmFAzBrbSfEWLinL6BUi-dDJMRBTtp5WCg,55172
376
+ microsdevtoolkit-2.10.5.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
377
+ microsdevtoolkit-2.10.5.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
378
+ microsdevtoolkit-2.10.5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (79.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -31,12 +31,12 @@ def __mock_sim_dir(path):
31
31
  """
32
32
  micropython sim hack
33
33
  """
34
- if MOCK_SIM:
35
- cwd = getcwd()
34
+ cwd = getcwd()
35
+ cwd = cwd if cwd.endswith(os.sep) else f"{cwd}{os.sep}" # CHECK AND FIX CWD / ENDING
36
+ if MOCK_SIM or "workspace/simulator" not in path:
36
37
  path = f"{cwd}{path}"
37
- print(f"[!!!] [uos.SIM] CWD PATH HACK: {path}")
38
- elif "workspace/simulator" not in path:
39
- path = f"{getcwd()}{path}"
38
+ if MOCK_SIM:
39
+ print(f"[!!!] [uos.SIM][MOCK:{MOCK_SIM}] CWD PATH HACK: {path}")
40
40
  return path
41
41
 
42
42
 
Binary file
Binary file
@@ -6,13 +6,14 @@ def load():
6
6
  """
7
7
  return Espnow.initialize()
8
8
 
9
- def send(peer, msg='modules'):
9
+ def send(peer:bytes|str, msg:str='modules'):
10
10
  """
11
11
  Send message to peer (by mac address)
12
12
  :param peer: mac address of espnow device
13
13
  :param msg: message string/load module call
14
14
  """
15
- return Espnow.espnow_send(peer, msg)
15
+ now = Espnow.initialize()
16
+ return now.send(peer, msg)
16
17
 
17
18
  def start_server():
18
19
  """
@@ -20,21 +21,23 @@ def start_server():
20
21
  - this can receive espnow messages
21
22
  - it includes Load Module execution logic (beta)
22
23
  """
23
- return Espnow.espnow_server()
24
+ now = Espnow.initialize()
25
+ return now.start_server()
24
26
 
25
27
  def stats():
26
28
  """
27
29
  Get ESPNOW stats
28
30
  """
29
- return Espnow.stats()
31
+ now = Espnow.initialize()
32
+ return now.stats()
30
33
 
31
- def add_peer(peer):
34
+ def add_peer(peer:bytes, dev_name:str=None):
32
35
  """
33
36
  Add ESPNOW peer to known hosts
34
37
  - It is needed before first send(...)
35
38
  """
36
39
  now = Espnow.initialize()
37
- return Espnow.add_peer(now, peer)
40
+ return now.add_peer(peer, dev_name)
38
41
 
39
42
  def mac_address():
40
43
  """
@@ -46,4 +49,4 @@ def help():
46
49
  """
47
50
  [beta] ESPNOW sender/receiver with LM execution
48
51
  """
49
- return 'load', 'send <peer> "ping"', 'start_server', 'add_peer <peer>', 'stats', 'mac_address'
52
+ return 'load', 'send <peer> "ping"', 'start_server', 'add_peer <peer> dev_name=None', 'stats', 'mac_address'
@@ -0,0 +1,211 @@
1
+ # async_message.py Test of asynchronous mqtt client with async Broker class
2
+ # (C) Copyright Peter Hinch 2024.
3
+ # Released under the MIT licence.
4
+ # Public brokers https://github.com/mqtt/mqtt.github.io/wiki/public_brokers
5
+ # mip command: ???
6
+
7
+ from Config import cfgget
8
+ from mqtt_as import MQTTClient, config
9
+ from Common import micro_task, console, syslog, exec_cmd
10
+
11
+
12
+ # Set up MQTT
13
+ class MQTT:
14
+ CLIENT:MQTTClient = None # MQTT Client (broker) instance
15
+ TOPIC = "micros" # Default topic
16
+ TOPIC_COMMAND_LUT = {} # Lookup table for command/topic pairs
17
+ # Example:
18
+ # {"topic1": ["mod func", "mod2 func"], "topic2": []}
19
+
20
+
21
+ async def _receiver(task):
22
+ """
23
+ MQTT AS receiver loop
24
+ """
25
+ async for topic, msg, retained in MQTT.CLIENT.queue:
26
+ topic, msg = topic.decode(), msg.decode()
27
+ console(f'Topic: "{topic}" Message: "{msg}" Retained: {retained}')
28
+
29
+ # Command execution... use MQTT.TOPIC_COMMAND_LUT
30
+ topic_commands:list = MQTT.TOPIC_COMMAND_LUT.get(topic, None)
31
+ output_struct:list = []
32
+ if topic_commands is None:
33
+ syslog(f"[WARN] mqtt Unknown topic: {topic}")
34
+ elif len(topic_commands) == 0:
35
+ syslog(f"[WARN] mqtt No commands for {topic}")
36
+ else:
37
+ task.out = f"Handle topic: {topic}"
38
+ for cmd in topic_commands:
39
+ single_command = cmd.split()
40
+ if len(single_command) > 0:
41
+ state, output = exec_cmd(single_command, jsonify=True, skip_check=True)
42
+ output_struct.append({"state": state, "result": output, "cmd": cmd})
43
+ if len(output_struct) > 0:
44
+ console(f'\tMQTT Publish: {output_struct}')
45
+ task.out = f"Publish {topic}"
46
+ MQTT.CLIENT.publish(topic, str(output_struct))
47
+ else:
48
+ task.out = f"Nothing to publish {topic}"
49
+ task.feed()
50
+
51
+
52
+ async def _subscribe():
53
+ """
54
+ MQTT AS Topic subscribe towards server
55
+ """
56
+ with micro_task(tag="mqtt.subscribe") as my_task:
57
+ my_task.out = "Started"
58
+ try:
59
+ for t in MQTT.TOPIC_COMMAND_LUT:
60
+ console(f"Subscribe topic: {t}")
61
+ await MQTT.CLIENT.subscribe(t, 1)
62
+ my_task.out = "Done"
63
+ except Exception as e:
64
+ my_task.out = f"Error: {e}"
65
+
66
+
67
+ async def _publish(message, topic):
68
+ """
69
+ Send message to topic with mqtt
70
+ """
71
+ tag = f"mqtt.publish.{topic}"
72
+ with micro_task(tag=tag) as my_task:
73
+ console(f"mqtt send: [{topic}] {message}")
74
+ await MQTT.CLIENT.publish(topic, message, qos=1)
75
+ my_task.out = "Sent"
76
+
77
+
78
+ async def _up():
79
+ """
80
+ UP Listener - resubscribe
81
+ """
82
+ with micro_task(tag="mqtt.up") as my_task:
83
+ while True:
84
+ # Wait for UP Event - (re)subscribe
85
+ my_task.out = "Wait"
86
+ await MQTT.CLIENT.up.wait()
87
+ MQTT.CLIENT.up.clear()
88
+ micro_task(tag="mqtt.subscribe", task=_subscribe())
89
+ my_task.out = "Re-Subscription"
90
+ my_task.feed()
91
+
92
+
93
+ async def _init_client(topic:str=None, commands:str=None, raw_dict:dict|None=None):
94
+ """
95
+ Initialize main mqtt receiver and topics
96
+ :param topic: topic string, ex.: 'lights'
97
+ :param commands: semicolon separated commands. ex.: 'rgb toggle; cct toggle'
98
+ OR
99
+ :param raw_dict: python dict string for multi topic subscription, ex.: {"lights": ["rgb toggle", "cct toggle"], ...}
100
+ """
101
+ with micro_task(tag="mqtt.client") as my_task:
102
+ try:
103
+ await MQTT.CLIENT.connect()
104
+ my_task.out = "Connection successful."
105
+ except OSError:
106
+ my_task.out = "Connection failed."
107
+ return
108
+ # Wait for mqtt client connected successfully
109
+ await MQTT.CLIENT.up.wait()
110
+ MQTT.CLIENT.up.clear()
111
+ # Initialize mqtt topics, ha
112
+ subscribe(topic, commands, raw_dict)
113
+ micro_task(tag="mqtt.up", task=_up())
114
+ # Async listener loop
115
+ await _receiver(my_task)
116
+ my_task.out = "Receiver closed"
117
+ # Close when listener exits
118
+ MQTT.CLIENT.close()
119
+
120
+ #########################################
121
+ # PUBLIC FUNCTIONS #
122
+ #########################################
123
+
124
+ def publish(message:str, topic:str=MQTT.TOPIC):
125
+ """
126
+ Publish message
127
+ :param message: string to be sent
128
+ :param topic: topic for message
129
+ """
130
+ state = micro_task(tag=f"mqtt.publish.{topic}", task=_publish(message, topic))
131
+ state = "starting" if state else "already running"
132
+ return f"Message send, {state}"
133
+
134
+
135
+ def subscribe(topic:str=None, commands:str=None, raw_dict:dict|None=None):
136
+ """
137
+ Subscribe for single topics and set callback function(s) aka command(s)
138
+ :param topic: topic string, ex.: 'lights'
139
+ :param commands: semicolon separated commands. ex.: 'rgb toggle; cct toggle'
140
+ OR
141
+ :param raw_dict: python dict string for multi topic subscription, ex.: {"lights": ["rgb toggle", "cct toggle"], ...}
142
+
143
+ return: all or selected topics command
144
+ """
145
+ updated = False
146
+ topic = topic.strip()
147
+ # Register single topic
148
+ if topic and commands:
149
+ # raw commands structure: 'rgb toggle; cct toggle'
150
+ commands = [ c.strip() for c in commands.split(";") ]
151
+ # commands: Topic LUT structure: {'topic': ['mod func'], ..., 'lights': ['rgb toggle', 'cct toggle']}
152
+ updated = True if MQTT.TOPIC_COMMAND_LUT.get(topic, None) is None else False
153
+ MQTT.TOPIC_COMMAND_LUT[topic] = commands
154
+ # Register multiple topics at once
155
+ elif isinstance(raw_dict, dict):
156
+ updated = True
157
+ MQTT.TOPIC_COMMAND_LUT.update(raw_dict)
158
+ # Start subscribe task
159
+ if updated:
160
+ state = micro_task(tag="mqtt.subscribe", task=_subscribe())
161
+ state = "starting" if state else "already running"
162
+ return f"Subscribe, {state}"
163
+
164
+ # Return handling
165
+ if topic is not None:
166
+ # Return selected topic commands
167
+ return MQTT.TOPIC_COMMAND_LUT.get(topic, None)
168
+ # Return registered topics
169
+ return MQTT.TOPIC_COMMAND_LUT
170
+
171
+
172
+ def _configure(server_ip:str, username:str, password:str):
173
+ # Define configuration
174
+ config["keepalive"] = 120
175
+ config["queue_len"] = 1 # Use event interface with default queue
176
+ # Define configuration
177
+ config['client_id'] = cfgget("devfid")
178
+ config['ssid'] = cfgget("staessid")
179
+ config['wifi_pw'] = cfgget("stapwd")
180
+ config['port'] = 1883 # expose????
181
+ config['server'] = server_ip # '172.20.10.2'
182
+ config['user'] = username # test
183
+ config['password'] = password # '12345'
184
+ return config
185
+
186
+
187
+ def load(server_ip:str, username:str, password:str, topic:str=None, commands:str=None, raw_dict:dict|None=None):
188
+ """
189
+ Load MQTT_AS receiver...
190
+ :param server_ip: server IP address
191
+ :param username: server user
192
+ :param password: server user password
193
+
194
+ :param topic: topic string, ex.: 'lights'
195
+ :param commands: semicolon separated commands. ex.: 'rgb toggle; cct toggle'
196
+ OR
197
+ :param raw_dict: python dict string for multi topic subscription, ex.: {"lights": ["rgb toggle", "cct toggle"], ...}
198
+ """
199
+ MQTTClient.DEBUG = True
200
+ MQTT.CLIENT = MQTTClient(_configure(server_ip, username, password))
201
+
202
+ state = micro_task(tag="mqtt.client", task=_init_client(topic, commands, raw_dict))
203
+ return "Starting" if state else "Already running"
204
+
205
+
206
+ def help():
207
+ return ("load <server_ip> <username> <password> topic='micros', commands='rgb toggle; cct toggle'",
208
+ "subscribe topic='micros', commands='rgb toggle; cct toggle'",
209
+ "subscribe #without params dumps the topic-command data structure",
210
+ "publish message='hello' topic='micros'",
211
+ "HINT: task show mqtt.*")
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file