Files
iot-interphone/SystemHandler.py

94 lines
3.0 KiB
Python

import network
import gc
import time
import machine
import shared_vars
import system
class SystemHandler:
def get_wifi_list(self,data):
"""扫描并返回可用的 WiFi 列表"""
try:
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
networks = wlan.scan()
wifi_list = [{'ssid': net[0].decode('utf-8'), 'rssi': net[3]} for net in networks]
print("扫描到的 WiFi 列表:", wifi_list)
system.send_text(shared_vars.WS_SOCK,wifi_list)
return wifi_list
except Exception as e:
print(f"获取 WiFi 列表时出错: {e}")
return []
def get_memory_info(self,data):
"""获取当前内存使用信息"""
try:
free_mem = gc.mem_free()
allocated_mem = gc.mem_alloc()
total_mem = free_mem + allocated_mem
memory_info = {
'free_memory': free_mem,
'allocated_memory': allocated_mem,
'total_memory': total_mem
}
print("内存信息:", memory_info)
return memory_info
except Exception as e:
print(f"获取内存信息时出错: {e}")
return {}
def free_memory(self,data):
"""释放内存并返回释放的内存大小"""
try:
before_free = gc.mem_free()
gc.collect()
after_free = gc.mem_free()
freed_memory = after_free - before_free
print(f"释放了 {freed_memory} 字节的内存")
return freed_memory
except Exception as e:
print(f"释放内存时出错: {e}")
return 0
def connect_to_wifi(self,data):
"""连接到指定的 WiFi"""
ssid, password = data.get('ssid'), data.get('password')
try:
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
start_time = time.time()
while not wlan.isconnected():
if time.time() - start_time > 10: # 超时 10 秒
raise TimeoutError("连接 WiFi 超时")
time.sleep(1)
print(f"成功连接到 WiFi: {ssid}")
return wlan.ifconfig()
except Exception as e:
print(f"连接 WiFi 时出错: {e}")
return None
def get_system_time(self,data):
"""获取系统时间"""
try:
current_time = time.localtime()
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", current_time)
print("当前系统时间:", formatted_time)
return formatted_time
except Exception as e:
print(f"获取系统时间时出错: {e}")
return None
def restart_device(self,data):
"""重启设备"""
try:
print("设备即将重启...")
time.sleep(1)
machine.reset()
except Exception as e:
print(f"重启设备时出错: {e}")
return None
return None