From 651a4db54083439bc2637deeafda0375bb796029 Mon Sep 17 00:00:00 2001 From: "Fredrick W. Warren" Date: Mon, 15 Apr 2019 15:15:57 -0700 Subject: [PATCH] Inital Commit --- .envrc | 2 ++ .gitignore | 3 ++ Biko_Regular.otf | Bin 0 -> 44796 bytes README.md | 11 +++++++ environmental_benefits_blank.png | Bin 0 -> 12623 bytes requirements.txt | 14 +++++++++ solar_edge.py | 51 +++++++++++++++++++++++++++++++ 7 files changed, 81 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 Biko_Regular.otf create mode 100644 README.md create mode 100644 environmental_benefits_blank.png create mode 100644 requirements.txt create mode 100755 solar_edge.py diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..ec8137c --- /dev/null +++ b/.envrc @@ -0,0 +1,2 @@ +layout python-venv +dotenv diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ade7961 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.direnv/* +__pycache__/* +.env diff --git a/Biko_Regular.otf b/Biko_Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..da7b16e4994d4884ccca36bbe4cba3dff4d12e0f GIT binary patch literal 44796 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%0DOs3G^1@Pq0GW2P6oRD`EtF(h!2bo@ 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 OnX;q&-X}t;>3;$GSSfh` literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..ec3d053 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# Solar Edge Status Updater +When placed in a cron job this uppdater will make an https call to a json api to retrieve the co2 savings and equivenant trees planted and overlay those numbers on a graphic and upload them to the website. + +# Dependancies +Python 3 and the packages `python-dotenv` and `Pillow` +The font `Biko_Regular.otf` +A `.png` graphic to write text on. + + +# Bulid Instructions + diff --git a/environmental_benefits_blank.png b/environmental_benefits_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..972833f08352cfc28064a2b1d18fd29d144ecadd GIT binary patch literal 12623 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 TW`^g_HAqV+h?jr(