我想在这里分享我的倒计时传感器,希望有人会发现它有用或有知识,使它正确地实现为一个内置传感器。从屏幕截图和配置可以看出,我是为了特定的目的而构建的: slight_smile:它的目的是为多日远离事件,而不是作为一个计时器。(每分钟只更新一次)

要实现,创建一个custom_componentsHome Assistant目录的根目录。19463331伟德国际在里面,创建一个传感器目录中。在里面,创建文件sensor.py包括以下内容:

""" Date Countdown """ import datetime from datetime import timedelta import logging import voluptuous as vol import homeassistant.helpers. "从homeassistant.components.sensor导入PLATFORM_SCHEMAconst import CONF_NAME from homeassistant.helpers. Entity import从homeassistant导入实体。util import Throttle _LOGGER = logging.getLogger(__name__) ATTR_DAYS = 'days' ATTR_HOURS = 'hours' ATTR_MINUTES = 'minutes' DEFAULT_NAME = "Countdown" CONF_DATE = 'date' MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=60) PLATFORM_SCHEMA = PLATFORM_SCHEMA。扩展({vol.Required (CONF_DATE):简历。string, vol.可选(CONF_NAME, default=DEFAULT_NAME): cv. string, vol.可选(CONF_NAME, default=DEFAULT_NAME): cv。def setup_platform(hass, config, add_devices, discovery_info=None): ""设置日期倒计时传感器。"end_date = config.get(CONF_DATE) sensor_name = config.get(CONF_NAME) add_devices([Countdown(sensor_name, end_date)]) class倒计时(Entity): ""执行日期倒计时传感器。"" def __init__(self, sensor_name, end_date): ""初始化传感器。"”“自我。End_date = End_date self。_name = sensor_name self。_state = None self。_data = {} self.update() @property def name(self): """返回传感器名称"”“回归自我。@property def state(self): """返回传感器的状态"”“回归自我。@ state @property def device_state_attributes(self): return {ATTR_DAYS: self._data.get("days"), ATTR_HOURS: self._data.get("hours"), ATTR_MINUTES: self._data.get("minutes")}"" return 'mdi:calendar' @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): ""计算时间直到结束""" end_date = datetime.datetime.strptime(self。'%d-%m-%Y %H:% m ') days = (end_date - datetime.datetime.now()) days, seconds = days。天,天。Seconds hours = Seconds // 3600分钟= (Seconds % 3600) // 60秒= Seconds % 60自我。_data["days"] = days self。_data["hours"] = hours self._data["minutes"] = minutes self._state = str(days) + " days " + str(hours) \ + " hours " + str(minutes) + " minutes"

然后按照以下格式配置/sensors.yaml:

倒计时日期:“2005-2018 18:00”
12个喜欢

我认为你可以建立一个自动化系统来输入原始传感器的状态属性,但是通过添加另一个模板传感器为这个传感器构建一个自动化:

—platform: template sensors: wedding_countdown_days: value_template: >天}}

然后:

—alias:“Wedding Notify”initial_state: on trigger: platform: state entity_id: sensor。Wedding_countdown_days条件:- condition: template value_template: ` {{states.sensor.wedding_countdown_days。State | float % 50 == 0}}' action: - service: notify。Wedding is in {{states.sensor.wedding_countdown_days.(婚礼在{{states.sensor.wedding_countdown_days.)州}}天! !
3喜欢

谢谢你。我一直在找这样的东西。完美的工作。

太棒了!我很高兴!

我如何只显示天数?

你需要添加一个模板传感器,从主倒计时传感器中获取day属性:

—platform: template sensors: wedding_countdown_days: value_template: >天}}

这将给你一个传感器实体,只有天作为它的状态。

1像

我们可以在appdaemon中使用它吗?就好了: slight_smile:

当然可以,它将像任何其他实体的状态一样呈现给appdaemon。

你有任何线索ghow来集成这些在appdaemon ?: stuck_out_tongue:

编辑:哦,这是一个不同的自定义组件,我认为你正在引用。看到提醒定制组件.我认为这可以与链接上的代码几乎兼容。

@aneisch太好了!我一直在找这个,而且有趣的是,我会在你结婚的前一天结婚!(19-05-2018)

太棒了!恭喜你! !笑脸:

1像

我开始做这个真正的哈斯的组件。公关是# 9889.这项工作仍在进行中,目前更侧重于短时间跨度(如运动控制灯)。但在有人阅读这篇文章并开始执行之前,指出一个现有的努力似乎会更有效率,因为协作工作可能带来更好的结果。: slight_smile:

PS:祝贺你!眨眼:

1像

非常酷。我一直在关注Github上关于潜在计时器组件的讨论。我认为这将是一个很好的补充,但缺乏技能做它自己。在重启HASS时,你的计时器是否保持/记住?

目前还没有,这对于需要跟踪特定时间点的用例来说是非常不幸的。在脑海中有灯光的时候,我并不太在意坚持,但是读到这篇文章,我想到了坚持。我这个周末会去看看的。

最重要的是,我仍然不确定这个自定义组件所做的是否可以100%复制。计时器就像一个鸡蛋计时器,你设置一个(可修改的)持续时间完成了事件在特定持续时间之后触发现在.在婚礼中,你会提供一个固定的日期,就像闹钟一样。所以我的组件比较像鸡蛋计时器。它做类似的事情,但以不同的方式。

我将看到我的组件如何演变。现在我认为应该有第二个组件用于跟踪固定日期,我的计时器用于可轻易延长的可变结束时间。

@danielperna84你的公关最近合并了,这意味着我的问题在这里可以在下一个Home Assistant(可能是0.57)版本中使用您的组件轻松解决吗?19463331伟德国际

是的,这是一个用例。目前它只能通过服务来控制。但是使用这些会非常简单。您可以使用打瞌睡时间来设置计时器,然后使用计时器的状态(活跃的)作为自动静音的触发器。要启动计时器,你所要做的就是调用timer.start服务。然后,您可以通过监视计时器状态(闲置),或者使用thetimer.finished事件作为触发器。

这是正确的吗?通过脚本运行它还缺少什么?

别名:timerstarted

触发:
平台:时间
秒:“/ 1”
条件:
条件:国家
entity_id:“timer.schlummern”
状态:' 1 '
行动:
服务:counter.increment
数据:
entity_id: counter.elapsed

  • 别名:timerfinished
    触发:
    平台:事件
    event_type: timer.finished
    event_data:
    entity_id:“timer.schlummern”
    行动:
    服务:counter.reset
    数据:
    entity_id: counter.elapsed

  • 别名:schlummern
    触发:
    平台:定时器
    entity_id: timer.schlummern
    :“活跃”
    条件:
    条件:国家
    entity_id:“timer.schlummern”
    状态:' 1 '
    行动:
    服务:media_player.volume_mute
    数据:
    entity_id: media_player.schlafzimmer
    is_volume_muted:是的

    #计时器组件
    定时器:
    schlummern:
    持续时间:“0:10:00”

    计数器:
    运行:
    初始:0
    步骤:1

我在PR中给出的例子已经过时了。除此之外,你可能真的不需要柜台。那只是个演示。

在我的脑海里,你应该这样做:

Timer: schlummern: duration: '0:10 ' automation: - alias: schlummern_on trigger: platform: state entity_is: Timer。Schlummern to: 'active' action: service: media_player。音量静音数据:entity_id: media_player。Schlafzimmer is_volume_mute: yes - alias: schlummern_off触发器:platform: event event_type: timer。完成的event_data: entity_id: 'timer。Schlummern的行动:服务:media_player。音量静音数据:entity_id: media_player。schlafzimmer is_volume_muted:不

要启动计时器,我需要知道应该如何启动计时器。例如:

-别名:mute_on_sunset触发器:平台:sun事件:日落动作:服务:计时器。开始数据:entity_id: timer.schlummern

所有这些加在一起,应该会让媒体播放器在每次日落时静音10分钟。

1像

谢谢,我想按脚本来。
这是正确的吗?

alias: SchlummernStart service: timer。开始数据:entity_id: timer.schlummern