add 告警和联调问题修改
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
from collections.abc import Mapping
|
||||
from typing import Any, List
|
||||
from datetime import time
|
||||
from typing import Any, List, Literal
|
||||
|
||||
from services.database_service_base import DatabaseServiceBase
|
||||
from fastapi import HTTPException
|
||||
|
||||
from banban.dao.device import DeviceDAO
|
||||
from banban.service.device_setting import device_setting_service
|
||||
|
||||
|
||||
class DeviceService(DatabaseServiceBase):
|
||||
@@ -68,6 +70,51 @@ class DeviceService(DatabaseServiceBase):
|
||||
raise HTTPException(status_code=503, detail="MQTT 服务未初始化")
|
||||
return await service.send_volume_command(device_id, level)
|
||||
|
||||
async def set_sleep_schedule(
|
||||
self,
|
||||
*,
|
||||
device_id: str,
|
||||
user_id: int,
|
||||
start: time,
|
||||
end: time,
|
||||
timezone: str,
|
||||
) -> str:
|
||||
await self.ensure_device_access(device_id=device_id, user_id=user_id)
|
||||
|
||||
from handlers.mqtt_handler import TalkingQMQTTService
|
||||
|
||||
service = await TalkingQMQTTService.get_instance()
|
||||
if service is None:
|
||||
raise HTTPException(status_code=503, detail="MQTT 服务未初始化")
|
||||
|
||||
start_text = start.strftime("%H:%M")
|
||||
end_text = end.strftime("%H:%M")
|
||||
msg_id = await service.send_sleep_schedule_command(device_id, start_text, end_text)
|
||||
await device_setting_service.upsert_sleep_schedule(
|
||||
device_id=device_id,
|
||||
sleep_mode=1,
|
||||
disable_time_start=start,
|
||||
disable_time_end=end,
|
||||
timezone=timezone,
|
||||
)
|
||||
return msg_id
|
||||
|
||||
async def set_remote_sleep_wake(
|
||||
self,
|
||||
*,
|
||||
device_id: str,
|
||||
user_id: int,
|
||||
switch: Literal["on", "off"],
|
||||
) -> str:
|
||||
await self.ensure_device_access(device_id=device_id, user_id=user_id)
|
||||
|
||||
from handlers.mqtt_handler import TalkingQMQTTService
|
||||
|
||||
service = await TalkingQMQTTService.get_instance()
|
||||
if service is None:
|
||||
raise HTTPException(status_code=503, detail="MQTT 服务未初始化")
|
||||
return await service.send_remote_sleep_wake_command(device_id, switch)
|
||||
|
||||
|
||||
# 创建全局 DeviceService 实例
|
||||
device_service = DeviceService()
|
||||
|
||||
47
talkingq-url/banban/service/device_alarm.py
Normal file
47
talkingq-url/banban/service/device_alarm.py
Normal file
@@ -0,0 +1,47 @@
|
||||
from collections.abc import Mapping
|
||||
from typing import Any
|
||||
|
||||
from banban.dao.device_alarm import DeviceAlarmDAO
|
||||
from services.database_service_base import DatabaseServiceBase
|
||||
|
||||
|
||||
class DeviceAlarmService(DatabaseServiceBase):
|
||||
def __init__(self):
|
||||
super().__init__(service_name="device_alarm_service")
|
||||
|
||||
async def record_alarm_event(self, *, device_id: str, source_msg_id: str = "010") -> int | None:
|
||||
db_session = await self.get_session()
|
||||
try:
|
||||
dao = DeviceAlarmDAO(db_session)
|
||||
binding = await dao.get_active_binding_context(device_id=device_id)
|
||||
if not binding:
|
||||
return None
|
||||
return await dao.create(
|
||||
device_id=device_id,
|
||||
owner_user_id=int(binding["owner_user_id"]) if binding.get("owner_user_id") is not None else None,
|
||||
child_id=int(binding["child_id"]) if binding.get("child_id") is not None else None,
|
||||
source_msg_id=source_msg_id,
|
||||
)
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
async def list_device_alarms(
|
||||
self,
|
||||
*,
|
||||
device_id: str,
|
||||
owner_user_id: int,
|
||||
limit: int,
|
||||
) -> list[Mapping[str, Any]]:
|
||||
db_session = await self.get_session()
|
||||
try:
|
||||
dao = DeviceAlarmDAO(db_session)
|
||||
return await dao.list_by_device(
|
||||
device_id=device_id,
|
||||
owner_user_id=owner_user_id,
|
||||
limit=limit,
|
||||
)
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
|
||||
device_alarm_service = DeviceAlarmService()
|
||||
@@ -93,7 +93,14 @@ class DeviceSettingService(DatabaseServiceBase):
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
async def insert_or_update(self, device_id: str, power: int, volume: int, signal_strength: int, version_str: str) -> None:
|
||||
async def insert_or_update(
|
||||
self,
|
||||
device_id: str,
|
||||
power: Optional[int],
|
||||
volume: Optional[int],
|
||||
signal_strength: Optional[int],
|
||||
version_str: Optional[str],
|
||||
) -> None:
|
||||
try:
|
||||
current_row = await self.get_setting_by_device_id(device_id=device_id)
|
||||
if current_row:
|
||||
@@ -103,5 +110,33 @@ class DeviceSettingService(DatabaseServiceBase):
|
||||
finally:
|
||||
pass
|
||||
|
||||
async def upsert_sleep_schedule(
|
||||
self,
|
||||
*,
|
||||
device_id: str,
|
||||
sleep_mode: int,
|
||||
disable_time_start: time,
|
||||
disable_time_end: time,
|
||||
timezone: str,
|
||||
) -> None:
|
||||
current_row = await self.get_setting_by_device_id(device_id=device_id)
|
||||
if current_row:
|
||||
await self.update_setting(
|
||||
device_id=device_id,
|
||||
sleep_mode=sleep_mode,
|
||||
disable_time_start=disable_time_start,
|
||||
disable_time_end=disable_time_end,
|
||||
timezone=timezone,
|
||||
)
|
||||
return
|
||||
|
||||
await self.create_setting(
|
||||
device_id=device_id,
|
||||
sleep_mode=sleep_mode,
|
||||
disable_time_start=disable_time_start,
|
||||
disable_time_end=disable_time_end,
|
||||
timezone=timezone,
|
||||
)
|
||||
|
||||
# 创建全局 DeviceSettingService 实例
|
||||
device_setting_service = DeviceSettingService()
|
||||
device_setting_service = DeviceSettingService()
|
||||
|
||||
Reference in New Issue
Block a user