All Projects → mfreeborn → Heliocron

mfreeborn / Heliocron

Licence: other
A command line application written in Rust capable of delaying execution of other programs for time periods relative to sunrise and sunset.

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Heliocron

Crono
A time-based background job scheduler daemon (just like Cron) for Rails
Stars: ✭ 637 (+319.08%)
Mutual labels:  scheduler, cron
Quantum Core
⌚ Cron-like job scheduler for Elixir
Stars: ✭ 1,905 (+1153.29%)
Mutual labels:  scheduler, cron
Bree
🚥 The best job scheduler for Node.js and JavaScript with cron, dates, ms, later, and human-friendly support. Works in Node v10+ and browsers, uses workers to spawn sandboxed processes, and supports async/await, retries, throttling, concurrency, and graceful shutdown. Simple, fast, and lightweight. Made for @ForwardEmail and @ladjs.
Stars: ✭ 933 (+513.82%)
Mutual labels:  scheduler, cron
Gocron
定时任务管理系统
Stars: ✭ 4,198 (+2661.84%)
Mutual labels:  scheduler, cron
Sidekiq Scheduler
Lightweight job scheduler extension for Sidekiq
Stars: ✭ 1,198 (+688.16%)
Mutual labels:  scheduler, cron
Quartznet
Quartz Enterprise Scheduler .NET
Stars: ✭ 4,825 (+3074.34%)
Mutual labels:  scheduler, cron
Deno cron
A cron Job scheduler for Deno that allows you to write human readable cron syntax with tons of flexibility
Stars: ✭ 35 (-76.97%)
Mutual labels:  scheduler, cron
linda
Linda is a simple dispatcher library.
Stars: ✭ 12 (-92.11%)
Mutual labels:  cron, scheduler
Tiktok
Python web visualize build on the awesome web framework sanic
Stars: ✭ 55 (-63.82%)
Mutual labels:  scheduler, cron
Pg cron
Run periodic jobs in PostgreSQL
Stars: ✭ 1,002 (+559.21%)
Mutual labels:  scheduler, cron
Simple scheduler
An enhancement for Heroku Scheduler + Sidekiq for scheduling jobs at specific times.
Stars: ✭ 127 (-16.45%)
Mutual labels:  scheduler, cron
Cronscheduler.aspnetcore
Cron Scheduler for AspNetCore 2.x/3.x or DotNetCore 2.x/3.x Self-hosted
Stars: ✭ 100 (-34.21%)
Mutual labels:  scheduler, cron
josk
🏃🤖 Scheduler and manager for jobs and tasks in node.js on multi-server and clusters setup
Stars: ✭ 27 (-82.24%)
Mutual labels:  cron, scheduler
Gocron
Easy and fluent Go cron scheduling. This is a fork from https://github.com/jasonlvhit/gocron
Stars: ✭ 605 (+298.03%)
Mutual labels:  scheduler, cron
php-cron-expr
Ultra lightweight, Dependency free and Super Fast Cron Expression parser for PHP
Stars: ✭ 42 (-72.37%)
Mutual labels:  cron, scheduler
Geoip Updater
Download and update MaxMind's GeoIP2 databases on a time-based schedule
Stars: ✭ 29 (-80.92%)
Mutual labels:  scheduler, cron
scheduler
Task Scheduler for Laravel applications. UI from scratch
Stars: ✭ 18 (-88.16%)
Mutual labels:  cron, scheduler
asparagus
An easy to use task scheduler for distributed systems
Stars: ✭ 14 (-90.79%)
Mutual labels:  cron, scheduler
Cronicle
A simple, distributed task scheduler and runner with a web based UI.
Stars: ✭ 979 (+544.08%)
Mutual labels:  scheduler, cron
Ddns Route53
Dynamic DNS for Amazon Route 53 on a time-based schedule
Stars: ✭ 98 (-35.53%)
Mutual labels:  scheduler, cron

Heliocron

crates.io crates.io Build Status

A command line application that integrates with cron to execute tasks relative to sunset, sunrise and other such solar events.

Table of Contents

Installation

There are several ways to install heliocron on your device.

1. Pre-compiled binaries

Simply download a pre-compiled binary from the releases page.

Here's a quick compatibility table to help choose the correct binary to download:

Platform Binary
Raspberry Pi 0/1 heliocron-v0.5.0-arm-unknown-linux-gnueabi.tar.gz
Raspberry Pi 2/3/4 heliocron-v0.5.0-armv7-unknown-linux-gnueabihf.tar.gz
Linux with a 64bit CPU heliocron-v0.5.0-x86_64-unknown-linux-gnu.tar.gz

2. Install with cargo

# make sure you've got an up to date version of rust and cargo installed
# full instructions can be found at https://www.rust-lang.org/tools/install
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
.
.
# then install using cargo
$ cargo install heliocron
.
.
$ heliocron --version
heliocron 0.5.0

3. Build from source

$ git clone https://github.com/mfreeborn/heliocron
$ cd heliocron
$ cargo build --release
$ ./target/release/heliocron --version
heliocron 0.5.0

Usage Examples

Delay execution of a command relative to sunrise or sunset

The following code snippet entered into the terminal will wait until sunset on 25th Feb 2020 at the Royal Greenwich Observatory (17:32:17 +00:00) before listing the files and folders contained within the user's home directory.

$ heliocron --date 2020-02-25 --date-format %Y-%m-%d --latitude 51.4769N --longitude 0.0005W \
wait --event sunset && ls ~
Thread going to sleep for _ seconds until 2020-02-25 17:32:17 +00:00. Press ctrl+C to cancel.

Integration with Cron for recurring tasks is easy. The following snippet shows a Crontab entry which will run every morning at 2am. Heliocron will wait until 30 minutes before sunrise, before allowing the execution of the turn-on-lights.sh script.

0 2 * * * heliocron --latitude 51.4769N --longitude 0.0005W wait --event sunrise --offset -00:30 \
&& turn-on-lights.sh

Show a report of sunrise and sunset times for a given location and date

Ever wondered what time sunrise is in Edinburgh on 7th May 2065?

$ heliocron -d "7 May 2065" -f "%e %B %Y" -l 55.9533N -o 3.1883W report
LOCATION
--------
Latitude:  55.9533N
Longitude: 3.1883W

DATE
----
2065-05-07 12:00:00 +01:00

Solar noon is at:         2065-05-07 13:09:19 +01:00
The day length is:        15h 49m 51s

Sunrise is at:            2065-05-07 05:14:24 +01:00
Sunset is at:             2065-05-07 21:04:15 +01:00

Civil dawn is at:         2065-05-07 04:27:31 +01:00
Civil dusk is at:         2065-05-07 21:51:08 +01:00

Nautical dawn is at:      2065-05-07 03:19:56 +01:00
Nautical dusk is at:      2065-05-07 22:58:43 +01:00

Astronomical dawn is at:  Never
Astronomical dusk is at:  Never

Configuration

Heliocron supports reading some configuration options from a file located at ~/.config/heliocron.toml. Note that this file is not created by default, it is up to the user to create the file correctly, otherwise Heliocron will simply pass over it. In particular, you can set a default latitude and longitude (must provide both, otherwise it will fall back to the default location of the Royal Greenwich Observatory).

# ~/.config/heliocron.toml
# set the default location to Buckingham Palace
latitude = "51.5014N"
longitude = "0.1419W"

Now, using Heliocron without providing specific coordinates will yield the following output:

$ heliocron -d 2020-03-08 report
LOCATION
--------
Latitude: 51.5014N
Longitude: 0.1419W

DATE
----
2020-03-08 12:00:00 +00:00

Solar noon is at:         2020-03-08 12:11:12 +00:00
The day length is:        11h 24m 22s

Sunrise is at:            2020-03-08 06:29:01 +00:00
Sunset is at:             2020-03-08 17:53:23 +00:00

Civil dawn is at:         2020-03-08 05:55:45 +00:00
Civil dusk is at:         2020-03-08 18:26:39 +00:00

Nautical dawn is at:      2020-03-08 05:17:04 +00:00
Nautical dusk is at:      2020-03-08 19:05:20 +00:00

Astronomical dawn is at:  2020-03-08 04:37:39 +00:00
Astronomical dusk is at:  2020-03-08 19:44:45 +00:00

Observe that the location is set according to the contents of the configuration file.

Arguments passed in via the command line will override those set in the configuration file. Perhaps we want to check what is happening over at Windsor Castle without changing the configuration file:

$ heliocron -d 2020-03-08 -l 51.4839N -o 0.6044W report
LOCATION
--------
Latitude: 51.4839N
Longitude: 0.6044W

DATE
----
2020-03-08 12:00:00 +00:00

Solar noon is at:         2020-03-08 12:13:03 +00:00
The day length is:        11h 24m 24s

Sunrise is at:            2020-03-08 06:30:51 +00:00
Sunset is at:             2020-03-08 17:55:15 +00:00

Civil dawn is at:         2020-03-08 05:57:36 +00:00
Civil dusk is at:         2020-03-08 18:28:30 +00:00

Nautical dawn is at:      2020-03-08 05:18:56 +00:00
Nautical dusk is at:      2020-03-08 19:07:10 +00:00

Astronomical dawn is at:  2020-03-08 04:39:32 +00:00
Astronomical dusk is at:  2020-03-08 19:46:34 +00:00

Edge Cases

The chosen event does not occur on the given day

Sometimes, a particular event will never happen on a certain day at a certain location. For example, the Sun never drops below 18° below the horizon in England during the height of summer; astronomical dawn and dusk never occur.

When using the report subcommand, this is identified like so:

$ heliocron -d 2020-06-21 -l 52.8300N -o 0.5135E report
<-- snip -->
Astronomical dawn is at:  Never
Astronomical dusk is at:  Never

When using the wait subcommand, an error is raised and the program terminates immediately:

$ heliocron -d 2020-06-21 -l 52.8300N -o 0.5135E wait -e astronomical_dusk
Runtime error: The chosen event does not occur on this day.

The chosen event occurred some time in the past

If you try and wait for an event which happened in the past, an error will be raised and the program will terminate immediately:

$ heliocron -d 2020-06-21 -l 52.8300N -o 0.5135E wait -e sunrise
Runtime error: The chosen event occurred in the past; cannot wait a negative amount of time.

No such error arises if you just want a report from that date.

Reference

Usage

heliocron [Options] <Subcommand> [Subcommand Options]

Options

  • -d, --date [default: today]

    Specify the date, by default in ISO 8601 format (YYYY-MM-DD).

  • -f, --format [default: %Y-%m-%d]

    Specifiy the format of the date string passed to --date, using the syntax described here by the chrono crate.

  • -l, --latitude [default: 51.4769N]

    Specify the north/south coordinate of the location. If --latitude is passed as a command line option, --longitude must also be provided.

    Latitude must be a positive number between 0.0 and 90.0, suffixed with either "N" or "S" to determine north or south.

    Can be specified in a file located at ~/.config/heliocron.toml (see Configuration), although note that options provided over the command line take precedence.

  • -o, --longitude [default: 0.0005W]

    Specify the east/west coordinate of the location. If --longitude is passed as a command line option, --latitude must also be provided.

    Longitude must be a positive number between 0.0 and 180.0, suffixed with either "E" or "W" to determine east or west.

    Can be specified in a file located at ~/.config/heliocron.toml (see Configuration), although note that options provided over the command line take precedence.

  • -t, --time-zone [default: here and now]

    Specify the time zone, in [+/-]HH:MM format, at which to calculate and display times.

Subcommands

  • report

    Output the dates and times of sunrise, sunset, etc to stdout on the specified date at the specified location.

    No further options are available.

  • wait

    Put the thread to sleep until the chosen event [+ offset] occurs on the specified date at the specified location.

    • -e, --event [required]

      Must be one of:

      Event Description
      sunrise The moment when the upper edge of the solar disk becomes visible above the horizon
      sunset The moment when the upper edge of the solar disk disappears below the horizon
      civil_dawn The moment when the geometric centre of the Sun reaches 6° below the horizon as it is rising
      civil_dusk The moment when the geometric centre of the Sun reaches 6° below the horizon as it is setting
      nautical_dawn The moment when the geometric centre of the Sun reaches 12° below the horizon as it is rising
      nautical_dusk The moment when the geometric centre of the Sun reaches 12° below the horizon as it is settting
      astronomical_dawn The moment when the geometric centre of the Sun reaches 18° below the horizon as it is rising
      astronomical_dusk The moment when the geometric centre of the Sun reaches 18° below the horizon as it is setting
      custom_am Allows the user to specify the moment when the geometric centre of the Sun reaches a custom number of degrees below the horizon as it is rising
      custom_pm Allows the user to specify the moment when the geometric centre of the Sun reaches a custom number of degrees below the horizon as it is setting
    • -a, --altitude [required if --event is one of { custom_am | custom_pm }]

      Specify the number of degrees that the geometric centre of the Sun is below the horizon when using a custom_* event.

      If this option is passed for any other event, it is simply ignored.

      Example:

      # specify the custom event of Jewish dusk, commonly held to be when the centre of
      # the Sun is 8.5° below the horizon as it is setting in the evening
      $ heliocron wait --event custom_pm --altitude 8.5
      
    • -o, --offset [default: 00:00:00]

      Specify an offset, either in [-]HH:MM or [-]HH:MM:SS format, from the chosen event. Negative offsets (those which are prefixed with a '-' e.g. -01:00) will set the delay to be before the event, whilst positive offsets will shift the delay after the event.

    • --tag [optional]

      Allows specifying a custom string to describe or otherwise tag the process. When viewing all running processes, e.g. with htop, it will then be possible to filter against this tag as it appears on the command line.

      This option has no other effect on the running of the program.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].