Get your loadshedding schedule in your calendar and never be left in the dark! Open-source, up-to-date, and developer friendly.

Overview

eskom-calendar: loadshedding in your calendar

GitHub downloads GitHub Repo stars Twitter share
Support on Ko-Fi Support on Patreon

Loadshedding schedules in your digital calendar. No apps, no ads, up-to-date, and developer friendly.

Get itKey FeaturesUsing the dataProject goals & alternatives

How to Get It

Go to eskomcalendar.co.za and just type in your area! No apps, no adverts, no nonsense. If you want more information, keep reading.

Testimonials

Creator of EskomSePush SAfm
Good Things Guy Stellenbosch University

Key Features

Easy to understand and plan around

eskom-calendar makes planning around loadshedding as easy as it gets. Subscribe to the digital calendar for your area, and you'll see loadshedding in your schedule on your phone, laptop, smartwatch, smartfridge, alles. We'll show you loadshedding as far into the furture as Eskom allows us.

An event in your calendar means your lights are off

Many loadshedding apps don't actually tell you when your lights are off, or if they do, it's difficult to find or only shows you the very next power outage. eskom-calendar shows you all the times your lights will be off, right in your digital calendar.

Perfect for teams and businesses

If you're a team manager, add the calendars for your team members and know exactly when everyone will go dark so you don't have someone dropping off in the middle of a meeting.

Businesses can see loadshedding schedules for all their branches in one view, and prepare accordingly.

IT departments can automate turning on generators or shutting down servers (see Using the Data in Your Own Projects).

No adverts

eskom-calendar does one thing, and does it well. You get an event in your calendar if your power is going to go off, and that's it. There's no adverts, there's no bloat. Just loadshedding information. Doesn't get simpler than that, does it?

The only open source, automation friendly option

eskom-calendar was created by Boyd Kane because there was no way for a casual coder to just get loadshedding information programmatically without messing with API keys and whatnot.

To the best of our knowledge, this is the easiest way to automate away the pain of loadshedding, and it's the only open-source option to provide the times when power will be off, as opposed to just the loadshedding schedule for any given area (please get in contact if I'm wrong!, would be great to collab).

Attribution and using the data (commercially or otherwise)

The data (CSV and ICS files) are available under the CC BY-NC-SA 4.0 license. This means that

You are free to:

  • Share: copy and redistribute the material in any medium or format

  • Adapt: remix, transform, and build upon the material

But only if you follow the following terms:

  • Attribution: You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.

  • NonCommercial: You may not use the material for commercial purposes.

  • ShareAlike: If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.

  • No additional restrictions: You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.

Attribution should be done in a form similar to how StackOverflow requires it. Specifically:

  • Visually indicate that the content is from EskomCalendar in some way. It doesn’t have to be obnoxious; a discreet text blurb is fine.

  • When a specific calendar is being used, you must hyperlink directly to the website's version of that calendar (for example, https://eskomcalendar.co.za/ec?calendar=city-of-cape-town.ics). You do not have to present the full URL to the user, so long as it is clear that it is an EskomCalendar URL.

  • If no specific calendar is being used, or the machine_friendly.csv file is being used, you must either hyperlink directly to the project website (https://eskomcalendar.co.za) or directly to the project github page (https://github.com/beyarkay/eskom-calendar)

By directly, we mean each hyperlink must point directly to the specified URL in standard HTML visible even with JavaScript disabled, and not use a tinyurl or any other form of obfuscation or redirection. Furthermore, the links must not be nofollowed.

Using the Data in Your Own Projects

We are really interested to see what the developers of South Africa do with this data source.

The main file of interest will be machine_friendly.csv built from the same source of information as the calendar files. It looks something like:

       │ File: machine_friendly.csv
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ area_name,start,finsh,stage,source
   2   │ kwazulu-natal-mpofana,2022-09-25T23:00:00+02:00,2022-09-26T01:30:00+02:00,3,"https://twitter.com/Eskom_SA/status/1574014612097454080"
   3   │ kwazulu-natal-mpofana,2022-09-26T07:00:00+02:00,2022-09-26T09:30:00+02:00,3,"https://twitter.com/Eskom_SA/status/1574014612097454080"
   4   │ kwazulu-natal-mpofana,2022-09-26T16:00:00+02:00,2022-09-26T17:30:00+02:00,4,"https://twitter.com/Eskom_SA/status/1574014612097454080"

and you can just curl the file to get ahold of it. So go wild! DDoS Github if you want to 😉 . There are plenty of ideas floating around and I'd love to see more. Note that the header is finsh, not finish (so that it lines up nicely with start)

Simply download the CSV via curl (-s to be silent, -L to follow redirects)

curl -sL https://github.com/beyarkay/eskom-calendar/releases/download/latest/machine_friendly.csv
area_name,stage,start,finsh,source
free-state-seretse,4,2022-09-10T10:00:00+02:00,2022-09-10T12:30:00+02:00,"https://twitter.com/Eskom_SA/status/1568494585113976835"
free-state-seretse,4,2022-09-10T18:00:00+02:00,2022-09-10T20:30:00+02:00,"https://twitter.com/Eskom_SA/status/1568494585113976835"
...

Get all data for a specific area

curl -sL https://github.com/beyarkay/eskom-calendar/releases/download/latest/machine_friendly.csv \
  | grep stellenbosch
western-cape-stellenbosch,4,2022-09-10T14:00:00+02:00,2022-09-10T16:30:00+02:00,"https://twitter.com/Eskom_SA/status/1568494585113976835"
western-cape-stellenbosch,4,2022-09-10T22:00:00+02:00,2022-09-11T00:30:00+02:00,"https://twitter.com/Eskom_SA/status/1568494585113976835"
...

Get all data for a certain day in a certain area

curl -sL https://github.com/beyarkay/eskom-calendar/releases/download/latest/machine_friendly.csv \
  | grep cape-town-area-15 \
  | grep 2022-09-11
city-of-cape-town-area-15,4,2022-09-11T00:00:00+02:00,2022-09-11T02:30:00+02:00,"https://twitter.com/Eskom_SA/status/1568494585113976835"
city-of-cape-town-area-15,4,2022-09-11T08:00:00+02:00,2022-09-11T10:30:00+02:00,"https://twitter.com/Eskom_SA/status/1568494585113976835"
...

Get the file in Python

(mac users you might need this if you get an SSL error)

import pandas as pd
url = "https://github.com/beyarkay/eskom-calendar/releases/download/latest/machine_friendly.csv"
df = pd.read_csv(url, parse_dates=['start', 'finsh'])

Feel free to open a PR with any other snippets or languages you think of!

Project Goals and Alternatives

eskom-calendar tries to achieve the following goals:

  • Be open-source, easy to integrate with, and encouraging of new ideas
  • Provide an accesible information source for loadshedding in South Africa
  • Be dead simple to use

eskom-calendar does not try to:

  • Solve every solution itself. It embraces the Unix philosophy of do one thing, and do it well. Calendars are provided as an example of what's possible, but the heart of it is the open-source data with which websites, apps, bots, automations, etc, can be built.
  • Compete. eskom-calendar tries to be the best product for users, but chasing "competitors" is distracting at best, pointless at worst.

The best known alternative would be EskomSePush, but the author didn't want another app, and wanted to see the whole loadshedding schedule at a glance. Hence eskom-calendar was born (making it open source was just the default).

Contributors

All Contributors

Boyd Kane is the creator and maintainer. Reach out on twitter if you want to chat in private, otherwise open an issue!

Boyd Kane
Boyd Kane

⚠️ 💻 🐛 📖 🚧
Shaun
Shaun

🚧
cliffbattco
cliffbattco

🚧
Carl Combrinck
Carl Combrinck

🐛
Luc Hayward
Luc Hayward

🐛

Contributing

Please see CONTRIBUTING.md.

Support

This project is funded by vibes and good words at the moment. If you like what I do, or you use the project commercially, please consider supporting me:

Comments
  • Brute forcing the Eskom loadshedding

    Brute forcing the Eskom loadshedding "API"

    Eskom has a REST API of a kind which powers https://loadshedding.eskom.co.za/. For example,

    https://loadshedding.eskom.co.za/LoadShedding/GetStatus
    

    Gets the current loadshedding stage and

    https://loadshedding.eskom.co.za/LoadShedding/FindSuburbs?searchText={query}&maxResults=300
    

    Will search for the suburb {query} (as long as it's longer than 3 characters).

    There's also

    https://loadshedding.eskom.co.za/LoadShedding/GetMunicipalities/?Id=7
    

    Which will get all municipalities for the 7-th province (you've got to figure out which one is the 7th for yourself though).

    There are also a few other API endpoints, but they're not supper important to this discussion.

    I'm wondering what other APIs there are out there. Because if there's a GetStatus API, then there has to be a computer-friendly schedule somewhere behind the scenes so that the GetStatus request can be up-to-date.

    Brute forcing the endpoints isn't terribly difficult, it'll just take a while. I've written a script to brute force all endpoints that start with get which will hopefully get most of the endpoints (although will necessarily miss some of them).

    So far I've found:

    • https://loadshedding.eskom.co.za/LoadShedding/getagfu
    • https://loadshedding.eskom.co.za/LoadShedding/getadnb
    • https://loadshedding.eskom.co.za/LoadShedding/getgog
    • https://loadshedding.eskom.co.za/LoadShedding/getatxv
    • https://loadshedding.eskom.co.za/LoadShedding/getcsys
    • https://loadshedding.eskom.co.za/LoadShedding/getfhuz

    Which all return server errors (from the script, at least), but that's the same error as the GetMunicipalities endpoint returns if you don't provide the correct query parameters (like https://loadshedding.eskom.co.za/LoadShedding/GetMunicipalities)

    I've got no idea what these do, but will investigate over the next few weeks.

    opened by beyarkay 12
  • Create website frontend

    Create website frontend

    Github releases are great, but they're a bit intimidating and unintuitive for those who don't know code. Make a frontend (probably via github pages) on which to host the links. This should include:

    • [ ] some method of searching or filtering the calendars so that the user doesn't have to scroll through 300+ calendars
    • [ ] Preferably the links should be clickable, and result in the user being subscribed to the correct calendar
    • [ ] A more user-friendly description of the different calendars, explaining which human-readable suburbs are included in each area
    enhancement 
    opened by beyarkay 11
  • Missing area schedule: Brackenhurst / CoCT issues

    Missing area schedule: Brackenhurst / CoCT issues

    What area(s) couldn't you find on eskomcalendar.co.za? Please also give the province/municipality, our beautiful country has a surprising number of places that are named the same as each other. If you know what your area is named on EskomSePush, including that also helps a lot.

    Brackenhurst (1) | City of Ekurhuleni

    Where did you hear about eskomcalendar.co.za? This really helps us figure out what's working!

    Any other information If you've got any other info you think might be helpful, feel free to leave it here

    This should be part of the gauteng-ekurhuleni-block-1.ics, but the file under releases seems to have the wrong time for the area. It shows loadshedding will be at 18:00-20:00 at Stage 3 on Sunday the 9th of March. However, that's wrong, as other apps shows loadshedding between 20:00-22:00 at Stage 2.

    waiting-on-maintainer missing-area-schedule 
    opened by KevinCowleys 8
  • Missing area schedule - Glen Marais B3

    Missing area schedule - Glen Marais B3

    What area(s) couldn't you find on eskomcalendar.co.za? You already have Glen Marais B14 but the schedule unfortunately is not the same as Glen Marais B3 So it's still part of Ekurhuleni Municipality.

    Where did you hear about eskomcalendar.co.za? Surprisingly, from Solar Assistant with their new beta update.

    Thanks for the great work!

    bug waiting-on-maintainer missing-area-schedule D-ekurhuleni 
    opened by NEoKhajitt 8
  • No 2023 load shedding slots shown for all areas except Cape Town

    No 2023 load shedding slots shown for all areas except Cape Town

    I'm not 100% sure this is all areas except Cape Town, but this is what I've observed from opening random ics files and comparing the average file sizes for the areas.

    I suspect this is an issue with going across years in manually_specified.yaml. Cape Town seems unaffected because it has new load shedding events starting in 2023, while the current event covering the rest of the country started in 2022.

    Cape Town was probably also affected by this issue between 22:00 on the 31st and 5:00 on the 1st, but this wasn't as noticeable because it is only a 7-hour period.

    opened by robotic-coder 7
  • No calendar data pulling through for eastern-cape-kareedouw.ics

    No calendar data pulling through for eastern-cape-kareedouw.ics

    Either pre-viewing the calender (from iPhone), or subscribing to the .ics yields no events... Tested while already having another calendar successfully subscribed, and adding and removing others to test.

    https://github.com/beyarkay/eskom-calendar/releases/download/latest/eastern-cape-kareedouw.ics

    bug waiting-on-investigation waiting-on-time missing-area-schedule 
    opened by KheffiPL 7
  • Add Loadshedding for Stellenbosch Farms: Cloetesville/Raithby/etc

    Add Loadshedding for Stellenbosch Farms: Cloetesville/Raithby/etc

    mich-a-b

    Congrats for being on the radio. Could you also have a look at adding Stellenbosch/Cloetesville ?

    Currently struggling to find a source of information about the loadshedding schedule in Cloetesville. There's this page, although I'm not sure when Stellenbosch central is shed by stellenbosch and when it's shed by Eskom

    @mich-a-b could you confirm that you use the timetable in the link?

    Alternatively, EskomSePush reference this link as their source of information for Cloetesville, although it doesn't seem to load:

    http://stellenbosch.gov.za/news/notices/notices-engineering/6330-loadshedding-stage-1-4-schedule-2018/file

    bug good first issue waiting-on-time missing-area-schedule 
    opened by beyarkay 7
  • Are there any objections with reading the machine_friendly.csv from Github in a closed source program?

    Are there any objections with reading the machine_friendly.csv from Github in a closed source program?

    Congratulations @beyarkay this looks like a really impressive project.

    It's licensed as GPLv3 which typically covers the source code rather than the generated output, but I would like to make sure I honor what you intended with the license. Do you have any objections to a closed source program that already has many users to read the machine_friendly.csv file from Github and show load shedding events to it's users? It will include attribution to this project and encourage participation.

    opened by pierre-pretorius 6
  • gauteng-tshwane-group-10 not updating

    gauteng-tshwane-group-10 not updating

    From this twitter comment: https://twitter.com/inetpro/status/1615349114312474624?s=20&t=lvxFhL5HYED3BRIsQsVpog

    Thanks for your efforts. I worked on it this weekend and thought I had it all figured out but then I noticed yesterday that the data for gauteng-tshwane-group-10 is not updated. Just tried again and still only get data up to 2023-01-16 20:00:00.

    opened by beyarkay 6
  • Please remove emoji's

    Please remove emoji's

    Hi Boyd,

    The calendars are working super great, but with the stage 6 load shedding their calendars are filled with the negative emoji's also.

    Could you please consider removing them, or replacing them with something happier?

    Thank you

    Christo Versteeg

    opened by Mammouth100 6
  • Publish latest ICS files online

    Publish latest ICS files online

    First, thanks for this project, it's a great initiative.

    I think it'd be great if the latest ICS files could be published online somewhere (maybe GitHub pages?), deployed automatically with CI when there's a new release, so that they'd always be up to date. Then users could subscribe to them with their calendar apps (most support subscribing to an ICS file ("feed") online), or even with e.g. Google Calendar

    opened by zeorin 6
  • Missing area schedule

    Missing area schedule

    What area(s) couldn't you find on eskomcalendar.co.za? Mangaung universitas (4) on EskomSePush

    Where did you hear about eskomcalendar.co.za? SolarAssistant

    Any other information Times are not correct according to EskomSePush end actual schedule

    waiting-on-maintainer missing-area-schedule D-mangaung 
    opened by pjburg3r 1
  • Missing area schedule wonderboom 16

    Missing area schedule wonderboom 16

    What area(s) couldn't you find on eskomcalendar.co.za? Please also give the province/municipality, our beautiful country has a surprising number of places that are named the same as each other. If you know what your area is named on EskomSePush, including that also helps a lot.

    Where did you hear about eskomcalendar.co.za? This really helps us figure out what's working!

    Any other information If you've got any other info you think might be helpful, feel free to leave it here

    waiting-on-maintainer missing-area-schedule 
    opened by HAHomeless 0
  • Update open graph tags to better image

    Update open graph tags to better image

    Current image (particularly on twitter) is not an amazing preview of the site:

    image

    Updating this to a new image would be helpful.

    Additionally for twitter there are additional specific tags that's can further improve sharing. Twitter cards docs

    opened by LucHayward 0
  • Missing area schedule

    Missing area schedule

    Good day

    The area that i cant get is the Secunda Outlying area in Mpumalanga on the EskomSePush app not sure if it falls under Govan Mbeki

    What area(s) couldn't you find on eskomcalendar.co.za? Please also give the province/municipality, our beautiful country has a surprising number of places that are named the same as each other. If you know what your area is named on EskomSePush, including that also helps a lot.

    Where did you hear about eskomcalendar.co.za? This really helps us figure out what's working!

    Any other information If you've got any other info you think might be helpful, feel free to leave it here

    waiting-on-maintainer missing-area-schedule 
    opened by engelbho 2
  • Some CoCT areas don't have suburb names

    Some CoCT areas don't have suburb names

    Some areas in area_metadata.yaml for Cape town don't have actual searchable suburb names (12, 13, 16, 4 9 ), which is a real pain for users. Rather figure out the list of suburbs in each area and include those names.

    opened by beyarkay 0
Releases(latest)
Owner
Boyd Kane
Studying an MSc in Computer Science. Creator of eskom-calendar. Ex-AWS intern.
Boyd Kane
Get up-to-date departure times for Munich public transport in your terminal.

MVG Fahrinfo MVG Fahrinfo is a CLI tool to keep up-to-date with latest departure times of Munich public transport. The app is a native binary and uses

Faisal Bin Ahmed 70 Nov 14, 2023
H2O Open Source Kubernetes operator and a command-line tool to ease deployment (and undeployment) of H2O open-source machine learning platform H2O-3 to Kubernetes.

H2O Kubernetes Repository with official tools to aid the deployment of H2O Machine Learning platform to Kubernetes. There are two essential tools to b

H2O.ai 16 Nov 12, 2022
A Yocto setup and management tool that helps you keep your environment up-to-date and in-sync with your team

yb (Yocto Buddy) yb is designed to make it easy to setup and (perhaps more importantly) keep Yocto environments up-to-date and in-sync with your team.

null 13 Oct 31, 2022
A dark and light Neovim theme written in fennel, inspired by IBM Carbon.

oxocarbon.nvim Note: The old rust version can be found on the rust branch of this repository Oxocarbon is looking for ports! If you're a user of anoth

Nyoom Engineering 690 Jun 29, 2023
You'd never guess what this did.

FlashbangVST A plugin I made to test out making VSTs in Rust. This is possibly one of the best things I have ever made. If you make something using th

Mobster the Lobster 2 Nov 20, 2022
I will be attempting Advent of Code 2022 with Rust, a language I have never learned before.

Advent of Code 2022 This year, I will be attempting Advent of Code with Rust, a language I have never learned before. I will also be taking some notes

null 4 Jan 7, 2023
🎦 ezz is a simple CLI tool to schedule Zoom meetings

ezz ezz (cheesy abbreviation for easy Zoom) is a simple CLI tool to schedule Zoom meetings. Install With cargo installed: $ cargo install --path . Aut

Eduardo Cuducos 6 Dec 23, 2022
Example of an dark-mode toggle button based on progressive enhancement

Leptos Starter Template This is a template for use with the Leptos web framework and the cargo-leptos tool. Creating your template repo If you don't h

Leptos 5 Jan 12, 2023
⚡️ Lightning-fast and minimal calendar command line. Written in Rust 🦀

⚡️ Lightning-fast and minimal calendar command line. It's similar to cal. Written in Rust ??

Arthur Henrique 36 Jan 1, 2023
carl is a calendar for the commandline.

carl is a calendar for the commandline. It tries to mimic the various cal(1) implementations out there, but also adds enhanced features like colors and ical support.

Birger Schacht 1 Jan 2, 2022
Linkal - A public-calendar aggregator server

Linkal Linkal is a public-calendar aggregator server. Given a set a public calendars links, it can make a CalDav client believe all these calendars ar

Julien Malka 87 Dec 10, 2022
🦾 An AI developer that evolves to fit your needs

collective Discord An AI developer that evolves to fit your needs. collective is an AI developer that adapts to your coding style. When prompted to cr

Collective AI 5 Mar 30, 2023
Easy, Simple, Clean. Making status bars reliable and up-to-date.

Simple Status Easy, Simple, Clean. Making status bars reliable and up-to-date. Installation Compiling simple_status yourself doesn't require much. Ins

James Butcher 5 Aug 1, 2022
httm prints the size, date and corresponding locations of available unique versions of files residing on ZFS snapshots

httm prints the size, date and corresponding locations of available unique versions of files residing on ZFS snapshots, as well as allowing their interactive viewing and restoration.

null 837 Dec 30, 2022
zigfi is an open-source stocks, commodities and cryptocurrencies price monitoring CLI app, written fully in Rust, where you can organize assets you're watching easily into watchlists for easy access on your terminal.

zigfi zigfi is an open-source stocks, commodities and cryptocurrencies price monitoring CLI app, written fully in Rust, where you can organize assets

Aldrin Zigmund Cortez Velasco 18 Oct 24, 2022
This utility traverses through your filesystem looking for open-source dependencies that are seeking donations by parsing README.md and FUNDING.yml files

This utility traverses through your filesystem looking for open-source dependencies that are seeking donations by parsing README.md and FUNDING.yml files

Mufeed VH 38 Dec 30, 2022
A blazing fast command line license generator for your open source projects written in Rust🚀

Overview This is a blazing fast ⚡ , command line license generator for your open source projects written in Rust. I know that GitHub

Shoubhit Dash 43 Dec 30, 2022
An ebpf knowledge base, based on llama_index and bpf-developer-tutorial

ebpf-knowledge-base An ebpf knowledge base, based on llama_index and bpf-developer-tutorial Usage First, you need to clone this repo: git clone --recu

eunomia-bpf 7 Apr 1, 2023
Nexa programming language. A language for game developers by a game developer

NexaLang Nexa programming language. A language for game developers by a game developer. Features High-Level: Nexa is an easy high level language Two M

Sabe 3 Aug 21, 2023