Trigger Automation with timestamps from file

It is in the format

I grab them from a different app and process the file with Python. I can manipulate the data to any format

Yes, I’m currently using it. Unfortunately, the calculation method used here are not supported.

I don’t know what this implies , weather it(some of the various method) differs “minutes”, in that case you can use a template-sensor to i.e “correct/add”,the outcome of the sensor, from this integration.
If it’s another “unsupported method” , you could ask for a Feature-Request … i have no knowledge in this “topic” in how many different methods is used for this
But i guess it no stranger than request support for a language ( should be easier to add yet another “method” actually )( as i guess the method is “static” per definition )

I’d prefer to do it myself. As they would need to provide more granularity in calculation and it would not be a straightforward.
I don’t know why such a simple trigger is so complex.

I tried to trigger it with template

{{ sensor.date_time == "2024-03-13, 20:00:00" }}

But no luck either.

In Developer Tools you can test your “template” attempts

https://w.ww.home-assistant.io/integrations/template/.
Templating - Home Assistant.
Automation Trigger - Home Assistant.

Here are 3 urls to the documentation, and when i asked in which “format/source” , i mend whether you get a file-state(s) or you write a document, your python-result could be parsed to a template-sensor, but you have to present your “Source” and explain how you want your “integration” to work, i.e “for each datetime in “list” trigger automation”

If Using the file-integration, you need to pass every(incoming) entry into a “list”, or “touch” a file and trigger upon “last-updated” ( unreliable !)
You can’t use the file-integration, to write a txt.file with 10 entries, and use that like you want , changing it ones a day, with new entries

or use this, and call it a service-call

Thanks for the links, this template now works

  - platform: template
    value_template: '{{ now().strftime("%m-%d %H:%M") == "03-01 12:26" }}'

I manipulated all entries in my file to look similar and copied it over to automation.yaml
It looks bad and the file is huge now but at least it works.
I will try to figure it out with the file sensor or a python script and I will post the solution as well.

If you can make your python to ingest the timestamp(or something) to the file-sensor(at “specific time”, you could either use the last_updated/last changed ( it changes every time the file-content is changed … maybe even at other times :laughing:(not sure which “circumstances” which can causes delays etc, so not so reliable)( or the you use that “last entry” in the file-sensor in an automation/template sensor )
Just remember the “State of the file-sensor Is the last entry only” , so the entries has to be ingested in a synchronized pattern … somehow ( which kind of “move” your automation into the python-file, or what ever ( if you don’t build a list(array) in a “rotating” template-sensor

Right now, it all turning my head upside down, maybe you even can bulk-ingest a series of date-time (meeting entries i the calendar, and use to trigger the automation)

Here is my final solution to create an automation to play azan based on custom prayer times from a csv file.

I created an automation that plays a media file at 4 random time triggers.

- id: '1725198356227'
  alias: newAzan
  description: ''
  trigger:
  - trigger: time
    at: '13:12:00'
  - trigger: time
    at: '14:52:00'
  - trigger: time
    at: '15:47:00'
  - trigger: time
    at: '16:17:00'
  condition: []
  action:
  - action: media_player.play_media
    target:
      entity_id: media_player.living_room_speaker
    data:
      media_content_id: media-source://media_source/local/azan.mp3
      media_content_type: audio/mpeg
    metadata:
      title: azan.mp3
      thumbnail:
      media_class: music
      children_media_class:
      navigateIds:
      - {}
      - media_content_type: app
        media_content_id: media-source://media_source
  mode: single

Then I created a python script that modify this automation based on today’s date from a csv file and placed it in python_scripts folder

import csv
import datetime

today_str = datetime.datetime.now().strftime('%m-%d')
with open('/config/python_scripts/calender.csv', 'r', encoding='utf-8-sig') as file:
    reader = csv.DictReader(file)
    for row in reader:
        if row['Date'] == today_str:
            dhuhrTime = row['Dhuhr']
            asrTime = row['Asr']
            maghribTime = row['Maghrib']
            ishaTime = row['Isha']
autoFile =  open('/config/automations.yaml', 'r', encoding="utf8")
autoString = autoFile.read()
autoFile.close()

startIdx = autoString.find('alias: newAzan')
oldString = autoString[startIdx+49:startIdx+49+144]
newString = f"trigger: time\n    at: '{dhuhrTime}:00'\n  - trigger: time\n    at: '{asrTime}:00'\n  - trigger: time\n    at: '{maghribTime}:00'\n  - trigger: time\n    at: '{ishaTime}:00'\n"
newAutoString = autoString.replace(oldString, newString)

autoFile = open("/config/automations.yaml", "w", encoding='utf-8-sig')
autoFile.write(newAutoString)
autoFile.close()

unfortunately you cannot run this as python script directly because of the imports, so I created a shell command to run it in the configuration.yaml file.

shell_command:
  updateazan: python3 /config/python_scripts/azan.py

and finally made a second automation to run the shell command every day at midnight to update the azan call times

- id: '1725199442128'
  alias: updateAzan
  description: ''
  trigger:
  - platform: time
    at: '00:01:00'
  condition: []
  action:
  - action: shell_command.updateazan
    data: {}
  mode: single

I added a second action to the last automation to reload yaml filers to load the updated automations.yaml but I’m not sure if it is needed or not

- action: homeassistant.reload_all

update 21.12.2024
There was an error recently in the automation file because they changed the trigger from

- platform: time

to

- trigger: time

the code above is updated