@aneisch So nice ! I was looking for that… and funny fact, I will get married the day before you ! (19-05-2018)
Awesome! And congratulations!!
I have started doing this as a real component for HASS. The PR is #9889. It’s still a work in progress and currently more targeted at short timespans (like motion controlled lights). But before someone reads this thread and starts implementing, it seems more efficient to point at an existing effort where collaborative work may lead to a better result.
PS: Congratulations!
Very cool. I’ve been following the discussion on Github about a potential timer component. I think this would be a great addition but lack the skills to do it myself. Does your timer persist/remember across restarts of HASS?
Currently not, which is very unfortunate for the usecase where a specific point in time should be tracked. While having lights in mind I didn’t care too much about persistence, but reading this thread it came to my mind. I’ll have a look at that over the weekend.
On top of that I’m still unsure if what this custom component is doing can be replicated 100%. The timer is like an egg-timer where you set a (modifiable) duration where the finished event fires after a specific duration from now. In case of a wedding you actually provide a fixed date, much like an alarm clock. So my component is in comparison more like the egg-timer. It does a similar thing, but in a different way.
I’ll see how my component evolves. Right now I think there should be a second component for tracking fixed dates, and my timer for variable ending times which can easily be extended.
@danielperna84 As your PR was merged recently does that mean my question here could be solved with your component easily in the next Home Assistant (probably 0.57) release?
Yes, that would be a usecase. Currently it is only controlled via services. But using these it would be very simple. You’d set up the timer with the doze time, and then use the state of the timer (active
) as a trigger for the automation that mutes the sound. To start the timer, all you have to do is call the timer.start
service. Afterwards you unmute either by monitoring the timers state (idle
) or you use the timer.finished
event as the trigger.
Is this correct and what is missing for running it by a script?
- alias: timerstarted
trigger:
platform: time
seconds: ‘/1’
condition:
condition: state
entity_id: ‘timer.schlummern’
state: ‘1’
action:
service: counter.increment
data:
entity_id: counter.elapsed
-
alias: timerfinished
trigger:
platform: event
event_type: timer.finished
event_data:
entity_id: ‘timer.schlummern’
action:
service: counter.reset
data:
entity_id: counter.elapsed -
alias: schlummern
trigger:
platform: timer
entity_id: timer.schlummern
to: ‘active’
condition:
condition: state
entity_id: ‘timer.schlummern’
state: ‘1’
action:
service: media_player.volume_mute
data:
entity_id: media_player.schlafzimmer
is_volume_muted: yes#Timer Component
timer:
schlummern:
duration: ‘0:10:00’counter:
elapsed:
initial: 0
step: 1
The example I gave in the PR isn’t up to date anymore. Besides that you probably don’t really need the counter. That was just a demo.
Out of the top of my head you should be doing something like this:
timer:
schlummern:
duration: '0:10:00'
automation:
- alias: schlummern_on
trigger:
platform: state
entity_is: timer.schlummern
to: 'active'
action:
service: media_player.volume_mute
data:
entity_id: media_player.schlafzimmer
is_volume_muted: yes
- alias: schlummern_off
trigger:
platform: event
event_type: timer.finished
event_data:
entity_id: 'timer.schlummern'
action:
service: media_player.volume_mute
data:
entity_id: media_player.schlafzimmer
is_volume_muted: no
To start the timer I would need to know what should be starting the timer. An example would be:
automation:
- alias: mute_on_sunset
trigger:
platform: sun
event: sunset
action:
service: timer.start
data:
entity_id: timer.schlummern
All this together should mute the media player for 10 minutes on each sunset.
Thanks, I would like to run it by a script.
Is this correct?
alias: SchlummernStart
service: timer.start
data:
entity_id: timer.schlummern
Looks ok to me.
Thanks a lot, works as it should
Thank you very much for sharing and all the comments to make a better countdown component. Work really great. ^^
I had set this up in a previous installation of hass.io and it worked great. I’m working on fresh install and can’t seem to get to be recognized. I created the custom_components folder and copied the same exact files I used before. But now I’m getting an “Integration date_countdown not found when trying to verify its sensor platform.” error message. I’ve updated the folder structure so it’s now ‘\config\custom_component\countdown\sensor.py’ but still get the same error message. I do have an empty ‘init.py’ & ‘mainifest.json’
Ryan,
I just re-added the component to my config and ran into the same issue. After messing around a bit, this seems to be what fixed it: Stopping HASS, touching __init__.py
, and deleting the __pycache__
folder (if present),
Here’s what I have after it’s running again:
ls /homeassistant/custom_components/date_countdown
__init__.py __pycache__ sensor.py
- platform: date_countdown
name: Wedding Countdown
date: "20-05-2020 18:00"
Does this still work?
My sensor just returns unavailable. How to debug?
Hey there, there might have been some changes. I edited my original post but you can also find the code at https://github.com/aneisch/home-assistant-config/tree/master/custom_components/date_countdown. I just re-enabled this in my sensors.yaml and it works as expected.
- platform: date_countdown
name: Test Countdown
# day-month-year hour:minute
date: "20-05-2020 18:00"
Thanks for quick response.
Does the script need to be called sensor.py or date_countdown.py ?
What owner and permissions does init.py need ?
Can the sensors.yaml config be stored just in normal configuration.yaml ?
If not, where does sensors.yaml need to be stored in /home-assistant-config/custom_components/date_countdown/sensors.yaml
Or just in /home-assistant-config/sensors.yaml ?
Any other steps to debug welcomed.
It needs to be called sensor.py, I’m not sure about permissions of init, mine are 664, owned by my user. Yes, you can have your sensor config in configuration.yaml in your sensors section, no requirement to split out the files.
/home-assistant-config/sensors.yaml ?
Yes.
Anyone knows how to create a countdown timer from a dynamic duration. I have 3 buttons each has a diff time (30mins, 45mins, and 60mins). So my timer duration depends which one was clicked but when I do the following code Hassio gives me an error:
sensor:
- platform: template
sensors:
irrigation_time:
value_template: >-
{% if states('switch.irrig_front_yard') == 'on' %}
00:{{ states('input_number.irrigation_frontyardduration') | int }}:00
{% elif states('switch.irrig_cedars') == 'on' %}
00:{{ states('input_number.irrigation_cedarsduration') | int }}:00
{% elif states('switch.irrig_front_side_yard') == 'on' %}
00:{{ states('input_number.irrigation_frontsideduration') | int }}:00
{% elif states('switch.irrig_front_guest_yard') == 'on' %}
00:{{ states('input_number.irrigation_frontguestduration') | int }}:00
{% else %}
00:00:00
{% endif %}
timer:
irrigation_counter:
duration: "{{ states('sensor.irrigation_time') | int }}"