| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- """
- 机型配置定义
- 与 daping_rec_online_api 项目保持一致的机型和模板映射规则
- """
- from typing import Dict, List, Optional
- from pydantic import BaseModel
- class ZoneConfig(BaseModel):
- """区域配置(洗涤筒/干衣筒)"""
- zone_id: str
- zone_name: str
- device_type: str # wash/dry
- class TemplateMapping(BaseModel):
- """模板映射配置"""
- template_type: str # common/time_popular/time_custom 等
- redis_key_pattern: str # Redis key 格式
- description: str
- class MachineModel(BaseModel):
- """机型配置"""
- model_id: str # 机型标识符,如 x11, hplus
- model_name: str # 显示名称
- type_id: str # Redis 中的 type_id
- zones: List[ZoneConfig] # 区域配置
- template_mappings: List[TemplateMapping] # 模板映射
- support_multi_card: bool = False # 是否支持多卡
- recommend_types: List[str] = ["1", "2"] # 推荐类型:1=人气, 2=定制
-
- @property
- def zone_ids(self) -> List[str]:
- return [z.zone_id for z in self.zones]
- # 机型配置注册表
- MACHINE_MODELS: Dict[str, MachineModel] = {
- "x11": MachineModel(
- model_id="x11",
- model_name="X11",
- type_id="201c51890c31c308050100218008390000000000000000000000000000000040",
- zones=[
- ZoneConfig(zone_id="2", zone_name="洗衣机", device_type="wash"),
- ZoneConfig(zone_id="3", zone_name="洗衣机(AI快净)", device_type="wash"),
- ],
- template_mappings=[
- TemplateMapping(
- template_type="common",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:common",
- description="通用模板"
- ),
- TemplateMapping(
- template_type="time_popular",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_popular",
- description="人气模板"
- ),
- TemplateMapping(
- template_type="time_custom",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_custom",
- description="定制模板"
- ),
- TemplateMapping(
- template_type="time_season",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_season",
- description="季节模板"
- ),
- TemplateMapping(
- template_type="time_care",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_care",
- description="关怀模板"
- ),
- TemplateMapping(
- template_type="time_environmental",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_environmental",
- description="环保模板"
- ),
- TemplateMapping(
- template_type="time_weather",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_weather",
- description="天气模板"
- ),
- TemplateMapping(
- template_type="time_health",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_health",
- description="健康模板"
- ),
- ]
- ),
-
- "x11_dry": MachineModel(
- model_id="x11_dry",
- model_name="X11 干衣机",
- type_id="201c51890c31c308310100218003484748000000000000000000000000000040",
- zones=[
- ZoneConfig(zone_id="0", zone_name="干衣机", device_type="dry"),
- ],
- template_mappings=[
- TemplateMapping(
- template_type="common",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:common",
- description="通用模板"
- ),
- TemplateMapping(
- template_type="time_popular",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_popular",
- description="人气模板"
- ),
- TemplateMapping(
- template_type="time_custom",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_custom",
- description="定制模板"
- ),
- TemplateMapping(
- template_type="time_season",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_season",
- description="季节模板"
- ),
- TemplateMapping(
- template_type="time_care",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_care",
- description="关怀模板"
- ),
- TemplateMapping(
- template_type="time_environmental",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_environmental",
- description="环保模板"
- ),
- ]
- ),
-
- "hplus": MachineModel(
- model_id="hplus",
- model_name="Hplus",
- type_id="201c51890c31c308050400218003484843000001000000000000000000000040",
- zones=[
- ZoneConfig(zone_id="3", zone_name="洗衣机", device_type="wash"),
- ZoneConfig(zone_id="0", zone_name="干衣机", device_type="dry"),
- ],
- template_mappings=[
- TemplateMapping(
- template_type="common",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:common",
- description="通用模板"
- ),
- TemplateMapping(
- template_type="time_popular",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_popular",
- description="人气模板"
- ),
- TemplateMapping(
- template_type="time_custom",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_custom",
- description="定制模板"
- ),
- ]
- ),
-
- "ultra": MachineModel(
- model_id="ultra",
- model_name="Ultra",
- type_id="201c51890c31c308050100218008054150000000000000000000000000000040",
- zones=[
- ZoneConfig(zone_id="1", zone_name="洗衣机下", device_type="wash"),
- ZoneConfig(zone_id="3", zone_name="洗衣机下(双)", device_type="wash"),
- ZoneConfig(zone_id="41", zone_name="洗衣机左", device_type="wash"),
- ZoneConfig(zone_id="43", zone_name="洗衣机左(双)", device_type="wash"),
- ZoneConfig(zone_id="61", zone_name="洗衣机右", device_type="wash"),
- ZoneConfig(zone_id="63", zone_name="洗衣机右(双)", device_type="wash"),
- ],
- template_mappings=[
- TemplateMapping(
- template_type="common",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:common",
- description="通用模板"
- ),
- TemplateMapping(
- template_type="time_popular",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_popular",
- description="人气模板"
- ),
- TemplateMapping(
- template_type="time_custom",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_custom",
- description="定制模板"
- ),
- TemplateMapping(
- template_type="time_weather",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_weather",
- description="天气模板"
- ),
- TemplateMapping(
- template_type="time_season",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_season",
- description="季节模板"
- ),
- TemplateMapping(
- template_type="time_care",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_care",
- description="关怀模板"
- ),
- TemplateMapping(
- template_type="time_environmental",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_environmental",
- description="环保模板"
- ),
- TemplateMapping(
- template_type="time_health",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_health",
- description="健康模板"
- ),
- TemplateMapping(
- template_type="time_health_2",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_health_2",
- description="健康2-杀菌模板"
- ),
- ]
- ),
-
- "f2_multi": MachineModel(
- model_id="f2_multi",
- model_name="F2 Multi",
- type_id="201c51890c31c30805040021800",
- zones=[
- ZoneConfig(zone_id="1", zone_name="洗衣机", device_type="wash"),
- ],
- template_mappings=[
- TemplateMapping(
- template_type="common",
- redis_key_pattern="broadcast-template-jinja:multi_card:wash:common",
- description="通用模板"
- ),
- TemplateMapping(
- template_type="time_popular",
- redis_key_pattern="broadcast-template-jinja:multi_card:wash:time_popular",
- description="人气模板"
- ),
- TemplateMapping(
- template_type="time_custom",
- redis_key_pattern="broadcast-template-jinja:multi_card:wash:time_custom",
- description="定制模板"
- ),
- TemplateMapping(
- template_type="time_weather",
- redis_key_pattern="broadcast-template-jinja:multi_card:wash:time_weather",
- description="天气模板"
- ),
- TemplateMapping(
- template_type="time_season_storage",
- redis_key_pattern="broadcast-template-jinja:multi_card:wash:time_season_storage",
- description="季节收纳模板"
- ),
- TemplateMapping(
- template_type="time_season_in",
- redis_key_pattern="broadcast-template-jinja:multi_card:wash:time_season_in",
- description="季节上新模板"
- ),
- TemplateMapping(
- template_type="time_care",
- redis_key_pattern="broadcast-template-jinja:multi_card:wash:time_care",
- description="关怀模板"
- ),
- TemplateMapping(
- template_type="time_environmental",
- redis_key_pattern="broadcast-template-jinja:multi_card:wash:time_environmental",
- description="环保模板"
- ),
- TemplateMapping(
- template_type="time_health",
- redis_key_pattern="broadcast-template-jinja:multi_card:wash:time_health",
- description="健康模板"
- ),
- ],
- support_multi_card=True
- ),
-
- "seeker": MachineModel(
- model_id="seeker",
- model_name="Seeker",
- type_id="201c51890c31c308050100218008054251410000000000000000000000000040",
- zones=[
- ZoneConfig(zone_id="2", zone_name="洗衣机(下)", device_type="wash"),
- ZoneConfig(zone_id="3", zone_name="洗衣机(左)", device_type="wash"),
- ZoneConfig(zone_id="4", zone_name="洗衣机(右)", device_type="wash"),
- ZoneConfig(zone_id="0", zone_name="干衣机", device_type="dry"),
- ],
- template_mappings=[
- TemplateMapping(
- template_type="common",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:common",
- description="通用模板"
- ),
- TemplateMapping(
- template_type="time_popular",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_popular",
- description="人气模板"
- ),
- TemplateMapping(
- template_type="time_custom",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_custom",
- description="定制模板"
- ),
- TemplateMapping(
- template_type="time_season",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_season",
- description="季节模板"
- ),
- TemplateMapping(
- template_type="time_care",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_care",
- description="关怀模板"
- ),
- TemplateMapping(
- template_type="time_environmental",
- redis_key_pattern="broadcast-template-jinja:single_card:wash:time_environmental",
- description="环保模板"
- ),
- ]
- ),
-
- "seeker_dry": MachineModel(
- model_id="seeker_dry",
- model_name="Seeker 干衣机",
- type_id="201c51890c31c308310100218008054251410003000000000000000000000040",
- zones=[
- ZoneConfig(zone_id="0", zone_name="干衣机", device_type="dry"),
- ],
- template_mappings=[
- TemplateMapping(
- template_type="common",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:common",
- description="通用模板"
- ),
- TemplateMapping(
- template_type="time_popular",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_popular",
- description="人气模板"
- ),
- TemplateMapping(
- template_type="time_custom",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_custom",
- description="定制模板"
- ),
- TemplateMapping(
- template_type="time_season",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_season",
- description="季节模板"
- ),
- TemplateMapping(
- template_type="time_care",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_care",
- description="关怀模板"
- ),
- TemplateMapping(
- template_type="time_environmental",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_environmental",
- description="环保模板"
- ),
- ]
- ),
-
- "x11_ultra": MachineModel(
- model_id="x11_ultra",
- model_name="X11 Ultra",
- type_id="201c51890c31c308050400218003484446000000000000000000000000000040",
- zones=[
- ZoneConfig(zone_id="24", zone_name="干衣机", device_type="dry"),
- ZoneConfig(zone_id="7", zone_name="干衣机(双)", device_type="dry"),
- ZoneConfig(zone_id="1", zone_name="干衣机(单)", device_type="dry"),
- ],
- template_mappings=[
- TemplateMapping(
- template_type="common",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:common",
- description="通用模板"
- ),
- TemplateMapping(
- template_type="time_popular",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_popular",
- description="人气模板"
- ),
- TemplateMapping(
- template_type="time_custom",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_custom",
- description="定制模板"
- ),
- TemplateMapping(
- template_type="time_season",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_season",
- description="季节模板"
- ),
- TemplateMapping(
- template_type="time_care",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_care",
- description="关怀模板"
- ),
- TemplateMapping(
- template_type="time_environmental",
- redis_key_pattern="broadcast-template-jinja:single_card:dry:time_environmental",
- description="环保模板"
- ),
- ]
- ),
- }
- def get_machine_model(model_id: str) -> Optional[MachineModel]:
- """获取机型配置"""
- return MACHINE_MODELS.get(model_id)
- def list_machine_models() -> List[MachineModel]:
- """获取所有机型配置"""
- return list(MACHINE_MODELS.values())
- def get_template_types_for_model(model_id: str, device_type: str = None) -> List[str]:
- """获取机型支持的模板类型"""
- model = get_machine_model(model_id)
- if not model:
- return []
-
- mappings = model.template_mappings
- if device_type:
- # 过滤设备类型
- mappings = [m for m in mappings if device_type in m.redis_key_pattern]
-
- return [m.template_type for m in mappings]
|