{"id":18250598,"url":"https://github.com/asivery/raspi-time-machine","last_synced_at":"2025-04-08T20:28:31.002Z","repository":{"id":43750733,"uuid":"511567998","full_name":"asivery/raspi-time-machine","owner":"asivery","description":"Raspberry Pi Time Machine","archived":false,"fork":false,"pushed_at":"2022-07-07T15:22:18.000Z","size":176,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-14T16:02:09.948Z","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":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/asivery.png","metadata":{"files":{"readme":"README.MD","changelog":null,"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":"2022-07-07T14:50:59.000Z","updated_at":"2023-09-26T00:03:51.000Z","dependencies_parsed_at":"2022-09-11T04:11:45.290Z","dependency_job_id":null,"html_url":"https://github.com/asivery/raspi-time-machine","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asivery%2Fraspi-time-machine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asivery%2Fraspi-time-machine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asivery%2Fraspi-time-machine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asivery%2Fraspi-time-machine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asivery","download_url":"https://codeload.github.com/asivery/raspi-time-machine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247921841,"owners_count":21018671,"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","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-05T09:45:18.379Z","updated_at":"2025-04-08T20:28:30.981Z","avatar_url":"https://github.com/asivery.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Raspberry Pi Time Machine\n\nI was inspired to write this app by the great [video](https://www.youtube.com/watch?v=0OB1g8CUdbA) by [The Science Elf](https://www.youtube.com/c/TheScienceElf) - this is not my idea.\n\nRaspberry Pi Time Machine allows you to experience how the web has changed over time. It redirects all the internet traffic coming from the Pi's ethernet port through [WaybackProxy](https://github.com/richardg867/WaybackProxy). You can configure everything both from the website hosted by the Pi and the internal 16x2 LCD.\n\n\n### Required parts\n\n- Raspberry Pi (Tested only on the 3B)\n- I2C 16x2 LCD\n- A simple rotary encoder\n\n\n### Setting up the Pi\n\n- Connect all the peripherals as shown in the diagram below (or change `raspi-configurator/config.py`):\n![Connections diagram](images/pi_diagram.png)\n\n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eLCD Connections\u003c/th\u003e\u003cth\u003eEncoder Connections\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n| LCD Pin |       RPI Pin        |\n|---------|----------------------|\n|   GND   |     Pin 14 (GND)     |\n|   VCC   |     Pin 2 (+5V)      |\n|   SDA   | Pin 3 (GPIO 2 / SDA) |\n|   SCL   | Pin 5 (GPIO 3 / SCL) |\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n| Encoder Pin |       RPI Pin        |\n|-------------|----------------------|\n|     GND     |    Pin 20 (GND)      |\n|      +      |    Pin 1 (+3.3V)     |\n|     SW      |    Pin 13 (GPIO 27)  |\n|     DT      |    Pin 16 (GPIO 23)  |\n|     CLK     |    Pin 18 (GPIO 24)  |\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n- Download and image Raspberry Pi OS Lite onto an SD card (Make sure SSH is enabled and you know the credentials for the default account, and that you **DO NOT** enable pre-configured WiFi)\n- Connect the Pi to your network using the ethernet port\n- Enable I2C in `raspi-config`\n- In Raspberry Pi OS run:\n```\nsudo apt update\nsudo apt install git -y\ngit clone https://github.com/asivery/raspi-time-machine\ncd raspi-time-machine\n```\n- Install and run i2cdetect to check on what address and bus your screen is running, if your display is **not** running on address 0x27 bus 1, adjust `raspi-configurator/config.py` before installation (Optional, but recommended)\n- Once you are sure the peripherals are all connected correctly, and the config in `raspi-configurator/config.py` is valid, run:\n```\ncd install\nsudo bash install.sh\nsudo python3 /opt/raspi-configurator/main.py --base-only\n```\n- After that, make sure the display and encoder both work, and that you can go through menus and set up WiFi. This is the most important step, as once you restart, you won't be able to connect to the pi via the ethernet port anymore. Once you make sure the WiFi works, you can restart the pi from the 'System' menu.\n- You're all done!\n\n### Setting up the client\n\nThe only configuration that needs to take place on the client computer is setting up static IP for the LAN.\n\nThe correct configuration is:\n|   Name            |   Value       |\n|-------------------|---------------|\n| IP                | 192.168.2.2   |\n| Subnet Mask       | 255.255.255.0 |\n| Default Gateway   | 192.168.2.1   |\n| DNS               | 1.1.1.1       |\n\nYou can change the time machine's configuration at http://time.machi.ne (or http://192.168.2.1:8088 If the WiFi isn't set up) from the client device, or at http://[WiFi IP]:8088 from any other device on the time machine's WiFi network.\n\n\n### Troubleshooting\n\n#### Cannot connect to WiFi after `sudo bash install.sh`\n\nSometimes there can occur a conflict between dhcpcd and NetworkManager as both programs are trying to start wpa_supplicant\n\nSolution - stop dhcpcd, (try to) kill wpa_supplicant, restart NetworkManager and retry\n```\nsudo systemctl stop dhcpcd\nsudo killall -9 wpa_supplicant\nsudo systemctl restart NetworkManager\nsudo python3 /opt/raspi-configurator/main.py --base-only\n```\n\n### Navigating the interface\n\n#### Lists\n\n- Turn the encoder to move between items\n- Press the encoder to go into a submenu or edit a field\n- Long press the encoder to go back to the previous menu\n\n#### Boolean fields\n- Turn the encoder to change between YES and NO\n- Press the encoder to confirm your choice\n\n#### Integer fields\n- Turn the encoder to adjust the number\n- Press the encoder to confirm your choice\n\n#### String fields\n- Turn the encoder to move the selected character\n- Press the encoder to add the currently selected letter to the string (or if the selected letter is '↳', to confirm your choice)\n- Long press the encoder to delete the last character\n\n#### Date fields\n- Turn the encoder to adjust the currently selected value (year / month / day)\n- Press the encoder to switch between values\n- Long press the encoder to confirm your choice\n\n### Credits:\n\n- [WaybackProxy](https://github.com/richardg867/WaybackProxy) by richardg867\n- [I2C LCD library](https://gist.github.com/DenisFromHR/cc863375a6e19dce359d) by DenisFromHR\n- [rpi-rotary-encoder-python](https://github.com/nstansby/rpi-rotary-encoder-python) by nstansby\n\n#### The parts diagram:\n\n- [Fritzing](https://fritzing.org)\n- [Rotary encoder part](https://forum.fritzing.org/t/ky-040-rotary-encoder-breakout-board-part/11073)\n- [LCM1602 module](https://fritzing.org/projects/arduino-i2c-lcd-display)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasivery%2Fraspi-time-machine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasivery%2Fraspi-time-machine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasivery%2Fraspi-time-machine/lists"}