{"id":19042981,"url":"https://github.com/thepython10110/countdown","last_synced_at":"2025-10-14T00:13:51.771Z","repository":{"id":148314991,"uuid":"612385917","full_name":"ThePython10110/Countdown","owner":"ThePython10110","description":"A countdown timer made with Python","archived":false,"fork":false,"pushed_at":"2023-03-17T15:28:26.000Z","size":67,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-21T23:15:18.484Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThePython10110.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-10T20:42:09.000Z","updated_at":"2023-03-10T20:47:35.000Z","dependencies_parsed_at":"2023-05-19T18:00:09.334Z","dependency_job_id":null,"html_url":"https://github.com/ThePython10110/Countdown","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ThePython10110/Countdown","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePython10110%2FCountdown","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePython10110%2FCountdown/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePython10110%2FCountdown/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePython10110%2FCountdown/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThePython10110","download_url":"https://codeload.github.com/ThePython10110/Countdown/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePython10110%2FCountdown/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017381,"owners_count":26086052,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T22:39:42.705Z","updated_at":"2025-10-14T00:13:51.754Z","avatar_url":"https://github.com/ThePython10110.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Countdown\nA countdown timer made with Python\n\n## Features\n- Frequent updates (as long as I can keep thinking of things to add)\n- The ability to save data to Home Assistant (given enough setup) or local files\n- Custom themes (fonts/colors)\n- Autosaving new events/themes\n- Color change based on time until event\n\n## Possible features that I may add:\n- The ability to save to multiple locations at once (for instance, `data.json` as well as Home Assistant)\n- Add tabs to the theme creation process\n- Resizable GUI\n\n## Screenshots\n![image](https://user-images.githubusercontent.com/87204246/224436282-584db486-e315-4cbe-852b-f9a23726b303.png)\n![image](https://user-images.githubusercontent.com/87204246/224436449-50db4e81-af7b-4190-8346-e36bff0f03bb.png)\n![image](https://user-images.githubusercontent.com/87204246/224436540-5ab9fc67-4091-49d1-aa76-649e981a6147.png)\n\n## Installation instructions\n0. Have Python 3 installed on a Windows computer (would probably work on other OS's with very minor tweaking)\n1. Download or clone\n2. Run `countdown.pyw`\n### Command line options:\n```\n  -h, --help            show this help message and exit\n  -i INFILE, --infile INFILE\n                        The file to load data from initally (default: data.json), after first load, loads from\n                        --outfile.\n  -o OUTFILE, --outfile OUTFILE\n                        The file to write data to (default: data.json)\n\nUse `hass` for --infile or --outfile to save to/load from Home Assistant.\n```\n\n## To use with Home Assistant\nDISCLAIMER: There may be other ways, maybe even better ways to do this. This is just a solution that worked for me. Also, my instructions may be somewhat lacking, since I don't want to reinstall Home Assistant for testing.\n1. Make sure Home Assistant is accessible. If it's not reachable at `http://homeassistant:8123`, change `hass_url` on line 17 of `hass.py` to the correct URL.\n2. Create a Home Assistant long-lived access token (click on profile picture, scroll down to the bottom), and put it in TOKEN.txt in the same folder as `countdown.py`.\n3. Install and set up Node Red through Home Assistant (if you haven't already)\n4. In Node Red, hit Ctrl/Cmd+I to open the Import menu, then paste the following flow in (this is copied from mine, but I don't know whether exporting/importing will work the way I hope it does, so be aware that it may not work):\n```\n[{\"id\":\"63755a44942c36f0\",\"type\":\"tab\",\"label\":\"Flow 1\",\"disabled\":false,\"info\":\"\",\"env\":[]},{\"id\":\"c9f84fd6c5cb7c60\",\"type\":\"ha-sensor\",\"z\":\"63755a44942c36f0\",\"name\":\"Countdown Data\",\"entityConfig\":\"d111abeb7e8729d5\",\"version\":0,\"state\":\"Foo\",\"stateType\":\"str\",\"attributes\":[{\"property\":\"countdown_data\",\"value\":\"payload.event\",\"valueType\":\"msg\"}],\"inputOverride\":\"allow\",\"outputProperties\":[],\"x\":470,\"y\":240,\"wires\":[[\"aa69980703e74c10\"]]},{\"id\":\"b216ef718851daf6\",\"type\":\"debug\",\"z\":\"63755a44942c36f0\",\"name\":\"debug 1\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"true\",\"targetType\":\"full\",\"statusVal\":\"\",\"statusType\":\"auto\",\"x\":640,\"y\":320,\"wires\":[]},{\"id\":\"5aa4df2f859774d5\",\"type\":\"server-events\",\"z\":\"63755a44942c36f0\",\"name\":\"\",\"server\":\"53eca0699b20e0a3\",\"version\":2,\"eventType\":\"countdown_data\",\"exposeToHomeAssistant\":false,\"eventData\":\"\",\"haConfig\":[{\"property\":\"name\",\"value\":\"\"},{\"property\":\"icon\",\"value\":\"\"}],\"waitForRunning\":true,\"outputProperties\":[{\"property\":\"payload\",\"propertyType\":\"msg\",\"value\":\"$outputData(\\\"eventData\\\")\",\"valueType\":\"jsonata\"},{\"property\":\"topic\",\"propertyType\":\"msg\",\"value\":\"$outputData(\\\"eventData\\\").event_type\",\"valueType\":\"jsonata\"}],\"event_type\":\"\",\"x\":230,\"y\":280,\"wires\":[[\"b216ef718851daf6\",\"c9f84fd6c5cb7c60\"]]},{\"id\":\"aa69980703e74c10\",\"type\":\"debug\",\"z\":\"63755a44942c36f0\",\"name\":\"debug 2\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"true\",\"targetType\":\"full\",\"statusVal\":\"\",\"statusType\":\"auto\",\"x\":660,\"y\":240,\"wires\":[]},{\"id\":\"d111abeb7e8729d5\",\"type\":\"ha-entity-config\",\"server\":\"53eca0699b20e0a3\",\"deviceConfig\":\"b8d832a9c5957b29\",\"name\":\"Countdown data\",\"version\":\"6\",\"entityType\":\"sensor\",\"haConfig\":[{\"property\":\"name\",\"value\":\"\"},{\"property\":\"icon\",\"value\":\"\"},{\"property\":\"entity_category\",\"value\":\"\"},{\"property\":\"device_class\",\"value\":\"\"},{\"property\":\"unit_of_measurement\",\"value\":\"\"},{\"property\":\"state_class\",\"value\":\"\"}],\"resend\":true,\"debugEnabled\":true},{\"id\":\"53eca0699b20e0a3\",\"type\":\"server\",\"name\":\"Home Assistant\",\"version\":5,\"addon\":false,\"rejectUnauthorizedCerts\":true,\"ha_boolean\":\"y|yes|true|on|home|open\",\"connectionDelay\":true,\"cacheJson\":true,\"heartbeat\":false,\"heartbeatInterval\":\"30\",\"areaSelector\":\"friendlyName\",\"deviceSelector\":\"friendlyName\",\"entitySelector\":\"friendlyName\",\"statusSeparator\":\": \",\"statusYear\":\"hidden\",\"statusMonth\":\"short\",\"statusDay\":\"numeric\",\"statusHourCycle\":\"default\",\"statusTimeFormat\":\"h:m\",\"enableGlobalContextStore\":false},{\"id\":\"b8d832a9c5957b29\",\"type\":\"ha-device-config\",\"name\":\"Countdown data\",\"hwVersion\":\"\",\"manufacturer\":\"Node-RED\",\"model\":\"\",\"swVersion\":\"\"}]\n```\n5. Deploy Node Red. You may need to go looking through the entity list for something like `sensor.nodered_\u003cSomeHexNumber\u003e` and change the entity ID to `sensor.countdown_data`.\n6. HOPEFULLY it will just work.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthepython10110%2Fcountdown","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthepython10110%2Fcountdown","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthepython10110%2Fcountdown/lists"}