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.
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +26 -18
- micrOS/source/Common.py +2 -2
- micrOS/source/Espnow.py +245 -123
- micrOS/source/Files.py +101 -0
- micrOS/source/LM_espnow.py +10 -7
- micrOS/source/LM_mqtt_pro.py +211 -0
- micrOS/source/LM_pacman.py +37 -57
- micrOS/source/LM_system.py +1 -1
- micrOS/source/Logger.py +5 -11
- micrOS/source/Shell.py +23 -19
- micrOS/source/Tasks.py +2 -2
- micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
- micrOS/source/microIO.py +3 -2
- micrOS/source/urequests.py +10 -1
- {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info}/METADATA +3 -2
- {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info}/RECORD +34 -30
- {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info}/WHEEL +1 -1
- toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
- toolkit/simulator_lib/uos.py +5 -5
- toolkit/workspace/precompiled/Espnow.mpy +0 -0
- toolkit/workspace/precompiled/Files.mpy +0 -0
- toolkit/workspace/precompiled/LM_espnow.py +10 -7
- toolkit/workspace/precompiled/LM_mqtt_pro.py +211 -0
- toolkit/workspace/precompiled/LM_pacman.mpy +0 -0
- toolkit/workspace/precompiled/LM_system.mpy +0 -0
- toolkit/workspace/precompiled/Logger.mpy +0 -0
- toolkit/workspace/precompiled/Shell.mpy +0 -0
- toolkit/workspace/precompiled/Tasks.mpy +0 -0
- toolkit/workspace/precompiled/microIO.mpy +0 -0
- toolkit/workspace/precompiled/urequests.mpy +0 -0
- {micrOSDevToolKit-2.10.2.data → microsdevtoolkit-2.10.5.data}/scripts/devToolKit.py +0 -0
- {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info/licenses}/LICENSE +0 -0
- {micrOSDevToolKit-2.10.2.dist-info → microsdevtoolkit-2.10.5.dist-info}/top_level.txt +0 -0
micrOS/source/urequests.py
CHANGED
|
@@ -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.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: micrOSDevToolKit
|
|
3
|
-
Version: 2.10.
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
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=
|
|
113
|
-
micrOS/source/Tasks.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
131
|
-
micrOS/source/__pycache__/Logger.cpython-312.pyc,sha256=
|
|
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
|
-
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
352
|
-
toolkit/workspace/precompiled/Tasks.mpy,sha256=
|
|
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=
|
|
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
|
|
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
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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,,
|
|
Binary file
|
toolkit/simulator_lib/uos.py
CHANGED
|
@@ -31,12 +31,12 @@ def __mock_sim_dir(path):
|
|
|
31
31
|
"""
|
|
32
32
|
micropython sim hack
|
|
33
33
|
"""
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|