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

 找回密码
 立即注册
查看: 2861|回复: 8

[技术探讨] [基本解决]请教:如何对比同一传感器三分钟前和当前值的差

[复制链接]

1

主题

7

帖子

48

积分

新手上路

Rank: 1

积分
48
金钱
41
HASS币
0
发表于 2021-11-20 23:17:29 | 显示全部楼层 |阅读模式
本帖最后由 ctr 于 2021-11-22 21:21 编辑

请教各位,我想在hass里面写一个自动化。就是温度传感器三分钟内下降3度就打开加热器开关。
可是一直找不到获取传感器三分钟前数值的方法。后来装了nodered也没找到解决方法。
还请知道的朋友指点一二,谢谢了!
经过zsqduke 大侠和 s450586793  ,ryanh7 大侠的指点,我的问题基本解决。感谢技术达人们!
虽然还不能成功调用某个时间的历史数据,但是通过trend传感器也基本实现了功能需求。
我的代码如下:
binary_sensor:
  - platform: trend
    sensors:
      temp_falling:
        friendly_name: "降温"
        entity_id: sensor.temperature_heaterwaterin
        sample_duration: 600
        max_samples: 30
        min_gradient: -0.003
        device_class: cold
- id: '1634999999160'
  alias: pump
  description: ''
  trigger:
  - platform: time_pattern
    minutes: /2
  condition:
  - condition: numeric_state
    entity_id: sensor.temperature_heaterwaterin
    above: '35'
  - condition: state
    entity_id: switch.waterpump_hotwater_relay
    state: 'off'
    for: 00:20:00
  action:
  - type: turn_on
    device_id: 63556b61b85b2fbbcfdbe5786b6
    entity_id: switch.waterpump_hotwater_relay
    domain: switch
  - delay:
      hours: 0
      minutes: 3
      seconds: 0
      milliseconds: 0
  - choose:
    - conditions:
      - condition: state
        entity_id: binary_sensor.temp_falling
        state: 'on'
      sequence:
      - delay:
          hours: 0
          minutes: 7
          seconds: 0
          milliseconds: 0
    default: []



回复

使用道具 举报

4

主题

605

帖子

2170

积分

金牌会员

Rank: 6Rank: 6

积分
2170
金钱
1560
HASS币
20
发表于 2021-11-21 04:44:21 来自手机 | 显示全部楼层
一个比较接近的办法:可以创建一个template sensor每3分钟更新一次目标传感器,然后比较。不过这个跟连续的更新3分钟前的数据还是不一样
回复

使用道具 举报

4

主题

605

帖子

2170

积分

金牌会员

Rank: 6Rank: 6

积分
2170
金钱
1560
HASS币
20
发表于 2021-11-21 04:53:14 | 显示全部楼层
有个更好的办法。

https://www.home-assistant.io/integrations/trend/

用趋势传感器二进制传感器

这两个参数设成你想要的效果:按你说的例子应该是-3/180=-0.0167和180
min_gradient string (optional, default: 0.0)
The minimum rate at which the observed value must be changing for this sensor to switch on. The gradient is measured in sensor units per second.
sample_duration integer (optional, default: 0)
The duration in seconds to store samples for. Samples older than this value will be discarded
回复

使用道具 举报

1

主题

7

帖子

48

积分

新手上路

Rank: 1

积分
48
金钱
41
HASS币
0
 楼主| 发表于 2021-11-21 09:48:32 | 显示全部楼层
zsqduke 发表于 2021-11-21 04:44
一个比较接近的办法:可以创建一个template sensor每3分钟更新一次目标传感器,然后比较。不过这个跟连续的 ...

谢谢回复,这也算是一个折中的方法了。难道homeassistant不提供读取数据库历史数据的操作吗?按道理温度传感器的曲线图就是历史数据还原出来的,就应该可以读取历史数据的啊。
回复

使用道具 举报

15

主题

253

帖子

2137

积分

金牌会员

Rank: 6Rank: 6

积分
2137
金钱
1884
HASS币
0
发表于 2021-11-21 10:20:34 | 显示全部楼层
用node,每3分钟获取一次数值,获取后将数值持久化保存
第二次取值获取后与第一次做对比
回复

使用道具 举报

15

主题

253

帖子

2137

积分

金牌会员

Rank: 6Rank: 6

积分
2137
金钱
1884
HASS币
0
发表于 2021-11-21 10:31:36 | 显示全部楼层
就msg.payload(温度数值)转移到flow.temp(sotre)
第二次获取msg.payload  然后if flow.get("temp","store")*1-msg.payload > 3 则打开加热开关,然后再将第二次的msg.payload转移到flow.temp
后面再完善一下,加热到什么温度停止
回复

使用道具 举报

1

主题

7

帖子

48

积分

新手上路

Rank: 1

积分
48
金钱
41
HASS币
0
 楼主| 发表于 2021-11-21 11:13:00 | 显示全部楼层
s450586793 发表于 2021-11-21 10:20
用node,每3分钟获取一次数值,获取后将数值持久化保存
第二次取值获取后与第一次做对比 ...

原理明白,只是您的这个node指的是node-red还是node.js?谢谢指教。
回复

使用道具 举报

1

主题

7

帖子

48

积分

新手上路

Rank: 1

积分
48
金钱
41
HASS币
0
 楼主| 发表于 2021-11-21 12:24:50 | 显示全部楼层
ryanh7 发表于 2021-11-21 11:58
node-red,event(state)->  func,func里用context保存一个3分钟内的数据数组,新温度值过来了先丢弃3分 ...

好的,看明白了,我试试。先谢了。
回复

使用道具 举报

4

主题

605

帖子

2170

积分

金牌会员

Rank: 6Rank: 6

积分
2170
金钱
1560
HASS币
20
发表于 2021-11-21 12:38:07 | 显示全部楼层
ctr 发表于 2021-11-21 09:48
谢谢回复,这也算是一个折中的方法了。难道homeassistant不提供读取数据库历史数据的操作吗?按道理温度 ...

看板凳那个方法,完美实现
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-22 09:26 , Processed in 0.491571 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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