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

 找回密码
 立即注册
查看: 1747|回复: 16

[求助] 自动化中变量无法计算

[复制链接]

10

主题

1332

帖子

4250

积分

论坛元老

Rank: 8Rank: 8

积分
4250
金钱
2918
HASS币
0
发表于 2024-3-9 23:15:51 | 显示全部楼层 |阅读模式
各位大佬,我写了一段自动化代码,30分钟内循环5次,但是自定义的变量不更新是啥情况?
alias: 关灯前提前5分钟提醒,并增大音量
description: 关灯前30分钟提醒,每5分钟提醒一次,提醒时加大音量,提醒完成音量恢复!
trigger:
  - platform: time
    at: "20:30:00"
condition: []
action:
  - variables:
      original_volume: "{{ state_attr('media_player.ke_ting', 'volume_level') }}"
      countdown: 30
    enabled: true
  - service: media_player.volume_set
    data:
      volume_level: 0.29
    target:
      entity_id:
        - media_player.ke_ting
    enabled: false
  - repeat:
      count: 5
      sequence:
        - service: tts.edge_tts_say
          data:
            cache: false
            entity_id:
              - media_player.ke_ting
            message: '还有{{ countdown }}分钟关灯啦,宝贝们抓紧呀!'
        - delay:
            hours: 0
            minutes: 0
            seconds: 5
            milliseconds: 0
        - variables:
            countdown: "{{ countdown - 5 }}"
  - service: media_player.volume_set
    data:
      entity_id:
        - media_player.ke_ting
      volume_level: "{{ original_volume }}"
    enabled: false
mode: single
就是这一句没什么作用
countdown: "{{ countdown - 5 }}"
请各位路过的大佬不吝赐教。谢谢
回复

使用道具 举报

32

主题

1065

帖子

4942

积分

论坛元老

Rank: 8Rank: 8

积分
4942
金钱
3862
HASS币
90
发表于 2024-3-9 23:36:24 | 显示全部楼层
本帖最后由 relliky 于 2024-3-9 23:47 编辑

这是jinja的原因,jinji变量如果在jinja循环里面赋值是需要在循环外定义namespace的,但在HA支持的repeat里面就直接不支持在循环里面赋值给到外界看到了。见官方文档https://www.home-assistant.io/docs/scripts/#scope-of-variables

我也以前遇到同样的问题,所以我后来写尚未复杂一点的这种自动化都转成pyscript了。https://bbs.hassbian.com/thread-16211-1-1.html

还有一个曲线救国的方法,再额外定义一个input_number实体做countdown,这样用这个实体操作全局就都能看到了。
我家全屋智能的HA设置 https://github.com/relliky/Tais_Home_Assistant_Config
回复

使用道具 举报

46

主题

1654

帖子

6676

积分

论坛元老

Rank: 8Rank: 8

积分
6676
金钱
5012
HASS币
40
发表于 2024-3-10 12:31:47 | 显示全部楼层
就我而言,ha自动化很难用,nodered才是写自动化的
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

10

主题

1332

帖子

4250

积分

论坛元老

Rank: 8Rank: 8

积分
4250
金钱
2918
HASS币
0
 楼主| 发表于 2024-3-10 15:17:07 | 显示全部楼层
jjcs 发表于 2024-3-10 12:31
就我而言,ha自动化很难用,nodered才是写自动化的

我也在学习,谢谢大佬,就这个自动化而言,nr会更简单些么?
回复

使用道具 举报

10

主题

1332

帖子

4250

积分

论坛元老

Rank: 8Rank: 8

积分
4250
金钱
2918
HASS币
0
 楼主| 发表于 2024-3-10 15:21:56 | 显示全部楼层
relliky 发表于 2024-3-9 23:36
这是jinja的原因,jinji变量如果在jinja循环里面赋值是需要在循环外定义namespace的,但在HA支持的repeat里 ...

大佬,namespace是什么?如何定义呢?我刚开始学习,还不太会写pyscript呢。额外定义一个input_number不够优雅啊。
回复

使用道具 举报

10

主题

1332

帖子

4250

积分

论坛元老

Rank: 8Rank: 8

积分
4250
金钱
2918
HASS币
0
 楼主| 发表于 2024-3-10 15:50:49 | 显示全部楼层
relliky 发表于 2024-3-9 23:36
这是jinja的原因,jinji变量如果在jinja循环里面赋值是需要在循环外定义namespace的,但在HA支持的repeat里 ...

namespace是不是已经淘汰了,我用gpt3.5写了一个, 没法保存,不知道写的对不对
回复

使用道具 举报

46

主题

1654

帖子

6676

积分

论坛元老

Rank: 8Rank: 8

积分
6676
金钱
5012
HASS币
40
发表于 2024-3-10 17:41:10 | 显示全部楼层
隔壁的王叔叔 发表于 2024-3-10 15:17
我也在学习,谢谢大佬,就这个自动化而言,nr会更简单些么?

自动化最关键的就是可视化,和管理,和可维护,nodered的基于流的,非常直观,关键功能比ha强一万倍,
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

9

主题

195

帖子

1528

积分

金牌会员

Rank: 6Rank: 6

积分
1528
金钱
1333
HASS币
0
发表于 2024-3-10 18:25:37 | 显示全部楼层
双括号里面的countdown需要是一个实体吧,如果已经定义过了这个实体,写法大概应该是这样的,试一下这个呢?
countdown: "{{ states('countdown')|int - 5 }}"
回复

使用道具 举报

10

主题

1332

帖子

4250

积分

论坛元老

Rank: 8Rank: 8

积分
4250
金钱
2918
HASS币
0
 楼主| 发表于 2024-3-10 20:31:51 | 显示全部楼层
tangyali 发表于 2024-3-10 18:25
双括号里面的countdown需要是一个实体吧,如果已经定义过了这个实体,写法大概应该是这样的,试一下这个呢?
...

countdown不是一个实体,是前面variables定义的一个变量。
回复

使用道具 举报

10

主题

1332

帖子

4250

积分

论坛元老

Rank: 8Rank: 8

积分
4250
金钱
2918
HASS币
0
 楼主| 发表于 2024-3-10 20:34:39 | 显示全部楼层
jjcs 发表于 2024-3-10 17:41
自动化最关键的就是可视化,和管理,和可维护,nodered的基于流的,非常直观,关键功能比ha强一万倍, ...

原本想想的是杀鸡焉用牛刀,哈哈,我好好学学
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 22:04 , Processed in 0.079246 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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