Skip to content

Commit 0fb2acb

Browse files
Forairaaaaalbuque
authored andcommitted
modules/startup/tab5: Adapte new ws api.
Signed-off-by: Forairaaaaa <applesyqd@outlook.com>
1 parent 17be956 commit 0fb2acb

File tree

2 files changed

+75
-19
lines changed

2 files changed

+75
-19
lines changed

m5stack/modules/startup/tab5/launcher/apps/app_ezdata.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
from .app import AppBase
66
from ..common import Ezdata, debug_print
7-
from ..hal import get_hal
87
import lvgl as lv
98
import asyncio
109
import time
@@ -114,6 +113,40 @@ def __init__(self, parent: lv.obj, data: list):
114113
self._Item(panel, str(item), i * 84)
115114

116115

116+
class ViewDict(ViewBase):
117+
class _Item:
118+
def __init__(self, parent: lv.obj, data: str, pos_y: int):
119+
panel = lv.obj(parent)
120+
panel.set_size(1044, 55)
121+
panel.align(lv.ALIGN.TOP_LEFT, 0, pos_y)
122+
panel.set_style_radius(16, lv.PART.MAIN)
123+
panel.set_style_bg_color(lv.color_hex(0xE0EDFF), lv.PART.MAIN)
124+
panel.set_style_border_width(0, lv.PART.MAIN)
125+
panel.set_style_pad_all(0, lv.PART.MAIN)
126+
127+
label = lv.label(panel)
128+
label.set_text(data)
129+
label.align(lv.ALIGN.LEFT_MID, 34, 0)
130+
label.set_style_text_color(lv.color_hex(0x272F43), lv.PART.MAIN)
131+
label.set_style_text_font(lv.font_montserrat_30, lv.PART.MAIN)
132+
133+
def __init__(self, parent: lv.obj, data: dict):
134+
super().__init__(parent, data)
135+
136+
panel = lv.obj(parent)
137+
panel.set_size(1092, 429)
138+
panel.align(lv.ALIGN.CENTER, 0, -20)
139+
panel.set_style_bg_opa(lv.OPA.TRANSP, lv.PART.MAIN)
140+
panel.set_style_border_width(0, lv.PART.MAIN)
141+
panel.set_style_pad_all(0, lv.PART.MAIN)
142+
panel.set_style_pad_left(24, lv.PART.MAIN)
143+
panel.set_style_pad_top(28, lv.PART.MAIN)
144+
145+
data_dict = data.get("value")
146+
for i, (key, value) in enumerate(data_dict.items()):
147+
self._Item(panel, f"{str(key)}: {str(value)}", i * 84)
148+
149+
117150
class AppEzdata(AppBase):
118151
async def main(self):
119152
self._view = None
@@ -148,8 +181,11 @@ def _create_view(self):
148181
self._view = ViewNumber(self.get_app_panel(), data)
149182
elif isinstance(value, list):
150183
self._view = ViewArray(self.get_app_panel(), data)
184+
elif isinstance(value, dict):
185+
self._view = ViewDict(self.get_app_panel(), data)
151186
else:
152187
print("unsupported data type:", type(value))
153188

154189
def _handle_data_changed(self):
190+
debug_print("data changed")
155191
self._create_view()

m5stack/modules/startup/tab5/launcher/common/ezdata.py

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,25 @@ class _EzdataClientWebsocket:
2626
DEVICE_DATA = 104
2727
DEVICE_DATA_FILE = 105
2828
DEVICE_REQUEST_ERROR = 500
29-
30-
def __init__(self, device_token: str, on_data_changed: Signal):
29+
DEVICE_USER_SCAN = 106
30+
DEVICE_USER_UPDATE_DATA = 107
31+
DEVICE_USER_DELETE_DATA = 108
32+
DEVICE_USER_ADD_DATA = 109
33+
34+
DATA_CHANGE_TYPE_LIST = [
35+
DEVICE_ADD_DATA,
36+
DEVICE_UPDATE_DATA,
37+
DEVICE_DELETE_DATA,
38+
DEVICE_DATA_LIST,
39+
DEVICE_USER_UPDATE_DATA,
40+
DEVICE_USER_DELETE_DATA,
41+
DEVICE_USER_ADD_DATA,
42+
]
43+
44+
def __init__(self, device_token: str, on_data_changed: Signal, on_data_list_changed: Signal):
3145
self._device_token = device_token
3246
self._on_data_changed = on_data_changed
47+
self._on_data_list_changed = on_data_list_changed
3348
self._ws: WebsocketClient | None = None
3449
self._ws_last_heartbeat_time = 0
3550
self._data = {}
@@ -83,6 +98,8 @@ async def fetch_all_data(self):
8398
if self._ws is None:
8499
return
85100

101+
debug_print("fetch all data")
102+
86103
self._data.clear()
87104

88105
for i in range(10):
@@ -102,22 +119,24 @@ async def fetch_all_data(self):
102119
response = json.loads(resp)
103120
if response.get("code") == 200:
104121
self._data = response.get("body")
105-
# debug_print("fetch first data success:", self._data)
122+
# debug_print("fetch all data success:", self._data)
123+
# pretty print
124+
106125
return
107126

108127
except Exception as e:
109-
debug_print("fetch first data failed:", e)
128+
debug_print("fetch all data failed:", e)
110129
await asyncio.sleep(1)
111130
continue
112131

113132
self._data.clear()
114-
raise Exception("max fetch data retry")
133+
raise Exception("max fetch all data retry")
115134

116-
def update(self):
117-
self._receive()
135+
async def update(self):
136+
await self._receive()
118137
self._heartbeat()
119138

120-
def _receive(self):
139+
async def _receive(self):
121140
if self._ws is None:
122141
return
123142

@@ -126,7 +145,7 @@ def _receive(self):
126145
if not msg:
127146
return
128147

129-
# debug_print("ws recv:", msg)
148+
debug_print("ws recv:", msg)
130149

131150
# Skip heartbeat
132151
if msg == "pong":
@@ -136,14 +155,13 @@ def _receive(self):
136155
response = json.loads(msg)
137156
if response.get("code") == 200:
138157
cmd = response.get("cmd")
139-
if cmd in [
140-
self.DEVICE_ADD_DATA,
141-
self.DEVICE_UPDATE_DATA,
142-
self.DEVICE_DELETE_DATA,
143-
self.DEVICE_DATA_LIST,
144-
]:
145-
self.fetch_all_data()
158+
if cmd in self.DATA_CHANGE_TYPE_LIST:
159+
await self.fetch_all_data()
146160
self._on_data_changed.emit()
161+
self._on_data_list_changed.emit()
162+
else:
163+
debug_print("unhandled cmd:", cmd)
164+
147165
else:
148166
print("ws recv error msg:", msg)
149167

@@ -219,14 +237,16 @@ async def _ezdata_task():
219237

220238
# Create ezdata websocket client and init
221239
Ezdata._client = _EzdataClientWebsocket(
222-
Ezdata._device_token, Ezdata.on_selected_data_changed
240+
Ezdata._device_token,
241+
Ezdata.on_selected_data_changed,
242+
Ezdata.on_data_list_changed,
223243
)
224244
await Ezdata._client.init()
225245
Ezdata._set_state(Ezdata.State.NORMAL)
226246

227247
# Keep ezdata websocket client running
228248
while True:
229-
Ezdata._client.update()
249+
await Ezdata._client.update()
230250
await asyncio.sleep(0.2)
231251

232252
except Exception as e:

0 commit comments

Comments
 (0)