{"id":19253431,"url":"https://github.com/stevearc/stiny","last_synced_at":"2026-05-31T16:31:21.874Z","repository":{"id":20126239,"uuid":"23396228","full_name":"stevearc/stiny","owner":"stevearc","description":"Home automation assistant","archived":false,"fork":false,"pushed_at":"2016-11-02T21:31:42.000Z","size":246,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-29T17:25:51.686Z","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":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stevearc.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-27T16:03:26.000Z","updated_at":"2016-10-19T06:59:19.000Z","dependencies_parsed_at":"2022-08-30T23:30:23.746Z","dependency_job_id":null,"html_url":"https://github.com/stevearc/stiny","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/stevearc/stiny","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stevearc%2Fstiny","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stevearc%2Fstiny/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stevearc%2Fstiny/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stevearc%2Fstiny/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stevearc","download_url":"https://codeload.github.com/stevearc/stiny/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stevearc%2Fstiny/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33739860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"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-09T18:30:53.870Z","updated_at":"2026-05-31T16:31:21.853Z","avatar_url":"https://github.com/stevearc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Stiny\n=====\nHome automation assistant\n\nCalendar Interface\n------------------\nNote: Calendar events should all have a start and end time. All-day events will\nhave some weirdness due to PST vs UTC timezones.\n\nAdding a Guest\n^^^^^^^^^^^^^^\nTo add a guest, create any event on the calendar. You can either invite the\nguest to the event, or put the following in the description:\n\n``guest: guestemail@addr.com, (555) 555-5555``\n\nYou may add multiple guests (one guest per line), and you may add any number of\nemails/phone numbers per guest (comma-separated). The email is for website\naccess, the phone number is for twilio SMS access (format is unimportant, it\nstrips out all non-digit characters).\n\nScheduling a Party\n^^^^^^^^^^^^^^^^^^\nCreate any event with 'party' (case-insensitive) in the title.\n\nStructure\n---------\nThe core webserver is a WSGI app running the pyramid framework. Those are the\n``stiny/*.py`` files. The webserver is designed to run on a machine separate\nfrom the raspberry pi relay controller. The pi runs worker code (in\n``stiny_worker/``) that creates a simple http interface for controls. We then\nuse ssh to forward a port to the webserver so the webserver can send commands to\nthe pi.\n\nLocal Development\n-----------------\n\nNow create a virtualenv and install stiny:\n\n.. code-block:: bash\n\n    $ virtualenv venv\n    $ . venv/bin/activate\n    $ pip install -r requirements_dev.txt\n    $ pip install -e .\n    $ pip install -e stiny_worker\n\nAlso set up the node package\n\n.. code-block:: bash\n\n    $ npm install\n\nYou will need certain secret tokens for accessing certain APIs (GCal, Twilio,\netc). They will be read out of environment variables. You should put them into\nyour bashrc or some other file you can conveniently source before doing\ndevelopment::\n\n  STINY_ENCRYPT_KEY - Secret key used to encrypt the beaker session\n  STINY_VALIDATE_KEY - Secret key used to validate the beaker session\n  STINY_AUTH_SECRET - Secret key used to sign the auth token\n  STINY_PROD_CLIENT_GOOGLE_CLIENT_ID - Oauth 2.0 'web application' client ID configured for your production site\n  STINY_DEV_CLIENT_GOOGLE_CLIENT_ID - Oauth 2.0 'web application' client ID configured for localhost development\n  STINY_SERVER_GOOGLE_CLIENT_ID - Oauth 2.0 'other' client ID used to get calendar access permissions\n  STINY_SERVER_GOOGLE_CLIENT_SECRET - Corresponding secret for the STINY_SERVER_GOOGLE_CLIENT_ID\n  STINY_TWILIO_AUTH_TOKEN - Auth token for twilio\n  STINY_ADMINS - Space-delimited list of emails for admin users\n  STINY_GUESTS - Space-delimited list of emails for users with unlock permissions\n  STINY_PHONE_ACCESS - Space-delimited list of phone numbers for users with unlock permissions\n  STINY_CAL_ID - Id of the calendar to check for events and guests\n\nActivate the virtualenv and run ``stiny-setup``. This will create the\n``credentials.dat`` file which will allow stiny to access the Google Calendar.\n\nEverything should be working! You can run the server with ``pserve --reload\ndevelopment.ini``, the asset pipeline with ``npm run watch``, and the worker\nwith ``stiny-worker --debug -l debug -i``.\n\nDeploy\n------\nWe're using fabric to deploy. Do ``fab help`` to get a list of commands. You\nwill probably only ever need ``fab deploy_web`` and ``fab deploy_door``.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstevearc%2Fstiny","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstevearc%2Fstiny","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstevearc%2Fstiny/lists"}