『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 394|回复: 27

[技术探讨] 请教如何在脚本动作中提取响应变量里某个值

[复制链接]

158

主题

2508

帖子

7788

积分

元老级技术达人

积分
7788
金钱
5275
HASS币
30
发表于 2025-1-14 12:39:06 | 显示全部楼层 |阅读模式
本帖最后由 bugensui 于 2025-1-14 12:43 编辑

最近的研究播放音乐,Music Assistant: 获取库项目动作,支持搜索具体的歌,在脚本里,配置好相关动作,勾选响应变量,他会返回json,1,我想提取items子项的长度,然后根据长度循环提取第一层级uri连接,
2,在脚本中如何临时保存这个uri链接的结果,因为我要在接下来的动作里执行播放媒体序列的操作


{"items":[{"media_type":"track","uri":"library://track/507","name":"你好,周杰伦","version":"","image":"http://172.*******","artists":[{"media_type":"artist","uri":"library://artist/343","name":"安又琪","version":"","image":null}],"album":{"media_type":"album","uri":"library://album/333","name":"Angela","version":"","image":"http://172.******}},{"media_type":"track","uri":"library://track/900","name":"01.夜的第七章","version":"","image":"http://172.*****","artists":[{"media_type":"artist","uri":"library://artist/36","name":"周杰伦","version":"","image":null}],"album":{"media_type":"album","uri":"library://album/126","name":"依然范特西","version":"","image":"http://172.*****"}}],"limit":1,"offset":0,"order_by":"name","media_type":"track"} 


回复

使用道具 举报

12

主题

1456

帖子

4637

积分

论坛元老

Rank: 8Rank: 8

积分
4637
金钱
3181
HASS币
0
发表于 2025-1-14 14:34:42 | 显示全部楼层
变量啊。。。。。。。。。。
回复

使用道具 举报

158

主题

2508

帖子

7788

积分

元老级技术达人

积分
7788
金钱
5275
HASS币
30
 楼主| 发表于 2025-1-14 14:39:09 | 显示全部楼层
隔壁的王叔叔 发表于 2025-1-14 14:34
变量啊。。。。。。。。。。

我不知道怎么弄,能不能简单的指导下,官方文档也没有写清楚
回复

使用道具 举报

12

主题

1456

帖子

4637

积分

论坛元老

Rank: 8Rank: 8

积分
4637
金钱
3181
HASS币
0
发表于 2025-1-14 14:44:08 | 显示全部楼层
bugensui 发表于 2025-1-14 14:39
我不知道怎么弄,能不能简单的指导下,官方文档也没有写清楚

看看这个能不能参考
alias: 给iphone发消息
sequence:
  - alias: Set up variables
    variables:
      action_confirm: "{{ 'CONFIRM_' ~ context.id }}"
      action_dismiss: "{{ 'DISMISS_' ~ context.id }}"
      notification_title: "{{ title }}"
      notification_message: "{{ message }}"
  - alias: Send notification
    domain: mobile_app
    type: notify
    device_id: bc3980f01c18ded90bea32c3eab17ef8
    title: "{{ notification_title }}"
    message: "{{ notification_message }}"
    data:
      actions:
        - action: "{{ action_confirm }}"
          title: 确认
        - action: "{{ action_dismiss }}"
          title: 忽略
  - alias: Awaiting response
    wait_for_trigger:
      - event_type: mobile_app_notification_action
        event_data:
          action: "{{ action_confirm }}"
        trigger: event
      - event_type: mobile_app_notification_action
        event_data:
          action: "{{ action_dismiss }}"
        trigger: event
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ wait.trigger.event.data.action == action_confirm }}"
        sequence: []
      - conditions:
          - condition: template
            value_template: "{{ wait.trigger.event.data.action == action_dismiss }}"
        sequence: []
description: ""
回复

使用道具 举报

12

主题

1456

帖子

4637

积分

论坛元老

Rank: 8Rank: 8

积分
4637
金钱
3181
HASS币
0
发表于 2025-1-14 14:51:00 | 显示全部楼层
用variables把值存起来
回复

使用道具 举报

5

主题

80

帖子

317

积分

论坛分享达人

积分
317
金钱
237
HASS币
0
发表于 2025-1-14 14:56:24 | 显示全部楼层
我感觉你只能用模板了,就是在configuration.yaml里添加一个新的sensor:
template:
- sensor:
  - name: URI 列表
    unique_id: uri_list
    state: >
      {{ <这里是你的服务调用>.items | map(attribute='uri') | list | tojson }}

重启hass后
你可以在任何地方通过调用sensor.uri_list 来使用这个列表
每次服务调用更新了items时候,这个sensor会自动被更新
回复

使用道具 举报

158

主题

2508

帖子

7788

积分

元老级技术达人

积分
7788
金钱
5275
HASS币
30
 楼主| 发表于 2025-1-14 15:01:57 | 显示全部楼层
悠哉悠哉 发表于 2025-1-14 14:56
我感觉你只能用模板了,就是在configuration.yaml里添加一个新的sensor:
template:
- sensor:

这里是你的服务调用,这个指的是,具体动作的名称吗
回复

使用道具 举报

158

主题

2508

帖子

7788

积分

元老级技术达人

积分
7788
金钱
5275
HASS币
30
 楼主| 发表于 2025-1-14 15:02:18 | 显示全部楼层

好的,谢谢,我研究一下。
回复

使用道具 举报

5

主题

80

帖子

317

积分

论坛分享达人

积分
317
金钱
237
HASS币
0
发表于 2025-1-14 15:06:31 | 显示全部楼层
bugensui 发表于 2025-1-14 15:01
这里是你的服务调用,这个指的是,具体动作的名称吗

不是动作名称,你那个json值是如何拿到的?
贴段代码来看看?不是所有的地方都支持variables
所以还是得先看你的代码
回复

使用道具 举报

158

主题

2508

帖子

7788

积分

元老级技术达人

积分
7788
金钱
5275
HASS币
30
 楼主| 发表于 2025-1-14 15:15:03 | 显示全部楼层
本帖最后由 bugensui 于 2025-1-14 15:17 编辑
悠哉悠哉 发表于 2025-1-14 15:06
不是动作名称,你那个json值是如何拿到的?
贴段代码来看看?不是所有的地方都支持variables
所以还是得先 ...

我用这个代码{{ random_tracks.items}}获取,会报错,<built-in method items of dict object at 0x7fc1d9362ac0>,搜百度好像是items是py内置的方法,可是Music Assistant搜索返回的json里的名字是items,不知道怎么处理,{"items":[这里是歌曲的查询结果*****],"limit":1,"offset":0,"order_by":"name","media_type":"track"},我只是想拿到items子项长度,就是代表有几首歌,子项里的uri链接,就是歌曲的播放链接。
sequence:
  - data:
      media_type: track
      order_by: play_count
      config_entry_id: 01JGDGA7ZKA72W5VTN6YP6XG9D
      limit: 10
      search: 王力宏
    response_variable: random_tracks
    action: music_assistant.get_library
  - action: notify.persistent_notification
    data:
      message: "{{ random_tracks.items}}"
alias: 播放音乐模板
description: ""


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-2-2 20:43 , Processed in 0.057920 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表