Files
ShowenV2/configs/cat_state_machine.json
showen 0709d0de05 ceo: 完成configs迁移和main.rs插件注册
- 从旧项目复制dog_state_machine.json和cat_state_machine.json
- 实现main.rs完整插件注册(screen, wifi, video, ble, http)
- 添加命令行参数支持(--config, --validate)
- 实现Ctrl+C优雅退出
- 添加ctrlc依赖
2026-03-12 07:15:21 +08:00

1163 lines
28 KiB
JSON

{
"display": {
"fullscreen": true,
"window_title": "Hologram Player - Cat",
"rotation": 0,
"flip_horizontal": true,
"flip_vertical": true,
"offset_x": 0,
"offset_y": 0,
"prevent_screen_lock": true,
"render_width": 1280,
"render_height": 800,
"output_width": null,
"output_height": null,
"scale_mode": "stretch",
"allow_upscale": true,
"perspective_correction": {
"enabled": false,
"points": [
[0, 0],
[1280, 0],
[1280, 800],
[0, 800]
]
},
"chroma_key": {
"enabled": false,
"hsv_min": [
0,
0,
200
],
"hsv_max": [
180,
30,
255
],
"invert": false,
"feather": 3
},
"brightness_adjust": {
"enabled": true,
"subject_boost": 1.5,
"background_suppress": 0.3,
"threshold": 30
}
},
"playlist": [
{
"id": "anim_0",
"path": "../宠物嵌入式开发视频3/1.动画0.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_1",
"path": "../宠物嵌入式开发视频3/2.趴着休息/动画1.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_2",
"path": "../宠物嵌入式开发视频3/2.趴着休息/动画2.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_3",
"path": "../宠物嵌入式开发视频3/2.趴着休息/动画3.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_4",
"path": "../宠物嵌入式开发视频3/3.犯困眯眼/动画4.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_5",
"path": "../宠物嵌入式开发视频3/3.犯困眯眼/动画5.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_6",
"path": "../宠物嵌入式开发视频3/3.犯困眯眼/动画6.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_7",
"path": "../宠物嵌入式开发视频3/4.趴下睡觉/动画7.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_8",
"path": "../宠物嵌入式开发视频3/4.趴下睡觉/动画8.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_9",
"path": "../宠物嵌入式开发视频3/4.趴下睡觉/动画9.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_10",
"path": "../宠物嵌入式开发视频3/5.猫舔爪子 动画10.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_11",
"path": "../宠物嵌入式开发视频3/6.口渴动画/动画11.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_12",
"path": "../宠物嵌入式开发视频3/6.口渴动画/动画12.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_13",
"path": "../宠物嵌入式开发视频3/6.口渴动画/动画13.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_14",
"path": "../宠物嵌入式开发视频3/7.被叫名字1/动画14.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_15",
"path": "../宠物嵌入式开发视频3/7.被叫名字1/动画15.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_16",
"path": "../宠物嵌入式开发视频3/7.被叫名字1/动画16.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_17",
"path": "../宠物嵌入式开发视频3/8.握手/动画17.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_18",
"path": "../宠物嵌入式开发视频3/9.喂食动画/动画18.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_19",
"path": "../宠物嵌入式开发视频3/10.玩逗猫棒/动画19.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
},
{
"id": "anim_20",
"path": "../宠物嵌入式开发视频3/11.摸猫头/动画22.mp4",
"duration": null,
"loop_count": 1,
"random_loop_range": null
}
],
"transition": {
"enabled": true,
"type": "fade",
"duration": 0.5
},
"playback": {
"loop_playlist": true,
"auto_start": true
},
"scenes": {
"rest": [],
"active": [],
"sleep": [],
"interact": [],
"state_machine": {
"initial_state": "default",
"states": {
"rest_lying": {
"name": "趴着休息",
"mode": "free_mode",
"sequence": [
{
"video_id": "anim_1",
"loop_count": 1,
"random_loop_range": null
},
{
"video_id": "anim_2",
"loop_count": null,
"random_loop_range": [
2,
15
]
},
{
"video_id": "anim_3",
"loop_count": 1,
"random_loop_range": null
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "lick_paw",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [
{
"trigger": {
"voice": {
"keyword": "name"
}
},
"target_state": "called_name",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button1"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "握手"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button2"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "吃饭"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button3"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "逗猫棒"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"sensor": {
"name": "touch"
}
},
"target_state": "pet_head",
"priority": 10
}
],
"weight": 1,
"defer_triggers": true,
"ignore_triggers": false
},
"pet_head": {
"name": "摸猫头",
"mode": "interactive_mode",
"sequence": [
{
"video_id": "anim_20",
"loop_count": 1,
"random_loop_range": null
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "rest_lying",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "lick_paw",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [],
"weight": 1,
"defer_triggers": false,
"ignore_triggers": true
},
"shake_hand": {
"name": "握手",
"mode": "interactive_mode",
"sequence": [
{
"video_id": "anim_17",
"loop_count": 1,
"random_loop_range": null
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "rest_lying",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "lick_paw",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [],
"weight": 1,
"defer_triggers": false,
"ignore_triggers": true
},
"stand_active": {
"name": "犯困眯眼",
"mode": "free_mode",
"sequence": [
{
"video_id": "anim_4",
"loop_count": 1,
"random_loop_range": null
},
{
"video_id": "anim_5",
"loop_count": null,
"random_loop_range": [
2,
10
]
},
{
"video_id": "anim_6",
"loop_count": 1,
"random_loop_range": null
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "rest_lying",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "lick_paw",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [
{
"trigger": {
"voice": {
"keyword": "name"
}
},
"target_state": "called_name",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button1"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "握手"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button2"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "吃饭"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button3"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "逗猫棒"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"sensor": {
"name": "touch"
}
},
"target_state": "pet_head",
"priority": 10
}
],
"weight": 1,
"defer_triggers": true,
"ignore_triggers": false
},
"default": {
"name": "默认状态",
"mode": "free_mode",
"sequence": [
{
"video_id": "anim_0",
"loop_count": null,
"random_loop_range": [
2,
15
]
}
],
"next_state": null,
"next_states": [
{
"state": "rest_lying",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "lick_paw",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [
{
"trigger": {
"voice": {
"keyword": "name"
}
},
"target_state": "called_name",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button1"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "握手"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button2"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "吃饭"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button3"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "逗猫棒"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"sensor": {
"name": "touch"
}
},
"target_state": "pet_head",
"priority": 10
}
],
"weight": 1,
"defer_triggers": true,
"ignore_triggers": false
},
"feeding": {
"name": "喂食",
"mode": "interactive_mode",
"sequence": [
{
"video_id": "anim_18",
"loop_count": 1,
"random_loop_range": null
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "rest_lying",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "lick_paw",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [],
"weight": 1,
"defer_triggers": false,
"ignore_triggers": true
},
"thirsty": {
"name": "蹲姿",
"mode": "free_mode",
"sequence": [
{
"video_id": "anim_11",
"loop_count": 1,
"random_loop_range": null
},
{
"video_id": "anim_12",
"loop_count": null,
"random_loop_range": [
2,
30
]
},
{
"video_id": "anim_13",
"loop_count": 1,
"random_loop_range": null
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "lick_paw",
"weight": 1
}
],
"transitions": [
{
"trigger": {
"voice": {
"keyword": "name"
}
},
"target_state": "called_name",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button1"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "握手"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button2"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "吃饭"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button3"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "逗猫棒"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"sensor": {
"name": "touch"
}
},
"target_state": "pet_head",
"priority": 10
}
],
"weight": 1,
"defer_triggers": true,
"ignore_triggers": false
},
"drinking": {
"name": "逗猫棒",
"mode": "interactive_mode",
"sequence": [
{
"video_id": "anim_19",
"loop_count": 1,
"random_loop_range": null
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "rest_lying",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "lick_paw",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [],
"weight": 1,
"defer_triggers": false,
"ignore_triggers": true
},
"sleep": {
"name": "趴下睡觉",
"mode": "free_mode",
"sequence": [
{
"video_id": "anim_7",
"loop_count": 1,
"random_loop_range": null
},
{
"video_id": "anim_8",
"loop_count": null,
"random_loop_range": [
50,
300
]
},
{
"video_id": "anim_9",
"loop_count": 1,
"random_loop_range": null
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "rest_lying",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 0.5
},
{
"state": "lick_paw",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [
{
"trigger": {
"voice": {
"keyword": "name"
}
},
"target_state": "called_name",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button1"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "握手"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button2"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "吃饭"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button3"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "逗猫棒"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"sensor": {
"name": "touch"
}
},
"target_state": "pet_head",
"priority": 10
}
],
"weight": 1,
"defer_triggers": true,
"ignore_triggers": false
},
"called_name": {
"name": "被叫名字",
"mode": "interactive_mode",
"sequence": [
{
"video_id": "anim_14",
"loop_count": 1,
"random_loop_range": null
},
{
"video_id": "anim_15",
"loop_count": 1,
"random_loop_range": null
},
{
"video_id": "anim_16",
"loop_count": 1,
"random_loop_range": null
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "rest_lying",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "lick_paw",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [],
"weight": 1,
"defer_triggers": false,
"ignore_triggers": true
},
"lick_paw": {
"name": "猫舔爪子",
"mode": "free_mode",
"sequence": [
{
"video_id": "anim_10",
"loop_count": null,
"random_loop_range": [2, 10]
}
],
"next_state": null,
"next_states": [
{
"state": "default",
"weight": 1
},
{
"state": "rest_lying",
"weight": 1
},
{
"state": "stand_active",
"weight": 1
},
{
"state": "sleep",
"weight": 1
},
{
"state": "thirsty",
"weight": 1
}
],
"transitions": [
{
"trigger": {
"voice": {
"keyword": "name"
}
},
"target_state": "called_name",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button1"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "握手"
}
},
"target_state": "shake_hand",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button2"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "吃饭"
}
},
"target_state": "feeding",
"priority": 10
},
{
"trigger": {
"button": {
"name": "button3"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"voice": {
"keyword": "逗猫棒"
}
},
"target_state": "drinking",
"priority": 10
},
{
"trigger": {
"sensor": {
"name": "touch"
}
},
"target_state": "pet_head",
"priority": 10
}
],
"weight": 1,
"defer_triggers": true,
"ignore_triggers": false
}
}
}
},
"remote_control": {
"enabled": true,
"host": "0.0.0.0",
"port": 5000
}
}